Animation

Guidelines

Always start with, does this animation cause friction or delight? If the answer is delight at the cost of friction, the interaction should not have animation.

Easing

The main ingredient that influences how our animations feel is easing. It describes the rate at which something changes over a period of time. It’s the most important part of any animation. It can make a bad animation look great, and a great animation look bad.

Ease type Behavior When to use
ease-out Accelerates at the beginning, then slows down Every animation that responds to user interaction
ease-in-out Starts slow, speeds up in the middle, then slows down again Elements already on screen that need to move to a new position or morph into a new shape
ease Similar to ease-in-out but more symmetrical General-purpose transitions where a balanced feel is needed
linear Constant speed throughout — no acceleration or deceleration Constant animations like loading spinners
ease-in Starts slowly and ends fast — the slow start makes interfaces feel sluggish ⚠️ DO NOT USE - Avoid in UI animations

Scale

Elements that animate from scale(0) can make an animation feel off. Try animating from a higher initial scale instead (0.9+). It makes the movement feel more gentle, natural, and elegant.

Timing

As a rule of thumb, UI animations should generally stay under 300ms. Both the size of the element and the distance it travels should inform the duration — smaller, lighter elements should feel quick and snappy, while larger elements should move slightly slower to mimic natural physics.

Duration Category When to use Examples
100ms Short Small elements with immediate feedback that cover minimal distance Checkboxes, toggles, carousel indicators
150ms or 180ms Medium The majority of UI transitions — responsive but clearly perceptible Buttons, tooltips, dropdowns, hover states
250ms Long Large elements that transition at a page level Modals, side sheets, bottom sheets
400ms+ Expressive only Never use for functional transitions — reserved for storytelling animations Animated icons, illustrated onboarding sequences

Entry vs. exit: Exit animations should be slightly faster than entry animations. Once an element has served its purpose, users don’t need to watch it leave — getting it out of the way quickly keeps the interface feeling responsive.

Accessibility

Some users experience motion sickness, dizziness, or discomfort from on-screen animations — particularly those with vestibular disorders. Operating systems expose a “Reduce Motion” preference (macOS: System Settings → Accessibility → Display → Reduce Motion) and browsers surface it via the prefers-reduced-motion media query. Any animation we add must respect this setting. The recommended approach is to scope motion inside a @media (prefers-reduced-motion: no-preference) block, so that transitions only run for users who have not opted out:

Using no-preference rather than reduce is intentional — it ensures the animation is opt-in by default and automatically disabled for anyone who has turned on Reduce Motion, without requiring an explicit reduce case to handle.

Usage

Current animations:

Tooltop

Toggle

Button press

Dropdown

Checkbox & Radio

Modal

Progress circle

Wizrd step

Search Gunnel

Powered byAlgolia