/* ============================================================================
   SISMOB — DESIGN TOKENS v1 (canônico)
   Fonte de verdade visual do produto. Aprovado pelo Guilherme em 2026-08-22.
   Referência renderizada: canvas "Sismob Design System" (Claude Design).

   COMO MUDAR O TOM DE COR DO SISTEMA INTEIRO
   Edite APENAS os "botões de tom" da seção 1 (matiz/croma). Toda a rampa de
   marca, cinzas e superfícies deriva deles via OKLCH — nenhum componente e
   nenhum token semântico precisa ser tocado. Ex.: --sismob-matiz: 160 deixa
   o sistema verde; --sismob-croma: 0.6 deixa tudo mais sóbrio.

   REGRAS (ver design/README.md):
   - Tela nunca usa cor literal; usa var(--cor-*).
   - --cor-ia é EXCLUSIVA de autoria de IA (contrato de disclosure).
   - Tokens de estado espelham api/ontologia/entidades.yaml.
   - Mudança aqui = PR neste repo, nunca override local.
   ========================================================================== */

:root {
  /* --------------------------------------------------------------
     1 · BOTÕES DE TOM — o único lugar a editar para re-tintar
     -------------------------------------------------------------- */
  --sismob-matiz: 252;        /* matiz da marca (252 = azul aprovado)        */
  --sismob-matiz-cinza: 248;  /* matiz dos cinzas (frios, quase neutros)     */
  --sismob-croma: 1;          /* multiplicador global de saturação (0..1.5)  */
  --sismob-matiz-ia: 295;     /* matiz EXCLUSIVO de autoria de IA (violeta)  */
  --sismob-matiz-sucesso: 155;
  --sismob-matiz-alerta: 65;
  --sismob-matiz-perigo: 25;

  /* --------------------------------------------------------------
     2 · PRIMITIVAS (derivadas dos botões — não editar à mão)
     Comentário = hex de referência com os botões no padrão.
     -------------------------------------------------------------- */
  --azul-900: oklch(0.245 calc(0.045 * var(--sismob-croma)) var(--sismob-matiz)); /* ≈ #0E1B2C */
  --azul-800: oklch(0.290 calc(0.055 * var(--sismob-croma)) var(--sismob-matiz)); /* ≈ #14273F */
  --azul-700: oklch(0.335 calc(0.075 * var(--sismob-croma)) var(--sismob-matiz)); /* ≈ #1C3A5E */
  --azul-600: oklch(0.420 calc(0.095 * var(--sismob-croma)) var(--sismob-matiz)); /* ≈ #245081 */
  --azul-500: oklch(0.500 calc(0.110 * var(--sismob-croma)) var(--sismob-matiz)); /* ≈ #2F66A3 */
  --azul-400: oklch(0.620 calc(0.090 * var(--sismob-croma)) var(--sismob-matiz)); /* ≈ #5B8AC0 */
  --azul-300: oklch(0.740 calc(0.060 * var(--sismob-croma)) var(--sismob-matiz)); /* ≈ #8FB0D6 */
  --azul-100: oklch(0.930 calc(0.018 * var(--sismob-croma)) var(--sismob-matiz)); /* ≈ #E1EBF5 */

  --cinza-950: oklch(0.180 calc(0.015 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #0F1418 */
  --cinza-900: oklch(0.235 calc(0.022 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #16202B */
  --cinza-800: oklch(0.300 calc(0.022 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #232B34 */
  --cinza-700: oklch(0.370 calc(0.025 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #33404E */
  --cinza-600: oklch(0.440 calc(0.028 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #4B5866 */
  --cinza-500: oklch(0.510 calc(0.032 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #5A6B7E */
  --cinza-400: oklch(0.660 calc(0.028 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #8595A6 */
  --cinza-300: oklch(0.790 calc(0.018 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #B4BEC9 */
  --cinza-200: oklch(0.895 calc(0.010 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #D8DEE6 */
  --cinza-100: oklch(0.945 calc(0.006 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #EBEFF4 */
  --cinza-50:  oklch(0.973 calc(0.004 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #F4F6F9 */

  --ia-700:  oklch(0.450 0.190 var(--sismob-matiz-ia)); /* ≈ #6941C6 — croma fixo: disclosure não desbota */
  --ia-400:  oklch(0.630 0.150 var(--sismob-matiz-ia)); /* ≈ #9F7AEA */
  --ia-borda:oklch(0.870 0.055 var(--sismob-matiz-ia)); /* ≈ #D9CFF2 */
  --ia-100:  oklch(0.940 0.028 var(--sismob-matiz-ia)); /* ≈ #EFEAFB */
  --ia-900:  oklch(0.360 0.110 var(--sismob-matiz-ia)); /* ≈ #4A3B78 (escuro) */

  --sucesso-600: oklch(0.520 0.105 var(--sismob-matiz-sucesso)); /* ≈ #1B7F4D */
  --sucesso-400: oklch(0.680 0.105 var(--sismob-matiz-sucesso)); /* ≈ #4CAF7E */
  --sucesso-100: oklch(0.945 0.028 var(--sismob-matiz-sucesso)); /* ≈ #E2F3EA */

  --alerta-600:  oklch(0.530 0.115 var(--sismob-matiz-alerta));  /* ≈ #B25E09 */
  --alerta-400:  oklch(0.720 0.110 var(--sismob-matiz-alerta));  /* ≈ #E09A4B */
  --alerta-900:  oklch(0.400 0.075 var(--sismob-matiz-alerta));  /* ≈ #6B4A10 */
  --alerta-100:  oklch(0.955 0.022 var(--sismob-matiz-alerta));  /* ≈ #FCEFDD */
  --alerta-soft: oklch(0.990 0.006 var(--sismob-matiz-alerta));  /* ≈ #FFFDF9 */
  --alerta-borda:oklch(0.850 0.065 var(--sismob-matiz-alerta));  /* ≈ #ECC894 */

  --perigo-600:  oklch(0.500 0.160 var(--sismob-matiz-perigo));  /* ≈ #C03535 */
  --perigo-400:  oklch(0.660 0.130 var(--sismob-matiz-perigo));  /* ≈ #E06A6A */
  --perigo-900:  oklch(0.350 0.110 var(--sismob-matiz-perigo));  /* ≈ #7C2222 */
  --perigo-100:  oklch(0.940 0.025 var(--sismob-matiz-perigo));  /* ≈ #FBE7E7 */
  --perigo-borda:oklch(0.800 0.070 var(--sismob-matiz-perigo));  /* ≈ #E8A8A8 */

  /* --------------------------------------------------------------
     3 · SEMÂNTICOS — tema claro (o que os componentes usam)
     -------------------------------------------------------------- */
  --cor-fundo:        var(--cinza-50);
  --cor-superficie:   #FFFFFF;
  --cor-superficie-2: var(--cinza-100);
  --cor-borda:        var(--cinza-200);
  --cor-texto:        var(--cinza-900);
  --cor-texto-2:      var(--cinza-500);
  --cor-texto-3:      var(--cinza-400);
  --cor-desabilitado: var(--cinza-300);
  --cor-marca:        var(--azul-700);
  --cor-marca-forte:  var(--azul-800);   /* pressed */
  --cor-marca-acao:   var(--azul-500);   /* links, foco */
  --cor-marca-suave:  var(--azul-100);   /* seleção/realce */
  --cor-ia:           var(--ia-700);     /* EXCLUSIVO autoria de IA */
  --cor-ia-suave:     var(--ia-100);
  --cor-ia-borda:     var(--ia-borda);
  --cor-sucesso:      var(--sucesso-600);
  --cor-sucesso-suave:var(--sucesso-100);
  --cor-alerta:       var(--alerta-600);
  --cor-alerta-suave: var(--alerta-100);
  --cor-alerta-fundo: var(--alerta-soft);
  --cor-alerta-borda: var(--alerta-borda);
  --cor-alerta-texto: var(--alerta-900);
  --cor-perigo:       var(--perigo-600);
  --cor-perigo-suave: var(--perigo-100);
  --cor-perigo-borda: var(--perigo-borda);
  --cor-perigo-texto: var(--perigo-900);

  /* --------------------------------------------------------------
     4 · ESTADOS DO DOMÍNIO (espelham api/ontologia/entidades.yaml)
     Par fg/bg por estado. Estado novo no domínio = token novo aqui.
     -------------------------------------------------------------- */
  --estagio-novo-fg: var(--azul-500);            --estagio-novo-bg: var(--azul-100);
  --estagio-em-qualificacao-fg: var(--alerta-600); --estagio-em-qualificacao-bg: var(--alerta-100);
  --estagio-qualificado-fg: var(--sucesso-600);  --estagio-qualificado-bg: var(--sucesso-100);
  --estagio-visita-agendada-fg: var(--ia-700);   --estagio-visita-agendada-bg: var(--ia-100);
  --estagio-desqualificado-fg: var(--cinza-600); --estagio-desqualificado-bg: var(--cinza-100);

  --imovel-ativo-fg: var(--sucesso-600);   --imovel-ativo-bg: var(--sucesso-100);
  --imovel-inativo-fg: var(--cinza-600);   --imovel-inativo-bg: var(--cinza-100);
  --imovel-vendido-fg: var(--azul-600);    --imovel-vendido-bg: var(--azul-100);
  --imovel-alugado-fg: var(--ia-700);      --imovel-alugado-bg: var(--ia-100);

  --autor-humano-fg: var(--azul-600);      --autor-humano-bg: var(--azul-100);
  --autor-ia-fg: var(--ia-700);            --autor-ia-bg: var(--ia-100);
  --autor-sistema-fg: var(--cinza-600);    --autor-sistema-bg: var(--cinza-100);

  /* Bloco 4 — statusEditorial do Imovel (entidades.yaml: estados_editorial) */
  --editorial-rascunho-fg: var(--cinza-600);              --editorial-rascunho-bg: var(--cinza-100);
  --editorial-aguardando-aprovacao-fg: var(--alerta-600); --editorial-aguardando-aprovacao-bg: var(--alerta-100);
  --editorial-publicado-fg: var(--sucesso-600);           --editorial-publicado-bg: var(--sucesso-100);
  --editorial-rejeitado-fg: var(--perigo-600);            --editorial-rejeitado-bg: var(--perigo-100);

  /* Bloco 4 — eixos operacionais do Imovel (booleans combináveis, item 25) */
  --op-bloqueado-fg: var(--perigo-600);      --op-bloqueado-bg: var(--perigo-100);
  --op-destaque-fg: var(--azul-600);         --op-destaque-bg: var(--azul-100);
  --op-em-visita-fg: var(--sucesso-600);     --op-em-visita-bg: var(--sucesso-100);
  --op-em-manutencao-fg: var(--alerta-600);  --op-em-manutencao-bg: var(--alerta-100);

  /* Bloco 5 — Atendimento IA (Conversa, Mensagem, DecisaoIa, PreCaptacao).
     Operador de conversa: IA usa --autor-ia-* (violeta, autoria); HUMANO usa --autor-humano-*. */
  --conversa-aberta-fg: var(--azul-600);       --conversa-aberta-bg: var(--azul-100);
  --conversa-arquivada-fg: var(--cinza-600);   --conversa-arquivada-bg: var(--cinza-100);

  --entrega-pendente-fg: var(--cinza-500);     --entrega-pendente-bg: var(--cinza-100);
  --entrega-enviada-fg: var(--cinza-600);      --entrega-enviada-bg: var(--cinza-100);
  --entrega-entregue-fg: var(--azul-600);      --entrega-entregue-bg: var(--azul-100);
  --entrega-lida-fg: var(--sucesso-600);       --entrega-lida-bg: var(--sucesso-100);
  --entrega-falha-fg: var(--perigo-600);       --entrega-falha-bg: var(--perigo-100);

  --revisao-pendente-fg: var(--alerta-600);    --revisao-pendente-bg: var(--alerta-100);
  --revisao-aprovada-fg: var(--sucesso-600);   --revisao-aprovada-bg: var(--sucesso-100);
  --revisao-revertida-fg: var(--perigo-600);   --revisao-revertida-bg: var(--perigo-100);

  --precaptacao-pendente-fg: var(--azul-600);  --precaptacao-pendente-bg: var(--azul-100);
  --precaptacao-convertida-fg: var(--sucesso-600); --precaptacao-convertida-bg: var(--sucesso-100);
  --precaptacao-descartada-fg: var(--cinza-600);   --precaptacao-descartada-bg: var(--cinza-100);

  /* Bloco 6 — Financeiro de Locação (docs/15 §Telas): ciclos de
     ContratoLocacao e Cobranca (entidades.yaml). FALHA_EMISSAO é estado
     de primeira classe (anti-koins R4) = perigo. Nada aqui usa o violeta
     (--cor-ia segue exclusivo de autoria de IA). */
  --contrato-rascunho-fg: var(--cinza-600);    --contrato-rascunho-bg: var(--cinza-100);
  --contrato-ativo-fg: var(--sucesso-600);     --contrato-ativo-bg: var(--sucesso-100);
  --contrato-encerrado-fg: var(--azul-600);    --contrato-encerrado-bg: var(--azul-100);
  --contrato-rescindido-fg: var(--perigo-600); --contrato-rescindido-bg: var(--perigo-100);

  --cobranca-prevista-fg: var(--cinza-500);    --cobranca-prevista-bg: var(--cinza-100);
  --cobranca-emitida-fg: var(--azul-600);      --cobranca-emitida-bg: var(--azul-100);
  --cobranca-paga-fg: var(--sucesso-600);      --cobranca-paga-bg: var(--sucesso-100);
  --cobranca-vencida-fg: var(--alerta-600);    --cobranca-vencida-bg: var(--alerta-100);
  --cobranca-cancelada-fg: var(--cinza-600);   --cobranca-cancelada-bg: var(--cinza-100);
  --cobranca-falha-emissao-fg: var(--perigo-600); --cobranca-falha-emissao-bg: var(--perigo-100);

  /* Bloco 6 — RepasseProprietario (schema: RepasseStatus) e estado DERIVADO
     da IptuParcela (pagaEm/vencimento — não é enum no banco, mas é estado de
     UI de primeira classe). FALHOU = perigo (anti-koins R4, mesmo racional da
     FALHA_EMISSAO). CONCILIADO é o único badge de fundo FORTE do financeiro:
     estado terminal do dinheiro (repasse conferido no extrato). Nada aqui usa
     o violeta (--cor-ia segue exclusivo de autoria de IA). */
  --repasse-aberto-fg: var(--cinza-500);       --repasse-aberto-bg: var(--cinza-100);
  --repasse-calculado-fg: var(--azul-600);     --repasse-calculado-bg: var(--azul-100);
  --repasse-agendado-fg: var(--alerta-600);    --repasse-agendado-bg: var(--alerta-100);
  --repasse-executado-fg: var(--sucesso-600);  --repasse-executado-bg: var(--sucesso-100);
  --repasse-conciliado-fg: var(--cinza-50);    --repasse-conciliado-bg: var(--sucesso-600);
  --repasse-falhou-fg: var(--perigo-600);      --repasse-falhou-bg: var(--perigo-100);

  --iptu-parcela-pendente-fg: var(--cinza-500); --iptu-parcela-pendente-bg: var(--cinza-100);
  --iptu-parcela-paga-fg: var(--sucesso-600);   --iptu-parcela-paga-bg: var(--sucesso-100);
  --iptu-parcela-vencida-fg: var(--alerta-600); --iptu-parcela-vencida-bg: var(--alerta-100);

  /* Bloco 7 passo 6 — FRANQUIA de consumo do plano (item 70, anti-koins).
     StatusFranquia (billing/franquia.service.ts) é enum NOVO do domínio —
     DENTRO|ALERTA(≥80%)|ESGOTADA — e por isso ganha família própria; o
     status da FaturaPlano NÃO ganha: o enum é idêntico ao da Cobranca
     (PREVISTA|EMITIDA|PAGA|VENCIDA|CANCELADA|FALHA_EMISSAO) e reusa
     --cobranca-*.
     ESGOTADA é o único estado de fundo FORTE aqui (mesmo racional do
     --repasse-conciliado): o cliente não pode descobrir o esgotamento
     depois — tem que ser inconfundível ANTES da fatura. `-barra` é o
     preenchimento da barra de consumo; `--franquia-trilha` é o trilho.
     Nada aqui usa o violeta (--cor-ia segue exclusivo de autoria de IA). */
  --franquia-dentro-fg: var(--sucesso-600);   --franquia-dentro-bg: var(--sucesso-100);
  --franquia-dentro-barra: var(--sucesso-600);
  --franquia-alerta-fg: var(--alerta-600);    --franquia-alerta-bg: var(--alerta-100);
  --franquia-alerta-barra: var(--alerta-600);
  --franquia-esgotada-fg: var(--cinza-50);    --franquia-esgotada-bg: var(--perigo-600);
  --franquia-esgotada-barra: var(--perigo-600);
  --franquia-trilha: var(--cinza-200);

  /* Bloco 7 passo 5 — Pessoas & Acesso: Equipe.ativa (item 57) e Usuario.ativo
     (item 56/72 — usuário ATIVO é o assento cobrado). Inativo é ESTADO, não
     erro: cinza neutro, nunca perigo. Nada aqui usa o violeta
     (--cor-ia segue exclusivo de autoria de IA). */
  --equipe-ativa-fg: var(--sucesso-600);    --equipe-ativa-bg: var(--sucesso-100);
  --equipe-inativa-fg: var(--cinza-600);    --equipe-inativa-bg: var(--cinza-100);
  --usuario-ativo-fg: var(--sucesso-600);   --usuario-ativo-bg: var(--sucesso-100);
  --usuario-inativo-fg: var(--cinza-600);   --usuario-inativo-bg: var(--cinza-100);

  /* --------------------------------------------------------------
     5 · TIPOGRAFIA · ESPAÇO · RAIO · ELEVAÇÃO · TOQUE
     -------------------------------------------------------------- */
  --fonte-display: 'Sora', 'Segoe UI', sans-serif;
  --fonte-corpo:   'Instrument Sans', 'Segoe UI', sans-serif;
  --fonte-dados:   'JetBrains Mono', Consolas, monospace;

  --tipo-display: 700 28px/34px var(--fonte-display); /* letter-spacing -0.02em */
  --tipo-titulo:  600 22px/28px var(--fonte-display);
  --tipo-secao:   600 17px/24px var(--fonte-display);
  --tipo-corpo:   400 15px/22px var(--fonte-corpo);
  --tipo-legenda: 400 13px/18px var(--fonte-corpo);
  --tipo-rotulo:  600 11px/14px var(--fonte-corpo);   /* caps, letter-spacing 0.06em */
  --tipo-dados:   500 13px/18px var(--fonte-dados);

  --espaco-1: 4px;  --espaco-2: 8px;  --espaco-3: 12px; --espaco-4: 16px;
  --espaco-5: 20px; --espaco-6: 24px; --espaco-7: 32px; --espaco-8: 40px;

  --raio-sm: 6px; --raio-md: 10px; --raio-lg: 14px; --raio-xl: 20px; --raio-cheio: 999px;

  --elevacao-1: 0 1px 2px oklch(0.235 0.022 var(--sismob-matiz-cinza) / 0.06);
  --elevacao-2: 0 4px 12px oklch(0.235 0.022 var(--sismob-matiz-cinza) / 0.08);
  --elevacao-3: 0 12px 32px oklch(0.235 0.022 var(--sismob-matiz-cinza) / 0.14);

  --toque-minimo: 44px;

  /* --------------------------------------------------------------
     6 · VIDRO — superfícies translúcidas (linguagem da landing;
     o app é a versão densa, o site do tenant a cinematográfica).
     Derivam dos semânticos: funcionam no claro/escuro e re-tintam
     com os botões de tom (base do tema por tenant no builder 4b).
     Uso: background: var(--vidro-fundo);
          border: 1px solid var(--vidro-borda);
          box-shadow: var(--vidro-brilho);
          backdrop-filter: blur(var(--vidro-blur)) saturate(var(--vidro-saturacao));
     -------------------------------------------------------------- */
  --vidro-fundo: color-mix(in oklch, var(--cor-superficie) 62%, transparent);
  --vidro-fundo-denso: color-mix(in oklch, var(--cor-superficie) 82%, transparent);
  --vidro-borda: color-mix(in oklch, var(--cor-texto) 14%, transparent);
  --vidro-brilho: inset 0 1px 0 color-mix(in oklch, white 10%, transparent);
  --vidro-blur: 14px;
  --vidro-saturacao: 1.3;
}

/* ==============================================================
   TEMA ESCURO — só os semânticos mudam; primitivas e estados
   continuam derivando dos mesmos botões de tom.
   Ative com <html data-tema="escuro"> (ou espelhe via
   @media (prefers-color-scheme: dark) no shell do app).
   ============================================================== */
[data-tema="escuro"] {
  --cor-fundo:        var(--cinza-950);
  --cor-superficie:   oklch(0.270 calc(0.022 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #171D24 */
  --cor-superficie-2: var(--cinza-800);
  --cor-borda:        oklch(0.340 calc(0.024 * var(--sismob-croma)) var(--sismob-matiz-cinza)); /* ≈ #2A3440 */
  --cor-texto:        oklch(0.930 0.006 var(--sismob-matiz-cinza));                              /* ≈ #E8EDF2 */
  --cor-texto-2:      oklch(0.700 0.020 var(--sismob-matiz-cinza));                              /* ≈ #9AA8B6 */
  --cor-texto-3:      oklch(0.620 0.022 var(--sismob-matiz-cinza));                              /* ≈ #7E8C9A */
  --cor-desabilitado: var(--cinza-700);
  --cor-marca:        var(--azul-400);
  --cor-marca-forte:  var(--azul-300);
  --cor-marca-acao:   var(--azul-400);
  --cor-marca-suave:  var(--azul-800);
  --cor-ia:           var(--ia-400);
  --cor-ia-suave:     var(--ia-900);
  --cor-ia-borda:     var(--ia-900);
  --cor-sucesso:      var(--sucesso-400);
  --cor-sucesso-suave:oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --cor-alerta:       var(--alerta-400);
  --cor-alerta-suave: oklch(0.280 0.045 var(--sismob-matiz-alerta));
  --cor-alerta-fundo: oklch(0.230 0.020 var(--sismob-matiz-alerta));
  --cor-alerta-borda: oklch(0.460 0.075 var(--sismob-matiz-alerta));
  --cor-alerta-texto: oklch(0.800 0.085 var(--sismob-matiz-alerta));
  --cor-perigo:       var(--perigo-400);
  --cor-perigo-suave: oklch(0.280 0.055 var(--sismob-matiz-perigo));
  --cor-perigo-borda: oklch(0.450 0.095 var(--sismob-matiz-perigo));
  --cor-perigo-texto: var(--perigo-borda);

  --estagio-novo-bg: var(--azul-800);
  --estagio-em-qualificacao-fg: var(--alerta-400); --estagio-em-qualificacao-bg: oklch(0.280 0.045 var(--sismob-matiz-alerta));
  --estagio-qualificado-fg: var(--sucesso-400);    --estagio-qualificado-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --estagio-visita-agendada-fg: var(--ia-400);     --estagio-visita-agendada-bg: var(--ia-900);
  --estagio-desqualificado-fg: var(--cinza-300);   --estagio-desqualificado-bg: var(--cinza-800);
  --imovel-ativo-fg: var(--sucesso-400);           --imovel-ativo-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --imovel-inativo-fg: var(--cinza-300);           --imovel-inativo-bg: var(--cinza-800);
  --imovel-vendido-fg: var(--azul-400);            --imovel-vendido-bg: var(--azul-800);
  --imovel-alugado-fg: var(--ia-400);              --imovel-alugado-bg: var(--ia-900);
  --autor-humano-fg: var(--azul-400);              --autor-humano-bg: var(--azul-800);
  --autor-ia-fg: var(--ia-400);                    --autor-ia-bg: var(--ia-900);
  --autor-sistema-fg: var(--cinza-300);            --autor-sistema-bg: var(--cinza-800);

  --editorial-rascunho-fg: var(--cinza-300);              --editorial-rascunho-bg: var(--cinza-800);
  --editorial-aguardando-aprovacao-fg: var(--alerta-400); --editorial-aguardando-aprovacao-bg: oklch(0.280 0.045 var(--sismob-matiz-alerta));
  --editorial-publicado-fg: var(--sucesso-400);           --editorial-publicado-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --editorial-rejeitado-fg: var(--perigo-400);            --editorial-rejeitado-bg: oklch(0.280 0.055 var(--sismob-matiz-perigo));

  --op-bloqueado-fg: var(--perigo-400);      --op-bloqueado-bg: oklch(0.280 0.055 var(--sismob-matiz-perigo));
  --op-destaque-fg: var(--azul-400);         --op-destaque-bg: var(--azul-800);
  --op-em-visita-fg: var(--sucesso-400);     --op-em-visita-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --op-em-manutencao-fg: var(--alerta-400);  --op-em-manutencao-bg: oklch(0.280 0.045 var(--sismob-matiz-alerta));

  --conversa-aberta-fg: var(--azul-400);       --conversa-aberta-bg: var(--azul-800);
  --conversa-arquivada-fg: var(--cinza-300);   --conversa-arquivada-bg: var(--cinza-800);
  --entrega-pendente-fg: var(--cinza-400);     --entrega-pendente-bg: var(--cinza-800);
  --entrega-enviada-fg: var(--cinza-300);      --entrega-enviada-bg: var(--cinza-800);
  --entrega-entregue-fg: var(--azul-400);      --entrega-entregue-bg: var(--azul-800);
  --entrega-lida-fg: var(--sucesso-400);       --entrega-lida-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --entrega-falha-fg: var(--perigo-400);       --entrega-falha-bg: oklch(0.280 0.055 var(--sismob-matiz-perigo));
  --revisao-pendente-fg: var(--alerta-400);    --revisao-pendente-bg: oklch(0.280 0.045 var(--sismob-matiz-alerta));
  --revisao-aprovada-fg: var(--sucesso-400);   --revisao-aprovada-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --revisao-revertida-fg: var(--perigo-400);   --revisao-revertida-bg: oklch(0.280 0.055 var(--sismob-matiz-perigo));
  --precaptacao-pendente-fg: var(--azul-400);  --precaptacao-pendente-bg: var(--azul-800);
  --precaptacao-convertida-fg: var(--sucesso-400); --precaptacao-convertida-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --precaptacao-descartada-fg: var(--cinza-300);   --precaptacao-descartada-bg: var(--cinza-800);

  /* Bloco 6 — Financeiro de Locação (docs/15 §Telas) */
  --contrato-rascunho-fg: var(--cinza-300);    --contrato-rascunho-bg: var(--cinza-800);
  --contrato-ativo-fg: var(--sucesso-400);     --contrato-ativo-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --contrato-encerrado-fg: var(--azul-400);    --contrato-encerrado-bg: var(--azul-800);
  --contrato-rescindido-fg: var(--perigo-400); --contrato-rescindido-bg: oklch(0.280 0.055 var(--sismob-matiz-perigo));

  --cobranca-prevista-fg: var(--cinza-400);    --cobranca-prevista-bg: var(--cinza-800);
  --cobranca-emitida-fg: var(--azul-400);      --cobranca-emitida-bg: var(--azul-800);
  --cobranca-paga-fg: var(--sucesso-400);      --cobranca-paga-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --cobranca-vencida-fg: var(--alerta-400);    --cobranca-vencida-bg: oklch(0.280 0.045 var(--sismob-matiz-alerta));
  --cobranca-cancelada-fg: var(--cinza-300);   --cobranca-cancelada-bg: var(--cinza-800);
  --cobranca-falha-emissao-fg: var(--perigo-400); --cobranca-falha-emissao-bg: oklch(0.280 0.055 var(--sismob-matiz-perigo));

  /* Bloco 6 — repasse + parcela de IPTU (par escuro dos tokens da seção 4) */
  --repasse-aberto-fg: var(--cinza-400);       --repasse-aberto-bg: var(--cinza-800);
  --repasse-calculado-fg: var(--azul-400);     --repasse-calculado-bg: var(--azul-800);
  --repasse-agendado-fg: var(--alerta-400);    --repasse-agendado-bg: oklch(0.280 0.045 var(--sismob-matiz-alerta));
  --repasse-executado-fg: var(--sucesso-400);  --repasse-executado-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --repasse-conciliado-fg: var(--cinza-950);   --repasse-conciliado-bg: var(--sucesso-400);
  --repasse-falhou-fg: var(--perigo-400);      --repasse-falhou-bg: oklch(0.280 0.055 var(--sismob-matiz-perigo));

  --iptu-parcela-pendente-fg: var(--cinza-400); --iptu-parcela-pendente-bg: var(--cinza-800);
  --iptu-parcela-paga-fg: var(--sucesso-400);   --iptu-parcela-paga-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --iptu-parcela-vencida-fg: var(--alerta-400); --iptu-parcela-vencida-bg: oklch(0.280 0.045 var(--sismob-matiz-alerta));

  /* Bloco 7 passo 6 — franquia do plano (par escuro dos tokens da seção 4) */
  --franquia-dentro-fg: var(--sucesso-400);   --franquia-dentro-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --franquia-dentro-barra: var(--sucesso-400);
  --franquia-alerta-fg: var(--alerta-400);    --franquia-alerta-bg: oklch(0.280 0.045 var(--sismob-matiz-alerta));
  --franquia-alerta-barra: var(--alerta-400);
  --franquia-esgotada-fg: var(--cinza-950);   --franquia-esgotada-bg: var(--perigo-400);
  --franquia-esgotada-barra: var(--perigo-400);
  --franquia-trilha: var(--cinza-800);

  /* Bloco 7 passo 5 — Pessoas & Acesso (par escuro dos tokens da seção 4) */
  --equipe-ativa-fg: var(--sucesso-400);    --equipe-ativa-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --equipe-inativa-fg: var(--cinza-300);    --equipe-inativa-bg: var(--cinza-800);
  --usuario-ativo-fg: var(--sucesso-400);   --usuario-ativo-bg: oklch(0.280 0.040 var(--sismob-matiz-sucesso));
  --usuario-inativo-fg: var(--cinza-300);   --usuario-inativo-bg: var(--cinza-800);
}
