component-common-domai…
Finds duplicate business logic spread across multiple components and suggests consolidation. Use when asking "where is this logic…
Audit and improve web accessibility following WCAG 2.1 guidelines. Use when asked to "improve accessibility", "a11y audit", "WCAG compliance", "screen reader support", "keyboard navigation", or "make accessible". Do NOT use for SEO (use seo), performance (use core-web-vitals),
Claude Code
$ npx -y skills add tech-leads-club/agent-skills --skill web-accessibility --agent claude-code
Codex
$ npx skills add tech-leads-club/agent-skills --skill web-accessibility -a codex -y
Cursor
$ npx skills add tech-leads-club/agent-skills --skill web-accessibility -a cursor -y
Gemini CLI
$ npx skills add tech-leads-club/agent-skills --skill web-accessibility -a gemini-cli -y
GitHub Copilot
$ npx skills add tech-leads-club/agent-skills --skill web-accessibility -a github-copilot -y
OpenCode
$ npx skills add tech-leads-club/agent-skills --skill web-accessibility -a opencode -y
Windsurf
$ npx skills add tech-leads-club/agent-skills --skill web-accessibility -a windsurf -y
name: accessibility description: Audit and improve web accessibility following WCAG 2.1 guidelines. Use when asked to "improve accessibility", "a11y audit", "WCAG compliance", "screen reader support", "keyboard navigation", or "make accessible". Do NOT use for SEO (use seo), performance (use core-web-vitals), or comprehensive site audits covering multiple areas (use web-quality-audit). license: MIT metadata: author: web-quality-skills version: '1.0'
Comprehensive accessibility guidelines based on WCAG 2.1 and Lighthouse accessibility audits. Goal: make content usable by everyone, including people with disabilities.
| Principle | Description | | ------------------ | ------------------------------------------------- | | **P**erceivable | Content can be perceived through different senses | | **O**perable | Interface can be operated by all users | | **U**nderstandable | Content and interface are understandable | | **R**obust | Content works with assistive technologies |
| Level | Requirement | Target | | ------- | ---------------------- | ----------------------------------------------------- | | **A** | Minimum accessibility | Must pass | | **AA** | Standard compliance | Should pass (legal requirement in many jurisdictions) | | **AAA** | Enhanced accessibility | Nice to have |
---
**Images require alt text:**
<!-- ❌ Missing alt -->
<img src="chart.png" />
<!-- ✅ Descriptive alt -->
<img src="chart.png" alt="Bar chart showing 40% increase in Q3 sales" />
<!-- ✅ Decorative image (empty alt) -->
<img src="decorative-border.png" alt="" role="presentation" />
<!-- ✅ Complex image with longer description -->
<figure>
<img src="infographic.png" alt="2024 market trends infographic" aria-describedby="infographic-desc" />
<figcaption id="infographic-desc">
<!-- Detailed description -->
</figcaption>
</figure>**Icon buttons need accessible names:**
<!-- ❌ No accessible name --> <button> <svg><!-- menu icon --></svg> </button> <!-- ✅ Using aria-label --> <button aria-label="Open menu"> <svg aria-hidden="true"><!-- menu icon --></svg> </button> <!-- ✅ Using visually hidden text --> <button> <svg aria-hidden="true"><!-- menu icon --></svg> <span class="visually-hidden">Open menu</span> </button>
**Visually hidden class:**
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}| Text Size | AA minimum | AAA enhanced | | ---------------------------------- | ---------- | ------------ | | Normal text (< 18px / < 14px bold) | 4.5:1 | 7:1 | | Large text (≥ 18px / ≥ 14px bold) | 3:1 | 4.5:1 | | UI components & graphics | 3:1 | 3:1 |
/* ❌ Low contrast (2.5:1) */
.low-contrast {
color: #999;
background: #fff;
}
/* ✅ Sufficient contrast (7:1) */
.high-contrast {
color: #333;
background: #fff;
}
/* ✅ Focus states need contrast too */
:focus-visible {
outline: 2px solid #005fcc;
outline-offset: 2px;
}**Don't rely on color alone:**
<!-- ❌ Only color indicates error -->
<input class="error-border" />
<style>
.error-border {
border-color: red;
}
</style>
<!-- ✅ Color + icon + text -->
<div class="field-error">
<input aria-invalid="true" aria-describedby="email-error" />
<span id="email-error" class="error-message">
<svg aria-hidden="true"><!-- error icon --></svg>
Please enter a valid email address
</span>
</div><!-- Video with captions --> <video controls> <source src="video.mp4" type="video/mp4" /> <track kind="captions" src="captions.vtt" srclang="en" label="English" default /> <track kind="descriptions" src="descriptions.vtt" srclang="en" label="Descriptions" /> </video> <!-- Audio with transcript --> <audio controls> <source src="podcast.mp3" type="audio/mp3" /> </audio> <details> <summary>Transcript</summary> <p>Full transcript text...</p> </details>
---
**All functionality must be keyboard accessible:**
// ❌ Only handles click
element.addEventListener('click', handleAction)
// ✅ Handles both click and keyboard
element.addEventListener('click', handleAction)
element.addEventListener('keydown', (e) => {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault()
handleAction()
}
})**No keyboard traps:**
// Modal focus management
function openModal(modal) {
const focusableElements = modal.querySelectorAll(
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
)
const firstElement = focusableElements[0]
const lastElement = focusableElements[focusableElements.length - 1]
// Trap focus within modal
modal.addEventListener('keydown', (e) => {
if (e.key === 'Tab') {
if (e.shiftKey && document.activeElement === firstElement) {
e.preventDefault()
lastElement.focus()
} else if (!e.shiftKey && document.activeElement === lastElement) {
e.preventDefault()
firstElement.focus()
}
}
if (e.key === 'Escape') {
closeModal()
}
})
firstElement.focus()
}/* ❌ Never remove focus outlines */
*:focus {
outline: none;
}
/* ✅ Use :focus-visible for keyboard-only focus */
:focus {
outline: none;
}
:focus-visible {
outline: 2px solid #005fcc;
outline-offset: 2px;
}
/* ✅ Or custom focus stylesThe secure, validated skill registry for professional AI coding agents. Extend Antigravity, Claude Code, Cursor, Copilot and more with absolute confidence.
Finds duplicate business logic spread across multiple components and suggests consolidation. Use when asking "where is this logic…
Detects misplaced classes and fixes component hierarchy problems — finds code that should belong inside a component but sits at…
Maps architectural components in a codebase and measures their size to identify what should be extracted first. Use when asking…
Analyzes coupling between modules using the three-dimensional model (strength, distance, volatility) from "Balancing Coupling in…
Creates step-by-step decomposition plans and migration roadmaps for breaking apart monolithic applications. Use when asking "what…
Maps business domains and suggests service boundaries in any codebase using DDD Strategic Design. Use when asking "what are the…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.