Agent Skills: Common Accessibility (a11y) Standards

WCAG 2.2, ARIA, semantic HTML, keyboard navigation, and color contrast standards for web UIs. Legal compliance baseline. (triggers: **/*.tsx, **/*.jsx, **/*.html, **/*.vue, **/*.component.html, accessibility, a11y, wcag, aria, screen reader, focus, alt text)

UncategorizedID: hoangnguyen0403/agent-skills-standard/common-accessibility

Install this agent skill to your local

pnpm dlx add-skill https://github.com/HoangNguyen0403/agent-skills-standard/tree/HEAD/.agent/skills/common/common-accessibility

Skill Files

Browse the full folder contents for common-accessibility.

Download Skill

Loading file tree…

.agent/skills/common/common-accessibility/SKILL.md

Skill Metadata

Name
common-accessibility
Description
"WCAG 2.2, ARIA, semantic HTML, keyboard navigation, and color contrast standards for web UIs. Legal compliance baseline. (triggers: **/*.tsx, **/*.jsx, **/*.html, **/*.vue, **/*.component.html, accessibility, a11y, wcag, aria, screen reader, focus, alt text)"

Common Accessibility (a11y) Standards

Priority: P1 (OPERATIONAL)

Accessibility is a legal requirement in the EU (Web Accessibility Directive), USA (ADA/Section 508), and many other jurisdictions. Non-compliance carries litigation risk. Target WCAG 2.2 Level AA as the minimum.

πŸ— Semantic HTML First

  • Use the correct HTML element before reaching for ARIA. <button>, <a>, <nav>, <main>, <section>, <form>, <label> convey semantics natively.

  • Never use <div> or <span> for interactive elements β€” they have no keyboard role by default.

  • Headings (h1–h6) must form a logical outline. One h1 per page.

  • Use <button> not <div onClick>, <a> not <span onClick>, etc.

🎭 ARIA β€” Use Sparingly

ARIA supplements semantics when native HTML is insufficient (e.g., custom widgets). Rules:

  1. No ARIA > Bad ARIA: If native HTML works, use it. ARIA only adds roles, not behavior.
  2. Required attributes: Every role with required properties must include them (e.g., role="slider" needs aria-valuenow, aria-valuemin, aria-valuemax).
  3. Live Regions: Use aria-live="polite" for status messages; aria-live="assertive" only for critical alerts.
  4. Labels: Every form control must have a programmatic label (<label>, aria-label, or aria-labelledby).
  5. Hidden content: Use aria-hidden="true" on decorative icons; never on focusable elements.

⌨️ Keyboard Navigation

  • All interactive elements MUST be reachable and operable via keyboard.
  • Tab order must follow visual reading order. Never use positive tabindex values (tabindex="1" breaks natural order).
  • Provide visible focus indicators (see Focus style rule below).
  • Modals/Dialogs: Trap focus inside when open. Return focus to trigger element on close.
  • Escape key: Must close modals, dropdowns, and tooltips.
  • Focus style: Never outline: none without a visible replacement (min 2px solid, 3:1 contrast).

🎨 Color & Contrast

  • Normal text: β‰₯ 4.5:1 ratio. Large text (β‰₯ 18pt or 14pt bold): β‰₯ 3:1. UI components: β‰₯ 3:1.
  • Never convey information through color alone β€” add icon, pattern, or text label.
  • Test with: axe DevTools, WAVE, Lighthouse.

πŸ“ Touch & Pointer Targets

  • Minimum interactive target size: 44Γ—44px (WCAG 2.5.5 AAA) / 24Γ—24px minimum (WCAG 2.2 AA).
  • Provide sufficient spacing between adjacent targets to prevent mis-taps.

πŸ–Ό Images & Media

  • Decorative images: alt="" (empty, not missing).
  • Informative images: descriptive alt text (what the image conveys, not "image of...").
  • Complex charts/graphs: provide a text summary or data table alternative.
  • Video: Captions mandatory. Audio descriptions for visual-only content.

πŸ§ͺ Testing Minimum

  • CI gate: axe-core zero critical violations.
  • Manual: keyboard-only full flow + screen reader (NVDA/VoiceOver) + 200% zoom.

Anti-Patterns

  • No onClick on <div>: Use <button> or add role, tabindex, and keyboard handlers.
  • No missing alt: Every <img> must have an alt attribute (empty string if decorative).
  • No color-only status: Red = error must also show an icon or text.
  • No outline: none without replacement focus style.
  • No auto-playing media: Users with vestibular disorders may be harmed.
  • No dynamic content without announcement: Use aria-live for async status updates.

References