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…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.