/* ==========================================================================
   type.css — A escala tipográfica da Torre, como CLASSES.
   Implementa DESIGN.md §3 (escala) e §2.10 (por que classe, e não token).

   POR QUE NÃO SÃO CUSTOM PROPERTIES. Uma custom property carrega UM valor; um
   nível tipográfico são quatro amarrados — tamanho, altura de linha, peso,
   letter-spacing —, às vezes seis (text-transform, font-variant-numeric).
   Quebrar isso em --tc-type-body-size / -lh / -weight seria 40+ propriedades
   que podem ser aplicadas pela metade: exatamente a inconsistência que o §1.3
   diagnosticou (11 tamanhos em uso, 12/13/14 na mesma célula em telas
   diferentes). A shorthand `font` é proposital — não dá para aplicar meia.

   O resto da fundação (cor, espaço, raio, camada, movimento) continua em custom
   property, porque são valores únicos e precisam ser sobrescritos por tema e
   ambiente em tempo de execução. Tipografia não muda com tema.

   7 níveis para o app + 4 para a TV. Nada fora da escala.
   Os níveis de TV nascem aqui porque são escala, não dataviz — o dashboard não
   consome nada disto ainda (a migração dele é de outra onda, §7 item 9).
   ========================================================================== */

/* ── A fonte da MARCA (§3, §11) ──────────────────────────────────────────────
   Visby CF, dois pesos, carregada localmente. É a **única** webfont do produto,
   e ela não é fonte de interface: uso restrito ao wordmark e aos lockups do
   §11. Em UI, tabela, botão ou dashboard, nunca — display em corpo 13px numa
   tabela de 200 linhas custa legibilidade e um request que o `system-ui` não
   cobra.

   Só DemiBold (600) e Heavy (800) entram, porque são os dois pesos que o §11
   define, e o critério é TAMANHO: 600 no lockup (≥ 20px — login, corpo do
   launcher, impressão) e 800 nos caps de 12–13px do header, onde o 600 perde
   traço contra o quase-preto. Uma fonte, dois pesos, dois arquivos.

   `font-display: swap`: o wordmark aparece na hora com a pilha de sistema e
   troca quando a fonte chega. O contrário (`block`) deixaria a marca invisível
   no primeiro paint — pior num tablet de armazém com rede ruim.

   ⚠ Os arquivos são a versão **Fontspring DEMO**. Cobrem A–Z, a–z e 0–9 (o que
   o wordmark precisa), mas licença de demonstração não cobre uso em produção:
   antes do deploy, trocar pelos arquivos licenciados mantendo estes nomes —
   nenhuma outra linha muda. */
@font-face {
  font-family: "Visby CF";
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  src: url("fonts/visbycf-demibold.otf") format("opentype");
}
@font-face {
  font-family: "Visby CF";
  font-weight: 800;
  font-style: normal;
  font-display: swap;
  src: url("fonts/visbycf-heavy.otf") format("opentype");
}

/* ── Níveis do app (§3) ──────────────────────────────────────────────────── */

/* header de coluna, rótulo de campo, título de seção de painel, eyebrow.
   Caps é SEMPRE --tc-text-muted (§3); nunca caps em texto primário. */
.tc-type-label {
  font: 600 11px/14px var(--tc-font-ui);
  letter-spacing: .06em;
  text-transform: uppercase;
}

/* subtítulo de célula, metadado, timestamp de sync, hint */
.tc-type-meta { font: 400 12px/16px var(--tc-font-ui); }

/* DEFAULT do sistema: célula de tabela, item de menu, corpo de painel.
   13/18 é o piso e o padrão — densidade é requisito, não se "areja" tabela
   com 16px. */
.tc-type-body { font: 400 13px/18px var(--tc-font-ui); }

/* dado principal da célula (cliente), valor destacado no corpo */
.tc-type-emphasis { font: 600 13px/18px var(--tc-font-ui); }

/* input, select, botão, chip. O §3 admite 400 e 600 no mesmo nível: o peso
   distingue rótulo de controle (600) de conteúdo digitado (400). */
.tc-type-control        { font: 400 14px/20px var(--tc-font-ui); }
.tc-type-control-strong { font: 600 14px/20px var(--tc-font-ui); }

/* título de painel lateral, título de card */
.tc-type-title { font: 600 16px/22px var(--tc-font-ui); }

/* título de página/módulo */
.tc-type-page { font: 600 20px/26px var(--tc-font-ui); }

/* número de KPI em card (não-TV).
   A shorthand `font` RESETA font-variant-numeric, por isso ele é redeclarado
   logo abaixo — a ordem importa. */
.tc-type-kpi {
  font: 700 28px/32px var(--tc-font-mono);
  font-variant-numeric: tabular-nums;
}

/* ── Níveis da TV (§3) ───────────────────────────────────────────────────── */
.tc-type-tv-value     { font: 700 64px/68px var(--tc-font-mono);
                        font-variant-numeric: tabular-nums; }
.tc-type-tv-hero      { font: 700 112px/112px var(--tc-font-mono);
                        font-variant-numeric: tabular-nums; }
.tc-type-tv-title     { font: 800 26px/30px var(--tc-font-ui);
                        letter-spacing: .01em; text-transform: uppercase; }
.tc-type-tv-qualifier { font: 400 17px/24px var(--tc-font-ui); }

/* ── Números tabulares (§3) ──────────────────────────────────────────────────
   TODO número que se compara em coluna usa .tc-num: valores, quantidades,
   datas, prazos, tempos de etapa, IDs de PV.

   Mono NÃO garante tabular. As três plataformas têm mono no sistema, com
   larguras de avanço diferentes (SF Mono ≠ Cascadia ≠ Roboto Mono), e o Roboto
   Mono tem `tnum` fora do default para o zero em algumas versões. Por isso a
   declaração é explícita e redundante (a propriedade moderna + o
   font-feature-settings, que cobre iOS < 16.4 e WebView antiga), e nunca se
   depende da família.

   Consequência de layout, que vale lembrar aqui porque é onde se erra:
   coluna numérica se dimensiona por `min-width` em px, jamais em `ch` nem numa
   largura calculada de um mono específico. Alinhamento vertical vem do tabular;
   largura vem do CSS. */
.tc-num {
  font-family: var(--tc-font-mono);
  font-variant-numeric: tabular-nums lining-nums;
  font-feature-settings: "tnum" 1, "lnum" 1;
  letter-spacing: 0;                  /* mono nunca recebe tracking */
}

/* Número que vive em texto de UI e ainda assim se compara em coluna (contador
   de aba, chip de KPI): alinha sem trocar de família. SF Pro no iOS usa figuras
   proporcionais por default, então isto não é redundante. */
.tc-num-ui {
  font-variant-numeric: tabular-nums lining-nums;
  font-feature-settings: "tnum" 1, "lnum" 1;
}

/* ── Marca (§11) ─────────────────────────────────────────────────────────────
   Visby CF é a fonte da MARCA, não da interface: uso restrito ao wordmark e aos
   lockups. Nunca em UI, tabela, botão ou dashboard — display em corpo 13px numa
   tabela de 200 linhas custa legibilidade.

   O peso é por TAMANHO, não por gosto: DemiBold 600 no lockup (≥ 20px — login,
   corpo do launcher, impressão) e Heavy 800 nos caps de 12–13px do header, onde
   o 600 perde traço contra o quase-preto.

   `line-height: 1` é obrigatório e não é estética: align-items:center
   centraliza a CAIXA DE LINHA, que carrega o descendente que um wordmark em
   caixa alta nunca usa. Sem isso a marca pende ~6–8% abaixo do eixo das
   capitais. A segunda metade da correção é o translateY em px no <svg> do
   símbolo, que fica no componente (§11). */
.tc-wordmark {
  font-family: var(--tc-font-brand);
  font-weight: 600;
  line-height: 1;
  letter-spacing: .05em;
  text-transform: uppercase;
  white-space: nowrap;
}
.tc-wordmark-sm {
  font-family: var(--tc-font-brand);
  font-weight: 800;
  font-size: 13px;
  line-height: 1;
  letter-spacing: .08em;
  text-transform: uppercase;
  white-space: nowrap;
}

/* ── Nome da TELA no header (§11, lockup "símbolo + nome da tela") ────────────
   Mesma medida do `.tc-wordmark-sm` — caps 13px, tracking .08em, line-height 1,
   para o ajuste óptico do símbolo continuar valendo —, mas em `--tc-font-ui`.

   POR QUE NÃO É A VISBY. Decisão de 14/08/2026 (Onda 1), que fecha a pendência
   registrada no §3: os arquivos em uso não têm NENHUM glifo acentuado, e a
   partir deste módulo os nomes de tela passam a ter — SEPARAÇÃO E ROTAS, e
   depois CONFIGURAÇÕES, LOGÍSTICA, INDÚSTRIA. Como a Visby é a primeira da
   pilha, o navegador cairia para o `system-ui` só nos caracteres ausentes: a
   palavra sai meio numa fonte e meio noutra. Não some — passa despercebido em
   revisão, que é pior.

   Alternativa descartada: obter o arquivo completo da fonte. Resolveria o
   glifo, não o princípio — o §3 já dizia que a Visby é "fonte da marca, não da
   interface", e nome de tela é interface. Ela fica exclusiva do wordmark e dos
   lockups do §11, que é onde ela sempre pertenceu.

   Peso 600 e não 800: o §3 permite 400, 600 e 700, com 700 restrito a KPI/TV, e
   o 800 da Visby existia porque o desenho dela perde traço no quase-preto do
   header. `system-ui` não tem esse problema — no Windows o 800 nem sequer é um
   corte real da Segoe UI Variable. */
.tc-screen-name {
  font: 600 13px/1 var(--tc-font-ui);
  letter-spacing: .08em;
  text-transform: uppercase;
  white-space: nowrap;
}
