Design Tokens
Motion
Animation in this design system follows one principle: motion should serve the user, never entertain the developer. Every transition has a purpose, a curve, and a duration — chosen to feel fast, natural, and interruptible.
Easing Curves
Three custom cubic-bezier curves replace CSS defaults. Each serves a specific motion context.
Duration Scale
Duration is not arbitrary — it scales with frequency and importance.
| Element | Duration | Rationale |
|---|---|---|
| Button press / hover | 100–160ms | Must feel instant. Users press buttons 100+ times per session. |
| Tooltips / small popovers | 125–200ms | Fast enough to feel responsive, slow enough to register. |
| Dropdowns / selects | 150–250ms | Origin-aware scale animation from trigger element. |
| Modals / drawers | 200–500ms | Deliberate reveals. Scale from 0.95, never 0. |
| Page transitions | 250–400ms | Fade + subtle translate. Never block navigation. |
Spring Presets
Framer Motion spring configs for physics-based animation. Springs feel natural because they respond to interruption — you can reverse mid-flight.
Animation Decision Framework
Before adding an animation, answer these four questions in order.
Rules
Non-negotiable animation principles. Break these and the UI feels off.
Performance
Rules for keeping animations at 60fps under load.