Motion lab
Where motion earns its place: behaviours stage here, get worked with in real use, then promote into the system or get retired. The June 2026 brainstorm — twenty effects — has been fully evaluated: 26 behaviours are core, two were decided against, and nothing is pending. The lab stands ready for the next batch.
Every staged behaviour has shipped or been retired. New candidates stage here before they touch the system.
See the motion systemWhere everything lives now
The lab's forwarding addresses — every evaluated behaviour has a home on a real surface, demonstrated in context rather than in a rig.
| Behaviour | Home | In context |
|---|---|---|
| Card lift + phantom-hover guard | /pages | Review cards in the Reviews mock; shared-surface cards on Components. |
| 3D tilt + cursor-follow glow | / | The system-pulse hero on the Overview — one hero per view. |
| Route transitions | / | Global — every navigation in this app rides the panel handover. |
| Command palette | / | Global — ⌘K anywhere; navigation + motion pace commands. |
| Shared surface morph | /components#surface-morph | Cards grow into detail surfaces; helpers in $lib/motion/morph. |
| Snap-into-place reorder | /components#snap-reorder | Reorderable widgets; createSnapDrag in $lib/motion/snap. |
| Loading states (skeleton · cascade · roll) | /components#loading | Skeletons crossfade to cards; numbers roll after. |
| AI generation motion | /components#ai | Border sweep, text shimmer, pulsing caret, label morph. |
| Completion celebration | /components#celebration | CheckDraw — the approved/published/completed moment. |
| Ambient empty state | /components#states | The empty state breathes; the watch-dot pings. |
| Animated counters + meter inertia | /objects#metric | The workload metric rolls in and fills with sheen (also on Pages). |
| Icon micro-motions | /elements#buttons | Hover previews every glyph’s move; events play it in full. |
| Press dips, selection slides | /elements#buttons | Buttons press; the ink seg’s black thumb glides Table ↔ Cards. |
| Drawer with parallax | /dialogs#drawer | The page concedes the space — two honest layers. |
| Spatial depth | /dialogs#spatial | Opt-in 2% recede behind high-stakes confirms. |
| Row reordering (FLIP) | /motion | Core since V1 — the list settle demo lives on the Motion page. |
Decided against
The no is as documented as the yes. These were built, evaluated in real use, and retired — they can be revisited, but they re-enter through the lab like anything else.
| Behaviour | Why it was retired | Date |
|---|---|---|
| Magnetic button | The shell drifting toward the pointer read as pursuit, not polish. The press already answers the hand; the pull added motion without information. | 2026-06-12 |
| Blanket press coverage | Scaling facets, tabs, nav items and option fills on press muddied the grammar and broke fills out of their frames. Settled rule: PRESS DIPS (actions — buttons, cards), SELECTION SLIDES (choosing — the marker moves). Choosing is never a press. | 2026-06-12 |
How the next batch works. A candidate behaviour gets a registry entry with stage: 'lab' and a usage contract, a test rig on this page, and a version bump.
It earns core — or this table — through real use. The calm budget never moves: 80% stable · 15% smooth feedback · 5% delight.