# História 03 — Sem JavaScript

- **Spec:** `tests/03-no-js.spec.ts` (projeto `portal-no-js`, `javaScriptEnabled: false`)
- **Camadas:** E2E (Playwright)
- **Dono:** Layout (shell) + módulos do portal
- **Status:** ativa

## Jornada
Pessoa com JS bloqueado (ou falhando) navega pelo portal normalmente.

## Critérios de aceite
1. A home responde **200** e renderiza conteúdo no `<main>` (ADR-010: conteúdo público funciona
   sem JS).
2. Navegação real por links funciona: home → listagem → detalhe (sem `fetch`/SPA).
3. As preferências de acessibilidade funcionam **sem JS** quando vêm do cookie
   (atributos `data-a11y-*` chegam prontos do servidor — SSR, sem FOUC).
4. **Zero requisição externa** por padrão: nenhuma requisição sai da origem do app
   (ADR-002 — VLibras só sob demanda, GA só por opt-in explícito).
5. Contrato estrutural do shell conferido sem JS (landmarks e `<h1>` único). A auditoria **axe**
   roda nos projetos com JS: o axe precisa injetar script para aplicar as regras.

## Fora de escopo (dono · fase)
- Service Worker/PWA offline (ADR-010) — fase de PWA.

## Evidência
`make check E2E=1` verde no projeto `portal-no-js`.
