plugins/accessibility/skills/screen-reader/SKILL.md
Screen reader compatibility: semantic HTML, landmarks, headings, ARIA live regions, forms, data tables, dynamic content. WCAG 2.2 AA.
npx skillsauth add lukeslp/accessibility-skills screen-readerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Screen reader compatibility patterns for web interfaces. Covers semantic structure, landmarks, heading hierarchy, ARIA live regions, forms, data tables, and dynamic content management for SPAs.
Related skills:
/accessibility:motor(touch targets, keyboard, switch access),/accessibility:visual(contrast, color, alt text),/accessibility:cognitive(plain language, reduced motion),/accessibility:testing(full WCAG checklist + all audit scripts)
<button> not <div onclick>. <nav> not <div class="nav">.<header>, <nav>, <main>, <aside>, <footer>aria-label to differentiate multiple landmarks of the same type (e.g., "Primary navigation" vs "Footer navigation")<button> for actions, <a> for navigation — not <div onclick> or <span role="button">aria-live="polite" for status updates (results count, save confirmation), "assertive" for errors and urgent alertsaria-busy="true" on containers being updated, announce completion via live region<label> element associated via for/id, or aria-label for icon-only inputs<fieldset> and <legend>aria-describedby, announce with aria-livearia-required="true" and visible indicator (not just an asterisk)Add autocomplete attributes to inputs that collect personal data. This lets browsers auto-fill and lets AT present familiar icons:
autocomplete="name", "given-name", "family-name"autocomplete="email", "tel", "street-address"autocomplete="new-password", "current-password", "bday"If help mechanisms exist (contact info, chat, FAQ link), they must appear in the same relative order on every page. Screen reader users build mental maps of page structure and depend on positional consistency.
<th> with scope="col" or scope="row" for header cells<caption> describing the table's purposeid/headers attributes to associate data cells with their headers| Script | What it checks |
|--------|---------------|
| heading-outline.py | Heading hierarchy — skipped levels, missing h1, empty headings |
| landmark-audit.py | ARIA landmark structure — missing main, unlabeled duplicates |
| link-text-audit.py | Vague link text ("click here"), empty links, image-only links |
python3 scripts/heading-outline.py index.html
python3 scripts/landmark-audit.py index.html
python3 scripts/link-text-audit.py index.html
reference/sr.css — Screen reader-only utilities (.sr-only, .visually-hidden, .sr-only-focusable)reference/sr-patterns.md — Landmark structure, screen reader announcements, accessible modal dialog (copy-paste JS/HTML)| Issue | Fix |
|-------|-----|
| Missing form labels | Associate <label> with for attribute |
| Div-based buttons | Use <button> element instead |
| ARIA misuse | Remove ARIA if native HTML works; validate roles |
| Inaccessible modals | Use native <dialog> with showModal() — handles focus automatically. For custom modals: trap focus, Escape to close, restore focus on dismiss |
tools
Visual accessibility: contrast ratios, color independence, CVI/photophobia/color blindness, alt text (4 styles), forced colors, text scaling. WCAG 2.2 AA.
development
Accessibility testing: full WCAG 2.2 AA checklist, manual testing methodology, 10 Python audit scripts (stdlib-only), common issues reference table.
development
Motor accessibility patterns from AAC development: touch targets, keyboard navigation, switch access, eye gaze, fatigue detection, pointer gestures. WCAG 2.2 AA.
data-ai
Cognitive and communication accessibility: plain language, dyslexia-friendly text, reduced motion, error prevention, memory support, captions, AAC integration. WCAG 2.2 AA.