a11y-check
Skill0 starsChanged 24 days agoMITView on GitHub
WCAG-2.1-AA-Accessibility-Audit für HTML/CSS/JS — Color-Contrast, Keyboard-Nav, Touch-Targets, ARIA, Semantik, Focus-Indicators. Optimiert für FastAPI-Templates + HTMX-Patterns (Discord-Bots-Dashboard).
2 other projects use a version of this.
Adopted by
Most recently taken up by
- rajanrx/skillstheir own version, first seen Nov 8, 2026
- PatriotAgenticLLC/better_claude_skillztheir own version, first seen Jul 1, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- PatriotAgenticLLC/better_claude_skillz★ 3same name
- rajanrx/skills★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository46 other files it gives its agents.
- agent-createSkill
- branch-finishSkill
- changelog-updaterSkill
- code-doc-syncSkill
- codex-msgSkill
- codex-reviewSkill
- csoSkill
- db-exploreSkill
- deploy-preflightSkill
- deps-checkSkill
- design-htmlSkill
- design-shotgunSkill
- design-taste-frontendSkill
- finanzberaterSkill
- footstep-eq-tunerSkill
- full-auditSkill
- gateSkill
- gemini-digestSkill
- graphifySkill
- handygame-botSkill
- hook-createSkill
- instructions-drift-checkSkill
- investigateSkill
- leanreaSkill
- legal-deSkill
- loopmodeSkill
- loopstopSkill
- lyraSkill
- office-hoursSkill
- plan-ceo-reviewSkill
- profileSkill
- python-env-auditSkill
- quick-reviewSkill
- reviewSkill
- security-auditSkill
- seoSkill
- site-anatomySkill
- skill-createSkill
- spatial-pipeline-helperSkill
- state-json-validatorSkill
- test-runSkill
- tool-scoutSkill
- transient-profile-validatorSkill
- ui-critiqueSkill
- wakeup-setupSkill
- websucheSkill
The file
Files
a11y-check — WCAG 2.1 AA Audit
Zweck: Dashboard und HTML-Templates auf Accessibility-Probleme prüfen. Fokus: WCAG 2.1 AA als Standard, nicht AAA (zu strikt für interne Tools).
Vor dem Start
- Scope ermitteln: Argument oder Default
web/templates/**/*.html+ zugehörige CSS-Files - Komponenten-Liste aus HTML extrahieren (Buttons, Links, Form-Inputs, Modals, Tables, Charts)
- CSS-Tokens lesen (
web/static/style.cssfür Color-Variables)
Phase 1 — Statische Checks
Color-Contrast (WCAG 1.4.3)
Aus style.css-Tokens die Foreground/Background-Paare berechnen:
# Pseudo: für jedes (text-*, bg-*)-Paar
contrast_ratio = relative_luminance_ratio(text_color, bg_color)
# WCAG AA: 4.5:1 für Body-Text, 3:1 für Large-Text (>= 18pt oder 14pt bold)
# WCAG AAA: 7:1 für Body, 4.5:1 für Large — als INFO melden, nicht als FindingTools (lokal nutzbar):
npx pa11y <url>(CLI-Wrapper für axe-core) — wenn Dashboard läuft- Manuell: Browser-DevTools → Lighthouse → Accessibility-Audit
Pflicht-Findings:
- Body-Text < 4.5:1 → HIGH
- Large-Text < 3:1 → MEDIUM
- Interactive-State (hover/focus) verliert Kontrast → MEDIUM
Keyboard-Navigation (WCAG 2.1.1)
Per Grep prüfen:
# Buttons ohne tabindex müssen native <button> sein
grep -E 'class="btn"' web/templates/**/*.html
# Wenn nicht-button mit btn-class: prüfen ob tabindex="0" + role="button" + onkeydown gesetztPflicht-Findings:
<div onclick="">ohnetabindex+role="button"+ Enter/Space-Handler → HIGH- Custom-Dropdowns ohne Keyboard-Steuerung (Pfeiltasten, Esc, Enter) → MEDIUM
- Modal ohne Focus-Trap (Tab kann Modal verlassen) → MEDIUM
tabindex="-1"auf interaktiven Elementen → HIGH (entfernt aus Tab-Order)tabindex> 0 → MEDIUM (überschreibt natürliche Reihenfolge)
Touch-Targets (WCAG 2.5.5 AAA / 2.5.8 AA)
CSS-Check für Buttons/Links:
grep -E "min-(width|height)|padding" web/static/style.css | grep -E "btn|button|link"Pflicht-Findings:
- Touch-Target < 24×24 CSS-Pixel (WCAG 2.5.8 AA) → MEDIUM
- Touch-Target < 44×44 (WCAG 2.5.5 AAA) → LOW (Best-Practice)
- Nahe-beieinander-Buttons ohne 8px-Spacing → LOW
ARIA & Semantik (WCAG 4.1.2)
grep -nE 'role="|aria-' web/templates/**/*.htmlPflicht-Findings:
<div role="button">statt<button>ohne Begründung → MEDIUM- Fehlende
aria-labelauf Icon-Only-Buttons → HIGH - Fehlende
aria-liveauf dynamischen Bereichen (HTMX-Swap-Targets) → MEDIUM alt=""auf semantischen Bildern (Logos, Charts) → MEDIUM- Fehlende Form-Label (kein
<label for="...">oderaria-labelledby) → HIGH
Focus-Indicators (WCAG 2.4.7)
CSS-Check:
grep -E ":focus\b|outline:" web/static/style.cssPflicht-Findings:
outline: noneohne Replacement-Indikator → HIGH (Tab-User verliert Orientierung)- Focus-Indicator-Contrast < 3:1 → MEDIUM
- Identischer Focus-vs-Hover-Style → LOW (User kann nicht unterscheiden)
Semantische HTML-Struktur
grep -nE '^\s*<(div|span)' web/templates/**/*.html | wc -l
grep -nE '<(header|nav|main|section|article|aside|footer)' web/templates/**/*.html | wc -l
# Ratio: > 5:1 div/span vs semantic → "div-soup" Anti-PatternPflicht-Findings:
- Heading-Skip (
h1 → h3ohneh2) → MEDIUM - Mehrere
<h1>pro Seite → LOW - Fehlende
<main>/<nav>/<header>Landmarks → MEDIUM - Tables ohne
<th scope="...">→ MEDIUM
Phase 2 — HTMX-spezifische Checks
HTMX-Patterns die a11y brechen können:
| Pattern | Problem | Fix |
hx-swap="innerHTML" auf Modal-Triggers | Focus geht verloren nach Swap | hx-swap-oob + Focus-Restore via JS |
| Dynamisch geladene Form-Inputs | Screen-Reader bekommt sie nicht mit | aria-live="polite" auf Container |
hx-trigger="every Xs" | Konstante Polling-Updates lenken Screen-Reader ab | aria-live="off" für Polling-Bereiche |
| Toast-Notifications via HTMX | Screen-Reader liest sie evtl. nicht | role="status" oder role="alert" |
Phase 3 — Findings-Report
Output: ~/.claude/reports/a11y-check/<datum>_<HHMM>/REPORT.md
Format pro Finding:
| ID | Severity | File:Line | WCAG-Criterion | Element/Selector | Problem | Fix | Aufwand |
|----|----------|-----------|----------------|------------------|---------|-----|---------|WCAG-Criterion: z.B. „1.4.3 Contrast (Minimum)" oder „2.1.1 Keyboard"
Master-Sektionen:
- Executive Summary (max 150 Worte, Findings-Counts pro Severity)
- Color-Contrast-Tabelle (alle Token-Paare mit Ratio + Pass/Fail)
- Findings nach Severity sortiert
- Komponenten-Checkliste (für jede UI-Komponente: a11y-OK / Probleme)
- Quick-Wins (Aufwand < 30 min, Severity ≥ MEDIUM)
Phase 4 — Live-Test (optional)
Wenn Dashboard läuft (http://localhost:8080):
# Falls pa11y verfügbar:
npx pa11y http://localhost:8080 --standard WCAG2AA --reporter json > a11y_live.json
# Falls nicht: Lighthouse-Bookmarklet im BrowserConstraints
- Read-only. Keine Auto-Fixes — nur Findings + Empfehlungen
- Token-effiziente Ausgabe. Tabellen-Format, max 30 Zeilen Chat-Summary
- der Nutzer-Convention: Severity-Skala kompatibel mit
/review(CRITICAL/HIGH/MEDIUM/LOW) - Quellen für WCAG-Kriterien: https://www.w3.org/WAI/WCAG21/quickref/ (nicht halluzinieren — wenn unsicher, INFO statt Finding)
Komplementäre Skills (wann anders triggern)
| Use-Case | Skill |
| Layout-Logik / UX-Hierarchie (kein WCAG) | /ui-critique |
| Tieferer A11Y-Audit (Anthropic-Cowork-Variante) | design:accessibility-review |
| UX-Texte für Screen-Reader (alt-texts, aria-labels) | design:ux-copy |
| Neue Komponente bauen mit A11Y-First | frontend-design + danach /a11y-check |
Workflow-Übersicht: ~/.claude/docs/design-workflow.md
Beispiel-Triggers
/a11y-check— gesamten templates-Ordner/a11y-check web/templates/dashboard.html— einzelnes File/a11y-check web/templates/admin/*.html— Glob
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

