Cards move like handled paper.
Press physics covers in-place state. Flourish covers travel— an element entering, leaving, or changing place. Four rules: travel gets one spring settle and never a wobble; direction carries meaning (sent → up, filed → right, set aside → left); a held card lifts and tilts with the hand's velocity; siblings make room by moving. Every flourish honors prefers-reduced-motion.
One spring, two clocks
--spring (linear() curve, back-out fallback) with --dur-travel: 500ms for click-driven travel and --dur-unfold: 700ms for hover-driven reveals — the hand is browsing, not commanding. From Tailwind: ease-spring, duration-travel, duration-unfold.
The spring lands with one ~9% settle and is done by 85% of the duration — motion for things that change place. In-place state (press, hover) keeps the settle curve and never springs.
Settle in
New cards settle onto the surface with the spring, staggered 55ms apart.
Leave toward where the action went
Exits accelerate — things being carried away gather speed — with a slight tilt in the direction of travel. The dashed slot is the card's origin, waiting until the app removes it.
Deck & fan
A collection at rest is a deck — edges peeking, count shown. On demand it fans like a held hand of cards, and collapses back.
Edges tint from --deck-edge-1/2 when the hidden sheets have identity colors; the count chip is the honest version of a mystery pile.
Click the pile. Origin sits at 50% 135% — a wrist pivot, not a spin.
The card follows the hand
Drag lifts the card onto a deeper hard shadow; tilt is proportional to pointer velocity; the destination reads as a mono ghost label. Release is momentum-projected — a flick commits.
Grab the header. A slow drag needs the full distance; a flick commits on velocity alone — where the card was headed, not where it stopped.
Siblings make room
Auto-FLIP measures keyed children every commit and plays position changes as spring transforms.
In your app
pnpm dlx shadcn@latest add @goian/motion # lib/motion.ts tokens · springEase · flyOut · settleBack · fanAngles # hooks/use-velocity-drag.ts # hooks/use-auto-flip.ts
.settle-in entrance (+ --i stagger) .send-off / .file-away / .set-aside exits .drag-handle / .drag-lift / .drag-label / .drop-slot .deck-edges / .deck-count / .fan-item ease-spring · duration-travel · duration-unfold