Expert web accessibility (a11y): WCAG 2.2 AA, semantic HTML, ARIA, keyboard, and screen readers. Trigger keywords: accessibility, a11y, WCAG, ARIA, role, screen reader, keyboard navigation, focus, focus trap, contrast, alt text, semantic HTML, label, axe, tab order. Use to build accessible UI, audit/fix a11y issues, or add accessible behavior to widgets.
How this skill is triggered — by the user, by Claude, or both
Slash command
/accessibility-expert:accessibility-expertThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> The first rule of ARIA is don't use ARIA — a native `<button>` beats `<div role="button">` every time. Target WCAG 2.2 AA. If it doesn't work with the keyboard, it isn't done.
The first rule of ARIA is don't use ARIA — a native
<button>beats<div role="button">every time. Target WCAG 2.2 AA. If it doesn't work with the keyboard, it isn't done.
tailwind-expert.react-expert.<button>, <a href>, <label>, <nav>, <main>, <dialog>, <input type>). They bring role, state, and keyboard behavior for free.:focus-visible). Never outline:none without a clear replacement.tabindex; use tabindex="-1" for programmatic focus, 0 to add non-interactive elements to tab order only when necessary.inert/aria-hidden. Prefer the native <dialog> element.<label for>, wrapping <label>, aria-label, or aria-labelledby. Icon-only buttons need an accessible name (visually-hidden text or aria-label).alt; decorative → alt="". Communicate state with aria-expanded/-selected/-checked/-current/-pressed, and announce async changes via a live region (aria-live="polite", or role="alert" for errors).prefers-reduced-motion. Don't disable zoom; support 200% text scaling.<div onClick> as a button → not focusable or keyboard-operable; use <button>.<label>.role without behavior → role="button" still needs tabindex="0" + Enter/Space handlers (so just use <button>).aria-label on a non-interactive <div> → often ignored; put names on real controls.tabindex > 0 → breaks natural order.Accessible icon button + disclosure
<button type="button" aria-expanded="false" aria-controls="menu">
<svg aria-hidden="true" focusable="false">…</svg>
<span class="sr-only">Open menu</span>
</button>
<ul id="menu" hidden>…</ul>
<!-- toggle hidden + aria-expanded together in JS; Esc closes and returns focus -->
Form field wired to its label and error
<label for="email">Email</label>
<input id="email" name="email" type="email"
aria-describedby="email-err" aria-invalid="true" required />
<p id="email-err" role="alert">Enter a valid email address.</p>
tailwind-expert — focus-visible styles and meeting contrast ratios.react-expert — focus management, inert, and accessible component patterns.testing-expert — automated checks with axe-core/jest-axe in CI.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub miaoge-ge/coding-agent-skills --plugin accessibility-expert