From claude-skills
Implements CSS animations with a 3-tier hierarchy (functional, choreographic, cinematic), scroll-driven animations, View Transitions API, and mandatory prefers-reduced-motion support.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-skills:11-motion-and-interaction-systemorg:website_buildThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Apply meaning-first CSS animations (scroll-driven, View Transitions, `@starting-style`) with mandatory `prefers-reduced-motion` on every animated surface.
Apply meaning-first CSS animations (scroll-driven, View Transitions, @starting-style) with mandatory prefers-reduced-motion on every animated surface.
Anything else = AI slop. Cut it.
@starting-style.Never stack 3 tiers on same surface. One cinematic per page.
prefers-reduced-motionEVERY animation MUST honor prefers-reduced-motion: reduce — snap to final state, never hide content.
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
document.startViewTransition(() => updateDOM())@view-transition { navigation: auto; } in CSSview-transition-name: hero-image; on persistent elements::view-transition-old(root), ::view-transition-new(root) {
animation-duration: 0.3s;
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
animation-timeline: scroll() (root scroller) or view() (element-in-viewport)prefers-reduced-motion AND duration:1ms fallback@keyframes fade-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
.reveal { animation: fade-up linear; animation-timeline: view(); animation-range: entry 0% cover 30%; }
@starting-style (DOM-insert animation)Baseline 2026 — animates from explicit starting state to default state when element enters DOM.
.toast { opacity: 1; transform: translateY(0); transition: opacity 0.3s, transform 0.3s; }
@starting-style { .toast { opacity: 0; transform: translateY(-10px); } }
@container scroll-state(stuck: top) — replaces JS scroll-listener-based sticky styling.
.nav { container-type: scroll-state; }
@container scroll-state(stuck: top) { .nav { box-shadow: 0 4px 12px rgba(0,0,0,0.4); } }
transform: scale(0.98) on :active, 100mstransform: translateY(-1px) + color shift, 200msnavigator.vibrate(10) if supported<svg> path interpolation.list-item { animation: fade-up 0.4s ease-out backwards; }
/* OR use sibling-index() (Baseline 2026) */
.list-item { transition-delay: calc((sibling-index() - 1) * 80ms); }
transform + opacity ONLY on hot pathswill-change sparingly (transform, opacity only when actually animated)_kernel/standards.md#cwv — animations must not block inputPer 10-experience-and-design-system § 4-state distinction:
translateY(-1px)scale(0.98) + immediate color confirmAudit gate: Playwright cycles each interactive through 4 states → diff ≥3px pixel-difference or fail.
npx claudepluginhub heymegabyte/claude-skillsGuides implementation of frontend interaction motion: page transitions, scroll animations, micro-interactions using Framer Motion, GSAP, Lottie, or CSS animation. Includes intensity levels, reduced-motion handling, and animation justification checks.
Guides adding purposeful UI animations & micro-interactions with functional roles, performance constraints (100-500ms), and `prefers-reduced-motion` fallbacks for accessibility.
Provides animation and motion design patterns using Motion (Framer Motion) and View Transitions API for component animations, page transitions, micro-interactions, gestures, exit transitions, and accessibility with prefers-reduced-motion.