skills/animate/SKILL.md
Review a feature and add purposeful animations. Identifies static areas needing feedback, transitions, or delight, then adds motion/react or CSS transitions. Use when asked to "animate this", "add motion", "make it feel alive", or "add transitions".
npx skillsauth add howells/arc animateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
<tool_restrictions>
AskUserQuestion — REQUIRED for all user decisions (motion tone, plan approval). Never ask questions as plain text. Keep context before the question to 2-3 sentences max.EnterPlanMode — BANNED. Execute phases below directly.ExitPlanMode — BANNED. You are never in plan mode.
</tool_restrictions>Review a feature and add purposeful motion. One orchestrated experience beats scattered animations everywhere.
Announce at start: "I'm using the animate skill to add purposeful motion."
<important> **This skill is user-interactive. Do NOT spawn agents.** Animation choices are subjective — the user must see and approve each addition.Every animation must answer: "Why does this exist?"
One well-orchestrated experience beats scattered animations everywhere. Focus on high-impact moments. </important>
<required_reading> Read ALL of these using the Read tool:
rules/interface/animation.md — Easing, duration, spring presets, performance tiersreferences/animation-patterns.md — Deep animation patternsreferences/interaction-physics.md — 300ms ceiling, spring vs easing decisions, exit patterns, container two-div patternreferences/frontend-design.md — Anti-patterns (bounce/elastic = dated)
</required_reading>Ask the user using AskUserQuestion:
AskUserQuestion:
question: "What's the personality of this feature?"
header: "Motion tone"
options:
- label: "Snappy and confident"
description: "Quick, decisive transitions. Enterprise, developer tools."
- label: "Smooth and refined"
description: "Gentle, polished. Premium, editorial."
- label: "Playful and energetic"
description: "Slightly exaggerated, delightful. Consumer, creative tools."
- label: "Minimal and functional"
description: "Almost invisible. Utility-focused, data-heavy."
Also determine:
Analyze the code and identify static areas:
references/audio-feedback.md — optional, user must opt in)Present a focused plan. Less is more.
## Animation Plan
### Hero Moment (1 max)
- **What**: [e.g., Page load entrance sequence]
- **How**: [e.g., Staggered fade-up of sections, 50ms delay]
- **Duration**: [e.g., 300-500ms total]
### Feedback Layer (per-interaction)
| Element | Trigger | Animation | Duration |
|---------|---------|-----------|----------|
| Buttons | Press | `active:scale-[0.97]` | CSS instant |
| Cards | Hover | `hover:shadow-lg hover:-translate-y-0.5` | 150ms |
| Toggle | Click | Slide + color transition | 200ms |
### Transition Layer (state changes)
| State Change | Animation | Duration |
|-------------|-----------|----------|
| Modal open | Fade + scale(0.98→1) + y(20→0) | 200ms ease-out |
| Dropdown | Scale(0.95→1) + opacity | 150ms ease-out |
| Accordion | grid-rows 0fr→1fr | 300ms ease-out |
### Reduced Motion Alternatives
| Full Animation | Reduced Motion |
|---------------|---------------|
| Slide + fade | Fade only (200ms) |
| Scale + move | Opacity only |
| Staggered entrance | Simultaneous fade |
Ask using AskUserQuestion:
AskUserQuestion:
question: "Does this animation plan feel right?"
header: "Animation plan"
options:
- label: "Looks good"
description: "Proceed with implementation"
- label: "Adjust"
description: "I have changes to suggest"
- label: "Too much"
description: "Scale it back — fewer animations"
- label: "Too little"
description: "Add more — I want more motion"
| Purpose | Duration | Easing |
|---------|----------|--------|
| Instant feedback (press, toggle) | 100-150ms | — (CSS transitions) |
| State changes (hover, menu) | 150-200ms | ease-out |
| Layout changes (modal, accordion) | 200-300ms | cubic-bezier(0.25, 1, 0.5, 1) |
| Entrance animations | 300-500ms | cubic-bezier(0.16, 1, 0.3, 1) |
| Exit = 75% of entrance | — | ease-in |
<!-- Button press feedback -->
<button class="transition-transform active:scale-[0.97]">
<!-- Card hover lift -->
<div class="transition-all duration-150 hover:shadow-lg hover:-translate-y-0.5">
<!-- Dropdown -->
<div class="transition-all duration-150 ease-out origin-top
data-[state=open]:scale-100 data-[state=open]:opacity-100
data-[state=closed]:scale-95 data-[state=closed]:opacity-0">
// Modal entrance
<motion.div
initial={{ opacity: 0, y: 20, scale: 0.98 }}
animate={{ opacity: 1, y: 0, scale: 1 }}
exit={{ opacity: 0, y: 10, scale: 0.98 }}
transition={{ duration: 0.2, ease: [0.25, 1, 0.5, 1] }}
/>
// Staggered list
<motion.div variants={{ visible: { transition: { staggerChildren: 0.03 } } }}>
{items.map(item => (
<motion.div
key={item.id}
variants={{ hidden: { opacity: 0, y: 8 }, visible: { opacity: 1, y: 0 } }}
/>
))}
</motion.div>
// Interactive spring
<motion.button whileTap={{ scale: 0.97 }} transition={{ type: "spring", stiffness: 400, damping: 25 }}>
.accordion-content {
display: grid;
grid-template-rows: 0fr;
transition: grid-template-rows 300ms cubic-bezier(0.25, 1, 0.5, 1);
}
.accordion-content[data-state="open"] {
grid-template-rows: 1fr;
}
.accordion-content > div {
overflow: hidden;
}
const shouldReduce = useReducedMotion();
<motion.div
animate={{
opacity: 1,
y: shouldReduce ? 0 : 20,
}}
/>
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
After implementing:
width, height, top, left) — use transformprefers-reduced-motion — accessibility violation<arc_log>
After completing this skill, append to the activity log.
See: references/arc-log.md
Entry: /arc:animate — [Component/page] animated ([hero moment, # micro-interactions])
</arc_log>
<success_criteria> Animate is complete when:
development
Go-live and shareability checklist covering the basics needed to make a project visitable, shareable, and ready for a first real audience. Use when asked to "launch", "go live", "make this shareable", "get this ready to show people", or prepare a project for a public URL.
development
Discover architectural friction and propose structural refactors with competing interface options. Focuses on deepening shallow modules, extracting grouped concerns into packages/modules, breaking up god files, reducing duplication, and improving testability. Use when asked to "improve the architecture", "find refactoring opportunities", "deepen modules", "consolidate coupling", "break up god components", "extract this into a package", "make this more testable", or "find architectural friction".
development
Create, review, or revise a concise project vision document that captures what a project is, who it is for, why it exists, success criteria, constraints, non-goals, and decision principles. Use when starting a new project, clarifying product direction, aligning a codebase for future agent work, defining a north star, or turning a vague idea into docs/vision.md.
tools
Use when starting any conversation - establishes Arc's skill routing, instruction priority, and bootstrap rules