Semantic Timing and Motion Tokens (CEM) — Canonical Spec

Status: Canonical (v1.0)

Last updated: December 21, 2025

Audience: Design Systems, Product Design, Front-End Engineering

Applies to: UI animation timing (durations and easing curves)

Companion specs:


1. Purpose and scope

This spec defines the CEM contract surface for motion timing:


2. Taxonomy placement

Related dimensions:


3. Consumer vocabulary

CEM duration names reflect how users perceive timing:

Easing names reflect intent:


4. Canonical token surface

4.1 Duration tokens (required)

cem-timing-durations
Token Value Description tier
--cem-duration-instant 50ms Blink; do not interrupt flow required
--cem-duration-noticeable 250ms Registerable but not slow required
--cem-duration-lingering 300ms Large change; allow user to track required
--cem-duration-action var(--cem-duration-noticeable) Default for interactive state changes recommended
--cem-duration-overlay var(--cem-duration-lingering) Default for overlay entry/exit recommended

Normative rules:

4.2 Easing tokens (required)

Easing tokens are expressed as CSS timing functions. R-D7-1 resolved: highlighted curves now use Material 3 “Emphasized” cubic-beziers — visibly more deliberate than smooth. Adapters SHOULD replace these with platform-appropriate emphasized curves.

cem-timing-easings
Token Value Description tier
--cem-easing-smooth ease-in-out Default; everyday unobtrusive motion required
--cem-easing-start-smooth ease-in Entrance motion required
--cem-easing-end-smooth ease-out Dismissal motion required
--cem-easing-highlighted cubic-bezier(0.2, 0, 0, 1) Attention-drawing motion (M3 Emphasized) required
--cem-easing-highlighted-start cubic-bezier(0.3, 0, 0.8, 0.15) Highlighted entrance (M3 Emphasized Accelerate) required
--cem-easing-highlighted-end cubic-bezier(0.05, 0.7, 0.1, 1) Highlighted dismissal (M3 Emphasized Decelerate) required
--cem-easing-uniform linear Neutral/mechanical (e.g. indeterminate progress) required
--cem-easing-classic ease Legacy compatibility required

Normative rules:

4.3 Spring motion (adapter-local, not canonical tokens)

R-D7-2 is resolved by not defining or reserving canonical --cem-spring-* custom properties in v1.

Reason:

Adapter guidance:

Normative rules (if springs are implemented):

4.4 Reduced-motion overrides

When prefers-reduced-motion: reduce is active, duration tokens are overridden to dramatically shorter values while preserving their relative ordering (instant < noticeable < lingering). Alias tokens (--cem-duration-action, --cem-duration-overlay) inherit automatically via var() and need no explicit override. Easing tokens are unaffected.

cem-timing-reduced-motion
Token reduced-motion value Description
--cem-duration-instant 0ms Off entirely — motion is imperceptible
--cem-duration-noticeable 50ms Dramatically shortened; signals “something happened”
--cem-duration-lingering 100ms Dramatically shortened; ordering preserved

5. Usage guidance

Easing selection:


6. Governance and versioning

Treat D7 tokens as contract-level once canonical.

Breaking (MAJOR):

Non-breaking (MINOR/PATCH):


7. Token manifest index

Token tier is encoded in the tier column of each source table. The manifest validator derives expected token names from these tables using the same XPath pattern as cem-timing.html.

Source table h6 id Tokens covered Validator derivation
cem-timing-durations --cem-duration-* (5 tokens: 3 required + 2 recommended aliases) one token per row
cem-timing-easings --cem-easing-* (8 tokens: all required) one token per row

Reduced-motion overrides (cem-timing-reduced-motion) produce no new token names — they override core duration tokens within @media (prefers-reduced-motion: reduce). Spring tokens (--cem-spring-*) are intentionally absent from the v1 manifest and default CSS output; spring motion is adapter-local until CEM defines a portable concrete encoding.