Gerados do seed-tokens.json (formato DTCG) — o mesmo arquivo que produz o CSS, o registry do shadcn e o tokens.md dos agentes. Regra da casa: componente consome só a camada semântica; cores primitivas são repertório. Amostras nos dois temas; o botão copia o nome da variável.
faixas de marca; texto branco apenas 24px+/bold 19px+ (3.22:1)
semantic.surface.brand-subtle
#E8FBF7 / #1A3833
--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
--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 / #005048
--seed-surface-brand-deep
capas e secoes profundas; substitui o hex nao-oficial #0d8f82
semantic.surface.inverse
#242E34 / #F2F6F9
--seed-surface-inverse
semantic.text.primary
#0B3330 / #DDECE8
--seed-text-primary
titulos e texto de alta enfase; substitui o #2a3942 ad-hoc do DS v1
semantic.text.secondary
#2F5A54 / #A3C4BE
--seed-text-secondary
corpo de texto padrao
semantic.text.muted
#40706A / #8FB5AD
--seed-text-muted
metadados, placeholders, captions - nunca corpo
semantic.text.disabled
#90A6B3 / #617683
--seed-text-disabled
semantic.text.brand
#098475 / #66D1C2
--seed-text-brand
texto na cor da marca com AA garantido
semantic.text.brand-strong
#006C62 / #66D1C2
--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 / #242E34
--seed-text-inverse
semantic.text.on-brand
#00352F / #00352F
--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
--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
--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 / #521112
--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 / #00352F
--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 / #66D1C2
--seed-text-link
semantic.border.subtle
#E3EBF0 / #38464F
--seed-border-subtle
semantic.border.default
#C8D6DF / #4D606C
--seed-border-default
semantic.border.strong
#90A6B3 / #788F9D
--seed-border-strong
semantic.border.interactive
#788F9D / #788F9D
--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 / #66D1C2
--seed-border-focus
anel de foco - sempre visivel, 2px + offset
semantic.action.primary
#098475 / #66D1C2
--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 / #9CE4D8
--seed-action-primary-hover
semantic.action.primary-active
#005048 / #CDF3EC
--seed-action-primary-active
PRESSIONADO do botao primario: claro turquesa-800 (escurece 2 stops, §1.5). Escuro: V-HV4.2 = a (MANIFESTO §226, 2026-09-15): era #11B0A0 (turquesa-400) — o primario escuro clareava no hover (turquesa-200) e ESCURECIA no pressionado abaixo da base (turquesa-300): unica familia nao-monotonica (§71.2). Agora turquesa-100: base 300 → hover 200 → active 100. Tinta #00352F mede 11,37 (antes 4,99).
semantic.action.secondary-bg
#E8FBF7 / #1A3833
--seed-action-secondary-bg
semantic.action.secondary-bg-hover
#CDF3EC / #005048
--seed-action-secondary-bg-hover
LC-05 (2026-09-15): SOBREVOO do botao secondary = 1 stop da rampa (turquesa-100); §1.5 'escurece 1 stop'. Tinta turquesa-800 mede 7,87. Sem hex novo. Escuro: LC-05: turquesa-800 — 1 passo a partir do tint escuro #1A3833, na mesma direcao; tinta turquesa-100 mede 7,87.
semantic.action.secondary-bg-active
#9CE4D8 / #006C62
--seed-action-secondary-bg-active
LC-05 (2026-09-15): PRESSIONADO do secondary = 2 stops (turquesa-200); §1.5 'escurece 2 stops'. Tinta turquesa-800 mede 6,47. Substitui o filter:brightness(.96), que a regua da casa nao mede (§71.6). Escuro: LC-05: turquesa-700 — 2 passos; tinta turquesa-100 mede 5,31.
semantic.action.ghost-hover
#F2F6F9 / #1D272D
--seed-action-ghost-hover
semantic.action.ghost-active
#E3EBF0 / #273137
--seed-action-ghost-active
LC-05 (2026-09-15): PRESSIONADO do botao fantasma/outline SOBRE A PAGINA — o par de ghost-hover, um passo alem na mesma direcao. Claro = surface-sunken (igual a neutral-active). NAO se reusou neutral-active porque no escuro ele vale #0B1419 = surface-page: o pressionado ficaria IGUAL ao repouso (medido). Sem hex novo. Escuro: LC-05: surface-overlay — a pagina escura sobe page #0B1419 → hover raised #1D272D → active overlay #273137; ghost-text mede 7,25, text-primary 10,90.
semantic.action.neutral-hover
#F2F6F9 / #141D23
--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 / #0B1419
--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 SIGA, deixa por nao definir active. Sem hex novo: e o valor de surface-sunken nos dois temas.
semantic.action.neutral-on-subtle-hover
#E3EBF0 / #1D272D
--seed-action-neutral-on-subtle-hover
HV-P4 / V-HV4.1 = a (MANIFESTO §226, 2026-09-15): SOBREVOO de controle transparente POSADO SOBRE A CASCA (surface-subtle). Claro = cinza-100 = surface-sunken. Nasce porque action-neutral-hover E a propria casca (#F2F6F9 = #F2F6F9): hover invisivel por construcao em 118 controles no claro e 117 no escuro (censo de superficie). Tintas medidas: text-primary 11,37 · text-secondary 6,42 · text-muted 4,65 · text-brand-strong 5,24. Sem hex novo. Escuro: V-HV4.1 = a: no escuro o par SOBE (a casca #141D23 nao tem degrau abaixo de surface-page): hover = surface-raised. text-primary 12,49 · text-secondary 8,11 · text-muted 6,80 · text-brand-strong 8,31. Por que nao se reusou neutral-hover: ele vale exatamente surface-subtle (#F2F6F9 / #141D23), a propria casca — o token continua certo para controle sobre surface-raised/page (§71.6).
semantic.action.neutral-on-subtle-active
#C8D6DF / #273137
--seed-action-neutral-on-subtle-active
HV-P4 / V-HV4.1 = a: PRESSIONADO sobre a casca = cinza-200, um passo alem na mesma direcao (§71.2). Tintas medidas: text-primary 9,24 · text-secondary 5,22 · text-muted 3,78 (icone, piso 3,0). ATENCAO: text-brand-strong mede 4,26 aqui (abaixo do piso 4,5) — controle com TINTA DE MARCA sobre a casca troca a tinta para text-primary no pressionado (9,24) ou nao consome este par; ver relatorio HV-A do Grupo 3 (2026-09-15). Sem hex novo. Escuro: V-HV4.1 = a: pressionado = surface-overlay, o mesmo sentido de action-ghost-*; text-primary 10,90 · text-secondary 7,08 · text-muted 5,93 · text-brand-strong 7,25.
semantic.action.destructive
#C6393B / #FC6F6A
--seed-action-destructive
semantic.action.destructive-hover
#A5272A / #FF9C95
--seed-action-destructive-hover
semantic.action.destructive-active
#7A1C1E / #FFC2BD
--seed-action-destructive-active
LC-05 (2026-09-15): PRESSIONADO do destrutivo = 2 stops (vermelho-800), o par que o primario ja tinha (§1.5); branco mede 10,44. Sem hex novo. Escuro: LC-05: vermelho-200 — 2 passos clareando, monotonico com o hover (§71.2); tinta #521112 mede 9,47. Vermelho-500 por analogia ao primario escuro foi medido e recusado: 3,38.
semantic.accent.highlight
#FAD61D / #FAD61D
--seed-accent-highlight
acento oficial de marca - grifos, marcadores, detalhes de enfase; sempre com texto/elemento escuro por cima
semantic.accent.highlight-subtle
#FFF6D2 / #3A3410
--seed-accent-highlight-subtle
fundo de grifo suave (marca-texto)
semantic.accent.on-highlight
#242E34 / #242E34
--seed-accent-on-highlight
texto sobre o acento amarelo - sempre escuro, nunca branco (9.70:1)
semantic.feedback.success-bg
#E8FBF7 / #00352F
--seed-feedback-success-bg
semantic.feedback.success-text
#006C62 / #9CE4D8
--seed-feedback-success-text
semantic.feedback.success-border
#66D1C2 / #006C62
--seed-feedback-success-border
semantic.feedback.success-solid
#098475 / #11B0A0
--seed-feedback-success-solid
semantic.feedback.warning-bg
#FFF4E4 / #3D2800
--seed-feedback-warning-bg
semantic.feedback.warning-text
#5B3E00 / #FECA76
--seed-feedback-warning-text
semantic.feedback.warning-border
#F9B11C / #7B5500
--seed-feedback-warning-border
semantic.feedback.warning-solid
#F9B11C / #F9B11C
--seed-feedback-warning-solid
semantic.feedback.danger-bg
#FFF2F1 / #521112
--seed-feedback-danger-bg
semantic.feedback.danger-text
#A5272A / #FFC2BD
--seed-feedback-danger-text
semantic.feedback.danger-border
#FF9C95 / #A5272A
--seed-feedback-danger-border
semantic.feedback.danger-solid
#C6393B / #FC6F6A
--seed-feedback-danger-solid
semantic.feedback.info-bg
#ECF4FC / #003241
--seed-feedback-info-bg
semantic.feedback.info-text
#006783 / #96E0FD
--seed-feedback-info-text
semantic.feedback.info-border
#53C2E9 / #006783
--seed-feedback-info-border
semantic.feedback.info-solid
#0099C1 / #53C2E9
--seed-feedback-info-solid
semantic.chart.cat-1
#00A192 / #66D1C2
--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
--seed-chart-cat-2
semantic.chart.cat-3
#CD518B / #E8A1C2
--seed-chart-cat-3
semantic.chart.cat-4
#0099C1 / #53C2E9
--seed-chart-cat-4
semantic.chart.cat-5
#966AC8 / #BD9CE2
--seed-chart-cat-5
semantic.chart.cat-6
#004C61 / #96E0FD
--seed-chart-cat-6
semantic.chart.positive
#00A192 / #66D1C2
--seed-chart-positive
semantic.chart.negative
#D94545 / #FC6F6A
--seed-chart-negative
semantic.chart.grid
#E3EBF0 / #38464F
--seed-chart-grid
semantic.chart.axis
#788F9D / #90A6B3
--seed-chart-axis
semantic.chart.seq-1
#CDF3EC / #005048
--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 / #006C62
--seed-chart-seq-2
semantic.chart.seq-3
#66D1C2 / #098475
--seed-chart-seq-3
semantic.chart.seq-4
#11B0A0 / #00A192
--seed-chart-seq-4
semantic.chart.seq-5
#098475 / #11B0A0
--seed-chart-seq-5
semantic.chart.seq-6
#005048 / #9CE4D8
--seed-chart-seq-6
semantic.chart.seq-7
#00352F / #CDF3EC
--seed-chart-seq-7
semantic.chart.no-data
#E3EBF0 / #38464F
--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 / #90A6B3
--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 / #141D23
--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 / #90A6B3
--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 / #FF9C95
--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
--seed-chart-div-neg-2
semantic.chart.div-neg-1
#FFC2BD / #7A1C1E
--seed-chart-div-neg-1
semantic.chart.div-zero
#E3EBF0 / #38464F
--seed-chart-div-zero
semantic.chart.div-pos-1
#9CE4D8 / #005048
--seed-chart-div-pos-1
semantic.chart.div-pos-2
#00A192 / #00A192
--seed-chart-div-pos-2
semantic.chart.div-pos-3
#005048 / #66D1C2
--seed-chart-div-pos-3
semantic.chart.cat-1-stroke
#098475 / #66D1C2
--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 / #F9B11C
--seed-chart-cat-2-stroke
semantic.chart.cat-3-stroke
#B23871 / #E8A1C2
--seed-chart-cat-3-stroke
semantic.chart.cat-4-stroke
#0099C1 / #53C2E9
--seed-chart-cat-4-stroke
semantic.chart.cat-5-stroke
#7B42BD / #BD9CE2
--seed-chart-cat-5-stroke
semantic.chart.cat-6-stroke
#004C61 / #96E0FD
--seed-chart-cat-6-stroke
semantic.gauge.track
#C8D6DF / #4D606C
--seed-gauge-track
Trilha de fundo. Decorativa em si; o contraste exigido e do VALOR contra ela.
semantic.gauge.value
#098475 / #66D1C2
--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 / #66D1C2
--seed-gauge-range-ok
= feedback-success-solid; herda as medicoes de gauge.value.
semantic.gauge.range-warning
#986900 / #F9B11C
--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 / #FF9C95
--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%)
--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.rail.pill-bg
#CDF3EC
--seed-rail-pill-bg
Leva 30 (SH-P27 = b, folha de 2026-10-10): fundo da PILULA do item ativo do rail (SH15-b) = turquesa-100, mesmo valor de antes, agora com nome de papel. Invariante de tema. Tinta sobre ele 11,37; fundo x rail 5,31/7,87.
semantic.rail.pill-hover
#9CE4D8
--seed-rail-pill-hover
Leva 30 (SH-P27 = b): sobrevoo da pilula = turquesa-200. Tinta sobre ele 9,35.
semantic.rail.pill-pressed
#66D1C2
--seed-rail-pill-pressed
Leva 30 (SH-P27 = b): pressionado da pilula = turquesa-300. Tinta sobre ele 7,39.
semantic.rail.pill-text
#00352F
--seed-rail-pill-text
Leva 30 (SH-P27 = b): tinta do rotulo/icone sobre a pilula = turquesa-900. O anel de foco duplo do SH15-c acompanha por currentColor.
semantic.toast.bg
#00352F
--seed-toast-bg
Fundo do aviso = turquesa-900, mesmo valor de antes, agora com nome de papel. Invariante de tema.
semantic.toast.text
#FFFFFF
--seed-toast-text
Tinta do aviso = branco. Tinta sobre o fundo 13,55.
semantic.chrome.overlay-hover
rgba(255, 255, 255, 0.12)
--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)
--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.
Tinta declarada da posicao E6 (CP22: verificacao na definicao da paleta, nunca em render).
semantic.z.chrome
60
--seed-z-chrome
topbar, rail e faixas de chrome fixo.
semantic.z.modal
65
--seed-z-modal
modal e gaveta (e a paleta de comandos, que herda o modal: §39).
semantic.z.toast
70
--seed-z-toast
aviso (toast).
semantic.z.popover
75
--seed-z-popover
popover, menu flutuante, balao do rail.
semantic.z.tooltip
80
--seed-z-tooltip
tooltip.
semantic.z.salto
90
--seed-z-salto
o link de salto 'Pular para o conteudo' (SH8): acima do tooltip, para nunca empatar com ele (SH-P32 = a).
semantic.side-panel.width
420px
--seed-side-panel-width
largura de abertura do painel quando a pessoa ainda nao escolheu outra (o valor que o chat §55 e a mensageria MS5 ja usavam sem token). Se 420 deixaria o conteudo abaixo do piso, o painel abre com a largura que ainda cabe sem cobrir (nunca abaixo de width-min).
semantic.side-panel.width-min
320px
--seed-side-panel-width-min
menor largura do painel no arraste e no teclado (Fluent 2 'small' = 320 px, lido em 2026-10-18).
semantic.side-panel.content-min
640px
--seed-side-panel-content-min
PISO do conteudo (conversa, lista): enquanto o painel empurra, o conteudo nunca fica abaixo disto; passado o piso, o painel sobrepoe e o conteudo para de encolher. SH62a = a. Abaixo de content-min o painel ocupa a regiao inteira (tela cheia).
semantic.backdrop
rgba(36, 46, 52, 0.5)
--seed-backdrop
Leva 30 (SH-P30 = a, folha de 2026-10-10): o VEU atras do dialogo (::backdrop), valores do seed-componentes.md §30.2: claro cinza-900 a 50 %, escuro preto a 60 %. Decorativo declarado.
semantic.menu.item-hover
#F2F6F9 / #38464F
--seed-menu-item-hover
Claro: o mesmo de antes (action-neutral-hover). Escuro: cinza-800, CLAREIA sobre o overlay #273137 (1,36:1; o list-hover escuro era o proprio overlay, 1,00:1). Texto primary sobre ele 7,99:1.
semantic.menu.item-pressed
#E3EBF0 / #4D606C
--seed-menu-item-pressed
Pressionado na MESMA direcao do sobrevoo (HV1-e). Claro: action-neutral-active. Escuro: cinza-700 (decisao da sessao, exposta a veto); texto primary 5,38:1.
semantic.marker.now
#098475
--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 / #00352F
--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 / #E3EBF0
--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 / #66D1C2
--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
--seed-field-height-sm
§2.5 — altura sm do controle, fixada pela spec (densidade desktop).
semantic.field.height-md
44px
--seed-field-height-md
§2.5 — 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
--seed-field-height-lg
§2.5 — altura lg do controle, fixada pela spec.
semantic.field.radius
8px
--seed-field-radius
§2.5 — alias de radius-md (que aponta radius-4 = 8px).
semantic.field.gap
8px
--seed-field-gap
§2.5 — alias de sp-2. Rotulo->controle e controle->mensagem.
semantic.field.stack-gap
24px
--seed-field-stack-gap
§2.5 — alias de sp-6. Campo->campo confortavel; o denso (SIGA) usa sp-4 (16px) por regra de layout, nao por token proprio.
semantic.field.bg
#FFFFFF / #1D272D
--seed-field-bg
§2.5 — fundo do controle: surface-page no claro, surface-raised no escuro.
semantic.field.label
#242E34 / #E3EBF0
--seed-field-label
§2.5 — rotulo do campo: cinza-900 (13,86:1) / cinza-100 (14,16:1).
semantic.field.value
#242E34 / #E3EBF0
--seed-field-value
§2.5 — valor digitado: cinza-900 (13,86:1) / cinza-100 (12,61:1 sobre o campo raised).
semantic.field.placeholder
#617683 / #90A6B3
--seed-field-placeholder
§2.5 — placeholder: cinza-600 (4,74:1, AA e distinto do valor) / cinza-400 (6,01:1).
semantic.field.optional-text
#617683 / #90A6B3
--seed-field-optional-text
§2.5 — sufixo '(opcional)' do rotulo: cinza-600 (4,74:1) / cinza-400.
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: 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 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 / #90A6B3
--seed-field-border-hover
§2.5 — borda no hover: cinza-700 / cinza-400 (6,01:1).
semantic.field.error-text
#A5272A / #FF9C95
--seed-field-error-text
§2.5 — mensagem de erro: vermelho-700 (7,18:1) / vermelho-300 (8,49:1).
semantic.field.border-error
#A5272A / #FF9C95
--seed-field-border-error
§2.5 — borda no estado error: a MESMA cor do texto de erro (--seed-field-error-text), vermelho-700 (7,18:1 sobre a superficie do campo; 5,95:1 sobre surface-sunken) / vermelho-300 (7,56:1 sobre a superficie do campo, surface-raised). v1.40 (CT-P28, folha 13 P4 = a, 2026-10-28): ate a v1.39 era vermelho-600 (5,19:1) / vermelho-400 (5,52:1), acima do piso de 3:1 da WCAG 1.4.11 mas mais fraco que a borda dos outros campos, que ja usavam a cor do texto de erro desde a folha 9 (M7 = a).
semantic.field.success-text
#006C62 / #66D1C2
--seed-field-success-text
§2.5 — mensagem de success: turquesa-700 (6,32:1) / turquesa-300 (9,32:1).
semantic.field.border-success
#098475 / #66D1C2
--seed-field-border-success
§2.5 — borda no estado success: turquesa-600 (4,60:1) / turquesa-300 (8,31:1).
semantic.field.readonly-bg
#E3EBF0 / #0B1419
--seed-field-readonly-bg
§2.5 — 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 / #F9B11C
--seed-field-warning-text
§2.5 (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 / #F9B11C
--seed-field-border-warning
§2.5 (emenda v0.7) — borda no estado warning: dourado-600 (4,82:1) / dourado-300 (8,21:1).
semantic.button.radius
8px
--seed-button-radius
§1.6 — alias de radius-md (que aponta radius-4 = 8px). Invariante de tema.
semantic.button.font-weight
600
--seed-button-font-weight
§1.6 — alias de fw-semibold. Invariante de tema.
semantic.button.height-sm
32px
--seed-button-height-sm
§1.6 — 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
--seed-button-height-md
§1.6 — 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
--seed-button-height-lg
§1.6 — altura lg, fixada pela spec. ⚠ MESMA COLISAO da height-md: 52px (botao) = 52px (field) CONTRA --seed-control-lg 48px.
semantic.button.gap
8px
--seed-button-gap
§1.6 — alias de sp-2. Espaco entre icone e rotulo dentro do botao. Invariante de tema.
semantic.button.secondary-border
#098475 / #66D1C2
--seed-button-secondary-border
§1.6 — 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 / #CDF3EC
--seed-button-secondary-text
§1.6 — 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 / #90A6B3
--seed-button-outline-border
§1.6 — 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 / #66D1C2
--seed-button-ghost-text
§1.6 — 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.
§1.6 — 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 / #1D272D
--seed-card-bg
§26 — fundo do cartao: alias de surface-raised nos dois temas.
semantic.card.border
#E3EBF0 / #38464F
--seed-card-border
§26 — 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
--seed-card-radius
§26 — 'radius lg': alias de radius-lg (que aponta radius-6 = 12px). Invariante de tema.
semantic.divider.color
#E3EBF0 / #38464F
--seed-divider-color
§27.2 — 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 / #4D606C
--seed-divider-strong
§27.2 = 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 / #273137
--seed-list-hover
§28.2 — 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 / #FFC2BD
--seed-danger-item
§35.2 — 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
--seed-wait-delay
§18 R3-c — 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 SIGA 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.
v1.14 (retrofit RV1/RV3): H1 da regiao de conteudo. Unico por tela. v1.27 (SH-P9, 2026-09-15): fontWeight 800 -> 700 — a casa nao carrega face 800 e o navegador nao sintetiza a partir da 700; o 800 sempre rendeu 700 (pixel-identico). Marca 4.1/4.3: 800/900 sao display de marketing.
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.
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).
v1.14 (retrofit RV1/RV3): Microrrotulo em caixa alta: rail, caption, cabecalho de estatistica.
semantic.switch.off-bg
#788F9D / #617683
--seed-switch-off-bg
§8.3 = 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 / #66D1C2
--seed-switch-on-bg
§8.3 = 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 / #E3EBF0
--seed-switch-thumb
§8.3 — 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 / #00352F
--seed-switch-thumb-on
§8.3 = 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 / #617683
--seed-slider-track
= cinza-500 claro / cinza-600 escuro. Trilho NAO preenchido. 3,38:1 / 3,92:1 sobre a pagina.
semantic.mat.glass-alpha
80%
--seed-mat-glass-alpha
V-2 dele (2026-09-12, MANIFESTO §204.4): opacidade da superficie de VIDRO — a tinta da superficie (surface-raised) misturada nesta proporcao sobre o que esta atras. 80% no claro e 72% no escuro. Piso da pesquisa (Apple, Fluent, NN/g): >= 70% sobre fundo que nao se controla. Consumido pelo derivado --seed-mat-glass (so no gemeo CSS). Unidade: porcentagem CSS (color-mix), por isso $type dimension — o DTCG nao tem tipo para porcentagem.
semantic.mat.glass-blur
18px
--seed-mat-glass-blur
V-2 dele: raio do desfoque do fundo atras do vidro (backdrop-filter: blur). Invariante de tema.
semantic.mat.glass-saturate
1.45
--seed-mat-glass-saturate
Receita da pesquisa (Fluent: fundo + desfoque + tinta + luz): saturacao aplicada ao que atravessa o vidro, para a luz do fundo chegar com cor viva. Adimensional; invariante de tema. Consumido pelo derivado --seed-mat-glass-filter.
semantic.mat.glass-border
#FFFFFF9E / #FFFFFF21
--seed-mat-glass-border
A linha de 1px que separa o vidro do fundo: branco a 62% no claro (9E) e a 13% no escuro (21). Em prefers-contrast: more vira --seed-border-strong (bloco de fallback no gemeo CSS).
semantic.mat.glass-specular
#FFFFFFD9 / #FFFFFF38
--seed-mat-glass-specular
A linha de LUZ na aresta superior do vidro (inset 0 1px 0): branco a 85% no claro (D9) e a 22% no escuro (38). E o mesmo recurso que o hero do §48 ja usava como "metalizado" (PN21), agora com nome.
Sombra em CAMADAS do vidro em repouso: especular em cima, aresta escura embaixo, contato curto, ambiente longa e negativa. Tintada no turquesa-900 (#00352F) no claro — a familia da marca, como as sombras de elevacao sao tintadas no cinza-900 — e em preto no escuro, como --seed-shadow-raised ja faz. Valor em sintaxe CSS, como rail.background: a forma estruturada do DTCG nao expressa inset nem quatro camadas com legibilidade.
O FUNDO COM LUZ (V-3 dele: "fundo com luz"): vidro so existe se ha algo atras para atravessar. Quatro manchas de luz na familia da marca (turquesa-400/300/500 em alfa baixo via color-mix, mais branco) sobre a rampa surface-subtle -> surface-sunken no claro e surface-page no escuro. NAO e gradiente de COR (CP20 proibe fora do chrome): e LUZ em alfa baixo, a classe do "veu" que o §48 ja usa. Derivado de token em todas as paradas — o estudo usava #E9F1F4/#DDE8EE, que nao existem na paleta, e por isso NAO entraram (§14.1: valor que nao esta no canonico nao se cria). Em prefers-contrast: more o canvas vira none (bloco de fallback no gemeo). v1.25 (F10.4, 2026-09-12): a luz do tema ESCURO cai de turquesa-400 40% / turquesa-500 26% para 26% / 18% — medido pela regua de contraste rasterizado (RC) na primeira aplicacao real: com 40% o micro-rotulo text-secondary do primeiro KPI do painel, sob vidro a 72%, media 4,41 no ponto mais quente da luz (piso 4,5); em quatro intensidades medidas (40/26 4,41 · 34/22 4,47 · 30/20 4,52 · 26/18 4,58) ficou a que passa com margem. O alpha do vidro (V-2 dele) nao mudou.
semantic.mat.metal
1
--seed-mat-metal
INTENSIDADE do acabamento metalico (0 a 1): multiplica o alfa de todas as camadas de luz e sombra do metal (metal-sheen, metal-specular, metal-curve, metal-action, metal-edge). Nasce em 1. ⚠ O 20% que ele deixou no controle do gate NAO e este valor: era reacao ao moire do escovado de 1px (MA-P5, consertado no estudo) — ele escreveu "acredito que testes e medicoes vc vai achar o que e melhor para cada caso", que e delegacao da calibracao. A calibracao POR PECA e da F10.4, com o render na mesa, e pode sobrescrever este token no escopo do componente. v1.25 (errata medida na F10.4): sobrescrever este token no ESCOPO de um componente NAO calibra nada — o var() dentro do valor de uma custom property e resolvido onde ela e declarada (o :root), nao onde e consumida. A calibracao por peca reemite no escopo os tokens que multiplicam por ele (material_bloco.calibracao_metal(), texto lido do gemeo CSS).
O reflexo VERTICAL do metal polido, para compor SOBRE --seed-rail-background: claro em cima, neutro no meio, escuro embaixo. Regra de contraste do metal (F10.2): o gradiente so vai do token para o lado ESCURO onde ha texto — aqui a camada clara fica no topo, e a regua rasterizada (F10.3) mede o pior pixel atras de cada rotulo do rail. v1.26 (F10.5, 2026-09-13): a luz do TOPO cai de 30% para 8% de branco e some a 18% da altura (antes 30% no topo, 6% a 18%). Motivo medido pela regua RC ao aplicar a camada nas sete telas seguintes: o shell tem o item ativo na primeira posicao do rail (a pilula clara cobria a faixa mais clara da luz) e passou por acidente de posicao; nas outras telas o primeiro rotulo BRANCO media 3,25 a 4,27 (piso 4,5). Com 8% no topo: 16 de 16 medicoes passam, pior 4,69. E a regra de contraste do metal (MA2) aplicada de fato: luz so onde nao ha texto. --seed-mat-metal segue em 1.
A faixa especular DIAGONAL — o reflexo de uma janela numa placa polida. Substitui o "escovado" de 1px da v1 do estudo, que virava moire ao escalar (achado dele no gate, MA-P5). Textura de periodo fixo em pixel nao sobrevive a escala; reflexo continuo sobrevive.
O metal da ACAO PRIMARIA (botao primario, avatar): background-image sobre a cor do token de acao — token no topo, mais escuro embaixo, NUNCA mais claro. Motivo medido: a tinta branca sobre action-primary ja mede 4,60 no claro, que e o piso; clarear qualquer extremo reprovaria (CP20: a tinta passa nos dois extremos).
As ARESTAS do rail de metal: luz em cima e a esquerda, sombra a direita e embaixo, mais a sombra ambiente tintada no turquesa-900. Invariante de tema, como o proprio rail (SH15/CP20).
O GRAO fino do material: feTurbulence (SVG em data URL, 160px, alfa 5%) — a receita do acrilico da Microsoft tem ruido, e e o grao, nao o traco, que da textura ao metal depois que o escovado saiu (MA-P5). Grao aleatorio sobrevive a escala. Sem $type: o DTCG nao tem tipo para imagem; o valor e uma url() CSS. Em prefers-contrast: more vira none.
semantic.mat.sheen-duration
700ms
--seed-mat-sheen-duration
Duracao do reflexo que DESLIZA no sobrevoo de cartao de vidro e do hero (V-3 dele: "micro-movimento"). Mais lenta que --seed-dur-expressive-slow (400ms) de proposito: e reflexo, nao transicao de estado. Vai a 0ms em prefers-reduced-motion (bloco de fallback no gemeo).
semantic.mat.breath-duration
18s
--seed-mat-breath-duration
Periodo da luz ambiente que "respira" no fundo (translacao de 2% e escala 1,06, ida e volta). Vai a 0s em prefers-reduced-motion. Movimento com funcao ambiente, desligavel — a pesquisa manda todo estado de sistema ser respeitado.
semantic.mat.glass-thick-delta
10%
--seed-mat-glass-thick-delta
Folha 11 (2026-10-18), MA2 = "a" (verbatim: "sim, 92 % e véu 35 %"), proposta P2 do estudo MA-P8 (Apple HIG Materials: "Thicker materials, which are more opaque, can provide better contrast for text"): quanto o vidro e MAIS ESPESSO no topo da peca, onde mora o titulo. Somado ao glass-alpha no derivado --seed-mat-glass-thick (so no gemeo CSS), com teto 100%: 90% no claro e 82% no escuro no topo, voltando ao glass-alpha a 45% da altura. O V-2 dele (80% / 72%) continua sendo o MINIMO. Invariante de tema; nos fallbacks o glass-alpha vai a 100% e o teto segura.
semantic.mat.glass-alpha-midia
82%
--seed-mat-glass-alpha-midia
Folha 11 (2026-10-18), MA2 = "a" (verbatim: "sim, 92 % e véu 35 %"), proposta P5 do estudo MA-P8: o PISO de opacidade do vidro que assenta SOBRE IMAGEM (peca com data-mat-sobre="midia", §93 MA13). 92% no escuro, calibrado pela regua RC (86/88/90/92% x veu 35/45%; 92/35 e a de menor custo visual com pior texto >= 4,6, medido 4,61 com a P2). 82% no claro: decisão da sessão, exposta a veto, 2026-10-18 (o estudo media o claro sem a Montserrat embutida; com a fonte real o link do cartao sobre imagem dava 4,48 com o claro em 80%; medido na cobaia do DS: 81% -> 4,53, 82% -> 4,66, 84% -> 4,80). Consumido por max() na receita do material_bloco.py, para o fallback de 100% continuar vencendo.
semantic.mat.media-dim
0%
--seed-mat-media-dim
Folha 11 (2026-10-18), MA2 = "a" (verbatim: "sim, 92 % e véu 35 %"), proposta P5 do estudo MA-P8: o VEU preto (--seed-preto) sobre a IMAGEM que passa sob vidro (elemento com data-mat-midia, §93 MA13). 35% no escuro — o numero da Apple (HIG Materials: "consider adding a dark dimming layer of 35% opacity"); 0% no claro. O veu e do CONTEUDO, nao do vidro.
token (caminho no JSON)
valor (claro / escuro)
variável CSS
descrição
color.turquesa.50
#E8FBF7
--seed-turquesa-50
color.turquesa.100
#CDF3EC
--seed-turquesa-100
color.turquesa.200
#9CE4D8
--seed-turquesa-200
color.turquesa.300
#66D1C2
--seed-turquesa-300
color.turquesa.400
#11B0A0
--seed-turquesa-400
ANCORA CANONICA #11B0A0 - cor principal da marca (Pantone 3275C)
color.turquesa.500
#00A192
--seed-turquesa-500
color.turquesa.600
#098475
--seed-turquesa-600
ANCORA CANONICA #098475 - verde institucional (Pantone 327C); stop de acao acessivel: 4.60:1 com branco
color.turquesa.700
#006C62
--seed-turquesa-700
color.turquesa.800
#005048
--seed-turquesa-800
color.turquesa.900
#00352F
--seed-turquesa-900
color.amarelo.50
#FFF6D2
--seed-amarelo-50
color.amarelo.100
#FDEA9E
--seed-amarelo-100
color.amarelo.200
#FAD61D
--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
--seed-amarelo-300
color.amarelo.400
#BDA100
--seed-amarelo-400
color.amarelo.500
#A28A00
--seed-amarelo-500
color.amarelo.600
#877200
--seed-amarelo-600
color.amarelo.700
#6D5C00
--seed-amarelo-700
color.amarelo.800
#504300
--seed-amarelo-800
color.amarelo.900
#352C00
--seed-amarelo-900
color.dourado.50
#FFF4E4
--seed-dourado-50
color.dourado.100
#FFE6C0
--seed-dourado-100
color.dourado.200
#FECA76
--seed-dourado-200
color.dourado.300
#F9B11C
--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
--seed-dourado-400
color.dourado.500
#B67F00
--seed-dourado-500
color.dourado.600
#986900
--seed-dourado-600
color.dourado.700
#7B5500
--seed-dourado-700
color.dourado.800
#5B3E00
--seed-dourado-800
color.dourado.900
#3D2800
--seed-dourado-900
color.azul.50
#ECF4FC
--seed-azul-50
ANCORA CANONICA #ECF4FC - antigo 'azul claro' da paleta (Pantone 656C), absorvido como stop 50
color.azul.100
#CDF1FF
--seed-azul-100
color.azul.200
#96E0FD
--seed-azul-200
color.azul.300
#53C2E9
--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
--seed-azul-400
color.azul.500
#0099C1
--seed-azul-500
color.azul.600
#007FA1
--seed-azul-600
color.azul.700
#006783
--seed-azul-700
color.azul.800
#004C61
--seed-azul-800
color.azul.900
#003241
--seed-azul-900
color.cinza.50
#F2F6F9
--seed-cinza-50
color.cinza.100
#E3EBF0
--seed-cinza-100
color.cinza.200
#C8D6DF
--seed-cinza-200
color.cinza.300
#ACBECA
--seed-cinza-300
color.cinza.400
#90A6B3
--seed-cinza-400
color.cinza.500
#788F9D
--seed-cinza-500
color.cinza.600
#617683
--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
--seed-cinza-700
color.cinza.800
#38464F
--seed-cinza-800
color.cinza.900
#242E34
--seed-cinza-900
color.vermelho.50
#FFF2F1
--seed-vermelho-50
color.vermelho.100
#FFE2DF
--seed-vermelho-100
color.vermelho.200
#FFC2BD
--seed-vermelho-200
color.vermelho.300
#FF9C95
--seed-vermelho-300
color.vermelho.400
#FC6F6A
--seed-vermelho-400
color.vermelho.500
#D94545
--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
--seed-vermelho-600
color.vermelho.700
#A5272A
--seed-vermelho-700
color.vermelho.800
#7A1C1E
--seed-vermelho-800
color.vermelho.900
#521112
--seed-vermelho-900
color.branco
#FFFFFF
--seed-branco
ANCORA CANONICA - segunda cor primaria da marca
color.preto
#000000
--seed-preto
Preto puro da impressao P&B (mono-positivo, marca-seed.md §5.1) - nasce na v1.35 (MR-C = B); nao e cor de interface
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"]
—
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
—
font.weight.regular
400
—
font.weight.medium
500
—
mono E Montserrat: o Montserrat 500 e servido (subset seed, 17 moldes, registry @seed/fontes) e usado por cinco telas — medido em 2026-09-15 (FT-P2/TK-P2). 'uso exclusivo da mono' foi verdade ate a F9.2; marca-seed.md §4.1 lista 500 como peso oficial da escala desde entao.
font.weight.semibold
600
—
font.weight.bold
700
—
font.size.display
64px
—
font.size.h1
42px
—
font.size.h2
32px
—
font.size.h3
24px
—
font.size.h4
18px
—
font.size.body-lg
17px
—
font.size.body
14px
—
font.size.small
12px
—
font.size.caption
11px
—
font.size.field-touch
16px
—
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
—
font.lineHeight.heading
1.2
—
font.lineHeight.body
1.57
—
font.lineHeight.body-relaxed
1.65
—
texto corrido longo (blog, relatorio) - regra Montserrat Light
font.lineHeight.caption
1.27
—
font.letterSpacing.display
-2px
—
font.letterSpacing.h1
-0.5px
—
font.letterSpacing.normal
0px
—
0 px = o espaçamento padrão; sem variável no CSS de propósito
font.letterSpacing.caption
2px
—
labels micro UPPERCASE
font.size-fluid.display
clamp(2.5rem, 1.9rem + 2.6vw, 4rem)
—
40px -> 64px
font.size-fluid.h1
clamp(1.875rem, 1.58rem + 1.3vw, 2.625rem)
—
30px -> 42px
font.size-fluid.h2
clamp(1.5rem, 1.3rem + 0.87vw, 2rem)
—
24px -> 32px
font.size-fluid.h3
clamp(1.25rem, 1.15rem + 0.43vw, 1.5rem)
—
20px -> 24px
token (caminho no JSON)
valor (claro / escuro)
variável CSS
descrição
dimension.space.0
0px
—
dimension.space.1
4px
—
dimension.space.2
8px
—
dimension.space.3
12px
—
dimension.space.4
16px
—
dimension.space.5
20px
—
dimension.space.6
24px
—
dimension.space.8
32px
—
dimension.space.10
40px
—
dimension.space.12
48px
—
dimension.space.16
64px
—
dimension.space.20
80px
—
dimension.space.24
96px
—
dimension.radius.sm
4px
--seed-radius-sm
chips, badges, inputs compactos. Apelido de radius-2 desde a v1.14 (no CSS: var(--seed-radius-2)); o valor aqui e o literal do degrau, e a paridade-tokens.py (G7, TK-P7) cobra que os dois andem juntos.
dimension.radius.md
8px
--seed-radius-md
botoes, inputs, padrao de controle. Apelido de radius-4 desde a v1.14 (no CSS: var(--seed-radius-4)); o valor aqui e o literal do degrau, e a paridade-tokens.py (G7, TK-P7) cobra que os dois andem juntos.
dimension.radius.lg
12px
--seed-radius-lg
cards. Apelido de radius-6 desde a v1.14 (no CSS: var(--seed-radius-6)); o valor aqui e o literal do degrau, e a paridade-tokens.py (G7, TK-P7) cobra que os dois andem juntos.
dimension.radius.xl
16px
--seed-radius-xl
modais, paineis. Apelido de radius-8 desde a v1.14 (no CSS: var(--seed-radius-8)); o valor aqui e o literal do degrau, e a paridade-tokens.py (G7, TK-P7) cobra que os dois andem juntos.
dimension.radius.full
9999px
--seed-radius-full
pills, avatares
dimension.safe-area.top
env(safe-area-inset-top)
—
dimension.safe-area.bottom
env(safe-area-inset-bottom)
—
dimension.safe-area.left
env(safe-area-inset-left)
—
dimension.safe-area.right
env(safe-area-inset-right)
—
token (caminho no JSON)
valor (claro / escuro)
variável CSS
descrição
radius.1
2px
--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
--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
--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
--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
--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
--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
--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).
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.
token (caminho no JSON)
valor (claro / escuro)
variável CSS
descrição
control-height.sm
32px
—
v1.14: altura de controle. O DS nao tinha token e a auditoria mediu botao de 18px a 608px.
control-height.md
44px
—
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
—
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
—
v1.14: altura de controle. O DS nao tinha token e a auditoria mediu botao de 18px a 608px.
control-height.md-compacto
32px
—
v1.14: altura de controle. O DS nao tinha token e a auditoria mediu botao de 18px a 608px.
control-height.lg-compacto
40px
—
v1.14: altura de controle. O DS nao tinha token e a auditoria mediu botao de 18px a 608px.
token (caminho no JSON)
valor (claro / escuro)
variável CSS
descrição
spacing-half.1-5
6px
—
v1.14: meio-passo de espaco, medido em 824 (6px) e 417 (10px) ocorrencias fora da escala.
spacing-half.2-5
10px
—
v1.14: meio-passo de espaco, medido em 824 (6px) e 417 (10px) ocorrencias fora da escala.