# Tokens do SEED Design System — vista para agentes de IA

> Tabela GERADA (`06-validacao/geradores/gen-camada-ia.py`) a partir da fonte executável `02-tokens/seed-tokens.json` (formato DTCG; MD5 `1f2d56cf168164d7709a7b9d15cb6b53`), com a variável CSS conferida no gêmeo `02-tokens/seed-tokens.css` (MD5 `de18bad2537681434b86e4901b65df67`; 330 variáveis `--seed-*`). Especificação humana e histórico: `02-tokens/seed-tokens.md` v1.23. Regra da casa: componente consome só a camada SEMÂNTICA (`semantic.*`); primitivos (`color.*`) são repertório. Valores com modo trazem claro e escuro. **317 tokens.**

Arquivos inteiros: [seed-tokens.json](https://ds.seed.eng.br/02-tokens/seed-tokens.json) · [seed-tokens.css](https://ds.seed.eng.br/02-tokens/seed-tokens.css) · [seed-tokens.md](https://ds.seed.eng.br/02-tokens/seed-tokens.md)

## color (65)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `color.turquesa.50` | `#E8FBF7` | — | color | `--seed-turquesa-50` |  |
| `color.turquesa.100` | `#CDF3EC` | — | color | `--seed-turquesa-100` |  |
| `color.turquesa.200` | `#9CE4D8` | — | color | `--seed-turquesa-200` |  |
| `color.turquesa.300` | `#66D1C2` | — | color | `--seed-turquesa-300` |  |
| `color.turquesa.400` | `#11B0A0` | — | color | `--seed-turquesa-400` | ANCORA CANONICA #11B0A0 - cor principal da marca (Pantone 3275C) |
| `color.turquesa.500` | `#00A192` | — | color | `--seed-turquesa-500` |  |
| `color.turquesa.600` | `#098475` | — | color | `--seed-turquesa-600` | ANCORA CANONICA #098475 - verde institucional (Pantone 327C); stop de acao acessivel: 4.60:1 com branco |
| `color.turquesa.700` | `#006C62` | — | color | `--seed-turquesa-700` |  |
| `color.turquesa.800` | `#005048` | — | color | `--seed-turquesa-800` |  |
| `color.turquesa.900` | `#00352F` | — | color | `--seed-turquesa-900` |  |
| `color.amarelo.50` | `#FFF6D2` | — | color | `--seed-amarelo-50` |  |
| `color.amarelo.100` | `#FDEA9E` | — | color | `--seed-amarelo-100` |  |
| `color.amarelo.200` | `#FAD61D` | — | color | `--seed-amarelo-200` | ANCORA CANONICA #FAD61D - amarelo da marca (Pantone 115C); ACENTO OFICIAL de marca (highlight, EEny, simbolo); sempre com texto escuro; nunca na mesma peca que o dourado |
| `color.amarelo.300` | `#DABA00` | — | color | `--seed-amarelo-300` |  |
| `color.amarelo.400` | `#BDA100` | — | color | `--seed-amarelo-400` |  |
| `color.amarelo.500` | `#A28A00` | — | color | `--seed-amarelo-500` |  |
| `color.amarelo.600` | `#877200` | — | color | `--seed-amarelo-600` |  |
| `color.amarelo.700` | `#6D5C00` | — | color | `--seed-amarelo-700` |  |
| `color.amarelo.800` | `#504300` | — | color | `--seed-amarelo-800` |  |
| `color.amarelo.900` | `#352C00` | — | color | `--seed-amarelo-900` |  |
| `color.dourado.50` | `#FFF4E4` | — | color | `--seed-dourado-50` |  |
| `color.dourado.100` | `#FFE6C0` | — | color | `--seed-dourado-100` |  |
| `color.dourado.200` | `#FECA76` | — | color | `--seed-dourado-200` |  |
| `color.dourado.300` | `#F9B11C` | — | color | `--seed-dourado-300` | ANCORA CANONICA #F9B11C - amarelo dourado (Pantone 7409C); COR DE TRABALHO: warning, dataviz (cat-2), detalhe fotografico - fora de pecas de marca; nunca na mesma peca que o amarelo |
| `color.dourado.400` | `#D49400` | — | color | `--seed-dourado-400` |  |
| `color.dourado.500` | `#B67F00` | — | color | `--seed-dourado-500` |  |
| `color.dourado.600` | `#986900` | — | color | `--seed-dourado-600` |  |
| `color.dourado.700` | `#7B5500` | — | color | `--seed-dourado-700` |  |
| `color.dourado.800` | `#5B3E00` | — | color | `--seed-dourado-800` |  |
| `color.dourado.900` | `#3D2800` | — | color | `--seed-dourado-900` |  |
| `color.azul.50` | `#ECF4FC` | — | color | `--seed-azul-50` | ANCORA CANONICA #ECF4FC - antigo 'azul claro' da paleta (Pantone 656C), absorvido como stop 50 |
| `color.azul.100` | `#CDF1FF` | — | color | `--seed-azul-100` |  |
| `color.azul.200` | `#96E0FD` | — | color | `--seed-azul-200` |  |
| `color.azul.300` | `#53C2E9` | — | color | `--seed-azul-300` | ANCORA CANONICA #53C2E9 - azul da marca (Pantone 2985C). Papel formal: familia de INFO na interface, cat-3 no dataviz, badges/tags informativos, ceu/agua em ilustracao. Livre no produto digital; contido em material de marca (nao compete com turquesa em titulos/fundos/CTAs). Acao primaria e sempre familia turquesa/verde - nunca azul |
| `color.azul.400` | `#01B3E0` | — | color | `--seed-azul-400` |  |
| `color.azul.500` | `#0099C1` | — | color | `--seed-azul-500` |  |
| `color.azul.600` | `#007FA1` | — | color | `--seed-azul-600` |  |
| `color.azul.700` | `#006783` | — | color | `--seed-azul-700` |  |
| `color.azul.800` | `#004C61` | — | color | `--seed-azul-800` |  |
| `color.azul.900` | `#003241` | — | color | `--seed-azul-900` |  |
| `color.cinza.50` | `#F2F6F9` | — | color | `--seed-cinza-50` |  |
| `color.cinza.100` | `#E3EBF0` | — | color | `--seed-cinza-100` |  |
| `color.cinza.200` | `#C8D6DF` | — | color | `--seed-cinza-200` |  |
| `color.cinza.300` | `#ACBECA` | — | color | `--seed-cinza-300` |  |
| `color.cinza.400` | `#90A6B3` | — | color | `--seed-cinza-400` |  |
| `color.cinza.500` | `#788F9D` | — | color | `--seed-cinza-500` |  |
| `color.cinza.600` | `#617683` | — | color | `--seed-cinza-600` | ANCORA CANONICA #617683 - cinza da marca (Pantone 5487C); corpo de texto minimo em fundo claro (4.74:1) |
| `color.cinza.700` | `#4D606C` | — | color | `--seed-cinza-700` |  |
| `color.cinza.800` | `#38464F` | — | color | `--seed-cinza-800` |  |
| `color.cinza.900` | `#242E34` | — | color | `--seed-cinza-900` |  |
| `color.vermelho.50` | `#FFF2F1` | — | color | `--seed-vermelho-50` |  |
| `color.vermelho.100` | `#FFE2DF` | — | color | `--seed-vermelho-100` |  |
| `color.vermelho.200` | `#FFC2BD` | — | color | `--seed-vermelho-200` |  |
| `color.vermelho.300` | `#FF9C95` | — | color | `--seed-vermelho-300` |  |
| `color.vermelho.400` | `#FC6F6A` | — | color | `--seed-vermelho-400` |  |
| `color.vermelho.500` | `#D94545` | — | color | `--seed-vermelho-500` | ANCORA #D94545 - vermelho funcional (nao e cor de marca; formalizado a partir do uso previo no DS digital) |
| `color.vermelho.600` | `#C6393B` | — | color | `--seed-vermelho-600` |  |
| `color.vermelho.700` | `#A5272A` | — | color | `--seed-vermelho-700` |  |
| `color.vermelho.800` | `#7A1C1E` | — | color | `--seed-vermelho-800` |  |
| `color.vermelho.900` | `#521112` | — | color | `--seed-vermelho-900` |  |
| `color.branco` | `#FFFFFF` | — | color | `--seed-branco` | ANCORA CANONICA - segunda cor primaria da marca |
| `color.dark.page` | `#0B1419` | — | color | `--seed-dark-page` |  |
| `color.dark.default` | `#141D23` | — | color | `--seed-dark-default` |  |
| `color.dark.elevated` | `#1D272D` | — | color | `--seed-dark-elevated` |  |
| `color.dark.overlay` | `#273137` | — | color | `--seed-dark-overlay` |  |

## font (31)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `font.family.sans` | `["Montserrat","-apple-system","Segoe UI","Roboto","Arial","sans-serif"]` | — | fontFamily | `—` | Familia de marca e interface. Display -> corpo. |
| `font.family.mono` | `["JetBrains Mono","SF Mono","Consolas","Courier New","monospace"]` | — | fontFamily | `—` | Familia tecnica: dados de medicao (kWh/kWp), identificadores (UC, ART, proposta), codigo, timestamps, acento em labels. Nunca em titulos ou paragrafos. |
| `font.family.expressive` | `["Caveat","Segoe Script","cursive"]` | — | fontFamily | `—` | TERCIARIA. Familia expressiva, EXCLUSIVA de peca de MARKETING que precise de algo alegorico, fora do normal, festivo. Nunca em interface, nunca em documento tecnico, nunca como assinatura padrao de peca de rotina. Decisao do Rafael em 2026-08-20; supersede a linha do seed-tokens.md que dizia 'sistema final: 2 familias'. Nome escolhido por PROPOSITO (expressive) e nao por tamanho (display), para impedir leitura de 'fonte de titulo grande'. A familia Caveat vem do marca-seed.md v5.0 §4.3 por INFERENCIA declarada — ele decidiu papel e escopo, nao repetiu o nome; confirmar (pendencia MR-P3). |
| `font.weight.light` | `300` | — | fontWeight | `—` |  |
| `font.weight.regular` | `400` | — | fontWeight | `—` |  |
| `font.weight.medium` | `500` | — | fontWeight | `—` | uso exclusivo da mono |
| `font.weight.semibold` | `600` | — | fontWeight | `—` |  |
| `font.weight.bold` | `700` | — | fontWeight | `—` |  |
| `font.size.display` | `64px` | — | dimension | `—` |  |
| `font.size.h1` | `42px` | — | dimension | `—` |  |
| `font.size.h2` | `32px` | — | dimension | `—` |  |
| `font.size.h3` | `24px` | — | dimension | `—` |  |
| `font.size.h4` | `18px` | — | dimension | `—` |  |
| `font.size.body-lg` | `17px` | — | dimension | `—` |  |
| `font.size.body` | `14px` | — | dimension | `—` |  |
| `font.size.small` | `12px` | — | dimension | `—` |  |
| `font.size.caption` | `11px` | — | dimension | `—` |  |
| `font.size.field-touch` | `16px` | — | dimension | `—` | Fonte MINIMA de campo em superficie de toque. Aplicada via @media (pointer: coarse). Resolve o zoom automatico do iOS na causa. Alternativa descartada: maximum-scale=1 (bloquear zoom viola WCAG e pune baixa visao). |
| `font.lineHeight.display` | `1.125` | — | number | `—` |  |
| `font.lineHeight.heading` | `1.2` | — | number | `—` |  |
| `font.lineHeight.body` | `1.57` | — | number | `—` |  |
| `font.lineHeight.body-relaxed` | `1.65` | — | number | `—` | texto corrido longo (blog, relatorio) - regra Montserrat Light |
| `font.lineHeight.caption` | `1.27` | — | number | `—` |  |
| `font.letterSpacing.display` | `-2px` | — | dimension | `—` |  |
| `font.letterSpacing.h1` | `-0.5px` | — | dimension | `—` |  |
| `font.letterSpacing.normal` | `0px` | — | dimension | `—` |  |
| `font.letterSpacing.caption` | `2px` | — | dimension | `—` | labels micro UPPERCASE |
| `font.size-fluid.display` | `clamp(2.5rem, 1.9rem + 2.6vw, 4rem)` | — | dimension | `—` | 40px -> 64px |
| `font.size-fluid.h1` | `clamp(1.875rem, 1.58rem + 1.3vw, 2.625rem)` | — | dimension | `—` | 30px -> 42px |
| `font.size-fluid.h2` | `clamp(1.5rem, 1.3rem + 0.87vw, 2rem)` | — | dimension | `—` | 24px -> 32px |
| `font.size-fluid.h3` | `clamp(1.25rem, 1.15rem + 0.43vw, 1.5rem)` | — | dimension | `—` | 20px -> 24px |

## dimension (22)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `dimension.space.0` | `0px` | — | dimension | `—` |  |
| `dimension.space.1` | `4px` | — | dimension | `—` |  |
| `dimension.space.2` | `8px` | — | dimension | `—` |  |
| `dimension.space.3` | `12px` | — | dimension | `—` |  |
| `dimension.space.4` | `16px` | — | dimension | `—` |  |
| `dimension.space.5` | `20px` | — | dimension | `—` |  |
| `dimension.space.6` | `24px` | — | dimension | `—` |  |
| `dimension.space.8` | `32px` | — | dimension | `—` |  |
| `dimension.space.10` | `40px` | — | dimension | `—` |  |
| `dimension.space.12` | `48px` | — | dimension | `—` |  |
| `dimension.space.16` | `64px` | — | dimension | `—` |  |
| `dimension.space.20` | `80px` | — | dimension | `—` |  |
| `dimension.space.24` | `96px` | — | dimension | `—` |  |
| `dimension.radius.sm` | `4px` | — | dimension | `--seed-radius-sm` | chips, badges, inputs compactos |
| `dimension.radius.md` | `8px` | — | dimension | `--seed-radius-md` | botoes, inputs, padrao de controle |
| `dimension.radius.lg` | `12px` | — | dimension | `--seed-radius-lg` | cards |
| `dimension.radius.xl` | `16px` | — | dimension | `--seed-radius-xl` | modais, paineis |
| `dimension.radius.full` | `9999px` | — | dimension | `--seed-radius-full` | pills, avatares |
| `dimension.safe-area.top` | `env(safe-area-inset-top)` | — | dimension | `—` |  |
| `dimension.safe-area.bottom` | `env(safe-area-inset-bottom)` | — | dimension | `—` |  |
| `dimension.safe-area.left` | `env(safe-area-inset-left)` | — | dimension | `—` |  |
| `dimension.safe-area.right` | `env(safe-area-inset-right)` | — | dimension | `—` |  |

## duration (4)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `duration.productive-fast` | `100ms` | — | — | `—` | hover, foco, toggles |
| `duration.productive` | `150ms` | — | — | `—` | dropdowns, tooltips, estados de controle |
| `duration.expressive` | `300ms` | — | — | `—` | abertura de pagina, modais, notificacoes |
| `duration.expressive-slow` | `400ms` | — | — | `—` | transicoes de tela, hero |

## cubicBezier (5)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `cubicBezier.productive` | `[0.2,0,0.38,0.9]` | — | — | `—` |  |
| `cubicBezier.productive-exit` | `[0.2,0,1,0.9]` | — | — | `—` |  |
| `cubicBezier.expressive` | `[0.4,0.14,0.3,1]` | — | — | `—` |  |
| `cubicBezier.expressive-exit` | `[0.4,0.14,1,1]` | — | — | `—` |  |
| `cubicBezier.out` | `[0.2,0.8,0.4,1]` | — | — | `—` | v1.23 (2026-08-26) — a curva que a spec usava QUATRO vezes e nunca fixava, deixando dois valores no acervo (.2,.8,.4,1 em 3 artefatos e .2,.7,.3,1 em 2). Medidos em 21 instantes de um movimento de 120 ms, os dois diferem no maximo 1,5% do percurso e 0,3 MILISSEGUNDO — a 60 Hz um quadro dura 16,7 ms, entao a diferenca e 1/56 de quadro e nao existe em nenhum monitor. Escolhida a de maior uso. E o mesmo teste respondeu se o token deve EXISTIR: contra o `productive` a diferenca e 36,8% do percurso e 24,9 ms, 83x maior. Sao curvas diferentes de verdade. |

## shadow (3)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `shadow.raised` | `[{"offsetX":"0px","offsetY":"1px","blur":"2px","spread":"0px","color":"rgba(36,46,52,0.10)"},{"offsetX":"0px","offsetY":"1px","blur":"1px","spread":"0px","color":"rgba(36,46,52,0.06)"}]` | — | — | `--seed-shadow-raised` |  |
| `shadow.overlay` | `[{"offsetX":"0px","offsetY":"8px","blur":"24px","spread":"0px","color":"rgba(36,46,52,0.14)"},{"offsetX":"0px","offsetY":"2px","blur":"6px","spread":"0px","color":"rgba(36,46,52,0.08)"}]` | — | — | `--seed-shadow-overlay` |  |
| `shadow.modal` | `[{"offsetX":"0px","offsetY":"16px","blur":"48px","spread":"0px","color":"rgba(36,46,52,0.22)"}]` | — | — | `--seed-shadow-modal` |  |

## semantic (167)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `semantic.surface.page` | `#FFFFFF` | `#FFFFFF` / `#0B1419` | color | `--seed-surface-page` | fundo da pagina |
| `semantic.surface.subtle` | `#F2F6F9` | `#F2F6F9` / `#141D23` | color | `--seed-surface-subtle` | faixas alternadas, fundos de secao |
| `semantic.surface.raised` | `#FFFFFF` | `#FFFFFF` / `#1D272D` | color | `--seed-surface-raised` | cards; parear com shadow.raised |
| `semantic.surface.sunken` | `#E3EBF0` | `#E3EBF0` / `#0B1419` | color | `--seed-surface-sunken` | areas rebaixadas (wells, code blocks) |
| `semantic.surface.overlay` | `#FFFFFF` | `#FFFFFF` / `#273137` | color | `--seed-surface-overlay` | popovers, menus; parear com shadow.overlay |
| `semantic.surface.brand` | `#11B0A0` | `#11B0A0` / `#11B0A0` | color | `--seed-surface-brand` | faixas de marca; texto branco apenas 24px+/bold 19px+ (3.22:1) |
| `semantic.surface.brand-subtle` | `#E8FBF7` | `#E8FBF7` / `#1A3833` | color | `--seed-surface-brand-subtle` | superficie de marca SUTIL — balao de mensagem propria, faixa de destaque leve. Nasce em 2026-08-17 pelo defeito BT-P6: nao existia semantico para isso e o artefato alcancou a primitiva --seed-turquesa-50, que nao inverte com o tema (par media 1,14 no escuro contra piso 3,00). Medido contra --seed-text-primary: 12,79 claro e 10,40 escuro, piso de texto 4,50 |
| `semantic.surface.brand-strong` | `#098475` | `#098475` / `#098475` | color | `--seed-surface-brand-strong` | v1.17: superficie de marca que CARREGA TEXTO — turquesa-600, igual nos dois temas. Texto branco mede 4,60; a fronteira do controle contra a pagina mede 4,60 no claro, 4,05 sobre a pagina escura e 3,31 sobre a superficie elevada escura, todas acima do piso 3,00 da SC 1.4.11. A marca CHAPADA (surface.brand #11B0A0) continua a ancora visual e fica reservada para area SEM texto funcional. |
| `semantic.surface.brand-deep` | `#006C62` | `#006C62` / `#005048` | color | `--seed-surface-brand-deep` | capas e secoes profundas; substitui o hex nao-oficial #0d8f82 |
| `semantic.surface.inverse` | `#242E34` | `#242E34` / `#F2F6F9` | color | `--seed-surface-inverse` |  |
| `semantic.text.primary` | `#0B3330` | `#0B3330` / `#DDECE8` | color | `--seed-text-primary` | titulos e texto de alta enfase; substitui o #2a3942 ad-hoc do DS v1 |
| `semantic.text.secondary` | `#2F5A54` | `#2F5A54` / `#A3C4BE` | color | `--seed-text-secondary` | corpo de texto padrao |
| `semantic.text.muted` | `#40706A` | `#40706A` / `#8FB5AD` | color | `--seed-text-muted` | metadados, placeholders, captions - nunca corpo |
| `semantic.text.disabled` | `#90A6B3` | `#90A6B3` / `#617683` | color | `--seed-text-disabled` |  |
| `semantic.text.brand` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-text-brand` | texto na cor da marca com AA garantido |
| `semantic.text.brand-strong` | `#006C62` | `#006C62` / `#66D1C2` | color | `--seed-text-brand-strong` | v1.19 (2026-08-20, HV-P5): TINTA DE MARCA QUE SOBREVIVE A SUPERFICIE DE INTERACAO. text.brand mede 4,60 sobre a pagina branca — 0,10 acima do piso 4,5 — e cai abaixo do piso no instante em que a superficie deixa de ser branco puro: 4,23 sobre surface.subtle e action-neutral-hover (#F2F6F9) e 3,81 sobre action-neutral-active e surface.sunken (#E3EBF0). Medido: para #098475 alcancar 4,5 o fundo precisa de luminancia >= 0,978, ou seja o cinza neutro mais escuro que serve e #FDFDFD — NAO EXISTE superficie de interacao possivel para aquela tinta. Este token e a saida: #006C62 no claro mede 6,32 na pagina, 5,82 sobre surface.subtle e 5,24 sobre action-neutral-active. NENHUM HEX NOVO: o claro e o valor de surface.brand-deep e action.primary-hover, o escuro e o mesmo de text.brand (#66D1C2, que ja media 8,31 a 10,16 sobre todas as superficies escuras — no tema escuro nada muda). PRECEDENTE DE MERCADO: o Carbon (IBM) tem exatamente este par — $link-primary (Blue 60 #0f62fe) e $link-primary-hover (Blue 70 #0043ce), mais $link-secondary (Blue 70) descrito como "secondary link color for lower contrast backgrounds" — e a issue #7647 do Carbon nomeia o caso fundador com estas palavras: "the current link color for selected rows and rows with hover doesn't have enough visual contrast". NORMA: SC 1.4.3 vale em TODOS os estados (WebAIM, verbatim: "the 4.5:1 (or 7:1) contrast requirement to the background does apply to all link states"). ALTERNATIVA DESCARTADA, com numero: reusar action.primary-hover como tinta PASSA (5,24 a 12,85 em todas as superficies dos dois temas) e foi recusada por acoplamento de proposito — e token de FUNDO de botao; uma mudanca futura no sobrevoo do botao moveria a tinta do link em silencio. E o mesmo criterio que na v1.18 recusou action-ghost-hover para o sobrevoo neutro. |
| `semantic.text.inverse` | `#FFFFFF` | `#FFFFFF` / `#242E34` | color | `--seed-text-inverse` |  |
| `semantic.text.on-brand` | `#00352F` | `#00352F` / `#00352F` | color | `--seed-text-on-brand` | v1.15 (MR-P1): tinta sobre a marca CHAPADA (surface.brand #11B0A0). ESCURA nos dois temas porque a marca chapada nao inverte. Mede 4,99. ANTES da v1.15 este token valia #FFFFFF no claro e a sua descricao dizia texto sobre action.primary: um unico token servia tres fundos de marca com necessidades opostas, e branco sobre #11B0A0 mede 2,71, que reprova ate o piso 3,00 do texto grande. Quem serve o botao primario agora e on-action-primary. |
| `semantic.text.on-brand-deep` | `#FFFFFF` | `#FFFFFF` / `#FFFFFF` | color | `--seed-text-on-brand-deep` | v1.15 (MR-P2): tinta sobre a marca PROFUNDA (surface.brand-deep #006C62 no claro, #005048 no escuro). BRANCA nos dois temas: mede 6,32 no claro e 9,37 no escuro. Nasce de defeito medido: com a tinta unica anterior o escuro punha #00352F sobre #005048 e media 1,45, em tres textos do tela-tabela. |
| `semantic.text.on-brand-strong` | `#FFFFFF` | `#FFFFFF` / `#FFFFFF` | color | `--seed-text-on-brand-strong` | v1.17 (MR-P1, decisao do Rafael pela opcao B): tinta sobre surface.brand-strong (turquesa-600 #098475). BRANCA nos dois temas, mede 4,60. Foi a forma de manter o texto branco sobre a marca, que era o pedido, sem reprovar a SC 1.4.3 — o branco sobre a marca chapada #11B0A0 mede 2,71. |
| `semantic.text.on-action-destructive` | `#FFFFFF` | `#FFFFFF` / `#521112` | color | `--seed-text-on-action-destructive` | v1.16 (AD-P1): tinta sobre o BOTAO destrutivo (action.destructive #C6393B no claro, #FC6F6A no escuro). Inverte com o tema: mede 5,19 no claro e 5,26 no escuro; no hover, 7,18 e 7,21. Nasce de defeito medido: antes da v1.16 a tinta ali era branca literal e media 2,76 no escuro, porque a superficie de acao CLAREIA no tema escuro. Mesma forma do papel on-error do Material Design 3. |
| `semantic.text.on-action-primary` | `#FFFFFF` | `#FFFFFF` / `#00352F` | color | `--seed-text-on-action-primary` | v1.15: tinta sobre o BOTAO primario (action.primary #098475 no claro, #66D1C2 no escuro). Inverte com o tema: mede 4,60 no claro e 7,39 no escuro. Estes sao exatamente os valores que on-brand tinha antes da v1.15, entao o botao primario NAO muda de aparencia nesta edicao. |
| `semantic.text.link` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-text-link` |  |
| `semantic.border.subtle` | `#E3EBF0` | `#E3EBF0` / `#38464F` | color | `--seed-border-subtle` |  |
| `semantic.border.default` | `#C8D6DF` | `#C8D6DF` / `#4D606C` | color | `--seed-border-default` |  |
| `semantic.border.strong` | `#90A6B3` | `#90A6B3` / `#788F9D` | color | `--seed-border-strong` |  |
| `semantic.border.interactive` | `#788F9D` | `#788F9D` / `#788F9D` | color | `--seed-border-interactive` | v1.12 (fecha SH-P1/PN-P5): fronteira de componente interativo, SC 1.4.11 piso 3:1. Promocao do emprestimo declarado do cinza-500 no campo de busca do shell — medido >=3 nas seis superficies dos dois temas. Slot dark declarado de proposito (mesmo valor hoje por medicao, nao por lei de invariancia). |
| `semantic.border.focus` | `#00A192` | `#00A192` / `#66D1C2` | color | `--seed-border-focus` | anel de foco - sempre visivel, 2px + offset |
| `semantic.action.primary` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-action-primary` | fundo do botao primario. Light: verde institucional #098475 (4.60:1 com branco). Dark: turquesa-300 com texto turquesa-900 (7.39:1) |
| `semantic.action.primary-hover` | `#006C62` | `#006C62` / `#9CE4D8` | color | `--seed-action-primary-hover` |  |
| `semantic.action.primary-active` | `#005048` | `#005048` / `#11B0A0` | color | `--seed-action-primary-active` |  |
| `semantic.action.secondary-bg` | `#E8FBF7` | `#E8FBF7` / `#1A3833` | color | `--seed-action-secondary-bg` |  |
| `semantic.action.secondary-text` | `#006C62` | `#006C62` / `#66D1C2` | color | `--seed-action-secondary-text` |  |
| `semantic.action.ghost-hover` | `#F2F6F9` | `#F2F6F9` / `#1D272D` | color | `--seed-action-ghost-hover` |  |
| `semantic.action.neutral-hover` | `#F2F6F9` | `#F2F6F9` / `#141D23` | color | `--seed-action-neutral-hover` | HV1 (v1.18, 2026-08-19): SOBREVOO de controle NEUTRO, qualquer que seja a superficie neutra sob ele. Nasce de medicao: 619 de 1.410 controles ativos do acervo nao tinham NENHUMA resposta ao ponteiro. Sem hex novo — e o valor de surface-subtle nos dois temas; o que nasce e o PROPOSITO com nome. NAO se reusou action-ghost-hover porque no tema escuro ele vale #1D272D, igual a surface-raised, e o hover ficaria invisivel sobre a barra elevada do shell. |
| `semantic.action.neutral-active` | `#E3EBF0` | `#E3EBF0` / `#0B1419` | color | `--seed-action-neutral-active` | HV1 (v1.18, 2026-08-19): PRESSIONADO de controle NEUTRO — um passo ADIANTE do sobrevoo, na mesma direcao, que e o canon convergente de Material Design 3, Adobe Spectrum (que registra hover e down como estados INDEPENDENTES), eBay Playbook (hover 8%, press 12%) e Sainsbury's. Nasce de medicao: 1.350 de 1.410 controles ativos tinham o pressionado indistinguivel do sobrevoo — o mesmo buraco que o shadcn/ui, stack de producao do ERP, deixa por nao definir active. Sem hex novo: e o valor de surface-sunken nos dois temas. |
| `semantic.action.destructive` | `#C6393B` | `#C6393B` / `#FC6F6A` | color | `--seed-action-destructive` |  |
| `semantic.action.destructive-hover` | `#A5272A` | `#A5272A` / `#FF9C95` | color | `--seed-action-destructive-hover` |  |
| `semantic.accent.highlight` | `#FAD61D` | `#FAD61D` / `#FAD61D` | color | `--seed-accent-highlight` | acento oficial de marca - grifos, marcadores, detalhes de enfase; sempre com texto/elemento escuro por cima |
| `semantic.accent.highlight-subtle` | `#FFF6D2` | `#FFF6D2` / `#3A3410` | color | `--seed-accent-highlight-subtle` | fundo de grifo suave (marca-texto) |
| `semantic.accent.on-highlight` | `#242E34` | `#242E34` / `#242E34` | color | `--seed-accent-on-highlight` | texto sobre o acento amarelo - sempre escuro, nunca branco (9.70:1) |
| `semantic.feedback.success-bg` | `#E8FBF7` | `#E8FBF7` / `#00352F` | color | `--seed-feedback-success-bg` |  |
| `semantic.feedback.success-text` | `#006C62` | `#006C62` / `#9CE4D8` | color | `--seed-feedback-success-text` |  |
| `semantic.feedback.success-border` | `#66D1C2` | `#66D1C2` / `#006C62` | color | `--seed-feedback-success-border` |  |
| `semantic.feedback.success-solid` | `#098475` | `#098475` / `#11B0A0` | color | `--seed-feedback-success-solid` |  |
| `semantic.feedback.warning-bg` | `#FFF4E4` | `#FFF4E4` / `#3D2800` | color | `--seed-feedback-warning-bg` |  |
| `semantic.feedback.warning-text` | `#5B3E00` | `#5B3E00` / `#FECA76` | color | `--seed-feedback-warning-text` |  |
| `semantic.feedback.warning-border` | `#F9B11C` | `#F9B11C` / `#7B5500` | color | `--seed-feedback-warning-border` |  |
| `semantic.feedback.warning-solid` | `#F9B11C` | `#F9B11C` / `#F9B11C` | color | `--seed-feedback-warning-solid` |  |
| `semantic.feedback.danger-bg` | `#FFF2F1` | `#FFF2F1` / `#521112` | color | `--seed-feedback-danger-bg` |  |
| `semantic.feedback.danger-text` | `#A5272A` | `#A5272A` / `#FFC2BD` | color | `--seed-feedback-danger-text` |  |
| `semantic.feedback.danger-border` | `#FF9C95` | `#FF9C95` / `#A5272A` | color | `--seed-feedback-danger-border` |  |
| `semantic.feedback.danger-solid` | `#C6393B` | `#C6393B` / `#FC6F6A` | color | `--seed-feedback-danger-solid` |  |
| `semantic.feedback.info-bg` | `#ECF4FC` | `#ECF4FC` / `#003241` | color | `--seed-feedback-info-bg` |  |
| `semantic.feedback.info-text` | `#006783` | `#006783` / `#96E0FD` | color | `--seed-feedback-info-text` |  |
| `semantic.feedback.info-border` | `#53C2E9` | `#53C2E9` / `#006783` | color | `--seed-feedback-info-border` |  |
| `semantic.feedback.info-solid` | `#0099C1` | `#0099C1` / `#53C2E9` | color | `--seed-feedback-info-solid` |  |
| `semantic.chart.cat-1` | `#00A192` | `#00A192` / `#66D1C2` | color | `--seed-chart-cat-1` | Categorica ESTENDIDA v1.5 (supersede da v1.0; valores e medicoes na secao 3c do seed-tokens.md). Sequencia obrigatoria: turquesa -> dourado -> magenta -> azul -> violeta -> azul-800; 5 familias de matiz, nenhuma repete antes da 6a posicao. Magenta (#CD518B light / #E8A1C2 dark) e violeta (#966AC8 / #BD9CE2) sao matizes EXCLUSIVOS de dado: nunca aparecem em UI e nao tem rampa primitiva no 2.1 de proposito. cat-2 (dourado, 1.85 vs branco) so em area grande com rotulo direto - vetado como fill solitario. O cinza saiu da categorica (exclusivo de chart-no-data). |
| `semantic.chart.cat-2` | `#F9B11C` | `#F9B11C` / `#F9B11C` | color | `--seed-chart-cat-2` |  |
| `semantic.chart.cat-3` | `#CD518B` | `#CD518B` / `#E8A1C2` | color | `--seed-chart-cat-3` |  |
| `semantic.chart.cat-4` | `#0099C1` | `#0099C1` / `#53C2E9` | color | `--seed-chart-cat-4` |  |
| `semantic.chart.cat-5` | `#966AC8` | `#966AC8` / `#BD9CE2` | color | `--seed-chart-cat-5` |  |
| `semantic.chart.cat-6` | `#004C61` | `#004C61` / `#96E0FD` | color | `--seed-chart-cat-6` |  |
| `semantic.chart.positive` | `#00A192` | `#00A192` / `#66D1C2` | color | `--seed-chart-positive` |  |
| `semantic.chart.negative` | `#D94545` | `#D94545` / `#FC6F6A` | color | `--seed-chart-negative` |  |
| `semantic.chart.grid` | `#E3EBF0` | `#E3EBF0` / `#38464F` | color | `--seed-chart-grid` |  |
| `semantic.chart.axis` | `#788F9D` | `#788F9D` / `#90A6B3` | color | `--seed-chart-axis` |  |
| `semantic.chart.seq-1` | `#CDF3EC` | `#CDF3EC` / `#005048` | color | `--seed-chart-seq-1` | Sequencial 7 classes. Light 100->900 (pula 500 e 700); dark 800->100 (pula 300 e 900). Semantica: valor cresce, tinta cresce (light) / valor cresce, luz cresce (dark). ISENCAO WCAG 1.4.11 declarada (a norma isenta heatmap); condicoes obrigatorias: valor acessivel por rotulo/tooltip/tabela, fronteira por chart-grid, legenda com limites numericos. Escala decidida no gate visual de 2026-08-09: a proposta 50->800 foi reprovada porque os dois primeiros stops liam como CINZA, ambiguos com 'sem dado'. |
| `semantic.chart.seq-2` | `#9CE4D8` | `#9CE4D8` / `#006C62` | color | `--seed-chart-seq-2` |  |
| `semantic.chart.seq-3` | `#66D1C2` | `#66D1C2` / `#098475` | color | `--seed-chart-seq-3` |  |
| `semantic.chart.seq-4` | `#11B0A0` | `#11B0A0` / `#00A192` | color | `--seed-chart-seq-4` |  |
| `semantic.chart.seq-5` | `#098475` | `#098475` / `#11B0A0` | color | `--seed-chart-seq-5` |  |
| `semantic.chart.seq-6` | `#005048` | `#005048` / `#9CE4D8` | color | `--seed-chart-seq-6` |  |
| `semantic.chart.seq-7` | `#00352F` | `#00352F` / `#CDF3EC` | color | `--seed-chart-seq-7` |  |
| `semantic.chart.no-data` | `#E3EBF0` | `#E3EBF0` / `#38464F` | color | `--seed-chart-no-data` | Celula/regiao SEM MEDICAO. REGRA DURA: sempre com HACHURA DIAGONAL (padrao repetido ~45 graus), nunca cor lisa. O cinza e EXCLUSIVO deste papel em qualquer grafico SEED — nenhuma escala de valor pode usa-lo. A hachura garante que a distincao 'gerou pouco x nao reportou' nunca dependa de cor (1.4.1), inclusive em grayscale e impresso. A legenda ganha o item 'sem medicao' sempre que houver celula no-data. |
| `semantic.chart.no-data-hatch` | `#617683` | `#617683` / `#90A6B3` | color | `--seed-chart-no-data-hatch` | Tinta das LINHAS da hachura do no-data (NOVO na v1.7). Papel proprio, token proprio: a errata E3 provou que papel de desenho sem token proprio acaba tomando emprestado o token de outro papel — a hachura desenhava em chart-cat-5-stroke, que a v1.5 tornou VIOLETA, no lugar mais sensivel possivel, porque 'sem medicao' e exatamente o que nao pode parecer categoria. A correcao apontou para chart-axis e QUEBROU A MEDICAO: cinza-500 mede 2.80 contra o preenchimento cinza-100, abaixo do piso de 3:1 do 1.4.11. Valores atuais medidos contra o proprio preenchimento: 3.93 (light) e 3.84 (dark). Descartado consumir o primitivo cinza-700 direto (5.43, passa): repetiria a estrutura do erro, emprestando de um primitivo em vez de emprestar de uma categoria. |
| `semantic.chart.geo-base` | `#F2F6F9` | `#F2F6F9` / `#141D23` | color | `--seed-chart-geo-base` | Territorio de CONTEXTO de um mapa (NOVO na v1.8): a area geografica que NAO e objeto de medicao. Papel proprio, token proprio, pelo mesmo racional que criou o no-data-hatch na v1.7 (errata E3): papel de desenho sem token proprio acaba tomando emprestado o de outro papel. Num mapa existem TRES cinzas — contexto, sem medicao e com dado — e num grafico de barras existem so DOIS; o terceiro papel nasce aqui. Valor identico ao surface-subtle vigente, o que e proposital: o que muda nao e a cor, e a responsabilidade de mante-la. Medido contra a fronteira geografica: 3.11 (light) e 6.74 (dark), ambos >=3. |
| `semantic.chart.geo-boundary` | `#788F9D` | `#788F9D` / `#90A6B3` | color | `--seed-chart-geo-boundary` | Fronteira de municipio desenhada num mapa (NOVO na v1.8). Ela PORTA INFORMACAO — e a linha que responde 'o que esta dentro deste municipio' — logo entra no piso de 3:1 do WCAG 1.4.11. NAO consome chart-grid: medicao de 2026-08-11 mostrou que chart-grid tem o MESMO HEX de chart-no-data nos dois temas (#E3EBF0 light, #38464F dark), o que faz a fronteira desaparecer sobre um municipio sem medicao (razao 1.00). NAO consome chart-axis por emprestimo: no tema escuro chart-axis tem o mesmo hex do chart-no-data-hatch (#90A6B3), e emprestar repetiria a estrutura da errata E3. Medido contra o territorio de contexto: 3.11 (light) e 6.74 (dark). |
| `semantic.chart.div-neg-3` | `#A5272A` | `#A5272A` / `#FF9C95` | color | `--seed-chart-div-neg-3` | Divergente 7 posicoes: vermelho <-> neutro <-> turquesa. Alinhada por construcao ao par chart-positive/chart-negative da v1.0 (os stops +-2 SAO turquesa-500 e vermelho-500). REGRA DA ZONA-ZERO (declaracao, nao isencao): as posicoes +-1 e o zero representam 'perto de zero' e aproximar-se do fundo E a semantica; consequencia dura: dado cuja distincao do fundo e necessaria ao entendimento NUNCA usa sozinho +-1/zero — leva borda chart-axis ou rotulo de valor. As posicoes plenas (+-2, +-3) passam o gate 3:1 medido nos 2 modos. |
| `semantic.chart.div-neg-2` | `#D94545` | `#D94545` / `#D94545` | color | `--seed-chart-div-neg-2` |  |
| `semantic.chart.div-neg-1` | `#FFC2BD` | `#FFC2BD` / `#7A1C1E` | color | `--seed-chart-div-neg-1` |  |
| `semantic.chart.div-zero` | `#E3EBF0` | `#E3EBF0` / `#38464F` | color | `--seed-chart-div-zero` |  |
| `semantic.chart.div-pos-1` | `#9CE4D8` | `#9CE4D8` / `#005048` | color | `--seed-chart-div-pos-1` |  |
| `semantic.chart.div-pos-2` | `#00A192` | `#00A192` / `#00A192` | color | `--seed-chart-div-pos-2` |  |
| `semantic.chart.div-pos-3` | `#005048` | `#005048` / `#66D1C2` | color | `--seed-chart-div-pos-3` |  |
| `semantic.chart.cat-1-stroke` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-chart-cat-1-stroke` | Variante de STROKE para traco fino (linha <=3px, marcador pequeno — o pior caso do 1.4.11). REGRA DE CONSUMO: grafico de linha e sparkline usam cat-N-stroke; barra, area e fatia usam cat-N (fill). O fill v1.0 fica INTOCADO. Nasceu de remedicao que reprovou cat-1 (2.71), cat-2 (1.85) e cat-5 (2.53) contra branco; os pares dark nasceram do achado V2 do render de 2026-08-09 (cat-4-stroke light lia a ~2:1 no fundo escuro). DEPENDENCIA DECLARADA: no dark, cat-2 e cat-6 comprimem para stops vizinhos da rampa dourado (300/100) — a distincao mutua dessas duas series em modo escuro e sustentada pelo tracejado/marcador (1.4.1), nunca so pela cor. |
| `semantic.chart.cat-2-stroke` | `#B67F00` | `#B67F00` / `#F9B11C` | color | `--seed-chart-cat-2-stroke` |  |
| `semantic.chart.cat-3-stroke` | `#B23871` | `#B23871` / `#E8A1C2` | color | `--seed-chart-cat-3-stroke` |  |
| `semantic.chart.cat-4-stroke` | `#0099C1` | `#0099C1` / `#53C2E9` | color | `--seed-chart-cat-4-stroke` |  |
| `semantic.chart.cat-5-stroke` | `#7B42BD` | `#7B42BD` / `#BD9CE2` | color | `--seed-chart-cat-5-stroke` |  |
| `semantic.chart.cat-6-stroke` | `#004C61` | `#004C61` / `#96E0FD` | color | `--seed-chart-cat-6-stroke` |  |
| `semantic.gauge.track` | `#C8D6DF` | `#C8D6DF` / `#4D606C` | color | `--seed-gauge-track` | Trilha de fundo. Decorativa em si; o contraste exigido e do VALOR contra ela. |
| `semantic.gauge.value` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-gauge-value` | 3.09 vs track e 4.60 vs branco (light); 3.58 vs track e 10.16 vs page (dark). |
| `semantic.gauge.range-ok` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-gauge-range-ok` | = feedback-success-solid; herda as medicoes de gauge.value. |
| `semantic.gauge.range-warning` | `#986900` | `#986900` / `#F9B11C` | color | `--seed-gauge-range-warning` | 3.25 vs track e 4.82 vs branco (light); 3.54 vs track e 10.04 vs page (dark). |
| `semantic.gauge.range-critical` | `#C6393B` | `#C6393B` / `#FF9C95` | color | `--seed-gauge-range-critical` | 3.49 vs track (light); 3.26 vs track e 9.25 vs page (dark). |
| `semantic.rail.background` | `linear-gradient(180deg, #006C62 0%, #005048 100%)` | — | gradient | `--seed-rail-background` | CP20 adotado no gate G2 (2026-08-14): gradiente linear entre dois degraus adjacentes da rampa da marca (turquesa-700 -> turquesa-800). Tinta branca passa NOS DOIS EXTREMOS, nao na media: 6.32 e 9.37. Semantico proprio porque sem ele o tema escuro vira regra manual (custo C13: ClickUp escreveu 22 regras a mao). |
| `semantic.chrome.overlay-hover` | `rgba(255, 255, 255, 0.12)` | — | color | `--seed-chrome-overlay-hover` | Hover de item do rail: veu branco a 12% (valor que o shell ja praticava). Rotulo branco sobre a COMPOSICAO (overlay sobre os dois extremos do gradiente): 4.88 e 6.82, ambos >=4.5. |
| `semantic.chrome.overlay-active` | `rgba(255, 255, 255, 0.14)` | — | color | `--seed-chrome-overlay-active` | Estado pressionado de item do rail: veu branco a 14% (valor que o preview da composicao ja praticava). Rotulo branco sobre a composicao: 4.68 e 6.50, ambos >=4.5. O item ATIVO (aria-current) continua sendo a pilula clara do SH15-b — este token e o pressed, nao o current. |
| `semantic.entity.1` | `#11B0A0` | — | color | `--seed-entity-1` | E1 turquesa-400 vivo, tinta escura (cinza-900). Admissao CP22 medida: 5.11 |
| `semantic.entity.1-ink` | `#242E34` | — | color | `--seed-entity-1-ink` | Tinta declarada da posicao E1 (CP22: verificacao na definicao da paleta, nunca em render). |
| `semantic.entity.2` | `#D49400` | — | color | `--seed-entity-2` | E2 dourado-400 vivo, tinta escura. Medido: 5.30 |
| `semantic.entity.2-ink` | `#242E34` | — | color | `--seed-entity-2-ink` | Tinta declarada da posicao E2 (CP22: verificacao na definicao da paleta, nunca em render). |
| `semantic.entity.3` | `#01B3E0` | — | color | `--seed-entity-3` | E3 azul-400 vivo, tinta escura. Medido: 5.63 |
| `semantic.entity.3-ink` | `#242E34` | — | color | `--seed-entity-3-ink` | Tinta declarada da posicao E3 (CP22: verificacao na definicao da paleta, nunca em render). |
| `semantic.entity.4` | `#005048` | — | color | `--seed-entity-4` | E4 turquesa-800 profundo, tinta branca. Medido: 9.37 |
| `semantic.entity.4-ink` | `#FFFFFF` | — | color | `--seed-entity-4-ink` | Tinta declarada da posicao E4 (CP22: verificacao na definicao da paleta, nunca em render). |
| `semantic.entity.5` | `#006783` | — | color | `--seed-entity-5` | E5 azul-700 profundo, tinta branca. Medido: 6.43 |
| `semantic.entity.5-ink` | `#FFFFFF` | — | color | `--seed-entity-5-ink` | Tinta declarada da posicao E5 (CP22: verificacao na definicao da paleta, nunca em render). |
| `semantic.entity.6` | `#7B5500` | — | color | `--seed-entity-6` | E6 dourado-700 profundo, tinta branca. Medido: 6.68 |
| `semantic.entity.6-ink` | `#FFFFFF` | — | color | `--seed-entity-6-ink` | Tinta declarada da posicao E6 (CP22: verificacao na definicao da paleta, nunca em render). |
| `semantic.marker.now` | `#098475` | — | color | `--seed-marker-now` | CP24 (gate G4): marcador de AGORA em turquesa-600, MESMO hex nos dois temas — terceiro membro nomeado da classe invariante de tema (SH15/DG12/CP24). Medido >=3.0 (non-text, SC 1.4.11) contra as cinco superficies canonicas: 4.60/4.23/4.05/3.72/3.31. Em telas sobre o passado o marcador NAO aparece (C16). |
| `semantic.row-selected.bg` | `#E8FBF7` | `#E8FBF7` / `#00352F` | color | `--seed-row-selected-bg` | v1.13 (F7.2, fecha a lacuna achada na producao do gabarito A2): realce da LINHA SELECIONADA em lista e tabela. Nasce porque o realce nao pode ser um primitivo fixo — turquesa-100 mede 1,57 contra a tinta do tema escuro — e porque a bancada banco-dados.html ja havia inventado estes tres nomes LOCALMENTE, sem definicao no gemeo: o nome existia no sistema sem dono. Valores identicos aos que a bancada usava (adicao pura: nenhum valor anterior muda). Par medido: bg x text = 12,53 claro / 11,12 escuro; border x bg = 3,42 / 4,64. |
| `semantic.row-selected.text` | `#242E34` | `#242E34` / `#E3EBF0` | color | `--seed-row-selected-text` | v1.13 (F7.2, fecha a lacuna achada na producao do gabarito A2): realce da LINHA SELECIONADA em lista e tabela. Nasce porque o realce nao pode ser um primitivo fixo — turquesa-100 mede 1,57 contra a tinta do tema escuro — e porque a bancada banco-dados.html ja havia inventado estes tres nomes LOCALMENTE, sem definicao no gemeo: o nome existia no sistema sem dono. Valores identicos aos que a bancada usava (adicao pura: nenhum valor anterior muda). Par medido: bg x text = 12,53 claro / 11,12 escuro; border x bg = 3,42 / 4,64. |
| `semantic.row-selected.border` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-row-selected-border` | v1.13 (F7.2, fecha a lacuna achada na producao do gabarito A2): realce da LINHA SELECIONADA em lista e tabela. Nasce porque o realce nao pode ser um primitivo fixo — turquesa-100 mede 1,57 contra a tinta do tema escuro — e porque a bancada banco-dados.html ja havia inventado estes tres nomes LOCALMENTE, sem definicao no gemeo: o nome existia no sistema sem dono. Valores identicos aos que a bancada usava (adicao pura: nenhum valor anterior muda). Par medido: bg x text = 12,53 claro / 11,12 escuro; border x bg = 3,42 / 4,64. |
| `semantic.field.height-sm` | `32px` | — | dimension | `--seed-field-height-sm` | §2.5 l.388 — altura sm do controle, fixada pela spec (densidade desktop). |
| `semantic.field.height-md` | `44px` | — | dimension | `--seed-field-height-md` | §2.5 l.388 — altura md (padrao): alvo de toque WCAG, igual botao. Decisao explicita da spec: 'md = 44px (nao 40px)' (§1.9/§2.2 do seed-componentes.md). DIFERE de proposito da regua generica --seed-control-md (40px, v1.14) — coexistencia declarada no gemeo CSS; reconciliar e decisao de canonico. |
| `semantic.field.height-lg` | `52px` | — | dimension | `--seed-field-height-lg` | §2.5 l.388 — altura lg do controle, fixada pela spec. |
| `semantic.field.radius` | `8px` | — | dimension | `--seed-field-radius` | §2.5 l.389 — alias de radius-md (que aponta radius-4 = 8px). |
| `semantic.field.gap` | `8px` | — | dimension | `--seed-field-gap` | §2.5 l.390 — alias de sp-2. Rotulo->controle e controle->mensagem. |
| `semantic.field.stack-gap` | `24px` | — | dimension | `--seed-field-stack-gap` | §2.5 l.391 — alias de sp-6. Campo->campo confortavel; o denso (ERP) usa sp-4 (16px) por regra de layout, nao por token proprio. |
| `semantic.field.bg` | `#FFFFFF` | `#FFFFFF` / `#1D272D` | color | `--seed-field-bg` | §2.5 l.394/413 — fundo do controle: surface-page no claro, surface-raised no escuro. |
| `semantic.field.label` | `#242E34` | `#242E34` / `#E3EBF0` | color | `--seed-field-label` | §2.5 l.395/414 — rotulo do campo: cinza-900 (13,86:1) / cinza-100 (14,16:1). |
| `semantic.field.value` | `#242E34` | `#242E34` / `#E3EBF0` | color | `--seed-field-value` | §2.5 l.396/415 — valor digitado: cinza-900 (13,86:1) / cinza-100 (12,61:1 sobre o campo raised). |
| `semantic.field.placeholder` | `#617683` | `#617683` / `#90A6B3` | color | `--seed-field-placeholder` | §2.5 l.397/416 — placeholder: cinza-600 (4,74:1, AA e distinto do valor) / cinza-400 (6,01:1). |
| `semantic.field.optional-text` | `#617683` | `#617683` / `#90A6B3` | color | `--seed-field-optional-text` | §2.5 l.398/417 — sufixo '(opcional)' do rotulo: cinza-600 (4,74:1) / cinza-400. |
| `semantic.field.help-text` | `#4D606C` | `#4D606C` / `#ACBECA` | color | `--seed-field-help-text` | §2.5 l.399/418 — texto auxiliar: cinza-700 (6,55:1, direcao GOV.UK 7:1) / cinza-300 (8,92:1). |
| `semantic.field.border` | `#788F9D` | `#788F9D` / `#788F9D` | color | `--seed-field-border` | Borda default do campo — e ela que identifica o controle (SC 1.4.11). SUPERSEDE CD-P2 (2026-08-17, fechada; seed-componentes.md §66.4 e tabela vigente do §64.6-supersede) sobre a §2.5 l.400: o alias deixa de ser cinza-600 e vira --seed-border-interactive (cinza-500, mesmo hex nos dois temas). Motivo medido: o local degradava na inversao de tema (4,74 claro / 3,21 escuro), o semantico e equilibrado (3,13 claro / 5,05 escuro, ambos >=3). No escuro coincide com o que a §2.5 l.419 ja dizia. A bancada banco-formfield.html consome o alias desde CD-P2. As variantes de estado (-hover/-error/-success/-warning) NAO migram por decisao da propria CD-P2 (nao tem semantico proprio no gemeo) e seguem a §2.5. |
| `semantic.field.border-hover` | `#4D606C` | `#4D606C` / `#90A6B3` | color | `--seed-field-border-hover` | §2.5 l.401/420 — borda no hover: cinza-700 / cinza-400 (6,01:1). |
| `semantic.field.error-text` | `#A5272A` | `#A5272A` / `#FF9C95` | color | `--seed-field-error-text` | §2.5 l.402/421 — mensagem de erro: vermelho-700 (7,18:1) / vermelho-300 (8,49:1). |
| `semantic.field.border-error` | `#C6393B` | `#C6393B` / `#FC6F6A` | color | `--seed-field-border-error` | §2.5 l.403/422 — borda no estado error: vermelho-600 (5,19:1) / vermelho-400 (5,52:1). |
| `semantic.field.success-text` | `#006C62` | `#006C62` / `#66D1C2` | color | `--seed-field-success-text` | §2.5 l.404/423 — mensagem de success: turquesa-700 (6,32:1) / turquesa-300 (9,32:1). |
| `semantic.field.border-success` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-field-border-success` | §2.5 l.405/424 — borda no estado success: turquesa-600 (4,60:1) / turquesa-300 (8,31:1). |
| `semantic.field.readonly-bg` | `#E3EBF0` | `#E3EBF0` / `#0B1419` | color | `--seed-field-readonly-bg` | §2.5 l.406/425 — fundo do readonly: surface-sunken nos dois temas (hoje cinza-100 no claro; o comentario da spec media cinza-50 — nota de divergencia registrada na emissao v1.21, o alias vence). |
| `semantic.field.warning-text` | `#7B5500` | `#7B5500` / `#F9B11C` | color | `--seed-field-warning-text` | §2.5 l.407/426 (emenda v0.7) — mensagem de warning: dourado-700 (6,68:1) / dourado-300 (9,22:1). Guarda-corpo da spec: warning e SO plausibilidade, nunca obrigatoriedade, nunca bloqueia submit. |
| `semantic.field.border-warning` | `#986900` | `#986900` / `#F9B11C` | color | `--seed-field-border-warning` | §2.5 l.408/427 (emenda v0.7) — borda no estado warning: dourado-600 (4,82:1) / dourado-300 (8,21:1). |
| `semantic.button.radius` | `8px` | — | dimension | `--seed-button-radius` | §1.6 l.126 — alias de radius-md (que aponta radius-4 = 8px). Invariante de tema. |
| `semantic.button.font-weight` | `600` | — | fontWeight | `--seed-button-font-weight` | §1.6 l.127 — alias de fw-semibold. Invariante de tema. |
| `semantic.button.height-sm` | `32px` | — | dimension | `--seed-button-height-sm` | §1.6 l.128 — altura sm, fixada pela spec (densidade desktop). Coincide com --seed-control-sm e com --seed-field-height-sm: os tres valem 32px. |
| `semantic.button.height-md` | `44px` | — | dimension | `--seed-button-height-md` | §1.6 l.129 — altura md (padrao), fixada pela spec como alvo de toque WCAG 2.5.8. ⚠ COLISAO DECLARADA E NAO RESOLVIDA, com os tres numeros lado a lado: --seed-button-height-md 44px = --seed-field-height-md 44px (v1.21, decisao explicita do canonico 'md = 44px (nao 40px)') CONTRA --seed-control-md 40px (v1.14, regua generica de altura de controle). Dois numeros para o mesmo degrau da escala. Emitido como a §1.6 fixa; reconciliar as duas reguas e decisao do Rafael, nao dos gemeos. |
| `semantic.button.height-lg` | `52px` | — | dimension | `--seed-button-height-lg` | §1.6 l.130 — altura lg, fixada pela spec. ⚠ MESMA COLISAO da height-md: 52px (botao) = 52px (field) CONTRA --seed-control-lg 48px. |
| `semantic.button.gap` | `8px` | — | dimension | `--seed-button-gap` | §1.6 l.131 — alias de sp-2. Espaco entre icone e rotulo dentro do botao. Invariante de tema. |
| `semantic.button.secondary-border` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-button-secondary-border` | §1.6 l.135/143 — borda do botao secundario: turquesa-600 / turquesa-300. Medido nesta emissao: 4,28:1 sobre o action-secondary-bg claro e 6,92:1 sobre o tint dark, ambos acima do piso 3,00 da SC 1.4.11 (a spec declara 9,32 para o dark contra outra superficie de referencia). |
| `semantic.button.secondary-text` | `#005048` | `#005048` / `#CDF3EC` | color | `--seed-button-secondary-text` | §1.6 l.136/144 — rotulo do botao secundario: turquesa-800 / turquesa-100. Medido sobre o action-secondary-bg de cada tema: 8,73:1 claro e 10,64:1 escuro — o 10,64 confere EXATAMENTE com o numero que a spec anota na propria linha. |
| `semantic.button.outline-border` | `#617683` | `#617683` / `#90A6B3` | color | `--seed-button-outline-border` | §1.6 l.137/145 — borda do botao outline (fundo transparente): cinza-600 / cinza-400. Medido sobre a surface-page de cada tema: 4,74:1 claro e 7,35:1 escuro. |
| `semantic.button.ghost-text` | `#006C62` | `#006C62` / `#66D1C2` | color | `--seed-button-ghost-text` | §1.6 l.138/146 — rotulo do botao fantasma: turquesa-700 / turquesa-300. Medido sobre a surface-page: 6,32:1 claro e 10,16:1 escuro. Este e o token que a propria spec usa para explicar por que o par dark e OBRIGATORIO: com o primitivo fixo do claro, o escuro mediria 2,7. |
| `semantic.button.toggle-on-bg` | `#005048` | `#005048` / `#66D1C2` | color | `--seed-button-toggle-on-bg` | §1.6 l.139/147 — placa solida do botao de alternancia LIGADO (§1.5.1: desligado = transparente/contorno sutil, ligado = placa solida): turquesa-800 / turquesa-300. |
| `semantic.button.toggle-on-fg` | `#FFFFFF` | `#FFFFFF` / `#00352F` | color | `--seed-button-toggle-on-fg` | §1.6 l.140/148 — glifo/rotulo sobre a placa ligada. O claro e o UNICO valor de cor deste grupo que a spec FIXA em hex (#FFFFFF) em vez de nomear um alias; o dark e turquesa-900. Medido: 9,37:1 claro e 7,39:1 escuro (o 7,39 confere com o numero da spec). |
| `semantic.card.bg` | `#FFFFFF` | `#FFFFFF` / `#1D272D` | color | `--seed-card-bg` | §26 l.1954 — fundo do cartao: alias de surface-raised nos dois temas. |
| `semantic.card.border` | `#E3EBF0` | `#E3EBF0` / `#38464F` | color | `--seed-card-border` | §26 l.1954 — contorno do cartao: alias de border-subtle. BORDA DECORATIVA DECLARADA, e a spec escreve por que: 1,21:1 no claro e 1,75:1 no escuro (remedidos nesta emissao contra a superficie de pagina de cada tema — o 1,75 e contra surface-subtle #141D23, que e o fundo real da bancada), abaixo do piso 3,00 da SC 1.4.11 DE PROPOSITO, porque a separacao e carregada por espaco + raio + mudanca de superficie + tipografia, e contorno nao e portador unico de informacao (mesmo racional do skeleton §19.2). |
| `semantic.card.radius` | `12px` | — | dimension | `--seed-card-radius` | §26 l.1954 — 'radius lg': alias de radius-lg (que aponta radius-6 = 12px). Invariante de tema. |
| `semantic.divider.color` | `#E3EBF0` | `#E3EBF0` / `#38464F` | color | `--seed-divider-color` | §26-F l.1976 — linha divisoria: alias de border-subtle nos dois temas, decorativo declarado (1,21 claro / 1,75 escuro). O consumidor vivo banco-superficies.html declara exatamente isto. |
| `semantic.divider.strong` | `#C8D6DF` | `#C8D6DF` / `#4D606C` | color | `--seed-divider-strong` | §26-F l.1976 = border-default nos DOIS temas. Divisor full-width enfatico, DECORATIVO DECLARADO: 1,49 sobre surface-page clara / 2,84 sobre surface-page escura. A linha da spec dizia 1,91 e esse numero nao sai de nenhuma superficie do tema. |
| `semantic.list.hover` | `#F2F6F9` | `#F2F6F9` / `#273137` | color | `--seed-list-hover` | §26-F l.2000 — realce de item sob o ponteiro. A spec escreve '(surface-subtle / #273137)': o claro por ALIAS e o escuro por HEX, e o hex #273137 e o surface-overlay do tema escuro, nao o surface-subtle (#141D23) — a assimetria e da spec e foi preservada de proposito, porque e o que os QUATRO consumidores vivos renderizam (banco-cn, banco-dados, banco-navegacao, banco-superficies). Reforco, nunca canal unico: o foco tem anel medido (§1). Medido nesta emissao: texto primary sobre o hover = 12,75:1 claro (confere com o numero da propria spec) e 10,90:1 escuro. |
| `semantic.danger.item` | `#A5272A` | `#A5272A` / `#FFC2BD` | color | `--seed-danger-item` | §27 l.2181 — rotulo do item DESTRUTIVO dentro do painel de menu: vermelho-700 / vermelho-200. Remedido nesta emissao contra a superficie de overlay de cada tema: 7,18:1 e 8,67:1 — os DOIS numeros conferem exatamente com os pares que a propria spec anota como medidos pela contraste-navegacao.py. Consumidores vivos (banco-dados.html, banco-navegacao.html) ja declaram estes hex localmente. |
| `semantic.wait.delay` | `1000ms` | — | duration | `--seed-wait-delay` | §17 R3-c l.1687 — atraso antes de mostrar indicador de espera de REGIAO (regime 3). A spec fixa o numero por escrito ('default 1000ms') e fundamenta no limite de 1s de Nielsen, que pressupoe o clique reconhecido em <=0,1s pelo controle disparador (regime 1). Invariante de tema. A propria linha declara a revisao futura com telemetria real do ERP na Fase 4 — nas palavras dela, 'pendencia declarada, nao decisao aberta', e por isso o token nasce com valor em vez de ficar em lacuna. |
| `semantic.typography-role.titulo-tela` | `{"fontSize":"22px","fontWeight":"800","lineHeight":"1.25","letterSpacing":"-0.3px"}` | — | typography | `—` | v1.14 (retrofit RV1/RV3): H1 da regiao de conteudo. Unico por tela. |
| `semantic.typography-role.titulo-secao` | `{"fontSize":"16px","fontWeight":"700","lineHeight":"1.3","letterSpacing":"-0.1px"}` | — | typography | `—` | v1.14 (retrofit RV1/RV3): Cabecalho de peca, de grupo e de painel. |
| `semantic.typography-role.corpo` | `{"fontSize":"14px","fontWeight":"400","lineHeight":"1.5","letterSpacing":"0px"}` | — | typography | `—` | v1.14 (retrofit RV1/RV3): Texto de LEITURA (paragrafo, estado vazio, nota). lh 1.5 e o piso do SC 1.4.12. |
| `semantic.typography-role.corpo-denso` | `{"fontSize":"14px","fontWeight":"400","lineHeight":"1.3","letterSpacing":"0px"}` | — | typography | `—` | v1.14 (retrofit RV1/RV3): Texto de UI DENSA (celula de tabela, item de lista). lh apertado por decisao, nunca por omissao — o Carbon usa 1.28 no body-compact-01 pelo mesmo motivo. |
| `semantic.typography-role.rotulo` | `{"fontSize":"12px","fontWeight":"600","lineHeight":"1.35","letterSpacing":"-0.15px"}` | — | typography | `—` | v1.14 (retrofit RV1/RV3): Rotulo de controle, chip, contador, coluna. O ls negativo e ajuste optico: texto pequeno em peso alto empasta sem ele (medido no produto de referencia). |
| `semantic.typography-role.micro` | `{"fontSize":"11px","fontWeight":"700","lineHeight":"1.3","letterSpacing":"-0.2px"}` | — | typography | `—` | v1.14 (retrofit RV1/RV3): Microrrotulo em caixa alta: rail, caption, cabecalho de estatistica. |
| `semantic.switch.off-bg` | `#788F9D` | `#788F9D` / `#617683` | color | `--seed-switch-off-bg` | §8.3 l.1292 = cinza-500 claro / cinza-600 escuro. Trilho DESLIGADO. 3,38:1 sobre a pagina e 3,38:1 sobre o thumb no claro; 3,92 e 3,93 no escuro. A spec dizia cinza-300 e dava 1,91 nos dois pares. |
| `semantic.switch.on-bg` | `#098475` | `#098475` / `#66D1C2` | color | `--seed-switch-on-bg` | §8.3 l.1292 = action-primary. Trilho LIGADO. 4,60:1 claro / 10,16:1 escuro. A spec apontava para --seed-action-primary-bg, token FANTASMA da FF-P2/FF-P3, e dizia turquesa-400 no escuro quando o valor e #66D1C2 = turquesa-300. |
| `semantic.switch.thumb` | `#FFFFFF` | `#FFFFFF` / `#E3EBF0` | color | `--seed-switch-thumb` | §8.3 l.1292 — thumb DESLIGADO: branco fixado pela spec / cinza-100. 3,38:1 sobre o trilho off no claro, 3,93:1 no escuro. |
| `semantic.switch.thumb-on` | `#FFFFFF` | `#FFFFFF` / `#00352F` | color | `--seed-switch-thumb-on` | §8.3 l.1292 = text-on-action-primary — thumb LIGADO. 4,60:1 claro / 7,39:1 escuro. E o token que NASCEU da medicao: no escuro, o thumb cinza-100 sobre o trilho ligado dava 2,25. No claro ele coincide com o thumb desligado, e isso e a regra colapsando, nao duplicacao. |
| `semantic.slider.track` | `#788F9D` | `#788F9D` / `#617683` | color | `--seed-slider-track` | = cinza-500 claro / cinza-600 escuro. Trilho NAO preenchido. 3,38:1 / 3,92:1 sobre a pagina. |

## breakpoint (5)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `breakpoint.sm` | `640px` | — | dimension | `—` |  |
| `breakpoint.md` | `768px` | — | dimension | `—` |  |
| `breakpoint.lg` | `1024px` | — | dimension | `—` |  |
| `breakpoint.xl` | `1280px` | — | dimension | `—` |  |
| `breakpoint.2xl` | `1536px` | — | dimension | `—` |  |

## radius (7)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `radius.1` | `2px` | — | dimension | `--seed-radius-1` | v1.14: escala de raio em passo 2 (o 6px era o valor mais usado do acervo e nao existia na escala). |
| `radius.2` | `4px` | — | dimension | `--seed-radius-2` | v1.14: escala de raio em passo 2 (o 6px era o valor mais usado do acervo e nao existia na escala). |
| `radius.3` | `6px` | — | dimension | `--seed-radius-3` | v1.14: escala de raio em passo 2 (o 6px era o valor mais usado do acervo e nao existia na escala). |
| `radius.4` | `8px` | — | dimension | `--seed-radius-4` | v1.14: escala de raio em passo 2 (o 6px era o valor mais usado do acervo e nao existia na escala). |
| `radius.5` | `10px` | — | dimension | `--seed-radius-5` | v1.14: escala de raio em passo 2 (o 6px era o valor mais usado do acervo e nao existia na escala). |
| `radius.6` | `12px` | — | dimension | `--seed-radius-6` | v1.14: escala de raio em passo 2 (o 6px era o valor mais usado do acervo e nao existia na escala). |
| `radius.8` | `16px` | — | dimension | `--seed-radius-8` | v1.14: escala de raio em passo 2 (o 6px era o valor mais usado do acervo e nao existia na escala). |

## spacing-half (2)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `spacing-half.1-5` | `6px` | — | dimension | `—` | v1.14: meio-passo de espaco, medido em 824 (6px) e 417 (10px) ocorrencias fora da escala. |
| `spacing-half.2-5` | `10px` | — | dimension | `—` | v1.14: meio-passo de espaco, medido em 824 (6px) e 417 (10px) ocorrencias fora da escala. |

## control-height (6)

| token (caminho no JSON) | valor | claro / escuro | tipo | variável CSS | descrição |
|---|---|---|---|---|---|
| `control-height.sm` | `32px` | — | dimension | `—` | v1.14: altura de controle. O DS nao tinha token e a auditoria mediu botao de 18px a 608px. |
| `control-height.md` | `44px` | — | dimension | `—` | v1.23 (2026-08-26): RECONCILIADO com --seed-button-height-* e --seed-field-height-*, que a §1.6 e a §2.5 fixam por escrito em 32/44/52. De 2026-08-15 a 2026-08-26 o DS teve TRES reguas de altura com DOIS numeros. O desempate nao foi por gosto: medido, NENHUM artefato do acervo consome --seed-control-* — os tres consumidores sao a spec, a guarda de paridade e o gemeo. A regua generica era a de papel; vence quem tem spec. O preset compacto (28/32/40) nao muda: e escala de densidade para tela de dado com mouse. Era 40px. |
| `control-height.lg` | `52px` | — | dimension | `—` | v1.23 (2026-08-26): RECONCILIADO com --seed-button-height-* e --seed-field-height-*, que a §1.6 e a §2.5 fixam por escrito em 32/44/52. De 2026-08-15 a 2026-08-26 o DS teve TRES reguas de altura com DOIS numeros. O desempate nao foi por gosto: medido, NENHUM artefato do acervo consome --seed-control-* — os tres consumidores sao a spec, a guarda de paridade e o gemeo. A regua generica era a de papel; vence quem tem spec. O preset compacto (28/32/40) nao muda: e escala de densidade para tela de dado com mouse. Era 48px. |
| `control-height.sm-compacto` | `28px` | — | dimension | `—` | v1.14: altura de controle. O DS nao tinha token e a auditoria mediu botao de 18px a 608px. |
| `control-height.md-compacto` | `32px` | — | dimension | `—` | v1.14: altura de controle. O DS nao tinha token e a auditoria mediu botao de 18px a 608px. |
| `control-height.lg-compacto` | `40px` | — | dimension | `—` | v1.14: altura de controle. O DS nao tinha token e a auditoria mediu botao de 18px a 608px. |
