@font-face{font-family:"Inter";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/Inter-Regular.da03732a27e1.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:500;font-display:swap;src:url("../fonts/Inter-Medium.51205681a1ba.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:600;font-display:swap;src:url("../fonts/Inter-SemiBold.2ede57db1a3a.woff2") format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:700;font-display:swap;src:url("../fonts/Inter-Bold.8ca0a5155296.woff2") format("woff2")}
@font-face{font-family:"Bebas Neue";font-style:normal;font-weight:400;font-display:swap;src:url("../fonts/BebasNeue-Regular.5853435d21b1.woff2") format("woff2")}
/* Design system do SuperApp — identidade Cidadela SUPORTE: verde-azulado (#1F9D8B) sobre a base
   neutra da marca-mãe (Pedra/Fortaleza/Aço); tipografia Inter (texto) + Bebas Neue (marca/display).
   Norma no cérebro (design-system-painel). Fonte única dos tokens: mudar aqui reveste todas as telas. */

/* ♻️ **07/10/2026 — ESTE ARQUIVO PERDEU O DESENHO DA CASA ANTIGA.** Ele tinha 2.236 linhas e
   750 regras: os tokens e a base, e mais o desenho inteiro das telas antigas — barra lateral,
   cartões, tabelas, popups, formulários, o extrato, a árvore do plano de contas. A casca antiga
   foi apagada (Bernardo: *"faz o corte maior, apaga a casca antiga inteira"*), e com ela saíram
   daqui as 698 regras que não vestiam mais nada.

   📏 **Como se soube quais.** Três evidências, e uma regra só saiu com todas a favor:
     • o NOME da classe não aparece em lugar nenhum do que sobrou no repositório, ou aparece só
       como dado e nunca em contexto de classe (conferido ocorrência por ocorrência);
     • a classe não existe no DOM de nenhum dos 95 estados visitados — todas as páginas do
       app, os diálogos, o tema escuro, o celular e as telas de entrada (916 classes colhidas);
     • o navegador não USOU a regra em nenhum deles (a cobertura de CSS do Chrome: 24 regras
       usadas, de 750).
   E a prova de que nada mudou: o estilo computado de todo elemento, antes e depois, nos
   mesmos 95 estados — nenhuma propriedade diferente.

   ⚖️ **O que FICA é o que o front novo usa de verdade:** as fontes, os tokens (claro, escuro e
   a escolha manual), a base dos elementos (`body`, `a`, `h1`, `form`, `label`, `input`,
   `select`, `textarea`, `button`), as barras de rolagem e quatro classes — `.isvg`, `.mono`,
   `.marca-svg` e `.marca-logo`.

   🔴 **As regras de ELEMENTO não são resto: elas vestem o app.** O link sem classe é teal por
   causa do `a` daqui; o `<form>` empilha os campos por causa do `form` daqui. Elas valem para
   toda página que liga este arquivo, e por isso nenhuma saiu.

   📌 Os tokens ficaram TODOS, mesmo os que hoje ninguém lê: token é vocabulário da marca, e o
   corte foi do desenho. Quem quiser enxugá-los faz isso olhando para a marca, não para a casca. */

:root {
  --canvas:        #F2EFE8;
  --surface-1:     #FAF8F3;
  --surface-2:     #FFFFFF;
  /* 🔑 **A folha REVELADA — o branco que o accordion aberto pede.** Nasceu em 14/09/2026,
     quando a reforma tirou o branco puro de dentro da ilha: lá `--surface-2` passou a ser o
     realce discreto, e o painel que abre embaixo de uma linha precisava continuar branco de
     verdade. Ter um nome próprio é o que impede a próxima regra geral de atropelar de novo o
     único lugar onde o branco é proposital. */
  --surface-3:     #FFFFFF;
  --border:        #E4DFD5;
  --border-strong: #D2CCBE;
  --text:          #171918;
  --text-secondary:#4B4D47;
  --muted:         #73766F;
  --primary:       #1F9D8B;
  --primary-hover: #188676;
  /* o texto dos botões SECUNDÁRIOS (e das abas inativas, que herdam). No claro é o
     primary puro (10.4:1); no ESCURO o primary puro dá 4.02 sobre o surface-2 — abaixo
     do piso de 4.5 — então lá ele vira o primary-hover (5.1:1, medido em 28/08). */
  --sec-texto:     var(--primary);
  /* 🔴 **Medido e MANTIDO por decisão, não por descuido.** Branco sobre o `--primary`
     do claro dá **3,36:1** — abaixo do piso de 4,5 para texto pequeno. No escuro o par é
     outro (`#0B0F14` sobre o teal claro) e dá 7,39, então o desencontro é só daqui.

     ⚖️ Três saídas foram medidas em 12/09/2026: tinta escura como no tema escuro (5,72),
     `--primary-hover` com branco (4,46, ainda falha) e um teal mais escuro (5,98, mas muda
     a cor da marca). O Tiago viu os números e fechou: *"deixa como está, não me incomoda"*.

     🔑 Isto fica escrito AQUI para a pergunta não renascer: quem medir de novo vai achar
     o mesmo 3,36 e propor a mesma troca. Já foi proposta e já foi recusada. */
  --on-primary:    #FFFFFF;
  --accent:        #1F9D8B;
  --success:       #2E6B4F;
  --warning:       #B4791A;
  --danger:        #A33A2E;
  --radius:        10px;
  --font-sans:     "Inter", system-ui, -apple-system, sans-serif;
  --font-display:  "Bebas Neue", "Inter", system-ui, sans-serif;
  /* interação */
  --ring:          rgba(31, 157, 139, .30);
  --shadow-1:      0 1px 2px rgba(24, 22, 18, .04), 0 2px 6px rgba(24, 22, 18, .05);
  --shadow-2:      0 4px 12px rgba(24, 22, 18, .08), 0 12px 28px rgba(24, 22, 18, .10);
  --dur:           .18s;
  --ease:          cubic-bezier(.2, .7, .25, 1);
  /* O SWITCH tem tempo proprio: o efeito de esticar nasce do DESENCONTRO entre a borda da
     frente e a de tras, e ele some se a duracao encolher para o `--dur` geral (.18s).
     Escolha do Tiago em 22/08, entre 5 animacoes. */
  --sw-dur:        190ms;
  --sw-atraso:     70ms;
  /* MOVIMENTO — os valores das duas animacoes da casa (envelope e arrasto).
     Sao TOKENS e nao literais porque cada um vive em MAIS DE UMA tela: enquanto
     fossem numeros repetidos, ajustar a cortina numa tela deixava as outras pra
     tras, calado. Norma e checklist no cerebro (design-system-painel, MOVIMENTO). */
  --mov-cortina:       .32s;                          /* abrir/fechar (.env, .rev) — .26s ate 28/08; Bernardo pediu 'um pouquinho mais lenta' */
  --mov-cortina-ease:  cubic-bezier(.4, 0, .2, 1);
  --mov-esmaece:       .2s;                           /* o conteudo aparecendo */
  --mov-esmaece-atraso:.04s;                          /* meio quadro depois da cortina */
  --mov-mola:          .4s;                           /* o encaixe ao pousar */
  --mov-mola-ease:     cubic-bezier(.34, 1.4, .64, 1);
  --mov-recebe:        .3s;                           /* o empurraozinho do alvo */
  --mov-carregado:     .4;                            /* opacidade do que saiu da mesa */
}

@media (prefers-color-scheme: dark) {
  :root {
    --canvas:        #1A1B18;
    --surface-1:     #212320;
    --surface-2:     #2A2C28;
    --surface-3:     #2F312C;
    --border:        #383A34;
    --border-strong: #474A42;
    --text:          #F2EFE8;
    --text-secondary:#C8C5BB;
    --muted:         #979A8E;
    --primary:       #2FB3A0;
    --primary-hover: #45C2B0;
    --sec-texto:     var(--primary-hover);  /* primary puro daria 4.02 no surface-2 */
    --on-primary:    #0B0F14;
    --accent:        #35BBA8;
    --success:       #3B9E6E;
    --warning:       #D0982E;
    --danger:        #D65B52;
    --ring:          rgba(47, 179, 160, .38);
    --shadow-1:      0 1px 2px rgba(0, 0, 0, .25), 0 2px 6px rgba(0, 0, 0, .30);
    --shadow-2:      0 4px 14px rgba(0, 0, 0, .40), 0 14px 32px rgba(0, 0, 0, .50);
  }
}

* { box-sizing: border-box; }
body {
  /* `dvh` (viewport dinâmico) acompanha a barra do navegador no mobile; o `vh` fica de
     reserva pra quem não tem `dvh`. Sem isso, o iOS mede 100vh com a barra ESCONDIDA e
     sobra um pedaço rolável embaixo — no Android/Chromium não acontece. */
  margin: 0; min-height: 100vh; min-height: 100dvh; background: var(--canvas); color: var(--text);
  font-family: var(--font-sans); font-size: 15px; line-height: 1.5;
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
  /* tira o flash cinza de toque do iOS (o Android não tem) — mesmo feedback nos dois */
  -webkit-tap-highlight-color: transparent;
}

/* foco acessível e consistente em tudo que é interativo */
:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; border-radius: 3px; }
a:focus-visible, button:focus-visible,
input:focus-visible, select:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--ring); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
}


/* logo Cidadela (fill, nao stroke como .isvg). Opcao 2: torre teal em quadrado claro. */
.marca-svg { fill: currentColor; display: block; }

/* a logomarca de uma marca (`<span class="marca-logo">` em `monograma.jsx` e no painel de
   Conexões): a altura-base vem daqui; a máscara e a tinta, do `cidadela.css` */
.marca-logo { height: 32px; width: auto; }


/* tipografia */
/* Titulos em Bebas (display da marca Cidadela Suporte): TODO h1 e titulo — pagina, modal E login.
   Bebas e caixa-alta; o Tiago confirmou que maiuscula (inclusive nome de pessoa) NAO e problema.
   Corpo/numeros/tabela/CAMPOS de formulario seguem em Inter (var(--font-sans)). */
h1 { font-family: var(--font-display); font-size: 22px; font-weight: 400; letter-spacing: .5px; margin: 0 0 4px; text-wrap: balance; }
/* controles de formulario NAO herdam fonte por padrao do navegador (davam Arial) -> forcar Inter */
input, select, textarea, button, optgroup { font-family: inherit; }


a { color: var(--primary); text-underline-offset: 2px; transition: color var(--dur) var(--ease); }
a:hover { color: var(--primary-hover); }

/* formulários */
form { display: flex; flex-direction: column; gap: 12px; }
label { font-size: 13px; color: var(--text-secondary); font-weight: 500; }
input, select {
  height: 44px; padding: 0 14px; font-size: 16px; color: var(--text);
  background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--radius);
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), background var(--dur) var(--ease);
}
input::placeholder { color: var(--muted); }
/* o select era o único controle que não obedecia aos tokens: a seta era do navegador.
   `appearance:none` cala a nativa; o chevron vem do --chevron (que segue o tema). */
select {
  appearance: none; -webkit-appearance: none;
  padding-right: 38px;
  background-image: var(--chevron);
  background-repeat: no-repeat; background-position: right 13px center; background-size: 14px;
}
select[multiple] { background-image: none; padding-right: 8px; }
input:hover, select:hover { border-color: var(--border-strong); }
input:focus, select:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--ring); background: var(--surface-2); }


textarea { width: 100%; padding: 10px 14px; font-size: 16px; color: var(--text); font-family: inherit;
  background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--radius); resize: vertical;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), background var(--dur) var(--ease); }
textarea::placeholder { color: var(--muted); }
textarea:hover { border-color: var(--border-strong); }
textarea:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px var(--ring); background: var(--surface-2); }

/* checkbox e radio */
/* A checkbox era METADE nossa: `accent-color` pintava o marcado de azul, mas a caixa
   VAZIA continuava sendo a branca do sistema. Agora é nossa nos dois estados. Precisa
   zerar o que a regra genérica `input` põe (altura, padding, fundo), senão o
   `appearance:none` deixa tudo aparecer. */
input[type="checkbox"] {
  appearance: none; -webkit-appearance: none;
  width: 18px; height: 18px; padding: 0; margin: 0; flex: none; cursor: pointer;
  background: var(--surface-2); border: 1.5px solid var(--border-strong); border-radius: 5px;
  box-shadow: none;
  transition: background-color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
input[type="checkbox"]:hover { border-color: var(--primary); }
input[type="checkbox"]:checked {
  background-color: var(--primary); border-color: var(--primary);
  background-image: var(--tick); background-repeat: no-repeat;
  background-position: center; background-size: 12px;
}
input[type="radio"] { width: 16px; height: 16px; accent-color: var(--primary); flex: none; margin: 0; cursor: pointer; }

/* o ícone do seletor de data (Chromium): a cor vinha do TEXTO — aqui ele vira `--muted`,
   a MESMA do chevron do select. Os dois são a mesma coisa (a dica de que o campo abre
   algo), então têm que ter a mesma cor; era o único par fora do padrão.
   ⚠️ O Firefox desenha o dele e não deixa alcançar — lá o campo segue nativo. */
input[type="date"]::-webkit-calendar-picker-indicator {
  background-image: var(--calendario);
  background-repeat: no-repeat; background-position: center; background-size: 15px;
  width: 16px; height: 16px; padding: 0; margin: 0; opacity: 1; cursor: pointer;
  transition: opacity var(--dur) var(--ease);
}
input[type="date"]::-webkit-calendar-picker-indicator:hover { opacity: .65; }


/* 🔴 `display:inline-flex` no BASE (Bernardo, 2026-08-04). O bloco tinha `gap` e `height` mas
   NÃO tinha display — e `gap`/`height`/alinhamento **não valem em `display:inline`**. Em
   `<button>` passava batido (o navegador já centraliza o conteúdo); num `<a class="botao">`
   PURO, não: saía mais baixo, com o ícone colado no texto e fora do eixo. Só acontecia nos
   botões SEM variante — `--perigo` e `--ghost` já declaravam inline-flex por conta própria, e
   o "Histórico" da ficha era o único puro. Posto aqui, todo botão nasce alinhado e as variantes
   não precisam repetir. */
button {
  display: inline-flex; align-items: center; justify-content: center;
  height: 44px; padding: 0 18px; gap: 7px; border: none; border-radius: var(--radius);
  background: var(--primary); color: var(--on-primary); font-size: 15px; font-weight: 600;
  cursor: pointer; box-shadow: var(--shadow-1); font-family: inherit; text-decoration: none;
  transition: background var(--dur) var(--ease), transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}


/* selects multi (forms de gestão) */
select[multiple] { min-height: 132px; height: auto; padding: 8px; }
select[multiple] option { padding: 5px 8px; border-radius: 4px; }


/* ============================================================
   COMPONENTES DE PAINEL (reutilizáveis) — sala de controle,
   conexões e telas futuras. Aditivo: só consome os tokens da
   marca acima; estrutura fixa, cor/fonte vêm da marca.
   ============================================================ */
:root {
  /* 🔴 **`--font-mono` da casa NÃO é monoespaçada, e isso é decisão de marca.**
     O brandguide da Cidadela tem duas famílias: **Inter** no texto e **Bebas** no display.
     Valor técnico (latência, uptime, tamanho de arquivo) se lê em Inter com algarismos de
     largura fixa — que é exatamente o que a classe `.mono` já fazia desde sempre
     (`font-family: var(--font-sans); font-variant-numeric: tabular-nums`).

     ⚖️ **A variável, porém, continuava apontando para uma pilha de monoespaçadas de
     verdade** (`ui-monospace, SF Mono, Cascadia Code, IBM Plex Mono…`) — e qualquer
     componente de terceiro que peça `--font-mono` ou a utilitária `font-mono` caía nela.
     Foi o que aconteceu com os eixos do gráfico do BKLIT: apareceu **IBM Plex Mono** numa
     tela da casa, e o Tiago viu na hora.

     🔑 Consertar caso a caso seria esperar o próximo componente repetir o erro. A variável
     passa a dizer a verdade: aqui "mono" significa **números alinhados em Inter**. */
  --font-mono:  var(--font-sans);
  /* ── AS CINCO TINTAS DE ESTADO SE MISTURAM NO CANVAS ─────────────────────────
     Elas derivam dos próprios tokens da marca, então adaptam por marca e por tema.

     🔴 **A pergunta do Tiago (11/09) achou a assimetria, e ela estava aqui:** *"por que o
     tint está misturando com branco se o fundo não é branco no modo claro? no modo escuro esse
     problema não aparece"*.

     ⚖️ A base era `--surface-2` — que no tema claro é **#FFFFFF** e no escuro é **#2A2C28**,
     quase o próprio canvas (#1A1B18). Ou seja: no escuro, misturar no surface-2 ou no canvas
     dá quase no mesmo, e por isso lá nunca houve sintoma. No claro a distância entre o branco
     puro e o bege da página é enorme, e a tinta flutuava perto do branco enquanto tudo ao
     redor era bege. **O defeito era o mesmo nos dois temas; só um deles mostrava.**

     🔑 Agora as cinco se misturam no **`--canvas`**, o chão da página: uma base só, um
     comportamento só nos dois temas, dentro e fora das ilhas. O teal vai a 14% (era 12) porque
     foi o valor que o Tiago escolheu olhando cinco candidatos lado a lado na tela. */
  /* ♻️ **O CHÃO DA TINTA NÃO É O CANVAS PURO: é o canvas já levantado pelo texto.**

     🔴 Misturar só no `--canvas` consertou o tema claro e ESTRAGOU o escuro — e o Tiago viu
     nos botões de filtro. A conta explica: no claro, teal sobre bege dá um tom mais escuro que
     a página (visível); no escuro, teal sobre quase-preto dá um tom que mal levanta do fundo
     (medido: separação caiu de 1,48 para 1,24, e o chip ligado virou um buraco).

     ⚖️ **O problema é que a COR não inverte com o tema, mas o texto sim.** Então o chão da
     mistura passa a ser `canvas + 6% do texto` — que escurece de leve no claro e clareia de
     leve no escuro, SOZINHO. É a mesma mecânica que fez `--li-aberto` funcionar nos dois temas
     com uma declaração só, agora emprestada para as tintas de cor.

     📌 Uma fórmula, dois temas, direção certa nos dois — que era o pedido do Tiago
     (*"não precisa de 2 teal diferentes em cada modo"*) sem o preço que ele cobrou no escuro. */
  --tinta-chao:  color-mix(in srgb, var(--text) 6%, var(--canvas));
  --bg-verde:    color-mix(in srgb, var(--success) 14%, var(--tinta-chao));
  --bg-amarelo:  color-mix(in srgb, var(--warning) 16%, var(--tinta-chao));
  --bg-vermelho: color-mix(in srgb, var(--danger)  14%, var(--tinta-chao));
  --bg-cinza:    color-mix(in srgb, var(--muted)   12%, var(--tinta-chao));
  --bg-primary:  color-mix(in srgb, var(--primary) 14%, var(--tinta-chao));
  --hair:        color-mix(in srgb, var(--border)  55%, var(--surface-2));
}

/* ícone SVG (usa currentColor; some o emoji) */
.isvg { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex: none; }

/* utilitários numéricos */
.mono { font-family: var(--font-sans); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }


/* ============================================================
   Seletor de tema manual (claro/escuro) + peças dos cadastros.
   [data-theme] vence o @media (o usuário escolhe; senão segue o SO).
   ============================================================ */
:root[data-theme="light"]{
  --canvas:#F2EFE8; --surface-1:#FAF8F3; --surface-2:#FFFFFF; --surface-3:#FFFFFF; --border:#E4DFD5; --border-strong:#D2CCBE;
  --text:#171918; --text-secondary:#4B4D47; --muted:#73766F; --primary:#1F9D8B; --primary-hover:#188676;
  --sec-texto:var(--primary);
  --on-primary:#FFFFFF; --accent:#1F9D8B; --success:#2E6B4F; --warning:#B4791A; --danger:#A33A2E;
  --ring:rgba(31,157,139,.30);
  --shadow-1:0 1px 2px rgba(24,22,18,.04),0 2px 6px rgba(24,22,18,.05);
  --shadow-2:0 4px 12px rgba(24,22,18,.08),0 12px 28px rgba(24,22,18,.10);
}
:root[data-theme="dark"]{
  --canvas:#1A1B18; --surface-1:#212320; --surface-2:#2A2C28; --surface-3:#2F312C; --border:#383A34; --border-strong:#474A42;
  --text:#F2EFE8; --text-secondary:#C8C5BB; --muted:#979A8E; --primary:#2FB3A0; --primary-hover:#45C2B0;
  --sec-texto:var(--primary-hover);
  --on-primary:#0B0F14; --accent:#35BBA8; --success:#3B9E6E; --warning:#D0982E; --danger:#D65B52;
  --ring:rgba(47,179,160,.38);
  --shadow-1:0 1px 2px rgba(0,0,0,.25),0 2px 6px rgba(0,0,0,.30);
  --shadow-2:0 4px 14px rgba(0,0,0,.40),0 14px 32px rgba(0,0,0,.50);
}

/* ============================================================
   CONTROLES NATIVOS — o navegador precisa SABER o tema.
   Sem `color-scheme`, ele desenha as partes que são dele (a seta do select, a LISTA
   que abre, a caixa da checkbox, as barras de rolagem) sempre em CLARO — era o
   retângulo branco no meio do tema escuro. A lista aberta é a única peça que CSS
   nosso não alcança: só o `color-scheme` a conserta. Segue o [data-theme] (o botão
   do usuário), não só o @media — senão trocar o tema na mão não levava os nativos.
   O chevron e o tique são SVG: `var()` não funciona dentro do data-URI, então cada
   tema traz o seu.
   ============================================================ */
:root{
  color-scheme: light;
  --chevron: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%238A867C" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>');
  --tick: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>');
  --calendario: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%238A867C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="16" rx="2"/><path d="M16 3v4M8 3v4M3 11h18"/></svg>');
}
@media (prefers-color-scheme: dark){
  :root{
    color-scheme: dark;
    --chevron: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%2393A0B0" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>');
    --tick: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%230B0F14" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>');
    --calendario: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%2393A0B0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="16" rx="2"/><path d="M16 3v4M8 3v4M3 11h18"/></svg>');
  }
}
:root[data-theme="light"]{
  color-scheme: light;
  --chevron: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%238A867C" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>');
  --tick: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%23FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>');
  --calendario: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%238A867C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="16" rx="2"/><path d="M16 3v4M8 3v4M3 11h18"/></svg>');
}
:root[data-theme="dark"]{
  color-scheme: dark;
  --chevron: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%2393A0B0" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>');
  --tick: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%230B0F14" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>');
  --calendario: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%2393A0B0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="16" rx="2"/><path d="M16 3v4M8 3v4M3 11h18"/></svg>');
}

/* ============================================================
   TROCA DE TEMA: 1s (Bernardo, 2026-08-04 — a medida escolhida)

   Três versões até chegar aqui, e o que cada uma ensinou:
     · antes do #195 — instantânea: seca demais;
     · #195 — **1s com `!important`** e o botão TRAVADO no intervalo: a tela ficava um
       segundo parada no meio do caminho, nem clara nem escura, e o clique não respondia.
       Foi revertida no mesmo dia (o Bernardo flagrou em captura de tela);
     · 0,2s — curta demais pro gosto dele;
     · agora — **1s**, mas SEM as duas coisas que estragaram o #195 (ver abaixo). A duração
       nunca foi o problema: o problema era a tela ficar TRAVADA durante ela.

   O que fica de fora, de propósito, porque foi o que causou o estrago:
     🔴 **sem `!important`** — cada componente tem a sua transição (a dos campos é 0,18s) e
        ela não pode ser atropelada; as duas são curtas, então convivem;
     🔴 **sem travar o botão** — clicar duas vezes seguidas tem que funcionar.

   A regra só vale enquanto o JS mantém `.trocando-tema` no <html> (1s): fora dela, hover e
   foco seguem instantâneos — senão a interface inteira fica lenta. Reduced-motion pula o fade.

   ♻️ **16/10/2026 — RELIGADA.** Entre 25/09 e hoje ninguém punha a classe: o botão de tema do
   `base.html` saiu com a casca antiga, e o do app novo trocava na hora. O Bernardo decidiu
   ("coloca um time na troca de tema para escuro e claro"): quem a liga agora é o `BotaoDeTema`
   de `assets/js/lib/casca.jsx` (`FADE_DO_TEMA`, 1 s). ============================================================ */
@media (prefers-reduced-motion: no-preference){
  html.trocando-tema,
  html.trocando-tema *,
  html.trocando-tema *::before,
  html.trocando-tema *::after{
    transition: background-color 1s ease, border-color 1s ease,
                color 1s ease, fill 1s ease, box-shadow 1s ease;
  }
}


/* ============================================================
   Fluidez — polimento das interações (aditivo; mesmas cores).
   Segue o padrão da tela de Acessos: cartões reagem ao hover,
   controles trocam de estado com transição suave.
   ============================================================ */
html { scroll-behavior: smooth; scrollbar-gutter: stable; }


/* --- barra de rolagem: discreta e temática (todo o app, ambos os temas) --- */
* { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-button { display: none; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-corner { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border-strong); border: 2px solid transparent;
  background-clip: padding-box; border-radius: 999px; }
::-webkit-scrollbar-thumb:hover { background: var(--muted); }
