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
// Semantic HTML with ARIA
<main>
<article>
<header><h1>Page Title</h1></header>
<section aria-labelledby="features-heading">
<h2 id="features-heading">Features</h2>
</section>
</article>
</main>
// Focus trap with React Aria
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
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: accessibility-63description: Accessibility patterns for WCAG 2.2 compliance, keyboard focus management, React Aria component patterns, cognitive inclusion, native HTML-first philosophy, and user preference honoring. Use when implementing screen reader support, keyboard navigation, ARIA patterns, focus traps, accessible component libraries, reduced motion, or cognitive accessibility. Use when this capability is needed.4---56# Accessibility78Comprehensive 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.910## Quick Reference1112| Category | Rules | Impact | When to Use |13|----------|-------|--------|-------------|14| [WCAG Compliance](#wcag-compliance) | 3 | CRITICAL | Color contrast, semantic HTML, automated testing |15| [POUR Exit Criteria](#pour-exit-criteria) | 1 | CRITICAL | Falsifiable pass/fail thresholds for each WCAG 2.2 AA criterion |16| [Static Anti-Patterns](#static-anti-patterns) | 1 | HIGH | Grep-able patterns detectable without a browser |17| [Focus Management](#focus-management) | 3 | HIGH | Focus traps, focus restoration, keyboard navigation |18| [React Aria](#react-aria) | 3 | HIGH | Accessible components, form hooks, overlay patterns |19| [Modern Web Accessibility](#modern-web-accessibility) | 3 | CRITICAL/HIGH | Native HTML first, cognitive inclusion, user preferences |2021**Total: 14 rules across 6 categories**2223## Quick Start2425```tsx26// Semantic HTML with ARIA27<main>28 <article>29 <header><h1>Page Title</h1></header>30 <section aria-labelledby="features-heading">31 <h2 id="features-heading">Features</h2>32 </section>33 </article>34</main>35```3637```tsx38// Focus trap with React Aria39import { FocusScope } from 'react-aria';4041<FocusScope contain restoreFocus autoFocus>42 <div role="dialog" aria-modal="true">43 {children}44 </div>45</FocusScope>46```4748## WCAG Compliance4950WCAG 2.2 AA implementation for inclusive, legally compliant web applications.5152| Rule | File | Key Pattern |53|------|------|-------------|54| Color Contrast | `${CLAUDE_SKILL_DIR}/rules/wcag-color-contrast.md` | 4.5:1 text, 3:1 UI components, focus indicators |55| Semantic HTML | `${CLAUDE_SKILL_DIR}/rules/wcag-semantic-html.md` | Landmarks, headings, ARIA labels, form structure |56| Testing | `${CLAUDE_SKILL_DIR}/rules/wcag-testing.md` | axe-core, Playwright a11y, screen reader testing |5758## POUR Exit Criteria5960Concrete pass/fail thresholds for each WCAG 2.2 AA criterion — replaces vague "meets requirements" checks.6162| Rule | File | Key Pattern |63|------|------|-------------|64| POUR Exit Criteria | `${CLAUDE_SKILL_DIR}/rules/pour-exit-criteria.md` | Falsifiable checklist: image alt, contrast ratios, focus indicators, touch targets, ARIA states |6566## Static Anti-Patterns6768Grep-able anti-patterns detectable via static analysis or code review — no browser needed.6970| Rule | File | Key Pattern |71|------|------|-------------|72| A11y Anti-Patterns (Static) | `${CLAUDE_SKILL_DIR}/rules/a11y-antipatterns-static.md` | Focus removal, missing labels, autoplay, icon-only buttons, div-click handlers |7374## Focus Management7576Keyboard focus management patterns for accessible interactive widgets.7778| Rule | File | Key Pattern |79|------|------|-------------|80| Focus Trap | `${CLAUDE_SKILL_DIR}/rules/focus-trap.md` | Modal focus trapping, FocusScope, Escape key |81| Focus Restoration | `${CLAUDE_SKILL_DIR}/rules/focus-restoration.md` | Return focus to trigger, focus first error |82| Keyboard Navigation | `${CLAUDE_SKILL_DIR}/rules/focus-keyboard-nav.md` | Roving tabindex, skip links, arrow keys |8384## React Aria8586Adobe React Aria hooks for building WCAG-compliant interactive UI.8788| Rule | File | Key Pattern |89|------|------|-------------|90| Components | `${CLAUDE_SKILL_DIR}/rules/aria-components.md` | useButton, useDialog, useMenu, FocusScope |91| Forms | `${CLAUDE_SKILL_DIR}/rules/aria-forms.md` | useComboBox, useTextField, useListBox |92| Overlays | `${CLAUDE_SKILL_DIR}/rules/aria-overlays.md` | useModalOverlay, useTooltip, usePopover |9394## Modern Web Accessibility95962026 best practices: native HTML first, cognitive inclusion, and honoring user preferences.9798| Rule | File | Key Pattern |99|------|------|-------------|100| Native HTML First | `${CLAUDE_SKILL_DIR}/rules/wcag-native-html-first.md` | `<dialog>`, `<details>`, native over custom ARIA |101| Cognitive Inclusion | `${CLAUDE_SKILL_DIR}/rules/wcag-cognitive-inclusion.md` | ADHD/autism/dyslexia support, chunked content, notification management |102| User Preferences | `${CLAUDE_SKILL_DIR}/rules/wcag-user-preferences.md` | prefers-reduced-motion, forced-colors, prefers-contrast, zoom |103104## Key Decisions105106| Decision | Recommendation |107|----------|----------------|108| Conformance level | WCAG 2.2 AA (legal standard: ADA, Section 508) |109| Contrast ratio | 4.5:1 normal text, 3:1 large text and UI components |110| Target size | 24px min (WCAG 2.5.8), 44px for touch |111| Focus indicator | 3px solid outline, 3:1 contrast |112| Component library | React Aria hooks for control, react-aria-components for speed |113| State management | react-stately hooks (designed for a11y) |114| Focus management | FocusScope for modals, roving tabindex for widgets |115| Testing | jest-axe (unit) + Playwright axe-core (E2E) |116117## Anti-Patterns (FORBIDDEN)118119- **Div soup**: Using `<div>` instead of semantic elements (`<nav>`, `<main>`, `<article>`)120- **Color-only information**: Status indicated only by color without icon/text121- **Missing labels**: Form inputs without associated `<label>` or `aria-label`122- **Keyboard traps**: Focus that cannot escape without Escape key123- **Removing focus outline**: `outline: none` without replacement indicator124- **Positive tabindex**: Using `tabindex > 0` (disrupts natural order)125- **Div with onClick**: Using `<div onClick>` instead of `<button>` or `useButton`126- **Manual focus in modals**: Using `useEffect` + `ref.focus()` instead of `FocusScope`127- **Auto-playing media**: Audio/video that plays without user action128- **ARIA overuse**: Using ARIA when semantic HTML suffices129130## Detailed Documentation131132| Resource | Description |133|----------|-------------|134| `${CLAUDE_SKILL_DIR}/scripts/` | Templates: accessible form, focus trap, React Aria components |135| `${CLAUDE_SKILL_DIR}/checklists/` | WCAG audit, focus management, React Aria component checklists |136| `${CLAUDE_SKILL_DIR}/references/` | WCAG criteria reference, focus patterns, React Aria hooks API |137| `${CLAUDE_SKILL_DIR}/references/ux-thresholds-quick.md` | UI/UX thresholds quick reference: contrast, touch targets, cognitive load, typography, forms |138| `${CLAUDE_SKILL_DIR}/examples/` | Complete accessible component examples |139140## Related Skills141142- `ork:testing-e2e` - E2E testing patterns including accessibility testing143- `design-system-starter` - Accessible component library patterns144- `ork:i18n-date-patterns` - RTL layout and locale-aware formatting145- `motion-animation-patterns` - Reduced motion and animation accessibility146147---148> Converted and distributed by [TomeVault](https://tomevault.io/claim/yonatangross) — claim your Tome and manage your conversions.149<!-- tomevault:4.0:skill_md:2026-04-11 -->