motion-design
Motion Design Skill
When to Apply
Use this skill when:
- Creating UI animations (buttons, cards, modals, page transitions)
- Designing micro-interactions and feedback animations
- Building loading, success, or error states
- Animating illustrations or decorative elements
- Planning scroll-triggered or progress-based animations
- Establishing brand motion identity
- Choreographing multi-element sequences
Decision tree:
- Does it serve a functional purpose (feedback, guidance)? → Timing rules for responsiveness
- Does it express brand personality? → Motion Personality archetypes
- Does it tell a story or guide attention? → Disney principles + choreography
- Is this a complex multi-element scene? → 1/3 Rule + stagger patterns
Quick Reference: 8-Step Checklist
Before creating any animation:
- Emotional target? — joy, calm, urgency, elegance
- Motion Personality? — Playful, Premium, Corporate, Energetic
- Primary property? — position, scale, rotation, opacity
- Duration? — see duration table below
- Easing family? — entrance=decelerate, exit=accelerate
- Hero element? — apply staging principles
- Secondary + ambient layers? — add richness
- 1/3 rules? — motion distance, simultaneous elements
Three Pillars (CRITICAL)
Every animation must satisfy three pillars before any technical decisions:
| Pillar | Question | Drives |
|---|---|---|
| Emotional Intent | What should the viewer FEEL? | Easing, timing, amplitude |
| Visual Narrative | What's the micro-story? | Setup → Action → Resolution |
| Motion Craft | How do we make it believable? | Physics, secondary motion, paths |
Three motion layers (flat animation = missing layers):
- Primary: Main action the viewer follows
- Secondary: Supporting richness (shadows, icons shifting)
- Ambient: Background life (gradients, subtle pulses)
Deep dive: director/core-philosophy.md
Motion Personality
Select ONE archetype per project. Apply consistently.
| Archetype | Duration | Easing | Overshoot | Keywords |
|---|---|---|---|---|
| Playful | 150-300ms | ease-out-back | 10-20% | fun, whimsical, bouncy, cute |
| Premium | 350-600ms | cubic-bezier(0.4,0,0.2,1) | 0% | elegant, minimal, luxury, sophisticated |
| Corporate | 200-400ms | cubic-bezier(0.2,0,0,1) | 0-3% | clean, professional, business, dashboard |
| Energetic | 100-250ms | ease-out-expo | 15-30% | dynamic, energetic, bold, exciting |
Default: Corporate for UI, Playful for illustrations.
Brand Motion Identity — define three constants:
- Signature easing: One curve for 80% of animations
- Duration palette: 3 durations (quick / standard / slow)
- Entrance pattern: One consistent entry style
Deep dive: director/motion-personality.md
Property Selection
| Effect Goal | Primary Property | Secondary Properties |
|---|---|---|
| Entrance/Exit | position | opacity, scale |
| Emphasis/Attention | scale | rotation (subtle), opacity pulse |
| State Change | opacity, color | scale (press feedback) |
| Direction/Flow | position | rotation (follow path) |
| Depth/3D Feel | scale + shadow | position (parallax) |
| Loading/Progress | rotation (spinner) | scale, opacity pulse |
| Success | scale (pop) | color, rotation (checkmark draw) |
| Error/Alert | position (shake) | color, rotation (wobble) |
Simplicity threshold: Use the minimum properties needed. One = direct. Two = polished. Three+ = potentially overwhelming.
Deep dive: reference/property-selection.md
Duration Table
| Element Type | Duration | Rationale |
|---|---|---|
| Tooltip / micro-feedback | 80-120ms | Must feel instant |
| Button press / toggle | 120-180ms | Responsive feedback |
| Icon transition | 150-250ms | Clear state change |
| Card enter / exit | 200-350ms | Spatial awareness |
| Modal / dialog | 300-400ms | Focus shift |
| Page transition | 400-600ms | Context switch |
| Dramatic reveal | 600-1200ms | Theatrical build |
Distance scales duration: 100px = base. 200px = 1.3x. 400px = 1.6x.
Enter > Exit: Entrances 30-50% longer than exits. Users care about what appears.
Interactive feedback:
- Hover: <100ms
- Press: <150ms
- Release/settle: 200-300ms
- Error shake: 300-400ms (2-3 oscillations)
Deep dive: reference/timing-easing-tables.md
Easing Selection
Directional rules:
- Entrance → decelerate (fast start, gentle landing): ease-out family
- Exit → accelerate (gentle start, fast departure): ease-in family
- On-screen → smooth both ends: ease-in-out family
- Looping ambient → seamless: sine-based ease-in-out
Industry standards:
| Standard | Cubic Bezier | Use For |
|---|---|---|
| Material Design 3 | (0.2, 0, 0, 1) | Default on-screen |
| MD3 Emphasized | (0.05, 0.7, 0.1, 1) | Entrances, attention |
| MD3 Accelerate | (0.3, 0, 1, 1) | Exits, dismissals |
| Apple HIG | (0.25, 0.1, 0.25, 1) | Standard iOS |
| Snappy UI | (0.2, 0, 0, 1) | Fast, decisive |
| Gentle float | (0.4, 0, 0.2, 1) | Ambient, background |
| Bounce settle | (0.175, 0.885, 0.32, 1.275) | Overshoot, playful |
Material-based easing:
| Material | Duration Scale | Overshoot |
|---|---|---|
| Rigid (metal, stone) | 1.2x | 0% |
| Elastic (rubber, gel) | 0.8x | 15-25% |
| Fluid (water, paint) | 1.5x | 5% |
| Paper (cards, sheets) | 1.0x | 3-5% |
| Gas (smoke, fog) | 2.0x | 0% |
| Glass (brittle) | 0.9x | 0% |
Deep dive: reference/timing-easing-tables.md
Common Patterns
Button Press (Playful)
- Anticipation: Scale to 0.97 (50ms, ease-out)
- Squash: Scale to [1.04, 0.96] (100ms, ease-in)
- Follow through: Overshoots to 1.02, settles to 1.0 (spring, 200ms)
- Secondary: Shadow shrinks during press, icon shifts down 2px
- Total: ~150ms press + 200ms settle
Card Entrance (Premium)
- Start: 20px below target, opacity 0
- Path: Slight curve (10px X offset at midpoint)
- Easing: ease-out-cubic deceleration
- Follow through: Shadow arrives 50ms after card
- Secondary: Content fades in 100ms after card lands
- Staging: Other cards dim to 80%
Success State (Playful)
- Primary: Scale pop with ease-out-back
- Secondary: Checkmark draws in
- Ambient: Subtle particle burst
- Color: Green fill
- Total: 300-400ms
Error Shake (Corporate)
- Primary: Position oscillates 2-3 times, ±10-15px horizontal
- Easing: ease-in-out for sharp stops
- Color: Red tint
- Total: 300-400ms
- No overshoot: Errors feel firm
More patterns: patterns/entrance-exit.md | patterns/state-feedback.md
Choreography Essentials
Coordinated entry:
- Lead with the hero — primary element enters first or most prominently
- Spatial consistency — all elements enter from same direction
- Counter-motion — hero moves right → ambient moves left at 20-30% speed
1/3 Rule (distance): No motion travels more than 1/3 of screen without a keyframe change.
1/3 Rule (elements): With 3+ elements, no more than 1/3 in active motion simultaneously.
Stagger budgets:
| Pattern | Delay | Total Budget | Use Case |
|---|---|---|---|
| Micro cascade | 20-40ms | <200ms | List items, grid cells |
| Standard | 50-100ms | <400ms | Cards, panels, nav |
| Dramatic | 100-200ms | <600ms | Hero sections |
| Wave | 30-60ms | <500ms | Data visualizations |
Critical: Total stagger must stay under 500ms.
Deep dive: director/choreography.md
Emotion-to-Motion Map
| Emotion | Character | Path | Easing | Duration |
|---|---|---|---|---|
| Joy | Bouncy, arcs | Curved, upward | ease-out-back | 200-400ms |
| Calm | Smooth, flowing | Gentle curves | sine ease-in-out | 500-1000ms |
| Urgency | Sharp, fast | Straight lines | ease-out | 100-200ms |
| Sadness | Slow, downward | Drooping curves | cubic ease-in-out | 600-1200ms |
| Surprise | Sudden, expanding | Radial outward | ease-out-expo | 150-300ms |
| Elegance | Slow, controlled | Long arcs | (0.4,0,0.2,1) | 400-700ms |
| Playfulness | Bouncy, irregular | Arcs, squiggly | ease-out-back | 200-350ms |
Path as language: Angular = tense. Curved = friendly. Spiral = whimsical. Diagonal = purposeful. Vertical = growth/weight. Horizontal = progress.
Deep dive: director/emotion-mapping.md
Weight Classification
| Weight | Examples | Duration | Overshoot | Easing |
|---|---|---|---|---|
| Heavy | Modals, overlays | 300-500ms | 0% | Gentle, high damping |
| Medium | Cards, panels | 200-350ms | 3-5% | Moderate |
| Light | Tooltips, badges, icons | 80-200ms | 5-15% | Responsive |
Quality Rules
CRITICAL — never break
- Never linear for spatial movement — always use easing curves (linear only for spinners, progress bars)
- Never opacity-only for important state changes — combine with position or scale
- Never exceed 1/3 screen without intermediate keyframe
- Always three motion layers — primary + secondary + ambient
HIGH — strongly follow
- Match duration to element type (see tables)
- Use directional easing (ease-out entrance, ease-in exit)
- Apply Disney principles (especially anticipation, follow-through)
- Maintain consistent personality across scene
Full checklist: reference/quality-checklist.md
Troubleshooting Quick Reference
| Problem | Likely Cause | Fix |
|---|---|---|
| Looks robotic | Linear easing or no arcs | Add easing curves + arc paths |
| Feels too slow | Duration too long for element type | Check duration table, use ease-out |
| Feels cheap/flat | Missing secondary + ambient | Add shadow motion + background life |
| Too distracting | Too many elements moving | Apply 1/3 rule, reduce amplitude |
| No personality | Generic easing everywhere | Apply personality archetype consistently |
Deep dive: reference/troubleshooting.md
File Reference
Philosophy (director/):
- core-philosophy.md — Three Pillars deep dive
- decision-framework.md — Full decision pipeline
- disney-principles.md — 12 principles, UI-adapted
- motion-personality.md — 4 archetypes + brand identity
- emotion-mapping.md — Emotion → motion + color psychology
- choreography.md — Multi-element coordination
- narrative-structure.md — Micro-story framework
- context-adaptation.md — Platform, a11y, performance
Reference (reference/):
- timing-easing-tables.md — Duration + easing lookups
- property-selection.md — Property communication guide
- troubleshooting.md — Animation smells + fixes
- quality-checklist.md — Evaluation criteria
Patterns (patterns/):
- entrance-exit.md — Entrance/exit recipes
- state-feedback.md — Success, error, loading, hover
- ambient-continuous.md — Looping, breathing, parallax
- multi-element.md — Stagger + choreography recipes