affaan-m/everything-claude-code/motion-foundations
- community
- ext:[{"type":"hook","description":"Pre/post lifecycle hooks"}]
Checking that the SKILL.md file is still in the repository.
Motion tokens, spring presets, performance rules, device adaptation, accessibility enforcement, and SSR safety for React / Next.js using motion/react. Foundation layer — all other motion skills depend on this. Use when setting up motion tokens, spring presets, reduced-motion handling, or SSR-safe animation in React or Next.js.
Install
npx vskill@latest install affaan-m/everything-claude-code/motion-foundationsSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
Motion Foundations
The base layer of the motion system. Defines every value, constraint, and rule that downstream skills (motion-patterns, motion-advanced) inherit. Load this skill before any animation work begins.
When to Activate
- Starting any animated component from scratch
- Setting up tokens, spring presets, or easing values
- Implementing
prefers-reduced-motionsupport - Debugging hydration mismatches from animation initial states
- Evaluating whether an animation should exist at all
Outputs
This skill produces:
- A shared
motionTokensobject (duration, easing, distance, scale) - A shared
springspreset map (5 named configs) - A
shouldAnimate()gate used by all components - Accessibility-compliant animation defaults via
useReducedMotion - SSR-safe initial states with zero hydration warnings
Principles
Motion must do at least one of the following or it must be removed:
- Guide attention
- Communicate state
- Preserve spatial continuity
Responsiveness always outranks smoothness. A 60 fps animation that causes input delay is worse than no animation.
Rules
These are non-negotiable. They apply to every component in the system.
- Use `motion/react` only. Never import from
framer-motion. Never mix the two in the same tree. - `initial` must match server output. If the server renders
opacity: 1, theinitialprop must also beopacity: 1. No exceptions. - Reduced motion overrides everything. When
useReducedMotion()returnstrueorprefersReducedistrue, all transforms are disabled. Opacity-only fades at ≤ 0.2s are the only permitted fallback. - Never animate layout properties.
width,height,top,left,margin,paddingare banned fromanimate. Usetransformandopacityonly. - All token values come from `motionTokens`. Hardcoded durations and easings in component files are forbidden.
- All spring configs come from the `springs` map. Inline
stiffness/dampingvalues are forbidden. - `"use client"` is required on every file that imports from
motion/react. - Never read `window` or `navigator` at module level. Always guard with
typeof window !== "undefined".
Decision Guidance
Choosing a duration
| Token | Use when | |
|---|---|---|
instant | Tooltip show/hide, focus ring, badge update | |
fast | Button feedback, icon swap, chip toggle | |
normal | Modal open, card expand, page element enter | |
slow | Hero entrance, full-page transition | |
crawl | Deliberate storytelling; use sparingly |
Choosing a spring
| Preset | Use when | |
|---|---|---|
snappy | Default UI — buttons, chips, nav items | |
gentle | Cards, modals, panels landing softly | |
bouncy | Playful moments — empty states, onboarding | |
instant | Tooltips, popovers, dropdowns | |
release | Drag release — natural physics feel |
When to disable animation entirely
Disable (make shouldAnimate() return false) when:
prefersReducedistrueisLowEndistrueand the animation is non-essential- The element is off-screen and will never enter the viewport
- The animation is purely decorative with no UX purpose
Core Concepts
Token system
Runtime flags
Accessibility
Priority order (highest to lowest):
prefers-reduced-motion: reduce— disables all transforms, limits opacity transitions to ≤ 0.2s- Low-end device detection — reduces duration, removes non-essential animations
- Design preference — everything else
Motion must degrade gracefully. It must never disappear abruptly in a way that causes layout shift or confuses orientation.
SSR / hydration safety
Rule: `initial` must always match what the server renders.
Code Examples
End-to-end: tokens + springs + accessibility + SSR guard
Constraints / Non-Goals
This skill does not cover:
- UI component patterns (button, modal, stagger) → see
motion-patterns - Drag, gestures, SVG, text animations, custom hooks → see
motion-advanced - CSS-only animations or Tailwind
animate-*classes withoutmotion/react - Third-party animation libraries (GSAP, anime.js, etc.)
- Motion design decisions (when to animate, what to emphasize) — that is a design concern, not a code constraint
Anti-Patterns
| Anti-pattern | Rule violated | Fix | |
|---|---|---|---|
import { motion } from "framer-motion" | Rule 1 | Use motion/react | |
initial={{ opacity: 0 }} on SSR component | Rule 2 | Add mount guard | |
Skipping useReducedMotion check | Rule 3 | Use useSafeMotion hook | |
animate={{ width: "100%" }} | Rule 4 | Use scaleX transform instead | |
transition={{ duration: 0.4 }} inline | Rule 5 | Use motionTokens.duration.normal | |
{ stiffness: 300, damping: 30 } inline | Rule 6 | Use springs.snappy | |
Missing "use client" directive | Rule 7 | Add to top of file | |
navigator.hardwareConcurrency at module level | Rule 8 | Wrap in typeof navigator !== "undefined" |
Related Skills
- `motion-patterns` — consumes tokens and springs defined here to build button, modal, stagger, page transition, and scroll patterns. Does not redefine any values.
- `motion-advanced` — consumes tokens and springs defined here for drag, SVG, text, and gesture patterns. Adds
useAnimatesequences and custom hooks on top of this foundation.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/motion-foundations/SKILL.md
Popularity
- Repository stars
- 184,902
- Repository forks
- 28,577
- Repository npm downloads, 7 days
- 2,034
- 7-day trend score
- 78
Stars and forks are for the whole GitHub repository, not this skill alone. Downloads are for the repository's npm package. Refreshed 17 May 2026, 5 months ago.
Extension points
hookPre/post lifecycle hooks
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/affaan-m/everything-claude-code/motion-foundations)