Accessibility
Comprehensive patterns for building accessible web applications: WCAG 2.2 AA compliance, keyboard focus management, React Aria component patterns, native HTML-first philosophy, cognitive inclusion, and user preference honoring. Each category has individual rule files in rules/ loaded on-demand.
Quick Reference
| Category |
Rules |
Impact |
When to Use |
| WCAG Compliance |
3 |
CRITICAL |
Color contrast, semantic HTML, automated testing |
| POUR Exit Criteria |
1 |
CRITICAL |
Falsifiable pass/fail thresholds for each WCAG 2.2 AA criterion |
| Static Anti-Patterns |
1 |
HIGH |
Grep-able patterns detectable without a browser |
| Focus Management |
3 |
HIGH |
Focus traps, focus restoration, keyboard navigation |
| React Aria |
3 |
HIGH |
Accessible components, form hooks, overlay patterns |
| Modern Web Accessibility |
3 |
CRITICAL/HIGH |
Native HTML first, cognitive inclusion, user preferences |
Total: 14 rules across 6 categories
Quick Start
<main>
<article>
<header><h1>Page Title</h1></header>
<section aria-labelledby="features-heading">
<h2 id="features-heading">Features</h2>
</section>
</article>
</main>
import { FocusScope } from 'react-aria';
<FocusScope contain restoreFocus autoFocus>
<div role="dialog" aria-modal="true">
{children}
</div>
</FocusScope>
WCAG Compliance
WCAG 2.2 AA implementation for inclusive, legally compliant web applications.
| Rule |
File |
Key Pattern |
| Color Contrast |
${CLAUDE_SKILL_DIR}/rules/wcag-color-contrast.md |
4.5:1 text, 3:1 UI components, focus indicators |
| Semantic HTML |
${CLAUDE_SKILL_DIR}/rules/wcag-semantic-html.md |
Landmarks, headings, ARIA labels, form structure |
| Testing |
${CLAUDE_SKILL_DIR}/rules/wcag-testing.md |
axe-core, Playwright a11y, screen reader testing |
POUR Exit Criteria
Concrete pass/fail thresholds for each WCAG 2.2 AA criterion — replaces vague "meets requirements" checks.
| Rule |
File |
Key Pattern |
| POUR Exit Criteria |
${CLAUDE_SKILL_DIR}/rules/pour-exit-criteria.md |
Falsifiable checklist: image alt, contrast ratios, focus indicators, touch targets, ARIA states |
Static Anti-Patterns
Grep-able anti-patterns detectable via static analysis or code review — no browser needed.
| Rule |
File |
Key Pattern |
| A11y Anti-Patterns (Static) |
${CLAUDE_SKILL_DIR}/rules/a11y-antipatterns-static.md |
Focus removal, missing labels, autoplay, icon-only buttons, div-click handlers |
Focus Management
Keyboard focus management patterns for accessible interactive widgets.
| Rule |
File |
Key Pattern |
| Focus Trap |
${CLAUDE_SKILL_DIR}/rules/focus-trap.md |
Modal focus trapping, FocusScope, Escape key |
| Focus Restoration |
${CLAUDE_SKILL_DIR}/rules/focus-restoration.md |
Return focus to trigger, focus first error |
| Keyboard Navigation |
${CLAUDE_SKILL_DIR}/rules/focus-keyboard-nav.md |
Roving tabindex, skip links, arrow keys |
React Aria
Adobe React Aria hooks for building WCAG-compliant interactive UI.
| Rule |
File |
Key Pattern |
| Components |
${CLAUDE_SKILL_DIR}/rules/aria-components.md |
useButton, useDialog, useMenu, FocusScope |
| Forms |
${CLAUDE_SKILL_DIR}/rules/aria-forms.md |
useComboBox, useTextField, useListBox |
| Overlays |
${CLAUDE_SKILL_DIR}/rules/aria-overlays.md |
useModalOverlay, useTooltip, usePopover |
Modern Web Accessibility
2026 best practices: native HTML first, cognitive inclusion, and honoring user preferences.
| Rule |
File |
Key Pattern |
| Native HTML First |
${CLAUDE_SKILL_DIR}/rules/wcag-native-html-first.md |
<dialog>, <details>, native over custom ARIA |
| Cognitive Inclusion |
${CLAUDE_SKILL_DIR}/rules/wcag-cognitive-inclusion.md |
ADHD/autism/dyslexia support, chunked content, notification management |
| User Preferences |
${CLAUDE_SKILL_DIR}/rules/wcag-user-preferences.md |
prefers-reduced-motion, forced-colors, prefers-contrast, zoom |
Key Decisions
| Decision |
Recommendation |
| Conformance level |
WCAG 2.2 AA (legal standard: ADA, Section 508) |
| Contrast ratio |
4.5:1 normal text, 3:1 large text and UI components |
| Target size |
24px min (WCAG 2.5.8), 44px for touch |
| Focus indicator |
3px solid outline, 3:1 contrast |
| Component library |
React Aria hooks for control, react-aria-components for speed |
| State management |
react-stately hooks (designed for a11y) |
| Focus management |
FocusScope for modals, roving tabindex for widgets |
| Testing |
jest-axe (unit) + Playwright axe-core (E2E) |
Anti-Patterns (FORBIDDEN)
- Div soup: Using
<div> instead of semantic elements (<nav>, <main>, <article>)
- Color-only information: Status indicated only by color without icon/text
- Missing labels: Form inputs without associated
<label> or aria-label
- Keyboard traps: Focus that cannot escape without Escape key
- Removing focus outline:
outline: none without replacement indicator
- Positive tabindex: Using
tabindex > 0 (disrupts natural order)
- Div with onClick: Using
<div onClick> instead of <button> or useButton
- Manual focus in modals: Using
useEffect + ref.focus() instead of FocusScope
- Auto-playing media: Audio/video that plays without user action
- ARIA overuse: Using ARIA when semantic HTML suffices
Detailed Documentation
| Resource |
Description |
${CLAUDE_SKILL_DIR}/scripts/ |
Templates: accessible form, focus trap, React Aria components |
${CLAUDE_SKILL_DIR}/checklists/ |
WCAG audit, focus management, React Aria component checklists |
${CLAUDE_SKILL_DIR}/references/ |
WCAG criteria reference, focus patterns, React Aria hooks API |
${CLAUDE_SKILL_DIR}/references/ux-thresholds-quick.md |
UI/UX thresholds quick reference: contrast, touch targets, cognitive load, typography, forms |
${CLAUDE_SKILL_DIR}/examples/ |
Complete accessible component examples |
Related Skills
ork:testing-e2e - E2E testing patterns including accessibility testing
design-system-starter - Accessible component library patterns
ork:i18n-date-patterns - RTL layout and locale-aware formatting
motion-animation-patterns - Reduced motion and animation accessibility