Accessibility Review
This skill audits a product for accessibility — how well people with
disabilities (visual, motor, auditory, cognitive, situational) can perceive,
operate, and understand it — and writes up what to fix, tied to the standard it
fails. Accessibility isn't a subjective "nice to have": it's governed by
published, testable standards, and much of it is a legal requirement (ADA,
Section 508 in the US, EN 301 549 / the European Accessibility Act in the EU).
Grounding findings in those standards is what makes the report credible and
actionable.
Two honest framing points to carry into any review:
- Automated checks catch only part of it. Tools (axe, WAVE, Lighthouse) find
maybe a third of issues — mostly contrast, missing alt, missing labels. The
rest (meaningful focus order, sensible reading order, whether alt text is
good, whether an interaction is truly operable by keyboard and screen reader)
needs human judgment. Say so, and don't imply a clean automated scan means
"accessible."
- You often can't fully verify from a description. Real conformance testing
needs the running product, a keyboard, and a screen reader. When you only have
a screenshot or a description, give your best assessment, be explicit about what
you couldn't verify, and never claim conformance you didn't test.
The standards to reference
Reference these directly and by name — they're public norms, and citing them
precisely is what gives the review authority.
- WCAG (Web Content Accessibility Guidelines) — the W3C standard, the backbone
of nearly every accessibility law. Organized under four principles (the POUR
model): content must be Perceivable, Operable, Understandable, Robust. Each
principle contains testable success criteria, each at a conformance level:
A (must), AA (the near-universal legal/industry target), and AAA
(enhanced). Cite criteria by number and name, e.g. 1.4.3 Contrast (Minimum,
AA), 2.1.1 Keyboard (A), 4.1.2 Name, Role, Value (A). Default target is
WCAG 2.1 (or 2.2) Level AA unless the user states otherwise. Paraphrase the
requirement in plain language — don't paste long verbatim spec text; point to
the criterion so they can look it up.
- IBM Accessibility — IBM publishes an accessibility requirements checklist and
practical developer/designer guidance built on top of WCAG. Reference it as a
well-regarded, actionable interpretation of the same criteria, useful for
concrete "how to fix" direction.
- Mention the relevant legal framework when the user's context implies one
(Section 508, EN 301 549, ADA) — they mostly adopt WCAG AA by reference, so the
technical work is the same.
How to run the review
1. Set scope and target
Pin down: what's being reviewed (screen, flow, component, whole product, a PDF or
document), the conformance target (default WCAG 2.2 AA), and the context
(web, native mobile, email, document — the criteria apply but the techniques
differ). Ask what you're working from — live URL, prototype, screenshots, code —
since that determines how much you can actually verify.
2. Evaluate across the POUR principles
Walk the interface against each principle. The high-frequency checks, grouped:
Perceivable
- Text alternatives (1.1.1): every informative image/icon has meaningful alt
text; decorative images are marked so screen readers skip them.
- Color contrast (1.4.3 / 1.4.11): text meets ≥4.5:1 (≥3:1 for large text);
UI components and meaningful graphics meet ≥3:1. Measure it, don't eyeball —
run the bundled
scripts/contrast.py <fg> <bg> (accepts hex, rgb(), or basic
names) to get the exact ratio and per-threshold pass/fail, and cite that number
in the finding.
- Color not the only cue (1.4.1): information (errors, status, links) isn't
conveyed by color alone — pair with text, icon, or underline.
- Captions & transcripts (1.2.x): video has captions, audio has transcripts.
- Reflow & resize (1.4.4 / 1.4.10): content works zoomed to 200% and reflows
to a narrow viewport without loss.
- Meaningful sequence (1.3.2): the DOM/reading order matches the visual order.
Operable
- Keyboard (2.1.1 / 2.1.2): everything works with keyboard alone; no traps.
- Focus visible & order (2.4.7 / 2.4.3): a clear focus indicator, and focus
moves in a logical order.
- Target size (2.5.8): interactive targets are large enough (≥24×24 CSS px).
- Timing & motion (2.2.1 / 2.3.1): adjustable time limits; nothing flashes
more than 3×/second; respect reduced-motion.
- Skip/bypass & headings (2.4.1 / 2.4.6): a way past repeated blocks;
descriptive headings and labels.
Understandable
- Labels & instructions (3.3.2): every input has a programmatic, visible
label; instructions aren't placeholder-only.
- Errors (3.3.1 / 3.3.3): errors are identified in text, tied to the field,
and offer a correction.
- Consistency & predictability (3.2.x): navigation and components behave
consistently; nothing changes context unexpectedly on focus/input.
- Language & clarity (3.1.1): page language is set; plain language for
cognitive accessibility.
Robust
- Name, Role, Value (4.1.2): custom components expose correct name, role, and
state to assistive tech — usually via native HTML first, ARIA only where needed
and correct. Prefer semantic HTML over ARIA patches.
- Status messages (4.1.3): dynamic updates (toasts, validation, live results)
are announced to screen readers.
Beyond the checklist, test the way disabled users actually operate where you
can: tab through with the keyboard only, run a screen reader (VoiceOver, NVDA,
TalkBack), zoom to 200%, and check reduced-motion / dark-mode. Cognitive
accessibility (clear language, low memory load, forgiving flows) matters too and
is easy to overlook.
3. Log each issue against a criterion
For each problem, capture:
- Location — screen/component/element.
- The barrier — who it blocks and how (e.g. "keyboard users can't reach the
Close button; the modal traps focus").
- WCAG criterion (and level) it fails — cite number + name.
- Severity — see below.
- How to fix — concrete, ideally the accessible-HTML/ARIA technique or design
change.
4. Rate severity
Combine user impact (does it block a task for someone, or just add
friction?) with how many users and how central the path is. A pragmatic
scale:
- Blocker — makes a task impossible for a group (e.g. unlabeled checkout
button unusable by screen readers; keyboard trap). Must fix.
- Serious — major difficulty or exclusion on a common path (e.g. failing
contrast on body text, no visible focus).
- Moderate — noticeable barrier with a workaround.
- Minor — small friction or best-practice gap.
Note conformance level too: an A failure is more fundamental than an AA
one. Where a legal target applies, flag which failures put conformance at risk.
5. Write the report
# Accessibility Review: [product / screen] — [WCAG 2.2 AA]
## Overview
What was reviewed, target standard, what you tested with, what you could/couldn't verify
## Summary
Issue counts by severity, top blockers, overall conformance read (honest)
## Findings (most to least severe)
For each: location, barrier + who it affects, WCAG criterion (number + name + level),
severity, how to fix
## Prioritized fixes
Blockers first; group quick wins
## What still needs manual/AT testing
Explicitly list what a keyboard + screen-reader pass on the live product must confirm
Lead with blockers, cite the criterion on every finding, and make fixes concrete
enough to act on. Frame accessibility as designing for the full range of human
ability — it overwhelmingly improves the experience for everyone (the curb-cut
effect), not just users with disabilities.
Producing the deliverable
Default to a Markdown report; offer a .xlsx issue log (one row per issue:
location / barrier / WCAG criterion / level / severity / fix / status) when the
user wants to track remediation. Use [placeholders] for anything you couldn't
verify, and clearly separate confirmed findings from "likely — needs testing."
Bundled tools & automated checks
scripts/contrast.py <fg> <bg> — exact WCAG contrast ratio and per-threshold
pass/fail (used in the contrast check above). Accepts hex, rgb(), or basic
names.
scripts/readability.py "<text>" — Flesch Reading Ease / grade level, for
plain-language and cognitive-accessibility checks (relevant to WCAG 3.1.5 and
cognitive load generally).
- For the automated ~30% — missing
alt, unlabeled inputs, name/role/value,
missing lang, and similar mechanical failures — point the user to the free,
well-maintained scanners (axe / axe DevTools, Google Lighthouse, Pa11y,
WAVE) rather than hand-checking them. Don't reinvent those. This skill focuses
on the ~70% they can't catch: meaningful focus and reading order, whether alt
text is actually good, sensible error recovery, and real keyboard/screen-
reader operability.
Pairs well with
- heuristic-evaluation — general usability audit; run both to cover usability and accessibility.
- design-fundamentals — contrast, hierarchy, and type choices that prevent many a11y issues.
- inclusive-design — accessibility is inclusion for disability; inclusive-design widens the lens further.
Standards & sources
WCAG is an open W3C standard and IBM's accessibility guidance is publicly
published; referencing them by name, citing criteria by number, and paraphrasing
their requirements is encouraged and builds credibility. The one caution is about
their text: don't paste long verbatim passages of the copyrighted specification
or guideline prose — paraphrase the requirement and point to the source. Auditing
the user's own product and using their own screens/code is exactly the intended
use.
1---2name: accessibility-review3description: Audits a digital product against recognized accessibility standards — WCAG (the W3C Web Content Accessibility Guidelines) and IBM's accessibility requirements — and produces a prioritized findings report mapping each issue to the specific success criterion it fails, with severity and a concrete fix. Use this whenever the user wants an accessibility review, a11y audit, WCAG check, Section 508 / EN 301 549 conformance pass, or wants to know whether a screen, component, flow, PDF, or document is accessible; wants to fix contrast, keyboard, screen-reader, focus, alt-text, form-label, or ARIA problems; or asks which WCAG criterion something violates. Reach for it even when "accessibility" isn't named — any request to make a UI usable for people with disabilities, or to meet a legal accessibility requirement, qualifies.4---56# Accessibility Review78This skill audits a product for accessibility — how well people with9disabilities (visual, motor, auditory, cognitive, situational) can perceive,10operate, and understand it — and writes up what to fix, tied to the standard it11fails. Accessibility isn't a subjective "nice to have": it's governed by12published, testable standards, and much of it is a legal requirement (ADA,13Section 508 in the US, EN 301 549 / the European Accessibility Act in the EU).14Grounding findings in those standards is what makes the report credible and15actionable.1617Two honest framing points to carry into any review:1819- **Automated checks catch only part of it.** Tools (axe, WAVE, Lighthouse) find20 maybe a third of issues — mostly contrast, missing alt, missing labels. The21 rest (meaningful focus order, sensible reading order, whether alt text is22 *good*, whether an interaction is truly operable by keyboard and screen reader)23 needs human judgment. Say so, and don't imply a clean automated scan means24 "accessible."25- **You often can't fully verify from a description.** Real conformance testing26 needs the running product, a keyboard, and a screen reader. When you only have27 a screenshot or a description, give your best assessment, be explicit about what28 you couldn't verify, and never claim conformance you didn't test.2930## The standards to reference3132Reference these directly and by name — they're public norms, and citing them33precisely is what gives the review authority.3435- **WCAG (Web Content Accessibility Guidelines)** — the W3C standard, the backbone36 of nearly every accessibility law. Organized under four principles (the **POUR**37 model): content must be **Perceivable, Operable, Understandable, Robust.** Each38 principle contains testable **success criteria**, each at a conformance level:39 **A** (must), **AA** (the near-universal legal/industry target), and **AAA**40 (enhanced). Cite criteria by number and name, e.g. *1.4.3 Contrast (Minimum,41 AA)*, *2.1.1 Keyboard (A)*, *4.1.2 Name, Role, Value (A)*. Default target is42 **WCAG 2.1 (or 2.2) Level AA** unless the user states otherwise. Paraphrase the43 requirement in plain language — don't paste long verbatim spec text; point to44 the criterion so they can look it up.45- **IBM Accessibility** — IBM publishes an accessibility requirements checklist and46 practical developer/designer guidance built on top of WCAG. Reference it as a47 well-regarded, actionable interpretation of the same criteria, useful for48 concrete "how to fix" direction.49- Mention the relevant **legal framework** when the user's context implies one50 (Section 508, EN 301 549, ADA) — they mostly adopt WCAG AA by reference, so the51 technical work is the same.5253## How to run the review5455### 1. Set scope and target5657Pin down: what's being reviewed (screen, flow, component, whole product, a PDF or58document), the **conformance target** (default WCAG 2.2 AA), and the context59(web, native mobile, email, document — the criteria apply but the techniques60differ). Ask what you're working from — live URL, prototype, screenshots, code —61since that determines how much you can actually verify.6263### 2. Evaluate across the POUR principles6465Walk the interface against each principle. The high-frequency checks, grouped:6667**Perceivable**68- **Text alternatives (1.1.1):** every informative image/icon has meaningful alt69 text; decorative images are marked so screen readers skip them.70- **Color contrast (1.4.3 / 1.4.11):** text meets ≥4.5:1 (≥3:1 for large text);71 UI components and meaningful graphics meet ≥3:1. **Measure it, don't eyeball** —72 run the bundled `scripts/contrast.py <fg> <bg>` (accepts hex, `rgb()`, or basic73 names) to get the exact ratio and per-threshold pass/fail, and cite that number74 in the finding.75- **Color not the only cue (1.4.1):** information (errors, status, links) isn't76 conveyed by color alone — pair with text, icon, or underline.77- **Captions & transcripts (1.2.x):** video has captions, audio has transcripts.78- **Reflow & resize (1.4.4 / 1.4.10):** content works zoomed to 200% and reflows79 to a narrow viewport without loss.80- **Meaningful sequence (1.3.2):** the DOM/reading order matches the visual order.8182**Operable**83- **Keyboard (2.1.1 / 2.1.2):** everything works with keyboard alone; no traps.84- **Focus visible & order (2.4.7 / 2.4.3):** a clear focus indicator, and focus85 moves in a logical order.86- **Target size (2.5.8):** interactive targets are large enough (≥24×24 CSS px).87- **Timing & motion (2.2.1 / 2.3.1):** adjustable time limits; nothing flashes88 more than 3×/second; respect reduced-motion.89- **Skip/bypass & headings (2.4.1 / 2.4.6):** a way past repeated blocks;90 descriptive headings and labels.9192**Understandable**93- **Labels & instructions (3.3.2):** every input has a programmatic, visible94 label; instructions aren't placeholder-only.95- **Errors (3.3.1 / 3.3.3):** errors are identified in text, tied to the field,96 and offer a correction.97- **Consistency & predictability (3.2.x):** navigation and components behave98 consistently; nothing changes context unexpectedly on focus/input.99- **Language & clarity (3.1.1):** page language is set; plain language for100 cognitive accessibility.101102**Robust**103- **Name, Role, Value (4.1.2):** custom components expose correct name, role, and104 state to assistive tech — usually via native HTML first, ARIA only where needed105 and correct. Prefer semantic HTML over ARIA patches.106- **Status messages (4.1.3):** dynamic updates (toasts, validation, live results)107 are announced to screen readers.108109Beyond the checklist, **test the way disabled users actually operate** where you110can: tab through with the keyboard only, run a screen reader (VoiceOver, NVDA,111TalkBack), zoom to 200%, and check reduced-motion / dark-mode. Cognitive112accessibility (clear language, low memory load, forgiving flows) matters too and113is easy to overlook.114115### 3. Log each issue against a criterion116117For each problem, capture:118119- **Location** — screen/component/element.120- **The barrier** — who it blocks and how (e.g. "keyboard users can't reach the121 Close button; the modal traps focus").122- **WCAG criterion (and level)** it fails — cite number + name.123- **Severity** — see below.124- **How to fix** — concrete, ideally the accessible-HTML/ARIA technique or design125 change.126127### 4. Rate severity128129Combine **user impact** (does it *block* a task for someone, or just add130friction?) with **how many users and how central the path is**. A pragmatic131scale:132133- **Blocker** — makes a task impossible for a group (e.g. unlabeled checkout134 button unusable by screen readers; keyboard trap). Must fix.135- **Serious** — major difficulty or exclusion on a common path (e.g. failing136 contrast on body text, no visible focus).137- **Moderate** — noticeable barrier with a workaround.138- **Minor** — small friction or best-practice gap.139140Note conformance level too: an **A** failure is more fundamental than an **AA**141one. Where a legal target applies, flag which failures put conformance at risk.142143### 5. Write the report144145```146# Accessibility Review: [product / screen] — [WCAG 2.2 AA]147## Overview148 What was reviewed, target standard, what you tested with, what you could/couldn't verify149## Summary150 Issue counts by severity, top blockers, overall conformance read (honest)151## Findings (most to least severe)152 For each: location, barrier + who it affects, WCAG criterion (number + name + level),153 severity, how to fix154## Prioritized fixes155 Blockers first; group quick wins156## What still needs manual/AT testing157 Explicitly list what a keyboard + screen-reader pass on the live product must confirm158```159160Lead with blockers, cite the criterion on every finding, and make fixes concrete161enough to act on. Frame accessibility as designing for the full range of human162ability — it overwhelmingly improves the experience for *everyone* (the curb-cut163effect), not just users with disabilities.164165## Producing the deliverable166167Default to a Markdown report; offer a `.xlsx` issue log (one row per issue:168location / barrier / WCAG criterion / level / severity / fix / status) when the169user wants to track remediation. Use `[placeholders]` for anything you couldn't170verify, and clearly separate confirmed findings from "likely — needs testing."171172## Bundled tools & automated checks173174- `scripts/contrast.py <fg> <bg>` — exact WCAG contrast ratio and per-threshold175 pass/fail (used in the contrast check above). Accepts hex, `rgb()`, or basic176 names.177- `scripts/readability.py "<text>"` — Flesch Reading Ease / grade level, for178 plain-language and cognitive-accessibility checks (relevant to WCAG 3.1.5 and179 cognitive load generally).180- **For the automated ~30%** — missing `alt`, unlabeled inputs, name/role/value,181 missing `lang`, and similar mechanical failures — point the user to the free,182 well-maintained scanners (**axe / axe DevTools, Google Lighthouse, Pa11y,183 WAVE**) rather than hand-checking them. Don't reinvent those. This skill focuses184 on the ~70% they can't catch: meaningful focus and reading order, whether alt185 text is actually *good*, sensible error recovery, and real keyboard/screen-186 reader operability.187188## Pairs well with189190- **heuristic-evaluation** — general usability audit; run both to cover usability *and* accessibility.191- **design-fundamentals** — contrast, hierarchy, and type choices that prevent many a11y issues.192- **inclusive-design** — accessibility is inclusion for disability; inclusive-design widens the lens further.193194## Standards & sources195196WCAG is an open W3C standard and IBM's accessibility guidance is publicly197published; referencing them by name, citing criteria by number, and paraphrasing198their requirements is encouraged and builds credibility. The one caution is about199*their* text: don't paste long verbatim passages of the copyrighted specification200or guideline prose — paraphrase the requirement and point to the source. Auditing201the user's own product and using their own screens/code is exactly the intended202use.