Tokens
5-b. A TINTA SOBRE FUNDO DE MARCA — três tokens, um por fundo
seed-tokens.md v1.23 · §05-bseção 8 de 1705-b-a-tinta-sobre-fundo-de-marca-tres-tokens-um-por.md · MD5 3a48591aTítulo completo no canon: A TINTA SOBRE FUNDO DE MARCA — três tokens, um por fundo (v1.15, 2026-08-17) · ⚠ PARCIALMENTE SUPERSEDIDO PELO §5-d
Esta seção SUPERSEDE a "Regra crítica reformulada" do §5 e é o estado VIGENTE. Ela fecha a MR-P1 (decisão do Rafael) e a MR-P2 (defeito medido na mesma edição). Registro completo, com a prova de reprovação das guardas, no
validacao/MANIFESTO.md§86.
O que estava errado não era um valor — era a ARQUITETURA. Até a v1.14 um único token de tinta
(text-on-brand) servia três fundos de marca com necessidades opostas. O gêmeo de JSON descrevia
esse token, com essas palavras, como "texto sobre action.primary" — isto é, o próprio gêmeo declarava
para qual fundo ele havia sido feito, e ele estava sendo consumido em outros dois.
| Fundo | Valor | branco #FFFFFF |
escura #00352F |
|---|---|---|---|
marca chapada — surface-brand |
#11B0A0 nos dois temas |
2,71 ❌ | 4,99 ✓ |
marca profunda — surface-brand-deep claro |
#006C62 |
6,32 ✓ | 2,14 ❌ |
| marca profunda escuro | #005048 |
9,37 ✓ | 1,45 ❌ |
botão primário — action-primary claro |
#098475 |
4,60 ✓ | 2,95 ❌ |
| botão primário escuro | #66D1C2 |
1,83 ❌ | 7,39 ✓ |
Piso 4,50 (SC 1.4.3, texto normal). Nenhum valor único satisfaz as três linhas. O token acertava o botão
primário — o fundo para o qual nasceu — e errava os outros dois, um defeito em cada tema: branco sobre a
marca chapada media 2,71 no claro (MR-P1, medido por pixel em 9 artefatos) e tinta escura sobre a
marca profunda media 1,45 no escuro (MR-P2, medido por pixel em 3 textos do tela-tabela.html — o
contador dentro de botão e a página corrente do rodapé). Lacuna de token, a mesma família do BT-P6.
O ESTADO VIGENTE — três tintas, e o nome diz o fundo:
| Token | Claro | Escuro | Mede | Use sobre |
|---|---|---|---|---|
--seed-text-on-brand |
#00352F |
#00352F |
4,99 nos dois | surface-brand (#11B0A0) — a marca chapada |
--seed-text-on-brand-deep (novo) |
#FFFFFF |
#FFFFFF |
6,32 · 9,37 | surface-brand-deep — a marca profunda |
--seed-text-on-action-primary (novo) |
#FFFFFF |
#00352F |
4,60 · 7,39 | action-primary — o botão primário |
A REGRA, em uma frase: sobre a marca chapada a tinta é escura, nos dois temas e em qualquer tamanho — branco ali não é permitido nem em 24px, nem em 19px bold. Sobre a marca profunda, e sobre o botão primário no tema claro, a tinta é branca. Sobre o botão primário no tema escuro, escura. O amarelo mantém a regra absoluta: sempre texto escuro (cinza-900), nunca branco.
Por que text-on-brand não inverte com o tema: porque surface-brand não inverte — vale #11B0A0
nos dois temas, por decisão de identidade. Tinta que inverte sobre fundo que não inverte é exatamente o
defeito que o contrato BT3 mede.
O botão primário NÃO muda de aparência nesta edição: os valores de text-on-action-primary são
exatamente os que a tinta única tinha.
ALTERNATIVAS DESCARTADAS, com o número que as descarta:
- trocar só o valor claro da tinta única — consertaria a MR-P1 e abriria o mesmo defeito no botão primário claro, que cairia de 4,60 para 2,95;
- parar de usar a marca chapada como fundo de texto, mandando tudo para a marca profunda — muda a identidade visual (o turquesa médio é a cor da marca em herói e selo) e contraria a decisão do Rafael, que manteve a marca chapada e trocou a tinta;
- calcular a tinta no consumidor — não existe cálculo condicional em custom property, e empurrar a escolha para o consumidor foi o que produziu a lacuna;
- manter a tinta única e só acrescentar os dois nomes novos, deixando a antiga como legado depreciado — seria mais seguro contra consumidor esquecido, e foi descartado porque a migração é enumerável por comando e porque nome que engana é o mecanismo que gerou este defeito.
COMO A MIGRAÇÃO FOI FEITA, por REGRA e não por arquivo: o token era consumido sobre fundos diferentes
dentro do mesmo arquivo, então substituição global trocaria certo por errado em massa. O script
validacao/migra-tinta-marca.py percorre bloco de regra CSS e escolhe a tinta pelo fundo declarado na
mesma regra — 39 consumos sobre a marca chapada, 28 sobre o botão primário, 4 sobre a marca profunda e
1 caso de fundo transparent que ele não tocou e imprimiu para decisão humana.
GUARDA QUE PROVA ESTA REGRA: validacao/guarda-tinta-marca.mjs, contrato MR1, alvo de pasta,
nos dois temas. Ela mede duas coisas: o piso da SC 1.4.3 e a mão da tinta (a luminância da tinta
tem de ser menor que a da marca — porque a decisão não foi "passe do piso", foi "tinta escura"). Placar em
2026-08-17: 23 PASS · 0 FAIL · 73 [n/a] em 48 artefatos × 2 temas, com 49 textos assentando
sobre a marca chapada e zero violando. Contrato sem guarda é contrato sem prova.