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 | /patterns | Motion recipe for interactive cards; pattern reference lists card compositions. |
| 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 | /motion | Cards grow into detail surfaces; helpers in $lib/motion/morph. |
| Snap-into-place reorder | /motion | Reorderable widgets; createSnapDrag in $lib/motion/snap. |
| Loading states (skeleton · cascade · roll) | /elements | Skeleton + CountUp elements; consumer apps assemble crossfade + cascade locally. |
| AI generation motion | /motion | Border sweep, text shimmer, pulsing caret, label morph — behavior recipe. |
| Completion celebration | /elements | CheckDraw element — the approved/published/completed moment. |
| Ambient empty state | /motion | The empty-state breathe/watch-dot ping — behavior recipe on consumer-composed empty states. |
| Animated counters + meter inertia | /elements | Meter + CountUp elements; consumer apps compose the metric surface locally. |
| 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 | /elements | Drawer element (overlay category); page-concede behavior recipe is in the motion module. |
| Spatial depth | /elements | Dialog element (overlay category); opt-in 2% recede is a behavior recipe. |
| 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.