Loading...
Loading...
Read-only WCAG 2.1/2.2 audit of UI and markup — semantic HTML, keyboard and focus, labels, contrast, dynamic content, target size — with the concrete fix beside each finding. Use when asked to check accessibility, a11y, WCAG, screen-reader or keyboard support, 'доступность', or before shipping a page, form or modal. Reports; never edits files. Do not use for conversion structure (awesome-landing-audit) or discoverability (awesome-seo-audit).
npx skill4agent add khasky/awesome-agent-skills awesome-accessibility-auditaxe-core.withTags(['wcag2a','wcag2aa'])page.ariaSnapshot()<h1>user-scalable=nomaximum-scale=1<main><nav><aside><footer><ul><ol><li><th>scope<button><input type="submit"><a href="..."><div onclick><fieldset><legend>tabindex="-1"outline: none:focus-visible:focus-within<label>aria-labelforidtypeinputmodeautocompletearia-describedbyonPastepreventDefaultaria-labelaltalt=""role="presentation"aria-hidden="true"titlearia-labelaria-live="assertive"aria-live="polite"aria-live="polite"<h1>autoFocusaria-expandedaria-selectedaria-currentdisabledaria-disabledprefers-reduced-motionscroll-margin-top**[Location: file or component/element]**
- **Issue:** [What is wrong.]
- **WCAG / principle:** [Criterion or principle, e.g. 1.3.1 Info and Relationships, 2.1.1 Keyboard.]
- **Impact:** [Who is affected and how.]
- **Recommendation:** [Concrete fix: code or attribute. For contrast findings, cite computed ratios: "#aaa on #fff = 2.32:1, needs 4.5:1 → use #595959 (7.0:1)".]
- **Severity:** Critical | High | Medium**[src/components/LoginForm.tsx — error message]**
- **Issue:** The "Invalid email" error renders visually below the field but is not associated with the input and is never announced.
- **WCAG / principle:** 3.3.1 Error Identification; 4.1.3 Status Messages.
- **Impact:** A screen-reader user submits, hears nothing, and cannot tell the form failed or which field to fix.
- **Recommendation:** Link it: `<input aria-describedby="email-err" aria-invalid="true">` + `<p id="email-err" role="alert">Invalid email</p>`; on submit, move focus to the first invalid field.
- **Severity:** Critical<!-- BAD -->
<div onclick="submit()">Submit</div>
<!-- GOOD -->
<button type="submit">Submit</button><!-- Decorative -->
<img src="decoration.svg" alt="" role="presentation">
<!-- Meaningful -->
<img src="chart.png" alt="Bar chart showing revenue up 20% in Q4"><!-- BAD -->
<input type="email" placeholder="Email">
<!-- GOOD -->
<label for="email">Email</label>
<input id="email" type="email" placeholder="you@example.com">aria-hidden<button>keydown<button><label><main>aria-expanded| Anti-pattern | Better approach |
|---|---|
| Only checking color contrast | Cover keyboard, labels, structure, and dynamic content |
| Suggesting "add aria-label" everywhere | Prefer visible labels and semantic HTML; use ARIA when necessary |
| Ignoring focus order in modals | Document focus trap and return focus behavior |
| Claiming compliance after code review only | Recommend axe/Lighthouse and real assistive tech testing |