Motion

Calm and purposeful. Motion here confirms what happened — it never performs. Hovers answer in 140ms, state changes in 220ms, and nothing bounces across the screen.

Durations

TokenValue
--dur-instant80ms
--dur-fast140ms
--dur-normal220ms
--dur-slow420ms

Easings

--ease-out is the default for almost everything. --ease-spring is reserved for icon micro-interactions — a check mark settling into place — never for panels or pages.

TokenValue
--ease-outcubic-bezier(0.22, 1, 0.36, 1)
--ease-in-outcubic-bezier(0.65, 0, 0.35, 1)
--ease-springcubic-bezier(0.34, 1.56, 0.64, 1)

Feel it

Rules

  • Hovers: --dur-fast, color/background only — no scale, no opacity tricks.
  • State changes (open, select, expand): --dur-normal with --ease-out.
  • No bouncy page transitions, no parallax. The content is the show.
  • prefers-reduced-motion is honored globally — tokens.css collapses every transition and animation to 0.01ms when the user asks for reduced motion. You get this for free; don't opt out of it.