/* =====================================================================
   Agenda de Exames - versão Web
   estilo.css
   Paleta: azul (#2563eb), cinza (#334155 a #f1f5f9), branco (#ffffff)
   ===================================================================== */

/* ── Variáveis ─────────────────────────────────────────────────────── */
:root {
  --azul:          #2563eb;
  --azul-escuro:   #1d4ed8;
  --azul-claro:    #eff6ff;
  --azul-texto:    #1e40af;

  --roxo:          #7c3aed;
  --gradiente-marca: linear-gradient(135deg, var(--azul), var(--roxo));

  --sidebar-bg:    #0f172a;
  --sidebar-hover: #1e293b;
  --sidebar-ativo: #2563eb;
  --sidebar-txt:   #cbd5e1;
  --sidebar-sub:   #64748b;

  --bg:            #f1f5f9;
  --branco:        #ffffff;
  --borda:         #e2e8f0;

  --txt:           #1e293b;
  --txt-sec:       #64748b;
  --txt-muted:     #94a3b8;

  /* Verde/Âmbar refinados (v21): um passo mais claros que a v20 para
     não cansar em tabelas longas, mas mantendo contraste WCAG AA
     com o texto escuro. Ficam entre os tons 100 e 200 do Tailwind. */
  --verde:         #15803d;
  --verde-claro:   #cff4dd;
  --verde-suave:   #dcfce7;
  --verde-txt:     #14532d;

  --ambar:         #b45309;
  --ambar-claro:   #fdecaa;
  --ambar-suave:   #fef3c7;
  --ambar-txt:     #78350f;

  --vermelho:      #dc2626;
  --vermelho-claro:#fee2e2;
  --vermelho-txt:  #991b1b;

  --cinza-100:     #f1f5f9;
  --cinza-200:     #e2e8f0;
  --cinza-300:     #cbd5e1;
  --cinza-400:     #94a3b8;
  --cinza-500:     #64748b;
  --cinza-700:     #334155;

  --sidebar-w:     230px;
  --raio:          10px;
  --raio-sm:       6px;
  --sombra:        0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.05);
  --sombra-md:     0 4px 12px rgba(0,0,0,.09);
  --trans:         150ms ease;
}

/* ── Tema ESCURO ────────────────────────────────────────────────────
   Ativado via <html data-tema="dark"> (aplicado por base.html antes
   do CSS, para não haver "flash" de tema claro). Sobrescreve APENAS
   as variáveis - o resto do CSS continua igual.

   Estratégia: fundo escuro (não preto puro), cards um pouco mais
   claros, texto quase branco. Verde/Âmbar mantêm o par saturado
   agora - no fundo escuro, tons claros ganham destaque adequado. */
:root[data-tema="dark"] {
  --azul:          #3b82f6;
  --azul-escuro:   #2563eb;
  --azul-claro:    #1e3a8a;
  --azul-texto:    #93c5fd;

  --roxo:          #8b5cf6;

  --bg:            #0b1220;
  --branco:        #131c30;   /* usado como "cor de card" */
  --borda:         #223055;

  --txt:           #e5e7eb;
  --txt-sec:       #9ca3af;
  --txt-muted:     #6b7280;

  --verde:         #22c55e;
  --verde-claro:   #14532d;   /* fundo VERDE escuro para linhas Realizado */
  --verde-suave:   #0f3c22;
  --verde-txt:     #bbf7d0;

  --ambar:         #f59e0b;
  --ambar-claro:   #78350f;   /* fundo ÂMBAR escuro para linhas Pendente */
  --ambar-suave:   #5a260b;
  --ambar-txt:     #fde68a;

  --vermelho:      #ef4444;
  --vermelho-claro:#450a0a;
  --vermelho-txt:  #fca5a5;

  --cinza-100:     #1a2438;
  --cinza-200:     #223055;
  --cinza-300:     #37476b;
  --cinza-400:     #6b7280;
  --cinza-500:     #9ca3af;
  --cinza-700:     #d1d5db;

  --sombra:        0 1px 3px rgba(0,0,0,.35), 0 1px 2px rgba(0,0,0,.25);
  --sombra-md:     0 6px 18px rgba(0,0,0,.45);
}

/* Ajustes pontuais que não são só cor de variável, no tema escuro: */
:root[data-tema="dark"] body { background: var(--bg); color: var(--txt); }
:root[data-tema="dark"] .campo-input,
/* Dropdowns no tema escuro - fix de aparência "com onda" (spellcheck
   wavy underline que o Chromium aplica ao texto de selects sobre
   fundo escuro em algumas versões). Overrides defensivos: cor de
   preenchimento forçada, sem sublinhado, sem sombra de texto, e
   estiliza também <option> para o popup ficar consistente. */
:root[data-tema="dark"] .campo-select,
:root[data-tema="dark"] .campo-input {
  background-color: var(--branco);
  color: var(--txt);
  border-color: var(--borda);
  -webkit-text-fill-color: var(--txt);
  text-decoration: none;
  text-decoration-line: none;
  text-shadow: none;
  caret-color: var(--txt);
}
:root[data-tema="dark"] .campo-select {
  /* Seta do dropdown em tom claro no tema escuro */
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'><path d='M1 1l5 5 5-5' stroke='%239ca3af' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/></svg>");
}
/* Popup das opções - sem estilo explícito, alguns navegadores
   herdam a cor de fundo do sistema (branco) mesmo no tema escuro. */
:root[data-tema="dark"] .campo-select option {
  background-color: var(--branco);
  color: var(--txt);
}
:root[data-tema="dark"] .btn-secundario {
  background: var(--branco);
  color: var(--txt);
  border-color: var(--borda);
}
:root[data-tema="dark"] .btn-secundario:hover { background: var(--cinza-100); }
:root[data-tema="dark"] .btn-ico {
  background: var(--cinza-100);
  border-color: var(--borda);
  color: var(--cinza-500);
}
:root[data-tema="dark"] .btn-ghost { background: transparent; color: var(--txt-sec); }
:root[data-tema="dark"] .tabela thead tr { background: var(--cinza-100); }
:root[data-tema="dark"] .tabela th { color: var(--txt-sec); border-bottom-color: var(--borda); }
:root[data-tema="dark"] .tabela td { border-bottom-color: var(--borda); }
:root[data-tema="dark"] .tabela tbody tr:hover { background: rgba(59,130,246,.08); }
:root[data-tema="dark"] .caminho-banco {
  background: var(--cinza-100);
  color: var(--cinza-700);
}
:root[data-tema="dark"] .fin-nota { color: var(--txt-sec); border-top-color: var(--borda); }
:root[data-tema="dark"] .legenda-tabela { background: var(--cinza-100); border-bottom-color: var(--borda); }
:root[data-tema="dark"] .acumulado-card {
  background: linear-gradient(135deg, #172554 0%, #1e3a8a 100%);
  border-left-color: var(--azul);
}
:root[data-tema="dark"] .fin-card-destaque { border-top-color: var(--azul); }
:root[data-tema="dark"] .card { background: var(--branco); }
:root[data-tema="dark"] .modal-caixa { background: var(--branco); color: var(--txt); }
:root[data-tema="dark"] .modal-titulo { color: var(--txt); }
:root[data-tema="dark"] .modal-msg { color: var(--txt-sec); }
:root[data-tema="dark"] .action-menu { background: var(--branco); border: 1px solid var(--borda); }
:root[data-tema="dark"] .action-menu-item { color: var(--txt); }
:root[data-tema="dark"] .action-menu-item:hover { background: var(--cinza-100); }
:root[data-tema="dark"] .topbar-mobile { background: #050914; }
:root[data-tema="dark"] .toast.sucesso { background: #14532d; }
:root[data-tema="dark"] .toast.erro    { background: #7f1d1d; }
:root[data-tema="dark"] .toast.info    { background: var(--azul-escuro); }
:root[data-tema="dark"] .config-bloco-icone.cinza { background: var(--cinza-100); color: var(--txt-sec); }
:root[data-tema="dark"] .config-bloco-icone.azul  { background: rgba(59,130,246,.18); color: var(--azul); }
:root[data-tema="dark"] .municipio-item { background: var(--branco); border-bottom-color: var(--borda); }
:root[data-tema="dark"] .municipio-item:hover { background: var(--cinza-100); }
:root[data-tema="dark"] .municipio-item.padrao { background: rgba(59,130,246,.18); }
:root[data-tema="dark"] .municipios-lista { border-color: var(--borda); }
:root[data-tema="dark"] .municipios-vazio { background: var(--branco); color: var(--txt-muted); }
:root[data-tema="dark"] .cal-celula:hover:not(:disabled):not(.selecionado) { background: var(--cinza-100); }
:root[data-tema="dark"] .dia-item.realizado { background: var(--verde-claro); color: var(--verde-txt); }
:root[data-tema="dark"] .dia-item.pendente  { background: var(--ambar-claro); color: var(--ambar-txt); }
:root[data-tema="dark"] .totais-realizados { color: #86efac; }
:root[data-tema="dark"] .totais-pendentes  { color: #fcd34d; }
:root[data-tema="dark"] .totais-total      { color: #93c5fd; }
:root[data-tema="dark"] .data-status-icone.realizado { color: #4ade80; }
:root[data-tema="dark"] .data-status-icone.pendente  { color: #fbbf24; }
:root[data-tema="dark"] .fin-num { color: #93c5fd; }
:root[data-tema="dark"] .acumulado-valor { color: #93c5fd; }
:root[data-tema="dark"] .card-stat-icone.verde  { background: rgba(34,197,94,.18);  color: #86efac; }
:root[data-tema="dark"] .card-stat-icone.ambar  { background: rgba(245,158,11,.18); color: #fbbf24; }
:root[data-tema="dark"] .card-stat-icone.azul   { background: rgba(59,130,246,.18); color: #93c5fd; }

/* ── Reset básico ──────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

body {
  font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
  font-size: 14px;
  color: var(--txt);
  background: var(--bg);
  height: 100vh;
  overflow: hidden;
}

a { color: inherit; text-decoration: none; }
button { cursor: pointer; font-family: inherit; }
input, select, textarea { font-family: inherit; font-size: inherit; }

/* ── Layout principal ──────────────────────────────────────────────── */
.layout {
  display: flex;
  height: 100vh;
  overflow: hidden;
}

/* ── Topbar mobile e botões do drawer ─────────────────────────────── */
/* Padrão: ocultos em desktop. As media queries abaixo os ativam em mobile. */
.topbar-mobile     { display: none; }
.btn-hamburger,
.btn-fechar-sidebar { display: none; }
.sidebar-backdrop  {
  position: fixed; inset: 0;
  background: rgba(15, 23, 42, .55);
  backdrop-filter: blur(2px);
  z-index: 998;
  opacity: 0; pointer-events: none;
  transition: opacity 200ms ease;
}
.sidebar-backdrop.aberto { opacity: 1; pointer-events: auto; }

/* ── Sidebar ───────────────────────────────────────────────────────── */
.sidebar {
  width: var(--sidebar-w);
  min-width: var(--sidebar-w);
  background: #0d1117;
  display: flex;
  flex-direction: column;
  overflow-y: auto;
  border-right: 1px solid rgba(255,255,255,.06);
}

.sidebar-topo {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 20px 16px 18px;
  border-bottom: 1px solid rgba(255,255,255,.07);
}

.sidebar-logo {
  width: 34px;
  height: 34px;
  background: var(--gradiente-marca);
  border-radius: 9px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  font-size: 18px;
  color: #fff;
  box-shadow: 0 2px 8px rgba(37,99,235,.4);
}

.sidebar-titulo {
  font-size: 14px;
  font-weight: 700;
  color: #fff;
  letter-spacing: -.2px;
}

.sidebar-nav {
  display: flex;
  flex-direction: column;
  padding: 14px 10px;
  gap: 3px;
  flex: 1;
}

.nav-link {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 9px 10px;
  border-radius: 8px;
  color: #8b9cb3;
  font-size: 13.5px;
  font-weight: 500;
  transition: background var(--trans), color var(--trans);
}

.nav-link:hover {
  background: rgba(255,255,255,.06);
  color: #fff;
}

.nav-link.ativo {
  background: rgba(255,255,255,.09);
  color: #fff;
}

/* Ícones do sidebar - TODOS monocromáticos brancos, com fundo neutro
   sutil. As classes de cor (.azul/.roxo/.verde/.laranja) ainda podem
   estar nos templates: são ignoradas visualmente aqui, mantendo o
   estilo minimalista consistente com o Phosphor Icons. */
.nav-icon {
  width: 30px;
  height: 30px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  flex-shrink: 0;
  transition: transform 150ms ease, background 150ms ease;
  background: rgba(255,255,255,.08);
  color: #fff;
}

.nav-link:hover .nav-icon {
  transform: scale(1.05);
  background: rgba(255,255,255,.14);
}
.nav-link.ativo .nav-icon {
  transform: scale(1.05);
  background: rgba(255,255,255,.18);
}

/* ── Área de conteúdo ──────────────────────────────────────────────── */
.conteudo {
  flex: 1;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 24px 26px 32px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  min-height: 0;
}

/* Na página Agendar, bloqueia o scroll da área principal para que
   o calendário ocupe exatamente o espaço disponível */
.conteudo.sem-scroll {
  overflow-y: hidden;
  padding-bottom: 16px;
}

/* ── Cabeçalho de página ───────────────────────────────────────────── */
.pagina-header { margin-bottom: 2px; }

.pagina-titulo {
  font-size: 20px;
  font-weight: 700;
  color: var(--txt);
  line-height: 1.2;
}

/* ── Títulos de seção ──────────────────────────────────────────────── */
.secao-titulo {
  font-size: 15px;
  font-weight: 700;
  color: var(--txt);
  margin-top: 4px;
  margin-bottom: -6px;
}

/* ── Cards ─────────────────────────────────────────────────────────── */
.card {
  background: var(--branco);
  border-radius: var(--raio);
  box-shadow: var(--sombra);
  padding: 20px 22px;
}

.card-inline {
  padding: 14px 20px;
}

/* ── Barra de filtros ──────────────────────────────────────────────── */
.filtro-barra {
  display: flex;
  align-items: flex-end;
  gap: 14px;
  flex-wrap: wrap;
  row-gap: 10px;
}
.filtro-barra .filtro-grupo { flex: 0 1 auto; }

.filtro-grupo { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.filtro-label { font-size: 11px; font-weight: 600; color: var(--txt-sec); text-transform: uppercase; letter-spacing: .4px; }
.filtro-select { width: auto; min-width: 150px; }
.filtro-total  { font-size: 12px; color: var(--txt-sec); margin-left: auto; align-self: center; }

/* ── Campos de formulário ──────────────────────────────────────────── */
.campo-grupo { display: flex; flex-direction: column; gap: 5px; margin-bottom: 14px; }
.campo-label { font-size: 12px; font-weight: 600; color: var(--txt-sec); }

.campo-input, .campo-select {
  padding: 8px 10px;
  border: 1.5px solid var(--borda);
  border-radius: var(--raio-sm);
  background: #fff;
  color: var(--txt);
  font-size: 13.5px;
  transition: border-color var(--trans), box-shadow var(--trans);
  outline: none;
}

/* Seta custom nos <select> - garante que apareça em qualquer navegador,
   com espaço reservado à direita para não sobrepor o texto da opção. */
.campo-select {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  padding-right: 32px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'><path d='M1 1l5 5 5-5' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  background-repeat: no-repeat;
  background-position: right 10px center;
  background-size: 12px 8px;
}
.campo-select::-ms-expand { display: none; }

.campo-input:focus, .campo-select:focus {
  border-color: var(--azul);
  box-shadow: 0 0 0 3px rgba(37,99,235,.12);
}

.campo-input:disabled, .campo-select:disabled {
  background: var(--cinza-100);
  color: var(--txt-sec);
  cursor: not-allowed;
}

/* ── Botões ─────────────────────────────────────────────────────────── */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 8px 16px;
  border: none;
  border-radius: var(--raio-sm);
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
  transition: background var(--trans), opacity var(--trans), box-shadow var(--trans);
  white-space: nowrap;
  text-decoration: none;
}

.btn i { font-size: 16px; }

.btn-primario {
  background: var(--azul);
  color: #fff;
}
.btn-primario:hover:not(:disabled) { background: var(--azul-escuro); }
.btn-primario:disabled { opacity: .5; cursor: not-allowed; }

.btn-secundario {
  background: var(--branco);
  color: var(--txt);
  border: 1.5px solid var(--borda);
}
.btn-secundario:hover { background: var(--cinza-100); }

.btn-perigo { background: var(--vermelho-claro); color: var(--vermelho); }
.btn-perigo:hover { background: #fecaca; }

.btn-ghost {
  background: transparent;
  color: var(--txt-sec);
  border: 1.5px solid var(--borda);
}
.btn-ghost:hover { background: var(--cinza-100); color: var(--txt); }

.btn-ico {
  background: var(--cinza-100);
  border: 1.5px solid var(--borda);
  border-radius: var(--raio-sm);
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  color: var(--cinza-500);
  cursor: pointer;
  transition: background var(--trans);
}
.btn-ico:hover { background: var(--cinza-200); color: var(--txt); }

/* ── Calendário ─────────────────────────────────────────────────────── */

/*
  A tela de Agendar usa um layout de duas colunas que deve caber
  inteiramente na viewport, sem barra de rolagem vertical, em qualquer
  tamanho de monitor. Para isso:
  - A área de conteúdo (.conteudo) tem overflow-y: auto só para
    as outras páginas; na página Agendar ela não rola.
  - O .agendar-grid usa a altura que sobra da viewport.
  - As células do calendário usam clamp() para se ajustarem
    proporcionalmente sem ultrapassar o espaço disponível.
*/
.agendar-grid {
  display: grid;
  /* V27: por padrao, uma coluna. O formulario abre em janela de contexto.
     A segunda coluna volta so no modo Multiplos dias (.modo-multi). */
  grid-template-columns: 1fr;
  gap: 16px;
  align-items: start;
  /* Ocupa toda a altura disponível menos o cabeçalho da página */
  height: calc(100vh - 88px);
  max-height: 900px;
}
.agendar-grid.modo-multi {
  grid-template-columns: 1fr 320px;
}
/* V27: barra do topo do card do calendario, com o botao Novo agendamento. */
.cal-topbar {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  gap: 8px;
  margin: 0 0 10px 0;
  flex-shrink: 0;
}
.btn-novo-agend {
  gap: 6px;
}
/* V27: form-card dentro do modal ocupa toda a caixa, sem borda dupla. */
.modal-form-agend { max-width: 460px; width: 92vw; }
.modal-form-agend .modal-form-corpo { padding-top: 4px; }
.modal-form-agend .form-card {
  box-shadow: none;
  border: 0;
  padding: 0;
  height: auto;
  background: transparent;
}
/* V27: no modo LISTA da janela (clicar num dia no calendario), esconde
   os campos do formulario e mostra so a lista de agendamentos do dia
   pra o usuario escolher qual editar (ou criar novo neste dia). */
.form-card.modo-lista .form-modo,
.form-card.modo-lista .form-data-label,
.form-card.modo-lista .campo-grupo,
.form-card.modo-lista .form-acoes,
.form-card.modo-lista #multi-painel { display: none !important; }
.form-card.modo-lista .dia-lista-wrap { display: block !important; }
.dia-lista-acao { margin-top: 12px; display: flex; justify-content: center; }
.dia-lista-acao .btn { width: 100%; justify-content: center; }

/* V28: listagem embaixo do calendario, na propria visao Calendario. */
.cal-lista-inline {
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px solid var(--borda);
}
.cal-lista-inline-titulo {
  display: flex; align-items: center; gap: 6px;
  font-size: 13px; font-weight: 600; color: var(--txt-sec);
  margin-bottom: 8px;
}
.cal-lista-inline .cvl-lista { max-height: none; }

.calendario-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: hidden;
  padding: 14px 16px;
}

.form-card {
  height: 100%;
  overflow-y: auto;
  padding: 16px 18px;
}

.cal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
  flex-shrink: 0;
}

.cal-mes-ano {
  font-size: 15px;
  font-weight: 700;
  color: var(--txt);
}

.cal-semana-header {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  text-align: center;
  margin-bottom: 4px;
  flex-shrink: 0;
}
.cal-semana-header span {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--txt-sec);
  text-transform: uppercase;
  letter-spacing: .3px;
  padding: 3px 0;
}
.cal-semana-header span.dom { color: var(--txt-muted); }

.cal-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 3px;
  flex: 1;          /* ocupa o espaço restante do card */
  min-height: 0;    /* permite que o flex comprima o grid */
}

/*
  Células com altura responsiva:
  clamp(mínimo, ideal, máximo)
  - mínimo: 30px - garante legibilidade em monitores muito pequenos
  - ideal: 7.5vh - ajusta proporcionalmente à altura da janela
  - máximo: 58px - impede células grandes demais em monitores 4K
*/
.cal-celula {
  display: flex;
  align-items: center;
  justify-content: center;
  height: clamp(30px, 7.5vh, 58px);
  border: none;
  border-radius: 7px;
  background: transparent;
  font-size: clamp(11px, 1.4vh, 14px);
  font-weight: 500;
  color: var(--txt);
  cursor: pointer;
  transition: background var(--trans), color var(--trans);
}

.cal-celula:hover:not(:disabled):not(.selecionado) { background: var(--cinza-100); }
.cal-celula.vazia  { visibility: hidden; }
.cal-celula.dom    { color: var(--txt-muted); cursor: not-allowed; }
.cal-celula:disabled { color: var(--txt-muted); cursor: not-allowed; }

.cal-celula.pendente  { background: var(--ambar-claro); color: var(--ambar-txt); font-weight: 700; }
.cal-celula.realizado { background: var(--verde-claro);  color: var(--verde-txt);  font-weight: 700; }
.cal-celula.selecionado { background: var(--azul) !important; color: #fff !important; font-weight: 700; }

.cal-legenda {
  display: flex;
  gap: 14px;
  margin-top: 10px;
  flex-wrap: wrap;
  flex-shrink: 0;
}
.legenda-item { display: flex; align-items: center; gap: 5px; font-size: 11px; color: var(--txt-sec); }
.legenda-dot { width: 11px; height: 11px; border-radius: 3px; display: inline-block; }
.legenda-dot.pendente   { background: var(--ambar-claro); border: 1px solid var(--ambar); }
.legenda-dot.realizado  { background: var(--verde-claro); border: 1px solid var(--verde); }
.legenda-dot.selecionado { background: var(--azul); }

/* ── Formulário de agendamento ─────────────────────────────────────── */
.form-modo { margin-bottom: 10px; }

.form-modo-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px;
  border-radius: 20px;
  font-size: 12px;
  font-weight: 700;
}
.form-modo-badge.novo     { background: var(--azul-claro); color: var(--azul-texto); }
.form-modo-badge.editando { background: var(--ambar-claro); color: var(--ambar-txt); }

.form-data-label {
  font-size: 13px;
  color: var(--txt-sec);
  margin-bottom: 16px;
  min-height: 18px;
}

.form-acoes {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 18px;
}

/* Lista de agendamentos do dia */
.dia-lista-wrap { border-top: 1px solid var(--borda); padding-top: 14px; }
.dia-lista-titulo {
  font-size: 12px;
  font-weight: 700;
  color: var(--txt-sec);
  text-transform: uppercase;
  letter-spacing: .4px;
  margin-bottom: 8px;
  display: flex;
  align-items: center;
  gap: 6px;
}
.dia-lista-titulo small { font-weight: 400; color: var(--txt-muted); text-transform: none; }
.dia-lista-titulo i { font-size: 14px; }

.dia-item {
  padding: 9px 12px;
  border-radius: var(--raio-sm);
  margin-bottom: 5px;
  cursor: pointer;
  border: 1.5px solid transparent;
  transition: border-color var(--trans), background var(--trans);
}
.dia-item:hover  { border-color: var(--azul); }
.dia-item.realizado { background: var(--verde-claro); }
.dia-item.pendente  { background: var(--ambar-claro); }
.dia-item.em-edicao { border-color: var(--azul); box-shadow: 0 0 0 3px rgba(37,99,235,.1); }

.dia-item-hora { font-weight: 700; font-size: 13px; display: flex; align-items: center; gap: 5px; }
.dia-item-hora i { font-size: 13px; }
.dia-item-info { font-size: 11px; color: var(--txt-sec); margin-top: 2px; }
.dia-item-mun {
  display: flex; align-items: center; gap: 4px;
  font-size: 11.5px; color: var(--txt); margin-top: 2px; font-weight: 600;
}
.dia-item-mun i { font-size: 12px; color: var(--azul); }

/* Ajuda inline sob campos do formulário */
.campo-ajuda {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 11.5px; color: var(--txt-muted); margin-top: 3px;
}
.campo-ajuda i { font-size: 13px; }
.campo-ajuda a { color: var(--azul); font-weight: 600; text-decoration: underline; }
.campo-ajuda-atencao { color: var(--ambar-txt); }
.campo-ajuda-atencao i { color: var(--ambar); }

/* ── Tabela ─────────────────────────────────────────────────────────── */
.tabela-wrapper {
  overflow-x: auto;
  border-radius: var(--raio-sm);
  border: 1px solid var(--borda);
  margin: -2px;
}

.tabela {
  width: 100%;
  border-collapse: collapse;
  font-size: 13.5px;
}

.tabela thead tr { background: var(--cinza-100); }

.tabela th {
  padding: 10px 12px;
  text-align: center;
  font-size: 11px;
  font-weight: 700;
  color: var(--txt-sec);
  text-transform: uppercase;
  letter-spacing: .4px;
  white-space: nowrap;
  border-bottom: 1px solid var(--borda);
}

/* Botao (i) de info ao lado do nome de coluna. Delegated click em app.js
   dispara toast com o texto de data-info. Hover title do proprio browser
   funciona em desktop. */
.col-info-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  padding: 0;
  margin-left: 4px;
  background: transparent;
  border: none;
  color: var(--azul);
  cursor: pointer;
  vertical-align: middle;
  border-radius: 50%;
  transition: background .12s;
}
.col-info-btn:hover { background: rgba(37,99,235,.12); }
.col-info-btn i { font-size: 14px; line-height: 1; }

/* Modal Custos do Dia: retirar / restaurar custo fixo esporadico */
.btn-mcd-acao {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 6px 10px;
  font-size: 12px;
  font-weight: 600;
  background: transparent;
  border: 1px solid var(--borda);
  border-radius: 6px;
  cursor: pointer;
  white-space: nowrap;
  color: var(--txt-sec);
  transition: background .12s, color .12s, border-color .12s;
}
.btn-mcd-acao i { font-size: 14px; }
.btn-mcd-acao.remover:hover {
  background: rgba(220,38,38,.08);
  border-color: rgba(220,38,38,.35);
  color: #b91c1c;
}
.btn-mcd-acao.restaurar {
  background: rgba(37,99,235,.08);
  border-color: rgba(37,99,235,.35);
  color: var(--azul);
}
.btn-mcd-acao.restaurar:hover { background: rgba(37,99,235,.16); }

.mcd-linha.excluido { opacity: .55; }
.mcd-linha.excluido .campo-label { text-decoration: line-through; text-decoration-color: rgba(0,0,0,.3); }
.mcd-tag-excluido {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 6px;
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .3px;
  background: rgba(220,38,38,.12);
  color: #b91c1c;
  border-radius: 4px;
  text-decoration: none;
}

.tabela td {
  padding: 7px 12px;
  border-bottom: 1px solid var(--cinza-200);
  vertical-align: middle;
  text-align: center;
  line-height: 1.35;
}

.tabela tbody tr:last-child td { border-bottom: none; }

.tabela tbody tr:hover { background: rgba(37,99,235,.03); }

/* Linhas seguem o MESMO esquema de cores do calendário (Agendar Exame):
   fundo saturado + texto escuro, para consistência entre módulos. */
.linha-realizado { background: var(--verde-claro); color: var(--verde-txt); }
.linha-pendente  { background: var(--ambar-claro); color: var(--ambar-txt); }
.linha-realizado:hover { background: #6ee7b7 !important; }
.linha-pendente:hover  { background: #fbbf24 !important; }
/* Textos secundários (dia da semana, hora fim, valor unit.) herdam a
   cor forte da linha, com opacidade para hierarquia visual. */
.linha-realizado .sub-dia-semana,
.linha-pendente  .sub-dia-semana,
.linha-realizado .sub-hora-fim,
.linha-pendente  .sub-hora-fim,
.linha-realizado .sub-valor-unit,
.linha-pendente  .sub-valor-unit { color: inherit; opacity: .78; }
/* Estado "sem cor" (-) dentro das linhas coloridas - fica quase invisível
   se usar o cinza padrão; força opacidade. */
.linha-realizado .col-vazio,
.linha-pendente  .col-vazio { color: inherit; opacity: .55; }

.col-check { width: 56px; text-align: center; }
.col-acoes { width: 50px; text-align: center; }

.tabela-vazia {
  text-align: center;
  color: var(--txt-muted);
  padding: 40px 14px !important;
  font-size: 13px;
}

/* Checkbox da listagem */
.btn-check {
  background: none;
  border: none;
  padding: 4px;
  font-size: 20px;
  color: var(--cinza-300);
  display: inline-flex;
  align-items: center;
  cursor: pointer;
  border-radius: 4px;
  transition: color var(--trans), background var(--trans);
}
.btn-check:hover { background: var(--cinza-100); color: var(--cinza-500); }
.btn-check.marcado { color: var(--verde); }
.btn-check.marcado:hover { color: var(--verde-txt); background: var(--verde-claro); }

/* Botões de ação nas linhas */
.btn-acao {
  background: none;
  border: none;
  padding: 5px;
  font-size: 16px;
  border-radius: 4px;
  cursor: pointer;
  transition: background var(--trans), color var(--trans);
  color: var(--cinza-400);
}
.btn-acao:hover { background: var(--cinza-100); color: var(--txt); }
.btn-acao.btn-editar:hover  { background: var(--azul-claro); color: var(--azul); }
.btn-acao.btn-excluir:hover { background: var(--vermelho-claro); color: var(--vermelho); }

/* ── Badges ─────────────────────────────────────────────────────────── */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 9px;
  border-radius: 20px;
  font-size: 11.5px;
  font-weight: 700;
  white-space: nowrap;
}
.badge i { font-size: 13px; }
.badge-realizado { background: var(--verde-claro); color: var(--verde-txt); }
.badge-pendente  { background: var(--ambar-claro); color: var(--ambar-txt); }

/* ── Cards de estatística (Financeiro) ──────────────────────────────── */
.cards-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}

.card-stat {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 18px 20px;
}

.card-stat-icone {
  width: 44px;
  height: 44px;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  flex-shrink: 0;
}
.card-stat-icone.verde   { background: var(--verde-claro);   color: var(--verde); }
.card-stat-icone.ambar   { background: var(--ambar-claro);   color: var(--ambar); }
.card-stat-icone.azul    { background: var(--azul-claro);    color: var(--azul); }
.card-stat-icone.cinza   { background: var(--cinza-100);     color: var(--cinza-500); }

.card-stat-label { font-size: 11.5px; color: var(--txt-sec); margin-bottom: 4px; }
.card-stat-valor { font-size: 26px; font-weight: 800; color: var(--azul); line-height: 1; }

.fin-periodo { font-size: 13px; font-weight: 700; color: var(--azul); margin-left: auto; align-self: center; }

.fin-nota {
  font-size: 11.5px;
  color: var(--txt-sec);
  padding: 10px 14px 2px;
  border-top: 1px solid var(--borda);
  margin-top: 4px;
  line-height: 1.6;
}

/* ── Configurações ──────────────────────────────────────────────────── */
.config-card { padding: 0; }

.config-bloco {
  display: flex;
  gap: 16px;
  padding: 22px;
}

.config-bloco-icone {
  width: 42px;
  height: 42px;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  flex-shrink: 0;
  margin-top: 2px;
}

.config-bloco-corpo { flex: 1; }
.config-bloco-titulo { font-size: 14.5px; font-weight: 700; margin-bottom: 6px; }
.config-bloco-desc {
  font-size: 13px;
  color: var(--txt-sec);
  line-height: 1.6;
  margin-bottom: 6px;
}
.caminho-banco {
  font-family: 'Consolas', 'Courier New', monospace;
  font-size: 12px;
  background: var(--cinza-100);
  padding: 6px 10px;
  border-radius: 5px;
  color: var(--cinza-700);
  word-break: break-all;
}

.config-linha-form {
  display: flex;
  align-items: flex-end;
  gap: 10px;
  flex-wrap: wrap;
  margin-top: 10px;
}
.config-linha-form .campo-label { margin-bottom: 4px; display: block; }

.config-botoes { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }

/* ── Tema Claro/Escuro (Configurações) ─────────────────────────────── */
.tema-toggle {
  display: inline-flex;
  gap: 8px;
  padding: 4px;
  background: var(--cinza-100);
  border-radius: 10px;
  margin-top: 10px;
}
.tema-opcao { position: relative; cursor: pointer; }
.tema-opcao input { position: absolute; opacity: 0; inset: 0; cursor: pointer; }
.tema-opcao-visual {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 16px;
  border-radius: 8px;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--txt-sec);
  transition: background var(--trans), color var(--trans), box-shadow var(--trans);
  min-width: 96px;
  justify-content: center;
}
.tema-opcao-visual i { font-size: 17px; }
.tema-opcao input:checked + .tema-opcao-visual {
  background: var(--branco);
  color: var(--azul);
  box-shadow: var(--sombra);
}
.tema-opcao:hover .tema-opcao-visual { color: var(--txt); }

/* ── Municípios (Configurações) ─────────────────────────────────────── */
.municipios-lista {
  list-style: none;
  margin: 14px 0 0;
  padding: 0;
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
  overflow: hidden;
}

.municipio-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--cinza-200);
  background: var(--branco);
  transition: background var(--trans);
}
.municipio-item:last-child { border-bottom: none; }
.municipio-item:hover { background: var(--cinza-100); }
.municipio-item.padrao { background: var(--azul-claro); }
.municipio-item.padrao:hover { background: #dbeafe; }

.municipio-nome {
  font-size: 14px;
  font-weight: 600;
  color: var(--txt);
  flex: 1;
}

.municipio-badge-padrao {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: 20px;
  background: var(--azul);
  color: #fff;
  font-size: 11px;
  font-weight: 700;
}
.municipio-badge-padrao i { font-size: 12px; }

.municipios-vazio {
  list-style: none;
  padding: 16px 12px;
  text-align: center;
  color: var(--txt-muted);
  font-size: 13px;
  font-style: italic;
  background: var(--branco);
}

/* Radio "padrão" com aparência de estrela clicável */
.municipio-padrao-radio {
  position: relative;
  cursor: pointer;
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.municipio-padrao-radio input {
  position: absolute;
  opacity: 0;
  inset: 0;
  cursor: pointer;
}
.radio-visual {
  width: 18px;
  height: 18px;
  border: 2px solid var(--cinza-300);
  border-radius: 50%;
  transition: border-color var(--trans), background var(--trans);
  position: relative;
}
.municipio-padrao-radio:hover .radio-visual { border-color: var(--azul); }
.municipio-padrao-radio input:checked + .radio-visual {
  border-color: var(--azul);
  background: var(--azul);
}
.municipio-padrao-radio input:checked + .radio-visual::after {
  content: '';
  position: absolute;
  inset: 3px;
  background: #fff;
  border-radius: 50%;
}

.municipio-excluir { flex-shrink: 0; }

.btn-upload { cursor: pointer; }

/* ── Alertas ────────────────────────────────────────────────────────── */
.alerta {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 14px 16px;
  border-radius: var(--raio-sm);
  font-size: 13px;
  line-height: 1.6;
  margin-top: 16px;
}
.alerta i { font-size: 18px; flex-shrink: 0; margin-top: 1px; }
.alerta-sucesso { background: var(--verde-claro); color: var(--verde-txt); }
.alerta-erro    { background: var(--vermelho-claro); color: var(--vermelho-txt); }

/* ── Toast ──────────────────────────────────────────────────────────── */
#toast-container {
  position: fixed;
  bottom: 24px;
  right: 24px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: 9999;
  pointer-events: none;
}

.toast {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 18px;
  border-radius: var(--raio-sm);
  font-size: 13.5px;
  font-weight: 600;
  box-shadow: var(--sombra-md);
  pointer-events: auto;
  animation: toast-in .25s ease forwards;
  max-width: 360px;
}
.toast i { font-size: 18px; flex-shrink: 0; }
.toast.sucesso { background: #166534; color: #fff; }
.toast.erro    { background: #991b1b; color: #fff; }
.toast.info    { background: var(--azul); color: #fff; }
.toast.saindo  { animation: toast-out .3s ease forwards; }

@keyframes toast-in  { from { opacity:0; transform: translateY(12px); } to { opacity:1; transform: translateY(0); } }
@keyframes toast-out { from { opacity:1; transform: translateY(0); }   to { opacity:0; transform: translateY(12px); } }

/* ── Scrollbar discreta ─────────────────────────────────────────────── */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--cinza-300); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--cinza-400); }

/* ── Financeiro: resumo condensado (3 cards em 1 linha) ────────────── */
.fin-resumo-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

.fin-card {
  padding: 16px 18px 14px;
}

/* Card de destaque (Total) com borda sutil no topo */
.fin-card-destaque {
  border-top: 3px solid var(--azul);
}

.fin-card-cabecalho {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
}

/* Reaproveita o card-stat-icone mas em tamanho menor */
.fin-card .card-stat-icone {
  width: 34px;
  height: 34px;
  font-size: 18px;
  flex-shrink: 0;
}

.fin-card-titulo {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--txt-sec);
  text-transform: uppercase;
  letter-spacing: .4px;
}

/* Linha das duas métricas dentro do card */
.fin-card-metricas {
  display: grid;
  grid-template-columns: 1fr 1px 1fr;
  align-items: center;
  gap: 14px;
}

.fin-divisor {
  width: 1px;
  height: 44px;
  background: var(--borda);
  justify-self: center;
}

.fin-metrica {
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.fin-num {
  font-size: 26px;
  font-weight: 800;
  color: var(--azul);
  line-height: 1;
}

/* Valor monetário fica um pouco menor para caber bem */
.fin-metrica-moeda .fin-num {
  font-size: 20px;
}

/* Total do mês: valor em destaque maior */
.fin-num-grande {
  font-size: 24px !important;
}

.fin-num-label {
  font-size: 11px;
  color: var(--txt-muted);
  font-weight: 500;
}

/* ── Tabela detalhada com scroll interno ────────────────────────────── */
.fin-tabela-card {
  flex: 1;           /* ocupa o espaço restante da coluna */
  display: flex;
  flex-direction: column;
  padding: 0;
  overflow: hidden;
  min-height: 0;
}

.fin-tabela-cabecalho {
  display: flex;
  align-items: center;
  padding: 14px 18px 10px;
  border-bottom: 1px solid var(--borda);
  flex-shrink: 0;
}

.fin-tabela-titulo {
  font-size: 14px;
  font-weight: 700;
  color: var(--txt);
  display: flex;
  align-items: center;
  gap: 8px;
}

.fin-tabela-titulo i { font-size: 16px; color: var(--azul); }

/* Tabela rola internamente para não empurrar o layout */
.fin-tabela-scroll {
  flex: 1;
  overflow-y: auto;
  min-height: 0;
  border-radius: 0;
  border: none;
  border-top: 1px solid var(--borda);
}

.fin-nota {
  font-size: 11.5px;
  color: var(--txt-sec);
  padding: 10px 18px;
  border-top: 1px solid var(--borda);
  flex-shrink: 0;
  line-height: 1.6;
}

/* ── Seleção múltipla de dias ────────────────────────────────────────── */

/* Cabeçalho do calendário: lado direito com botão + seta */
.cal-header-dir {
  display: flex;
  align-items: center;
  gap: 6px;
}

/* Botão "Múltiplos dias" */
.btn-multi {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border: 1.5px solid var(--borda);
  border-radius: var(--raio-sm);
  background: var(--branco);
  color: var(--txt-sec);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  transition: background var(--trans), color var(--trans),
              border-color var(--trans);
  white-space: nowrap;
}
.btn-multi i { font-size: 15px; }
.btn-multi:hover {
  background: var(--azul-claro);
  color: var(--azul);
  border-color: var(--azul);
}
.btn-multi.ativo {
  background: var(--azul);
  color: #fff;
  border-color: var(--azul);
}
/* Rótulo curto só aparece no mobile (a media abaixo troca);
   contador só aparece quando modo multi está ativo */
.btn-multi-txt-curto { display: none; }
.btn-multi-contador {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 9px;
  background: rgba(255,255,255,.28);
  color: #fff;
  font-size: 11px;
  font-weight: 800;
  margin-left: 2px;
}
/* V27 hotfix: o display:inline-flex acima sobrescrevia o atributo HTML [hidden]
   (UA stylesheet), deixando o contador visivel mesmo escondido. Sem isto o
   valor da ultima selecao (ex: "2") ficava fantasma ao reabrir o modo Multi. */
.btn-multi-contador[hidden] { display: none !important; }

/* Célula selecionada no modo múltiplo:
   mantém a cor de status (pendente/realizado) como fundo,
   mas adiciona contorno azul bem visível */
.cal-celula.multi-sel {
  outline: 2.5px solid var(--azul);
  outline-offset: -2px;
  font-weight: 800 !important;
  color: var(--azul-texto) !important;
}
/* Se o dia também já tem status, o contorno aparece sobre o fundo colorido */
.cal-celula.pendente.multi-sel  { color: var(--ambar-txt) !important; }
.cal-celula.realizado.multi-sel { color: var(--verde-txt) !important; }
/* Dia sem status mas selecionado: fundo azul muito claro */
.cal-celula.multi-sel:not(.pendente):not(.realizado) {
  background: var(--azul-claro);
  color: var(--azul-texto) !important;
}

/* Badge de modo múltiplo no formulário */
.form-modo-badge.multiplo {
  background: rgba(124, 58, 237, .12);
  color: #6d28d9;
}

/* Painel do modo múltiplo no formulário lateral */
.multi-contador {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--txt-sec);
  margin-bottom: 8px;
}

/* Grade de chips */
.chips-container {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-bottom: 10px;
  min-height: 28px;
}

/* Chip individual de dia selecionado */
.chip-dia {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  background: var(--azul-claro);
  border: 1px solid rgba(37,99,235,.3);
  border-radius: 20px;
  font-size: 12px;
  font-weight: 600;
  color: var(--azul-texto);
}

/* Botão × dentro do chip */
.chip-x {
  background: none;
  border: none;
  padding: 0 0 0 2px;
  font-size: 13px;
  line-height: 1;
  color: var(--azul);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  opacity: .7;
  transition: opacity var(--trans);
}
.chip-x:hover { opacity: 1; }

/* Link/botão para limpar toda a seleção */
.btn-limpar-multi {
  background: none;
  border: none;
  padding: 0;
  font-size: 11.5px;
  color: var(--txt-muted);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-bottom: 14px;
  transition: color var(--trans);
}
.btn-limpar-multi:hover { color: var(--vermelho); }
.btn-limpar-multi i { font-size: 13px; }

/* ── V26: filtro por município no topo do card do calendário ─────── */
.cal-filtro-mun {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
  flex-wrap: wrap;
}
.cal-filtro-mun-lbl {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--txt-sec);
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.cal-filtro-mun-lbl i { font-size: 15px; }
.cal-filtro-mun .campo-select {
  min-width: 200px;
  max-width: 320px;
  flex: 1 1 auto;
}
@media (max-width: 640px) {
  .cal-filtro-mun { flex-direction: column; align-items: stretch; gap: 4px; }
  .cal-filtro-mun .campo-select { width: 100%; max-width: none; }
}

/* ── Alternador de visão (Calendário | Lista | Tabela) ────────────── */
.cal-view-switch {
  display: inline-flex;
  align-self: flex-end;
  margin-bottom: 8px;
  gap: 2px;
  padding: 3px;
  background: var(--cinza-100);
  border-radius: var(--raio-sm);
}
.cvs-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 12px;
  border: none;
  background: transparent;
  color: var(--txt-sec);
  font-size: 12.5px;
  font-weight: 600;
  border-radius: calc(var(--raio-sm) - 2px);
  cursor: pointer;
  transition: background var(--trans), color var(--trans);
}
.cvs-btn i { font-size: 15px; }
.cvs-btn:hover:not(.ativo) { color: var(--azul); }
.cvs-btn.ativo {
  background: var(--branco);
  color: var(--azul);
  box-shadow: 0 1px 2px rgba(0,0,0,.08);
}
/* Esconde o botão Multi quando a visão não é Calendário */
/* F14: botao Multi visivel nas 3 visoes; se clicado fora da Calendario, o JS forca a visao Calendario antes de ativar (agendar.html:632). */

/* ── Visão LISTA (agrupada por dia) ───────────────────────────────── */
.cvl-vazio, .cvt-vazio {
  padding: 24px 12px;
  text-align: center;
  color: var(--txt-muted);
  font-size: 13.5px;
}
.cvl-lista {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
/* V26 F26: no desktop, Lista e Tabela da Agenda de Exames ganham scroll interno.
   O container real e .calendario-card (height:100% do .agendar-grid que trava
   em calc(100vh-88px), overflow:hidden). A visao Lista/Tabela precisa se esticar
   pra ocupar a altura restante e rolar por dentro. Mobile ignora (body rola). */
@media (min-width: 641px) {
  .calendario-card > .cal-visao-cal,
  .calendario-card > .cal-visao-lst,
  .calendario-card > .cal-visao-tbl {
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    padding-right: 4px;
  }
}
.cvl-grupo {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.cvl-grupo-cab {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding: 4px 2px 6px;
  border-bottom: 1px solid var(--borda);
  font-size: 12.5px;
}
.cvl-grupo-data { font-weight: 700; color: var(--txt); }
.cvl-grupo-dia  { color: var(--txt-sec); text-transform: capitalize; }
.cvl-grupo-qtd  { color: var(--txt-muted); margin-left: auto; font-weight: 600; }
.cvl-item {
  display: grid;
  grid-template-columns: auto 1fr auto auto;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border: 1px solid var(--borda);
  border-left: 4px solid var(--cinza-100);
  border-radius: var(--raio-sm);
  background: var(--branco);
  color: var(--txt);
  text-align: left;
  font: inherit;
  cursor: pointer;
  transition: background var(--trans), border-color var(--trans);
}
.cvl-item.pendente  { border-left-color: var(--ambar); }
.cvl-item.realizado { border-left-color: var(--verde); }
.cvl-item:hover     { background: var(--cinza-100); border-color: var(--azul); }
.cvl-hora   { font-weight: 700; font-size: 13.5px; display: inline-flex; align-items: center; gap: 5px; }
.cvl-mun    { font-size: 12.5px; color: var(--txt-sec); display: inline-flex; align-items: center; gap: 4px; }
.cvl-qtd    { font-size: 12px; color: var(--txt-muted); }
.cvl-status {
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .3px;
}
.cvl-status.pendente  { background: var(--ambar-claro); color: var(--ambar-txt); }
.cvl-status.realizado { background: var(--verde-claro); color: var(--verde-txt); }

/* ── Visão TABELA ──────────────────────────────────────────────────── */
.cvt-wrap {
  width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.cvt-tabela {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.cvt-tabela th, .cvt-tabela td {
  padding: 9px 10px;
  border-bottom: 1px solid var(--borda);
  text-align: left;
  white-space: nowrap;
}
.cvt-tabela th {
  font-weight: 700;
  color: var(--txt-sec);
  background: var(--cinza-100);
  cursor: pointer;
  user-select: none;
}
.cvt-tabela th i { font-size: 12px; opacity: .55; margin-left: 2px; }
.cvt-tabela th.ativo      { color: var(--azul); }
.cvt-tabela th.ativo i    { opacity: 1; }
.cvt-td-qtd  { text-align: right; }
.cvt-dia     { color: var(--txt-muted); font-weight: 400; margin-left: 4px; }
.cvt-linha   { cursor: pointer; }
.cvt-linha:hover td { background: var(--cinza-100); }
.cvt-tag {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .3px;
}
.cvt-tag.pendente  { background: var(--ambar-claro); color: var(--ambar-txt); }
.cvt-tag.realizado { background: var(--verde-claro); color: var(--verde-txt); }

/* ── Totais do mês (canto superior direito - Agendar) ───────────────── */
.pagina-header-flex {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px;
}

.mes-totais-box {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12.5px;
  font-weight: 600;
  flex-shrink: 0;
}

.totais-label    { color: var(--txt-sec); }
.totais-realizados { color: var(--verde-txt); }
.totais-pendentes  { color: var(--ambar-txt); }
.totais-total      { color: var(--azul); }
.totais-sep        { color: var(--txt-muted); font-weight: 400; }
.totais-vazio      { color: var(--txt-muted); font-weight: 400; font-style: italic; }

/* ── Data + dia da semana juntos nas tabelas ────────────────────────── */
.sub-dia-semana {
  display: block;
  font-size: 10.5px;
  color: var(--txt-sec);
  font-weight: 400;
  margin-top: -1px;
}

/* Segunda linha do horário na coluna Hora (formato: 08:00 / às 10:00) - MESMO TAMANHO da primeira */
.sub-hora-fim {
  display: block;
  color: var(--txt);
  font-weight: 400;
  margin-top: -1px;
}

/* Valor unitário exibido em segunda linha, entre parênteses, na coluna
   "Qtd. Exames (valor unit.)" do Financeiro. Mesmo tratamento visual
   do dia da semana em Data. */
.sub-valor-unit {
  display: block;
  font-size: 10.5px;
  color: var(--txt-sec);
  font-weight: 400;
  margin-top: -1px;
  white-space: nowrap;
}
.col-qtd-unit {
  line-height: 1.25;
  white-space: nowrap;
}

/* Célula de hora com alinhamento centralizado (ambas linhas) */
.col-hora {
  white-space: nowrap;
}

/* ================================================================
   RESPONSIVO - MOBILE FIRST
   Estratégia:
   • mobile  (< 768px)   → bottom navigation fixada, layout em coluna
   • tablet  (768–1023px) → sidebar colapsado com ícones + textos mini
   • desktop (≥ 1024px)  → layout atual, sem alterações
   ================================================================ */

/* ── Mobile (< 768px) ─────────────────────────────────────────── */
@media (max-width: 767px) {

  /* --- Base: permite scroll na página inteira --- */
  body {
    height: auto;
    min-height: 100vh;
    overflow: visible;
  }

  .layout {
    flex-direction: column;
    height: auto;
    min-height: 100vh;
    overflow: visible;
  }

  /* --- Topbar mobile fixo no topo (com botão hambúrguer) --- */
  .topbar-mobile {
    display: flex;
    align-items: center;
    gap: 10px;
    position: fixed;
    top: 0; left: 0; right: 0;
    height: 54px;
    background: #0d1117;
    color: #fff;
    padding: 0 12px;
    z-index: 999;
    box-shadow: 0 2px 8px rgba(0,0,0,.15);
  }
  .topbar-mobile-titulo {
    display: flex; align-items: center; gap: 8px;
    font-size: 15px; font-weight: 700; letter-spacing: -.1px;
  }
  .topbar-mobile-titulo i {
    font-size: 18px;
    color: #60a5fa;
    background: var(--gradiente-marca);
    padding: 5px;
    border-radius: 7px;
    color: #fff;
  }

  .btn-hamburger {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px; height: 40px;
    background: transparent;
    border: none;
    color: #fff;
    font-size: 24px;
    border-radius: 8px;
    cursor: pointer;
  }
  .btn-hamburger:active { background: rgba(255,255,255,.1); }

  /* --- Sidebar → drawer lateral esquerda (fora da tela por padrão) --- */
  .sidebar {
    position: fixed;
    top: 0; left: 0; bottom: 0;
    width: 260px;
    min-width: 260px;
    height: 100vh;
    height: 100dvh;
    z-index: 1000;
    transform: translateX(-100%);
    transition: transform 260ms ease;
    border-right: 1px solid rgba(255,255,255,.06);
    border-top: none;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
  }
  .sidebar .sidebar-rodape {
    position: sticky;
    bottom: 0;
    background: #0d1117;
    z-index: 2;
  }
  .sidebar.aberto { transform: translateX(0); }

  /* Cabeçalho do sidebar com botão de fechar */
  .sidebar-topo {
    display: flex;
    position: relative;
    padding: 20px 16px 18px;
  }
  .btn-fechar-sidebar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    position: absolute;
    right: 10px; top: 16px;
    width: 36px; height: 36px;
    background: rgba(255,255,255,.06);
    border: none;
    color: #fff;
    font-size: 20px;
    border-radius: 8px;
    cursor: pointer;
  }
  .btn-fechar-sidebar:active { background: rgba(255,255,255,.15); }

  /* Nav volta a ser vertical (drawer lateral) */
  .sidebar-nav {
    flex-direction: column;
    padding: 10px;
    gap: 3px;
    width: 100%;
    align-items: stretch;
  }

  .nav-link {
    flex-direction: row;
    justify-content: flex-start;
    align-items: center;
    gap: 11px;
    padding: 12px 12px;
    font-size: 14px;
    border-radius: 8px;
    text-align: left;
  }

  .nav-icon {
    width: 34px;
    height: 34px;
    font-size: 18px;
    border-radius: 8px;
  }

  /* Impede scroll do body quando o drawer está aberto */
  body.sidebar-aberto { overflow: hidden; }

  /* --- Conteúdo: padding superior para não ficar sob a topbar --- */
  .conteudo {
    padding: calc(54px + 14px) 12px 24px;
    height: auto;
    overflow-y: visible;
    overflow-x: hidden;
  }

  /* Remove a restrição de scroll da tela Agendar (não faz sentido em mobile) */
  .conteudo.sem-scroll {
    overflow-y: visible;
  }

  /* --- Cabeçalho da página --- */
  .pagina-titulo { font-size: 17px; }

  .pagina-header-flex {
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
  }

  .mes-totais-box {
    font-size: 11px;
    flex-wrap: wrap;
    gap: 5px;
  }

  /* --- Barra de filtros: empilha os campos --- */
  .filtro-barra {
    flex-direction: row;        /* lado a lado no mobile */
    align-items: flex-end;
    gap: 8px;
    flex-wrap: wrap;
  }

  .filtro-grupo {
    display: flex;
    flex-direction: column;
    gap: 4px;
    flex: 1;
    min-width: 0;               /* permite comprimir */
  }

  .filtro-label { min-width: 34px; }
  .filtro-select { flex: 1; }

  /* --- Agendar Exame: calendário e formulário empilhados --- */
  .agendar-grid {
    grid-template-columns: 1fr;
    height: auto;
    max-height: none;
    gap: 12px;
  }

  .calendario-card {
    height: auto;
    padding: 12px;
  }

  .form-card {
    height: auto;
    overflow-y: visible;
    padding: 14px 14px 20px;
  }

  /* Célula do calendário: garante toque fácil (mín 40px) */
  .cal-celula {
    height: clamp(40px, 10.5vw, 52px);
    font-size: clamp(12px, 3.5vw, 14px);
    border-radius: 6px;
  }

  .cal-grid { gap: 2px; }

  /* Botão "Múltiplos dias" no mobile: troca rótulo longo por curto ("Multi"),
     mantém ícone + rótulo visíveis pra não virar botão mudo */
  .btn-multi-txt       { display: none; }
  .btn-multi-txt-curto { display: inline; }
  .btn-multi { padding: 5px 8px; }
  .cal-header-dir { gap: 4px; }

  /* --- Tabelas: scroll horizontal (preserva todos os dados) --- */
  .tabela-wrapper {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    margin: 0 -2px;
  }

  .tabela {
    font-size: 12.5px;
    min-width: 340px;   /* mais compacto - visível na maioria dos celulares */
  }

  .tabela th, .tabela td { padding: 5px 4px; font-size: 11.5px; }

  /* Compacta ainda mais colunas específicas no mobile */
  .tabela .col-hora { font-size: 11px; }
  .tabela .col-data { padding-left: 6px; }
  .data-linha { gap: 5px; }
  .data-status-icone { font-size: 15px; }
  .col-check { width: 42px !important; }
  .col-acoes { width: 40px !important; padding: 0 !important; }

  /* Botão de três pontos mais próximo da borda */
  .col-acoes .btn-menu { padding: 6px 4px; }

  /* --- Botões: toque mínimo de 44px (padrão Apple/Google) --- */
  .btn { min-height: 44px; }

  .btn-check {
    width: 44px;
    height: 44px;
    font-size: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  .btn-acao {
    width: 38px;
    height: 38px;
    font-size: 17px;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  /* --- Financeiro: cards em coluna única --- */
  .fin-resumo-row {
    grid-template-columns: 1fr 1fr;  /* 2 colunas */
    gap: 8px;
  }

  /* Terceiro card (Total do mês) ocupa largura toda */
  .fin-card-destaque {
    grid-column: 1 / -1;
  }

  .fin-card { padding: 10px 12px; }

  .fin-num { font-size: 20px; }
  .fin-metrica-moeda .fin-num { font-size: 18px; white-space: nowrap; }
  .fin-num-grande { font-size: 22px !important; white-space: nowrap; }
  .fin-card-titulo { font-size: 10px; }
  .fin-card .card-stat-icone { width: 28px; height: 28px; font-size: 15px; }
  .fin-card-cabecalho { margin-bottom: 8px; gap: 7px; }
  /* No mobile as duas métricas EMPILHAM (quantidade em cima, valor R$
     embaixo) - evita o valor R$ ficar espremido/quebrando linha. */
  .fin-card-metricas {
    grid-template-columns: 1fr;
    gap: 6px;
  }
  .fin-divisor {
    width: 100%;
    height: 1px;
  }
  .fin-metrica { text-align: left; }

  /* Tabela detalhada do financeiro: scroll horizontal */
  .fin-tabela-card { flex: none; overflow: visible; }
  .fin-tabela-scroll {
    overflow-x: auto;
    overflow-y: visible;
    -webkit-overflow-scrolling: touch;
  }

  /* --- Configurações: blocos empilhados --- */
  .config-bloco {
    flex-direction: column;
    padding: 16px;
    gap: 10px;
  }

  .config-bloco-icone { display: none; }

  .config-linha-form {
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
  }

  .config-linha-form .campo-input { width: 100%; }
  .campo-input, .campo-select { font-size: 16px; } /* evita zoom no iOS */

  .config-botoes {
    flex-direction: column;
    gap: 8px;
  }

  .config-botoes .btn {
    width: 100%;
    justify-content: center;
  }

  /* --- Cards de estatísticas (Financeiro) --- */
  .cards-grid { grid-template-columns: 1fr 1fr; gap: 10px; }
  .card-stat  { gap: 10px; padding: 14px 16px; }
  .card-stat-valor { font-size: 22px; }

  /* --- Títulos de seção --- */
  .secao-titulo { font-size: 14px; }

  /* --- Lista de agendamentos do dia (Agendar) --- */
  .dia-lista-wrap { margin-top: 12px; }
  .dia-item { padding: 10px 12px; }
  /* Garante espaço para o último item nunca ficar sob a bottom nav */
  .dia-lista-wrap:last-child .dia-item:last-child { margin-bottom: 30px; }

  /* --- Form Agendar: badges e ações em linha --- */
  .form-acoes { flex-wrap: wrap; gap: 8px; }
  .form-acoes .btn { flex: 1; justify-content: center; min-width: 120px; }
}

/* ── Tablet (768px – 1023px) ──────────────────────────────────── */
@media (min-width: 768px) and (max-width: 1023px) {

  /* Sidebar colapsado: ícone + mini-texto */
  .sidebar { width: 72px; min-width: 72px; }

  .sidebar-topo {
    padding: 14px 8px;
    justify-content: center;
    gap: 0;
    flex-direction: column;
    align-items: center;
  }

  .sidebar-titulo { display: none; }

  .nav-link {
    flex-direction: column;
    justify-content: center;
    align-items: center;
    gap: 3px;
    padding: 10px 4px;
    font-size: 9px;
  }

  .nav-icon { width: 28px; height: 28px; font-size: 15px; }

  /* Agendar: empilha calendário e formulário */
  .agendar-grid {
    grid-template-columns: 1fr;
    height: auto;
    max-height: none;
    gap: 14px;
  }

  .calendario-card { height: auto; }
  .form-card { height: auto; overflow-y: visible; }
  .conteudo.sem-scroll { overflow-y: auto; }

  /* Financeiro: 2 colunas nos cards */
  .fin-resumo-row { grid-template-columns: 1fr 1fr; }
  .fin-tabela-card { flex: none; }
  .fin-tabela-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }

  /* Tabelas: scroll horizontal se necessário */
  .tabela { min-width: 460px; }
  .tabela-wrapper { overflow-x: auto; -webkit-overflow-scrolling: touch; }

  /* Filtros: mantém linha mas comprime */
  .filtro-barra { flex-wrap: wrap; gap: 10px; }

  /* Botões maiores para toque em tablet */
  .btn { min-height: 42px; }
}

/* ══════════════════════════════════════════════════════════════════
   MODAL DE CONFIRMAÇÃO
   ══════════════════════════════════════════════════════════════════ */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0);
  backdrop-filter: blur(0);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9998;
  padding: 20px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 200ms ease, background 200ms ease, backdrop-filter 200ms ease;
}
.modal-overlay.aberto {
  background: rgba(15, 23, 42, .55);
  backdrop-filter: blur(4px);
  opacity: 1;
  pointer-events: auto;
}

.modal-caixa {
  background: var(--branco);
  border-radius: 14px;
  padding: 26px 24px 22px;
  max-width: 380px;
  width: 100%;
  box-shadow: 0 20px 50px rgba(0, 0, 0, .25);
  text-align: center;
  transform: scale(.94);
  transition: transform 200ms ease;
}
.modal-overlay.aberto .modal-caixa { transform: scale(1); }

.modal-icone {
  width: 54px;
  height: 54px;
  border-radius: 50%;
  margin: 0 auto 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 30px;
}
.modal-icone.perigo   { background: var(--vermelho-claro); color: var(--vermelho); }
.modal-icone.primario { background: var(--azul-claro);     color: var(--azul); }

.modal-titulo {
  font-size: 16px;
  font-weight: 700;
  color: var(--txt);
  margin-bottom: 6px;
}
.modal-msg {
  font-size: 13.5px;
  color: var(--txt-sec);
  line-height: 1.5;
  margin-bottom: 20px;
}
.modal-acoes {
  display: flex;
  gap: 8px;
  justify-content: center;
}
.modal-acoes .btn { min-width: 100px; justify-content: center; }

/* Botão perigo (para o modal) */
.btn-perigo {
  background: var(--vermelho);
  color: #fff;
}
.btn-perigo:hover:not(:disabled) { background: var(--vermelho-txt); }

/* ══════════════════════════════════════════════════════════════════
   ACTION MENU (dropdown flutuante)
   ══════════════════════════════════════════════════════════════════ */
.action-menu {
  position: fixed;
  background: var(--branco);
  border-radius: 10px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, .18);
  padding: 5px;
  min-width: 190px;
  /* V27: acima do modal-overlay (9998) pra menu 3 pontos aparecer sobre a janela. */
  z-index: 10001;
  opacity: 0;
  transform: translateY(-4px);
  pointer-events: none;
  transition: opacity 150ms ease, transform 150ms ease;
}
.action-menu.aberto { opacity: 1; transform: translateY(0); pointer-events: auto; }

.action-menu-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 9px 12px;
  background: none;
  border: none;
  border-radius: 6px;
  font-size: 13.5px;
  font-weight: 500;
  color: var(--txt);
  cursor: pointer;
  transition: background var(--trans);
  text-align: left;
}
.action-menu-item i { font-size: 17px; color: var(--txt-sec); }
.action-menu-item:hover { background: var(--cinza-100); }
.action-menu-item.cor-verde    { color: var(--verde-txt); }
.action-menu-item.cor-verde i  { color: var(--verde); }
.action-menu-item.cor-ambar    { color: var(--ambar-txt); }
.action-menu-item.cor-ambar i  { color: var(--ambar); }
.action-menu-item.cor-vermelho    { color: var(--vermelho-txt); }
.action-menu-item.cor-vermelho i  { color: var(--vermelho); }
.action-menu-item.cor-azul    { color: var(--azul-texto); }
.action-menu-item.cor-azul i  { color: var(--azul); }

/* Botão "três pontos" que abre o menu */
.btn-menu {
  background: none;
  border: none;
  padding: 6px 8px;
  font-size: 18px;
  color: var(--cinza-500);
  cursor: pointer;
  border-radius: 6px;
  transition: background var(--trans), color var(--trans);
  display: inline-flex;
  align-items: center;
}
.btn-menu:hover { background: var(--cinza-100); color: var(--txt); }

/* Coluna Data com ícone de status à esquerda + data e dia da semana à direita */
.col-data { text-align: left; padding-left: 10px; }
th.col-data { text-align: left; }   /* cabeçalho alinha igual ao corpo */

.data-linha {
  display: flex;
  align-items: center;
  gap: 8px;
}

.data-status-icone {
  font-size: 18px;
  flex-shrink: 0;
  line-height: 1;
}
.data-status-icone.realizado { color: var(--verde); }
.data-status-icone.pendente  { color: var(--ambar); }

.data-texto {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
  text-align: left;
}

/* Legenda no topo da tabela */
.legenda-tabela {
  display: flex;
  gap: 14px;
  align-items: center;
  padding: 10px 14px;
  border-bottom: 1px solid var(--borda);
  background: var(--cinza-100);
  font-size: 11.5px;
  color: var(--txt-sec);
  flex-wrap: wrap;
}
/* Cada item da legenda vira um "chip" com o MESMO fundo colorido das
   linhas da tabela - igualando ao esquema do calendário. */
.legenda-tabela-item {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 10px;
  border-radius: 20px;
  font-weight: 700;
}
.legenda-tabela-item i { font-size: 14px; }
.legenda-tabela-item.realizado {
  background: var(--verde-claro);
  color: var(--verde-txt);
}
.legenda-tabela-item.pendente {
  background: var(--ambar-claro);
  color: var(--ambar-txt);
}
.legenda-tabela-item.realizado i,
.legenda-tabela-item.pendente  i { color: inherit; }

/* No mobile, empilha melhor */
@media (max-width: 767px) {
  .legenda-tabela { padding: 8px 10px; gap: 10px; font-size: 11px; }
  .modal-caixa { padding: 22px 18px 18px; }
  .modal-acoes { flex-direction: column-reverse; gap: 6px; }
  .modal-acoes .btn { width: 100%; }
  .action-menu { min-width: 200px; }
  .action-menu-item { padding: 11px 14px; font-size: 14px; }
}

/* ══════════════════════════════════════════════════════════════════
   DASHBOARD FINANCEIRO
   ══════════════════════════════════════════════════════════════════ */

/* Painel do mês/ano no canto superior direito (mesma linguagem do totalizador) */
.fin-periodo {
  font-size: 13.5px;
  font-weight: 700;
  color: var(--azul);
}

/* Card do gráfico de barras */
.grafico-card {
  padding: 18px 20px 16px;
}

.grafico-titulo {
  font-size: 13px;
  font-weight: 700;
  color: var(--txt-sec);
  text-transform: uppercase;
  letter-spacing: .4px;
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.grafico-titulo i { font-size: 16px; color: var(--azul); }

.grafico-canvas-wrap {
  position: relative;
  height: 260px;
  width: 100%;
}

/* Card do acumulado do ano */
.acumulado-card {
  padding: 20px 22px;
  background: linear-gradient(135deg, #eff6ff 0%, #f0f9ff 100%);
  border-left: 4px solid var(--azul);
}

.acumulado-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
}

.acumulado-label {
  font-size: 12px;
  color: var(--txt-sec);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .3px;
}

.acumulado-valor {
  font-size: 30px;
  font-weight: 800;
  color: var(--azul);
  line-height: 1.1;
  margin: 4px 0 2px;
}

.acumulado-detalhe {
  font-size: 12.5px;
  color: var(--txt-sec);
}

.acumulado-icone {
  width: 52px;
  height: 52px;
  border-radius: 12px;
  background: rgba(37,99,235,.15);
  color: var(--azul);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 26px;
  flex-shrink: 0;
}

/* Botão "Ver detalhamento" */
.btn-detalhes {
  width: 100%;
  justify-content: center;
  padding: 12px 16px;
  font-size: 13.5px;
}

/* Ajustes mobile do dashboard */
@media (max-width: 767px) {
  .grafico-canvas-wrap  { height: 240px; }
  .grafico-card         { padding: 14px; }
  .grafico-titulo       { font-size: 12px; }

  .acumulado-card       { padding: 16px; }
  .acumulado-valor      { font-size: 24px; }
  .acumulado-icone      { width: 44px; height: 44px; font-size: 22px; }

  .btn-detalhes         { font-size: 13px; }
  .fin-periodo          { font-size: 12.5px; }
}

/* Título da tabela no financeiro - reserva espaço acima e abaixo,
   sobrescrevendo a margem negativa de .secao-titulo, para que a
   legenda cinza dentro do card não fique por cima do texto. */
.secao-titulo-tabela {
  margin-top: 12px;
  margin-bottom: 8px;
  padding-top: 4px;
}

/* No financeiro, tanto o th quanto as células da coluna Data ficam centralizadas */
th.col-data-centro { text-align: center !important; }
#tabela-detalhe td.col-data {
  text-align: center;
  padding-left: 8px;
}
#tabela-detalhe td.col-data .data-linha { justify-content: center; }
#tabela-detalhe td.col-data .data-texto { text-align: center; }

/* Na tabela da Listagem, a coluna Data fica CENTRALIZADA (título e valores) */
#tabela-listagem th.col-data,
#tabela-listagem td.col-data {
  text-align: center;
  padding-left: 8px;
}
#tabela-listagem td.col-data .data-linha { justify-content: center; }
#tabela-listagem td.col-data .data-texto { text-align: center; }

/* Coluna Município na Listagem */
.col-municipio {
  font-size: 12.5px;
  color: var(--txt);
  font-weight: 500;
  max-width: 140px;
  word-break: break-word;
}
.col-vazio { color: var(--txt-muted); }

/* Cabeçalhos de coluna em duas linhas (tabela do Financeiro) -
   sobrescreve o white-space: nowrap padrão para que o <br> seja
   respeitado e a coluna fique mais estreita. */
.tabela th.th-2linhas {
  white-space: normal;
  line-height: 1.15;
  padding: 8px 6px;
}


/* =====================================================================
   V22 - Multi-usuario com RBAC
   Adicoes: reset de font-family, telas auth, sidebar rodape, flash,
   pagina padrao (page-head + card cd), grid da conta.
   Se algo aqui conflitar com estilo pre-existente, revisar antes de
   remover: notas em <vault>/01_SISTEMAS/01_Padroes_Gerais/.
   ===================================================================== */

/* Padrao_Vault: Font_Inherit_em_Form (obrigatorio, senao inputs viram Arial) */
button, input, select, textarea { font-family: inherit; }

/* ── Sidebar: grupo label (separador entre "Operacao", "Config", "Admin") ── */
.sidebar-grupo-label {
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: var(--sidebar-sub);
  padding: 16px 20px 6px 20px;
  margin-top: 6px;
  border-top: 1px solid rgba(255, 255, 255, .06);
}

/* ── Sidebar: rodape (Sobre em linha propria + usuario + sair) ── */
.sidebar-rodape {
  margin-top: auto;
  padding: 12px;
  border-top: 1px solid rgba(255, 255, 255, .08);
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
}
/* V26: Sair vai ABAIXO dos dados do usuario (nao mais ao lado). */
.rodape-conta-linha {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
  min-width: 0;
}
.rodape-usuario {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: var(--raio-sm);
  color: var(--sidebar-txt);
  text-decoration: none;
  transition: background var(--trans);
  min-width: 0;
}
.rodape-usuario:hover,
.rodape-usuario.ativo { background: var(--sidebar-hover); }
.rodape-avatar {
  width: 34px;
  height: 34px;
  border-radius: 999px;
  background: var(--azul);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  flex-shrink: 0;
}
.rodape-info {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.rodape-nome {
  font-size: 13px;
  font-weight: 600;
  color: #fff;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rodape-perfil {
  font-size: 11px;
  color: var(--sidebar-txt);
  opacity: .75;
}
.rodape-sair {
  height: 34px;
  padding: 0 12px;
  border-radius: var(--raio-sm);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  width: 100%;
  color: var(--sidebar-txt);
  background: rgba(255,255,255,.06);
  border: 1px solid rgba(255,255,255,.1);
  text-decoration: none;
  font-size: 18px;
  transition: all var(--trans);
  flex-shrink: 0;
}
.rodape-sair-texto {
  font-size: 13px;
  font-weight: 600;
}
.rodape-sair:hover {
  background: var(--vermelho-claro);
  color: var(--vermelho);
  border-color: var(--vermelho);
}

/* V24: item Sobre em linha propria acima do usuario/sair (nao sobrepoe o nome) */
.rodape-sobre {
  height: 34px;
  padding: 0 12px;
  border-radius: var(--raio-sm);
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  color: var(--sidebar-txt);
  background: rgba(255,255,255,.06);
  border: 1px solid rgba(255,255,255,.1);
  text-decoration: none;
  font-size: 18px;
  transition: all var(--trans);
}
.rodape-sobre-texto {
  font-size: 13px;
  font-weight: 600;
}
.rodape-sobre-versao {
  font-size: 11px;
  font-weight: 700;
  opacity: .7;
  padding: 2px 6px;
  border-radius: 6px;
  background: rgba(255,255,255,.08);
  margin-left: auto;
}
.rodape-sobre:hover,
.rodape-sobre.ativo {
  background: var(--sidebar-hover);
  color: var(--azul);
  border-color: var(--azul);
}

/* V24: pagina /sobre (dados basicos + historico) */
.sobre-grid {
  display: grid;
  grid-template-columns: minmax(0, 340px) minmax(0, 1fr);
  gap: 16px;
  align-items: start;
}
@media (max-width: 900px) {
  .sobre-grid { grid-template-columns: 1fr; }
}
.sobre-basico { padding: 4px 4px 8px; }
.sobre-linha {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--linha);
}
.sobre-linha:last-child { border-bottom: 0; }
.sobre-rot {
  color: var(--cinza);
  font-size: 13px;
}
.sobre-val {
  font-size: 14px;
  text-align: right;
}
.sobre-historico {
  padding: 4px 4px 8px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.sobre-versao-bloco {
  border: 1px solid var(--linha);
  border-radius: 10px;
  padding: 12px 14px;
  background: var(--fundo-fraco, transparent);
}
.sobre-versao-cab {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}
.sobre-versao-tag {
  display: inline-block;
  padding: 3px 8px;
  border-radius: 6px;
  background: var(--azul);
  color: #fff;
  font-weight: 700;
  font-size: 12px;
  letter-spacing: .3px;
}
.sobre-versao-data {
  font-size: 12px;
  color: var(--cinza);
}
.sobre-versao-titulo {
  font-weight: 600;
  font-size: 14px;
}
.sobre-versao-lista {
  margin: 0;
  padding-left: 20px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.sobre-versao-lista li {
  font-size: 13.5px;
  line-height: 1.45;
}

/* ── Flash messages ── */
.flash-container {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 16px;
}
.flash {
  padding: 12px 16px;
  border-radius: var(--raio-sm);
  border-left: 4px solid var(--azul);
  background: var(--azul-claro);
  color: var(--azul-texto);
  font-size: 14px;
  line-height: 1.4;
}
.flash-success {
  border-left-color: var(--verde);
  background: var(--verde-suave);
  color: var(--verde-txt);
}
.flash-error {
  border-left-color: var(--vermelho);
  background: var(--vermelho-claro);
  color: var(--vermelho-txt);
}
.flash-info {
  border-left-color: var(--azul);
  background: var(--azul-claro);
  color: var(--azul-texto);
}

/* ── Tela de auth (login, primeiro acesso, esqueci senha) ── */
body.tela-auth {
  background: var(--bg);
  min-height: 100vh;
  display: block;
}
.auth-fundo {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 24px 16px;
}
.auth-caixa {
  width: 100%;
  max-width: 420px;
  background: var(--branco);
  border: 1px solid var(--borda);
  border-radius: var(--raio);
  box-shadow: var(--sombra-md);
  padding: 32px 28px;
}
.auth-cabecalho {
  text-align: center;
  margin-bottom: 24px;
}
.auth-logo {
  width: 60px;
  height: 60px;
  margin: 0 auto 12px auto;
  background: var(--azul);
  color: #fff;
  border-radius: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 32px;
}
.auth-titulo {
  font-size: 20px;
  font-weight: 700;
  margin: 0 0 4px 0;
  color: var(--txt);
}
.auth-subtitulo {
  font-size: 14px;
  color: var(--txt-sec);
  margin: 0;
}
.auth-intro {
  font-size: 14px;
  color: var(--txt-sec);
  line-height: 1.5;
  margin-bottom: 16px;
}
.auth-intro p { margin: 0 0 8px 0; }
.auth-intro-obs { font-size: 12.5px; color: var(--txt-muted); }
.auth-flash { margin-bottom: 16px; }
.auth-form {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.auth-campo {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.auth-campo label {
  font-size: 13px;
  font-weight: 600;
  color: var(--txt);
}
.auth-campo input {
  height: 40px;
  padding: 0 12px;
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
  background: var(--branco);
  color: var(--txt);
  font-size: 14px;
  outline: none;
  transition: border var(--trans), box-shadow var(--trans);
}
.auth-campo input:focus {
  border-color: var(--azul);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, .15);
}

/* Wrapper para input de senha com botao mostrar/esconder */
.campo-senha-wrap {
  position: relative;
  display: flex;
  align-items: stretch;
}
.campo-senha-wrap > input {
  flex: 1;
  padding-right: 82px;
}
.campo-senha-toggle {
  position: absolute;
  right: 6px;
  top: 50%;
  transform: translateY(-50%);
  height: 30px;
  padding: 0 10px;
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
  background: var(--branco-suave, transparent);
  color: var(--txt-sec);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  line-height: 1;
}
.campo-senha-toggle:hover {
  color: var(--azul);
  border-color: var(--azul);
}
.auth-hint {
  font-size: 12px;
  color: var(--txt-muted);
}
.auth-botao {
  margin-top: 6px;
  width: 100%;
  justify-content: center;
  height: 44px;
  font-size: 14px;
}
.auth-link {
  text-align: center;
  margin-top: 4px;
}
.auth-link a {
  font-size: 13px;
  color: var(--azul);
  text-decoration: none;
}
.auth-link a:hover { text-decoration: underline; }
.auth-rodape {
  margin-top: 16px;
  color: var(--txt-muted);
  font-size: 12px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
}
.auth-rodape-dev { font-size: 11px; opacity: .8; }

/* Card de form dentro de tela autenticada (usado por alterar_senha, minha_conta) */
.auth-card-form {
  max-width: 480px;
  margin: 0 auto;
  background: var(--branco);
  border: 1px solid var(--borda);
  border-radius: var(--raio);
  padding: 24px;
}

/* ── Page head (titulo + subtitulo padrao das telas de conteudo) ── */
.page-head {
  margin: 0 0 20px 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.page-titulo {
  font-size: 22px;
  font-weight: 700;
  margin: 0;
  color: var(--txt);
}
.page-sub {
  font-size: 14px;
  color: var(--txt-sec);
  margin: 0;
}

/* ── Card generico (.cd) ── */
.cd {
  background: var(--branco);
  border: 1px solid var(--borda);
  border-radius: var(--raio);
  box-shadow: var(--sombra);
  overflow: hidden;
}
.cd-cabecalho {
  padding: 14px 18px;
  border-bottom: 1px solid var(--borda);
}
.cd-titulo {
  font-size: 15px;
  font-weight: 700;
  margin: 0;
  color: var(--txt);
  display: flex;
  align-items: center;
  gap: 8px;
}
.cd-titulo i { color: var(--azul); font-size: 18px; }
.cd-corpo {
  padding: 18px;
  color: var(--txt);
  font-size: 14px;
  line-height: 1.5;
}
.cd-corpo p { margin: 0 0 10px 0; }
.cd-corpo p:last-child { margin-bottom: 0; }
.cd-form { padding: 18px; }
.cd-form .auth-form { max-width: 100%; }

/* ── Minha conta: grid 2 colunas em desktop, 1 em mobile ── */
.minha-conta-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
  align-items: start;
}
@media (max-width: 720px) {
  .minha-conta-grid { grid-template-columns: 1fr; }
}

/* ── Fase 5: Admin - listagem de usuarios ─────────────────────────────
   Segue Padrao_Tabela + Padrao_Barra_de_Filtros + Listagens_sem_KPI.
   O botao "+ Novo" vai NO cabecalho da pagina (variacao local do
   Padrao_Acao_Primaria_na_Topbar; base.html deste projeto nao tem
   topbar horizontal, so sidebar). Documentado no CHECKLIST F5.
*/
.pagina-header-acoes {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}
.pagina-header-acoes .pagina-titulo { margin: 0; }

/* Toggle padrao vault (42x24, verde on) - Padrao_Toggle_OnOff */
.cv-sw {
  position: relative;
  display: inline-block;
  width: 42px;
  height: 24px;
  flex: 0 0 auto;
  vertical-align: middle;
}
.cv-sw input { display: none; }
.cv-sw label {
  position: absolute;
  inset: 0;
  background: var(--borda);
  border-radius: 999px;
  cursor: pointer;
  transition: .15s;
  margin: 0;
}
.cv-sw label::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 20px;
  height: 20px;
  background: #fff;
  border-radius: 50%;
  transition: .15s;
  box-shadow: 0 1px 3px rgba(0, 0, 0, .25);
}
.cv-sw input:checked + label { background: #16a34a; }
.cv-sw input:checked + label::after { transform: translateX(18px); }
.cv-sw.desabilitado label { cursor: not-allowed; opacity: .45; }

/* Slots de acao alinhados na coluna Acoes da tabela (Padrao_Tabela).
   Sem sumir: quando nao pode, vira <span> esmaecido com tooltip. */
.celula-acoes {
  display: inline-flex;
  gap: 4px;
  align-items: center;
  justify-content: flex-end;
}
.btn-icone {
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--raio-sm);
  background: transparent;
  border: none;
  cursor: pointer;
  color: var(--txt-sec);
  transition: background var(--trans), color var(--trans);
  text-decoration: none;
}
.btn-icone i { font-size: 17px; }
.btn-icone:hover:not(.desabilitado) {
  background: var(--cinza-100);
  color: var(--azul);
}
.btn-icone.perigo:hover:not(.desabilitado) { color: var(--vermelho); }
.btn-icone.desabilitado {
  opacity: .30;
  cursor: not-allowed;
}

/* Badges de perfil e situacao na tabela */
.badge-perfil,
.badge-situacao {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 9px;
  border-radius: 999px;
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: .02em;
}
.badge-perfil.admin      { background: var(--azul-claro); color: var(--azul-texto); }
.badge-perfil.examinador { background: rgba(34,197,94,.14); color: var(--verde-txt); }
.badge-perfil.detran     { background: rgba(245,158,11,.16); color: var(--ambar-txt); }
.badge-situacao.ativo    { background: rgba(34,197,94,.16); color: var(--verde-txt); }
.badge-situacao.inativo  { background: var(--cinza-100); color: var(--txt-sec); }
.badge-senhatemp {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 7px; border-radius: 999px;
  font-size: 11px; font-weight: 700;
  background: rgba(245,158,11,.14); color: var(--ambar-txt);
  margin-left: 6px;
}

/* Variacao de modal com formulario (nao-confirm): mais largo, alinhamento a esquerda.
   Padrao_Modal (vault): tamanhos vw/vh, cabecalho + corpo + rodape com primario a direita. */
.modal-caixa.modal-form {
  max-width: 520px;
  text-align: left;
  padding: 22px 24px 20px;
}
@media (max-width: 720px) {
  .modal-caixa.modal-form { max-width: 96vw; }
}
.modal-caixa.modal-form .modal-titulo {
  font-size: 17px; margin-bottom: 4px;
}
.modal-caixa.modal-form .modal-msg {
  font-size: 13px; margin-bottom: 16px;
}
.modal-caixa.modal-form .modal-acoes {
  justify-content: flex-end;
  margin-top: 6px;
}
.modal-caixa.modal-form .campo-grupo { margin-bottom: 12px; }

/* Bloco de senha temporaria pra o admin copiar (destaque grande). */
.senha-temp-box {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 16px;
  background: var(--azul-claro);
  border: 1.5px dashed var(--azul);
  border-radius: var(--raio);
  margin: 8px 0 14px;
}
.senha-temp-valor {
  flex: 1;
  min-width: 0;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 16px;
  font-weight: 700;
  color: var(--azul-texto);
  letter-spacing: .04em;
  user-select: all;
  word-break: break-all;
  background: transparent;
  border: none;
  outline: none;
  padding: 0;
}
input.senha-temp-valor:focus { outline: none; box-shadow: none; }
.senha-temp-dica {
  font-size: 12.5px;
  color: var(--txt-sec);
  margin: 0 0 6px;
}
.senha-temp-dica strong { color: var(--txt); }

/* Linha inativa esmaecida na tabela de usuarios */
.tabela tbody tr.linha-inativa { opacity: .55; }

/* ─── Componente SelectBusca ─────────────────────────────────────────── */
.sb-host { display: block; }
.sb-wrap { position: relative; }
.sb-input {
  width: 100%;
  height: 40px;
  padding: 0 12px;
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
  background: var(--branco);
  color: var(--txt);
  font: inherit;
  font-size: 14px;
  outline: none;
}
.sb-input:focus {
  border-color: var(--azul);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, .15);
}
.sb-dropdown {
  position: absolute;
  left: 0;
  right: 0;
  top: calc(100% + 4px);
  z-index: 30;
  max-height: 260px;
  overflow-y: auto;
  margin: 0;
  padding: 4px 0;
  list-style: none;
  background: var(--branco);
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
  box-shadow: 0 8px 20px rgba(0,0,0,.10);
}
.sb-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 9px 12px;
  cursor: pointer;
  color: var(--txt);
  font-size: 14px;
}
.sb-item:hover, .sb-item.focado { background: var(--azul-claro); color: var(--azul-texto); }
.sb-uf { font-size: 11px; color: var(--txt-muted); font-weight: 600; }

/* ─── Lista de vinculos (municipios) ─────────────────────────────────── */
.lista-vinculos { list-style: none; margin: 8px 0 0; padding: 0; }
.lv-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
  margin-bottom: 6px;
  background: var(--branco);
}
.lv-nome { flex: 1; font-size: 14px; color: var(--txt); }
.lv-uf { font-size: 11px; color: var(--txt-muted); font-weight: 600; margin-left: 4px; }
.lv-vazio {
  padding: 14px;
  color: var(--txt-muted);
  font-size: 13px;
  text-align: center;
  border: 1px dashed var(--borda);
  border-radius: var(--raio-sm);
}
.lv-remover {
  /* V26 F25: link puro, sem caixa (mesmo padrao aplicado em Agencias). */
  padding: 4px 6px;
  border: 0;
  background: transparent;
  border-radius: var(--raio-sm);
  background: transparent;
  color: var(--txt-sec);
  font-size: 12px;
  cursor: pointer;
}
.lv-remover:hover { color: #b91c1c; text-decoration: underline; }
.lv-remover:focus-visible { outline: 2px solid var(--azul); outline-offset: 2px; }
.badge-padrao {
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--azul-claro);
  color: var(--azul-texto);
  font-size: 11px;
  font-weight: 700;
}
.contador { color: var(--txt-muted); font-size: 13px; font-weight: 400; }
.secao-titulo { font-size: 15px; font-weight: 700; margin: 18px 0 8px; color: var(--txt); }
.cd-sep { border: none; border-top: 1px solid var(--borda); margin: 20px 0; }
.cd-acoes { margin-top: 16px; display: flex; gap: 10px; justify-content: flex-end; }
.page-sub { color: var(--txt-sec); font-size: 14px; margin-top: 4px; }

/* Cabecalho do modal-form (titulo + X) */
.modal-form-cab {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
}
.modal-form-cab .modal-titulo { margin: 0; }
.modal-caixa.modal-form .modal-x {
  background: none;
  border: none;
  cursor: pointer;
  width: 34px;
  height: 34px;
  border-radius: var(--raio-sm);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--txt-sec);
  font-size: 18px;
}
.modal-caixa.modal-form .modal-x:hover { background: var(--cinza-100); color: var(--txt); }
/* Fallback textual dos icones Phosphor: normalmente escondido, aparece so
   quando o icone (via CDN unpkg) nao carrega, deixando o botao vazio. */
.modal-x-fallback {
  display: none;
  font-size: 14px;
  font-weight: 700;
  color: inherit;
}
.modal-caixa.modal-form .modal-x .ph:empty + .modal-x-fallback,
.modal-caixa.modal-form .modal-x:not(:has(.ph[class*="ph-x"])) .modal-x-fallback {
  display: inline;
}

/* Botao "3 pontos" da coluna acoes com fallback textual "Acoes" caso o
   icone Phosphor via CDN unpkg nao carregue (pendencia F11). */
.btn-acoes-linha {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 6px 10px;
  min-width: 34px;
  min-height: 32px;
  justify-content: center;
}
.btn-acoes-linha .btn-acoes-fallback {
  display: none;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .02em;
  color: var(--txt-sec);
}
/* Se o Phosphor nao renderizar, o <i> fica com width 0. Ai mostramos o texto. */
.btn-acoes-linha .ph { min-width: 4px; min-height: 12px; }
@supports selector(:has(*)) {
  .btn-acoes-linha:not(:has(.ph::before)) .btn-acoes-fallback { display: inline; }
}
/* Fallback duro: sempre mostra "Acoes" pequenininho ao lado do icone (visualmente
   discreto quando o icone existe; salvador quando nao existe). */
.btn-acoes-linha .btn-acoes-fallback { display: inline; }

/* ===================================================================
   Fase 8: Meus Custos (lista de tipos + matriz municipio x tipo)
   =================================================================== */
.secao-cab {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}
.secao-cab .secao-titulo { margin: 0; }

.lista-tipos {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 6px;
}
.lista-tipos .lt-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 14px;
  background: var(--branco);
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
}
.lista-tipos .lt-nome {
  font-size: 14px;
  font-weight: 600;
  color: var(--txt);
  flex: 1 1 auto;
  min-width: 0;
}

/* F8.5: toggle Fixo por linha e no modal */
.lista-tipos .lt-fixo {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding-left: 12px;
  padding-right: 4px;
  border-left: 1px solid var(--borda);
}
.lista-tipos .lt-fixo-lbl {
  font-size: 12px;
  font-weight: 700;
  color: var(--txt-sec);
  text-transform: uppercase;
  letter-spacing: .06em;
}
.campo-toggle-fixo {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  padding: 10px 12px;
  background: var(--fundo);
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
}
.campo-toggle-fixo .campo-label {
  margin: 0 0 4px 0;
  font-size: 13px;
  font-weight: 600;
  color: var(--txt);
}
.campo-toggle-fixo .campo-ajuda {
  font-size: 12px;
  color: var(--txt-sec);
  line-height: 1.4;
}

/* F8.5: chip F/V no modal Custos do dia */
.chip-fv {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 4px;
  font-size: 11px;
  font-weight: 700;
  margin-right: 6px;
  vertical-align: baseline;
  line-height: 1;
}
.chip-fv.chip-f {
  background: rgba(22, 163, 74, .14);
  color: #16a34a;
}
.chip-fv.chip-v {
  background: rgba(37, 99, 235, .12);
  color: var(--azul);
}

.tabela-scroll {
  overflow-x: auto;
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
  background: var(--branco);
}
.tabela-matriz {
  width: 100%;
  border-collapse: collapse;
  font-size: 13.5px;
}
.tabela-matriz th,
.tabela-matriz td {
  padding: 8px 10px;
  text-align: left;
  border-bottom: 1px solid var(--borda);
}
.tabela-matriz thead th {
  font-size: 11.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--txt-sec);
  background: var(--fundo);
  position: sticky;
  top: 0;
}
.tabela-matriz .th-municipio,
.tabela-matriz .td-municipio {
  min-width: 180px;
  font-weight: 600;
  color: var(--txt);
  position: sticky;
  left: 0;
  background: var(--branco);
  border-right: 1px solid var(--borda);
}
.tabela-matriz thead .th-municipio { background: var(--fundo); }
.tabela-matriz .th-tipo {
  min-width: 130px;
  white-space: nowrap;
}
.tabela-matriz .td-valor { padding: 6px 8px; }
.tabela-matriz .input-valor {
  width: 100%;
  min-width: 110px;
  height: 34px;
  padding: 4px 8px;
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.tabela-matriz .input-valor.salvo-flash {
  background: rgba(22, 163, 74, .10);
  border-color: #16a34a;
  transition: background .3s, border-color .3s;
}

.dica-inline {
  margin: 10px 0 0;
  font-size: 12.5px;
  color: var(--txt-muted);
}


/* ═══════════════ F9: Financeiro ampliado ═══════════════ */
.fin-card-liquido { border-color: var(--verde); }
.fin-liquido-pos { color: var(--verde); font-weight: 700; }
.fin-liquido-neg { color: #dc2626; font-weight: 700; }
.fin-col-acoes { text-align: right; width: 90px; }
/* V25 F18: Detalhe vira link puro (sem borda, sem caixa, sem outline azul).
   Sobrescreve .btn-icone herdado. */
.fin-col-acoes .btn-icone,
.fin-col-acoes .btn-icone:hover,
.fin-col-acoes .btn-icone:focus,
.fin-col-acoes .btn-icone:active {
  padding: 0;
  border: 0;
  background: transparent;
  outline: none;
  box-shadow: none;
  color: var(--azul);
  font-size: 13px;
  cursor: pointer;
}
.fin-col-acoes .btn-icone:hover .fin-detalhe-txt { text-decoration: underline; }
.fin-detalhe-txt { font-weight: 600; }
/* V25 F17/F18: titulo do modal Detalhe do dia em 2 linhas, centralizado */
.modal-titulo-2linhas {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 2px;
  line-height: 1.25;
  flex: 1 1 auto;
  margin-left: 34px;
}
.modal-titulo-data { font-size: 13px; font-weight: 500; color: var(--txt-sec); }
/* V25 F17: variantes do secao-titulo com alinhamento a esquerda garantido */
.secao-titulo-esq { text-align: left; margin-top: 4px; }
/* V25 F17: linha da visao Lista da Agenda de exames envelopa item clicavel
   + botao 3 pontos. */
.cvl-linha { display: flex; align-items: stretch; gap: 6px; margin: 6px 0; }
.cvl-linha > .cvl-item { flex: 1; margin: 0; }
.cvl-linha > .cvl-menu { flex: 0 0 auto; align-self: center; }
/* V25 F17: coluna de acoes na visao Tabela */
.cvt-td-acoes { width: 44px; text-align: center; }
.cvt-td-acoes .btn-menu { margin: 0 auto; }
/* V25 F17: botao 3 pontos posicionado no dia-item do calendario */
.dia-item { position: relative; }
.dia-item-menu { position: absolute; top: 6px; right: 6px; }
.dia-item-conteudo { padding-right: 32px; }
.modal-detalhe-loading {
  padding: 24px 0;
  text-align: center;
  color: var(--txt-muted);
  font-size: 13px;
}
.fin-detalhe-totais {
  margin-top: 16px;
  padding-top: 12px;
  border-top: 1px solid var(--borda);
  display: flex;
  gap: 18px;
  justify-content: flex-end;
  flex-wrap: wrap;
  font-size: 14px;
}
.fin-detalhe-totais > div {
  display: flex;
  align-items: center;
  gap: 6px;
}


/* ============================================================= */
/* F10: Minha disponibilidade + Dashboard DETRAN                  */
/* ============================================================= */

/* Lista de disponibilidades (mobile-first) */
.lista-disp { display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
.disp-item {
  display: flex; justify-content: space-between; align-items: flex-start;
  padding: 12px 14px; border: 1px solid var(--borda); border-radius: var(--raio-sm);
  background: var(--branco); gap: 12px;
}
.disp-info { flex: 1; min-width: 0; }
.disp-data { font-weight: 700; color: var(--txt); font-size: 14px; }
.disp-horario { color: var(--azul-texto); font-weight: 600; font-size: 15px; margin-top: 2px; }
.disp-mun, .disp-obs { color: var(--txt-sec); font-size: 13px; margin-top: 4px; }
.disp-mun i { margin-right: 4px; }
.disp-acoes { display: flex; gap: 6px; flex-shrink: 0; }
.page-sub { color: var(--txt-sec); font-size: 13px; margin: 4px 0 0; }

/* DETRAN dashboard (desktop-first) */
.detran-bar { margin-top: 12px; }

/* ===== M5 V24: Agenda Consolidada DETRAN - layout revisado ===== */
.dt-fg-ex { flex: 2; min-width: 260px; }
.dt-fg-mun { flex: 2; min-width: 240px; }

/* F11: filtros em 3 flags separados (datas, examinadores, municipio) */
.dt-filtros-linha {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 12px;
}
.dt-flag {
  flex: 1 1 auto;
  min-width: 240px;
  padding: 12px 14px;
  background: var(--fundo-card, #fff);
  border: 1px solid var(--borda);
  border-radius: 10px;
  box-shadow: 0 1px 2px rgba(0,0,0,.03);
  display: flex;
  gap: 12px;
  align-items: flex-end;
}
.dt-flag-datas { flex: 0 1 auto; }
.dt-flag-ex    { flex: 2 1 320px; }
.dt-flag-mun   { flex: 2 1 280px; }
.dt-flag .filtro-grupo { flex: 1 1 auto; min-width: 0; }
@media (max-width: 640px) {
  .dt-flag { flex: 1 1 100%; }
}

/* Chips de examinadores em linha, sem dropdown */
.dt-ex-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
  padding: 4px 0;
}
.dt-ex-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px;
  font-size: 12px;
  color: var(--txt);
  background: var(--cinza-100);
  border: 1px solid var(--borda);
  border-radius: 999px;
  cursor: pointer;
  transition: background .12s, border-color .12s;
}
.dt-ex-chip:hover { background: var(--cinza-200); }
.dt-ex-chip input[type="checkbox"] { margin: 0; cursor: pointer; }
.dt-ex-chip.todos { font-weight: 700; }

/* KPI horizontal unico + botao Exportar CSV ao lado */
.dt-resumo-linha { margin: 14px 0 12px; }
/* F15: switch de visao DETRAN (Cards | Lista | Tabela) reusa .cal-view-switch/.cvs-btn */
.dt-view-switch { align-self: initial; margin: 0 0 12px; }
/* F16: containers de visao usam display explicito (grid/block); atributo hidden nao vence sem !important */
.dt-visao-cards[hidden],
.dt-visao-lista[hidden],
.dt-visao-tabela[hidden] { display: none !important; }
.dt-resumo-cardone {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  padding: 12px 16px;
  background: var(--cinza-100);
  border: 1px solid var(--borda);
  border-radius: 8px;
}
.dt-resumo-nro-linha {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
}
.dt-resumo-numero { font-size: 22px; font-weight: 700; color: var(--azul); }
.dt-resumo-txt   { font-size: 13px; color: var(--txt-sec); text-transform: uppercase; letter-spacing: .03em; }
.dt-resumo-sep   { color: var(--txt-sec); opacity: .5; margin: 0 4px; }

/* Grid horizontal de dias (nao empilhado) */
.dt-dias-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 10px;
  margin-top: 10px;
}
.dt-dia-card.compacto {
  padding: 10px 12px;
  border: 1px solid var(--borda);
  border-radius: 8px;
  background: var(--fundo-card, #fff);
}
.dt-dia-corpo.compacto {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.dt-slot.compacto {
  padding: 6px 8px;
  background: var(--cinza-100);
  border-radius: 6px;
  font-size: 12px;
}
.dt-slot.compacto .dt-slot-hora { font-size: 12px; margin-bottom: 2px; }
.dt-slot.compacto .dt-slot-info { font-size: 12px; gap: 2px; }
.dt-slot.compacto .dt-slot-nome,
.dt-slot.compacto .dt-slot-mun {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 640px) {
  .dt-fg-ex, .dt-fg-mun { flex: 1 1 100%; }
  .dt-dias-grid { grid-template-columns: 1fr; }
}
/* ===== fim M5 V24 ===== */

.dt-mun-host { display: flex; gap: 6px; align-items: stretch; }
.dt-mun-host .sb { flex: 1; }
.dt-mun-host .btn { padding: 0 10px; }

.dt-resumo { margin-top: 14px; }
.dt-resumo-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; align-items: stretch; }
.dt-resumo-card {
  background: var(--branco); border: 1px solid var(--borda);
  border-radius: var(--raio); padding: 14px 16px;
}
.dt-resumo-nro { font-size: 24px; font-weight: 700; color: var(--azul-texto); }
.dt-resumo-lbl { font-size: 12px; color: var(--txt-sec); text-transform: uppercase; letter-spacing: .04em; margin-top: 4px; }

.dt-dia-card {
  background: var(--branco); border: 1px solid var(--borda);
  border-radius: var(--raio); padding: 14px 16px; margin-top: 12px;
}
.dt-dia-cab { display: flex; justify-content: space-between; align-items: baseline; padding-bottom: 8px; border-bottom: 1px solid var(--borda); margin-bottom: 10px; }
.dt-dia-data { font-weight: 700; font-size: 15px; color: var(--txt); }
.dt-dia-count { font-size: 12px; color: var(--txt-sec); }

.dt-dia-corpo { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 10px; }
.dt-slot {
  border: 1px solid var(--borda); border-radius: var(--raio-sm);
  padding: 10px 12px; background: var(--fundo);
}
.dt-slot-hora { color: var(--azul-texto); font-weight: 700; font-size: 14px; margin-bottom: 4px; }
.dt-slot-info { color: var(--txt); font-size: 13px; display: flex; flex-direction: column; gap: 3px; }
.dt-slot-info i { margin-right: 4px; color: var(--txt-sec); }
.dt-slot-obs { color: var(--txt-sec); font-style: italic; margin-top: 4px; }

@media (max-width: 720px) {
  .dt-dia-corpo { grid-template-columns: 1fr; }
}

/* F13.5: botao flutuante de tema (canto superior direito) */
.tema-toggle-float {
  position: fixed;
  top: 12px;
  right: 12px;
  z-index: 9000;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  /* F14: cores explicitas ancoradas no data-tema do proprio botao, nao em var globais.
     No mobile o botao fica sobre a topbar-mobile (fundo escuro fixo) e as vars do
     :root as vezes nao recalculam a tempo apos toggle - especialmente no WebKit iOS. */
  border: 1px solid #e2e8f0;
  background: #ffffff;
  color: #1e293b;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 8px rgba(0,0,0,.15);
  transition: background .15s, transform .1s, color .15s, border-color .15s;
}
.tema-toggle-float[data-tema="dark"] {
  background: #131c30;
  color: #e5e7eb;
  border-color: #223055;
}
.tema-toggle-float:hover { filter: brightness(.96); }
.tema-toggle-float:active { transform: scale(.94); }
.tema-toggle-float i { font-size: 18px; line-height: 1; }
.tema-toggle-float .tema-icone-escuro { display: none; }
.tema-toggle-float[data-tema="dark"] .tema-icone-claro { display: none; }
.tema-toggle-float[data-tema="dark"] .tema-icone-escuro { display: inline-block; }

/* No mobile a topbar-mobile ocupa o topo; posiciona o botao um pouco mais alto */
@media (max-width: 720px) {
  .tema-toggle-float { top: 8px; right: 8px; width: 36px; height: 36px; }
  .tema-toggle-float i { font-size: 16px; }
}

/* ─── F15.7: Bloco unificado Resultado do mes (Total - Custos = Liquido) ─── */
.fin-card-resultado {
  border: 2px solid var(--azul);
  background: color-mix(in srgb, var(--azul) 4%, var(--branco));
}
:root[data-tema="dark"] .fin-card-resultado {
  background: color-mix(in srgb, var(--azul) 8%, var(--fundo));
}
.fin-resultado-linhas { display: flex; flex-direction: column; gap: 6px; }
.fin-resultado-linha {
  display: flex; align-items: baseline; justify-content: space-between;
  padding: 4px 2px;
}
.fin-resultado-rot { color: var(--txt-sec); font-size: 14px; }
.fin-resultado-val { font-weight: 600; font-size: 16px; color: var(--txt);
  font-variant-numeric: tabular-nums; }
.fin-resultado-val-custo { color: #dc2626; }
.fin-resultado-val-liquido { color: var(--verde); font-size: 22px; font-weight: 700; }
.fin-resultado-divisor { height: 1px; background: var(--borda); margin: 2px 0; }
.fin-resultado-linha-liquido .fin-resultado-rot { color: var(--txt); font-weight: 700; }
.fin-resultado-extra { margin-top: 8px; font-size: 13px; color: var(--txt-muted); text-align: right; }

/* Acumulado ano: 3 linhas Bruto/Custos/Liquido */
.acumulado-linhas { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.acumulado-linha { display: flex; align-items: baseline; justify-content: space-between; }
.acumulado-rot { color: var(--txt-sec); font-size: 14px; }
.acumulado-val { font-weight: 600; font-size: 18px; color: var(--txt);
  font-variant-numeric: tabular-nums; }
.acumulado-val-custo { color: #dc2626; }
.acumulado-linha-liquido { border-top: 1px solid var(--borda); padding-top: 6px; margin-top: 2px; }
.acumulado-linha-liquido .acumulado-rot { color: var(--txt); font-weight: 700; }
.acumulado-val-liquido { color: var(--verde); font-size: 22px; font-weight: 700; }

@media (max-width: 720px) {
  .fin-card-resultado { grid-column: 1 / -1 !important; }
}

/* -----------------------------------------------------------------
   F21: tela Admin > Instalar app (PWA)
   ----------------------------------------------------------------- */
.inst-card { padding: 18px; }
.inst-linha {
  display: flex; align-items: center; gap: 24px; flex-wrap: wrap;
}
.inst-qr {
  flex: 0 0 auto;
  padding: 10px;
  background: #ffffff;
  border: 1px solid var(--borda);
  border-radius: 12px;
  box-shadow: 0 1px 3px rgba(0,0,0,.06);
}
.inst-qr img { display: block; width: 240px; height: 240px; }
.inst-info { flex: 1 1 320px; min-width: 240px; }
.inst-rot {
  font-size: 12px; color: var(--cinza-500);
  text-transform: uppercase; letter-spacing: .5px; margin-bottom: 4px;
}
.inst-url {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 15px; word-break: break-all; padding: 10px 12px;
  background: var(--cinza-100); border: 1px solid var(--borda);
  border-radius: 8px; color: var(--txt);
}
.inst-host { margin-top: 6px; font-size: 12px; }
.inst-acoes { margin-top: 14px; display: flex; gap: 8px; flex-wrap: wrap; }

.inst-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 16px; margin-top: 8px;
}
.inst-passo { padding: 16px; }
.inst-passo-cab {
  display: flex; align-items: center; gap: 10px;
  font-weight: 700; font-size: 15px; color: var(--txt);
  margin-bottom: 10px; padding-bottom: 8px;
  border-bottom: 1px solid var(--borda);
}
.inst-passo-cab i { font-size: 22px; color: var(--azul); }
.inst-passo-lista { margin: 0; padding-left: 20px; color: var(--txt); }
.inst-passo-lista li { margin-bottom: 6px; line-height: 1.5; }
.inst-obs { margin: 6px 0 0; padding-left: 20px; color: var(--txt); }
.inst-obs li { margin-bottom: 4px; line-height: 1.5; }

@media (max-width: 640px) {
  .inst-linha { gap: 16px; }
  .inst-qr img { width: 200px; height: 200px; }
}

/* -----------------------------------------------------------------
   F22: Modulo Agencia - examinadores atrelados (2 visoes)
   ----------------------------------------------------------------- */
.ex-filtros { margin-bottom: 8px; }
.ex-filtros .filtro-grupo { min-width: 200px; }
.ex-filtros .dt-flag { padding: 10px 12px; }
.ex-flag-acoes {
  display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap;
}
.ex-resumo { margin: 4px 0 12px; }

.ex-cards {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 12px;
}
.ex-card { padding: 14px; }
.ex-card-topo {
  display: flex; align-items: center; gap: 12px;
  padding-bottom: 10px; margin-bottom: 10px;
  border-bottom: 1px solid var(--borda);
}
.ex-card-avatar {
  width: 44px; height: 44px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--cinza-100); color: var(--azul); flex: 0 0 auto;
}
.ex-card-avatar i { font-size: 26px; }
.ex-card-nome { min-width: 0; flex: 1 1 auto; }
.ex-card-nome-txt {
  font-weight: 700; color: var(--txt); font-size: 15px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ex-card-ag { display: flex; align-items: center; gap: 4px; font-size: 12px; }
.ex-card-corpo { display: flex; flex-direction: column; gap: 6px; }
.ex-linha {
  display: flex; align-items: center; gap: 8px;
  color: var(--txt); font-size: 13px;
}
.ex-linha i { color: var(--cinza-500); flex: 0 0 auto; font-size: 16px; }
.ex-linha span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ex-linha-data { color: var(--cinza-500); font-size: 12px; }

/* mesmo fix da F16 - o [hidden] do UA nao vence display:grid da classe */
.ex-visao-cards[hidden], .ex-visao-tabela[hidden] { display: none !important; }

@media (max-width: 640px) {
  .ex-cards { grid-template-columns: 1fr; }
}

/* ─── V26 F25: Sobre > Desenvolvido por (logo + upload por admin) ─────── */
.sobre-dev-corpo {
  display: flex; align-items: center; gap: 20px;
  padding: 8px 4px 4px; flex-wrap: wrap;
}
.sobre-logo-wrap {
  display: flex; align-items: center; justify-content: center;
  min-width: 200px; min-height: 100px;
  padding: 12px 16px;
  background: var(--branco);
  border: 1px solid var(--borda);
  border-radius: var(--raio-sm);
}
.sobre-logo {
  max-width: 220px; max-height: 100px;
  display: block;
}
.sobre-logo-placeholder {
  display: flex; align-items: center; justify-content: center;
  width: 220px; height: 100px;
  background: linear-gradient(135deg, #2563eb, #1d4ed8);
  border-radius: var(--raio-sm);
  color: #fff; font-weight: 700; font-size: 20px; letter-spacing: 1px;
}
.sobre-logo-placeholder .sobre-logo-txt em {
  font-style: normal; color: #93c5fd; margin: 0 2px;
}
.sobre-dev-info { flex: 1 1 240px; min-width: 220px; }
.sobre-dev-nome { margin: 0 0 4px; font-size: 15px; color: var(--txt); }
.sobre-dev-lin  { margin: 0 0 10px; color: var(--txt-sec); font-size: 13px; }
.sobre-dev-acoes { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.sobre-logo-btn { cursor: pointer; }
.sobre-logo-hint { flex: 1 1 100%; margin: 6px 0 0; color: var(--txt-muted); font-size: 12px; }
@media (max-width: 640px) {
  .sobre-dev-corpo { flex-direction: column; align-items: flex-start; }
  .sobre-logo-wrap { width: 100%; }
}

/* V27: banner iOS Safari pra instalar como PWA. Discreto, colado embaixo. */
#pwa-ios-banner {
  position: fixed;
  left: 12px;
  right: 12px;
  bottom: 12px;
  z-index: 9500;
  background: var(--branco, #fff);
  color: var(--txt, #0f172a);
  border: 1px solid var(--borda, #e5e7eb);
  border-radius: 12px;
  box-shadow: 0 8px 24px rgba(0,0,0,.12);
}
.pwa-ios-banner-corpo {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
}
.pwa-ios-icon {
  width: 40px; height: 40px; border-radius: 9px; flex-shrink: 0;
}
.pwa-ios-txt {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-size: 13px;
  line-height: 1.3;
}
.pwa-ios-txt strong { font-size: 14px; }
.pwa-ios-txt i { font-size: 15px; vertical-align: -2px; color: var(--azul, #2563eb); }
.pwa-ios-fechar {
  background: transparent; border: 0; cursor: pointer;
  color: var(--txt-muted, #64748b);
  font-size: 18px; padding: 6px; border-radius: 8px;
}
.pwa-ios-fechar:hover { background: var(--cinza-100, #f1f5f9); }
