---
name: accessibility
description: Accessibility and screen-reader support, built in from the start rather than bolted on. Claude treats a11y as an afterthought and reaches for clickable divs, skips alt text and labels, and removes focus rings. Use when building or editing any UI, page, or interactive component. Covers semantic HTML before ARIA, real buttons and links, accessible names, keyboard operability and focus management, headings and landmarks, contrast and motion, and how to actually test it. Most of it is free if you use the right element.
when_to_use: |
- Building or editing any UI, page, form, or interactive component, treat a11y as a default, not a later pass
- Anything with buttons, links, forms, modals, menus, tabs, or icons
- About to use a clickable `
`, skip `alt` or a label, remove a focus outline, or disable zoom
- Dynamic content that updates without a full page load (toasts, async results, SPA route changes)
- Do NOT skip this for "internal" tools, accessibility is not optional there either
---
# Accessibility: Build It In, Don't Bolt It On
Accessibility is a current best practice, not a nice-to-have for later, and most of it costs nothing if you use the right elements from the start. Claude's defaults (clickable divs, missing labels, removed focus rings) are exactly what breaks screen readers and keyboards, and they're expensive to retrofit. Treat it as part of the build, like you would performance.
## Semantic HTML first, ARIA last
The native element gives you keyboard support, focus, the correct role, and screen-reader semantics for free. The first rule of ARIA is don't use ARIA when a native element already does the job, and bad ARIA is worse than none. Reach for the real element before reaching for a role.
## Use the real element, not a clickable div
`