/*
 * Heimdall — tokens de MARCA.
 *
 * Fonte normativa: .claude/rules/brand-identity.md
 * Registro de decisão: design/brand/002-identidade-visual.md
 *
 * Escopo: só marca. Escala tipográfica, espaçamento, raio e sombra são
 * Fase 2 (Design System) e NÃO pertencem a este arquivo.
 *
 * Dois registros do mesmo sistema, não dois temas:
 *   claro  → site, landing page, funil, deck, README
 *   escuro → Console, docs de produto, superfícies de trabalho
 *
 * A matiz do acento é 162 nos dois. Só a luminosidade muda, para manter
 * contraste. Trocar a matiz em um dos registros parte a marca em duas.
 *
 * Todo valor foi gerado a partir do oklch declarado, não escolhido em hex, e
 * verificado por design/tokens/verify-contrast.mjs — que mede TODO par que
 * pode aparecer junto, não só o par óbvio.
 *
 * --on-brand NÃO é branco por padrão. No registro escuro o brand é claro, então
 * o texto dentro dele é escuro. Branco sobre o verde escuro dá 3.37:1, e isso
 * seria o botão primário do Console inteiro.
 */

:root,
[data-register="light"] {
  --ground:      oklch(0.943 0.010 88);   /* #efece5  concreto              */
  --surface:     oklch(1.000 0.000 88);   /* #ffffff                        */
  --surface-active: var(--ground);       /* #efece5  um passo da surface   */
  --ink:         oklch(0.229 0.006 100);  /* #1d1d1a  grafite quente 14.3:1 */
  --ink-muted:   oklch(0.442 0.011 95);   /* #55534c                 6.5:1  */
  --ink-subtle:  oklch(0.523 0.016 88);   /* #6e6960  cinza-pedra    4.6:1  */
  --border:      oklch(0.868 0.016 88);   /* #d8d3c8                        */
  --brand:       oklch(0.480 0.075 162);  /* #316b50  verde custódia 5.3:1  */
  --brand-deep:  oklch(0.392 0.062 162);  /* #22503b                 7.8:1  */
  --on-brand:    oklch(1.000 0.000 88);   /* #ffffff                        */
}

[data-register="dark"] {
  --ground:      oklch(0.209 0.005 100);  /* #191816                        */
  --surface:     oklch(0.231 0.006 100);  /* #1e1d1a                        */
  --surface-active: oklch(0.253 0.007 100); /* #23221f  um passo da surface  */
  --ink:         oklch(0.930 0.005 100);  /* #e8e8e4                14.4:1  */
  --ink-muted:   oklch(0.731 0.012 100);  /* #a9a8a0                 7.4:1  */
  --ink-subtle:  oklch(0.618 0.013 100);  /* #87867d                 4.6:1 vs surface */
  --border:      oklch(0.301 0.009 100);  /* #2f2e29                        */
  --brand:       oklch(0.628 0.092 162);  /* #509a77                 5.3:1  */
  --brand-deep:  oklch(0.742 0.101 162);  /* #6cc098                 8.1:1  */
  --on-brand:    oklch(0.209 0.005 100);  /* #191816  texto DENTRO do brand */
}

/*
 * --surface-active: a superfície UM PASSO DE DISTÂNCIA da --surface, para o
 * item ativo da sidebar (design/system/002-componentes.md, AppShell).
 *
 * O passo é o mesmo |ΔL| que separa --ground de --surface em cada registro.
 * No escuro ele sobe: 0.231 + 0.022 = 0.253. No claro NÃO dá para subir — a
 * --surface já é branca, e 1.000 + 0.057 corta de volta no branco, o que
 * apagaria o item ativo. Então no claro o passo desce, e cai exatamente no
 * --ground; por isso é um alias, e não uma segunda declaração do mesmo valor
 * que poderia divergir.
 *
 * Medido: --ink e --ink-muted passam 4.5:1 sobre ela nos dois registros.
 * --ink-subtle NÃO passa no escuro (4.33:1) — item ativo não leva texto sutil.
 */

/*
 * Matiz 162 é RESERVADA à marca.
 *
 * Nenhum token de estado pode usá-la em peso cheio. A separação entre marca e
 * estado é estrutural antes de ser cromática:
 *
 *   marca  → fill sólido
 *   estado → superfície tingida + texto escuro + ícone, nunca fill sólido
 *
 * Alocação de matiz para a paleta de estado (valores em Fase 2):
 *
 *   162  marca                     RESERVADA
 *   145  provisioned / sucesso
 *    75  pending_approval / espera
 *    27  failed / destrutivo
 *   235  provisioning / updating / em curso
 *   100  draft / deprovisioned / neutro   (croma ≤ 0.012)
 *
 * Matiz nunca carrega significado sozinha: todo estado é matiz + rótulo + ícone.
 */

:root {
  --font-sans: "IBM Plex Sans", system-ui, -apple-system, sans-serif;
  --font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", monospace;

  /* Os pesos que a marca carrega: brand.json, font.weights. Plex Mono só usa
     os dois primeiros. Nenhum outro peso é carregado, então nenhum outro
     peso existe — um 700 renderizaria sintetizado pelo browser. */
  --weight-normal:   400;
  --weight-medium:   500;   /* label, cabeçalho de tabela             */
  --weight-semibold: 600;   /* botão, título, wordmark                */

  --wordmark-tracking: -0.03em;   /* Heimdall, IBM Plex Sans 600            */
  --signature-tracking: 0.13em;   /* BY YOPS CLOUD, IBM Plex Mono caixa alta */
}
