Found it, grown from the throw
Tonight's last swipe: the card flies off hard right, comes back from the left and slowly grows into a glass Found it. Three ways to do it, side by side. Throw the card (drag it right, or tap Throw), try to swipe the result away, and switch on slow motion or Reduce Motion.
Rounds · 1 (this): Today from the iOS simulator, three directions, the beat table.
Today
iPhone 17 Pro simulator (iOS 26.5), the ios/review dev client against staging, Tonight mode, one hard right swipe. Frames from a screen recording.

carve(3) fires here.
tabBarAway, 448 ms CHISEL).
w500 load), and the next card is still sliding off behind.
- Swipe to dismiss, as you described: I couldn't make it happen on the simulator. Left, right, down and left-edge swipes, plus a second throw during the turn, all left Found it in place. Today's page has no gesture of its own (
FoundIt.tsx). The poster still looks like a deck card, though, and that invites a swipe. Each option below makes swiping away impossible by construction: the layer holds no pan gesture, and a touch shield covers the deck while things move. - No glass where it matters: the page is an opaque sheet (
bg-background,FoundIt.tsx:116). The only glass is the drawn where-to-watch card (:158). Nothing uses native Liquid Glass. - The moment doesn't pair with the throw: the card leaves right, then a different page slides in from the left, carrying a second copy of the poster. The thrown card never comes back.
- Haptics:
carve(3)fires at the throw (swipe.tsx:536), which is the "a chapter completes" haptic. The landing gets nothing. - Reduce Motion is a jump cut: the turn's duration drops to 0 (
swipe.tsx:537). The brand calls for a quick cross-fade. - Kept as is: the title's still as the background ("Still"), the copy, where to watch in plain words, Keep swiping and Done as the only actions, and Escape and Android back working like Keep swiping (
FoundIt.tsx:89).
The moment, side by side
Timings are the app's own: the throw DURATION.slow 280 ms CHISEL, the return GROW 580 ms, the deck stepping back FOLD 460 ms, glass rising on SPRING.sheet (damping 26, stiffness 280, mass 0.9). The dot track under each phone marks the haptics: a light cut at the throw and a success notification at the land. Glass is drawn in this page. In the app it's native Liquid Glass on iOS 26 and the drawn Glass on web and Android.
Try to swipe each result away: in A and B nothing moves. In C only the sheet moves, between its two detents, and a pull down springs back. Keep swiping or Done takes you back to the deck.
Beat by beat
| A · Loop and rise (recommended) | B · The ticket | C · Dock | |
|---|---|---|---|
| Motion |
|
|
|
| Haptics | cut() when the drag crosses the threshold (as today), carve(1) on release instead of carve(3), and one success notification when the card lands. A new found() in haptics.ts, the same on all three. |
The same, with the success when the sheen starts. Nothing else, so the sheen and the haptic read as one beat. | The same, with the success as the card docks. Snapping to a detent ticks (tick()), like any sheet. |
| Can't be swiped away | The card on Found it is a picture, not a SwipeCard, and the layer has no pan gesture. A touch shield covers the deck from the release until the land, so a second flick can't hit the next card. Dismiss only with Keep swiping or Done (Escape and Android back act as Keep swiping, as today). |
Same as A. The ticket fills the screen, so nothing behind it can be touched at all. | The sheet moves only between its detents. A pull below the middle one rubber-bands back. That breaks the rule that every sheet pulls down to close, so it's a second sheet behavior to maintain. |
| Where to watch | In the panel under the title: the provider's logo, "Streaming on Paramount+", "Included with your services" with its check, then the JustWatch credit. Same words as today. | On the ticket's stub, below the perforation, then the credit. The stub gives it a clear home. | In the sheet beside the docked poster. The large detent adds the overview, which Found it doesn't show today. |
| VoiceOver | When the card lands, focus moves to the heading, read as "You found something to watch, Interstellar". The layer is accessibilityViewIsModal, so the deck behind can't be reached. The escape gesture (two-finger Z) is Keep swiping. With VoiceOver on, the motion runs in the Reduce Motion form. |
Same as A. The decorative sheen is hidden from VoiceOver. | Same as A. The sheet's detents add an "Expand" action instead of making the user drag. |
| Reduce Motion | All three: no flight and no loop. The card fades out where it was, and Found it cross-fades in whole (180 ms) with its glass already there. The success haptic still fires. Turn on the toggle above to see each. | ||
| Web and Android | The same motion on Reanimated. The panel uses the drawn Glass (expo-blur on Android with blurMethod, backdrop blur on web), button hover on web and ripples on Android. Web has no haptics; the land is the cue. Escape is Keep swiping, focus stays in the dialog, and Android back is Keep swiping. |
Same. A screen-sized blur that grows while it animates is the costliest frame on mid-range Android: fall back to a fade there if it drops frames. | Same. The detent drag works with a pointer on web, and keyboard users get the expanded view from a button. |
| Cost | Low to medium, ships over the air. A FoundIt layout change, new choreography in onFound, the existing LiquidLayer with materialize (Spotlight already uses it), and one haptic helper. expo-glass-effect and expo-haptics are already in the build. |
Medium to high, ships over the air. A card-to-ticket morph, a perforated mask, and the sheen. The riskiest of the three for dropped frames. | Medium, ships over the air. It needs Sheet to learn non-dismissible detents, a second way for sheets to behave. |
| What it drops | The page turn, so the deck no longer slides right. The card itself is the thing that comes back. | The tab-bar-free calm of A. It's the loudest option, and it gets louder on every find. | The big centered poster. The title shrinks to a thumbnail at the moment it should be biggest. |
Fixes in every option
- The card that comes back is the thrown card's own image: it's already decoded, so the poster can't pop in empty the way it does today.
- A touch shield during the move from the release until the land, so a second flick can't reach the deck that's sliding away underneath.
- One success haptic at the land, and
carve(1)at the throw instead of the chapter haptic. - Reduce Motion cross-fades (180 ms) instead of cutting.
My recommendation
A, Loop and rise. It's what you described: the card you threw comes back from the left and grows up into a glass overlay. The glass is the same native material as the tab bar, it reuses LiquidLayer's materialize from Spotlight, and it's the cheapest of the three. Nothing on it can be swiped, and the only ways out are the two buttons.
Two things are worth borrowing. From B, a single sheen across the panel as the card lands, if A feels too plain on the phone. From C, the overview, if you ever want Found it to say more. I'd skip C's sheet: one that can't be pulled away would be the only sheet in Saga that behaves that way.
