Axiom axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
git clone https://github.com/CharlesWiltgen/Axiom
T=$(mktemp -d) && git clone --depth=1 https://github.com/CharlesWiltgen/Axiom "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude-plugin/plugins/axiom/skills/axiom-accessibility" ~/.claude/skills/charleswiltgen-axiom-axiom-accessibility && rm -rf "$T"
.claude-plugin/plugins/axiom/skills/axiom-accessibility/SKILL.mdAccessibility
You MUST use this skill for ANY accessibility work including VoiceOver, Dynamic Type, color contrast, WCAG compliance, and UX flow auditing.
Quick Reference
| Symptom / Task | Reference |
|---|---|
| VoiceOver labels, hints, navigation | See |
| Dynamic Type scaling violations | See |
| Color contrast (WCAG AA/AAA) | See |
| Touch target sizes (< 44x44pt) | See |
| Keyboard navigation (iPadOS/macOS) | See |
| Reduce Motion support | See |
| Assistive Access (cognitive, iOS 17+) | See |
| Accessibility Inspector workflows | See |
| App Store Review preparation | See |
| UX dead ends, dismiss traps | See |
| Buried CTAs, missing empty states | See |
| Missing loading/error states | See |
| Deep link dead ends | See |
| Accessibility dead ends (gesture-only) | See |
| watchOS-specific (VoiceOver rotor on Digital Crown, AssistiveTouch, Double Tap) | See |
Cross-Suite Routes
- Full watchOS development context → See axiom-watchos
Decision Tree
digraph accessibility { start [label="Accessibility issue" shape=ellipse]; what [label="What type?" shape=diamond]; start -> what; what -> "skills/accessibility-diag.md" [label="VoiceOver/labels/hints"]; what -> "skills/accessibility-diag.md" [label="Dynamic Type"]; what -> "skills/accessibility-diag.md" [label="color contrast"]; what -> "skills/accessibility-diag.md" [label="touch targets"]; what -> "skills/accessibility-diag.md" [label="keyboard nav"]; what -> "skills/accessibility-diag.md" [label="Reduce Motion"]; what -> "skills/accessibility-diag.md" [label="Assistive Access"]; what -> "skills/accessibility-diag.md" [label="App Store prep"]; what -> "skills/ux-flow-audit.md" [label="UX dead end/dismiss trap"]; what -> "skills/ux-flow-audit.md" [label="missing states"]; what -> "skills/watchos-a11y.md" [label="watchOS VoiceOver / AssistiveTouch / Double Tap"]; what -> "accessibility-auditor" [label="automated scan" shape=box]; }
- ANY VoiceOver, Dynamic Type, contrast, touch target, or WCAG issue →
skills/accessibility-diag.md - Assistive Access (cognitive disabilities, iOS 17+) →
skills/accessibility-diag.md - App Store accessibility rejection →
skills/accessibility-diag.md - UX dead ends, dismiss traps, buried CTAs, missing states →
skills/ux-flow-audit.md - watchOS-specific accessibility (rotor on Digital Crown, AssistiveTouch, Double Tap) →
skills/watchos-a11y.md - Want automated accessibility scan? →
agent oraccessibility-auditor/axiom:audit accessibility
Automated Scanning
Accessibility audit → Launch
accessibility-auditor agent or /axiom:audit accessibility
- VoiceOver labels and hints
- Dynamic Type violations
- Color contrast failures
- WCAG compliance scanning
UX flow audit → Launch
ux-flow-auditor agent
- Dead-end views, dismiss traps
- Buried CTAs, missing empty/loading/error states
- Deep link dead ends, accessibility dead ends
Critical Patterns
Image Accessibility
- Use
for purely decorative images — automatically hidden from VoiceOver (equivalent toImage(decorative: "photo")
but semantically clearer)accessibilityHidden(true) - Use
for buttons with complex or changing labels — improves Voice Control accuracy by providing alternative labelsaccessibilityInputLabels() - Respect
environment value — when active, provide non-color cues (icons, patterns, labels) alongside color indicatorsaccessibilityDifferentiateWithoutColor
Anti-Rationalization
| Thought | Reality |
|---|---|
| "I'll add VoiceOver labels when I'm done building" | Accessibility is foundational, not polish. accessibility-diag prevents App Store rejection. |
| "My app doesn't need accessibility" | All apps need accessibility. It's required by App Store guidelines and benefits all users. |
| "Dynamic Type just needs .scaledFont" | Dynamic Type has 7 common violations. accessibility-diag catches them all. |
| "Color contrast looks fine to me" | Visual assessment is unreliable. WCAG ratios require measurement. accessibility-diag validates. |
| "UX issues are just polish" | UX dead ends cause 1-star reviews. They're defects, not enhancements. |
| "The dismiss gesture handles it" | fullScreenCover has no dismiss gesture. That's the trap. |
Example Invocations
User: "My button isn't being read by VoiceOver" → See
skills/accessibility-diag.md
User: "How do I support Dynamic Type?" → See
skills/accessibility-diag.md
User: "Check my app for accessibility issues" → See
skills/accessibility-diag.md
User: "Prepare for App Store accessibility review" → See
skills/accessibility-diag.md
User: "Scan my app for accessibility issues automatically" → Launch
accessibility-auditor agent
User: "How do I support Assistive Access?" → See
skills/accessibility-diag.md
User: "Check for UX dead ends and dismiss traps" → See
skills/ux-flow-audit.md
User: "My fullScreenCover has no way to dismiss" → See
skills/ux-flow-audit.md
User: "Are there missing empty states in my app?" → See
skills/ux-flow-audit.md