Animation Systems (Stripe × Linear × Apple × Vercel)
This skill helps you ship tasteful, product-grade motion.
Not “more animation.”
Better animation: clarity, hierarchy, feedback, and delight—without jank.
The goals (why motion exists)
Use animation to:
- Explain hierarchy (what matters)
- Confirm action (feedback)
- Guide attention (where to look next)
- Maintain continuity (spatial relationships)
- Add polish (craft signals)
If an animation doesn’t serve one of these, delete it.
The Stripe/Linear/Apple/Vercel style (shared traits)
1) Restraint
- Fewer animations, better chosen.
- One strong hero moment; the rest is supporting motion.
2) Clear choreography
- Primary element moves first.
- Secondary elements follow with small stagger.
- Motion establishes a “reading order.”
3) Physical but not cartoony
- Use easing that feels human (soft acceleration + gentle settle).
- Avoid bouncy defaults for serious product UI.
4) Texture + depth (subtle)
- Small parallax, soft shadows, blur fades, light beams.
- Avoid heavy 3D unless it’s the hero.
Motion primitives (build these first)
Think in primitives you can reuse everywhere.
A) Fade + rise (default entrance)
Use for: text blocks, cards, modals.
- Opacity: 0 → 1
- Y: 12–24px → 0
- Duration: 300–700ms depending on size
B) Scale + fade (micro emphasis)
Use for: popovers, toasts, selected states.
- Scale: 0.98 → 1
- Opacity: 0 → 1
C) Slide (navigation)
Use for: drawers, step transitions.
- Use transform translate; avoid animating layout.
D) Morph / shared element (high craft)
Use for: tab indicators, expanding cards.
- Requires consistent geometry + measured layout.
Defaults (practical numbers)
Use these as a starting system.
Durations (rule of thumb)
- Micro (hover/press): 120–200ms
- UI state change (toggle, select): 180–260ms
- Small transitions (popover, toast): 220–320ms
- Page section entrance: 400–800ms
- Hero sequences: 800–1600ms (with internal beats)
Easing (safe set)
Pick a small set and reuse.
- UI: ease-out with gentle settle
- Emphasis: slightly stronger ease
- Entering: ease-out
- Exiting: ease-in (faster)
If implementing:
- Use your animation library’s “power2.out / expo.out” equivalents.
- Avoid elastic/bounce unless brand is playful.
Stagger
- 40–90ms per element (text lines/cards)
- Use smaller stagger on mobile
Choreography patterns
1) “Hero → supporting elements”
- Hero visual animates in first.
- Headline appears next.
- CTA appears last.
2) “Section reveal on scroll”
- Trigger when section is ~20–30% visible.
- Animate once (don’t replay on tiny scroll).
3) “Hover: lift + glow”
- Y: -2 to -6px
- Shadow: subtle increase
- Optional: border/gradient glow
4) “Focus ring + micro shift”
- For form fields: focus ring + tiny scale/translate for responsiveness.
Performance rules (non‑negotiable)
Animate the right properties
Prefer:
transform (translate/scale/rotate)
opacity
Avoid (unless necessary):
- width/height/top/left
- expensive filters on large areas
Respect the GPU
- Clamp device pixel ratio in heavy canvases (1–2)
- Keep blur subtle and small
- Avoid many simultaneous animated shadows
Reduce reflows
- Don’t measure layout every frame.
- For scroll effects, use a library that batches reads/writes.
Accessibility: Reduced Motion
Always support prefers-reduced-motion.
Policy:
- Keep content visible.
- Replace motion with instant state + subtle opacity.
- Disable scroll-scrub/pin.
Ask the user:
- “Do you want a reduced-motion mode that disables all non-essential motion?”
Implementation guidance (library-agnostic)
For simple sites
- CSS transitions for small hovers/toggles.
- Use a single motion library (GSAP or Framer Motion) for complex sequences.
For product sites
- Create a motion token set:
- durations
- easing curves
- standard offsets (8/16/24px)
- stagger defaults
For hero moments
- Use timelines (or keyframes) with labeled beats.
- Lock camera/scene movement first, then layer text.
What to ask the user
- What’s the brand lane: Stripe (polished), Linear (minimal), Apple (cinematic), Vercel (developer/product)?
- What are the key moments? (hero, scroll story, hover cards, nav transitions)
- Any performance constraints? (mobile, low-end devices)
- Reduced motion requirements?
Output format (when asked to “add Stripe/Linear-style animation”)
Return:
- Motion goals (what we’re trying to communicate)
- Motion tokens (durations + easing + offsets)
- A choreography plan (timeline beats)
- Implementation notes (perf + reduced motion)
- A small code recipe (CSS or GSAP/Framer depending on stack)
1---2name: animation-systems3description: Use when designing or implementing product-grade web motion like Stripe, Linear, Apple, and Vercel. Covers motion principles, easing/duration defaults, choreography patterns, scroll/hover interactions, performance, accessibility (reduced motion), and implementation guidance.4---56# Animation Systems (Stripe × Linear × Apple × Vercel)78This skill helps you ship **tasteful, product-grade motion**.9Not “more animation.”10**Better animation**: clarity, hierarchy, feedback, and delight—without jank.1112---1314## The goals (why motion exists)15Use animation to:161) **Explain hierarchy** (what matters)172) **Confirm action** (feedback)183) **Guide attention** (where to look next)194) **Maintain continuity** (spatial relationships)205) **Add polish** (craft signals)2122If an animation doesn’t serve one of these, delete it.2324---2526## The Stripe/Linear/Apple/Vercel style (shared traits)2728### 1) Restraint29- Fewer animations, better chosen.30- One strong hero moment; the rest is supporting motion.3132### 2) Clear choreography33- Primary element moves first.34- Secondary elements follow with small stagger.35- Motion establishes a “reading order.”3637### 3) Physical but not cartoony38- Use easing that feels **human** (soft acceleration + gentle settle).39- Avoid bouncy defaults for serious product UI.4041### 4) Texture + depth (subtle)42- Small parallax, soft shadows, blur fades, light beams.43- Avoid heavy 3D unless it’s the hero.4445---4647## Motion primitives (build these first)48Think in primitives you can reuse everywhere.4950### A) Fade + rise (default entrance)51Use for: text blocks, cards, modals.52- Opacity: 0 → 153- Y: 12–24px → 054- Duration: 300–700ms depending on size5556### B) Scale + fade (micro emphasis)57Use for: popovers, toasts, selected states.58- Scale: 0.98 → 159- Opacity: 0 → 16061### C) Slide (navigation)62Use for: drawers, step transitions.63- Use transform translate; avoid animating layout.6465### D) Morph / shared element (high craft)66Use for: tab indicators, expanding cards.67- Requires consistent geometry + measured layout.6869---7071## Defaults (practical numbers)72Use these as a starting system.7374### Durations (rule of thumb)75- Micro (hover/press): **120–200ms**76- UI state change (toggle, select): **180–260ms**77- Small transitions (popover, toast): **220–320ms**78- Page section entrance: **400–800ms**79- Hero sequences: **800–1600ms** (with internal beats)8081### Easing (safe set)82Pick a small set and reuse.83- UI: **ease-out** with gentle settle84- Emphasis: slightly stronger ease85- Entering: ease-out86- Exiting: ease-in (faster)8788If implementing:89- Use your animation library’s “power2.out / expo.out” equivalents.90- Avoid elastic/bounce unless brand is playful.9192### Stagger93- 40–90ms per element (text lines/cards)94- Use smaller stagger on mobile9596---9798## Choreography patterns99100### 1) “Hero → supporting elements”101- Hero visual animates in first.102- Headline appears next.103- CTA appears last.104105### 2) “Section reveal on scroll”106- Trigger when section is ~20–30% visible.107- Animate once (don’t replay on tiny scroll).108109### 3) “Hover: lift + glow”110- Y: -2 to -6px111- Shadow: subtle increase112- Optional: border/gradient glow113114### 4) “Focus ring + micro shift”115- For form fields: focus ring + tiny scale/translate for responsiveness.116117---118119## Performance rules (non‑negotiable)120121### Animate the right properties122Prefer:123- `transform` (translate/scale/rotate)124- `opacity`125126Avoid (unless necessary):127- width/height/top/left128- expensive filters on large areas129130### Respect the GPU131- Clamp device pixel ratio in heavy canvases (1–2)132- Keep blur subtle and small133- Avoid many simultaneous animated shadows134135### Reduce reflows136- Don’t measure layout every frame.137- For scroll effects, use a library that batches reads/writes.138139---140141## Accessibility: Reduced Motion142Always support `prefers-reduced-motion`.143144Policy:145- Keep content visible.146- Replace motion with **instant state** + subtle opacity.147- Disable scroll-scrub/pin.148149Ask the user:150- “Do you want a reduced-motion mode that disables all non-essential motion?”151152---153154## Implementation guidance (library-agnostic)155156### For simple sites157- CSS transitions for small hovers/toggles.158- Use a single motion library (GSAP or Framer Motion) for complex sequences.159160### For product sites161- Create a motion token set:162 - durations163 - easing curves164 - standard offsets (8/16/24px)165 - stagger defaults166167### For hero moments168- Use timelines (or keyframes) with labeled beats.169- Lock camera/scene movement first, then layer text.170171---172173## What to ask the user174- What’s the brand lane: Stripe (polished), Linear (minimal), Apple (cinematic), Vercel (developer/product)?175- What are the key moments? (hero, scroll story, hover cards, nav transitions)176- Any performance constraints? (mobile, low-end devices)177- Reduced motion requirements?178179---180181## Output format (when asked to “add Stripe/Linear-style animation”)182Return:1831) Motion goals (what we’re trying to communicate)1842) Motion tokens (durations + easing + offsets)1853) A choreography plan (timeline beats)1864) Implementation notes (perf + reduced motion)1875) A small code recipe (CSS or GSAP/Framer depending on stack)