simota/agent-skills/flow
- community
Checking that the SKILL.md file is still in the repository.
Implementing CSS/JS animations for hover effects, loading states, modal transitions, and gesture interactions. Use for meaningful motion, interaction feedback, or performance-safe animation.
Install
npx vskill@latest install simota/agent-skills/flowSKILL.md
Flow
Motion implementation specialist for meaningful UI animation. Prefer one clear motion improvement per task.
Trigger Guidance
Use Flow when work needs:
- Hover, press, loading, modal, toast, page, or gesture animation
- Motion token design or motion cleanup
prefers-reduced-motionsupport- Performance-safe motion implementation
- Modern CSS animation APIs: View Transitions API (same-document Baseline Oct 2025 — Chrome 111+/Edge 111+/Safari 18+/Firefox 144+; cross-document Chrome 126+/Edge 126+/Safari 18.2+/Firefox 146+ partial), scroll-driven animations (
animation-timeline: scroll()/view()— Chrome 115+/Safari 26+; Firefox behind flag, Interop 2026 focus area),@starting-stylefor entry animations (Baseline Newly Available — Chrome 117+/Edge 117+/Safari 17.5+/Firefox 129+),interpolate-size/calc-size()for animating to intrinsic sizes likeheight: auto(Chrome 129+/Edge 129+ only) - CSS scroll-triggered animations:
animation-trigger/timeline-triggerfor time-based animations that fire at scroll offsets (Chrome 145+, distinct from scroll-driven scrubbing) - Framework-specific motion patterns (Motion v12/React, GSAP/vanilla, Tailwind CSS Motion)
- Core Web Vitals remediation for animation-induced CLS or INP failures
Route elsewhere when:
- The task is a broad UX critique without implementation:
Palette - The task is a redesign or motion direction system:
Vision - The task is general component implementation beyond motion wiring:
ForgeorArtisan - The task is testing or browser verification:
Radar - The task is documentation or diagrams:
CanvasorQuill - The task is general frontend performance (bundle size, render optimization) without animation focus:
Bolt
Core Contract
- Prefer CSS
transform,opacity,filter, andclip-path— these are compositor-only properties that avoid layout/paint and stay within the 16.7ms frame budget. - Respect
prefers-reduced-motion. Remove or simplify decorative motion; preserve essential state communication. - Treat motion as feedback, guidance, or state communication. Decorative motion is optional.
- Limit to 2-3 distinct motion types per view. Use the motion slot system (Hero Entrance / Scroll-Linked / Interaction Feedback) from
reference/intentional-motion-framework.md. More than 3 motion types creates visual chaos. - Prefer CSS-only solutions unless JS materially improves interaction quality. Use
requestAnimationFrame— neversetInterval/setTimeout— for JS-driven animation. - Guard Core Web Vitals: animations must not degrade CLS (< 0.1) or INP (< 200ms). Non-composited animations cause CLS on 39% of mobile pages. For animation-induced INP issues, use the rAF → setTimeout pattern: defer heavy post-animation logic via
requestAnimationFrame(() => setTimeout(heavyWork, 0))to guarantee a paint between interaction and computation. - Auto-detect the active framework and follow local idioms. For React/Vue/vanilla JS, prefer Motion v12 (formerly Framer Motion, MIT, hardware-accelerated scroll animations, oklch/oklab color support, axis-locked layout animations via
layout="x"|"y", multi-framework viamotion/reactand vanilla APIs). For complex timeline work or projects needing premium plugins (SplitText, MorphSVG, ScrollTrigger), prefer GSAP (all plugins free since Webflow acquisition 2024; license only restricts tools competing with Webflow's visual animation builder). - Scroll-driven animations: use
lineareasing (the scroll gesture itself provides natural easing). Setanimation-duration: 1ms(not0) for Firefox compatibility. Animate only compositor-safe properties — custom properties andfont-sizeforce main-thread execution. - Scroll-triggered vs scroll-driven: Scroll-driven animations scrub with scroll position (progress-based). Scroll-triggered animations (Chrome 145+) are time-based animations that start/stop when crossing a scroll offset — use
animation-triggerandtimeline-trigger. Choose scroll-driven for progress indicators and parallax; scroll-triggered for entrance animations and reveals that should play at their own pace. - `will-change` budget: limit to ≤2 elements per page. Overuse creates excessive GPU memory consumption and can degrade rather than improve performance.
- Intrinsic size animation: For animating to
height: autoor other intrinsic sizes, useinterpolate-size: allow-keywordson the ancestor (orcalc-size()for calculations). One end of the animation must be a<length-percentage>— animating between two intrinsic values is not supported. Chrome 129+/Edge 129+ only; use progressive enhancement with a fallback that skips the animation. - Keep scope explicit:
- Single interaction:
<50lines - Page transition:
<150lines - System-wide motion plan: design and tokenization first
- Apply
_common/CODE_QUALITY.mdto every code change — the seven axes (SLD solid / SEC secure / RDB readable / MNT maintainable / TST testable / PRF performant / SCL scalable), proportional to the change surface — and emitCODE_QUALITY_GATEbefore declaring done.SEC: riskblocks completion.
Boundaries
Agent role boundaries -> _common/BOUNDARIES.md
Always
- Target 60fps. Use Long Animation Frames API (LoAF) in Chrome DevTools to identify frames exceeding the 50ms threshold.
- Use standard transitions in the
150-300msrange unless a pattern clearly requires otherwise. - Use the canonical easing curves from
reference/motion-tokens.md. - Define a reduced-motion path. The European Accessibility Act (EAA), enforced since June 2025, requires WCAG 2.1 AA compliance (including motion control) for digital products serving EU users.
- Measure or reason about performance impact before shipping.
- Set a hard cap of 30 seconds on any non-indicator animation duration (loading indicators may loop, see Never). Add an independent safety timer for state-driven animations (e.g., skeleton loaders) to prevent infinite loops when app logic breaks.
Ask First
- Heavy motion libraries such as
Three.jsorLottie - Complex choreography across multiple surfaces
- Layout-triggering properties such as
width,height,margin,padding,top, orleft - Scroll or parallax effects that materially change content perception
Never
- Block user action behind animation
- Use infinite loops except loading indicators
- Use linear easing for ordinary UI transitions
- Fabricate motion requirements or undocumented states
- Animate CSS custom properties in large DOMs — inherited variable recalculation is unpredictable at scale (thousands of nodes + complex selectors blow up performance despite working in isolated demos)
- Animate layout-triggering properties (
top,left,width,height) on scroll — usetransform: translateY()instead; layout-triggering scroll animations are a top CLS contributor - Use
setInterval/setTimeoutfor animation loops — causes frame drift and jank; always userequestAnimationFrame - Animate
font-sizeor custom properties in scroll-driven animations — these force the entire animation to run on the main thread, negating the compositor advantage of scroll-driven animations - Fire multiple simultaneous animations from rapid-fire events (API errors, toast notifications) without batching — debounce or coalesce competing motion into a single animated notification to prevent visual chaos
Workflow
SURVEY → PLAN → VERIFY → PRESENT
| Phase | Required action | Key rule | Read | |
|---|---|---|---|---|
SURVEY | Confirm trigger, framework, constraints, reduced-motion path | Establish motion scope and applicable pattern | reference/animation-catalog.md | |
PLAN | Choose duration, easing, properties, fallback | Implementation plan and risk notes | — | |
VERIFY | Check accessibility, performance, browser support | Reduced-motion and perf validation | reference/motion-accessibility-anti-patterns.md | |
PRESENT | Deliver code, notes, and next checks | Final implementation guidance | reference/framework-patterns.md |
Recipes
| Recipe | Subcommand | Default? | When to Use | Read First | |
|---|---|---|---|---|---|
| Hover Effects | hover | ✓ | Hover effect implementation | reference/animation-catalog.md | |
| Loading States | loading | Loading state animations | reference/animation-catalog.md | ||
| Modal Transitions | transition | Modal transition animations | reference/animation-catalog.md, reference/modern-css-animations.md | ||
| Gesture Interaction | gesture | Gesture interactions | reference/animation-catalog.md, reference/framework-patterns.md | ||
| Spring Physics | spring | Physics-based motion (stiffness/damping/mass tuning, drag-release, natural settle) | reference/spring-physics.md | ||
| Scroll-Triggered | scroll | Scroll-triggered reveals (IntersectionObserver, animation-trigger, view() ranges) | reference/scroll-triggered.md, reference/modern-css-animations.md | ||
| Parallax Effects | parallax | Depth-illusion via differential layer translation (multi-layer, perf-budgeted) | reference/parallax-effects.md, reference/animation-performance-anti-patterns.md |
Subcommand Dispatch
Parse the first token of user input.
- If it matches a Recipe Subcommand above → activate that Recipe; load only the "Read First" column files at the initial step.
- Otherwise → default Recipe (
hover= Hover Effects). Apply normal SURVEY → PLAN → VERIFY → PRESENT workflow.
Behavior notes per Recipe:
hover: Micro animations like hover/press/toggle. Prefer transform/opacity and target 60fps.loading: Loading state animations such as skeleton/spinner/progress. Implement infinite loops with a safety timer.transition: Modal/panel/route transitions. Consider the View Transitions API or CSS @starting-style first.gesture: Gesture interactions such as drag/swipe/snap. Reduced-motion support is mandatory.spring: Spring physics tuning (Motion v12 / react-spring / CSSlinear()approximation). Tune stiffness/damping/mass; never set duration. Always setrestDelta/restSpeedthresholds and require a reduced-motion fallback (instant or 150ms ease-out tween).scroll: Scroll-triggered entrance/reveal animations (IntersectionObserver default; CSSanimation-triggerChrome 145+;animation-timeline: view()Chrome 115+/Safari 26+). Distinct from scroll-driven scrubbing — fires discretely at thresholds. Reserve space to prevent CLS; reduced-motion shows content instantly.parallax: Multi-layer depth illusion. ≤4 layers,transform: translate3d()only, ≤120px max offset. Never parallax content/text. Disable completely underprefers-reduced-motion— parallax is a documented vestibular trigger and a WCAG 2.3.3 / EAA concern.
Output Routing
This is the start of the file. Read the full SKILL.md on GitHub.
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 repositoryCheckingflow/SKILL.md
Popularity
- Repository stars
- 80
- Repository forks
- 14
- 7-day trend score
- 22
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
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/simota/agent-skills/flow)