accessibility-issues — Claude Code skill: animation that excludes
Audits motion that hurts users with vestibular disorders, cognitive overload or screen reader needs, then names the fix for each case.
npx skills add dylantarre/animation-principles --skill accessibility-issues -a claude-codeWhat accessibility-issues does
The skill kicks in when animation pushes people away: motion sickness complaints, keyboard focus lost mid-transition, flashing, screen reader confusion. It maps each symptom to an animation principle and gives a correction. Excessive squash and stretch should go for prefers-reduced-motion and be replaced with opacity changes; curved paths should become linear motion for anything essential in the UI.
Inside you get problem indicators, a diagnosis per principle, quick fixes and a troubleshooting checklist. Two snippets ship with it: a CSS block under @media (prefers-reduced-motion: reduce) that cuts animation and transition durations, and a JS check through window.matchMedia.
One thing to plan for: the checklist asks you to test with a screen reader on, not just read the code. And if your project autoplays motion, the skill is blunt about it — let the user trigger the movement instead.
What it helps with
- strip motion for users who asked for reduced motion
- track down the transition that hides keyboard focus
- keep flash rate below the seizure threshold
- tell a screen reader that dynamic content changed
- cut five moving elements down to one
Example prompts for the agent
- Check my modal animation for accessibility issues and list what to fix
- Users get motion sick from the parallax — run it through the accessibility-issues checklist
- Add prefers-reduced-motion handling to this CSS using the skill's pattern
How to install accessibility-issues
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill accessibility-issues -a claude-code2Manually: put the files in place
~/.claude/skills/accessibility-issues/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/accessibility-issues/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill accessibility-issues -a codex2Manually: put the files in place
.agents/skills/accessibility-issues/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill accessibility-issues -a cursor2Manually: put the files in place
.cursor/skills/accessibility-issues/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dylantarre/animation-principles accessibility-issues2Manually: put the files in place
.github/skills/accessibility-issues/SKILL.md1Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill accessibility-issues -a gemini-cli2Platform CLI
gemini skills install https://github.com/dylantarre/animation-principles --path skills/12-by-problem-type/accessibility-issuesManually: put the files in place
.devin/skills/accessibility-issues/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dylantarre/animation-principles --skill accessibility-issues -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about accessibility-issues
How do I install accessibility-issues in Claude?
Run npx skills add dylantarre/animation-principles --skill accessibility-issues -a claude-code. The skill then lives at ~/.claude/skills/accessibility-issues/SKILL.md.
What does accessibility-issues do?
It reviews animation from the perspective of users it harms and proposes concrete edits: drop distortion, limit how many elements move at once, keep timing predictable, swap arcs for linear motion.
What do I need for the skill to work?
Nothing beyond a normal setup. It relies on the prefers-reduced-motion media query and window.matchMedia, and it recommends testing with a screen reader enabled.
Source text
SKILL.md · MIT
---
name: accessibility-issues
description: Use when animation excludes users with vestibular disorders, cognitive disabilities, or assistive technology needs
---
# Accessibility Issues
Make animations inclusive using Disney's principles thoughtfully.
## Problem Indicators
- Motion sickness complaints
- Vestibular disorder triggers
- Screen reader confusion
- Cognitive overload
- Seizure risk (flashing)
- Keyboard focus lost during animation
## Diagnosis by Principle
### Squash and Stretch
**Issue**: Excessive distortion causes disorientation
**Fix**: Reduce or eliminate squash/stretch for users with `prefers-reduced-motion`. Use opacity changes instead.
### Secondary Action
**Issue**: Too many moving elements
**Fix**: Limit to one animated element at a time. Secondary actions should be subtle or removed.
### Exaggeration
**Issue**: Dramatic motion triggers vestibular responses
**Fix**: Reduce scale, rotation, and position changes. Keep movements small and predictable.
### Timing
**Issue**: Animations too fast or too slow
**Fix**: Provide consistent, predictable timing. Avoid sudden speed changes.
### Arcs
**Issue**: Curved motion paths cause tracking difficulty
**Fix**: Use linear motion for essential UI. Save arcs for optional decorative elements.
## Quick Fixes
1. **Respect `prefers-reduced-motion`** - Always check and honor
2. **No autoplay animation** - Let users trigger motion
3. **Keep focus visible** - Never animate focus indicator away
4. **Announce changes** - Use ARIA live regions for dynamic content
5. **Provide pause controls** - For any looping animation
## Troubleshooting Checklist
- [ ] Does animation respect `prefers-reduced-motion`?
- [ ] Is there a way to pause/stop animations?
- [ ] Are state changes announced to screen readers?
- [ ] Does keyboard focus remain visible and logical?
- [ ] Is flash rate under 3 per second?
- [ ] Can users complete tasks without animation?
- [ ] Are animations triggered by user action (not autoplay)?
- [ ] Test with screen reader enabled
## Code Pattern
```css
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
```
```js
// Check preference in JS
const prefersReducedMotion = window.matchMedia(
'(prefers-reduced-motion: reduce)'
).matches;
```
© dylantarre · MIT · dylantarre/animation-principles