Skip to content
Back to skills

Accessibility Standards

ASecurity

WCAG 2.2 AA rules for HTML, CSS and React: contrast, keyboard, screen-reader semantics, voice access, forms and tables. Use when building or changing UI components, forms, navigation or any user-facing element.

  • 80 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 28, 2026
ai-agentsreact

Works with

  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 5, 2026

npx -y skills add monkilabs/opencastle --skill accessibility-standards --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Accessibility Standards?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Accessibility Standards
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/monkilabs-accessibility-standards/badge)](https://www.skillsdirectory.com/skills/monkilabs-accessibility-standards)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: accessibility-standards
description: "WCAG 2.2 AA rules for HTML, CSS and React: contrast, keyboard, screen-reader semantics, voice access, forms and tables. Use when building or changing UI components, forms, navigation or any user-facing element."
---

# Accessibility Standards

Code must conform to [WCAG 2.2 Level AA](https://www.w3.org/TR/WCAG22/). Use people-first language ("person using a screen reader," not "blind user"); flag uncertain implementations with reasoning. Composite widget patterns (roving tabindex, `aria-activedescendant`) in REFERENCE.md.

## Contrast

- Body text ≥4.5:1; large text (18.5px bold / 24px) ≥3:1.
- Graphics, controls, and state indicators (pressed, focus, checked) ≥3:1 against adjacent colors.
- Color is never the sole conveyor of information.

## Keyboard

- No `tabindex` on static elements; `tabindex="-1"` only for elements receiving programmatic focus.
- Hidden elements must never be focusable.
- Skip link is the first focusable element, hidden via `.sr-only:not(:focus):not(:active) { clip-path: inset(50%); position: absolute; width: 1px; height: 1px; overflow: hidden; }`.
- Navigation: `<nav>` + `<ul>`, NOT `menu`/`menubar` roles. Toggle `aria-expanded`; roving tabindex across top-level items.

## Voice Access

An interactive element's accessible name must contain its visible label text — including when the name comes from `aria-label`.

## Forms

- Required fields: asterisk in label + `aria-required="true"`.
- Errors: `aria-invalid="true"` + `aria-describedby` pointing at the message.
- Never disable submit — show errors and focus the first invalid field.
- Disambiguate repeated labels ("Remove") with `aria-label`.

## Tables

`<table>` for static data; `role="grid"` with `role="gridcell"` nested in `role="row"` for interactive grids (date pickers, calendars).

## Page Title

Unique per page, front-loading the unique info: `"[Page] - [Section] - [Site]"`.

## Validation

Run `axe-core` (`axe-playwright` or `pa11y` in CI); fix all high/critical findings and re-run until clean. Tab through the page to confirm order and visible focus. [Accessibility Insights](https://accessibilityinsights.io/) for manual passes.

Files in this skill

  • REFERENCE.md1.2 KB
  • SKILL.md4.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…