Ir ao conteúdo
SEED engenharia

Tokens · v1.40

362 tokens, uma fonte

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.

Ver a paleta em rampas — uma linha por família, com âncoras e hex → Armadilhas de tema e token — o que quebra no escuro e no atalho de CSS →

token (caminho no JSON)valor (claro / escuro)variável CSSdescrição
semantic.surface.page#FFFFFF / #0B1419--seed-surface-page fundo da pagina
semantic.surface.subtle#F2F6F9 / #141D23--seed-surface-subtle faixas alternadas, fundos de secao
semantic.surface.raised#FFFFFF / #1D272D--seed-surface-raised cards; parear com shadow.raised
semantic.surface.sunken#E3EBF0 / #0B1419--seed-surface-sunken areas rebaixadas (wells, code blocks)
semantic.surface.overlay#FFFFFF / #273137--seed-surface-overlay popovers, menus; parear com shadow.overlay
semantic.surface.brand#11B0A0 / #11B0A0--seed-surface-brand 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.backgroundlinear-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-hoverrgba(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-activergba(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.
semantic.entity.1#11B0A0--seed-entity-1 E1 turquesa-400 vivo, tinta escura (cinza-900). Admissao CP22 medida: 5.11
semantic.entity.1-ink#242E34--seed-entity-1-ink Tinta declarada da posicao E1 (CP22: verificacao na definicao da paleta, nunca em render).
semantic.entity.2#D49400--seed-entity-2 E2 dourado-400 vivo, tinta escura. Medido: 5.30
semantic.entity.2-ink#242E34--seed-entity-2-ink Tinta declarada da posicao E2 (CP22: verificacao na definicao da paleta, nunca em render).
semantic.entity.3#01B3E0--seed-entity-3 E3 azul-400 vivo, tinta escura. Medido: 5.63
semantic.entity.3-ink#242E34--seed-entity-3-ink Tinta declarada da posicao E3 (CP22: verificacao na definicao da paleta, nunca em render).
semantic.entity.4#005048--seed-entity-4 E4 turquesa-800 profundo, tinta branca. Medido: 9.37
semantic.entity.4-ink#FFFFFF--seed-entity-4-ink Tinta declarada da posicao E4 (CP22: verificacao na definicao da paleta, nunca em render).
semantic.entity.5#006783--seed-entity-5 E5 azul-700 profundo, tinta branca. Medido: 6.43
semantic.entity.5-ink#FFFFFF--seed-entity-5-ink Tinta declarada da posicao E5 (CP22: verificacao na definicao da paleta, nunca em render).
semantic.entity.6#7B5500--seed-entity-6 E6 dourado-700 profundo, tinta branca. Medido: 6.68
semantic.entity.6-ink#FFFFFF--seed-entity-6-ink Tinta declarada da posicao E6 (CP22: verificacao na definicao da paleta, nunca em render).
semantic.z.chrome60--seed-z-chrome topbar, rail e faixas de chrome fixo.
semantic.z.modal65--seed-z-modal modal e gaveta (e a paleta de comandos, que herda o modal: §39).
semantic.z.toast70--seed-z-toast aviso (toast).
semantic.z.popover75--seed-z-popover popover, menu flutuante, balao do rail.
semantic.z.tooltip80--seed-z-tooltip tooltip.
semantic.z.salto90--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.width420px--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-min320px--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-min640px--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.backdroprgba(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-sm32px--seed-field-height-sm §2.5 — altura sm do controle, fixada pela spec (densidade desktop).
semantic.field.height-md44px--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-lg52px--seed-field-height-lg §2.5 — altura lg do controle, fixada pela spec.
semantic.field.radius8px--seed-field-radius §2.5 — alias de radius-md (que aponta radius-4 = 8px).
semantic.field.gap8px--seed-field-gap §2.5 — alias de sp-2. Rotulo->controle e controle->mensagem.
semantic.field.stack-gap24px--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.
semantic.field.help-text#4D606C / #ACBECA--seed-field-help-text §2.5 — texto auxiliar: cinza-700 (6,55:1, direcao GOV.UK 7:1) / cinza-300 (8,92:1).
semantic.field.border#788F9D / #788F9D--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: 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.radius8px--seed-button-radius §1.6 — alias de radius-md (que aponta radius-4 = 8px). Invariante de tema.
semantic.button.font-weight600--seed-button-font-weight §1.6 — alias de fw-semibold. Invariante de tema.
semantic.button.height-sm32px--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-md44px--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-lg52px--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.gap8px--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.
semantic.button.toggle-on-bg#005048 / #66D1C2--seed-button-toggle-on-bg §1.6 — 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 / #00352F--seed-button-toggle-on-fg §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.radius12px--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.delay1000ms--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.
semantic.typography-role.titulo-tela{"fontSize": "22px", "fontWeight": "700", "lineHeight": "1.25", "letterSpacing": "-0.3px"}— 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.
semantic.typography-role.titulo-secao{"fontSize": "16px", "fontWeight": "700", "lineHeight": "1.3", "letterSpacing": "-0.1px"}— 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"}— 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"}— 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"}— 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"}— 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-alpha80%--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-blur18px--seed-mat-glass-blur V-2 dele: raio do desfoque do fundo atras do vidro (backdrop-filter: blur). Invariante de tema.
semantic.mat.glass-saturate1.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.
semantic.mat.glass-shadowinset 0 1px 0 #FFFFFFD9, inset 0 -1px 0 rgba(0,53,47,0.05), 0 1px 2px rgba(0,53,47,0.06), 0 14px 36px -16px rgba(0,53,47,0.28)--seed-mat-glass-shadow 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.
semantic.mat.glass-shadow-hoverinset 0 1px 0 #FFFFFFD9, inset 0 -1px 0 rgba(0,53,47,0.05), 0 2px 4px rgba(0,53,47,0.08), 0 24px 48px -18px rgba(0,53,47,0.34)--seed-mat-glass-shadow-hover A mesma sombra no SOBREVOO: o cartao de vidro sobe 2px e a ambiente alonga. Par de --seed-mat-glass-shadow.
semantic.mat.canvasradial-gradient(52% 48% at 10% 0%, color-mix(in srgb, var(--seed-turquesa-400) 38%, transparent) 0%, transparent 64%), radial-gradient(40% 46% at 96% 10%, color-mix(in srgb, var(--seed-turquesa-300) 30%, transparent) 0%, transparent 62%), radial-gradient(36% 40% at 62% 58%, color-mix(in srgb, var(--seed-turquesa-500) 12%, transparent) 0%, transparent 70%), radial-gradient(70% 60% at 50% 112%, rgba(255,255,255,0.70) 0%, transparent 70%), linear-gradient(180deg, var(--seed-surface-subtle) 0%, var(--seed-surface-sunken) 100%)--seed-mat-canvas 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.metal1--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).
semantic.mat.metal-sheenlinear-gradient(180deg, rgba(255,255,255,calc(0.08 * var(--seed-mat-metal))) 0%, rgba(0,0,0,0) 18%, rgba(0,0,0,0) 55%, rgba(0,0,0,calc(0.34 * var(--seed-mat-metal))) 100%)--seed-mat-metal-sheen 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.
semantic.mat.metal-specularlinear-gradient(162deg, transparent 28%, rgba(255,255,255,calc(0.13 * var(--seed-mat-metal))) 46%, rgba(255,255,255,calc(0.04 * var(--seed-mat-metal))) 52%, transparent 66%)--seed-mat-metal-specular 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.
semantic.mat.metal-curvelinear-gradient(90deg, rgba(255,255,255,calc(0.08 * var(--seed-mat-metal))) 0%, transparent 30%, transparent 70%, rgba(0,0,0,calc(0.20 * var(--seed-mat-metal))) 100%)--seed-mat-metal-curve Escurecimento LATERAL suave: a placa de metal e curva. Compoe com metal-sheen e metal-specular sobre o rail.
semantic.mat.metal-actionlinear-gradient(180deg, rgba(255,255,255,0) 0%, rgba(0,0,0,calc(0.06 * var(--seed-mat-metal))) 55%, rgba(0,0,0,calc(0.18 * var(--seed-mat-metal))) 100%)--seed-mat-metal-action 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).
semantic.mat.metal-edgeinset 0 1px 0 rgba(255,255,255,calc(0.55 * var(--seed-mat-metal))), inset 1px 0 0 rgba(255,255,255,calc(0.22 * var(--seed-mat-metal))), inset -1px 0 0 rgba(0,0,0,calc(0.35 * var(--seed-mat-metal))), inset 0 -1px 0 rgba(0,0,0,calc(0.30 * var(--seed-mat-metal))), 0 14px 36px -16px rgba(0,53,47,0.55)--seed-mat-metal-edge 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).
semantic.mat.metal-action-edgeinset 0 1px 0 rgba(255,255,255,calc(0.40 * var(--seed-mat-metal))), inset 0 -1px 0 rgba(0,0,0,calc(0.22 * var(--seed-mat-metal))), 0 1px 2px rgba(0,53,47,0.18), 0 10px 20px -10px rgba(0,53,47,0.55)--seed-mat-metal-action-edge As arestas do botao de metal (par de metal-action): luz de 1px por dentro em cima, sombra por dentro embaixo, contato e ambiente. Invariante de tema.
semantic.mat.grainurl("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .05 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")--seed-mat-grain 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-duration700ms--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-duration18s--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-delta10%--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-midia82%--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-dim0%--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.
Esc