Ir ao conteúdo
SEED engenhariaDesign System

Componentes

73. HV-P5 FECHADA — a tinta de marca não sobrevive a NENHUMA superfície de interação, e isso é um número

estávelseed-componentes.md v1.43 · §73seção 79 de 9873-hv-p5-fechada-a-tinta-de-marca-nao-sobrevive-a.md · MD5 f7fe671d

Título completo no canon: 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-abrirtext-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)

Esc