Skip to content
Back to skills

Design Accessibility

ASecurity

Audits HTML against WCAG 2.2 — no-tools structural checks (alt text, heading order, form labels, lang, landmarks, skip link, viewport meta, token-based contrast), plus a full axe-core scan covering computed contrast, keyboard/focus order, reduced-motion, and 200% zoom. Uses Playwright + @axe-core/playwright when connected; otherwise the structural subset runs alone (clearly lower fidelity). Produces a severity-ranked report with per-issue remediation. Trigger when the user says "accessibility...

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added August 31, 2026
designtesting

Works with

  • mcp

Security analysis

A100/100

Scanned August 31, 2026

npx -y skills add ZachArticulateV/designer-pro-and-seo --skill design-accessibility --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Design Accessibility?

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

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

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: design-accessibility
description: Audits HTML against WCAG 2.2 — no-tools structural checks (alt text, heading order, form labels, lang, landmarks, skip link, viewport meta, token-based contrast), plus a full axe-core scan covering computed contrast, keyboard/focus order, reduced-motion, and 200% zoom. Uses Playwright + @axe-core/playwright when connected; otherwise the structural subset runs alone (clearly lower fidelity). Produces a severity-ranked report with per-issue remediation. Trigger when the user says "accessibility check", "a11y check", "wcag audit", "axe scan", "is this accessible", "screen reader check", or "keyboard nav check".
---

# design-accessibility

**Family:** design
**Status:** Stable

## Purpose

A dedicated accessibility skill. Runs **structural WCAG 2.2 checks on any HTML with
no tools required** (the free path) and a **full axe-core scan when Playwright is
installed** (the deep path), producing a severity-ranked report that downstream
skills (`qa-gate`, `design-build`) can act on.

## Triggers

- "accessibility check" / "a11y check" / "wcag audit"
- "axe scan" / "is this accessible"
- "screen reader check" / "keyboard nav check"

## Inputs

- Target URL or local build path
- WCAG level: AA (default) | AAA
- Viewports to test (defaults: 375 / 768 / 1280)
- Optional: a design-system token file (from `design-system-gen`); the token-based contrast check in Step 2 runs only when it is present

## Steps

1. **Detect Playwright.** If available → deep path (step 3). If not → static path
   (step 2). Always say which path ran.
2. **Static WCAG checks** (free path, on the page source): run
   `scripts/design/a11y_static.py --file <page.html>` — a stdlib `html.parser`
   structural checker that emits severity-ranked JSON findings for image `alt`
   coverage, heading order (no skipped levels / one `<h1>`), form-control labels,
   `<html lang>`, a skip-to-content link, `<main>`/landmark presence, and a
   responsive (non-zoom-blocking) viewport meta. When a `design-system-gen` token
   file is present, pass `--tokens <tokens.json>` to add the **token-contrast
   cross-check** (the engine's own WCAG luminance math over the `text`/`bg`/
   `surface`/`primary`/`on_primary`/`accent` slots). See
   `references/design-accessibility/structural-checks.md` for the full check
   catalog + severity model.
3. **Deep axe scan** (Playwright path): for each viewport, run axe-core; test
   keyboard nav (tab order, visible focus, focus traps in modals, escape routes);
   test `prefers-reduced-motion`; test 200% text scaling for truncation/overflow;
   verify computed-style color contrast.
4. **Classify** findings critical / serious / moderate / minor with the WCAG
   success criterion and remediation guidance (file:line when source is available).
5. **Render** the report; note clearly that the static path is a subset and a full
   axe scan needs Playwright.

## Capability routing

Accessibility auditing runs on a two-tier cascade. The **free Tier-2 structural
checker (`a11y_static.py`) is the product** — it delivers a real severity-ranked
WCAG artifact with no browser and no network; a connected Playwright + axe-core
(Tier 1) deepens it with rendered-pixel contrast and live keyboard/motion/zoom
testing. See `references/CAPABILITY-TIERS.md` for the cascade grammar.

```capability-routing
capability:   structural-a11y
tier1:        Playwright + @axe-core/playwright (rendered scan)
tier1_signal: none
tier2:        a11y_static.py (stdlib html.parser structural WCAG checker + token-contrast cross-check, no browser)
tier2_yields: severity-ranked WCAG findings (alt, heading order, labels, lang, viewport, landmarks, skip link, token contrast) with per-issue WCAG SC + fix, zero spend
tier3:        none
tier3_signal: none
tier4:        manual WCAG 2.2 walkthrough; connect Playwright for a full axe-core scan
needs_tier1:  computed rendered-pixel contrast, live keyboard/focus order, reduced-motion behavior, 200%-zoom reflow
```

## Outputs

| Output | What it contains | Format | Quality bar (how it is scored) |
|---|---|---|---|
| Structural WCAG report | Severity-ranked findings (critical/serious/moderate/minor), each with its WCAG 2.2 success criterion + a concrete fix | JSON (default) or ASCII `--human` | every finding names a WCAG SC and a specific remediation; findings are severity-ranked and the run is deterministic (same input → identical output) |
| Token-contrast cross-check | Any design-token color pair below its ratio (4.5:1 body / 3:1 UI), with the measured ratio | rows inside the report (`contrast-below-min`) | only fires with `--tokens`; uses the engine's own WCAG math; reports the exact ratio, never a guess |
| Coverage statement | Which path ran and what a full axe scan would add | one sentence | states the static subset honestly; never implies full-scan coverage |

Filed to: the user's project workspace. The structural path is a genuine subset —
computed-contrast, live keyboard, reduced-motion, and 200%-zoom facts are marked
`needs_tier1` (Playwright + axe-core), never synthesized.

## Error Handling

| Condition | Detection | Behavior (degrade, never fail) | User-facing message |
|---|---|---|---|
| Playwright absent | MCP not exposed / not connected | run the Tier-2 `a11y_static.py` structural checker alone | "Ran Tier 2 (static structural checks). Connect Playwright for computed-contrast + live keyboard/motion/zoom testing." |
| No token file supplied | `--tokens` omitted | run every structural check except the token-contrast cross-check | "Contrast cross-check skipped — pass a design-system token file to grade color pairs." |
| Bad / missing HTML input | `a11y_static.py` validates and exits non-zero with a JSON `error` | report the validation error; analyze nothing invented | "`--file`/`--html` is required or the file is unreadable — here is the expected input." |
| Unparseable `--tokens` JSON | `json.load` raises; script exits non-zero | report the parse error; skip the cross-check, keep structural findings | "Could not parse the token JSON — fixed the path and re-run for the contrast cross-check." |
| Malformed markup | `html.parser` tolerates it | analyze what parses; still emit a report | "Parsed leniently — findings reflect the recoverable structure." |

## Dependencies

- None required for the static path (analyzes provided HTML)
- Playwright extension + `@axe-core/playwright` (optional — adds computed-contrast verification + live keyboard/focus testing + reduced-motion + 200%-zoom checks; free path: the static structural checks in Step 2)

## Notes

Mandatory inside the `qa-gate` workflow (phase 3); also standalone. The static path
catches a real subset of WCAG issues, but only a browser-based axe scan covers
computed contrast and live keyboard behavior — the report says so rather than
implying full coverage.

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.