Skip to content
cccskills
FreePublished on GitHub

motion-meaning

Web (CSS/JS/React + GSAP/Motion): classify UI motion as communicative (sequence is the content) or decorative (decorating a result), then fix or apply prefers-reduced-motion so meaning survives under reduce. Use when auditing existing animation, gating new motion, verifying both preference states, catching a dead reduced-motion branch, snapping to an end state, or collapsing a transition without nuking essential cues. Not for React Native, full WCAG encyclopedias, keyboard traps, color contrast, focus management, or ARIA pattern audits.

The English summary is being prepared. Showing the original description.

See how to install

Files included (15)

  • SKILL.md7.1 KB
  • references/AUDIT.md2.3 KB
  • references/CLASSIFY.md4.7 KB
  • references/CREDITS.md2.0 KB
  • references/FAILURES.md3.0 KB
  • references/PATTERNS.md3.8 KB
  • references/STRATEGIES.md5.9 KB
  • references/VERIFY.md3.6 KB
  • scripts/fixtures/collapse-transition.html2.1 KB
  • scripts/fixtures/communicative-snap.html2.3 KB
  • scripts/fixtures/dead-branch.html2.1 KB
  • scripts/fixtures/decorative-bail.html1.2 KB
  • scripts/fixtures/reduce-complexity.html1.4 KB
  • scripts/smoke.mjs2.6 KB
  • scripts/verify-reduced.mjs10.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Motion Meaning

Reduced motion isn't about removing animation. It's about deciding what remains when animation disappears.

Ask once, before writing or patching any reduce branch:

Is the motion sequence the content, or is it decorating a result that exists either way?

  • Communicative (sequence = content) → keep the destination; change how you get there (snap end state, or reduce complexity).
  • Decorative (decorating a result) → bail, or collapse the transition. No substitute required.

Grep for prefers-reduced-motion proves almost nothing. Touches ≠ reachable ≠ correct.

Read next

SituationOpen
Pick a strategyreferences/CLASSIFY.md
Reduce strategies + picture storiesreferences/STRATEGIES.md
Audit / fix existing codereferences/AUDIT.md
Code patterns (CSS / JS / React)references/PATTERNS.md
Failure modesreferences/FAILURES.md
Done codingreferences/VERIFY.md + scripts/verify-reduced.mjs
Sources & creditreferences/CREDITS.md

Four reduce strategies

Pick one of these for what the screen becomes under reduce. Picture the outcome first; then open STRATEGIES.md for the full story.

#StrategyWhenUnder reduce looks like
1BailPure decoration; no honest reduced formEffect is gone — OS cursor back, no custom layer
2Snap to end stateSequence is the content (staged journey)Same final layout as the last frame of the full animation — no travel, no mid poses piled on screen
3Collapse transitionMotion only decorates a result already in the DOMControl jumps to the right place (tab pill, underline) — instant, not a slide
4Reduce complexityCost/layers/autoplay matter, not only durationSame silhouette, cheaper — fewer blur layers, autoplay off, fewer clones

Always also — live preference (not a fifth “look”): read prefers-reduced-motion with a change listener (or library equivalent). One-shot .matches at mount goes stale mid-session. See PATTERNS.md.

Quick fork: decorative → 1 or 3. Communicative journey → 2. Still useful but heavy → 4.

The four gates

Every animation under authorship or audit passes all four. Verify by running both preference states — never by grepping alone. Details in VERIFY.md.

  1. Role — Communicative or decorative? (sequence = content?)
  2. Hazard — Large viewport motion, parallax, spin, autoplay >5s, seizure flash?
  3. Reduce path — Which strategy (1–4)? Is preference live?
  4. Meaning — With reduce on, can the user still know the state / outcome?

Author new motion

  1. Name the role (gate 1) out loud before keyframes.
  2. Pick strategy 1–4 from CLASSIFY.md — use the “looks like” column above.
  3. Wire a live preference read — PATTERNS.md.
  4. Implement the reduce branch inside the setup that also owns the full-motion path (avoid outer gates that skip the end-state applicator — FAILURES.md #1).
  5. Verify both states (VERIFY.md).

Companion: icon hover gestures from animating-icons are decorative → animation: none at rest. Icon-swap is communicative → instant coordinates, no tween.

Audit existing motion

  1. Inventory motion sources (CSS transitions/keyframes, WAAPI, GSAP, Motion, canvas, smooth-scroll hijack).
  2. Per item: run the four gates; assign a strategy.
  3. Report each finding as:
    • file:line + quoted snippet
    • role + failure (one short sentence)
    • concrete minimal fix
  4. Prefer targeted patches. Do not rewrite unrelated UI.
  5. Re-verify both preference states after the patch.

Full procedure: AUDIT.md.

Done checklist

  • Role named (communicative vs decorative)
  • Strategy 1–4 chosen; you can picture what “looks like” under reduce
  • Preference is live (change listener — not one-shot at mount)
  • Reduce branch is reachable (not dead behind an outer if (reduced) return)
  • Gate 4: meaning survives under reduce (end state / bail / collapse as intended)
  • No duration: 0 on sequence-as-content without a snap end state
  • If something waits on transitionend / onComplete, use ~0.01ms not 0s
  • scripts/verify-reduced.mjs (or equivalent dual-state check) run on fixtures or the page
  • Autoplay >5s still has a pause control (WCAG 2.2.2) even when motion is allowed
  • Interaction-triggered motion is disable-able via PRM unless essential (WCAG 2.3.3) — meaning still survives under the chosen strategy

Red flags — stop and re-derive

  • "Just set duration: 0 everywhere"
  • Grep is green so shipping
  • Outer if (prefersReducedMotion) return before the function that applies the end state
  • One-shot matchMedia(...).matches with no change listener
  • Reduced path teleports overlapping mid-states instead of a single destination
  • Decorative flourish kept "because it is small"

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Author, review, or batch-produce SVG icon hover gestures and icon↔icon morphs (Hugeicons/Lucide/Phosphor). Use for animated icon, icon hover, per-icon gesture, icon morph, menu↔cross, stroke-dashoffset draw-on, pathLength, transform-box. Not for page transitions, Lottie, or general UI chrome motion.

The English summary is being prepared. Showing the original description.

SoraLabsOSS/skills28Updated Aug 28, 2026

See all skills by SoraLabsOSS

Report a problem with this skill