UI/UX Atlas
Motion & Animation Intermediate

Motion Design Language & Brand Motion Identity

Craft a coherent, brand-expressive motion vocabulary — from easing curves and duration scales to motion tokens, brand personality, and accessible defaults.

9 min read

The full lesson

Motion communicates before users consciously notice it. The speed, weight, and direction of a transition shape how a brand feels — confident or nervous, playful or clinical, premium or generic. This happens independently of color, type, or copy.

Without a deliberate motion design language, every animator on the team makes individual calls. The result is a product that feels inconsistent and untrustworthy. A motion design language solves this by making the rules explicit, reusable, and shared across disciplines.

What a Motion Design Language Is

A motion design language is a documented set of principles and reusable values that govern how, when, and why things move in a product. It sits alongside your color, typography, and spacing systems — not as an afterthought, but as a first-class design system layer.

A complete motion design language includes at minimum:

  • Core principles — two to four opinionated statements describing the personality your motion should communicate. (“Direct. Confident. Never decorative.”)
  • A duration scale — a finite set of named time values covering micro-interactions through page-level transitions.
  • An easing vocabulary — named curves for standard, enter, exit, and spring-based motion, expressed as cubic-bezier or spring parameters.
  • Choreography rules — how elements relate to each other in time: staggering, sequencing, and grouping.
  • Use/don’t-use guidelines — explicit guidance on which motion patterns reinforce the brand and which contradict it.
  • Motion tokens — machine-readable constants that encode the above values so code and design tools share a single source of truth.

A brand motion identity is the subset of the language that is brand-differentiating. It is the decisions that, stripped of all other brand signals, would still make a motion feel distinctively yours. Most of a motion language is functional. Brand motion identity is the expressive layer on top.

Brand Motion Personality: From Adjectives to Physics

The most common mistake in brand motion work is stopping at adjective workshops. A team agrees their product should feel “warm, human, and confident” — but those words mean nothing to an engineer implementing a transition, or even to a designer prototyping one. Personality must be translated into physics.

Start with three to four personality dimensions and map each to motion properties:

Personality dimensionDuration rangeEasing characterSpring behavior
Energetic / playfulShort (80–200 ms)Overshoot, bounceHigh stiffness, moderate damping
Premium / deliberateMedium–long (250–500 ms)Decelerate heavilyLow stiffness, high damping
Clinical / preciseShort (100–200 ms)Linear or minimal easeNo spring; pure cubic-bezier
Warm / organicMedium (200–350 ms)Soft ease-in-outLow stiffness, critically damped

This translation step is what separates a motion design language that actually guides your team from one that is merely decorative documentation.

Building a Duration Scale

Duration is the most overlooked dimension of a motion system. Ad-hoc values accumulate quickly: 150ms here, 175ms there, 210ms in a legacy component. The product starts to feel like it was built by strangers. A named duration scale eliminates the negotiation.

A practical scale for a product UI has five to seven named steps:

--duration-instant:  50ms   /* State toggles: checkbox, toggle switch */
--duration-micro:   100ms   /* Hover feedback: color, underline */
--duration-short:   200ms   /* Small UI elements: tooltip, chip */
--duration-medium:  300ms   /* Standard reveals: dropdown, popover */
--duration-long:    500ms   /* Page-level transitions, dialogs */
--duration-xlong:   800ms   /* Onboarding, first-run moments */

Every component in the system picks from this scale. “Custom” durations require explicit sign-off and a documented reason why the scale failed. This discipline keeps the product feeling like a single object in time.

The scale’s range should reflect your brand personality. A playful consumer app skews shorter and faster throughout. A focused productivity tool extends the medium range to give complex interactions enough breathing room to be legible.

Easing as Brand Voice

Easing defines the quality of motion — its personality. An ease-out curve (fast start, slow finish) communicates confidence: the element arrives decisively. An ease-in curve (slow start, fast finish) communicates deference: the element leaves quietly to make room. Matching the emotional register of a curve to the intent of the interaction is the core craft of motion design.

A minimal easing vocabulary that covers most product interfaces:

Token nameCubic-bezierWhen to use
ease-standard0.4, 0, 0.2, 1Most UI state changes; entering and exiting at medium speed
ease-enter0, 0, 0.2, 1Elements entering the viewport or appearing; decelerates to rest
ease-exit0.4, 0, 1, 1Elements leaving; accelerates away cleanly
ease-emphasized0.2, 0, 0, 1.0Large, significant transitions (hero cards, full-panel slides)
ease-springstiffness: 300, damping: 30Interactive drag, expand/collapse, playful micro-interactions

These map closely to the Material Motion easing set, which has substantial research backing. But the values should be tuned to your brand personality, not copied verbatim. A stiffer ease-emphasized at 0.3, 0, 0, 1.0 reads as more aggressive. A softer 0.1, 0, 0, 1.0 reads as more luxurious.

Do

  • Derive easing curves from your brand personality adjectives and test them in prototypes at realistic durations before committing to the token.
  • Name curves semantically (ease-enter, ease-exit, ease-spring) so their intent is clear regardless of the numeric values.
  • Store curves as W3C DTCG cubicBezier tokens: four-value arrays that Style Dictionary can transform to CSS cubic-bezier(), Swift CAMediaTimingFunction, or Android Interpolator from one source.
  • Use ease-exit (accelerating) for dismissals, disappearing tooltips, and removed items — they should leave quickly and without drama.

Don't

  • Default to CSS ease or ease-in-out everywhere — these generic curves carry no brand voice, and the ease keyword is subtly inconsistent across browsers.
  • Animate with linear easing for anything user-initiated — linear motion reads as mechanical and lifeless.
  • Invent one-off cubic-bezier values at the component level without adding them to the vocabulary first — ad-hoc curves are the debt that erodes a motion language over time.
  • Use the same curve for enter and exit — they serve opposite emotional functions and should accelerate in opposite directions.

Motion Tokens: The Engineering Contract

Motion tokens are the bridge between the design language and production code. Without them, motion values are communicated via redlines, spec sheets, or in-file comments — all of which drift from reality within weeks. With tokens, a single change to the duration scale propagates to every platform automatically.

In the W3C DTCG format, duration and easing tokens look like this:

{
  "motion": {
    "duration": {
      "$type": "duration",
      "short":   { "$value": "200ms", "$description": "Small UI elements: tooltips, chips, badges." },
      "medium":  { "$value": "300ms", "$description": "Standard transitions: dropdowns, popovers, panels." },
      "long":    { "$value": "500ms", "$description": "Page-level and dialog transitions." }
    },
    "easing": {
      "$type": "cubicBezier",
      "enter":    { "$value": [0, 0, 0.2, 1],   "$description": "Elements entering the viewport." },
      "exit":     { "$value": [0.4, 0, 1, 1],   "$description": "Elements leaving the viewport." },
      "standard": { "$value": [0.4, 0, 0.2, 1], "$description": "General-purpose state changes." }
    }
  }
}

Style Dictionary v4 transforms these into CSS custom properties, Swift constants, Kotlin objects, and Compose tokens from one build step. Engineers never hard-code 300ms or cubic-bezier(0.4, 0, 0.2, 1) directly — they reference var(--motion-duration-medium) and var(--motion-easing-standard). When the motion language evolves, one token change propagates everywhere.

Distinguishing Brand Motion from Functional Motion

Not every animation is a brand expression. Confusing the two leads to over-branding functional interactions (which slows users down) or under-branding signature moments (which wastes differentiation opportunities).

Functional motion communicates state, relationship, and change. It answers “what just happened?” — a checkbox checking, a validation error appearing, a panel collapsing. Functional motion should be fast, clear, and as invisible as possible. It supports the user’s mental model without drawing attention to itself.

Brand motion communicates personality and delight. It answers “what kind of product is this?” — a signature loading sequence, an expressive empty-state illustration, the way a hero card enters on a marketing page, a celebration moment when a milestone is hit. Brand motion earns slower durations and more expressive curves because the user’s attention is already on the experience, not on completing a task.

The practical rule: in task-critical flows (checkout, form completion, error recovery), favor functional motion defaults. In low-stakes moments (onboarding, empty states, feature announcements, celebrations), invest in brand motion.

Choreography and Motion as Communication

Brand motion identity is not just individual transitions — it is how elements move in relation to each other. Choreography rules define the relational grammar of your motion language:

  • Stagger direction — does a list reveal top-to-bottom (reading order, purposeful) or bottom-to-top (feels wrong for most Western LTR layouts)?
  • Stagger interval — 30–50ms between items reads as a cohesive group; above 80ms starts to feel like sequential, disconnected events.
  • Follow-through — does a header animate before its content (hierarchy, top-down authority) or with it (flat, immediate)?
  • Spatial metaphor — does content slide in from the direction it was navigated from (spatial consistency), fade in (no spatial model), or scale from origin (the tapped element)?

A “precise, confident” brand tends toward minimal stagger, no follow-through, and a clean directional slide. A “playful, expressive” brand earns light stagger, gentle follow-through, and spring-based scale-in. Choreography is where personality is most legible at the system level.

Accessibility Is Not Optional: prefers-reduced-motion

A motion design language is incomplete without an explicit reduced-motion strategy. The prefers-reduced-motion: reduce media query is a signal that the user has requested less motion at the OS level — typically due to vestibular disorders, epilepsy risk, or cognitive preference. Ignoring it is both an accessibility failure and, in many jurisdictions, a WCAG 2.2 violation under criterion 2.3.3 (Animation from Interactions).

The right mental model is not “disable all animations when reduced-motion is requested.” It is “substitute expressive motion for essential communication.” A fade is almost always acceptable; a slide across the viewport is often not. Cross-dissolves between states preserve the sense of change without triggering vestibular symptoms. Parallax, spinning loaders, and large-scale bouncing do not.

Build reduced-motion handling into your token layer:

@media (prefers-reduced-motion: reduce) {
  :root {
    --motion-duration-short:  0ms;
    --motion-duration-medium: 0ms;
    --motion-duration-long:   150ms; /* keep page transitions, just instant */
    --motion-easing-enter:    linear;
    --motion-easing-exit:     linear;
  }
}

Setting durations to zero for micro-interactions — while keeping only essential orientation transitions at a shortened duration — covers most accessibility needs without special-casing individual components. Components that animate for purely decorative reasons get zero duration. Components that use motion to communicate state change (like an accordion height transition) keep a short fade or zero-duration snap.

Documenting and Scaling the Motion Language

A motion language that lives only in Figma or a Notion doc will not survive the first sprint with a new contributor. Effective documentation embeds the language where engineers and designers already work.

In Figma: Use component properties to expose named variants that correspond to motion tokens. Prototype motion using the easing and duration values from the token file — not arbitrary values. Named easing presets in Figma’s prototype panel should match token names exactly.

In Storybook: Each animated component should have a dedicated story demonstrating its motion behavior, with controls that expose the token values driving it. Motion stories are live documentation: they show the correct animation in the correct context and update every time the component code changes.

In a motion guidelines doc (zeroheight or equivalent): Video examples are worth more than written descriptions. Show “do” and “don’t” side-by-side at realistic scale and duration. Include the raw token values and their reasoning. The goal is that a new engineer or designer can understand both what to use and why — without asking anyone.

The anti-pattern is a static motion spec PDF (or a Figma file full of motion annotations) that drifts from the live codebase. Those artifacts are accurate on the day they are published and inaccurate a month later. Living docs co-located with code remain accurate by definition.