JM Family Design System

Hardcoded duration and easing in component code

highMotionmotiontokensconsistency

Writing `transition: opacity 250ms ease-in-out` instead of using motion tokens bypasses the system and creates animations that visually disagree across the product.

The wrong way

Setting a transition with a magic-number duration and a CSS-keyword easing — neither of which appears in the token system.

cssdo not copy
.accordion-content {
  transition:
    max-height 250ms ease-in-out,
    opacity 200ms linear;
}

Why

The motion tokens exist for the same reason the color tokens do — so two engineers building two features end up with motion that visually agrees. A hand-picked 250ms and 200ms might feel fine in isolation, but they're a touch out of step with the rest of the product, and once the system has a hundred of those tiny disagreements, the product feels uncoordinated. Worse, when the motion system evolves — different easings tuned for accessibility, slower defaults for cognitive load — your hardcoded values stay frozen and visually drift away from everything around them.

The right way

Reference the duration and easing tokens via their CSS custom properties.

css
.accordion-content {
  transition:
    max-height var(--motion-duration-normal) var(--motion-easing-default),
    opacity var(--motion-duration-normal) var(--motion-easing-default);
}

Related

Added in 1.2.0Last reviewed 2026-05-15