---
fonte: 02-tokens/seed-tokens.md
versao_da_fonte: v1.23
secao: 05-b
titulo: "A TINTA SOBRE FUNDO DE MARCA — três tokens, um por fundo (v1.15, 2026-08-17) · ⚠ PARCIALMENTE SUPERSEDIDO PELO §5-d"
sequencia: 8 de 17
bytes_do_corpo: 5207
md5_do_corpo: 3a48591a87787a5f7bec4a30b1bddfb5
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/02-tokens/seed-tokens.md
---
## 5-b. 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.*


