Enter vs Exit: Exits are faster than entrances Size relationship: Smaller elements = faster animations User-initiated: Faster feedback System-initiated: Slower feedback to draw attention
Core primitives — packages/assets/tokens/src/core/motion.json, compiled under the.mds-motionselector as--mds-motion-*custom properties. The raw duration, easing, delay, and stagger scales.Animations — packages/assets/tokens/src/motion/animation.json, compiled under.mds-animationas named--mds-transition-*/--mds-animation-*custom properties. Each is a real, directly consumable token — reference one by name the same way you’d reference a duration or easing token (seeAnimations ).
instant | |
fast | |
normal | |
relaxed | |
slow |
standard | |
entrance | |
exit | |
linear |
none | |
short | |
medium | |
long |
tight | |
normal | |
relaxed |
packages/assets/tokens/src/core/motion.json.motion/animation.json composes the core primitives into named, directly
consumable animations — not an internal build detail. Each one compiles to its
own custom property that a consumer can reference by name, the same way they’d
reference a duration or easing token, and comes in one of four shapes:transition— animates named CSS properties between states, compiled to its own--mds-transition-*custom property (e.g.buttonBackgroundtransitionsbackground-color;checkboxDefaulttransitionsbackground-colorandborder-color).transitionCompound— runs several transitions in parallel under one--mds-transition-*custom property (e.g.buttonHovercombinesbuttonBackgroundandbuttonBorder).keyframe— a from/to keyframe animation, compiled to its own--mds-animation-*custom property plus a matching@keyframesblock (e.g.buttonLoadingSpinrotates0deg → 360degon an infinite loop;checkboxCheckedscales0.8 → 1).keyframeCompound— several keyframes combined under one--mds-animation-*custom property (e.g.buttonLoadingSpinPulse=buttonLoadingSpin+buttonLoadingPulse).
button and checkbox. Because each one
references core tokens rather than raw values, retuning a duration or easing at
the core layer updates every animation that uses it.packages/assets/tokens/src/motion/animation.json.Use tokens, not literals — reference --mds-motion-*, or a named animation (--mds-transition-*/--mds-animation-*), rather than hand-writingtransition: 300ms easeso timing stays consistent and centrally tunable.Duration by interaction scale — fastfor micro-interactions,normalfor medium transitions,relaxedfor large/page-level movement,slowfor moments that deserve deliberate attention.Easing by direction — entrancefor appearing,exitfor disappearing,standardas the default,linearonly for continuous loops.Respect reduced motion — honor prefers-reduced-motion; reduce or remove non-essential animation for users who request it.
Note: these tokens are published under .mds-motionand.mds-animationand are consumable directly by name (e.g.var(--mds-animation-button-loading-spin)), but are not yet widely consumed by Momentum’s own component styles. Named animations are the intended mechanism for standardizing component motion over time.
Color — animations frequently transition between color tokens (start/end values reference the color theme).Theming — how token-based styling resolves per theme.Elevation — the other motion-adjacent foundational tokens for depth.