---
name: a11y
description: Systematically audit and remediate accessibility issues in UI, focusing on keyboard navigation, screen reader support, color contrast, semantic HTML, ARIA usage, and motion sensitivity. Use when the user wants to improve accessibility, make a component accessible, fix WCAG violations, add keyboard support, or ensure screen reader compatibility.
metadata:
argument-hint: "[target]"
---
Systematically improve accessibility so the interface works for users with disabilities, temporary impairments, and assistive technology.
This skill focuses on remediation and implementation, not just scoring. It complements `audit` (which measures across dimensions) and `harden` (which handles edge cases broadly). Use this when accessibility is the primary goal.
## MANDATORY PREPARATION
Users start this workflow with `/a11y`. Once this skill is active, load $frontend-design — it contains design principles, anti-patterns, and the **Context Gathering Protocol**. Follow that protocol before proceeding — if no design context exists yet, you MUST load $setup first.
Consult the [accessibility testing reference](../frontend-design/reference/accessibility-testing.md) for automated tool integration (axe, WAVE, Pa11y) and CI workflow guidance.
Consult the [colorblindness UX reference](../frontend-design/reference/colorblindness-ux.md) when color is carrying meaning in states, charts, or validation.
Consult the [component accessibility reference](../frontend-design/reference/component-accessibility.md) for keyboard support, focus handling, skip links, and hidden content patterns.
Consult the [interaction design reference](../frontend-design/reference/interaction-design.md) for focus, loading, transitions, and feedback states.
Consult the [semantic color reference](../frontend-design/reference/semantic-color.md) when checking whether color communicates state or just decoration.
Consult the [responsive design reference](../frontend-design/reference/responsive-design.md) when accessibility needs to adapt across small screens, touch contexts, or zoom levels.
## Assess Accessibility
Identify what is broken and who it affects:
1. **Run automated checks first**:
- Use axe-core, WAVE, or Pa11y against critical pages
- Target WCAG 2.1 AA as the baseline
- Document violations by severity: critical (blocks task), serious (difficult workaround), moderate (annoying), minor (polish)
- Treat automated results as a fast warning system, not a complete audit
2. **Test keyboard navigation manually**:
- Unplug the mouse. Can you reach every interactive element?
- Is the tab order logical and predictable?
- Are focus indicators visible and clear?
- Are there keyboard traps (places you cannot tab out of)?
- Do custom components respond to Enter, Space, Escape, and arrow keys?
3. **Test with a screen reader**:
- Use NVDA (Windows), VoiceOver (macOS/iOS), or TalkBack (Android)
- Navigate by headings, landmarks, and form fields
- Verify that dynamic content changes are announced
- Check that decorative elements are hidden from assistive technology
- Confirm that error messages and status updates are read aloud
4. **Check visual accessibility**:
- Verify contrast ratios: 4.5:1 for normal text, 3:1 for large text, 3:1 for UI components
- Test at 200% and 400% zoom without horizontal scrolling or content loss
- Simulate color-vision deficiencies (deuteranopia, protanopia, tritanopia)
- Ensure color is not the only signal for state or meaning
- Check that text remains readable when high-contrast mode is enabled
5. **Check motion and animation**:
- Enable `prefers-reduced-motion` and confirm the interface remains usable
- Ensure no critical information is hidden behind motion-only reveals
- Verify that auto-playing content can be paused or stopped
## Remediate by Area
### Semantic HTML
Use the right element for the job. Native HTML elements come with built-in accessibility.
**Fixes**:
- Replace `