Accessibility Audit (WCAG)
Аудит доступности страницы по WCAG: автоматическая проверка axe-core + ручной чеклист того, что автоматика не ловит. Находки — с уровнем серьёзности, ссылкой на конкретный Success Criterion и понятным фиксом. По умолчанию целевой уровень AA.
Что на входе ($ARGUMENTS)
- URL или локальный роут для аудита.
--level A|AA|AAA— целевой уровень соответствия (по умолчаниюAA).
Требования окружения
- Для axe-core нужен Playwright (
npx playwright) + браузер. ⚠️ Браузерная автоматизация работает только из главной сессии (сабагентам пермишены автоматически отклоняются). - Если Playwright недоступен — деградировать на статический разбор HTML через WebFetch (поймает часть: alt, label, lang, заголовки, ARIA в разметке), пометив, что динамику не проверяли.
Шаги
Автоматика (axe-core). Через Playwright открыть страницу, заинжектить axe-core, прогнать:
npx playwright ... # открыть URL, inject https://cdn.jsdelivr.net/npm/axe-core/axe.min.js, axe.run()Собрать violations: id, impact, описание, узлы, ссылка на правило. Фолбэк — WebFetch + статический разбор.
Ручной чеклист (то, что axe не покрывает полностью):
- Клавиатура — все интерактивные элементы достижимы Tab, нет ловушек фокуса, логичный порядок.
- Видимый фокус — focus-ring не убран без замены.
- Контраст — текст vs фон ≥ 4.5:1 (крупный ≥ 3:1); привести конкретные проблемные пары.
- alt у смысловых изображений; декоративные —
alt="". - Формы — каждое поле с
<label>/aria-label; ошибки доступно объявлены. - ARIA/landmarks — корректные роли, есть
main/nav/header/footer, нет «ARIA ради ARIA». - Заголовки — один
h1, иерархия без скачков. - lang у
<html>; таргеты тапа ≥ 24–44px.
Оформить находки. Каждая: проблема → ссылка на WCAG SC (напр.
1.4.3 Contrast,2.1.1 Keyboard,4.1.2 Name, Role, Value) → severity (critical/serious/moderate/minor) → как чинить (конкретно, по коду).
Выход
./a11y-output/report.md— находки, сгруппированные по severity, с WCAG SC и фиксами; в шапке — чем мерили (axe через Playwright / статически) и целевой уровень.- Короткое резюме: сколько critical/serious, что чинить первым.