---
fonte: 01-canonicos/seed-componentes.md
versao_da_fonte: v1.43
secao: 73
titulo: "HV-P5 FECHADA — a tinta de marca não sobrevive a NENHUMA superfície de interação, e isso é um número (2026-08-20, nona parte) · nasce `--seed-text-brand-strong`"
sequencia: 79 de 98
bytes_do_corpo: 10258
md5_do_corpo: f7fe671d7f014ca34869f3f4cf18ac85
gerado_por: 06-validacao/geradores/gen-camada-ia.py
nota: fatia GERADA — o corpo abaixo é byte a byte o trecho do canônico; edite o canônico, nunca esta fatia. Canônico inteiro em https://ds.seed.eng.br/01-canonicos/seed-componentes.md
---
## 73. HV-P5 FECHADA — a tinta de marca não sobrevive a NENHUMA superfície de interação, e isso é um número (2026-08-20, nona parte) · nasce `--seed-text-brand-strong`

> **Escrito em 2026-08-20, nona parte. Autossuficiente: presume um leitor que nunca viu a conversa.**
> Esta seção fecha a **HV-P5**, que era o item 1 da fila aprovada e a única pendência do projeto
> classificada como **norma violada hoje**. Registro completo em `validacao/MANIFESTO.md` **§100**.

### 73.1 O que a pendência dizia, e onde ela errava

O §71.8 e a abertura diziam: *"90 controles violam o piso de contraste no sobrevoo ou no pressionado,
concentrados em 7 classes de botão"*. **Reproduzido, o 90 bateu e a distribuição estava errada.** Não eram
7 consertos espalhados: eram **5 arquivos**, com **64 dos 90 num só** — o `seed-design-system.html`, o
showcase v1.0 (*legado vivo*), que tem **paleta local** e não consome os gêmeos.

> **PENDÊNCIA ESCRITA É HIPÓTESE — e isso vale também para o CENSO POR CLASSE.** A lista de 7 classes era
> verdadeira como censo e enganosa como plano: ela agrupava pelo que a régua **imprime** (o seletor), não
> pelo que **causa** o defeito (a paleta do arquivo). *Censo por nome de classe é censo do rótulo.*

### 73.2 O número que tira a decisão do campo da preferência

`--seed-text-brand` e `--seed-text-link` valem `#098475` no claro. Eles medem **4,60** sobre a página
branca — **0,10 acima do piso 4,5** — e caem abaixo do piso assim que a superfície deixa de ser branco
puro:

| superfície | valor | mede com `#098475` |
|---|---|---|
| `surface-page` · `surface-raised` | `#FFFFFF` | **4,60** ✅ |
| `surface-subtle` · `action-neutral-hover` | `#F2F6F9` | **4,23** ❌ |
| `action-neutral-active` · `surface-sunken` | `#E3EBF0` | **3,81** ❌ |
| `row-selected-bg` | `#E8FBF7` | **4,28** ❌ |

> **O NÚMERO QUE FECHA:** para `#098475` alcançar 4,5, o fundo precisa de **luminância ≥ 0,978** — o cinza
> neutro mais escuro que serve é **`#FDFDFD`**, dois passos do branco puro. **Não existe superfície de
> interação possível para aquela tinta.** Logo escurecer a **tinta** no estado não é escolha estética: é a
> única saída que não desliga o estado.
>
> ⚠ **E há uma consequência que reordena a HV-P4:** os dois tokens que nasceram na v1.18
> (`action-neutral-hover` e `action-neutral-active`) são **exatamente** as superfícies que derrubam a
> tinta de marca. **Aplicar a gramática HV1-d ao acervo sem o token novo teria CRIADO casos de HV1-c em
> massa.** *A HV-P5 não era só anterior à HV-P4 por ser norma: era pré-requisito técnico dela — e isso
> não estava escrito em lugar nenhum.*

### 73.3 O RITO de três rodadas

| rodada | fonte | o que ela estabelece |
|---|---|---|
| **R1 canon** | **Carbon (IBM)** | tem **exatamente este par**: `$link-primary` (Blue 60 `#0f62fe`) e **`$link-primary-hover`** (Blue 70 `#0043ce`), *"Hover color for $link-primary"*; e **`$link-secondary`** (Blue 70), *"Secondary link color for **lower contrast backgrounds**"* |
| **R1 canon** | Carbon, issue **#7647** | nomeia o **mesmo caso fundador**, verbatim: *"The current link color for selected rows and rows with hover doesn't have enough visual contrast"* → resposta: token **mais escuro**, `#0043CE` claro / `#A6C8FF` escuro |
| **R2 mercado** | **GOV.UK Elements** #546 | defeito idêntico — hover `#2b8cc4` sobre branco = **3,72** — resolvido **escurecendo a paleta** em 2019 |
| **R2 mercado** | **eBay Playbook** | define o véu de estado (4% por estado) e **não diz nada sobre a legibilidade do conteúdo sobre o véu** — o outro lado da conclusão do §71.2 |
| **R3 normas** | **WebAIM**, verbatim | *"the 3:1 contrast rule does not (or should not) apply to the hover, focus, or active states... **the 4.5:1 (or 7:1) contrast requirement to the background does apply to all link states**"* |

### 73.4 O contrato HV1-e e o token que nasceu

| # | Cláusula | Régua | Natureza |
|---|---|---|---|
| **HV1-e** | **A tinta cujo piso foi verificado num ÚNICO fundo não serve a estado.** Toda tinta consumida por controle tem de medir ≥4,5 (texto) contra **todas** as superfícies de interação que o design system declara — `surface-subtle`, `action-neutral-hover`, `action-neutral-active`, `surface-sunken`, `row-selected-bg` —, não só contra a página | tabela tinta × superfície, medida no gêmeo | **norma**, derivada da SC 1.4.3 |

| token (gêmeos **v1.19**) | claro | escuro | mede no claro |
|---|---|---|---|
| `--seed-text-brand-strong` | `#006C62` | `#66D1C2` | **6,32** página · **5,82** `surface-subtle` · **5,24** `action-neutral-active` · **5,89** `row-selected-bg` |

**NENHUM HEX NOVO:** no claro é o valor de `surface-brand-deep` e de `action-primary-hover`; no escuro é o
mesmo de `text-brand` (`#66D1C2`, que já media **8,31 a 10,16** sobre todas as superfícies escuras).
**No tema escuro nada muda de aparência em nenhum pixel.**

> **ALTERNATIVA DESCARTADA, com número:** reusar `action-primary-hover` como tinta **PASSA** (5,24 a 12,85
> nos dois temas) e foi recusada por **acoplamento de propósito** — é token de **fundo** de botão, e uma
> mudança futura no sobrevoo do botão moveria a tinta do link em silêncio. *Mesmo critério com que a v1.18
> recusou `action-ghost-hover` para o sobrevoo neutro.*

### 73.5 A gramática de consumo — onde este token entra, e onde NÃO entra

| situação | tinta | por quê |
|---|---|---|
| link/rótulo de marca **em repouso**, sobre a página | `text-link` / `text-brand` | 4,60, passa — **nada muda** |
| o mesmo link quando a **linha muda de fundo** (`tr:hover`, `tr.selecionada`) | **`text-brand-strong`** | 4,23 e 4,28 → 5,82 e 5,89 |
| botão **fantasma** de marca no seu próprio sobrevoo | **`text-brand-strong`** | 4,23 → 5,82 |
| tinta de marca sobre **superfície elevada branca** | `text-brand` | `surface-raised` é `#FFFFFF` no claro: 4,60, passa |
| tema **escuro**, qualquer superfície | `text-brand` **ou** `text-brand-strong` — mesmo valor | 8,31 a 10,16, já passava |

**O QUE ESTE TOKEN NÃO RESOLVE, e é fronteira declarada:** ele é **tinta**. Onde o defeito é a
**superfície** carregar texto — a marca chapada `#11B0A0` com texto branco em cima, 2,71 — a saída é a que
o **§5-d** já fixou no gate de 2026-08-18: **descer a superfície** para `surface-brand-strong` `#098475`
(4,60), **não** escurecer a tinta. *Ali a opção de tinta escura (`#00352F`, 4,99) foi a opção D e ficou
VETADA pelo Rafael.*

### 73.6 O achado que a HV1 NÃO pode ver — o estado de SELEÇÃO

Ao consertar `.linha-abrir`, medi o par que a guarda **não produz**: `text-link` sobre `row-selected-bg`
(`#E8FBF7`) = **4,28**, abaixo do piso. **A HV1 produz `:hover` e `:active`; ela nunca produz SELEÇÃO.**
É a outra metade do caso fundador do Carbon (*"selected rows **and** rows with hover"*), e entrou no mesmo
conserto.

> **Fica como pendência de dimensão inteira (SE-P1):** **nenhum instrumento desta casa produz o estado de
> SELEÇÃO para medir contraste.** A CT1 cobre repouso/hover/ativo/foco; a HV1 cobre hover/ativo. *Seleção
> é estado de DADO, não de ponteiro — e por isso escapou dos dois eixos.*

### 73.7 Os consertos, com número, e o que ficou intocado

| arquivo | conserto | antes → depois |
|---|---|---|
| `tela-detalhe.html` (gerado) | `tbody tr:hover .linha-abrir` e `tr.selecionada .linha-abrir` → `text-brand-strong`, **no molde e no gerador** | **4,23 → 5,82** · selecionada **4,28 → 5,89** · 20 casos → **0** |
| `tela-gantt.html` · `tela-quadro.html` (gerados) | mesmo bloco, **preventivo** | medido: as duas **declaram** a regra `.linha-abrir` e têm **ZERO instâncias** dela — veredito *sem instância* da rodada zero |
| `banco-navegacao.html` | sobrevoo **próprio** de `[aria-current="page"]`, com fundo e tinta declarados JUNTOS | **1,02 → 9,35** (escuro) |
| `banco-tokens.html` | `.btn-ghost:hover` ganha tinta | **4,23 → 5,82** |
| `seed-design-system.html` | migração de **três papéis** de turquesa + `--cinza-forte` + quatro pares | **862 → 46** folhas · HV1-c **64 → 0** |
| `tela-site.html` | **NENHUM — o artefato estava correto** | falso positivo do 41º defeito de instrumento |

**Todos os consertos tocam SÓ o estado de interação.** Prova: as capturas de **repouso** antes e depois
saem **byte-idênticas** (dois grupos de md5 repetido na folha `render-audit/gate-v140/fechamento.html`, e a
repetição é a prova, não erro).

### 73.8 Pendências

| # | Pendência | Por que fica |
|---|---|---|
| **HV-P6** | a HV1-c **não** aplica o degrau de **texto grande** da SC 1.4.3 (≥24px, ou ≥18,66px com peso ≥700 → piso 3,00) | medido: **0** vereditos mudariam hoje — o maior alvo que reprova mede **14px**. Ficou de fora de propósito, para a prova de inércia do 41º defeito ser legível |
| **SE-P1** | **nenhum instrumento produz o estado de SELEÇÃO** para medir contraste | é um eixo novo, não uma correção: seleção é estado de dado |
| **CC-P9** | as **46** folhas restantes do `seed-design-system.html` | 24 da família amarelo/dourado (**única pergunta de gate**), 8 dos mostruários de cor do próprio documento, 6 dos números decorativos, 6 do defeito de régua da CC-P10, 2 defeitos reais dentro de mockup em SVG |
| **CC-P10** | o `contraste-composicao.mjs` resolve o fundo de elemento com **gradiente** subindo até o ancestral branco, em vez de **recusar** a medição como a HV1 faz | medido no pixel: **6** folhas, **4 falsos positivos** e **2 defeitos reais** |
| **ES-P1** | **nenhuma guarda mede COLISÃO DE ESPECIFICIDADE** — todas medem o resultado | ela já produziu **três** defeitos em três partes: o avatar da barra (§71.7), a página corrente da paginação e o título da coluna de marca |
| **TK-P1** | o bloco de tokens injetado declara de qual versão do gêmeo nasceu, e ninguém mede a defasagem | medido: o acervo declara **seis** versões — v1.5 (1) · v1.7 (2) · v1.8 (1) · v1.9 (15) · v1.12 (1) · v1.17 (23) · v1.19 (3) |

---

