Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Motion

TokenValueUse
duration.micro80msToggle, checkbox check, icon swap
duration.standard200msPanel slide, dropdown open, tooltip
duration.emphasized320msSheet/drawer entry, tab transition
duration.data250msNew data point fade-in, sparkline redraw
duration.cinematic600msCommand palette open, map focus
spring.softk=120 d=18Map pin hover, KPI tile hover lift
spring.firmk=300 d=28Command palette open, drawer entry
spring.snappyk=420 d=32 m=0.8Quick UI feedback — drawer snap, reorder settle
spring.bouncyk=260 d=14Opt-in playful gestures only (e.g. a slide-to-confirm thumb)

spring.soft is the upper bound of permissible overshoot for general UI; reserve spring.bouncy for deliberate, opt-in gestures.

Variants

Reusable Framer Motion variants for enter/exit. Pair staggerContainer (on the parent) with listItem (on each child) for a cascading list/grid entrance.

VariantHidden → Visible
variants.fadeInopacity 0 → 1
variants.fadeUpopacity 0, y 6 → opacity 1, y 0
variants.scaleInopacity 0, scale 0.96 → 1
variants.listItemopacity 0, y 8 → opacity 1, y 0 (per-item)
variants.staggerContainerstaggers listItem children by 0.04s on enter

Interactions

Ready-to-spread Framer Motion props for tactile feedback. Honor reduced motion at the call site, or globally via <MotionConfig reducedMotion="user">.

InteractionEffect
interactions.presswhileTap scale 0.97, spring.firm
interactions.hoverLiftwhileHover y −2 over duration.standard

stagger()

stagger(childrenSeconds = 0.04, delaySeconds = 0) returns a parent transition config that cascades its children's entrance — e.g. transition={stagger(0.05)} on a container whose children use variants.listItem.

What never animates

  • Alert and toast appearance — instant
  • Status pip color change — instant
  • Critical metric value updates — instant
  • Form validation errors — instant
  • Live/recording pulse — opacity only, no transform

Cinematic flourishes (exactly two)

  1. Command palette open — backdrop dims 200ms, palette scales 96 → 100 with translate +12 → 0 over 280ms using spring.firm.
  2. Map focus transition — camera eases with spring.soft over 500–600ms. The primary cinematic moment in the product.