/* theme.css — CAMADA DE TOKENS DE TEMA (compartilhada mobile + desktop).
 *
 * Fonte ÚNICA dos tokens de cor. Linkado PRIMEIRO no <head> das três frentes
 * (priv/static/index.html, priv/static/desktop/index.html e priv/static/ditar.html),
 * antes de qualquer outro estilo — assim os tokens já existem quando o CSS inline /
 * injetado usa var(--token), e a troca por prefers-color-scheme (CSS puro) acontece
 * antes do paint (sem flash).
 *
 * DOIS temas: NOITE (padrão) e DIA (@media prefers-color-scheme: light).
 * O ambiente decide sozinho — E a troca MANUAL já está EM PRODUÇÃO: o toggle
 * Auto/Dia/Noite na tela de login (mobile e desktop; #temaToggle, montado em
 * src-dom/core.ts, persistido em localStorage) grava data-theme="light"/"dark" no
 * <html>, e isso vence a mídia. Logo o bloco :root[data-theme="light"] NÃO é
 * fiação futura: é o que o usuário recebe quando clica "Dia". Ver docs/superpowers/
 * specs/2026-07-21-tema-dia-noite-design.md e .../2026-07-29-tema-dia-atenuado-
 * fundacao-design.md.
 *
 * ESTRUTURA — o arquivo tem DUAS camadas, e a divisão é o que impede divergência:
 *   1. PALETA: o valor literal, uma única vez por tema (--noite-*, --dia-*).
 *   2. TEMA: só MAPEIA token semântico -> token de paleta. Zero hex, zero rgba.
 * Antes, cada valor estava escrito duas vezes por tema (mídia + [data-theme]):
 * 4 lugares para 2 temas, e uma cor errada tinha onde se esconder. Agora não tem —
 * os blocos de tema continuam duplicados (CSS puro não deixa reaproveitar bloco
 * entre mídia e seletor), mas duplicam MAPEAMENTO, não valor.
 *
 * SEM TEMA: parte dos tokens não tem par de dia, e isso é decisão, não esquecimento
 * — são coisas do MUNDO (o papel impresso, o visor de foto, o mapa de botox) ou
 * escalas TRANSLÚCIDAS (agenda, coluna "$") em que o fundo do tema atravessa.
 * Moram na paleta com o nome semântico e não aparecem nos blocos de tema.
 *
 * REGRA: cor cravada em .css/.html/.ts é dívida — a catraca `cor:ci`
 * (scripts/cor-guard.mjs) conta os literais fora deste arquivo e só desce.
 * Literal legítimo (cor que vem do BACKEND, meta theme-color, arte SVG) entra
 * na allowlist do guarda com o motivo escrito, não passa calado.
 * Valor de tema mexido = rodar `npm run contraste` antes de commitar.
 *
 * INVARIANTE: os valores-NOITE aqui são idênticos aos literais que substituíram
 * pelo código — o tema noite NÃO muda de aparência. (Duas exceções conscientes,
 * de consolidação: os âmbares 255,193,7 / 245,158,11 / 245,200,60 e os vermelhos
 * 239,68,68 / 255,80,80 / 255,120,120 / 255,140,140 / 200,90,90 viraram um único
 * --warn-rgb / --danger-rgb. Diferença imperceptível, uma escala em vez de cinco.)
 * A prova é mecânica, mas o `--dump` cru NÃO dá diff vazio (ele também lista a
 * paleta, que cresce a cada token novo): filtre com `grep '^noite'` e compare
 * contra o estado anterior — só ADIÇÃO (`a`) é aceitável; linha ALTERADA (`c`) ou
 * REMOVIDA (`d`) é regressão.
 */

/* ---- PALETA: o valor literal mora aqui, uma única vez por tema ---- */
:root {
  /* ==== NOITE (padrão) = os valores de hoje ==== */
  --noite-bg: #0a1628;
  --noite-bg2: #06251a;
  --noite-surface: rgba(255, 255, 255, 0.045);
  --noite-card: rgba(255, 255, 255, 0.045);
  --noite-overlay: rgba(0, 0, 0, 0.55);
  --noite-txt: #eaf2ee;
  --noite-mut: #9fb1a9;
  --noite-line: rgba(124, 255, 176, 0.16);
  --noite-line-soft: rgba(255, 255, 255, 0.08); /* divisória neutra de linha/lista */
  --noite-mut-soft: rgba(255, 255, 255, 0.35); /* placeholder: recua de propósito */
  --noite-border-hover: rgba(255, 255, 255, 0.45); /* contorno no hover (calendário) */
  --noite-acc: #7cffb0;
  --noite-acc2: #25d366;
  --noite-acc2-hover: #1ebe5b; /* hover do botão de acento secundário (verde WhatsApp) */
  --noite-on-acc: #06251a; /* texto/ícone SOBRE fundo de acento (contraste inverte no dia) */
  --noite-on-acc2: #06281a; /* texto SOBRE var(--acc2) — selo (N) de formulário com dados */
  --noite-danger: #ff6b6b; /* erro */
  /* realce CLÍNICO do texto (marcação leve !!x!!) — NÃO é erro de sistema: o
     --danger é vermelho de bloqueio e um dia vai querer outro tom. No papel a
     cor é literal e escura (folha_html.ex e c1sign) — papel não tem tema. */
  --noite-realce: #ff5c5c;
  --noite-warn: #ffb020; /* aviso */
  --noite-ok: #22c55e; /* sucesso geral — verde SÓLIDO, distinto do mint pastel de --acc */
  --noite-info: #60a5fa; /* informação */
  --noite-panel: #0d2147; /* fundo OPACO de painel/select/dropdown/calendário */
  --noite-surface-2: rgba(255, 255, 255, 0.1); /* elevação: botão/barra/chip */
  --noite-surface-3: rgba(255, 255, 255, 0.18); /* elevação forte: hover/ativo */
  --noite-inset: rgba(0, 0, 0, 0.25); /* poço afundado na superfície: pre / miniatura de documento */
  --noite-toast-bg: rgba(0, 0, 0, 0.85); /* toast: única superfície INVERTIDA (escura nos dois temas) */
  --noite-toast-fg: #eaf2ee;

  /* BASES RGB — a MESMA cor em N opacidades (`rgba(var(--x-rgb), .18)`).
     Existem porque o front usa cada matiz em ~15 alphas diferentes; sem a base,
     cada alpha era um literal novo (e nenhum virava dia). Só os canais, sem
     `rgb()`, para poder compor qualquer alpha no ponto de uso. */
  --noite-acc-rgb: 124, 255, 176; /* verde-marca (--acc) */
  --noite-acc2-rgb: 37, 211, 102; /* verde WhatsApp (--acc2) */
  --noite-warn-rgb: 255, 176, 32; /* âmbar de atenção (--warn) */
  --noite-danger-rgb: 255, 90, 90; /* vermelho de erro/bloqueio */
  --noite-neg-rgb: 248, 113, 160; /* rosé: cancelado / apagado / obrigatório */
  --noite-fluxo-rgb: 148, 249, 247; /* ciano: paciente na clínica (fluxo) */
  --noite-info-rgb: 91, 157, 255; /* azul de informação/seleção */
  --noite-panel-rgb: 13, 33, 71; /* --panel translúcido (barra flutuante) */
  --noite-tint-rgb: 255, 255, 255; /* VÉU claro sobre fundo escuro (inverte no dia!) */
  /* Opacidade do véu que escurece o FUNDO DA GRADE (moldura das 4 tabelas do
     desktop). Não é cor: é o quanto de sombra. Precisa de valor por tema porque
     o MESMO fator não se lê igual nos dois — sobre o fundo escuro da noite, 20%
     é a nuance que o Cesar aprovou; sobre o cinza claro do dia, os mesmos 20%
     derrubam a superfície 40 níveis e a grade vira um bloco pesado (medido:
     201,204,202 -> 161,164,162 — "parece 80%"). O dia leva 5%. */
  --noite-grade-sombra: 0.2;
  /* FUNDO da moldura das grades (.agf-wrap/.lanc-wrap/.man-wrap). O token guarda o
     valor de background INTEIRO, não só uma cor — é o que deixa a noite ficar no
     empilhamento translúcido de sempre enquanto o dia passa a ser opaco, sem
     precisar de bloco por tema no desktop.css (que não tem nenhum, por desenho).
     Aqui a declaração é LETRA POR LETRA a que estava no desktop.css até 19/08/2026:
     a noite não muda de aparência, nem por rearredondamento. */
  --noite-grade-bg: linear-gradient(rgba(var(--shade-rgb), var(--noite-grade-sombra)), rgba(var(--shade-rgb), var(--noite-grade-sombra))), var(--noite-card);
  /* A ZEBRA (véu da LINHA PAR das tabelas) é uma PORCENTAGEM da linha clara, não
     uma cor: linha par = linha clara × (1 − --zebra). Assim ela não tem valor
     próprio para envelhecer — se a linha clara escurecer, o degrau acompanha
     sozinho no mesmo percentual, que é a regra que o Cesar fixou em 19/08/2026.
     Era literal `.0275` em três pontos do desktop.css até essa data.
     O valor da NOITE é o mesmo literal de antes: a noite não muda. */
  --noite-zebra: 0.0275;
  /* COR do véu da zebra. Separada do --tint-rgb porque a zebra tem regra própria:
     a linha par é a linha clara MENOS uma porcentagem dela (par = clara × (1 −
     --zebra)). Isso só é exato com véu PRETO — véu colorido soma um piso fixo e
     a porcentagem real encolhe conforme a linha clara escurece. No dia o véu é
     preto puro por isso. Na noite ele é branco (a zebra CLAREIA sobre fundo
     escuro) e o valor é o mesmo --noite-tint-rgb de sempre: a noite não muda. */
  --noite-zebra-rgb: 255, 255, 255;
  --noite-preenchido-rgb: 46, 160, 120; /* botão de campo JÁ PREENCHIDO (mobile) */

  /* TINTAS DE STATUS: no escuro são pálidas (fundo escuro), no dia ESCURECEM.
     Era exatamente aqui que o dia quebrava — texto âmbar-claro em painel branco
     (o botão "Localização" e o aviso do fluxo eram ilegíveis, 1.4:1). */
  --noite-warn-fg: #f5c451; /* texto/ícone âmbar sobre chip translúcido */
  --noite-on-warn: #3a2600; /* texto SOBRE --warn sólido (faixa da lixeira) */
  --noite-neg-fg: #f871a0; /* texto rosé (cancelar/excluir/campo obrigatório) */
  --noite-fluxo-fg: #94f9f7; /* texto ciano (entrada/na clínica) */
  --noite-danger-fg: #ff9a9a; /* texto de erro sobre chip translúcido */
  --noite-info-fg: #5b9dff; /* texto azul (seleção/plano) */

  --noite-ag-nao-confirmado: #f871a0; /* agConfirm: ícone "não confirmado" */

  /* Vaga ABERTA AO AUTOAGENDAMENTO (faixa no início da linha da agenda).
     Herdeiro do #0F0DF1 que o c1serenity usa na homeAgenda, clareado p/ ler
     sobre o escuro. SÓLIDO, e não uma das escalas translúcidas: são 3px de
     largura — a 40% de alpha o fundo atravessa e a faixa some. Índigo de
     propósito, longe do --acc (verde da seleção, que mora na MESMA borda) e
     do --info (azul-céu do selo de WhatsApp). */
  --noite-ag-autoagend: #8b8cff;

  /* SEMÁFORO do calendário da agenda (ocupação do dia, `Agenda.status/2`):
     verde = >50% vago · amarelo = ainda há vaga · vermelho = zero vaga.
     SÓLIDO, ao contrário das escalas translúcidas lá embaixo, e o motivo é o
     defeito que fechou: como véu (--acc2/--warn/--danger a 40-45%) o fundo do
     painel atravessava e comia o matiz — o amarelo virava marrom nos DOIS temas
     (medido: 255,176,32 a 45% sobre o #0d2147 da noite = 122,97,53 oliva; sobre
     o #d9d9d9 do dia = 188,151,123 bege) e o vermelho virava vinho/rosa. Semáforo
     que não lê como semáforo não informa nada.
     Escala PRÓPRIA em vez de reaproveitar --acc2/--warn/--danger: aqueles três já
     têm outro trabalho (verde do WhatsApp, faixa da lixeira, erro de sistema) e um
     dia vão querer outro tom sem levar o calendário junto.
     PASTEL (saturação 26-58%), a pedido do Cesar: o semáforo informa, não grita —
     ele divide a tela com as cores CLÍNICAS da agenda e não pode competir com elas.
     O amarelo é ancorado em MATIZ ~50°: a primeira tentativa (#e0a615) caiu em 42°
     e lia como laranja — âmbar não é amarelo, e num semáforo a diferença conta.
     O dia usa a mesma matiz mais funda — sobre o cinza claro do painel o pastel da
     noite quase não se destacaria. (--cal-txt não tem par: ver SEM TEMA.) */
  --noite-cal-livre: #a5dfb8; /* +50% livre */
  --noite-cal-pouca: #f0e08c; /* pouca vaga */
  --noite-cal-lotado: #f2a9a9; /* lotado */

  /* Prescrições / memórias de IA (cores diretas). */
  --noite-pres-sel: #5b9dff; /* borda do item de plano selecionado */
  --noite-pres-sel-bg: rgba(91, 157, 255, 0.12); /* fundo do item selecionado */
  --noite-mem-ia-revisar-bg: #7a5c00; /* badge "IA revisar" (âmbar) */
  --noite-mem-ia-revisar-fg: #ffd966;
  --noite-mem-ia-ok-bg: rgba(80, 200, 120, 0.18); /* badge "IA revisada" (verde) */
  --noite-mem-ia-ok-fg: #7ee2a8;
  --noite-mem-ia-rejeitada-bg: rgba(200, 90, 90, 0.18); /* badge "rejeitada" (vermelho) */
  --noite-mem-ia-rejeitada-fg: #ee7799;

  /* Selos de status do WhatsApp (waBadge) — escala de estado da mensagem.
     (agendada usa --info.) */
  --noite-wa-enviada: #9ca3af; /* enviado (cinza) */
  --noite-wa-recebida: #e5e7eb; /* entregue (cinza claro) */
  --noite-wa-lida: #38bdf8; /* lido (azul) */
  --noite-wa-confirmou: #22c55e; /* confirmou (verde) */
  --noite-wa-cancelou: #f87171; /* cancelou (vermelho) */
  --noite-wa-cancelada: #6b7280; /* cancelada (cinza escuro) */
  /* balões da conversa da IA: quem FALA se distingue pelo fundo, não por rótulo —
     é o mesmo idioma do WhatsApp, que é onde a conversa aconteceu de verdade. */
  --noite-ia-bolha-pac: #2a3942; /* paciente: o tom "recebida" do WhatsApp escuro */
  --noite-ia-bolha-ia: #005c4b; /* IA: o tom "enviada" (verde escuro) */
  --noite-ia-bolha-linha: #3b4a54; /* borda do balão */

  /* Situações da PENDÊNCIA (admin/pendSituacao) — escala de status (texto).
     (solicitou_contato usa --danger.) */
  --noite-pend-enviado: #ffb74d; /* enviado sem resposta / default (âmbar) */
  --noite-pend-falha: #ff8a65; /* falha de envio (laranja) */
  --noite-pend-lembrete: #7aa2ff; /* lembrete agendado (azul) */
  --noite-pend-agendado: #8a94a6; /* agendado (cinza) */

  /* Fundo da página de DITADO (ditar.html — página standalone que o celular abre
     para ditar num campo). É um GRADIENTE, não uma cor: mora aqui como token
     porque custom property aceita qualquer valor, e assim a página não crava nada. */
  --noite-ditar-bg: linear-gradient(135deg, #0a1628, #0d2147 60%, #0a3d62);

  /* Botão de FORMULÁRIO CLÍNICO — as abas do prontuário (.dtab) e o acesso rápido
     da agenda (.dfq-b). São duas coisas:
       vazio-bg  o botão SEM registro, que é o estado de REPOUSO. No dia ele desce
                 um degrau abaixo da superfície de trás: com o véu de cartão (3%)
                 ele sumia no fundo claro e "não tem nada aqui" só se lia contando
                 quais botões NÃO estavam âmbar. Na noite fica no cartão de sempre
                 — sobre fundo escuro o degrau já é nítido, e mexer nele seria
                 mudar uma tela de que ninguém reclamou.
       linha     o contorno. Na NOITE puxa para o âmbar, como realce pequeno do
                 grupo inteiro (pedido de 23/08/2026); no dia segue a linha comum,
                 que sobre branco já é contorno bastante — tema-contorno-nao-luminancia.
     Quem TEM registro segue âmbar cheio (`.tem`), do MESMO --warn-rgb: a cor de
     "tem conteúdo" mora num lugar só, senão o realce e o preenchimento descolam. */
  /* literal, e não `var(--noite-card)`: o `:root` acumula PALETA e mapeamento no
     mesmo seletor, então um valor `var(--noite-*)` aqui entra no conjunto que a
     guarda de paridade compara com o dia e reprova por ARTEFATO. É o mesmo
     véu de --noite-surface/--noite-card, repetido como eles já se repetem. */
  --noite-formclin-vazio-bg: rgba(255, 255, 255, 0.045);
  --noite-formclin-linha: rgba(var(--noite-warn-rgb), 0.45);

  /* ==== DIA ====
     ESCALA: a métrica é "% de luminância removida em relação ao #ffffff",
     declarada de propósito — sem métrica cada token recebe um desconto diferente e
     a incoerência só aparece na tela.
     ATENUADO em 02/08/2026: o dia estava claro demais na tela cheia de grade, e o
     Cesar pediu 15% a menos de luminosidade. A escala é UNIFORME (cada literal
     opaco x 0,85) de propósito — matiz e a relação entre as superfícies
     (--surface acima de --bg, --bg acima de --bg2) sobrevivem; escurecer só o
     fundo derrubaria o contraste das tintas cromáticas em vez de manter.
     Ficaram FORA da escala, e o motivo é o que decide se alguém pode mexer:
       --on-acc/--on-acc2/--on-warn  branco de TEXTO sobre chip colorido —
                            escurecer aqui derruba o contraste (com --acc mais
                            escuro ele SUBIU: 4,13:1 -> 5,38:1);
       --tint-rgb           base do VÉU (direção clara/escura), não brilho;
       tudo com alpha (--card/--line/--overlay/…) é véu relativo à superfície e
       acompanha sozinho.
     Mexer nesses valores obriga a re-rodar `npm run contraste`, porque escurecer a
     superfície derruba a razão de TODO primeiro plano médio-escuro.

     RÉGUA (19/08/2026): as superfícies neutras daqui NÃO se editam mais à mão —
     `npm run tema:claridade -- <0..1>` (scripts/tema-dia-claridade.mjs) move as
     seis de uma vez entre dois extremos gravados lá: 0 = o atenuado de 09/08,
     1 = o branco de antes de 02/08. A régua existe porque este dial já foi mexido
     quatro vezes em três semanas, e porque ela carrega o que a mão esquece: o
     --dia-panel-rgb tem de acompanhar o --dia-panel, e a ARESTA (--dia-line/
     --dia-card) anda ao CONTRÁRIO — preenchimento mais escuro precisa de contorno
     mais forte, senão o objeto some (foi o "sumiu o calendário" de 29/07).
     POSIÇÃO ATUAL (claridade): 1 (branco). */
  --dia-bg: #f4f7f5;
  --dia-bg2: #e9f1ec;
  --dia-surface: #ffffff;
  --dia-card: rgba(18, 32, 26, 0.03);
  --dia-overlay: rgba(0, 0, 0, 0.35);
  --dia-txt: #0f1b16;
  --dia-mut: #48564f;
  --dia-line: rgba(18, 32, 26, 0.14);
  --dia-line-soft: rgba(18, 32, 26, 0.1);
  --dia-mut-soft: rgba(18, 32, 26, 0.38);
  --dia-border-hover: rgba(18, 32, 26, 0.45);
  /* acentos e estados escurecidos JUNTO com as superfícies: sobre o fundo novo os
     valores anteriores caíam a 2,6–3,2 (já estavam em 3,4–4,2, abaixo de AA). */
  --dia-acc: #0d7a4a; /* verde-marca escurecido p/ contraste em fundo claro */
  --dia-acc2: #0f7740;
  --dia-acc2-hover: #0d6837;
  --dia-on-acc: #ffffff;
  --dia-on-acc2: #ffffff; /* o acc2 do dia é verde ESCURO: escuro sobre escuro dá 2,03 */
  --dia-danger: #b82626;
  --dia-realce: #c11616;
  --dia-warn: #994708;
  --dia-ok: #15803d; /* sucesso geral, escurecido p/ contraste em fundo claro (par de --noite-ok) */
  --dia-info: #195eb1;
  --dia-panel: #ffffff;
  --dia-surface-2: rgba(18, 32, 26, 0.06);
  --dia-surface-3: rgba(18, 32, 26, 0.11);
  --dia-inset: rgba(18, 32, 26, 0.06); /* poço afundado: o preto puro da noite daria cinza-médio no dia */
  --dia-toast-bg: rgba(18, 32, 26, 0.92);
  --dia-toast-fg: #eaf2ee; /* invertido: o toast é escuro nos DOIS temas */
  /* bases RGB: o véu inverte (claro -> escuro) e cada matiz escurece */
  --dia-acc-rgb: 13, 122, 74;
  --dia-acc2-rgb: 15, 119, 64;
  --dia-warn-rgb: 153, 71, 8;
  --dia-danger-rgb: 184, 38, 38;
  --dia-neg-rgb: 165, 20, 77;
  --dia-fluxo-rgb: 13, 94, 104;
  --dia-info-rgb: 25, 94, 177;
  --dia-panel-rgb: 255, 255, 255; /* ANDA COM --dia-panel: o painel translúcido tem de ser a MESMA cor do opaco */
  --dia-tint-rgb: 18, 32, 26;
  /* FUNDO da moldura das grades no dia: OPACO, e essa é a regra que o Cesar fixou
     em 19/08/2026 — a linha clara da tabela tem de valer EXATAMENTE o que está
     escrito aqui, e não "o que estiver embaixo + 3%". Era véu translúcido sobre o
     --card sobre o --bg, e por isso lia -7,06% do branco sem ninguém ter pedido:
     mexer no fundo da TELA movia a TABELA. Agora não move.
     RÉGUA: `npm run tema:grade -- <0..1>` — 0 = branco puro; 1 = o mesmo degrau de
     5% que a atenuação de 02/08 dava, agora aplicado ao branco.
     A ZEBRA (--dia-zebra, logo abaixo) NÃO entra na régua: ela chegou a entrar e a
     primeira volta do dial a zerou junto. Não é atenuação — é GUIA DE LEITURA, o
     que impede o olho de pular de linha. As quatro grades ainda têm divisória de
     1px por linha; a lista de convênios do A011 (.mconv-lista) não tem nenhuma, e
     ali a zebra é a ÚNICA separação.
     POSIÇÃO ATUAL (grade): 0 (branco puro). */
  --dia-grade-bg: #ffffff;
  --dia-zebra: 0.0275; /* 2,75% MAIS ESCURA que a linha clara, seja qual for ela */
  --dia-zebra-rgb: 0, 0, 0;
  --dia-preenchido-rgb: 13, 122, 74;
  /* tintas de status: escurecem para render sobre chip claro (>=4.5:1) */
  --dia-warn-fg: #753c07;
  --dia-on-warn: #ffffff; /* #3a2600 sobre o âmbar escuro do dia dá 1,84 — ilegível */
  --dia-neg-fg: #850f3e;
  --dia-fluxo-fg: #0a4f57;
  --dia-danger-fg: #8f1818;
  --dia-info-fg: #10447a;
  --dia-ag-nao-confirmado: #a5144d;
  --dia-ag-autoagend: #2f2ec9; /* mesmo índigo, fundo p/ o painel claro */
  /* semáforo do calendário: mesmo pastel, mais fundo (o cinza claro do painel
     apagaria o da noite). */
  --dia-cal-livre: #74c294;
  --dia-cal-pouca: #d3c159;
  --dia-cal-lotado: #dd8f8f;
  --dia-pres-sel: #195eb1;
  --dia-pres-sel-bg: rgba(29, 111, 208, 0.1);
  --dia-mem-ia-revisar-bg: #d9cfae;
  --dia-mem-ia-revisar-fg: #684e00;
  /* alpha do tinte MENOR que na noite (0.14/0.12 vs 0.18): o badge é translúcido
     sobre a superfície, e com a superfície atenuada o tinte forte derrubava o texto
     a 4,49-4,52. Baixar o alpha mantém o fg == --acc/--danger (um valor, um sentido). */
  --dia-mem-ia-ok-bg: rgba(15, 143, 87, 0.14);
  --dia-mem-ia-ok-fg: #0d7a4a;
  --dia-mem-ia-rejeitada-bg: rgba(217, 45, 45, 0.12);
  --dia-mem-ia-rejeitada-fg: #b82626;
  /* selos do WhatsApp: a escala se INVERTE (no escuro clareia, no claro escurece) */
  --dia-wa-enviada: #5b616d;
  --dia-wa-recebida: #2f3745;
  --dia-wa-lida: #035989;
  --dia-wa-confirmou: #126d34;
  --dia-wa-cancelou: #9d1818;
  --dia-wa-cancelada: #898f96;
  /* balões da conversa da IA no dia — literais, nunca var(--noite-*): token de
     paleta que aponta para o outro eixo reprova a guarda de paridade. */
  --dia-ia-bolha-pac: #eef1f4;
  --dia-ia-bolha-ia: #d9fdd3;
  --dia-ia-bolha-linha: #c6cdd4;
  /* situações da pendência */
  --dia-pend-enviado: #994708;
  --dia-pend-falha: #a5370a;
  --dia-pend-lembrete: #1942b8;
  --dia-pend-agendado: #4d555f;
  --dia-ditar-bg: linear-gradient(135deg, #eef4fb, #e4eef8 60%, #d7e7f5);

  /* pares do botão de formulário clínico — o porquê está no bloco da NOITE.
     VÉU, e não um cinza opaco: assim o degrau vale nos DOIS dias (o branco e o
     suave) sem precisar de linha no [data-dia="suave"], porque quem resolve o
     rgba é o navegador, sobre a superfície que estiver valendo. Os 8% ficam entre
     o cartão (3%) e a elevação de botão (6%): visível de relance e longe do cinza
     que faria o botão parecer desligado. */
  --dia-formclin-vazio-bg: rgba(var(--dia-tint-rgb), 0.08);
  --dia-formclin-linha: var(--dia-line);

  /* ==== DIA SUAVE — o SEGUNDO dia (19/08/2026). ====
     São DOIS dias, e o usuário escolhe no login: o branco (padrão) e este, um
     pouco mais escuro. Só as SUPERFÍCIES neutras mudam; texto, acentos, estados e
     status são os mesmos do dia branco — a diferença é de luz, não de paleta, e
     duplicar cor de status seria criar dois lugares para errar.

     COMO se liga: `data-dia="suave"` no <html> (eixo SEPARADO do Auto/Dia/Noite —
     ver o bloco de variante logo abaixo do mapeamento do dia). Por ser eixo
     próprio, quem deixa em "Auto" e prefere o suave recebe o suave quando o
     aparelho está claro.

     COMO se mexe: `npm run tema:dia-suave -- <0..1>`. As âncoras são AS MESMAS da
     régua de claridade — 0 = o dia atenuado de 09/08/2026, 1 = o branco de hoje —,
     e é de propósito: os dois dias andam no MESMO trilho, o branco preso na ponta 1
     e o suave onde o Cesar parar. Assim "um pouco mais escuro" é um número, não uma
     segunda arqueologia.
     POSIÇÃO ATUAL (dia-suave): 0.5 (entre os dois). */
  --dia2-bg: #e7e9e7;
  --dia2-bg2: #dde4e0;
  --dia2-surface: #f0f0f0;
  --dia2-panel: #f0f0f0;
  --dia2-panel-rgb: 240, 240, 240; /* ANDA COM --dia2-panel, pelo mesmo motivo do dia branco */
  --dia2-ditar-bg: linear-gradient(135deg, #e2e7ec, #d9e2ea 60%, #cedce7);
  /* ARESTA: anda ao CONTRÁRIO do preenchimento — no tema claro quem desenha o
     objeto é o contorno. O porquê inteiro está em scripts/tema-dia-claridade.mjs. */
  --dia2-line: rgba(18, 32, 26, 0.18);
  --dia2-card: rgba(18, 32, 26, 0.04);
  /* o fundo da grade acompanha a SUPERFÍCIE deste dia (no dia branco os dois são
     #ffffff pela mesma razão). Se um dia precisar de dial próprio, vira régua. */
  --dia2-grade-bg: #f0f0f0;
  /* PRIMEIRO PLANO que a superfície mais escura derruba — MEDIDO, não achado.
     Estes são os únicos pares que caem abaixo do mínimo WCAG quando as superfícies
     escurecem (`npm run contraste`, coluna SUAVE): o verde-marca contra o --bg, o
     mesmo verde no selo de memória de IA e o cinza do selo "cancelada" (ícone,
     mínimo 3:1). Andam na MESMA régua das superfícies, e é isso que impede a
     correção de envelhecer: dial escuro, tinta escura, na mesma volta.
     ISTO NÃO CONTRADIZ a lição de 29/07 ("antes de escurecer uma tinta para pagar
     contraste, confira se quem está errado não é a superfície debaixo dela"). Lá a
     superfície ESTAVA errada — tinha andado para o escuro sem ninguém pedir. Aqui
     ela está escura DE PROPÓSITO: é o dia que o usuário escolheu no login. */
  --dia2-acc: #0c7144;
  --dia2-acc-rgb: 12, 113, 68; /* ANDA COM --dia2-acc: o véu translúcido é a MESMA cor */
  --dia2-mem-ia-ok-fg: #0c7144;
  --dia2-wa-cancelada: #82888e;

  /* ==== SEM TEMA — o valor é o MESMO nos dois, de propósito. Não têm --noite-/
     --dia-: não são um par, são um valor só, e por isso não aparecem nos blocos
     de mapeamento lá embaixo. ==== */

  /* Sombra/escurecimento: preto nos dois temas (é ausência de luz, não cor). */
  --shade-rgb: 0, 0, 0;

  /* SOBRE O VÉU ESCURO (visor de foto, rgba(var(--shade-rgb),.92)): o véu é
     PRETO nos dois temas, então o conteúdo em cima dele NÃO pode seguir
     --txt/--card/--mut — no DIA os três são escuros e a legenda vira preto no
     preto (medido: #0f1b16 sobre véu preto). Este trio não inverte: vale a
     paleta da noite sempre, porque o fundo é o mesmo nos dois temas. */
  --sobre-veu: #eaf2ee;
  --sobre-veu-mut: #9fb1a9;
  --sobre-veu-rgb: 255, 255, 255;
  --sobre-veu-perigo: #ff9a9a; /* o Apagar do visor — vermelho da NOITE nos dois temas */

  /* Status da AGENDA (agAtraso) — escala data-viz TRANSLÚCIDA: com alpha .4 o
     fundo do tema atravessa e a cor vale nos dois. Valores = os que semiBg()
     gerava dos hex antigos #94F9F7/#BBF994/#F9EB7B/#FAB1A9/#cddc39.
     DÍVIDA MEDIDA (29/07): sobre a superfície clara o tinte fica em 1,03-1,10
     contra o painel — a marcação de atraso quase não se destaca de dia. Dar valor
     de dia aos cinco é frente própria; e a escala não se salva da deuteranopia
     onde não há número (agAtrasoCalc devolve s:"" com bg preenchido em 3 casos),
     porque matiz não é acessível. */
  --ag-tempo: rgba(148, 249, 247, 0.4); /* status 1: na clínica (tempo desde o últ. mov.) */
  --ag-atraso-ok: rgba(187, 249, 148, 0.4); /* ≤15min / no prazo */
  --ag-atraso-medio: rgba(249, 235, 123, 0.4); /* 16–30min */
  --ag-atraso-alto: rgba(250, 177, 169, 0.4); /* >30min */
  --ag-cancelada: rgba(205, 220, 57, 0.4); /* entrada cancelada */
  --ag-faltou: rgba(231, 197, 220, 0.4); /* paciente FALTOU (célula da hora) */

  /* Coluna "$" da agenda (faturamento da entrada). MESMA escala translúcida acima,
     e pela mesma razão. Valores = os hex do A030Linha do c1serenity por semiBg(). */
  --fat-faturado: rgba(65, 182, 230, 0.4); /* #41B6E6 — todos faturados */
  --fat-cobrado: rgba(190, 232, 203, 0.4); /* #bee8cb — todos cobrados */
  --fat-parcial: rgba(249, 218, 0, 0.4); /* #F9DA00 — parte cobrada */
  --fat-sem: rgba(242, 172, 190, 0.4); /* #f2acbe — nenhum lançamento */

  /* Um só par de texto para o semáforo do calendário: os três degraus são claros
     nos DOIS temas, então tinta escura serve os seis (>=6,7:1 em todos). */
  --cal-txt: #122019; /* número do dia sobre qualquer degrau do semáforo */

  /* FOLHA impressa: editor/leitura de documento, preview de receita, <option> do
     WebView. É o papel que sai na impressora — branco e preto nos dois temas. */
  --folha-bg: #ffffff;
  --folha-txt: #111111;
  --folha-line: rgba(0, 0, 0, 0.12);

  /* VISOR de imagem: foto em tela cheia, câmera, comparação lado a lado. Foto
     clínica se julga sobre fundo neutro escuro — no dia também. */
  --visor-bg: #000000;
  --visor-mut: #888888; /* legenda/placeholder dentro do visor */

  /* Tinta sobre COR ESCOLHIDA PELO OPERADOR (mensagem do dia, classificação da
     agenda): a cor vem do backend e é sempre clara, então a tinta é escura fixa. */
  --txt-sobre-cor: #0f172a;

  /* Faixa de AVISO clara (dica do ditado, dica do Safari): banner claro nos dois
     temas — é interrupção deliberada, não superfície de UI. */
  --aviso-bg: #fff3cd;
  --aviso-fg: #663c00;
  --aviso-line: #e0b34d;

  /* Barra do MANUAL (ajuda.ts): âmbar OPACO sobre o iframe do manual, que tem
     fundo próprio. Fica igual nos dois temas para o "✕ Fechar" ser sempre óbvio. */
  --ajuda-bar-bg: rgba(58, 42, 10, 0.98);
  --ajuda-bar-line: #ffc766;

  /* MAPA DE BOTOX (mod-botox) — paleta PRÓPRIA, independente de tema.
     O mapa é uma FOLHA BRANCA (a face impressa, que o médico marca e imprime) e o
     modo tela cheia é um VISOR ESCURO. Nenhum dos dois segue o tema do app: a
     mesma marcação tem de sair igual na tela e no papel. A escala abaixo é a
     neutra do próprio componente (papel -> tinta), numerada em vez de "nomeada"
     porque é isso que ela é: uma rampa de cinzas, sem semântica de UI. */
  --btx-papel: #ffffff; /* fundo do SVG da face, cartões e modais */
  --btx-tinta: #0f172a; /* texto sobre o papel / fundo do visor tela cheia */
  --btx-c50: #f8fafc;
  --btx-c100: #f1f5f9;
  --btx-c150: #eef2f7;
  --btx-c200: #e2e8f0;
  --btx-c300: #cbd5e1;
  --btx-c400: #94a3b8;
  --btx-c500: #64748b;
  --btx-c600: #475569;
  --btx-c700: #334155;
  --btx-c800: #1e293b;
  --btx-sel: #eef2ff; /* linha do lote ativo */
  --btx-acento: #f59e0b; /* ponto selecionado / lote ativo (âmbar) */
  --btx-info: #0ea5e9; /* botão "tela cheia" */
  --btx-foco: #38bdf8; /* contorno do lote em foco (no visor escuro) */
  --btx-del: #b91c1c; /* excluir, sobre papel */
  --btx-del-bg: #fef2f2;
  --btx-del-fs: #f87171; /* excluir, no visor escuro */
  --btx-del-bg-fs: #3f1d1d;
  --btx-slate-rgb: 148, 163, 184; /* véu neutro (hover de linha) */
  --btx-acento-rgb: 245, 158, 11; /* véu âmbar (linha selecionada, pulso do ponto) */
  --btx-tinta-rgb: 15, 23, 42; /* véu escuro (overlay do modal) */
}

/* ---- Tema ATIVO: NOITE (padrão). Só mapeamento — zero hex, zero rgba daqui
   para baixo. Uma cor errada não tem onde se esconder: só existe na paleta.
   `color-scheme` avisa o navegador do tema: é ele que pinta o <option> do combo,
   a barra de rolagem e os controles nativos (foi o que aposentou o remendo
   `select option{color:#111;background:#fff}` das cascas). ---- */
:root {
  color-scheme: dark;
  --bg: var(--noite-bg);
  --bg2: var(--noite-bg2);
  --surface: var(--noite-surface);
  --card: var(--noite-card);
  --overlay: var(--noite-overlay);
  --txt: var(--noite-txt);
  --mut: var(--noite-mut);
  --line: var(--noite-line);
  --line-soft: var(--noite-line-soft);
  --mut-soft: var(--noite-mut-soft);
  --border-hover: var(--noite-border-hover);
  --acc: var(--noite-acc);
  --acc2: var(--noite-acc2);
  --acc2-hover: var(--noite-acc2-hover);
  --on-acc: var(--noite-on-acc);
  --on-acc2: var(--noite-on-acc2);
  --danger: var(--noite-danger);
  --realce: var(--noite-realce);
  --warn: var(--noite-warn);
  --ok: var(--noite-ok);
  --info: var(--noite-info);
  --panel: var(--noite-panel);
  --surface-2: var(--noite-surface-2);
  --surface-3: var(--noite-surface-3);
  --inset: var(--noite-inset);
  --toast-bg: var(--noite-toast-bg);
  --toast-fg: var(--noite-toast-fg);
  --acc-rgb: var(--noite-acc-rgb);
  --acc2-rgb: var(--noite-acc2-rgb);
  --warn-rgb: var(--noite-warn-rgb);
  --danger-rgb: var(--noite-danger-rgb);
  --neg-rgb: var(--noite-neg-rgb);
  --fluxo-rgb: var(--noite-fluxo-rgb);
  --info-rgb: var(--noite-info-rgb);
  --panel-rgb: var(--noite-panel-rgb);
  --tint-rgb: var(--noite-tint-rgb);
  --grade-bg: var(--noite-grade-bg);
  --zebra: var(--noite-zebra);
  --zebra-rgb: var(--noite-zebra-rgb);
  --preenchido-rgb: var(--noite-preenchido-rgb);
  --warn-fg: var(--noite-warn-fg);
  --on-warn: var(--noite-on-warn);
  --neg-fg: var(--noite-neg-fg);
  --fluxo-fg: var(--noite-fluxo-fg);
  --danger-fg: var(--noite-danger-fg);
  --info-fg: var(--noite-info-fg);
  --ag-nao-confirmado: var(--noite-ag-nao-confirmado);
  --ag-autoagend: var(--noite-ag-autoagend);
  --cal-livre: var(--noite-cal-livre);
  --cal-pouca: var(--noite-cal-pouca);
  --cal-lotado: var(--noite-cal-lotado);
  --pres-sel: var(--noite-pres-sel);
  --pres-sel-bg: var(--noite-pres-sel-bg);
  --mem-ia-revisar-bg: var(--noite-mem-ia-revisar-bg);
  --mem-ia-revisar-fg: var(--noite-mem-ia-revisar-fg);
  --mem-ia-ok-bg: var(--noite-mem-ia-ok-bg);
  --mem-ia-ok-fg: var(--noite-mem-ia-ok-fg);
  --mem-ia-rejeitada-bg: var(--noite-mem-ia-rejeitada-bg);
  --mem-ia-rejeitada-fg: var(--noite-mem-ia-rejeitada-fg);
  --wa-enviada: var(--noite-wa-enviada);
  --wa-recebida: var(--noite-wa-recebida);
  --wa-lida: var(--noite-wa-lida);
  --wa-confirmou: var(--noite-wa-confirmou);
  --wa-cancelou: var(--noite-wa-cancelou);
  --wa-cancelada: var(--noite-wa-cancelada);
  --ia-bolha-pac: var(--noite-ia-bolha-pac);
  --ia-bolha-ia: var(--noite-ia-bolha-ia);
  --ia-bolha-linha: var(--noite-ia-bolha-linha);
  --pend-enviado: var(--noite-pend-enviado);
  --pend-falha: var(--noite-pend-falha);
  --pend-lembrete: var(--noite-pend-lembrete);
  --pend-agendado: var(--noite-pend-agendado);
  --ditar-bg: var(--noite-ditar-bg);
  --formclin-vazio-bg: var(--noite-formclin-vazio-bg);
  --formclin-linha: var(--noite-formclin-linha);
}

/* ---- DIA: automático pelo ambiente (não aplica se o usuário fixou dark).
   Bloco GÊMEO do :root[data-theme="light"] abaixo — o `cor:ci` compara os dois. ---- */
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) {
    color-scheme: light;
    --bg: var(--dia-bg);
    --bg2: var(--dia-bg2);
    --surface: var(--dia-surface);
    --card: var(--dia-card);
    --overlay: var(--dia-overlay);
    --txt: var(--dia-txt);
    --mut: var(--dia-mut);
    --line: var(--dia-line);
    --line-soft: var(--dia-line-soft);
    --mut-soft: var(--dia-mut-soft);
    --border-hover: var(--dia-border-hover);
    --acc: var(--dia-acc);
    --acc2: var(--dia-acc2);
    --acc2-hover: var(--dia-acc2-hover);
    --on-acc: var(--dia-on-acc);
    --on-acc2: var(--dia-on-acc2);
    --danger: var(--dia-danger);
    --realce: var(--dia-realce);
    --warn: var(--dia-warn);
    --ok: var(--dia-ok);
    --info: var(--dia-info);
    --panel: var(--dia-panel);
    --surface-2: var(--dia-surface-2);
    --surface-3: var(--dia-surface-3);
    --inset: var(--dia-inset);
    --toast-bg: var(--dia-toast-bg);
    --toast-fg: var(--dia-toast-fg);
    --acc-rgb: var(--dia-acc-rgb);
    --acc2-rgb: var(--dia-acc2-rgb);
    --warn-rgb: var(--dia-warn-rgb);
    --danger-rgb: var(--dia-danger-rgb);
    --neg-rgb: var(--dia-neg-rgb);
    --fluxo-rgb: var(--dia-fluxo-rgb);
    --info-rgb: var(--dia-info-rgb);
    --panel-rgb: var(--dia-panel-rgb);
    --tint-rgb: var(--dia-tint-rgb);
    --grade-bg: var(--dia-grade-bg);
    --zebra: var(--dia-zebra);
    --zebra-rgb: var(--dia-zebra-rgb);
    --preenchido-rgb: var(--dia-preenchido-rgb);
    --warn-fg: var(--dia-warn-fg);
    --on-warn: var(--dia-on-warn);
    --neg-fg: var(--dia-neg-fg);
    --fluxo-fg: var(--dia-fluxo-fg);
    --danger-fg: var(--dia-danger-fg);
    --info-fg: var(--dia-info-fg);
    --ag-nao-confirmado: var(--dia-ag-nao-confirmado);
    --ag-autoagend: var(--dia-ag-autoagend);
    --cal-livre: var(--dia-cal-livre);
    --cal-pouca: var(--dia-cal-pouca);
    --cal-lotado: var(--dia-cal-lotado);
    --pres-sel: var(--dia-pres-sel);
    --pres-sel-bg: var(--dia-pres-sel-bg);
    --mem-ia-revisar-bg: var(--dia-mem-ia-revisar-bg);
    --mem-ia-revisar-fg: var(--dia-mem-ia-revisar-fg);
    --mem-ia-ok-bg: var(--dia-mem-ia-ok-bg);
    --mem-ia-ok-fg: var(--dia-mem-ia-ok-fg);
    --mem-ia-rejeitada-bg: var(--dia-mem-ia-rejeitada-bg);
    --mem-ia-rejeitada-fg: var(--dia-mem-ia-rejeitada-fg);
    --wa-enviada: var(--dia-wa-enviada);
    --wa-recebida: var(--dia-wa-recebida);
    --wa-lida: var(--dia-wa-lida);
    --wa-confirmou: var(--dia-wa-confirmou);
    --wa-cancelou: var(--dia-wa-cancelou);
    --wa-cancelada: var(--dia-wa-cancelada);
    --ia-bolha-pac: var(--dia-ia-bolha-pac);
    --ia-bolha-ia: var(--dia-ia-bolha-ia);
    --ia-bolha-linha: var(--dia-ia-bolha-linha);
    --pend-enviado: var(--dia-pend-enviado);
    --pend-falha: var(--dia-pend-falha);
    --pend-lembrete: var(--dia-pend-lembrete);
    --pend-agendado: var(--dia-pend-agendado);
    --ditar-bg: var(--dia-ditar-bg);
    --formclin-vazio-bg: var(--dia-formclin-vazio-bg);
    --formclin-linha: var(--dia-formclin-linha);
  }
}

/* ---- Troca MANUAL (vence a mídia). UI VIVA: toggle Auto/Dia/Noite no login.
   Este bloco é o que o usuário recebe ao clicar "Dia" — e é o ÚNICO dos três que o
   `contraste.mjs --dump` não lê. Token novo no @media tem de entrar aqui também;
   quem cobra é test/contraste.test.mjs (paridade), não o dump. ---- */
:root[data-theme="light"] {
  color-scheme: light;
  --bg: var(--dia-bg);
  --bg2: var(--dia-bg2);
  --surface: var(--dia-surface);
  --card: var(--dia-card);
  --overlay: var(--dia-overlay);
  --txt: var(--dia-txt);
  --mut: var(--dia-mut);
  --line: var(--dia-line);
  --line-soft: var(--dia-line-soft);
  --mut-soft: var(--dia-mut-soft);
  --border-hover: var(--dia-border-hover);
  --acc: var(--dia-acc);
  --acc2: var(--dia-acc2);
  --acc2-hover: var(--dia-acc2-hover);
  --on-acc: var(--dia-on-acc);
  --on-acc2: var(--dia-on-acc2);
  --danger: var(--dia-danger);
  --realce: var(--dia-realce);
  --warn: var(--dia-warn);
  --ok: var(--dia-ok);
  --info: var(--dia-info);
  --panel: var(--dia-panel);
  --surface-2: var(--dia-surface-2);
  --surface-3: var(--dia-surface-3);
  --inset: var(--dia-inset);
  --toast-bg: var(--dia-toast-bg);
  --toast-fg: var(--dia-toast-fg);
  --acc-rgb: var(--dia-acc-rgb);
  --acc2-rgb: var(--dia-acc2-rgb);
  --warn-rgb: var(--dia-warn-rgb);
  --danger-rgb: var(--dia-danger-rgb);
  --neg-rgb: var(--dia-neg-rgb);
  --fluxo-rgb: var(--dia-fluxo-rgb);
  --info-rgb: var(--dia-info-rgb);
  --panel-rgb: var(--dia-panel-rgb);
  --tint-rgb: var(--dia-tint-rgb);
  --grade-bg: var(--dia-grade-bg);
  --zebra: var(--dia-zebra);
  --zebra-rgb: var(--dia-zebra-rgb);
  --preenchido-rgb: var(--dia-preenchido-rgb);
  --warn-fg: var(--dia-warn-fg);
  --on-warn: var(--dia-on-warn);
  --neg-fg: var(--dia-neg-fg);
  --fluxo-fg: var(--dia-fluxo-fg);
  --danger-fg: var(--dia-danger-fg);
  --info-fg: var(--dia-info-fg);
  --ag-nao-confirmado: var(--dia-ag-nao-confirmado);
  --ag-autoagend: var(--dia-ag-autoagend);
  --cal-livre: var(--dia-cal-livre);
  --cal-pouca: var(--dia-cal-pouca);
  --cal-lotado: var(--dia-cal-lotado);
  --pres-sel: var(--dia-pres-sel);
  --pres-sel-bg: var(--dia-pres-sel-bg);
  --mem-ia-revisar-bg: var(--dia-mem-ia-revisar-bg);
  --mem-ia-revisar-fg: var(--dia-mem-ia-revisar-fg);
  --mem-ia-ok-bg: var(--dia-mem-ia-ok-bg);
  --mem-ia-ok-fg: var(--dia-mem-ia-ok-fg);
  --mem-ia-rejeitada-bg: var(--dia-mem-ia-rejeitada-bg);
  --mem-ia-rejeitada-fg: var(--dia-mem-ia-rejeitada-fg);
  --wa-enviada: var(--dia-wa-enviada);
  --wa-recebida: var(--dia-wa-recebida);
  --wa-lida: var(--dia-wa-lida);
  --wa-confirmou: var(--dia-wa-confirmou);
  --wa-cancelou: var(--dia-wa-cancelou);
  --wa-cancelada: var(--dia-wa-cancelada);
  --ia-bolha-pac: var(--dia-ia-bolha-pac);
  --ia-bolha-ia: var(--dia-ia-bolha-ia);
  --ia-bolha-linha: var(--dia-ia-bolha-linha);
  --pend-enviado: var(--dia-pend-enviado);
  --pend-falha: var(--dia-pend-falha);
  --pend-lembrete: var(--dia-pend-lembrete);
  --pend-agendado: var(--dia-pend-agendado);
  --ditar-bg: var(--dia-ditar-bg);
  --formclin-vazio-bg: var(--dia-formclin-vazio-bg);
  --formclin-linha: var(--dia-formclin-linha);
}

/* :root[data-theme="dark"] — DELETADO: era código morto. O :not([data-theme="dark"])
   da mídia já impede a mídia de aplicar, então o :root padrão entrega a noite. */

/* ---- VARIANTE do dia: DIA SUAVE. Eixo SEPARADO do Auto/Dia/Noite, e é isso que o
   torna barato: ele não é um 4º tema: não repete mapeamento nenhum, só troca os
   valores de PALETA que o dia já consome. Vale para os dois blocos de dia (o do
   @media e o do [data-theme="light"]) porque quem resolve `var(--dia-bg)` é o
   navegador, na hora do uso, com o valor que estiver valendo em :root — e este
   seletor tem especificidade maior que o `:root` da paleta.
   Consequências que interessam: (1) os três blocos de mapeamento continuam TRÊS, e
   os gates de paridade seguem valendo sem exceção; (2) token novo do dia continua
   entrando nos três, e só precisa de linha AQUI se o dia suave o quiser diferente.
   Zero literal: os valores moram na paleta, em --dia2-*. ---- */
:root[data-dia="suave"] {
  --dia-bg: var(--dia2-bg);
  --dia-bg2: var(--dia2-bg2);
  --dia-surface: var(--dia2-surface);
  --dia-panel: var(--dia2-panel);
  --dia-panel-rgb: var(--dia2-panel-rgb);
  --dia-ditar-bg: var(--dia2-ditar-bg);
  --dia-line: var(--dia2-line);
  --dia-card: var(--dia2-card);
  --dia-grade-bg: var(--dia2-grade-bg);
  --dia-acc: var(--dia2-acc);
  --dia-acc-rgb: var(--dia2-acc-rgb);
  --dia-mem-ia-ok-fg: var(--dia2-mem-ia-ok-fg);
  --dia-wa-cancelada: var(--dia2-wa-cancelada);
}
