skills/knowledge/accessibility/SKILL.md
Web accessibility patterns and WCAG 2.1/2.2 compliance for inclusive user interfaces. Use when the user asks to build accessible components, audit a UI for a11y issues, fix screen reader problems, implement keyboard navigation, check color contrast ratios, add ARIA attributes, create accessible forms, or establish accessibility standards for a team. Covers the POUR principles (Perceivable, Operable, Understandable, Robust), semantic HTML, focus management, and automated/manual a11y testing strategies.
npx skillsauth add krzysztofsurdy/code-virtuoso accessibilityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Accessibility is not a feature you bolt on at the end - it is a quality attribute that must be considered from the first line of markup. Building accessible interfaces means that people with visual, motor, auditory, or cognitive disabilities can perceive, navigate, and interact with your application. It also means better usability for everyone: keyboard power users, people on slow connections, users with temporary injuries, and those in constrained environments.
| Dimension | Impact | |---|---| | Legal | Legislation in most jurisdictions (ADA, EAA, Section 508, EN 301 549) requires digital products to be accessible. Non-compliance carries litigation risk and financial penalties. | | Ethical | Roughly 16% of the global population lives with some form of disability. Excluding them from digital services is a choice, not an inevitability. | | Business | Accessible products reach a wider audience, improve SEO (structured content helps crawlers), reduce support costs, and correlate with higher overall usability scores. | | Technical quality | Accessibility constraints force clean markup, proper semantics, and separation of concerns - all of which improve maintainability. |
The Web Content Accessibility Guidelines organize all success criteria under four principles. Every accessibility requirement maps to at least one.
| Principle | Question It Answers | Examples | |---|---|---| | Perceivable | Can users sense the content? | Text alternatives for images, captions for video, sufficient color contrast, resizable text | | Operable | Can users interact with every control? | Keyboard operability, enough time to complete tasks, no seizure-triggering animations, clear navigation | | Understandable | Can users comprehend the content and UI behavior? | Readable language, predictable navigation, input assistance and error messages | | Robust | Does it work across assistive technologies? | Valid markup, proper use of ARIA, compatibility with screen readers and other tools |
WCAG defines three levels. Each higher level includes all criteria from the levels below it.
| Level | Target Audience | Typical Requirement | |---|---|---| | A | Bare minimum - removes the most severe barriers | Most legal and procurement requirements start here | | AA | Industry standard - addresses the majority of barriers for most users | Required by ADA, EAA, Section 508, and most organizational policies | | AAA | Highest standard - not always achievable for all content types | Aspirational goal; apply selectively where feasible |
For most projects, target Level AA. It covers the vast majority of real-world accessibility needs without imposing requirements that conflict with certain content types.
Native HTML elements carry built-in semantics, keyboard behavior, and screen reader announcements. Using the right element is the single most effective accessibility technique.
| Instead Of | Use | Why |
|---|---|---|
| <div onclick="..."> | <button> | Buttons are focusable, announce their role, and respond to Enter and Space |
| <span class="link"> | <a href="..."> | Links announce as "link," support middle-click, and appear in link lists |
| <div class="header"> | <header>, <nav>, <main>, <footer> | Landmark elements let screen reader users jump between page regions |
| <div class="list"> | <ul> / <ol> with <li> | Lists announce item count and position ("item 3 of 7") |
| <div class="table"> | <table> with <th> | Table headers associate data cells with their labels for screen readers |
| Styled <div> for input | <input>, <select>, <textarea> | Native form controls have label association, validation, and assistive tech support built in |
Headings create an outline that screen reader users navigate like a table of contents. Follow these rules:
<h1> per page that describes the page purpose<h2> to <h4>)| Issue | Impact | Fix |
|---|---|---|
| Missing alt text on images | Screen readers announce the filename or nothing | Add descriptive alt; use alt="" for purely decorative images |
| Insufficient color contrast | Users with low vision cannot read text | Meet 4.5:1 ratio for normal text, 3:1 for large text (AA) |
| No keyboard access to interactive elements | Keyboard and switch users are completely blocked | Use native interactive elements or add tabindex="0" and key handlers |
| Missing form labels | Screen readers cannot announce what an input is for | Associate every input with a <label> using for/id or wrapping |
| Auto-playing media | Disorienting for screen reader users, harmful for those with cognitive disabilities | Never auto-play; if unavoidable, provide a visible pause/stop control |
| Missing skip link | Keyboard users must tab through the entire nav on every page | Add a skip-to-main-content link as the first focusable element |
| No focus indicator | Keyboard users lose track of their position on the page | Never remove outline without providing a visible custom alternative |
| Missing page language | Screen readers may mispronounce content | Set lang attribute on <html> (e.g., lang="en") |
| Inaccessible dynamic content | Screen readers do not announce changes that happen after page load | Use ARIA live regions to announce dynamic updates |
| Missing document title | Screen reader users cannot identify the page when switching tabs | Set a unique, descriptive <title> for every page |
| Touch targets too small | Motor-impaired users cannot reliably tap small controls | Minimum 24x24 CSS pixels (AA), prefer 44x44 for comfortable interaction |
| Motion and animation | Can cause vestigo, nausea, or seizures | Respect prefers-reduced-motion media query; never flash more than 3 times per second |
Forms are where accessibility failures cause the most real-world harm - users cannot complete purchases, registrations, or critical workflows.
Every form control needs a programmatically associated label:
<!-- Explicit association -->
<label for="email">Email address</label>
<input type="email" id="email" name="email" required>
<!-- Implicit association (wrapping) -->
<label>
Email address
<input type="email" name="email" required>
</label>
aria-describedby to associate error messages with their inputaria-invalid="true" on fields that fail validationrequired attribute (for native validation) or aria-required="true" (for custom validation)Color must never be the only means of conveying information. Pair it with text, icons, patterns, or other visual cues.
Contrast ratios (WCAG AA):
| Element | Minimum Ratio | |---|---| | Normal text (under 18pt / 14pt bold) | 4.5:1 | | Large text (18pt+ / 14pt+ bold) | 3:1 | | UI components and graphical objects | 3:1 |
Quick wins:
prefers-color-scheme for dark mode support| Reference | Contents | |---|---| | ARIA Patterns | When to use ARIA, roles and properties, widget patterns (tabs, modals, accordions, dropdowns), live regions, landmark roles | | Keyboard and Focus | Tab order, arrow key navigation, focus trapping, skip links, focus restoration, visible focus indicators, touch targets | | Testing Strategies | Automated tools, manual testing checklist, screen reader testing, contrast verification, accessibility tree, CI integration |
| Situation | Recommended Skill |
|---|---|
| Building REST or GraphQL APIs with accessible error responses | Install knowledge-virtuoso from krzysztofsurdy/code-virtuoso for API design guidance |
| Security headers that affect accessibility (CSP, iframe restrictions) | Install knowledge-virtuoso from krzysztofsurdy/code-virtuoso for security patterns |
| Testing accessible components with unit and integration tests | Install knowledge-virtuoso from krzysztofsurdy/code-virtuoso for testing strategies |
| Performance optimization that does not sacrifice accessibility | Install knowledge-virtuoso from krzysztofsurdy/code-virtuoso for performance guidance |
development
Spawn and coordinate a pre-composed agent team from a team definition file. Reads team files from teams/, resolves agents and skills, picks the best spawning mode (peer or sequential), and runs the workflow. Use when the user asks to run a team, dispatch a development team, start a feature delivery, or coordinate multiple agents for a multi-phase task.
development
Pre-composed agent team library. Use when the user asks which teams are available, what a team does, when to pick one team over another, or to browse multi-agent compositions. Catalogs ready-to-run teams (development team, review squad, war room) with their purpose, agent roster, workflow type, and when to use each. The actual dispatching is handled by the dispatching-agent-teams skill.
tools
Ecosystem discovery advisor. Use when the user asks 'what skill should I use', 'what agent should I delegate to', 'which team fits this task', or when onboarding to available skills, agents, and teams. Scans ALL installed skills at runtime -- not limited to any single plugin or vendor. Triggers: 'which skill', 'which agent', 'what do I use for', 'orient me', 'what tools do I have'.
tools
Interactive tool to scaffold a complete Claude Code plugin -- plugin.json manifest, skills, agents, hooks, MCP servers, LSP servers, and an optional marketplace.json catalog entry. Use when the user asks to create a plugin, build a Claude Code plugin, scaffold a plugin marketplace, convert an existing .claude/ configuration into a plugin, or package skills and agents for distribution. Runs a guided questionnaire, writes all required files to disk, and prints test instructions.