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---5
6# Animation Systems (Stripe × Linear × Apple × Vercel)
7
8This skill helps you ship **tasteful, product-grade motion**.
9Not “more animation.”
10**Better animation**: clarity, hierarchy, feedback, and delight—without jank.
11
12---
13
14## 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)
21
22If an animation doesn’t serve one of these, delete it.
23
24---
25
26## The Stripe/Linear/Apple/Vercel style (shared traits)
27
28### 1) Restraint
29- Fewer animations, better chosen.
30- One strong hero moment; the rest is supporting motion.
31
32### 2) Clear choreography
33- Primary element moves first.
34- Secondary elements follow with small stagger.
35- Motion establishes a “reading order.”
36
37### 3) Physical but not cartoony
38- Use easing that feels **human** (soft acceleration + gentle settle).
39- Avoid bouncy defaults for serious product UI.
40
41### 4) Texture + depth (subtle)
42- Small parallax, soft shadows, blur fades, light beams.
43- Avoid heavy 3D unless it’s the hero.
44
45---
46
47## Motion primitives (build these first)
48Think in primitives you can reuse everywhere.
49
50### A) Fade + rise (default entrance)
51Use for: text blocks, cards, modals.
52- Opacity: 0 → 1
53- Y: 12–24px → 0
54- Duration: 300–700ms depending on size
55
56### B) Scale + fade (micro emphasis)
57Use for: popovers, toasts, selected states.
58- Scale: 0.98 → 1
59- Opacity: 0 → 1
60
61### C) Slide (navigation)
62Use for: drawers, step transitions.
63- Use transform translate; avoid animating layout.
64
65### D) Morph / shared element (high craft)
66Use for: tab indicators, expanding cards.
67- Requires consistent geometry + measured layout.
68
69---
70
71## Defaults (practical numbers)
72Use these as a starting system.
73
74### 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)
80
81### Easing (safe set)
82Pick a small set and reuse.
83- UI: **ease-out** with gentle settle
84- Emphasis: slightly stronger ease
85- Entering: ease-out
86- Exiting: ease-in (faster)
87
88If implementing:
89- Use your animation library’s “power2.out / expo.out” equivalents.
90- Avoid elastic/bounce unless brand is playful.
91
92### Stagger
93- 40–90ms per element (text lines/cards)
94- Use smaller stagger on mobile
95
96---
97
98## Choreography patterns
99
100### 1) “Hero → supporting elements”
101- Hero visual animates in first.
102- Headline appears next.
103- CTA appears last.
104
105### 2) “Section reveal on scroll”
106- Trigger when section is ~20–30% visible.
107- Animate once (don’t replay on tiny scroll).
108
109### 3) “Hover: lift + glow”
110- Y: -2 to -6px
111- Shadow: subtle increase
112- Optional: border/gradient glow
113
114### 4) “Focus ring + micro shift”
115- For form fields: focus ring + tiny scale/translate for responsiveness.
116
117---
118
119## Performance rules (non‑negotiable)
120
121### Animate the right properties
122Prefer:
123- `transform` (translate/scale/rotate)
124- `opacity`
125
126Avoid (unless necessary):
127- width/height/top/left
128- expensive filters on large areas
129
130### Respect the GPU
131- Clamp device pixel ratio in heavy canvases (1–2)
132- Keep blur subtle and small
133- Avoid many simultaneous animated shadows
134
135### Reduce reflows
136- Don’t measure layout every frame.
137- For scroll effects, use a library that batches reads/writes.
138
139---
140
141## Accessibility: Reduced Motion
142Always support `prefers-reduced-motion`.
143
144Policy:
145- Keep content visible.
146- Replace motion with **instant state** + subtle opacity.
147- Disable scroll-scrub/pin.
148
149Ask the user:
150- “Do you want a reduced-motion mode that disables all non-essential motion?”
151
152---
153
154## Implementation guidance (library-agnostic)
155
156### For simple sites
157- CSS transitions for small hovers/toggles.
158- Use a single motion library (GSAP or Framer Motion) for complex sequences.
159
160### For product sites
161- Create a motion token set:
162 - durations
163 - easing curves
164 - standard offsets (8/16/24px)
165 - stagger defaults
166
167### For hero moments
168- Use timelines (or keyframes) with labeled beats.
169- Lock camera/scene movement first, then layer text.
170
171---
172
173## What to ask the user
174- 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?
178
179---
180
181## 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)