skills/reviewing-accessibility/SKILL.md
Use this skill to review implemented UI code for WCAG accessibility compliance. Triggers when reviewing components, pages, or templates for accessibility, auditing a feature after implementation, or answering questions about accessible patterns, ARIA, keyboard navigation, or screen reader support.
npx skillsauth add mattobee/skills reviewing-accessibilityInstall 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.
Review implemented UI code against WCAG Level AA criteria. This skill reviews code that already exists — components, pages, templates, or markup. It does not write code; findings are reported for a developer or coder agent to act on.
For pre-implementation risk assessment of plans or proposals, use predicting-accessibility-risks instead.
Review the implemented code against the checklist below. Reference specific WCAG success criteria when flagging violations. Read the actual source files — do not review from memory or assumptions.
button, nav, main, article, h1-h6, etc.)div or span with role="button" when a native <button> would workh1 per page, no skipped levels)ul/ol/dl for related items, not styled divsth, caption or aria-labelWCAG: 1.3.1 Info and Relationships, 2.4.6 Headings and Labels
WCAG: 2.1.1 Keyboard, 2.1.2 No Keyboard Trap, 2.4.1 Bypass Blocks
WCAG: 2.4.7 Focus Visible, 2.4.11 Focus Not Obscured, 3.2.1 On Focus
<label> elements (not placeholder-only)alt text (or alt="" for decorative images)aria-describedby)aria-label or visually hidden textWCAG: 1.1.1 Non-text Content, 1.3.1 Info and Relationships, 3.3.2 Labels or Instructions, 4.1.2 Name, Role, Value
aria-live) used for dynamic content announcementsaria-current used for navigation indicatorsWCAG: 4.1.2 Name, Role, Value
prefers-reduced-motionWCAG: 1.4.1 Use of Color, 1.4.3 Contrast (Minimum), 1.4.11 Non-text Contrast, 2.3.1 Three Flashes, 2.5.8 Target Size
required or aria-required)aria-invalid="true" set on fields in error state, cleared when correctedaria-describedby and announced via role="alert" or aria-live="assertive"autocomplete values on personal data fieldsWCAG: 1.3.5 Identify Input Purpose, 3.3.1 Error Identification, 3.3.2 Labels or Instructions, 3.3.3 Error Suggestion
## Accessibility Review - [scope description]
### Critical — WCAG Level A violations that make a feature unusable for a disability group
- **[WCAG SC]** `file:line` - [issue] -> [fix]
### Serious — WCAG Level AA violations that degrade but do not block the experience
- **[WCAG SC]** `file:line` - [issue] -> [fix]
### Moderate — Best practices and WCAG AAA improvements
- **[WCAG SC or "Best practice"]** `file:line` - [issue] -> [fix]
### Summary
[count] issues found: [n] critical, [n] serious, [n] moderate.
If no issues are found, say so. Do not invent findings.
If the project runs axe-core or a similar automated scanner, it already catches: missing alt text, duplicate IDs, basic colour contrast on static text, missing form labels, invalid ARIA attributes, missing lang attribute, landmark violations, heading level skips.
Focus review effort on what automated tools miss: dynamic state management (aria-invalid, aria-expanded, aria-live), focus management after interactions, keyboard trap detection, multi-theme contrast for CSS custom properties, shadow DOM internals, meaningful accessible name quality (not just presence), target size adequacy, and motion preference compliance.
Read references/review-checklist.md for the full prioritised checklist with WCAG criterion references.
toHaveAccessibleName() cannot pierce shadow DOM. When reviewing tests for web components with shadow DOM, accessible name assertions may need to check attributes on the host element rather than using computed name matchers.prefers-reduced-motion compliance. Manual review and Playwright assertions fill these gaps.h3 is correct or incorrect depending on the page context it appears in. Review heading levels in the context of the full page, not in isolation.aria-errormessage has inconsistent assistive technology support. Prefer aria-describedby for associating error messages with form fields — it has broader support and is functionally equivalent for this purpose.Ground all findings in the official WCAG specification and supporting documents. Do not rely on assumptions about what WCAG requires — defer to the spec:
When uncertain about a recommendation, say so explicitly and explain what could not be verified, rather than guessing.
data-ai
Use this skill to create Obsidian event notes for the day's calendar meetings, each pre-populated with grounded talking points. Triggers when the user asks to prepare for their meetings, create notes for today's calendar events, set up meeting notes, or get ready for the day. Pulls the events they have accepted, creates one note per meeting following the vault's event conventions, and fills a prep section with talking points grounded in prior meeting notes, related project notes, recent GitHub activity, and Slack threads. Use it for daily meeting prep even when the user doesn't mention Obsidian or notes by name.
tools
Use this skill to work through review feedback on a pull request — read the inline review comments, assess each one's validity, make the code changes that are warranted, and reply to every thread with a one-line explanation of what was done (or why it was declined). Triggers when the user asks to address PR feedback, respond to reviewers, work through review comments, handle a code review, action the comments on a PR, or asks "what do the reviewers want changed?" Also triggers when resuming work on a PR that has open review threads.
testing
Use this skill to write Playwright accessibility tests using the two-layer strategy (axe-core scans + targeted assertions). Triggers when adding accessibility test coverage, reviewing test gaps, writing axe scans, or creating Playwright assertions for accessible names, landmarks, ARIA states, focus management, or contrast.
tools
Use this skill to suggest prioritised next steps for a project. Triggers when the user asks what to work on next, wants to resume after a break, or needs help prioritising a backlog.