accessibility-audit
Skill1 starsChanged 46 days agoMITView on GitHub
WCAG 2.2 AA patterns for Astro — semantic HTML, keyboard navigation, focus indicators, form labels, contrast ratios, ARIA roles, and motion preferences. Use when building or auditing any UI for accessibility, adding forms or interactive components, reviewing contrast or touch targets, or when fixing axe-core violations from Playwright tests. Load this skill before adding any form, dialog, tab, accordion, or icon-only button.
55 other projects use a version of this.
Adopted by
Most recently taken up by
- ishandutta2007/Awesome-Claude-Skillstheir own version, first seen Nov 8, 2026
- ainurdev/mystical-assistanttheir own version, first seen Nov 8, 2026
- mzeleniuk/ClaudeVueProjectTemplatetheir own version, first seen Nov 8, 2026
- Smaui94/ClaudeSkillCollectiontheir own version, first seen Nov 8, 2026
- memi-design/design-skillstheir own version, first seen Nov 8, 2026
- Cure-Consulting-Group/ProductEngineeringSkillstheir own version, first seen Nov 4, 2026
Used with
Projects with it also use design-system-audit, flaky-test-triage and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
jpoindexterSkilldesign-system-audit
Audit code for design system violations - grid spacing, tokens, existing components
Also in 4 projects that use this
SUDARSHANCHAUDHARISkillflaky-test-triage
Diagnoses inconsistent test results by separating product nondeterminism, automation defects, shared data, timing, infrastructure, environment, order, and concurrency effects.
Also in 3 projects that use this
tekumaraSkillapi-design-review
Reviews REST API design by inventorying routes, finding overlapping functionality, comparing payloads and pagination, and checking resource naming, URL structure, identifiers, errors, idempotency, and timestamps. Use when asked to review API routes, compare endpoints, find redundant or superseding operations, assess contract consistency, or run a REST API design review.
Also in 3 projects that use this
BufferoverflovvSkillobservability-setup
Add production observability to a FastMCP server: request IDs, slow-request logging, structured log fields, and optional Prometheus metrics. Use when: hardening logging for production, adding request tracing or correlation IDs, setting up slow-request alerts, adding a /metrics endpoint, or improving structured log output beyond the base middleware.
Also in 3 projects that use this
mmondoraSkillinfrastructure-as-code
Infrastructure as Code with Terraform and Pulumi. State management, modularity, drift detection, secrets handling. Use when provisioning cloud resources, writing Terraform/Pulumi modules, or managing infrastructure configuration.
Also in 3 projects that use this
OpenAISkilldesign-qa
Internal prototype QA helper. Use only after a Product Design prototype, URL-to-code build, or image-to-code build has a source visual target and a rendered implementation to compare before handoff. Do not use for broad UX critique, design critique, product audits, or flow reviews; route those user-facing requests to audit.
Also in 3 projects that use this
Other versions55 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 55
- me2resh/apexyard★ 542same name
- github/replica★ 230same name
- cuellarfr/design-skills★ 94same name
- adityareddy-dev/deskstudio★ 43same name
- launchapp-dev/animus-cli★ 39same name
- kumaran-is/claude-code-onboarding★ 35same name
- 5throck/ai-workspace-standards★ 25same name
- Indium-AI-Labs/indium-agentkit★ 18same name
- Ionate-Technologies/indium-agentkit★ 17same name
- ishandutta2007/Awesome-Claude-Skills★ 16same name
45 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository81 other files it gives its agents.
- accessibility-action-planSkill
- accessibility-finding-explainerSkill
- accessibility-report-summarySkill
- agent-config-authoringSkill
- agents-sdkSkill
- ai-ux-patternsSkill
- alt-text-generatorSkill
- anti-ai-copySkill
- aria-usage-reviewSkill
- astro-architectureSkill
- astro-client-scriptsSkill
- astro-component-a11y-reviewSkill
- before-after-accessibility-commsSkill
- bfsg-risk-language-softenerSkill
- biomeSkill
- blog-from-transcriptSkill
- brand-voice-dnaSkill
- case-study-from-auditSkill
- client-email-after-auditSkill
- cloudflare-email-serviceSkill
- cloudflare-one-migrationsSkill
- cloudflare-oneSkill
- cloudflareSkill
- complexity-judgmentSkill
- component-doc-writerSkill
- content-clarity-a11y-checkSkill
- content-qaSkill
- conversation-retrospectiveSkill
- darkmodeSkill
- deep-researchSkill
- design-directionsSkill
- design-systemsSkill
- durable-objectsSkill
- faq-from-issuesSkill
- form-accessibility-reviewSkill
- frontend-designSkill
- handoffSkill
- i18nSkill
- image-to-webpSkill
- keyboard-navigation-reviewSkill
- knowledge-baseSkill
- landing-and-site-builderSkill
- landingpage-from-briefingSkill
- lighthouse-axe-result-explainerSkill
- linkedin-post-from-contentSkill
- llm-councilSkill
- local-business-seoSkill
- mcp-builderSkill
- mdx-contentSkill
- motion-designSkill
- native-html-uiSkill
- newsletter-from-auditSkill
- overlay-tool-risk-explainerSkill
- playwrightSkill
- post-auditSkill
- remotionSkill
- sandbox-migrate-to-nextSkill
- sandbox-nextSkill
- sandbox-sdkSkill
- sandbox-stableSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. 0 are common, 4 are distinctive, and 10 are very specific to this project.
0
Common
Most of the 46 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
Never use <a> without href for actions — use <button type="button">.
- Very specific: line 36
Always set type="button" or type="submit" explicitly.
- Very specific: line 37
Never <div onclick> — use <button>.
- Distinctive: line 95
Never use tables for layout.
- Very specific: line 100
Always set width and height to prevent layout shift.
- Distinctive: line 111
Never use color as the sole indicator — pair with icon, text, or pattern.
- Very specific: line 112
Every color class needs an explicit dark: counterpart.
- Very specific: line 113
Avoid low-contrast muted grays on white (e.g.
- Very specific: line 117
All animations must respect prefers-reduced-motion:
- Distinctive: line 127
No blinking or flashing effects (WCAG 2.3.1 — max 3 flashes/sec).
- Very specific: line 141
Prefer native <details> + <summary>.
- Very specific: line 152
Prefer native <dialog>. For custom modals:
- Very specific: line 188
All images have alt (or alt="" + aria-hidden).
- Distinctive: line 189
All links have visible underline (or button styling is intentional).
“Common” is measured: kept by at least 6 in 10 of the 46 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Accessibility audit
Accessibility is baseline, not a feature. Every pattern must be usable without a mouse, without sight, and without fine motor control.
Focus areas
- Semantic HTML first — use native elements (
<button>,<a>,<details>,<dialog>) where possible. - Keyboard access and visible focus indicators on all interactive elements.
- Labels, landmarks, and sensible heading hierarchy.
- Contrast and motion preferences respected in light and dark mode.
Page structure
- One
<h1>per page, no skipped heading levels. - Landmarks:
<nav aria-label="…">,<main id="main">,<article>,<section aria-labelledby="…">,<aside>,<footer>. - Skip link to
#mainin the layout. - Set
langon<html>; derive per locale where i18n is in use.
Interactive elements
Links
- Links distinguishable by underline, not color alone.
- External links with
target="_blank"needrel="noopener noreferrer"and a screen reader hint (<span class="sr-only">(opens in new tab)</span>). - Icon-only links need
aria-label; the icon inside getsaria-hidden="true". - Never use
<a>withouthreffor actions — use<button type="button">.
Buttons
- Icon-only buttons must have
aria-label; inner iconaria-hidden="true". - Always set
type="button"ortype="submit"explicitly. - Never
<div onclick>— use<button>.
Keyboard navigation
/* Global focus style — never remove without a visible alternative */
:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
}- Focus order follows visual layout — don't use positive
tabindex. - Custom interactive elements need
tabindex="0", appropriaterole, and keyboard event handlers.
Touch targets (WCAG 2.5.8)
Minimum 44×44 px for all interactive elements. Apply padding or min-h-[44px] min-w-[44px].
Forms
<div>
<label for="email" class="text-sm font-semibold">
Email <span aria-hidden="true">*</span>
</label>
<input
type="email"
id="email"
name="email"
required
autocomplete="email"
aria-invalid={!!inputError?.email}
aria-describedby={inputError?.email ? 'email-error' : undefined}
/>
{inputError?.email && (
<span id="email-error" class="text-xs text-error" role="alert">
{inputError.email}
</span>
)}
</div>Checklist:
| Requirement | Implementation |
| Associated label | <label for="id"> matching <input id="id"> |
| Required indicator | Visual * with aria-hidden="true" plus required |
| Error state | aria-invalid={true} on invalid input |
| Error message | <span role="alert"> linked via aria-describedby |
| Autocomplete | autocomplete="name|email|tel|..." |
| Grouped inputs | <fieldset> + <legend> for radios/checkboxes/address blocks |
| Success feedback | <div role="status"> |
Tables
<caption>for purpose,<th scope="col">for columns,<th scope="row">for row headers.- Never use tables for layout.
Images
- All
<img>needalt. Decorative:alt=""plusaria-hidden="true". - Always set
widthandheightto prevent layout shift. - SVG icons:
aria-hidden="true" focusable="false"when decorative.
Color & contrast
| Text type | Minimum ratio |
| Normal text (< 18 px) | 4.5:1 |
| Large text (>= 18 px bold / 24 px) | 3:1 |
| UI components, borders, icons, focus rings | 3:1 |
- Never use color as the sole indicator — pair with icon, text, or pattern.
- Every color class needs an explicit
dark:counterpart; both modes must independently meet contrast. - Avoid low-contrast muted grays on white (e.g.
text-neutral-400).
Motion
All animations must respect prefers-reduced-motion:
.animate-fade-in { animation: fadeIn 0.3s ease-out; }
@media (prefers-reduced-motion: reduce) {
.animate-fade-in { animation: none; }
}- No blinking or flashing effects (WCAG 2.3.1 — max 3 flashes/sec).
- Tailwind: use
motion-safe:andmotion-reduce:variants. - Scroll-driven animations: provide
@supportsfallback plus reduced-motion override.
ARIA patterns
Navigation with aria-current
<a href={href} aria-current={isActive ? 'page' : undefined}>{label}</a>Disclosure / accordion
Prefer native <details> + <summary>. For custom accordions use aria-expanded and aria-controls.
Tabs
role="tablist"witharia-labelon container.role="tab"+aria-selectedon each tab; inactive tabstabindex="-1".role="tabpanel"+aria-labelledbyon each panel.- Arrow-key navigation left/right.
Dialog
Prefer native <dialog>. For custom modals:
role="dialog"+aria-modal="true"+aria-labelledby.- Focus trap, Escape closes, return focus to trigger on close.
Live regions
aria-live="polite"for non-urgent status.role="alert"for errors (assertive).role="status"for success messages.
Lists
Tailwind's list-none strips list semantics in Safari — add role="list" when you need the semantic back.
Anti-patterns
<!-- WRONG --> <div class="cursor-pointer" onclick="…">Click me</div>
<!-- RIGHT --> <button type="button">Click me</button>
<!-- WRONG --> <button><svg>…</svg></button>
<!-- RIGHT --> <button aria-label="Close menu"><svg aria-hidden="true">…</svg></button>
<!-- WRONG --> <span class="text-red-500">Error</span>
<!-- RIGHT --> <span class="text-red-500">⚠ Error: email is required</span>
<!-- WRONG --> <p class="text-neutral-700">Text</p>
<!-- RIGHT --> <p class="text-neutral-700 dark:text-neutral-300">Text</p>New page checklist
langset on<html>.- Single
<h1>, sensible heading hierarchy. - Semantic landmarks in place, skip link works.
- All images have
alt(oralt=""+aria-hidden). - All links have visible underline (or button styling is intentional).
- Icon-only buttons/links have
aria-label. - Form inputs:
<label>,aria-invalid,aria-describedby,autocomplete. - Fieldset + legend for grouped inputs.
- Error messages use
role="alert"; success usesrole="status". - Focus indicators visible, no keyboard traps, all interactive elements reachable.
- Contrast meets 4.5:1 / 3:1 and holds in dark mode.
- No color-only signals.
- Touch targets ≥ 44×44 px.
- Animations respect reduced motion.
- External links:
rel="noopener noreferrer". - Tables:
<caption>and<th scope>.
Testing
Automated (axe-core + Playwright)
import AxeBuilder from '@axe-core/playwright';
test('page has no a11y violations', async ({ page }) => {
await page.goto('/new-page');
const results = await new AxeBuilder({ page })
.withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
.analyze();
expect(results.violations).toEqual([]);
});Build-time
@casoon/astro-post-audit checks after every build for missing alt text, missing labels, empty button text, missing skip link, and heading hierarchy violations.
Manual
- Tab through the page — verify focus order and visibility.
- Screen reader (VoiceOver / NVDA / Orca).
- Zoom to 200 % — content must reflow without horizontal scroll.
- Enable
prefers-reduced-motionin DevTools — animations must stop. - DevTools Accessibility tab — check computed roles and names.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

