К основному содержанию
скилл CX Codex

wcag-accessibility — скилл для Claude Code: проверка доступности

Скилл помогает проектировать и проверять интерфейсы по WCAG 2.2 AA. Подключайте его при работе над доступностью компонентов и страниц.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add dembrandt/dembrandt-skills --skill wcag-accessibility -a claude-code
Открыть на GitHub

Что делает wcag-accessibility

Скилл задаёт требования к доступности пользовательских интерфейсов: контрасту текста и элементов, альтернативам для изображений, клавиатурной навигации, видимому фокусу и подписям полей. Он также описывает требования к языку страницы, сообщениям об ошибках и поведению компонентов. Например, интерактивные элементы должны быть доступны с клавиатуры, а индикатор фокуса нельзя убирать без замены.

Правила ориентированы на WCAG 2.2 AA и EN 301 549. В них есть конкретные пороги контрастности и размера сенсорных целей. Требование использовать для приглушённого текста начертание не тоньше 500 обозначено как внутреннее правило, а не требование WCAG. Это различие важно, если вы сверяете результат именно со стандартом.

Какие задачи решает

  • проверить интерфейс на соответствие WCAG 2.2 AA
  • найти текст и элементы с недостаточным контрастом
  • добавить клавиатурную навигацию и видимый фокус
  • подобрать подписи для изображений и кнопок
  • связать сообщения об ошибках с полями формы

Примеры запросов агенту

  • Проверь этот интерфейс на соответствие WCAG 2.2 AA.
  • Сделай компонент доступным для клавиатурной навигации и экранного диктора.
  • Проверь контраст текста и видимость фокуса на странице.

Как установить wcag-accessibility

1Через Skills CLI (Vercel)

npx skills add dembrandt/dembrandt-skills --skill wcag-accessibility -a claude-code

2Вручную: положить файлы

~/.claude/skills/wcag-accessibility/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/wcag-accessibility/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о wcag-accessibility

Как установить wcag-accessibility в Claude Code?

Выполните npx skills add dembrandt/dembrandt-skills --skill wcag-accessibility -a claude-code. Файл скилла будет доступен по пути ~/.claude/skills/wcag-accessibility/SKILL.md.

Что делает wcag-accessibility?

Скилл помогает создавать и проверять интерфейсы по требованиям WCAG 2.2 AA: от контраста и подписей до фокуса и клавиатурной навигации.

Размер сенсорных элементов — требование WCAG 2.2 AA?

В описании скилла минимальный размер интерактивных элементов для сенсорных устройств указан как 24×24px. Размер 44×44px назван рекомендуемым ориентиром, а не минимумом WCAG.

Исходный текст

SKILL.md · MIT
---
name: wcag-accessibility
description: WCAG 2.2 AA compliance as required by the European Accessibility Act. Use when designing, building or reviewing any user-facing interface for accessibility.
metadata:
  priority: 9
  docs:
    - "https://www.w3.org/TR/WCAG22/"
    - "https://www.etsi.org/deliver/etsi_en/301500_302000/301549/03.02.01_60/en_301549v030201p.pdf"
  pathPatterns:
    - "**/*.tsx"
    - "**/*.jsx"
    - "**/*.vue"
    - "**/*.svelte"
    - "**/*.html"
    - "**/*.css"
    - "**/*.scss"
    - "components/**"
    - "src/components/**"
    - "design-system/**"
  promptSignals:
    phrases:
      - "accessibility"
      - "wcag"
      - "a11y"
      - "contrast"
      - "contrast ratio"
      - "screen reader"
      - "aria"
      - "focus"
      - "focus visible"
      - "keyboard navigation"
      - "keyboard"
      - "colour blind"
retrieval:
  aliases:
    - wcag
    - accessibility
    - a11y
    - EN 301 549
    - European Accessibility Act
    - contrast
    - screen reader
    - aria
  intents:
    - check accessibility compliance
    - fix contrast ratio
    - add keyboard navigation
    - make component screen-reader friendly
    - meet EU accessibility requirements
  examples:
    - is this colour contrast accessible
    - make this component keyboard navigable
    - check this UI against WCAG
    - does this meet EU accessibility standards
---

# WCAG Accessibility (EN 301 549 / European Standard)

## The Standard

The **European Accessibility Act (EAA)** requires digital products and services in the EU to meet **EN 301 549**, which references **WCAG 2.2 Level AA** as the technical baseline. This is not optional — it is a legal requirement for products operating in the EU market.

**Default: always build to WCAG 2.2 AA.** Deviating requires explicit, documented justification. Do not skip accessibility requirements because of timeline pressure or design preference.

WCAG 2.2 AA organises requirements under four principles: **Perceivable, Operable, Understandable, Robust**.

---

## Perceivable

Users must be able to perceive all content and UI components.

### Colour Contrast
| Context | Minimum ratio | Enhanced (AAA) |
|---|---|---|
| Normal text (< 18pt / < 14pt bold) | **4.5 : 1** | 7 : 1 |
| Large text (≥ 18pt / ≥ 14pt bold) | **3 : 1** | 4.5 : 1 |
| UI components and graphical objects | **3 : 1** | — |

> **Check contrast on the real rendered page, not the spec (dembrandt engine, optional).** Design-time swatches lie once real text lands on real backgrounds, gradients, and overlays. `get_findings` / `render_report` run against the live DOM and surface the actual failing text/background pairs with their measured ratios — a fast way to catch the combinations a static palette review misses. See [`extract-design`](../extract-design/SKILL.md).

**Disabled elements are exempt.** WCAG explicitly excludes inactive UI components from contrast requirements (WCAG 1.4.3 exception). A disabled button may use low-contrast text — this is intentional and correct, as it communicates the unavailable state.

Do not use colour as the only means of conveying information (e.g. a red border alone to indicate an error — add an icon or text label).

**Weight is part of legibility, and the ratio cannot see it.** The contrast formula measures ink colour against background colour and nothing else. It scores a hairline and a heavy weight identically at the same hue, while perceived legibility is the product of both. So the palette's faintest legible colour and the type scale's lightest weight must not land on the same text: a muted or secondary token, the one carrying captions, labels and helper text, takes a weight of at least 500 wherever the body default reads as regular or light. *That floor is a house rule, not a WCAG requirement.* The standard has nothing to say about weight, which is exactly why the failure gets through the audit. The same physics on dark surfaces is in [[color-mode-and-theme]]. A muted colour is already the palette's least assertive choice, and pairing it with the lightest weight compounds two decisions that both mean *recede*. The result at caption sizes is text a reader has to work at consciously, while the audit reports a pass.

### Text Alternatives
- Every meaningful image needs `alt` text describing its content or function
- Decorative images use `alt=""` so screen readers skip them
- Icons used as buttons need an accessible label: `aria-label` or visually hidden text
- Charts and data visualisations need a text summary or data table alternative

### Captions and Transcripts
- Video content needs captions
- Audio-only content needs a transcript

---

## Operable

Users must be able to operate all UI components.

### Keyboard Navigation
All interactive elements must be reachable and operable by keyboard alone.

- Every button, link, input, and control must receive focus via Tab
- Focus order must follow the visual reading order of the page
- No keyboard traps — users must be able to navigate away from any component
- Modal dialogs must trap focus inside while open, and return focus to the trigger element on close

### Focus Visibility
A visible focus indicator is required on every interactive element (WCAG 2.2 strengthens focus visibility requirements).

```css
/* Minimum: do not remove focus outline without a replacement */
:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}
```

Never use `outline: none` without providing a custom focus style. The focus ring is not a design problem to eliminate — it is a navigation tool.

### Touch Target Size
Interactive elements on touch devices must be at least **24×24px** (WCAG 2.2) — **44×44px** is the recommended comfortable minimum (Apple HIG, Material Design). Small icon buttons need padding to reach this size even if the visual icon is smaller.

### No Seizure Triggers
Nothing on screen should flash more than 3 times per second.

### Skip Links
Pages with repeated navigation must provide a "Skip to main content" link as the first focusable element, so keyboard users can bypass navigation on every page.

---

## Understandable

Users must be able to understand the content and how the UI works.

### Language
- Set `lang` attribute on the `<html>` element: `<html lang="fi">` or `<html lang="en">`
- Mark inline content in a different language with `lang` on that element

### Labels and Instructions
- Every form input must have a visible label — not just a placeholder (placeholders disappear on input)
- Required fields must be indicated — do not rely on colour alone; add an asterisk and a legend
- Error messages must be associated with their input via `aria-describedby`

### Predictability
- Components that look the same must behave the same (see Consistency and Standards)
- Navigation must appear in the same location across pages
- Opening a new tab or window must be communicated in advance

### Error Identification
- Form validation errors must identify which field failed
- Errors must be described in text — not only by colour or icon

---

## Robust

Content must be interpreted reliably by assistive technologies.

### Semantic HTML
Use the correct HTML element for the job. Semantics convey role, state, and structure to screen readers for free.

```html
<!-- Correct -->
<button>Save</button>
<nav aria-label="Main navigation">...</nav>
<h1>Page title</h1>

<!-- Wrong — requires manual ARIA to replicate what the element provides natively -->
<div onclick="save()">Save</div>
<div class="nav">...</div>
<div class="heading">Page title</div>
```

### ARIA — Use Sparingly
ARIA supplements HTML semantics where native elements fall short. It does not fix broken HTML.

**Rule: no ARIA is better than incorrect ARIA.** Incorrect ARIA actively breaks screen reader output.

Required patterns:
- `aria-label` or `aria-labelledby` for components with no visible text label
- `aria-expanded` on toggles, accordions, and dropdowns
- `aria-live` regions for dynamic content updates (toast notifications, search results)
- `role="dialog"` with `aria-modal="true"` on modal overlays
- `aria-current="page"` on the active navigation item

### Status Messages
Dynamic updates (success toasts, loading states, error counts) must be announced to screen readers via `aria-live` or `role="status"` — they will not be announced automatically unless the focused element changes.

---

## The Disabled Element Exception

WCAG 1.4.3 explicitly states: *"Text or images of text that are part of an inactive user interface component… have no contrast requirement."*

This means:
- Disabled buttons, inputs, and links **may** use low-contrast text and colours
- The visual dimming of disabled states is both correct and compliant
- Do not add artificial contrast to disabled elements — the reduced contrast communicates "this is unavailable"

---

## Review Checklist

| Area | Check |
|---|---|
| Contrast | All active text ≥ 4.5:1 (normal) or 3:1 (large/UI) |
| Contrast | Disabled elements exempt — intentionally low contrast is fine |
| Colour | Colour is never the only information carrier |
| Keyboard | All interactive elements reachable and operable by keyboard |
| Focus | Visible focus indicator on every interactive element |
| Touch | Interactive targets ≥ 44×44px on touch surfaces |
| Labels | Every input has a visible label (not just placeholder) |
| Errors | Validation errors identify the field and describe the problem in text |
| HTML | Semantic elements used correctly; ARIA only where needed |
| Language | `lang` attribute set on `<html>` |
| Skip link | "Skip to main content" as first focusable element |
| Live regions | Dynamic updates announced via `aria-live` or `role="status"` |

© dembrandt · MIT · dembrandt/dembrandt-skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
frontend-design официальный anthropics Скилл задаёт осмысленное визуальное направление для новых интерфейсов и редизайна. Подойдёт, когда стандартный шаблонный UI не устраивает. 1 025 790установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. CX Codex +1 678 700установок prototype Matt Pocock Создаёт временный прототип, чтобы проверить логику, модель состояния или вид интерфейса до работы над основным кодом. 986 201установок hyperframes heygen-com Скилл задаёт агенту правила рендера HTML-кода в видео через HyperFrames. Помогает собирать проморолики, эксплейнеры и титры прямо в коде проекта. CX Codex +1 1 200 000установок hyperframes-cli heygen-com Управляет проектами HyperFrames через терминал: собирает таймлайн, проверяет контраст кадров, запускает предпросмотр и рендерит видео локально или в облаке. CX Codex +1 1 300 000установок webapp-testing официальный anthropics Скилл запускает проверки локальных веб-приложений через Playwright: помогает отлаживать UI, делать скриншоты и смотреть логи браузера. 186 758установок

Из того же набора41

user-flows-and-guided-paths Скилл помогает проектировать пошаговые сценарии, визарды, экраны онбординга и чекаута. Подсказывает, как выстроить навигацию и сохранить контекст пользователя. CX Codex +1 879установок responsive-paradigms Задаёт для ИИ-агента правила адаптивной вёрстки: делит мобильные, планшетные и десктопные интерфейсы на разные парадигмы взаимодействия, а не просто масштабирует один макет. CX Codex +1 875установок gestalt-ui-organisation Скилл раскладывает контролы по принципам гештальта, чтобы пользователь видел, что к чему относится, без чтения подписей. Пригодится при вёрстке тулбаров, форм, навигации и дашбордов. CX Codex +1 879установок visual-emphasis-and-hierarchy Задаёт правила визуальной иерархии в интерфейсе: акценты на кнопках, контраст, отступы и выделение текста. Пригодится при вёрстке дашбордов, карточек и баннеров. CX Codex +1 874установок button-states Скилл описывает шесть состояний интерактивных элементов и выводит цвета hover и active из базового цвета по HSL. Пригодится, когда кнопки в проекте выглядят незаконченными. CX Codex +1 877установок component-family-consistency Скилл следит, чтобы кнопки, поля ввода, бейджи и пилюли делили радиус, цвета, тени, границы и отступы. Пригодится при сборке или ревизии библиотеки компонентов. CX Codex +1 874установок loading-states-and-perceived-performance Скилл для ИИ-кодинга, который помогает выбрать спиннер, скелетон или прогресс-бар и сделать интерфейс быстрее на ощупь. CX Codex +1 871установок generate-ui-from-brand Превращает URL сайта или файл DESIGN.md в дизайн-токены, решения по UX и готовую спецификацию интерфейса. CX Codex +1 870установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой