/* ============================================================
   SEED engenharia - Design Tokens v1.23 - 2026-08-26
   v1.23: a CAMADA 3 FECHA (SG1 vai a ZERO FAIL) e a COLISAO DE ALTURA
   DE CONTROLE, declarada na v1.14 e nunca resolvida, e RECONCILIADA.
   Sete tokens novos: --seed-ease-out (base, movimento), --seed-divider-
   strong, --seed-slider-track e os QUATRO do switch. O setimo FAIL, o
   --seed-input-w-md, NAO foi emitido: o nome so aparecia num exemplo de
   HTML da spec, como var(--seed-input-w-md,320px), apontando para um
   token que nunca existiu. Exemplo de codigo e codigo que alguem copia,
   e um var() que nao resolve e o MESMO defeito do switch. O exemplo
   passou a escrever 320px direto e o nome saiu do canonico.
   ⚠ ESTA LEVA NAO E ADICAO PURA — e a primeira que nao e. Mudam:
     · --seed-control-md   40px -> 44px
     · --seed-control-lg   48px -> 52px
   e a mudanca e segura por MEDIDA, nao por opiniao: nenhum artefato do
   acervo consome esses dois tokens (os unicos consumidores sao a spec,
   a guarda de paridade e este arquivo). A regua passa a ser UMA:
   32 / 44 / 52, que e o que a §1.6 e a §2.5 ja fixavam por escrito.
   ⚠ E DOIS VALORES DA SPEC FORAM CORRIGIDOS POR MEDICAO, nao copiados:
   switch-off-bg era cinza-300 (1,91:1, reprovando a propria clausula de
   3:1 que a spec escreveu) e slider-track idem. Os dois passam a
   cinza-500 (3,38:1). O canonico foi emendado ANTES, com o numero.
   v1.22: SEGUNDA leva da CAMADA 3 (componente) — 19 tokens de BOTAO (12),
   CARTAO (3), DIVISOR (1), LISTA (1), ITEM DESTRUTIVO (1) e ESPERA (1).
   Mesma classe de defeito da v1.21: o canon NOMEAVA e o gemeo NAO DEFINIA.
   O que mudou no metodo: a classe passou a ter INSTRUMENTO — a guarda
   `06-validacao/guardas/guarda-spec-gemeo.py` (contrato SG1) varre os
   01-canonicos/*.md e reprova todo custom property que o canon nomeia e o
   gemeo nao define. Placar dela antes desta edicao: 121 PASS · 29 FAIL ·
   3 [isento]. Dos 29, 19 sao emitidos aqui e 10 NAO — a lista dos dez, com
   o motivo de cada um, esta na entrada v1.22 do §9 do seed-tokens.md, e a
   licao que ela carrega e que nem todo nome citado e um pedido: TRES sao
   contraexemplos (o canon cita o nome para registrar um defeito ja
   consertado, um descarte de desenho ou um exemplo de diagrama) e QUATRO
   sao lacunas reais da spec (nome sem origem de valor declarada).
   ADICAO PURA: nenhum valor anterior muda. Bloco novo no fim do :root, do
   [data-theme="dark"] e do espelho prefers-color-scheme. Gate novo: G6 da
   paridade-tokens.py, irmao do G5.
   v1.21: nasce a PRIMEIRA CAMADA 3 (componente) dos gemeos — os 21 tokens
   `--seed-field-*` do form-field, especificados e medidos na §2.5 do
   seed-componentes.md (v0.6/v0.7, validados pelo Rafael em 2026-08-02) e
   ate hoje AUSENTES daqui: a spec citava `seed-field-` 116 vezes e os
   gemeos tinham ZERO — nenhum artefato podia consumir a camada (pendencia
   AD-P6; o ERP consome exatamente esta camada). ADICAO PURA: nenhum valor
   anterior muda. Cada valor e RESOLUCAO do alias que a §2.5 declara
   (ex.: field-label = cinza-900 #242E34), no dialeto dos gemeos, que
   gravam o hex resolvido na camada semantica/componente; o alias de origem
   esta no comentario de cada linha e a fidelidade alias->valor virou gate
   G5 da paridade-tokens.py (se o token-base mudar e o field nao seguir,
   a guarda reprova). Bloco novo no fim do :root, do [data-theme="dark"]
   e do espelho prefers-color-scheme.
   v1.20: nasce `--seed-font-expressive` (TERCIARIA, Caveat) por decisao do
   Rafael em 2026-08-20 — o sistema tem TRES familias, nao duas. Escopo
   ESTREITO e declarado: peca de MARKETING alegorica/festiva. Supersede a
   linha do seed-tokens.md que dizia 'sistema final: 2 familias' e a linha da
   tabela de decisoes que tinha '3a familia' como alternativa DESCARTADA.
   ERRATA DECLARADA: este cabecalho dizia v1.17 depois de a v1.18 ter nascido
   (os dois `action-neutral-*` do contrato HV1, 2026-08-19). O conteudo estava
   em v1.18; so o cabecalho ficou atrasado. Corrigido aqui junto com a v1.19,
   que acrescenta `text-brand-strong`.
   Gerado a partir de seed-tokens.json (fonte DTCG). NAO editar
   valores aqui manualmente: editar o JSON e regenerar, ou tratar
   o par JSON+CSS como unidade na proxima revisao.
   Camadas: primitivos (--seed-<cor>-<stop>) -> semanticos
   (--seed-<papel>-<variacao>). Componentes consomem SEMANTICOS.
   Dark mode: [data-theme="dark"] ou prefers-color-scheme.

   ------------------------------------------------------------
   NOVO NA v1.4 — este arquivo estava DUAS versoes atras do
   seed-tokens.md, nao uma. Ele declarava v1.1 e nao continha
   NENHUM token do pacote mobile v1.2. A pendencia 7.0 do .md
   descrevia o debito como sendo so da v1.3; a medicao de
   2026-08-09 mostrou que era v1.2 + v1.3.
     v1.2 (M1-M3)  tipografia fluida clamp nos 4 topos ·
                   --seed-fs-field-touch (16px, gatilho
                   pointer:coarse) · safe-area · breakpoints
                   (documentados no fim; NAO viram custom
                   property porque media query nao le custom
                   property)
     v1.3 (sec 3c) chart-seq-1..7 · chart-no-data ·
                   chart-div-neg-3..pos-3 · chart-cat-N-stroke · categorica ESTENDIDA v1.5 (magenta/violeta exclusivos de dado, nunca UI) ·
                   gauge-*
   Guarda que impede a recorrencia: validacao/paridade-tokens.py
   ============================================================ */

:root {
  /* ---------- PRIMITIVOS: rampas tonais (OKLCH, ancoradas nos
     hex canonicos da marca - ver seed-tokens.md) ---------- */
  --seed-turquesa-50: #E8FBF7;
  --seed-turquesa-100: #CDF3EC;
  --seed-turquesa-200: #9CE4D8;
  --seed-turquesa-300: #66D1C2;
  --seed-turquesa-400: #11B0A0;
  --seed-turquesa-500: #00A192;
  --seed-turquesa-600: #098475;
  --seed-turquesa-700: #006C62;
  --seed-turquesa-800: #005048;
  --seed-turquesa-900: #00352F;

  --seed-amarelo-50: #FFF6D2;
  --seed-amarelo-100: #FDEA9E;
  --seed-amarelo-200: #FAD61D;
  --seed-amarelo-300: #DABA00;
  --seed-amarelo-400: #BDA100;
  --seed-amarelo-500: #A28A00;
  --seed-amarelo-600: #877200;
  --seed-amarelo-700: #6D5C00;
  --seed-amarelo-800: #504300;
  --seed-amarelo-900: #352C00;

  --seed-dourado-50: #FFF4E4;
  --seed-dourado-100: #FFE6C0;
  --seed-dourado-200: #FECA76;
  --seed-dourado-300: #F9B11C;
  --seed-dourado-400: #D49400;
  --seed-dourado-500: #B67F00;
  --seed-dourado-600: #986900;
  --seed-dourado-700: #7B5500;
  --seed-dourado-800: #5B3E00;
  --seed-dourado-900: #3D2800;

  --seed-azul-50: #ECF4FC;
  --seed-azul-100: #CDF1FF;
  --seed-azul-200: #96E0FD;
  --seed-azul-300: #53C2E9;
  --seed-azul-400: #01B3E0;
  --seed-azul-500: #0099C1;
  --seed-azul-600: #007FA1;
  --seed-azul-700: #006783;
  --seed-azul-800: #004C61;
  --seed-azul-900: #003241;

  --seed-cinza-50: #F2F6F9;
  --seed-cinza-100: #E3EBF0;
  --seed-cinza-200: #C8D6DF;
  --seed-cinza-300: #ACBECA;
  --seed-cinza-400: #90A6B3;
  --seed-cinza-500: #788F9D;
  --seed-cinza-600: #617683;
  --seed-cinza-700: #4D606C;
  --seed-cinza-800: #38464F;
  --seed-cinza-900: #242E34;

  --seed-vermelho-50: #FFF2F1;
  --seed-vermelho-100: #FFE2DF;
  --seed-vermelho-200: #FFC2BD;
  --seed-vermelho-300: #FF9C95;
  --seed-vermelho-400: #FC6F6A;
  --seed-vermelho-500: #D94545;
  --seed-vermelho-600: #C6393B;
  --seed-vermelho-700: #A5272A;
  --seed-vermelho-800: #7A1C1E;
  --seed-vermelho-900: #521112;

  --seed-branco: #FFFFFF;

  --seed-dark-page: #0B1419;
  --seed-dark-default: #141D23;
  --seed-dark-elevated: #1D272D;
  --seed-dark-overlay: #273137;

  /* ---------- TIPOGRAFIA ---------- */
  --seed-font-sans: 'Montserrat', -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;
  --seed-font-mono: 'JetBrains Mono', 'SF Mono', Consolas, 'Courier New', monospace;
  /* TERCIARIA — decisao do Rafael em 2026-08-20. Papel EXCLUSIVO: peca de
     MARKETING que precise de algo alegorico, fora do normal, festivo.
     NUNCA em interface, NUNCA em documento tecnico, e NUNCA como assinatura
     padrao de peca de rotina — foi justamente o uso onipresente que aposentou
     a Indie Flower em 2026-07-30. Nome por PROPOSITO e nao por tamanho:
     `display` seria lido como 'fonte de titulo grande', e a escala de display
     desta casa e Montserrat. A familia Caveat vem do marca-seed.md v5.0 §4.3
     por INFERENCIA declarada — confirmar (MR-P3). */
  --seed-font-expressive: 'Caveat', 'Segoe Script', cursive;
  --seed-fw-light: 300;
  --seed-fw-regular: 400;
  --seed-fw-medium: 500; /* exclusivo da mono */
  --seed-fw-semibold: 600;
  --seed-fw-bold: 700;
  --seed-fs-display: 64px;  --seed-lh-display: 1.125; --seed-ls-display: -2px;
  --seed-fs-h1: 42px;       --seed-lh-heading: 1.2;   --seed-ls-h1: -0.5px;
  --seed-fs-h2: 32px;
  --seed-fs-h3: 24px;
  --seed-fs-h4: 18px;
  --seed-fs-body-lg: 17px;  --seed-lh-body: 1.57;
  --seed-fs-body: 14px;     --seed-lh-body-relaxed: 1.65;
  --seed-fs-small: 12px;
  --seed-fs-caption: 11px;  --seed-lh-caption: 1.27;  --seed-ls-caption: 2px;

  /* ---------- TIPOGRAFIA FLUIDA v1.2 (M2) — os 4 topos respondem ao
     viewport. Interpolacao calibrada entre 360px (Android BR mais comum)
     e 1280px. REGRA WCAG 1.4.4 EMBUTIDA: a formula sempre combina termo
     rem dominante + termo vw; clamp com vw puro nao responde ao zoom do
     navegador e reprova em redimensionamento de texto 200%. De h4 para
     baixo a escala e invariante. ---------- */
  --seed-fs-display-fluid: clamp(2.5rem, 1.9rem + 2.6vw, 4rem);
  --seed-fs-h1-fluid: clamp(1.875rem, 1.58rem + 1.3vw, 2.625rem);
  --seed-fs-h2-fluid: clamp(1.5rem, 1.3rem + 0.87vw, 2rem);
  --seed-fs-h3-fluid: clamp(1.25rem, 1.15rem + 0.43vw, 1.5rem);
  /* fonte MINIMA de campo em superficie de toque (v1.2 / M3) — consumida
     pela media query pointer:coarse no fim deste arquivo. Resolve o zoom
     automatico do iOS na causa; maximum-scale=1 foi descartado por violar
     WCAG e punir baixa visao. */
  --seed-fs-field-touch: 16px;

  /* ---------- SPACING (base 4px) ---------- */
  --seed-sp-0: 0; --seed-sp-1: 4px; --seed-sp-2: 8px; --seed-sp-3: 12px;
  --seed-sp-4: 16px; --seed-sp-5: 20px; --seed-sp-6: 24px; --seed-sp-8: 32px;
  --seed-sp-10: 40px; --seed-sp-12: 48px; --seed-sp-16: 64px;
  --seed-sp-20: 80px; --seed-sp-24: 96px;

  /* ---------- RADIUS ---------- */
  --seed-radius-full: 9999px;

  /* ======================================================================
     v1.14 (2026-08-15, retrofit RV1-RV10) — PAPEIS TIPOGRAFICOS.
     Ate aqui o gemeo declarava TAMANHOS soltos (--seed-fs-*) e os artefatos
     escreviam `.82rem` direto no CSS. Como o `rem` mede contra a RAIZ (16px)
     e nao contra o `body` (14px), o que chegava a tela era 13.12px: nenhum
     tamanho de texto do sistema era um numero redondo, e nenhum era o token.
     Medido pela `auditoria-c31.mjs` em 21 artefatos: 1.482 nos de texto fora
     da escala, em 25 tamanhos distintos, e 1.356 nos (46%) com line-height
     `normal` — isto e, decidido pelo BROWSER (~1.2), abaixo do piso de
     leitura do SC 1.4.12 (1.5).
     A correcao nao e tokenizar so o tamanho: um papel tipografico amarra
     size + weight + line-height + letter-spacing NUM CONJUNTO, como o
     `body-compact-01` do Carbon. Tamanho sem line-height nao e decisao
     completa — e o buraco por onde o browser decide.
     Seis papeis, porque o censo do produto de referencia mostrou SEIS
     combinacoes cobrindo 95 de 158 nos: escala larga existe para caso
     extremo, nao para o dia a dia.
     --seed-fs-* CONTINUA valendo (site, e-mail, impresso, tipografia fluida);
     o que nasce aqui e a camada de PAPEL para interface. */
  /* H1 da regiao de conteudo. Unico por tela. */
  --seed-txt-titulo-tela-size: 22px;   --seed-txt-titulo-tela-weight: 800;
  --seed-txt-titulo-tela-lh: 1.25;   --seed-txt-titulo-tela-ls: -0.3px;
  /* Cabecalho de peca, de grupo e de painel. */
  --seed-txt-titulo-secao-size: 16px;   --seed-txt-titulo-secao-weight: 700;
  --seed-txt-titulo-secao-lh: 1.3;   --seed-txt-titulo-secao-ls: -0.1px;
  /* Texto de LEITURA (paragrafo, estado vazio, nota). lh 1.5 e o piso do SC 1.4.12. */
  --seed-txt-corpo-size: 14px;   --seed-txt-corpo-weight: 400;
  --seed-txt-corpo-lh: 1.5;   --seed-txt-corpo-ls: 0px;
  /* 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. */
  --seed-txt-corpo-denso-size: 14px;   --seed-txt-corpo-denso-weight: 400;
  --seed-txt-corpo-denso-lh: 1.3;   --seed-txt-corpo-denso-ls: 0px;
  /* 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). */
  --seed-txt-rotulo-size: 12px;   --seed-txt-rotulo-weight: 600;
  --seed-txt-rotulo-lh: 1.35;   --seed-txt-rotulo-ls: -0.15px;
  /* Microrrotulo em caixa alta: rail, caption, cabecalho de estatistica. */
  --seed-txt-micro-size: 11px;   --seed-txt-micro-weight: 700;
  --seed-txt-micro-lh: 1.3;   --seed-txt-micro-ls: -0.2px;

  /* v1.14 — ESCALA DE RAIO COMPLETA, em passo 2. Motivo medido: o raio mais
     usado do acervo inteiro e 6px (238 ocorrencias) e ele NAO existia na
     escala (4/8/12/16). Isso nao era indisciplina do artefato: era escala
     insuficiente. Elemento aninhado precisa de `raio_externo - padding` para
     nao ficar com canto errado — e por isso que o produto de referencia tem
     meios-passos (3,5,7,9). Os nomes antigos viram ALIAS dos numericos:
     consumo existente nao quebra. */
  --seed-radius-1: 2px;
  --seed-radius-2: 4px;
  --seed-radius-3: 6px;
  --seed-radius-4: 8px;
  --seed-radius-5: 10px;
  --seed-radius-6: 12px;
  --seed-radius-8: 16px;
  --seed-radius-sm: var(--seed-radius-2);   /* alias v1.14 (era 4px literal) */
  --seed-radius-md: var(--seed-radius-4);   /* alias v1.14 (era 8px literal) */
  --seed-radius-lg: var(--seed-radius-6);   /* alias v1.14 (era 12px literal) */
  --seed-radius-xl: var(--seed-radius-8);   /* alias v1.14 (era 16px literal) */

  /* v1.14 — MEIOS-PASSOS DE ESPACO. Medido: 6px aparece 824 vezes e 10px 417
     vezes fora da escala de passo 4. Sao os dois vaos de dentro de controle
     (icone-rotulo, chip, celula densa), onde 4px cola e 8px afrouxa. */
  --seed-sp-1-5: 6px;
  --seed-sp-2-5: 10px;

  /* v1.14 — ALTURA DE CONTROLE. O DS NAO TINHA nenhum token para isto (zero
     ocorrencias), e a auditoria mediu botao variando de 18px a 608px. O
     preset COMPACTO existe para tela de dado, e e ligado por container query
     nomeada (CP27), nunca por pagina.
     ⭐ RECONCILIADA NA v1.23 (2026-08-26), por decisao dele: "reconcilie para
     todos seguirem o padrao". De 2026-08-15 a 2026-08-26 o DS teve TRES
     reguas de altura com DOIS numeros — 32/40/48 aqui (generica, herdada do
     Fluent) contra 32/44/52 em --seed-button-height-* e --seed-field-height-*
     (fixados por escrito na §1.6 e na §2.5). O `sm` ja coincidia; md e lg
     nao. ⚠ E 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 este arquivo. Ou seja, a regua GENERICA era a de papel, e as
     duas especificas eram as que o canon defendia por escrito ("md = 44px
     (nao 40px)"). Vence quem tem spec.
     ⚠ E o argumento certo para o 44 NAO e o SC 2.5.8 — esse pede 24x24 (AA),
     que 40 tambem cumpre. O 44 e o FUNDAMENTO PROPRIO do DS, mais generoso
     que a norma, e e por ser decisao NOSSA que ele precisava ser reconciliado
     em vez de deduzido de fora.
     ⚠ O preset compacto NAO muda: 28/32/40 e escala de densidade para tela de
     dado com mouse, e continua abaixo do alvo de toque de proposito. */
  --seed-control-sm: 32px;
  --seed-control-md: 44px;   /* v1.23: era 40px — reconciliado com button/field-height-md */
  --seed-control-lg: 52px;   /* v1.23: era 48px — reconciliado com button/field-height-lg */
  --seed-control-sm-compacto: 28px;
  --seed-control-md-compacto: 32px;
  --seed-control-lg-compacto: 40px;

  /* ---------- SAFE-AREA v1.2 (M3) — insets do dispositivo (notch, home
     indicator). Barras fixas (header, tab bar, CTA fixo de rodape) SOMAM
     o safe-area ao proprio padding. Requer viewport-fit=cover no meta
     viewport. ---------- */
  --seed-safe-top: env(safe-area-inset-top);
  --seed-safe-bottom: env(safe-area-inset-bottom);
  --seed-safe-left: env(safe-area-inset-left);
  --seed-safe-right: env(safe-area-inset-right);

  /* ---------- MOTION (produtivo x expressivo) ---------- */
  --seed-dur-productive-fast: 100ms;
  --seed-dur-productive: 150ms;
  --seed-dur-expressive: 300ms;
  --seed-dur-expressive-slow: 400ms;
  --seed-ease-productive: cubic-bezier(0.2, 0, 0.38, 0.9);
  --seed-ease-productive-exit: cubic-bezier(0.2, 0, 1, 0.9);
  --seed-ease-expressive: cubic-bezier(0.4, 0.14, 0.3, 1);
  --seed-ease-expressive-exit: cubic-bezier(0.4, 0.14, 1, 1);
  /* v1.23 — a curva que a spec usava QUATRO vezes (thumb do switch
     120ms, toast 160ms, progresso 200ms, modal/drawer) e NUNCA fixava.
     O acervo tinha dois valores: .2,.8,.4,1 em 3 artefatos e .2,.7,.3,1
     em 2. Medido em 21 instantes de um movimento de 120ms, 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 (3 artefatos
     contra 2), o que tambem faz o conserto ser de 2 arquivos e nao 3.
     ⭐ E o mesmo teste respondeu se este token deve EXISTIR: contra o
     ease-productive a diferenca e 36,8% do percurso e 24,9 ms, ou seja
     83x MAIOR que a diferenca entre as duas candidatas. Sao curvas
     diferentes de verdade, entao o token merece existir. */
  --seed-ease-out: cubic-bezier(.2,.8,.4,1);

  /* ---------- ELEVACAO: sombras (parear com surface-raised/overlay) ---------- */
  --seed-shadow-raised: 0 1px 2px rgba(36,46,52,0.10), 0 1px 1px rgba(36,46,52,0.06);
  --seed-shadow-overlay: 0 8px 24px rgba(36,46,52,0.14), 0 2px 6px rgba(36,46,52,0.08);
  --seed-shadow-modal: 0 16px 48px rgba(36,46,52,0.22);
  --seed-focus-ring: 0 0 0 2px var(--seed-surface-page), 0 0 0 4px var(--seed-border-focus);

  /* ---------- SEMANTICOS - MODO CLARO ---------- */
  --seed-surface-page: #FFFFFF;
  --seed-surface-subtle: #F2F6F9;
  --seed-surface-raised: #FFFFFF;
  --seed-surface-sunken: #E3EBF0;
  --seed-surface-overlay: #FFFFFF;
  /* SUPERFICIE DE MARCA QUE CARREGA TEXTO — nasce em 2026-08-18, decisao do
     Rafael sobre a MR-P1 (opcao B), depois de ver as quatro opcoes lado a lado.

     A decisao dele foi MANTER O TEXTO BRANCO. Medido, isso so e possivel se a
     superficie descer um degrau na rampa:

       fundo                     branco   escura (#00352F)
       turquesa-400 #11B0A0       2,71 X      4,99 OK
       turquesa-600 #098475       4,60 OK     2,95 X     <- escolhida
       turquesa-700 #006C62       6,32 OK     2,14 X

     E a FRONTEIRA do controle contra a pagina (SC 1.4.11, piso 3,00), medida
     nos dois temas: turquesa-600 da 4,60 no claro, 4,05 sobre a pagina escura e
     3,31 sobre a superficie elevada escura. Passa nos dois.

     Por que ela NAO inverte com o tema: superficie de marca nao inverte, e o
     par branco/turquesa-600 passa nos dois temas. Uma cor, uma tinta, os dois
     temas — que e tambem o que o produto de referencia faz.

     MEDIDO NO PRODUTO DE REFERENCIA, sessao logada, somente leitura,
     2026-08-18: o botao primario de la usa fundo #12a594 com texto branco a
     12px peso 500, e mede 3,07 contra piso 4,50 — ou seja, ELE REPROVA. A
     escolha desta casa vai um degrau alem da referencia, de proposito.

     A marca CHAPADA (surface-brand, #11B0A0) continua sendo a ancora visual e
     fica reservada para area SEM TEXTO FUNCIONAL: faixa, selo, grafismo. Se
     algum dia precisar de texto sobre ela, a tinta e a escura (text-on-brand,
     4,99) — e essa e a regra de excecao, nao a regra geral.

     ALTERNATIVAS DESCARTADAS: (a) manter texto branco sobre a marca chapada —
     e a opcao A, mede 2,71 e reprova ate o piso do texto grande, e seria
     excecao declarada a WCAG AA num sistema que declara cumprir AA; (b)
     turquesa-700 — passa com folga (6,32) e foi recusada por ficar visualmente
     mais escura que o pedido; (c) manter a tinta escura sobre a marca chapada
     (4,99), que era o estado aplicado e foi recusado no gate visual. */
  --seed-surface-brand-strong: #098475;
  --seed-surface-brand: #11B0A0;
  --seed-surface-brand-deep: #006C62;
  /* Superficie de marca SUTIL — nasce em 2026-08-17 pelo defeito BT-P6.
     A tela-chat.html pintava o balao da mensagem PROPRIA com a PRIMITIVA da
     rampa turquesa no degrau 50, porque NAO EXISTIA semantico para "superficie
     de marca sutil". Primitiva nao inverte com o tema; o texto semantico
     inverte. No tema escuro o par media 1,14 contra o piso 3,00 — mensagem
     branca sobre branca. LOGO O DEFEITO ERA DESTA CAMADA, NAO DO ARTEFATO: o
     artefato pediu o que nao havia e alcancou a primitiva por ser a unica coisa
     disponivel. O valor escuro 1A3833 nao e valor novo — e o que esta camada ja
     escolheu para superficie de marca que assenta na pagina, no semantico
     action-secondary-bg. Medido contra o texto primario: 12,79 no claro e 10,40
     no escuro, piso de texto 4,50. Era o UNICO consumo daquela primitiva no
     acervo inteiro, medido por comando em 29 artefatos.
     ATENCAO DE INSTRUMENTO: este comentario NAO escreve nome de token na forma
     "--nome:" de proposito. O tokens_bloco.py le o gemeo por expressao regular
     sobre o arquivo BRUTO, e comentario e arquivo bruto: na primeira versao
     deste comentario o nome do token de texto primario foi citado AQUI na
     forma com dois-pontos, e o regex engoliu
     tudo ate o proximo ponto-e-virgula, incluindo o token declarado LOGO
     ABAIXO — que passou a ser INEXISTENTE para o gerador. Mesma familia do
     defeito da sentinela em comentario de artefato de e-mail. */
  --seed-surface-brand-subtle: #E8FBF7;
  --seed-surface-inverse: #242E34;

  --seed-text-primary: #0B3330;
  --seed-text-secondary: #2F5A54;
  --seed-text-muted: #40706A;
  --seed-text-disabled: #90A6B3;
  --seed-text-brand: #098475;
  /* HV1-c / HV-P5 (2026-08-20, v1.19): TINTA DE MARCA QUE SOBREVIVE A SUPERFICIE
     DE INTERACAO. Nasce de norma violada, medida: `--seed-text-brand` mede 4,60
     sobre a pagina branca — 0,10 acima do piso 4,5 da SC 1.4.3 — e cai abaixo do
     piso no instante em que a superficie deixa de ser branco puro: 4,23 sobre
     `surface-subtle`/`action-neutral-hover` (#F2F6F9) e 3,81 sobre
     `action-neutral-active`/`surface-sunken` (#E3EBF0).
     MEDIDO, e este numero fecha a decisao: para #098475 alcancar 4,5 o fundo
     precisa de luminancia >= 0,978 — o cinza neutro mais escuro que serve e
     #FDFDFD. NAO EXISTE superficie de interacao possivel para aquela tinta, logo
     escurecer a TINTA no estado nao e preferencia: e a unica saida que nao
     desliga o estado.
     NENHUM HEX NOVO: no claro e o valor de `surface-brand-deep` e de
     `action-primary-hover`; no 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 de aparencia).
     PRECEDENTE: o Carbon (IBM) tem exatamente este par — `$link-primary` Blue 60
     e `$link-primary-hover` Blue 70, mais `$link-secondary` Blue 70, descrito
     como "secondary link color for lower contrast backgrounds".
     ALTERNATIVA DESCARTADA, com numero: reusar `action-primary-hover` como tinta
     PASSA (5,24 a 12,85 nos dois temas) e foi recusada por ACOPLAMENTO DE
     PROPOSITO — e token de FUNDO de botao. */
  --seed-text-brand-strong: #006C62;
  --seed-text-inverse: #FFFFFF;
  /* TINTA SOBRE FUNDO DE MARCA — reescrita em 2026-08-17 pelas decisoes MR-P1
     (do Rafael) e MR-P2 (defeito medido nesta mesma edicao). Antes desta
     edicao UM UNICO token de tinta servia TRES fundos de marca com
     necessidades OPOSTAS. O proprio gemeo de JSON documentava esse token como
     "texto sobre action.primary" — o fundo para o qual ele foi feito — e ele
     estava sendo consumido tambem sobre a marca chapada e sobre a marca
     profunda. Medido, em razao de contraste:

       fundo                          branco   turquesa-900 (#00352F)
       marca chapada    #11B0A0        2,71 X      4,99 OK
       marca profunda claro  #006C62   6,32 OK     2,14 X
       marca profunda escuro #005048   9,37 OK     1,45 X
       botao primario claro  #098475   4,60 OK     2,95 X
       botao primario escuro #66D1C2   1,83 X      7,39 OK

     Nenhum valor unico satisfaz as tres colunas. O resultado foram DOIS
     defeitos simetricos, um em cada tema, da MESMA causa:
       · MR-P1 — branco sobre a marca chapada mede 2,71 no CLARO e reprova ate
         o piso 3,00 do texto grande. Medido por pixel em 9 artefatos.
       · MR-P2 — tinta escura sobre a marca profunda mede 1,45 no ESCURO.
         Medido por pixel em 3 textos do tela-tabela (contador de botao e
         pagina corrente do rodape).
     LACUNA DE TOKEN, a mesma familia do BT-P6: o artefato consumiu o que havia.

     Agora sao TRES tintas, uma por fundo, e o nome diz o fundo:
       · text-on-brand ......... sobre a marca CHAPADA. Escura nos dois temas
                                 (4,99), porque a marca chapada NAO inverte.
       · text-on-brand-deep .... sobre a marca PROFUNDA. Branca nos dois temas
                                 (6,32 no claro, 9,37 no escuro).
       · text-on-action-primary  sobre o BOTAO primario. Inverte com o tema
                                 (branca no claro 4,60, escura no escuro 7,39)
                                 — sao exatamente os valores que a tinta unica
                                 tinha, entao o botao primario NAO muda de
                                 aparencia com esta edicao.

     ALTERNATIVAS DESCARTADAS: (a) trocar so o valor claro da tinta unica —
     consertaria a MR-P1 e ABRIRIA defeito no botao primario claro, que cairia
     de 4,60 para 2,95; (b) parar de usar a marca chapada como fundo de texto
     e mandar tudo para a marca profunda — muda a identidade visual, porque o
     turquesa medio E a cor da marca em heroi e selo, e contraria a decisao do
     Rafael, que manteve a marca chapada e trocou a tinta; (c) calcular a tinta
     no consumidor — nao existe calculo condicional em custom property, e
     empurrar a escolha para o consumidor foi o que produziu a lacuna. */
  --seed-text-on-brand: #00352F;
  --seed-text-on-brand-deep: #FFFFFF;
  --seed-text-on-action-primary: #FFFFFF;
  --seed-text-on-brand-strong: #FFFFFF;
  /* TINTA SOBRE O BOTAO DESTRUTIVO — nasce em 2026-08-18 pelo defeito AD-P1.
     Medido: o destrutivo CLAREIA no tema escuro (vermelho-600 #C6393B no claro
     vira vermelho-400 #FC6F6A no escuro, como toda superficie de acao desta
     casa), e a tinta continuava branca — 2,76 contra piso 4,50, medido por
     pixel em dois artefatos. MESMA forma da MR-P1: faltava o token de tinta
     daquele fundo.

       fundo                          branco   vermelho-900 (#521112)
       destructive claro   #C6393B     5,19 OK     2,80 X
       destructive hover claro #A5272A 7,18 OK     2,02 X
       destructive escuro  #FC6F6A     2,76 X      5,26 OK
       destructive hover escuro #FF9C95 2,01 X     7,21 OK

     A tinta INVERTE com o tema, exatamente como a do botao primario — e é a
     mesma forma que o Material Design 3 usa no papel on-error (branco no
     claro, tom escuro do proprio vermelho no escuro).
     ALTERNATIVA DESCARTADA, e ela é a do IBM Carbon: NAO clarear o destrutivo
     no escuro, mantendo o vermelho escuro nos dois temas para que o branco
     continue valendo. Recusada porque contraria a regra que esta casa ja
     aplica em TODA superficie de acao (o primario clareia de #098475 para
     #66D1C2 e a tinta escurece), e trocar o valor do destrutivo no escuro
     mudaria a aparencia de toda superficie de perigo do acervo — decisao
     maior que a de trocar a tinta.
     ALTERNATIVA DESCARTADA 2: cinza-900 (#242E34) mede 5,03 e turquesa-900
     mede 4,92 sobre o destrutivo escuro — os dois passam, e os dois foram
     recusados porque a tinta sai do DEGRAU MAIS ESCURO DA PROPRIA RAMPA em
     todos os outros pares desta camada. Vermelho-900 tambem mede mais: 5,26. */
  --seed-text-on-action-destructive: #FFFFFF;
  --seed-text-link: #098475;

  --seed-border-subtle: #E3EBF0;
  --seed-border-default: #C8D6DF;
  --seed-border-strong: #90A6B3;
  --seed-border-focus: #00A192;
  /* v1.12 (fecha SH-P1/PN-P5): fronteira de COMPONENTE INTERATIVO (SC
     1.4.11, piso 3:1) — nenhum outro semantico de borda passava no claro
     (default 1.49, strong 2.53). O valor e o cinza-500 que o shell ja
     exercia como emprestimo declarado, agora promovido a semantico:
     medido contra as seis superficies 3.38/3.38/3.11/4.50/5.51/5.05,
     todos >=3. NAO e invariante de tema: o slot dark existe declarado
     (mesmo valor hoje, por medicao — coincidencia medida, nao lei). */
  --seed-border-interactive: #788F9D;
  /* v1.13 (F7.2): realce da LINHA SELECIONADA. O realce precisa virar por
     tema — um primitivo fixo mede 1,57 no escuro. Estes tres nomes ja
     eram consumidos pela bancada banco-dados.html com definicao LOCAL,
     ausente deste gemeo: o token existia sem dono. Adicao pura. */
  --seed-row-selected-bg: #E8FBF7;
  --seed-row-selected-text: #242E34;
  --seed-row-selected-border: #098475;

  --seed-action-primary: #098475;
  --seed-action-primary-hover: #006C62;
  --seed-action-primary-active: #005048;
  --seed-action-secondary-bg: #E8FBF7;
  --seed-action-secondary-text: #006C62;
  --seed-action-ghost-hover: #F2F6F9;
  /* HV1 (2026-08-19, v1.18): estado de CONTROLE NEUTRO — sobrevoo e pressionado.
     Nascem porque a guarda `validacao/guarda-resposta-ponteiro.mjs` mediu, nos 51
     arquivos, 619 controles ATIVOS sem NENHUMA resposta ao ponteiro e 1.350 com o
     pressionado indistinguivel do sobrevoo, em 1.410 medidos. Nao ha valor NOVO
     aqui: os hex sao os da escala de superficie que o acervo ja pratica
     (`surface-subtle` e `surface-sunken`). O que nasce e o PROPOSITO com nome —
     a lei da casa e "componente consome semantico de proposito", e usar
     `surface-*` para dizer ESTADO e o dialeto local que a AC5 catalogou.
     Por que NAO se reusou `action-ghost-hover`: medido, no tema escuro ele vale
     #1D272D, que e exatamente `surface-raised` — logo um controle neutro POSADO
     sobre superficie elevada (a barra superior do shell) teria hover INVISIVEL no
     escuro. O token nao esta errado para o proposito dele (botao fantasma sobre a
     PAGINA); esta errado para este outro proposito. */
  --seed-action-neutral-hover: #F2F6F9;
  --seed-action-neutral-active: #E3EBF0;
  --seed-action-destructive: #C6393B;
  --seed-action-destructive-hover: #A5272A;

  --seed-accent-highlight: #FAD61D;
  --seed-accent-highlight-subtle: #FFF6D2;
  --seed-accent-on-highlight: #242E34;

  --seed-feedback-success-bg: #E8FBF7;
  --seed-feedback-success-text: #006C62;
  --seed-feedback-success-border: #66D1C2;
  --seed-feedback-success-solid: #098475;
  --seed-feedback-warning-bg: #FFF4E4;
  --seed-feedback-warning-text: #5B3E00;
  --seed-feedback-warning-border: #F9B11C;
  --seed-feedback-warning-solid: #F9B11C;
  --seed-feedback-danger-bg: #FFF2F1;
  --seed-feedback-danger-text: #A5272A;
  --seed-feedback-danger-border: #FF9C95;
  --seed-feedback-danger-solid: #C6393B;
  --seed-feedback-info-bg: #ECF4FC;
  --seed-feedback-info-text: #006783;
  --seed-feedback-info-border: #53C2E9;
  --seed-feedback-info-solid: #0099C1;

  --seed-chart-cat-1: #00A192;
  --seed-chart-cat-2: #F9B11C;
  --seed-chart-cat-3: #CD518B;
  --seed-chart-cat-4: #0099C1;
  --seed-chart-cat-5: #966AC8;
  --seed-chart-cat-6: #004C61;
  --seed-chart-positive: #00A192;
  --seed-chart-negative: #D94545;
  --seed-chart-grid: #E3EBF0;
  --seed-chart-axis: #788F9D;

  /* ---------- DATAVIZ v1.3 (secao 3c do seed-tokens.md, sub-bloco DT
     da Fase 5). Cor de DADO nao e cor de UI: a escala tem lei propria
     (ordem fixa, diferenciacao entre vizinhas, isencao normativa).
     Lei transversal: cor NUNCA e o unico diferenciador — forma de
     marcador, espessura ou tracejado acompanham. ---------- */
  /* sequencial: light 100->900 (pula 500 e 700) · dark 800->100 (pula
     300 e 900). ISENCAO WCAG 1.4.11 declarada (a norma isenta heatmap);
     exige rotulo/tooltip/tabela + fronteira chart-grid + legenda com
     limites. Escala decidida no gate visual de 2026-08-09. */
  --seed-chart-seq-1: #CDF3EC;
  --seed-chart-seq-2: #9CE4D8;
  --seed-chart-seq-3: #66D1C2;
  --seed-chart-seq-4: #11B0A0;
  --seed-chart-seq-5: #098475;
  --seed-chart-seq-6: #005048;
  --seed-chart-seq-7: #00352F;
  /* SEM MEDICAO — cinza EXCLUSIVO deste papel; SEMPRE com hachura
     diagonal, nunca cor lisa (1.4.1: 'gerou pouco' x 'nao reportou'
     nunca depende de cor). Legenda ganha o item 'sem medicao'. */
  --seed-chart-no-data: #E3EBF0;
  /* v1.7: tinta das LINHAS da hachura do no-data. Token proprio porque a
     E3 provou que papel de desenho sem token proprio acaba tomando o token
     de outro papel emprestado (era cat-5-stroke, virou violeta na v1.5).
     Medido contra o preenchimento: 3.93 light / 3.84 dark, ambos >=3. */
  --seed-chart-no-data-hatch: #617683;
  /* v1.10: sub-bloco DP (mapas). geo-base = territorio de CONTEXTO (nao e objeto
     de medicao); geo-boundary = fronteira de municipio, que PORTA informacao e
     por isso entra no piso 3:1. NAO usar chart-grid como fronteira: ele tem o
     MESMO hex de chart-no-data nos dois temas (razao 1.00). Errata E19. */
  --seed-chart-geo-base: #F2F6F9;
  --seed-chart-geo-boundary: #788F9D;
  /* divergente: +-2 SAO chart-positive/negative da v1.0. ZONA-ZERO:
     +-1 e zero aproximam o fundo POR SEMANTICA — dado que precisa se
     distinguir nunca os usa sozinho (leva borda chart-axis ou rotulo). */
  --seed-chart-div-neg-3: #A5272A;
  --seed-chart-div-neg-2: #D94545;
  --seed-chart-div-neg-1: #FFC2BD;
  --seed-chart-div-zero: #E3EBF0;
  --seed-chart-div-pos-1: #9CE4D8;
  --seed-chart-div-pos-2: #00A192;
  --seed-chart-div-pos-3: #005048;
  /* stroke reforcado: linha e sparkline usam cat-N-stroke; barra, area
     e fatia usam cat-N (fill, v1.0, INTOCADO). No dark, cat-2 e cat-6
     comprimem para stops vizinhos do dourado — distincao mutua dessas
     duas series em modo escuro e do tracejado/marcador, nunca da cor. */
  --seed-chart-cat-1-stroke: #098475;
  --seed-chart-cat-2-stroke: #B67F00;
  --seed-chart-cat-3-stroke: #B23871;
  --seed-chart-cat-4-stroke: #0099C1;
  --seed-chart-cat-5-stroke: #7B42BD;
  --seed-chart-cat-6-stroke: #004C61;
  /* gauge: as FAIXAS referenciam a taxonomia de feedback — nenhuma
     severidade paralela nasce aqui (lei do Bloco 3). */
  --seed-gauge-track: #C8D6DF;
  --seed-gauge-value: #098475;
  --seed-gauge-range-ok: #098475;
  --seed-gauge-range-warning: #986900;
  --seed-gauge-range-critical: #C6393B;

  /* ---------- COMPOSICAO E CHROME v1.11 (CP-P3, 2026-08-14) ----------
     Quatro grupos, TODOS invariantes de tema — por isso NENHUM deles se
     redefine no bloco dark nem no prefers-color-scheme:
     · rail-background (CP20 adotado no gate G2): gradiente linear entre dois
       degraus adjacentes da rampa da marca; extremos medidos com branco
       6.32 e 9.37. Invariante por DECISAO (SH15: chrome nao segue o tema).
       Semantico proprio porque sem ele o tema escuro vira regra manual
       (custo do C13: o ClickUp escreveu 22 regras a mao).
     · chrome-overlay-hover/-active (SUP-6 em escopo minimo): veu branco em
       alpha sobre a rampa da marca. MEDIDO EM COMPOSICAO (overlay composto
       sobre os DOIS extremos do gradiente, nao par isolado): rotulo branco
       sobre hover 4.88/6.82 · sobre ativo 4.68/6.50 — todos >=4.5.
       Invariantes por CONSTRUCAO: compoem sobre superficie invariante.
     · entity-1..6 + tinta por posicao (CP23, gate G3): paleta FECHADA de
       identidade de entidade; cada fundo com a tinta que a admissao do
       CP22 mediu (>=4.5): E1 5.11 · E2 5.30 · E3 5.63 · E4 9.37 · E5 6.43
       · E6 6.68. Um hex por posicao — invariantes por construcao: o par
       medido e interno ao chip (fundo x tinta) e nao inverte com o tema.
       Magenta/violeta ficam EXCLUSIVOS de dado (lei (e) da secao 3c).
     · marker-now (CP24, gate G4): turquesa-600 FIXO nos dois temas —
       terceiro membro nomeado da classe invariante de tema (SH15/DG12/
       CP24); >=3.0 contra as cinco superficies canonicas (4.60/4.23/4.05/
       3.72/3.31). ---------- */
  --seed-rail-background: linear-gradient(180deg, #006C62 0%, #005048 100%);
  --seed-chrome-overlay-hover: rgba(255, 255, 255, 0.12);
  --seed-chrome-overlay-active: rgba(255, 255, 255, 0.14);
  --seed-entity-1: #11B0A0;
  --seed-entity-1-ink: #242E34;
  --seed-entity-2: #D49400;
  --seed-entity-2-ink: #242E34;
  --seed-entity-3: #01B3E0;
  --seed-entity-3-ink: #242E34;
  --seed-entity-4: #005048;
  --seed-entity-4-ink: #FFFFFF;
  --seed-entity-5: #006783;
  --seed-entity-5-ink: #FFFFFF;
  --seed-entity-6: #7B5500;
  --seed-entity-6-ink: #FFFFFF;
  --seed-marker-now: #098475;

  /* ---------- CAMADA 3 (COMPONENTE) v1.21 — FORM-FIELD ----------
     Fonte unica: seed-componentes.md §2.5 (l.384-429), spec do
     componente-base de TODO o Bloco 2 (13 controles de entrada herdam).
     Contrastes ja medidos programaticamente na spec (2026-08-02).
     Cada linha grava o hex RESOLVIDO do alias declarado na §2.5 —
     o alias vive no comentario e no gate G5 da paridade-tokens.py.
     Estrutura (alturas, raio, gaps) e invariante de tema, como manda
     a regra "so se tematiza o que precisa de tema" (seed-tokens.md §1).
     ✅ RECONCILIADO NA v1.23 (2026-08-26): field-height md/lg = 44/52px
     por decisao EXPLICITA da spec ("md = 44px (nao 40px)", §1 e §2.2 do
     seed-componentes.md), e a regua generica --seed-control-md/lg passou de
     40/48 para os MESMOS 44/52. A coexistencia de dois numeros durou de
     2026-08-15 a 2026-08-26 e acabou por decisao dele. ---------- */
  --seed-field-height-sm: 32px;                /* §2.5 l.388 — fixado pela spec */
  --seed-field-height-md: 44px;                /* §2.5 l.388 — alvo de toque WCAG, igual botao */
  --seed-field-height-lg: 52px;                /* §2.5 l.388 — fixado pela spec */
  --seed-field-radius: 8px;                    /* §2.5 l.389 = radius-md (-> radius-4) */
  --seed-field-gap: 8px;                       /* §2.5 l.390 = sp-2 · rotulo->controle e controle->mensagem */
  --seed-field-stack-gap: 24px;                /* §2.5 l.391 = sp-6 · campo->campo; sp-4 no denso */
  --seed-field-bg: #FFFFFF;                    /* §2.5 l.394 = surface-page */
  --seed-field-label: #242E34;                 /* §2.5 l.395 = cinza-900 · 13.86:1 */
  --seed-field-value: #242E34;                 /* §2.5 l.396 = cinza-900 · 13.86:1 */
  --seed-field-placeholder: #617683;           /* §2.5 l.397 = cinza-600 · 4.74:1, distinto do valor */
  --seed-field-optional-text: #617683;         /* §2.5 l.398 = cinza-600 · 4.74:1 */
  --seed-field-help-text: #4D606C;             /* §2.5 l.399 = cinza-700 · 6.55:1 */
  --seed-field-border: #788F9D;                /* = border-interactive (cinza-500) — SUPERSEDE CD-P2 (2026-08-17, seed-componentes.md §66.4 + tabela vigente do §64.6-supersede) sobre a §2.5 l.400, que dizia cinza-600: o local degradava na inversao (4,74 claro / 3,21 escuro); o semantico e equilibrado, 3,13 claro / 5,05 escuro, ambos >=3 (SC 1.4.11). A bancada banco-formfield.html ja consome o alias desde CD-P2 */
  --seed-field-border-hover: #4D606C;          /* §2.5 l.401 = cinza-700 */
  --seed-field-error-text: #A5272A;            /* §2.5 l.402 = vermelho-700 · 7.18:1 */
  --seed-field-border-error: #C6393B;          /* §2.5 l.403 = vermelho-600 · 5.19:1 */
  --seed-field-success-text: #006C62;          /* §2.5 l.404 = turquesa-700 · 6.32:1 */
  --seed-field-border-success: #098475;        /* §2.5 l.405 = turquesa-600 · 4.60:1 */
  --seed-field-readonly-bg: #E3EBF0;           /* §2.5 l.406 = surface-sunken (HOJE cinza-100; a spec media cinza-50 — nota na paridade) */
  --seed-field-warning-text: #7B5500;          /* §2.5 l.407 = dourado-700 · 6.68:1 (v0.7) */
  --seed-field-border-warning: #986900;        /* §2.5 l.408 = dourado-600 · 4.82:1 (v0.7) */

  /* ---------- CAMADA 3 (COMPONENTE) v1.22 — BOTAO · CARTAO · DIVISOR ·
     LISTA · ITEM DESTRUTIVO · ESPERA ----------
     SEGUNDA leva da camada 3, mesma classe da v1.21 (form-field): nomes que o
     CANON ja usa e o gemeo nao definia — camada descrita e inconsumivel.
     Medida pela guarda nova SG1 (06-validacao/guardas/guarda-spec-gemeo.py,
     contrato "todo token que o canon NOMEIA existe no gemeo executavel"):
     29 faltantes no acervo. 19 sao emitidos aqui; os outros 10 NAO SE EMITE,
     cada um com o motivo escrito na entrada v1.22 do §9 do seed-tokens.md —
     entre eles TRES contraexemplos (nome que o canon cita para registrar um
     defeito ou um descarte, e citar nao e pedir) e QUATRO lacunas reais da
     spec (valor que o canon nomeia sem dizer de onde vem).
     Cada valor abaixo e o hex RESOLVIDO do alias que o canon declara, ou o
     valor que o canon FIXA por escrito. Zero invencao (§14.1 do CLAUDE.md).
     A fidelidade alias->valor virou o gate G6 da paridade-tokens.py, irmao
     do G5: se o token-base mudar e o componente nao seguir, reprova.
     Estrutura (alturas, raio, gap, delay) e invariante de tema.
     ✅ RECONCILIADO NA v1.23 (2026-08-26): --seed-button-height-md/lg =
     44/52px pela §1.6, os MESMOS do --seed-field-height-md/lg (v1.21), e
     agora tambem os mesmos do --seed-control-md/lg, que subiu de 40/48. Eram
     TRES reguas com DOIS numeros; passa a ser UMA regua: 32/44/52. ------ */
  --seed-button-radius: 8px;                   /* §1.6 l.126 = radius-md (-> radius-4) */
  --seed-button-font-weight: 600;              /* §1.6 l.127 = fw-semibold */
  --seed-button-height-sm: 32px;               /* §1.6 l.128 — fixado pela spec */
  --seed-button-height-md: 44px;               /* §1.6 l.129 — ✅ v1.23: --seed-control-md subiu para 44px; regua unica */
  --seed-button-height-lg: 52px;               /* §1.6 l.130 — ✅ v1.23: --seed-control-lg subiu para 52px; regua unica */
  --seed-button-gap: 8px;                      /* §1.6 l.131 = sp-2 */
  --seed-button-secondary-border: #098475;     /* §1.6 l.135 = turquesa-600 · 4.28:1 sobre action-secondary-bg */
  --seed-button-secondary-text: #005048;       /* §1.6 l.136 = turquesa-800 · 8.73:1 sobre action-secondary-bg */
  --seed-button-outline-border: #617683;       /* §1.6 l.137 = cinza-600 · 4.74:1 sobre surface-page */
  --seed-button-ghost-text: #006C62;           /* §1.6 l.138 = turquesa-700 · 6.32:1 sobre surface-page */
  --seed-button-toggle-on-bg: #005048;         /* §1.6 l.139 = turquesa-800 */
  --seed-button-toggle-on-fg: #FFFFFF;         /* §1.6 l.140 — branco FIXADO pela spec (nao e alias) · 9.37:1 sobre toggle-on-bg */
  --seed-card-bg: #FFFFFF;                     /* §26 l.1954 = surface-raised */
  --seed-card-border: #E3EBF0;                 /* §26 l.1954 = border-subtle — borda DECORATIVA declarada (1.21:1 light, medido; a separacao e carregada por espaco+raio+superficie+tipografia) */
  --seed-card-radius: 12px;                    /* §26 l.1954 = radius-lg (-> radius-6) */
  --seed-divider-color: #E3EBF0;               /* §26-F l.1976 = border-subtle — decorativo declarado (1.21:1 light) */
  --seed-list-hover: #F2F6F9;                  /* §26-F l.2000 = surface-subtle · texto primary sobre o hover = 12.75:1 (numero da propria spec, remedido) */
  --seed-danger-item: #A5272A;                 /* §27 l.2181 = vermelho-700 · 7.18:1 (numero medido na propria spec) */
  --seed-wait-delay: 1000ms;                   /* §17 R3-c l.1687 — "default 1000ms", FIXADO por escrito; invariante de tema; revisao por telemetria real do ERP na F4 (pendencia declarada, nao decisao aberta) */

  /* ---------- CAMADA 3 (COMPONENTE) v1.23 — SWITCH · SLIDER · DIVISOR
     FORTE · LARGURA DE CAMPO ----------
     Fecha os SETE ultimos FAIL da SG1: a camada 3 passa a ter ZERO nome que o
     canon cita e o gemeo nao define.
     ⚠⚠ DOIS DESTES VALORES NAO FORAM COPIADOS DA SPEC — foram CORRIGIDOS por
     medicao, e a spec foi emendada ANTES (rito: canonico primeiro). A §8.3
     mandava trilho de switch em cinza-300 com a clausula "3:1 sobre a
     pagina", e cinza-300 sobre branco da **1,91** — a clausula reprovava a si
     mesma. O slider tinha a mesma linha e o mesmo defeito. Os dois passam a
     cinza-500 (**3,38:1**), primeiro degrau da escala que atende; o cinza-400
     ainda reprova, com 2,53. Zero cor nova (§14.1 do CLAUDE.md).
     ⭐ E medir "sobre a pagina" era medir METADE do componente: o thumb e
     BRANCO, e branco sobre cinza-300 da os mesmos 1,91 — o thumb sumia dentro
     do trilho, e a posicao do thumb e o unico canal que separa ON de OFF (K3:
     nunca "ON/OFF" escrito no trilho). Cinza-500 conserta os DOIS pares.
     ⭐⭐ E no tema ESCURO quem reprovava era o estado LIGADO, nao o desligado:
     thumb cinza-100 sobre o trilho ligado da **2,25**. Ninguem tinha visto
     porque a clausula so mandava medir o OFF. A saida nao precisou de cor
     nova — "o que vai sobre a superficie de acao" ja e par medido e
     canonizado (--seed-text-on-action-primary), e o thumb de um switch ligado
     e exatamente isso: **7,39:1**. No claro os dois thumbs coincidem em
     branco, entao a regra e UMA, expressa em dois tokens que colapsam.
     ⚠ O par preenchido x vazio do SLIDER fica DECORATIVO DECLARADO, com o
     numero escrito (1,36 light / 2,59 dark): nenhum degrau da escala atende
     os dois pares ao mesmo tempo, e o valor ja tem canal textual garantido
     pela propria spec ("valor corrente visivel SEMPRE") e canal de forma no
     thumb de 24px com borda. Exigir 3:1 ali seria criar clausula nova, e
     clausula nova e decisao dele (§0-b), nao da sessao. ---------- */
  --seed-divider-strong: #C8D6DF;              /* §26-F l.1976 = border-default — decorativo declarado (1.49:1 light, medido) · divisor enfatico full-width */
  --seed-slider-track: #788F9D;                /* §L l.1470 = cinza-500 · 3.38:1 sobre surface-page — ⚠ CORRIGIDO: a spec dizia cinza-300 (1,91) */
  --seed-switch-off-bg: #788F9D;               /* §8.3 l.1292 = cinza-500 · 3.38:1 sobre surface-page E 3.38:1 sobre o thumb branco — ⚠ CORRIGIDO: a spec dizia cinza-300 (1,91 nos dois) */
  --seed-switch-on-bg: #098475;                /* §8.3 l.1292 = action-primary (turquesa-600) · 4.60:1 sobre surface-page — ⚠ a spec apontava para --seed-action-primary-bg, token FANTASMA da FF-P2/FF-P3 */
  --seed-switch-thumb: #FFFFFF;                /* §8.3 l.1292 — branco FIXADO pela spec · thumb DESLIGADO · 3.38:1 sobre o trilho off */
  --seed-switch-thumb-on: #FFFFFF;             /* §8.3 l.1292 = text-on-action-primary · thumb LIGADO · 4.60:1 sobre o trilho on — no claro coincide com o thumb off, e isso e a regra colapsando, nao duplicacao */
}

[data-theme="dark"] {
  --seed-surface-page: #0B1419;
  --seed-surface-subtle: #141D23;
  --seed-surface-raised: #1D272D;
  --seed-surface-sunken: #0B1419;
  --seed-surface-overlay: #273137;
  --seed-surface-brand-strong: #098475;
  --seed-surface-brand: #11B0A0;
  --seed-surface-brand-deep: #005048;
  --seed-surface-brand-subtle: #1A3833;
  --seed-surface-inverse: #F2F6F9;

  --seed-text-primary: #DDECE8;
  --seed-text-secondary: #A3C4BE;
  --seed-text-muted: #8FB5AD;
  --seed-text-disabled: #617683;
  --seed-text-brand: #66D1C2;
  --seed-text-brand-strong: #66D1C2;   /* v1.19: igual a text-brand no escuro — ja media 8,31 a 10,16 */
  --seed-text-inverse: #242E34;
  --seed-text-on-brand: #00352F;
  --seed-text-on-brand-deep: #FFFFFF;
  --seed-text-on-action-primary: #00352F;
  --seed-text-on-brand-strong: #FFFFFF;
  --seed-text-on-action-destructive: #521112;
  --seed-text-link: #66D1C2;

  --seed-border-subtle: #38464F;
  --seed-border-default: #4D606C;
  --seed-border-strong: #788F9D;
  --seed-border-focus: #66D1C2;
  --seed-border-interactive: #788F9D;
  --seed-row-selected-bg: #00352F;
  --seed-row-selected-text: #E3EBF0;
  --seed-row-selected-border: #66D1C2;

  --seed-action-primary: #66D1C2;
  --seed-action-primary-hover: #9CE4D8;
  --seed-action-primary-active: #11B0A0;
  --seed-action-secondary-bg: #1A3833;
  --seed-action-secondary-text: #66D1C2;
  --seed-action-ghost-hover: #1D272D;
  --seed-action-neutral-hover: #141D23;
  --seed-action-neutral-active: #0B1419;
  --seed-action-destructive: #FC6F6A;
  --seed-action-destructive-hover: #FF9C95;

  --seed-accent-highlight: #FAD61D;
  --seed-accent-highlight-subtle: #3A3410;
  --seed-accent-on-highlight: #242E34;

  --seed-feedback-success-bg: #00352F;
  --seed-feedback-success-text: #9CE4D8;
  --seed-feedback-success-border: #006C62;
  --seed-feedback-success-solid: #11B0A0;
  --seed-feedback-warning-bg: #3D2800;
  --seed-feedback-warning-text: #FECA76;
  --seed-feedback-warning-border: #7B5500;
  --seed-feedback-warning-solid: #F9B11C;
  --seed-feedback-danger-bg: #521112;
  --seed-feedback-danger-text: #FFC2BD;
  --seed-feedback-danger-border: #A5272A;
  --seed-feedback-danger-solid: #FC6F6A;
  --seed-feedback-info-bg: #003241;
  --seed-feedback-info-text: #96E0FD;
  --seed-feedback-info-border: #006783;
  --seed-feedback-info-solid: #53C2E9;

  --seed-chart-cat-1: #66D1C2;
  --seed-chart-cat-2: #F9B11C;
  --seed-chart-cat-3: #E8A1C2;
  --seed-chart-cat-4: #53C2E9;
  --seed-chart-cat-5: #BD9CE2;
  --seed-chart-cat-6: #96E0FD;
  --seed-chart-positive: #66D1C2;
  --seed-chart-negative: #FC6F6A;
  --seed-chart-grid: #38464F;
  --seed-chart-axis: #90A6B3;

  /* ---------- DATAVIZ v1.3 (secao 3c do seed-tokens.md, sub-bloco DT
     da Fase 5). Cor de DADO nao e cor de UI: a escala tem lei propria
     (ordem fixa, diferenciacao entre vizinhas, isencao normativa).
     Lei transversal: cor NUNCA e o unico diferenciador — forma de
     marcador, espessura ou tracejado acompanham. ---------- */
  /* sequencial: light 100->900 (pula 500 e 700) · dark 800->100 (pula
     300 e 900). ISENCAO WCAG 1.4.11 declarada (a norma isenta heatmap);
     exige rotulo/tooltip/tabela + fronteira chart-grid + legenda com
     limites. Escala decidida no gate visual de 2026-08-09. */
  --seed-chart-seq-1: #005048;
  --seed-chart-seq-2: #006C62;
  --seed-chart-seq-3: #098475;
  --seed-chart-seq-4: #00A192;
  --seed-chart-seq-5: #11B0A0;
  --seed-chart-seq-6: #9CE4D8;
  --seed-chart-seq-7: #CDF3EC;
  /* SEM MEDICAO — cinza EXCLUSIVO deste papel; SEMPRE com hachura
     diagonal, nunca cor lisa (1.4.1: 'gerou pouco' x 'nao reportou'
     nunca depende de cor). Legenda ganha o item 'sem medicao'. */
  --seed-chart-no-data: #38464F;
  --seed-chart-no-data-hatch: #90A6B3;
  --seed-chart-geo-base: #141D23;
  --seed-chart-geo-boundary: #90A6B3;
  /* divergente: +-2 SAO chart-positive/negative da v1.0. ZONA-ZERO:
     +-1 e zero aproximam o fundo POR SEMANTICA — dado que precisa se
     distinguir nunca os usa sozinho (leva borda chart-axis ou rotulo). */
  --seed-chart-div-neg-3: #FF9C95;
  --seed-chart-div-neg-2: #D94545;
  --seed-chart-div-neg-1: #7A1C1E;
  --seed-chart-div-zero: #38464F;
  --seed-chart-div-pos-1: #005048;
  --seed-chart-div-pos-2: #00A192;
  --seed-chart-div-pos-3: #66D1C2;
  /* stroke reforcado: linha e sparkline usam cat-N-stroke; barra, area
     e fatia usam cat-N (fill, v1.0, INTOCADO). No dark, cat-2 e cat-6
     comprimem para stops vizinhos do dourado — distincao mutua dessas
     duas series em modo escuro e do tracejado/marcador, nunca da cor. */
  --seed-chart-cat-1-stroke: #66D1C2;
  --seed-chart-cat-2-stroke: #F9B11C;
  --seed-chart-cat-3-stroke: #E8A1C2;
  --seed-chart-cat-4-stroke: #53C2E9;
  --seed-chart-cat-5-stroke: #BD9CE2;
  --seed-chart-cat-6-stroke: #96E0FD;
  /* gauge: as FAIXAS referenciam a taxonomia de feedback — nenhuma
     severidade paralela nasce aqui (lei do Bloco 3). */
  --seed-gauge-track: #4D606C;
  --seed-gauge-value: #66D1C2;
  --seed-gauge-range-ok: #66D1C2;
  --seed-gauge-range-warning: #F9B11C;
  --seed-gauge-range-critical: #FF9C95;

  --seed-shadow-raised: 0 1px 2px rgba(0,0,0,0.40);
  --seed-shadow-overlay: 0 8px 24px rgba(0,0,0,0.50);
  --seed-shadow-modal: 0 16px 48px rgba(0,0,0,0.60);
  --seed-focus-ring: 0 0 0 2px var(--seed-surface-page), 0 0 0 4px var(--seed-border-focus);

  /* v1.11: rail-background, chrome-overlay-*, entity-* e marker-now NAO se
     redefinem aqui de proposito — sao invariantes de tema (ver o bloco
     COMPOSICAO E CHROME no :root). Redeclara-los com o mesmo valor seria
     duplicacao, que e o vetor de deriva que os gemeos existem para matar. */

  /* ---------- CAMADA 3 (COMPONENTE) v1.21 — FORM-FIELD, par dark ----------
     Fonte: seed-componentes.md §2.5 (l.410-428). Regra v0.5 da spec: token
     que referencia primitivo DECLARA o par (primitivo nao troca de modo).
     Alturas/raio/gaps NAO se redefinem: estrutura e invariante de tema.
     Medicoes da spec: rotulo/mensagens sobre #141D23; conteudo do campo
     sobre surface-raised #1D272D. */
  --seed-field-bg: #1D272D;                    /* §2.5 l.413 = surface-raised */
  --seed-field-label: #E3EBF0;                 /* §2.5 l.414 = cinza-100 · 14.16:1 */
  --seed-field-value: #E3EBF0;                 /* §2.5 l.415 = cinza-100 · 12.61:1 */
  --seed-field-placeholder: #90A6B3;           /* §2.5 l.416 = cinza-400 · 6.01:1 */
  --seed-field-optional-text: #90A6B3;         /* §2.5 l.417 = cinza-400 */
  --seed-field-help-text: #ACBECA;             /* §2.5 l.418 = cinza-300 · 8.92:1 */
  --seed-field-border: #788F9D;                /* = border-interactive (CD-P2; coincide com a §2.5 l.419, cinza-500 · 4.50:1 — 600 sumia; 400 gritava em massa de campos do ERP) */
  --seed-field-border-hover: #90A6B3;          /* §2.5 l.420 = cinza-400 · 6.01:1 */
  --seed-field-error-text: #FF9C95;            /* §2.5 l.421 = vermelho-300 · 8.49:1 */
  --seed-field-border-error: #FC6F6A;          /* §2.5 l.422 = vermelho-400 · 5.52:1 */
  --seed-field-success-text: #66D1C2;          /* §2.5 l.423 = turquesa-300 · 9.32:1 */
  --seed-field-border-success: #66D1C2;        /* §2.5 l.424 = turquesa-300 · 8.31:1 */
  --seed-field-readonly-bg: #0B1419;           /* §2.5 l.425 = surface-sunken (dark) */
  --seed-field-warning-text: #F9B11C;          /* §2.5 l.426 = dourado-300 · 9.22:1 (v0.7) */
  --seed-field-border-warning: #F9B11C;        /* §2.5 l.427 = dourado-300 · 8.21:1 (v0.7) */

  /* --- CAMADA 3 v1.22 (dark): so os tokens de COR trocam de tema. Raio,
     alturas, gap, peso e delay ficam SO no :root, de proposito — "so se
     tematiza o que precisa de tema" (seed-tokens.md §1), e o gate G6
     reprova se um invariante aparecer aqui. --- */
  --seed-button-secondary-border: #66D1C2;     /* §1.6 l.143 = turquesa-300 */
  --seed-button-secondary-text: #CDF3EC;       /* §1.6 l.144 = turquesa-100 · 10.64:1 sobre o tint dark (numero da spec, remedido) */
  --seed-button-outline-border: #90A6B3;       /* §1.6 l.145 = cinza-400 · 7.35:1 sobre surface-page dark */
  --seed-button-ghost-text: #66D1C2;           /* §1.6 l.146 = turquesa-300 · 10.16:1 sobre a pagina dark (era 2.7 com o primitivo fixo — o motivo do par dark existir) */
  --seed-button-toggle-on-bg: #66D1C2;         /* §1.6 l.147 = turquesa-300 */
  --seed-button-toggle-on-fg: #00352F;         /* §1.6 l.148 = turquesa-900 · 7.39:1 */
  --seed-card-bg: #1D272D;                     /* §26 l.1954 = surface-raised (dark) */
  --seed-card-border: #38464F;                 /* §26 l.1954 = border-subtle (dark) — 1.75:1 sobre surface-subtle, decorativo declarado */
  --seed-divider-color: #38464F;               /* §26-F l.1976 = border-subtle (dark) — 1.75:1, decorativo declarado */
  --seed-list-hover: #273137;                  /* §26-F l.2000 fixa o hex "#273137" = surface-overlay (dark) · texto primary sobre o hover = 10.90:1 */
  --seed-danger-item: #FFC2BD;                 /* §27 l.2181 = vermelho-200 · 8.67:1 (numero medido na propria spec) */

  /* ---------- CAMADA 3 (COMPONENTE) v1.23 — par dark ----------
     ⭐ Aqui os dois thumbs NAO colapsam, e e por isso que o par existe: o
     thumb ligado precisa da tinta-sobre-acao (#00352F, 7,39:1), enquanto o
     desligado continua claro (cinza-100, 3,93:1 sobre o trilho off). ---- */
  --seed-divider-strong: #4D606C;              /* §26-F l.1976 = border-default (dark) — decorativo declarado */
  --seed-slider-track: #617683;                /* §L l.1470 = cinza-600 · 3.92:1 sobre surface-page dark */
  --seed-switch-off-bg: #617683;               /* §8.3 l.1292 = cinza-600 · 3.92:1 sobre a pagina e 3.93:1 sobre o thumb */
  --seed-switch-on-bg: #66D1C2;                /* §8.3 l.1292 = action-primary dark (turquesa-300, NAO turquesa-400 como a spec dizia) · 10.16:1 */
  --seed-switch-thumb: #E3EBF0;                /* §8.3 l.1292 = cinza-100 · thumb DESLIGADO */
  --seed-switch-thumb-on: #00352F;             /* §8.3 l.1292 = text-on-action-primary dark (turquesa-900) · thumb LIGADO · 7.39:1 — o par que estava REPROVANDO em 2,25 com o cinza-100 */
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --seed-surface-page: #0B1419;
    --seed-surface-subtle: #141D23;
    --seed-surface-raised: #1D272D;
    --seed-surface-sunken: #0B1419;
    --seed-surface-overlay: #273137;
    --seed-surface-brand-strong: #098475;
    --seed-surface-brand: #11B0A0;
    --seed-surface-brand-deep: #005048;
    --seed-surface-brand-subtle: #1A3833;
    --seed-surface-inverse: #F2F6F9;
  
    --seed-text-primary: #DDECE8;
    --seed-text-secondary: #A3C4BE;
    --seed-text-muted: #8FB5AD;
    --seed-text-disabled: #617683;
    --seed-text-brand: #66D1C2;
    --seed-text-brand-strong: #66D1C2;   /* v1.19 */
    --seed-text-inverse: #242E34;
    --seed-text-on-brand: #00352F;
    --seed-text-on-brand-deep: #FFFFFF;
    --seed-text-on-action-primary: #00352F;
    --seed-text-on-brand-strong: #FFFFFF;
    --seed-text-on-action-destructive: #521112;
    --seed-text-link: #66D1C2;
  
    --seed-border-subtle: #38464F;
    --seed-border-default: #4D606C;
    --seed-border-strong: #788F9D;
    --seed-border-focus: #66D1C2;
    --seed-border-interactive: #788F9D;
    --seed-row-selected-bg: #00352F;
    --seed-row-selected-text: #E3EBF0;
    --seed-row-selected-border: #66D1C2;
  
    --seed-action-primary: #66D1C2;
    --seed-action-primary-hover: #9CE4D8;
    --seed-action-primary-active: #11B0A0;
    --seed-action-secondary-bg: #1A3833;
    --seed-action-secondary-text: #66D1C2;
    --seed-action-ghost-hover: #1D272D;
    --seed-action-neutral-hover: #141D23;
    --seed-action-neutral-active: #0B1419;
    --seed-action-destructive: #FC6F6A;
    --seed-action-destructive-hover: #FF9C95;
  
    --seed-accent-highlight: #FAD61D;
    --seed-accent-highlight-subtle: #3A3410;
    --seed-accent-on-highlight: #242E34;
  
    --seed-feedback-success-bg: #00352F;
    --seed-feedback-success-text: #9CE4D8;
    --seed-feedback-success-border: #006C62;
    --seed-feedback-success-solid: #11B0A0;
    --seed-feedback-warning-bg: #3D2800;
    --seed-feedback-warning-text: #FECA76;
    --seed-feedback-warning-border: #7B5500;
    --seed-feedback-warning-solid: #F9B11C;
    --seed-feedback-danger-bg: #521112;
    --seed-feedback-danger-text: #FFC2BD;
    --seed-feedback-danger-border: #A5272A;
    --seed-feedback-danger-solid: #FC6F6A;
    --seed-feedback-info-bg: #003241;
    --seed-feedback-info-text: #96E0FD;
    --seed-feedback-info-border: #006783;
    --seed-feedback-info-solid: #53C2E9;
  
    --seed-chart-cat-1: #66D1C2;
    --seed-chart-cat-2: #F9B11C;
    --seed-chart-cat-3: #E8A1C2;
    --seed-chart-cat-4: #53C2E9;
    --seed-chart-cat-5: #BD9CE2;
    --seed-chart-cat-6: #96E0FD;
    --seed-chart-positive: #66D1C2;
    --seed-chart-negative: #FC6F6A;
    --seed-chart-grid: #38464F;
    --seed-chart-axis: #90A6B3;

    /* ---------- DATAVIZ v1.3 (secao 3c do seed-tokens.md, sub-bloco DT
       da Fase 5). Cor de DADO nao e cor de UI: a escala tem lei propria
       (ordem fixa, diferenciacao entre vizinhas, isencao normativa).
       Lei transversal: cor NUNCA e o unico diferenciador — forma de
       marcador, espessura ou tracejado acompanham. ---------- */
    /* sequencial: light 100->900 (pula 500 e 700) · dark 800->100 (pula
       300 e 900). ISENCAO WCAG 1.4.11 declarada (a norma isenta heatmap);
       exige rotulo/tooltip/tabela + fronteira chart-grid + legenda com
       limites. Escala decidida no gate visual de 2026-08-09. */
    --seed-chart-seq-1: #005048;
    --seed-chart-seq-2: #006C62;
    --seed-chart-seq-3: #098475;
    --seed-chart-seq-4: #00A192;
    --seed-chart-seq-5: #11B0A0;
    --seed-chart-seq-6: #9CE4D8;
    --seed-chart-seq-7: #CDF3EC;
    /* SEM MEDICAO — cinza EXCLUSIVO deste papel; SEMPRE com hachura
       diagonal, nunca cor lisa (1.4.1: 'gerou pouco' x 'nao reportou'
       nunca depende de cor). Legenda ganha o item 'sem medicao'. */
    --seed-chart-no-data: #38464F;
    --seed-chart-no-data-hatch: #90A6B3;
    --seed-chart-geo-base: #141D23;
    --seed-chart-geo-boundary: #90A6B3;
    /* divergente: +-2 SAO chart-positive/negative da v1.0. ZONA-ZERO:
       +-1 e zero aproximam o fundo POR SEMANTICA — dado que precisa se
       distinguir nunca os usa sozinho (leva borda chart-axis ou rotulo). */
    --seed-chart-div-neg-3: #FF9C95;
    --seed-chart-div-neg-2: #D94545;
    --seed-chart-div-neg-1: #7A1C1E;
    --seed-chart-div-zero: #38464F;
    --seed-chart-div-pos-1: #005048;
    --seed-chart-div-pos-2: #00A192;
    --seed-chart-div-pos-3: #66D1C2;
    /* stroke reforcado: linha e sparkline usam cat-N-stroke; barra, area
       e fatia usam cat-N (fill, v1.0, INTOCADO). No dark, cat-2 e cat-6
       comprimem para stops vizinhos do dourado — distincao mutua dessas
       duas series em modo escuro e do tracejado/marcador, nunca da cor. */
    --seed-chart-cat-1-stroke: #66D1C2;
    --seed-chart-cat-2-stroke: #F9B11C;
    --seed-chart-cat-3-stroke: #E8A1C2;
    --seed-chart-cat-4-stroke: #53C2E9;
    --seed-chart-cat-5-stroke: #BD9CE2;
    --seed-chart-cat-6-stroke: #96E0FD;
    /* gauge: as FAIXAS referenciam a taxonomia de feedback — nenhuma
       severidade paralela nasce aqui (lei do Bloco 3). */
    --seed-gauge-track: #4D606C;
    --seed-gauge-value: #66D1C2;
    --seed-gauge-range-ok: #66D1C2;
    --seed-gauge-range-warning: #F9B11C;
    --seed-gauge-range-critical: #FF9C95;
  
    --seed-shadow-raised: 0 1px 2px rgba(0,0,0,0.40);
    --seed-shadow-overlay: 0 8px 24px rgba(0,0,0,0.50);
    --seed-shadow-modal: 0 16px 48px rgba(0,0,0,0.60);
    --seed-focus-ring: 0 0 0 2px var(--seed-surface-page), 0 0 0 4px var(--seed-border-focus);

    /* v1.11: os invariantes de tema (rail, chrome-overlay, entity, marker)
       tambem NAO entram aqui — este bloco espelha o [data-theme="dark"]. */

    /* v1.21: camada 3 form-field, espelho exato do bloco [data-theme="dark"]
       acima (fonte: seed-componentes.md §2.5 l.410-428). O espelhamento e
       verificado pelo gate G5 da paridade-tokens.py. */
    --seed-field-bg: #1D272D;
    --seed-field-label: #E3EBF0;
    --seed-field-value: #E3EBF0;
    --seed-field-placeholder: #90A6B3;
    --seed-field-optional-text: #90A6B3;
    --seed-field-help-text: #ACBECA;
    --seed-field-border: #788F9D;
    --seed-field-border-hover: #90A6B3;
    --seed-field-error-text: #FF9C95;
    --seed-field-border-error: #FC6F6A;
    --seed-field-success-text: #66D1C2;
    --seed-field-border-success: #66D1C2;
    --seed-field-readonly-bg: #0B1419;
    --seed-field-warning-text: #F9B11C;
    --seed-field-border-warning: #F9B11C;
    /* espelho da camada 3 v1.22 — identico ao [data-theme="dark"] acima;
       o gate G6 reprova se este bloco DERIVAR daquele */
    --seed-button-secondary-border: #66D1C2;
    --seed-button-secondary-text: #CDF3EC;
    --seed-button-outline-border: #90A6B3;
    --seed-button-ghost-text: #66D1C2;
    --seed-button-toggle-on-bg: #66D1C2;
    --seed-button-toggle-on-fg: #00352F;
    --seed-card-bg: #1D272D;
    --seed-card-border: #38464F;
    --seed-divider-color: #38464F;
    --seed-list-hover: #273137;
    --seed-danger-item: #FFC2BD;
    /* ---------- CAMADA 3 (COMPONENTE) v1.23 — par dark ----------
    ⭐ Aqui os dois thumbs NAO colapsam, e e por isso que o par existe: o
    thumb ligado precisa da tinta-sobre-acao (#00352F, 7,39:1), enquanto o
    desligado continua claro (cinza-100, 3,93:1 sobre o trilho off). ---- */
    --seed-divider-strong: #4D606C;              /* §26-F l.1976 = border-default (dark) — decorativo declarado */
    --seed-slider-track: #617683;                /* §L l.1470 = cinza-600 · 3.92:1 sobre surface-page dark */
    --seed-switch-off-bg: #617683;               /* §8.3 l.1292 = cinza-600 · 3.92:1 sobre a pagina e 3.93:1 sobre o thumb */
    --seed-switch-on-bg: #66D1C2;                /* §8.3 l.1292 = action-primary dark (turquesa-300, NAO turquesa-400 como a spec dizia) · 10.16:1 */
    --seed-switch-thumb: #E3EBF0;                /* §8.3 l.1292 = cinza-100 · thumb DESLIGADO */
    --seed-switch-thumb-on: #00352F;             /* §8.3 l.1292 = text-on-action-primary dark (turquesa-900) · thumb LIGADO · 7.39:1 — o par que estava REPROVANDO em 2,25 com o cinza-100 */
  }
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --seed-dur-productive-fast: 0ms;
    --seed-dur-productive: 0ms;
    --seed-dur-expressive: 100ms; /* crossfade minimo no lugar de transicoes grandes */
    --seed-dur-expressive-slow: 100ms;
  }
}

/* ============================================================
   v1.2 (M3) — FONTE DE CAMPO EM SUPERFICIE DE TOQUE
   O gatilho e o PONTEIRO (pega tablet tambem), nunca a largura:
   gatilho por breakpoint falha em tablet largo com toque.
   ============================================================ */
@media (pointer: coarse) {
  .seed-field__control { font-size: var(--seed-fs-field-touch); }
}

/* ============================================================
   v1.2 (M1) — BREAKPOINTS (referencia; NAO sao custom property)
   sm 640 · md 768 · lg 1024 · xl 1280 · 2xl 1536 (min-width)
   Media query NAO le custom property — por isso breakpoint nao
   existe como --seed-*. Fontes canonicas: seed-tokens.json
   (app nativo, ferramentas) e theme.screens do Tailwind
   (produtos web). Supersede o corte 960 do
   seed-design-system.html v1.0.
   Faixa de projeto: mobile <640 · tablet 640-1023 · desktop >=1024.
   Pior caso de teste: 360px (largura Android mais comum no Brasil).
   ============================================================ */
