mblode/agent-skills27 files

UI Animation

Builds, reviews, and measures UI motion, including springs, gestures, scroll effects, curve fitting from recordings, and sparse interface sound. Use when asked to "add animation", "match this easing", "reverse engineer this motion", "add a click sound", or find animation opportunities. For action semantics use product-design; for visual layout use ui-design.

Specification
Skill ID
mblode/agent-skills/ui-animation
Publisher
mblode
Repository
agent-skills
Installs
0
Files
27
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

mblode/agent-skills/ui-animationInstalls these files
  • SKILL.md
  • evals/evals.json
  • evaluations/discovery-mode.json
  • evaluations/fixtures/settings-panel.tsx
  • references/choreography.md
  • references/clip-path-techniques.md
  • references/code-output.md
  • references/component-patterns.md
  • references/contextual-animations.md
  • references/curve-fitting.md
  • references/debugging-symptoms.md
  • references/decision-framework.md
  • references/discovery-workflow.md
  • references/gesture-drag.md
  • references/interface-sfx.md
  • references/live-tuning.md
  • references/measurement-guide.md
  • references/performance-deep-dive.md
  • references/review-format.md
  • references/scroll-animations.md
  • references/spring-animations.md
  • references/svg-animation.md
  • references/transition-recipes.md
  • references/vocabulary.md
  • scripts/extract_frames.py
  • scripts/fit_curves.py
  • scripts/track_motion.py

What this skill tells the agent

UI Animation

  • IS: designing, implementing, reviewing, debugging UI motion (springs, gestures, drag, easing, CSS transitions, keyframes, Motion), sweeping an interface for the moments that would genuinely benefit from motion, measuring motion from a recording (extract frames, track, fit curves) to emit code plus a handoff spec, naming a described motion effect (reverse-lookup vocabulary), and gating sparse interface sound.
  • IS NOT: choosing overall visual direction, palettes, or typography (use ui-design Direction mode), auditing a whole page's UI quality (use ui-design Audit mode), or named text-effect specs (use the external animate-text skill where installed).

Routing boundary

product-design owns action semantics, scope, reversibility, and contested state choices. ui-design builds and styles those states. ui-animation owns timing, gestures, and measured motion. A routine missing loading or error state stays with the UI build; a gesture replacing a control needs a product decision and an accessible alternative before its physics.

Reference files

FileRead when
references/discovery-workflow.mdFinding worthwhile opportunities for motion in an existing interface
references/decision-framework.mdDefault: deciding whether/why to animate, picking easing character; also the seam list for a Discovery sweep
references/spring-animations.mdSpring physics, Motion useSpring, configuring spring params, Apple damping/response values, asymmetric open/close character, interruption mechanics
references/component-patterns.mdButtons, popovers, tooltips, drawers, modals, toasts with animation
references/clip-path-techniques.mdclip-path for reveals, tabs, hold-to-delete, comparison sliders
references/gesture-drag.mdDrag, swipe-to-dismiss, momentum, pointer capture, velocity handoff, momentum projection, rotary/knob drag, detents, carousel touch-action
references/scroll-animations.mdScroll-triggered reveals, scrubbed/scroll-driven animation (animation-timeline, useScroll), parallax, sticky scrollytelling, and when a scroll animation shouldn't exist
references/performance-deep-dive.mdJank, CSS vs JS, WAAPI, CSS variables trap, Framer Motion caveats
references/debugging-symptoms.mdAn animation feels off and the cause isn't named: symptom-indexed tables for sluggish, robotic, cheap, jumpy, and misfiring motion
references/svg-animation.mdAnimating vector art: line drawing (stroke-dashoffset), SVG transform-origin traps, path morphing, shakes, ambient life
references/review-format.mdReviewing animation code: ten standards (each with flag-on-sight triggers), Before/After/Why table, Block/Approve verdict
references/contextual-animations.mdContextual icon swaps, word-level stagger entrances, peripheral de-emphasis, fixed-offset exits
references/transition-recipes.mdInstalling a CSS transition: container morph, card resize, badge, dropdown, modal, panel, page slide, icon swap, number pop-in, odometer roll, text swap, success, avatar hover, error shake
references/measurement-guide.mdReverse-engineer: what to measure, eye vs script, reading metrics.json, choosing an ROI
references/curve-fitting.mdReverse-engineer: reading fit_curves.py output, spring vs bezier, judging fit error, asymmetric open/close
references/code-output.mdReverse-engineer: emitting code for CSS, Motion/Framer Motion, SwiftUI, React Native, UIKit
references/choreography.mdReverse-engineer: multi-element/multi-phase motion: staggers, blur-before-move, per-edge settling
references/live-tuning.mdDialling a curve in live when there is no reference to fit against: the DevTools bezier editor, retiming in the Animations panel, when a control-panel library earns a dependency
references/vocabulary.mdNaming a motion effect the user describes vaguely ("what's it called when...")
references/interface-sfx.mdClick sounds, interface audio, UI SFX, haptic-plus-sound, or "why is the web afraid of sound"

Core rules

  • Animate for feedback, orientation, continuity, or deliberate delight. If it's just "it looks cool" and the user sees it often, don't.
  • Keep keyboard focus and repeated navigation immediate. A state transition may animate if focus and task completion do not wait for it.
  • Prefer CSS transitions for interruptible UI: keyframes restart from zero on interruption, transitions retarget. Use keyframes only for predetermined sequences.
  • Implementation priority: CSS transitions > WAAPI > CSS keyframes > JS (requestAnimationFrame); under load CSS stays smooth while JS drops frames.
  • Asymmetric timing: occasional interactions can enter slightly slower, exit fast. High-frequency ephemeral UI (hover highlights, popovers, panel toggles) inverts this: enter instantly (0ms), exit with a brief fade (100-150ms) so the action feels immediate.
  • Tappable controls press on :active at 0ms and set touch-action: manipulation.
  • Use @starting-style for DOM entry; fall back to a data-mounted attribute where unsupported.
  • A small filter: blur(2px) hides rough crossfades between swapped content.

Motion design principles

  • Continuity over teleportation. Elements visible in both states transition in place; expand from where elements sit rather than fading in a new instance. Never duplicate a persistent element or hard-cut between views that share components; hard cuts lose spatial context.
  • Directional motion matches position. Tab and carousel transitions animate in the direction matching spatial layout (left-to-right forward, right-to-left back).
  • Emerge from the trigger. Overlays, trays, and panels animate outward from the element that opened them; generic centre-screen entrances break spatial orientation. Better still where the shapes allow: let the trigger become the surface (see the container-morph recipe).
  • Confirm in place, not in a corner. An action's result belongs on the control that caused it: the button becomes "Copied", holds, and reverts. A toast in the far corner makes the user's eye leave the thing they just touched to find out whether it worked. Reserve corner toasts for results with no on-screen origin (a background job finishing, an incoming message).
  • Animate paired states together. If open animates, close animates. If hover has motion, focus and pressed states get equivalent feedback. Do not polish only one half of a repeated interaction.
  • Delight scales inversely with frequency. Rarer interactions get more personality; high-frequency actions must be invisible.
  • Motion enhances perceived speed. Smooth transitions feel faster than hard cuts, even at identical load times.

What to animate

  • Movement: transform and opacity only; they skip layout and paint.
  • State feedback: color, background-color, and opacity are acceptable.
  • Never animate layout properties (width, height, top, left); they trigger layout recalc every frame. (Exception: a deliberate container tween, see the card-resize and container-morph recipes.)
  • Never use transition: all; it animates unintended properties and silently adopts future ones. List them explicitly.

Use this skill in a project

Open any RiverX project, search the Skills panel for mblode/agent-skills/ui-animation, and install it in one click.

Use this skill