# História 04 — Axe (WCAG A/AA) nas telas-chave

- **Spec:** `tests/04-axe-wcag.spec.ts`
- **Camadas:** E2E (Playwright + `@axe-core/playwright`)
- **Dono:** Todos os módulos do portal + shell
- **Status:** ativa

## Jornada
Auditoria automatizada das telas-chave: nenhuma entra sem prova de acessibilidade.

## Critérios de aceite
1. Axe (`wcag2a`, `wcag2aa`, `wcag21a`, `wcag21aa`, `wcag22a`, `wcag22aa`) com **zero violações**
   na home, na listagem, no detalhe e na página 404.
2. Estrutura de cabeçalhos: um `<h1>`, sem salto de nível (`h2` após `h1`, nunca `h1 → h3`).
3. Landmarks presentes: `header`, `nav`, `main`, `footer` (e `main` único).
4. Toda imagem com `alt` (decorativa com `alt=""`); todo controle com nome acessível.
5. `lang` correto no `<html>` e título de página não vazio.

## Fora de escopo (dono · fase)
- Contraste medido por computed styles sem composição de ancestrais (limitação do sniffCSS):
  o **axe** é o árbitro de contraste. Ver `tools/sniff-gate.sh` (exceções documentadas).
- Teste manual com leitor de tela (NVDA/VoiceOver/TalkBack): a automação cobre ~40% (plano 11 §5).

## Evidência
`make check E2E=1` verde nos projetos `portal-desktop` e `portal-mobile`.
