web-accessibility-auditor
Inclusive web development guide focused on semantic HTML, screen readers, and keyboard navigation.
Install
mkdir -p .claude/skills/web-accessibility-auditor && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/9771" && unzip -o skill.zip -d .claude/skills/web-accessibility-auditor && rm skill.zipInstalls to .claude/skills/web-accessibility-auditor
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Web Accessibility (a11y) mastery. WCAG 2.2 AA standards, semantic HTML, ARIA attributes, keyboard navigation, focus management, screen reader compatibility, color contrast, and dynamic content announcements. Use when building UI components or auditing frontend code for accessibility compliance.Key capabilities
- →Audit frontend code for WCAG 2.2 compliance
- →Implement semantic HTML structures
- →Manage keyboard focus in interactive components
- →Configure ARIA attributes for custom widgets
- →Set up live regions for dynamic content
How it works
It evaluates UI components against WCAG standards, prioritizing native HTML elements and proper ARIA usage to ensure screen reader and keyboard compatibility.
Inputs & outputs
When to use web-accessibility-auditor
- →Auditing frontend accessibility
- →Building accessible form components
- →Ensuring WCAG compliance
About this skill
Web Accessibility (a11y) — Inclusive UI Mastery
Mandatory Pre-Flight Context Inspection
Before auditing accessibility or building UI components, you MUST inspect:
- Native Semantic HTML First Rule (Section 28) → Use native
<button>,<a>,<label>elements; ban addingrole="button"to non-interactive<div>tags - Keyboard Focus Visibility (Section 61) → Preserve
:focus-visibleoutlines; ban global outline removal (*:focus { outline: none; }) - Explicit Form Label Linking (Section 129) → Explicitly link inputs to
<label>viaid/forattributes; ban usingplaceholderas a label replacement
Hallucination Traps (Read First)
- ❌ Adding
role='button'to a<div>instead of using<button>-> ✅ Native HTML elements have built-in keyboard and screen reader support - ❌ Using
aria-labelon elements that already have visible text -> ✅ Redundant ARIA overrides visible text for screen readers; use only when needed - ❌ Color as the only indicator of state -> ✅ Always pair color with icon, text, or pattern for colorblind users (1 in 12 males)
- ❌ Assuming accessibility is a checklist to run at the end -> ✅ Build accessible from the start; retrofitting is 10x more expensive
Web Accessibility (a11y) — Inclusive UI Mastery
1. Semantic HTML over <div> Soup
The first rule of ARIA: Use native HTML elements whenever possible.
<!-- ❌ BAD: Meaningless markup, screen readers see nothing, no keyboard focus -->
<div class="submit-button" onclick="submit()">Submit</div>
<!-- ✅ GOOD: Native semantic element (inherits focus, Enter/Space key behavior) -->
<button type="submit" class="button">Submit</button>
<!-- ❌ BAD: Div as a link -->
<div onclick="goToPath('/about')">About Us</div>
<!-- ✅ GOOD: Native anchor -->
<a href="/about">About Us</a>
Layout Semantics
Replace <div class="x"> with meaning:
<header>/<footer><nav>(Main navigations)<main>(The primary content)<article>(Self-contained content blocks)<aside>(Sidebars, callouts)
2. Keyboard Navigation & Focus Management
Every interactive element MUST be keyboard accessible.
/* ❌ BAD: Removing focus outlines ruins keyboard navigation */
*:focus {
outline: none;
}
/* ✅ GOOD: Using :focus-visible for keyboard users only */
*:focus {
outline: none;
} /* Hide for click */
*:focus-visible {
outline: 2px solid var(--accent-color);
outline-offset: 2px;
}
Managing Focus in Modals (Dialogs)
When a modal opens:
- Focus must move into the modal (first focusable element).
- Focus must be trapped inside the modal (Tabbing loops inside it).
- Background must be hidden from screen readers (
aria-hidden="true"). Escapekey must close it.- When closed, focus returns to the button that opened it.
<!-- ✅ BEST: Use the native <dialog> element. It handles focus trapping automatically! -->
<dialog id="myModal">
<h2>Settings</h2>
<button formmethod="dialog">Close</button>
</dialog>
<script>
document.getElementById("myModal").showModal();
</script>
3. ARIA Roles & Attributes
When you build complex custom widgets (like tabs or accordions), you must apply ARIA attributes to tell screen readers what it is and what state it's in.
<!-- Example: Custom Accordion/Disclosure -->
<!-- ❌ BAD: Screen reader sees plain text, doesn't know it's expandable -->
<div class="accordion">
<div class="header">Advanced Settings</div>
<div class="content" style="display: none;">...</div>
</div>
<!-- ✅ GOOD: ARIA provides context -->
<div class="accordion">
<button aria-expanded="false" aria-controls="panel-id" id="header-id">Advanced Settings</button>
<div id="panel-id" role="region" aria-labelledby="header-id" hidden>...</div>
</div>
Crucial ARIA states:
aria-expanded="true/false": For accordions, dropdowns, menus.aria-hidden="true": Removes decorative icons/containers from the screen reader tree.aria-pressed="true/false": For toggle buttons.aria-invalid="true": For invalid form fields.
4. Forms & Labels
Every input must have an associated label. placeholder is NOT a label (it disappears when typing, causing cognitive loss).
<!-- ❌ BAD -->
<input type="text" placeholder="Email Address">
<!-- ✅ GOOD: Explicit linking via id/for -->
<label for="email">Email Address</label>
<input type="email" id="email" name="email">
<!-- ✅ GOOD: Implicit wrapping -->
<label>
Email Address
<input type="email" name="email">
</label>
<!-- Accessible Error Messages -->
<label for="username">Username</label>
<input
type="text"
id="username"
aria-invalid="true"
aria-describedby="username-error"
<span id="username-error" role="alert" class="error-msg">Username is already taken</span>
5. Live Regions (Dynamic Updates)
When content changes dynamically without a page reload (e.g., Toast notifications, AI responding, search results updating), the screen reader needs to be notified.
<!--
role="alert": Interrupts the user immediately (e.g., error).
role="status" (or aria-live="polite"): Waits until the user pauses, then announces.
-->
<div aria-live="polite" class="sr-only">
<!-- JavaScript injects: "3 items found" here, screen reader reads it aloud -->
</div>
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
- Over-engineering: Proposing complex abstractions or distributed systems when a simpler approach suffices.
- Hallucinated Libraries/Methods: Using non-existent methods or packages. Always
// VERIFYor checkpackage.json/requirements.txt. - Skipping Edge Cases: Writing the "happy path" and ignoring error handling, timeouts, or data validation.
- Context Amnesia: Forgetting the user's constraints and offering generic advice instead of tailored solutions.
- Silent Degradation: Catching and suppressing errors without logging or re-raising.
Slash command: /review or /tribunal-full
Active reviewers: logic-reviewer · security-auditor
❌ Forbidden AI Tropes
- Blind Assumptions: Never make an assumption without documenting it clearly with
// VERIFY: [reason]. - Silent Degradation: Catching and suppressing errors without logging or handling.
- Context Amnesia: Forgetting the user's constraints and offering generic advice instead of tailored solutions.
Review these questions before confirming output:
✅ Did I rely ONLY on real, verified tools and methods?
✅ Is this solution appropriately scoped to the user's constraints?
✅ Did I handle potential failure modes and edge cases?
✅ Have I avoided generic boilerplate that doesn't add value?
🛑 Verification-Before-Completion (VBC) Protocol
CRITICAL: You must follow a strict "evidence-based closeout" state machine.
- ❌ Forbidden: Declaring a task complete because the output "looks correct."
- ✅ Required: You are explicitly forbidden from finalizing any task without providing concrete evidence (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
Pre-Flight Checklist
- Have I reviewed the user's specific constraints and requests?
- Have I checked the environment for relevant existing implementations?
VBC Protocol (Verification-Before-Completion)
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
🤖 LLM-Specific Traps
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
- Over-engineering: Proposing complex abstractions or distributed systems when a simpler approach suffices.
- Hallucinated Libraries/Methods: Using non-existent methods or packages. Always
// VERIFYor checkpackage.json/requirements.txt. - Skipping Edge Cases: Writing the "happy path" and ignoring error handling, timeouts, or data validation.
- Context Amnesia: Forgetting the user's constraints and offering generic advice instead of tailored solutions.
- Silent Degradation: Catching and suppressing errors without logging or re-raising.
🏛️ Tribunal Integration (Anti-Hallucination)
Slash command: /review or /tribunal-full
Active reviewers: logic-reviewer · security-auditor
❌ Forbidden AI Tropes
- Blind Assumptions: Never make an assumption without documenting it clearly with
// VERIFY: [reason]. - Silent Degradation: Catching and suppressing errors without logging or handling.
- Context Amnesia: Forgetting the user's constraints and offering generic advice instead of tailored solutions.
✅ Pre-Flight Self-Audit
Review these questions before confirming output:
✅ Did I rely ONLY on real, verified tools and methods?
✅ Is this solution appropriately scoped to the user's constraints?
✅ Did I handle potential failure modes and edge cases?
✅ Have I avoided generic boilerplate that doesn't add value?
🛑 Verification-Before-Completion (VBC) Protocol
CRITICAL: You must follow a strict "evidence-based closeout" state machine.
- ❌ Forbidden: Declaring a task complete because the output "looks correct."
- ✅ Required: You are explicitly forbidden from finalizing any task without providing concrete evidence (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
When not to use it
- →Backend-only development
Limitations
- →Cannot automatically fix all visual contrast issues
- →Requires manual verification of dynamic state changes
How it compares
It mandates a verification-before-completion protocol to prevent common AI hallucinations regarding accessibility attributes.
Compared to similar skills
web-accessibility-auditor side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| web-accessibility-auditor (this skill) | 0 | 1mo | No flags | Intermediate |
| accessibility-compliance | 45 | 2mo | No flags | Intermediate |
| reka-ui | 3 | 2mo | Review | Intermediate |
| web-coder | 0 | 3mo | No flags | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by Harmitx7
View all by Harmitx7 →You might also like
accessibility-compliance
wshobson
Implement WCAG 2.2 compliant interfaces with mobile accessibility, inclusive design patterns, and assistive technology support. Use when auditing accessibility, implementing ARIA patterns, building for screen readers, or ensuring inclusive user experiences.
reka-ui
onmax
Use when building with Reka UI (headless Vue components) - provides component API, accessibility patterns, composition (asChild), controlled/uncontrolled state, virtualization, and styling integration. Formerly Radix Vue.
web-coder
mochan-tk
Use when: implementing frontend web apps with HTML, CSS, TypeScript, React, accessibility, responsive layout, or performance concerns.
web-coder
Bonzokoles
Expert 10x engineer with comprehensive knowledge of web development, internet protocols, and web standards. Use when working with HTML, CSS, JavaScript, web APIs, HTTP/HTTPS, web security, performance optimization, accessibility, or any web/internet concepts. Specializes in translating web terminolo
keyboard-shortcuts
mae616
UIキーボードショートカットを「公式基準(W3C APG / WCAG)+プラットフォーム規約(Apple HIG / Fluent UI)+デファクトスタンダード(GitHub・Gmail・Slack等)」に沿って設計し、衝突なく・発見しやすく・無効化可能な形で実装するための判断軸。
frontend-ui-engineering
charlieviettq
Build and refine web UI—component structure, responsive layout, design tokens, state, and accessibility. Use for feature UI work beyond WCAG checks alone.