Agent skills
A11y audit
Run this across the site when the user asks "is my site accessible?" or "audit a11y". Fixes applied inline where safe; otherwise flagged for the user.
What to check (WCAG 2.1 AA, pragmatic subset)
Semantic HTML
- Each page has exactly one
<h1>. - Heading hierarchy: h1 → h2 → h3, no skipping.
- Landmarks in place:
<header>,<nav>,<main>,<footer>.
Keyboard
- Every interactive element reachable with Tab.
- Focus state visible (the kit has a default focus ring; confirm not overridden).
- No keyboard traps.
- Skip-to-content link at the top of
<body>(add one if missing).
ARIA
- Icon-only buttons have
aria-label. - Toggle buttons (like the mobile menu) have
aria-expanded. - Decorative icons have
aria-hidden="true". - Images have meaningful
alt; decorative ones usealt="".
Color + contrast
- Body text contrast ≥ 4.5:1 against background.
- Large text (18px+) contrast ≥ 3:1.
- UI components (buttons, inputs, borders) contrast ≥ 3:1.
- Do not rely on color alone for meaning.
Forms
- Every input has an associated
<label>. - Required fields marked both visually and with
aria-requiredorrequired. - Error messages announced via
aria-liveregions.
Motion
- Animations respect
prefers-reduced-motion. - No auto-playing video with sound.
How to run
- Read every route file under
app/routes/and every component underapp/components/. - Grep for common a11y issues:
- Icon-only
<button>withoutaria-label. <img>withoutalt.- Headings out of order.
- Icon-only
- Fix the safe ones inline. Flag anything that requires a design decision (like low-contrast brand colors).
- Run Lighthouse a11y audit in Chrome devtools; target score 95+.
- Report the list of fixes and remaining items to the user.
Report format
Fixed inline:
- Added aria-label to mobile menu toggle in Header.tsx
- Added alt text to hero image on index.tsx
Needs your input:
- DESIGN.md accent color contrast against white is 3.1:1 (target 4.5:1 for body).
Options: darken the accent, or use it only for non-text (icons, borders).Never touch
Do not change DESIGN.md colors during an a11y pass. Flag contrast issues to the user; any change to the design system is a separate conversation.