# 29 — CMS: destaques do site

**Fase:** P5.S4.1 · **Área:** CMS (domínio do painel) · **Spec:** `tests/29-cms-destaques.spec.ts`

## História

O operador abre **Destaques** no painel, cria uma peça de destaque com a imagem do catálogo de
mídia, texto alternativo, destino e slot, e administra o estado da peça (ativar, desativar,
arquivar) sem apagar o registro.

## Critérios de aceite

1. A lista (`/destaques`) abre para quem tem `destaques.ver`, com título da tela no `<h1>` do shell,
   tabela com `caption`/`scope`, filtros por slot e situação e **nenhuma violação A/AA** (axe).
2. O formulário de criação aceita título no idioma padrão, **id da imagem do catálogo**, texto
   alternativo, destino (caminho do site ou `https://`), slot, ordem e janela de vigência.
3. Criar com uma imagem real do catálogo redireciona para a edição com a mensagem de sucesso e o
   registro persistido (título, `alt`, destino).
4. **Desativar** preserva o registro (a peça sai do site e continua na lista como “Inativo”);
   **ativar** devolve o estado.
5. **Arquivar** (com confirmação nativa) encerra a peça: ela sai da lista padrão e aparece no filtro
   “Arquivados”, com o registro preservado.
6. **Sem JavaScript** a validação server-side continua visível: imagem inexistente e destino
   `javascript:` produzem resumo de erros (`role="alert"`) e erro no campo (`aria-invalid`), sem
   gravar nada.

## Dados próprios

Cada execução cria a **própria imagem** no catálogo (upload único, alt único com timestamp) e a
própria peça de destaque. O id da imagem é lido do formulário de arquivamento do card recém-criado
(ação `…/galeria/{id}/arquivar`) — o catálogo não expõe outro identificador na tela. A peça fica
arquivada no banco de dev (arquivar é terminal nesta fatia) e não interfere em nenhum outro spec.

## Fora de escopo (S4.2)

Render público do banner, vigência no portal, cache por slot e o widget `destaques.banner`.
