/* Paleta, tipografia e componentes portados do protótipo validado
   (financeiro-escola.html) — manter em sincronia se a paleta mudar lá. */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Sora:wght@500;600;700;800&family=Poppins:wght@500;600;700&display=swap');

:root {
  /* Cor de marca/CTA primária — atualizada pra bater com o roxo/índigo do logo
     HubFlow (hubflow_logo.png na raiz do projeto). --saida-cor é INDEPENDENTE de
     propósito (mesmo valor antigo do --magenta): ela é usada pra sinalizar "saída"
     em todo o financeiro, um significado próprio que não deve mudar só porque a
     cor de marca mudou. */
  --magenta: #6C3CE9;
  --brand-gradient: linear-gradient(100deg, #4F5FEF, #8B2FE8);
  --saida-cor: #C41E68;
  --rosa: #D9709E;
  --pessego: #F6C6A0;
  --laranja: #F5A94E;
  --verde-agua: #4EC5A4;
  --teal: #1F9C8C;
  --azul-marinho: #254B77;
  --azul-marinho-escuro: #12101F;
  --azul-claro: #8FB4D9;
  --amarelo: #F2C230;
  --amarelo-texto: #A67C00;

  --bg: #F7F5F1;
  --card-bg: #FFFFFF;
  --input-bg: #FCFBFA;
  --border: #E7E2DC;
  --text: #26232B;
  --text-muted: #7A7570;

  --sidebar-w: 236px;

  --font-display: 'Sora', sans-serif;
  --font-body: 'Inter', sans-serif;
  --font-mono: 'Poppins', sans-serif;

  --radius: 14px;
}

/* ============ MODO ESCURO ============
   Ativado via atributo data-theme="dark" na <html> (definido cedo em theme-init.php,
   pra não piscar tema claro antes do JS rodar; alternado depois por alternarTema() em
   app.js). A sidebar já é escura nos dois temas de propósito (marca), por isso não
   entra aqui. Cores de destaque (--magenta/--teal/--azul-marinho/etc.) continuam as
   mesmas — só o fundo/superfície/texto trocam. */
:root[data-theme="dark"] {
  --bg: #16141D;
  --card-bg: #1F1D28;
  --input-bg: #262432;
  --border: #34313F;
  --text: #EDEAF5;
  --text-muted: #9C97AC;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; }

/* ============ SCROLLBAR (fina e discreta, some quando não precisa) ============ */
* { scrollbar-width: thin; scrollbar-color: var(--border) transparent; }
::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 999px; border: 2px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: #C9C2B8; border: 2px solid transparent; background-clip: padding-box; }
/* Sidebar tem fundo escuro — precisa de um thumb claro/translúcido pra ter contraste. */
.sidebar { scrollbar-color: rgba(255,255,255,.22) transparent; }
.sidebar::-webkit-scrollbar-thumb { background: rgba(255,255,255,.22); border: 2px solid transparent; background-clip: padding-box; }
.sidebar::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,.35); border: 2px solid transparent; background-clip: padding-box; }

body {
  font-family: var(--font-body);
  background: var(--bg);
  color: var(--text);
  display: flex;
}

a, button { font-family: inherit; }

/* ============ SIDEBAR ============ */
.sidebar {
  width: var(--sidebar-w);
  min-width: var(--sidebar-w);
  height: 100vh;
  position: sticky;
  top: 0;
  background: var(--azul-marinho-escuro);
  display: flex;
  flex-direction: column;
  padding: 22px 16px;
  color: white;
  overflow-y: auto;
  transition: width .15s, min-width .15s;
}
.sidebar.collapsed { width: 72px; min-width: 72px; padding: 22px 10px; }

.brand { display: flex; align-items: center; gap: 12px; padding: 4px 8px 18px; margin-bottom: 8px; }
.brand-mark {
  width: 36px; height: 36px; border-radius: 10px;
  background: linear-gradient(135deg, var(--magenta), var(--teal));
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-display); font-weight: 700; font-size: 16px; color: white;
  flex-shrink: 0; overflow: hidden;
}
.brand-text h1 { font-family: var(--font-display); font-size: 15.5px; font-weight: 600; letter-spacing: -0.01em; white-space: nowrap; }
.brand-text p { font-size: 10.5px; color: rgba(255,255,255,0.5); margin-top: 1px; white-space: nowrap; overflow: hidden; }
.sidebar.collapsed .brand-text { display: none; }
.sidebar.collapsed .sidebar-toggle .label-text { display: none; }

.sidebar-toolbar { display: flex; gap: 8px; margin-bottom: 14px; }
.sidebar.collapsed .sidebar-toolbar { flex-direction: column; }

.sidebar-toggle {
  display: flex; align-items: center; gap: 8px; justify-content: center;
  width: 100%; padding: 8px; margin-bottom: 0; flex: 1; min-width: 0;
  border: 1px solid rgba(255,255,255,0.12); border-radius: 8px; background: rgba(255,255,255,0.04);
  color: rgba(255,255,255,0.6); font-size: 11.5px; font-weight: 600; cursor: pointer;
}
.sidebar-toggle:hover { background: rgba(255,255,255,0.09); color: white; }

.nav-scroll { border-top: 1px solid rgba(255,255,255,0.1); padding-top: 10px; flex: 1; }

.nav-section-label {
  font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em;
  color: rgba(255,255,255,0.35); font-weight: 600;
  padding: 14px 12px 8px; white-space: nowrap; overflow: hidden;
}
.nav-section-label:first-child { padding-top: 0; }
.sidebar.collapsed .nav-section-label, .sidebar.collapsed .label-text { display: none; }

.nav-item {
  display: flex; align-items: center; gap: 11px;
  padding: 10px 12px; border-radius: 9px;
  color: rgba(255,255,255,0.72);
  font-size: 13.5px; font-weight: 500;
  cursor: pointer; margin-bottom: 2px;
  border: none; background: none; width: 100%; text-align: left;
  text-decoration: none;
  transition: background .12s, color .12s;
  position: relative;
  white-space: nowrap;
}
.sidebar.collapsed .nav-item { justify-content: center; padding: 11px 0; }
.nav-item .ic { width: 18px; height: 18px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; }
.nav-item .ic svg { width: 17px; height: 17px; stroke: currentColor; }
.nav-item:hover { background: rgba(255,255,255,0.06); color: white; }
.nav-item.ativo { background: rgba(255,255,255,0.1); color: white; }
.nav-item.ativo::before {
  content: ''; position: absolute; left: -16px; top: 8px; bottom: 8px; width: 3px;
  background: var(--teal); border-radius: 0 3px 3px 0;
}
.nav-item.desativado { opacity: 0.4; cursor: not-allowed; }
.nav-item.desativado:hover { background: none; color: rgba(255,255,255,0.72); }
.nav-badge {
  margin-left: auto; font-size: 9px; font-weight: 700; padding: 2px 6px;
  border-radius: 20px; background: rgba(255,255,255,0.12); color: rgba(255,255,255,0.55);
  letter-spacing: 0.02em; flex-shrink: 0;
}
/* Contador de não lidas (Notificações, dentro de Configurações) — mesmo espírito do
   badge de mensagens não lidas do WhatsApp: bolha cheia, não a tag neutra do .nav-badge. */
.nav-badge-count {
  margin-left: auto; font-size: 10px; font-weight: 700; min-width: 17px; height: 17px; padding: 0 5px;
  border-radius: 999px; background: var(--saida-cor); color: white;
  display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; line-height: 1;
}
.sidebar.collapsed .nav-badge-count { position: absolute; top: 6px; right: 10px; margin-left: 0; }

.sidebar-footer { margin-top: 10px; padding-top: 16px; border-top: 1px solid rgba(255,255,255,0.1); display: flex; align-items: center; gap: 10px; }
.sidebar.collapsed .sidebar-footer { justify-content: center; }
.sidebar.collapsed .user-info { display: none; }
.avatar {
  width: 32px; height: 32px; border-radius: 50%;
  background: var(--rosa); display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 12.5px; color: white; flex-shrink: 0;
}
.user-info p:first-child { font-size: 12.5px; font-weight: 600; }
.user-info p:last-child { font-size: 10.5px; color: rgba(255,255,255,0.5); margin-top: 1px; }
.user-info a { color: rgba(255,255,255,0.55); font-size: 10.5px; text-decoration: none; }
.user-info a:hover { color: white; }

/* ============ MAIN AREA ============ */
.main-area { flex: 1; min-width: 0; display: flex; flex-direction: column; height: 100vh; }

.topbar {
  height: 64px; min-height: 64px;
  background: var(--card-bg);
  border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 28px;
}
.topbar-title h2 { font-family: var(--font-display); font-size: 18px; font-weight: 600; color: var(--azul-marinho); }
.titulo-contagem { font-family: var(--font-body); font-size: 14px; font-weight: 400; color: var(--text-muted); }
.topbar-title p { font-size: 11.5px; color: var(--text-muted); margin-top: 1px; }

.conteudo { flex: 1; overflow-y: auto; padding: 28px; }

/* ============ CARDS ============ */
.cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }
.card { background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px 22px; position: relative; overflow: hidden; }
.card::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--azul-claro); }
.card.entrada::before { background: var(--teal); }
.card.saida::before { background: var(--saida-cor); }
.card.saldo::before { background: var(--amarelo); }
.card .label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); font-weight: 600; margin-bottom: 8px; }
.card .valor { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 24px; font-weight: 600; color: var(--text); }
.card.entrada .valor { color: var(--teal); }
.card.saida .valor { color: var(--saida-cor); }
.card.saldo .valor { color: var(--amarelo-texto); }
.card .sub { font-size: 11.5px; color: var(--text-muted); margin-top: 4px; }
/* Variante compacta — 3 cards numa linha só (ex: modal de situação financeira do aluno). */
.cards-sm { grid-template-columns: repeat(3, 1fr); gap: 10px; }
.cards-sm .card { padding: 12px 14px; }
.cards-sm .card .label { font-size: 10px; margin-bottom: 4px; }
.cards-sm .card .valor { font-size: 17px; }

/* ============ PANEL ============ */
.panel { background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius); padding: 24px; margin-bottom: 18px; }
.panel h3 { font-family: var(--font-display); font-size: 16px; font-weight: 600; color: var(--azul-marinho); margin-bottom: 4px; }

/* ============ FORM ============ */
.form-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px 16px; align-items: start; }
.form-grid .span-2 { grid-column: span 2; }
.form-grid .span-3 { grid-column: span 3; }
@media (max-width: 720px) { .form-grid { grid-template-columns: 1fr; } .form-grid .span-2, .form-grid .span-3 { grid-column: span 1; } }

label {
  display: block; font-size: 11px; font-weight: 600; color: var(--text-muted);
  margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.03em;
}
input[type="text"], input[type="email"], input[type="password"], input[type="date"],
input[type="number"], input[type="month"], select, textarea {
  width: 100%; padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px;
  font-family: var(--font-body); font-size: 13.5px; color: var(--text); background: var(--input-bg);
}
input:focus, select:focus, textarea:focus { outline: none; border-color: var(--teal); background: var(--card-bg); }
input:disabled, select:disabled, textarea:disabled { background: var(--bg); color: var(--text-muted); cursor: not-allowed; }

/* Prefixo "R$" dentro do campo (Colaboradores > Remuneração & benefícios) — evita depender só do rótulo pra deixar claro que é um valor em reais. */
.campo-moeda-wrap { position: relative; }
.campo-moeda-wrap .campo-moeda-prefixo {
  position: absolute; left: 11px; top: 50%; transform: translateY(-50%);
  font-size: 12.5px; font-weight: 600; color: var(--text-muted); pointer-events: none;
}
.campo-moeda-wrap input.campo-moeda { padding-left: 32px; }
.checkbox-row { display: flex; align-items: center; gap: 8px; padding-top: 9px; }
.checkbox-row input { width: auto; margin: 0; }

/* ============ BOTÕES ============ */
button, .btn {
  display: inline-block;
  padding: 11px 22px; border: none; border-radius: 8px; background: var(--magenta); color: white;
  font-weight: 600; font-size: 13.5px; cursor: pointer; transition: opacity .15s;
  text-decoration: none;
}
button:hover, .btn:hover { opacity: 0.9; }
.btn-outline { background: var(--card-bg); border: 1px solid var(--border); color: var(--text-muted); }
.btn-outline:hover { background: var(--bg); opacity: 1; }
.btn-danger { background: none; border: 1px solid rgba(196,30,104,0.3); color: var(--magenta); }
.btn-danger:hover { background: rgba(196,30,104,0.06); opacity: 1; }
.btn-sm { padding: 6px 12px; font-size: 12px; border-radius: 6px; }
.acoes-cel { display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.form-inline { display: inline; }

/* coluna Obs. nas tabelas de Lançamentos — largura curta com reticências (texto
   completo no title ao passar o mouse), pra sobrar espaço e os 3 ícones de ação
   (editar/duplicar/excluir) nunca quebrarem linha. */
.col-obs { max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ícones de ação nas linhas de tabela (✎ editar / ✕ excluir) — mesmo padrão do protótipo em toda listagem */
.del-btn, .edit-btn { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 14px; padding: 4px 7px; border-radius: 6px; text-decoration: none; display: inline-flex; align-items: center; }
.del-btn:hover { background: #F3E8EC; color: var(--magenta); }
.edit-btn:hover { background: #E9F2F6; color: var(--azul-marinho); }

/* ============ TABELA ============ */
table { width: 100%; border-collapse: collapse; }
th, td { text-align: left; padding: 10px 8px; border-bottom: 1px solid var(--border); font-size: 12.5px; }
thead th { font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); font-weight: 600; border-bottom: 2px solid var(--border); white-space: nowrap; }
tbody tr:last-child td { border-bottom: none; }

/* cabeçalho clicável pra ordenar a tabela (ver ordenarTabela() em app.js) */
th.th-sortable { cursor: pointer; user-select: none; }
th.th-sortable:hover { color: var(--teal); }
th.th-sortable .sort-ic { display: inline-block; width: 10px; margin-left: 2px; opacity: 0.6; }

/* coluna de checkbox "Sel." usada no modo "Editar em massa" (excluir/vincular selecionados) —
   escondida até a tabela entrar em modo massa (ver alternarModoMassa em app.js). */
.col-massa-check { display: none; width: 30px; text-align: center; }
table.modo-massa .col-massa-check { display: table-cell; }

/* barra de ações do modo "Editar em massa" (Lançamentos > Entradas/Saídas) — separada do
   .filters de cima (que fica sempre visível) pra não misturar filtro normal com ações que
   só existem enquanto há linhas selecionadas. Escondida por padrão (display:none inline no
   HTML), mostrada via alternarModoMassa() em app.js quando a tabela entra em modo massa. */
.massa-toolbar {
  align-items: center; gap: 10px; flex-wrap: wrap; margin: -6px 0 16px;
  padding: 10px 14px; background: var(--bg); border: 1px solid var(--border); border-radius: 10px;
}
.massa-toolbar-label { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--text-muted); }
.massa-toolbar-grupo { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.massa-toolbar-grupo-fim { margin-left: auto; }

/* ============ COMBOBOX DE VÍNCULO (busca embutida no painel, ver comboVinculo() em helpers.php) ============ */
.combo-vinculo { position: relative; width: 240px; max-width: 100%; }
.massa-toolbar .combo-vinculo { width: 220px; }
.combo-trigger {
  display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%;
  padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px; background: var(--input-bg);
  color: var(--text); font-family: var(--font-body); font-size: 13.5px; font-weight: 500; cursor: pointer; text-align: left;
}
.combo-trigger:hover { border-color: var(--teal); }
.combo-trigger svg { flex-shrink: 0; color: var(--text-muted); }
.combo-trigger-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.combo-painel {
  position: absolute; top: calc(100% + 6px); left: 0; z-index: 40; width: 100%; min-width: 260px;
  background: var(--card-bg); border: 1px solid var(--border); border-radius: 10px;
  box-shadow: 0 12px 32px rgba(0,0,0,0.16); padding: 8px; flex-direction: column; gap: 6px;
  display: none;
}
/* .aberto (não o atributo [hidden] sozinho) controla a exibição — uma regra de classe
   com display:flex "vence" o [hidden] do navegador na cascata (CSS de autor sempre tem
   prioridade sobre o CSS padrão do user-agent), então o painel nunca escondia de volta. */
.combo-painel.aberto { display: flex; }
.combo-busca { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); }
.combo-busca svg { flex-shrink: 0; color: var(--text-muted); }
.combo-busca input { border: none; background: none; padding: 0; font-size: 13px; width: 100%; }
.combo-busca input:focus { outline: none; }
.combo-lista { max-height: 220px; overflow-y: auto; }
.combo-grupo-label { padding: 6px 8px 2px; font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--text-muted); }
.combo-opcao { padding: 8px; border-radius: 6px; font-size: 13px; color: var(--text); cursor: pointer; }
.combo-opcao:hover { background: var(--bg); }
.combo-opcao.selecionada { background: rgba(31,156,140,0.12); color: var(--teal); font-weight: 600; }

.tag { display: inline-flex; align-items: center; gap: 6px; font-size: 10.5px; font-weight: 600; padding: 3px 9px; border-radius: 20px; }
.tag.ativo, .tag.pago, .tag.entrada { background: rgba(31,156,140,0.12); color: var(--teal); }
.tag.inativo, .tag.atrasado, .tag.saida { background: rgba(196,30,104,0.1); color: var(--saida-cor); }
.tag.trancado, .tag.pendente { background: rgba(245,169,78,0.18); color: #9C6A0A; }

.valor-cell { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-weight: 700; }
.valor-cell.entrada, .valor-cell.pago { color: var(--teal); }
.valor-cell.saida, .valor-cell.atrasado { color: var(--saida-cor); }
.valor-cell.pendente { color: #9C6A0A; }
.valor-cell.negativo { color: var(--magenta); font-weight: 400; }
/* Tabela agrupada por situação > competência (modal de Situação financeira) — mesmo
   modelo do export em exportar.php (tipo=situacao_aluno). */
.tabela-financeira-pivot th, .tabela-financeira-pivot td { text-align: center; }
.tabela-financeira-pivot tr.linha-grupo-situacao td, .tabela-financeira-pivot tr.linha-subgrupo-competencia td { text-align: left; }
.tabela-financeira-pivot tr.linha-grupo-situacao td { font-weight: 700; font-size: 11px; text-transform: uppercase; letter-spacing: 0.03em; }
.tabela-financeira-pivot tr.linha-grupo-situacao.grupo-atrasado td { background: rgba(196,30,104,0.1); color: var(--saida-cor); }
.tabela-financeira-pivot tr.linha-grupo-situacao.grupo-pendente td { background: rgba(245,169,78,0.18); color: #9C6A0A; }
.tabela-financeira-pivot tr.linha-grupo-situacao.grupo-pago td { background: rgba(31,156,140,0.12); color: var(--teal); }
.tabela-financeira-pivot tr.linha-subgrupo-competencia td { font-size: 10.5px; font-weight: 600; color: var(--text-muted); background: var(--bg-hover, rgba(128,128,128,0.06)); }

/* Cabeçalho de grupo do catálogo de Estoque (Produtos) — uma linha por produto, com as
   variações (tamanhos) indentadas logo abaixo dela. */
tr.linha-grupo-produto td { background: var(--bg-hover, rgba(128,128,128,0.06)); }
tr.linha-grupo-produto .muted-small { margin-left: 8px; }

.empty-state { text-align: center; padding: 40px 20px; color: var(--text-muted); font-size: 13px; }

/* ============ TABELA DE REVISÃO DE IMPORTAÇÃO ============ */
.tabela-import { table-layout: auto; }
.tabela-import th, .tabela-import td { vertical-align: top; padding: 8px 7px; }
.tabela-import td { min-width: 118px; }
.tabela-import input, .tabela-import select {
  padding: 6px 8px; font-size: 12px; min-width: 100px;
}
.tabela-import input[type="checkbox"] { min-width: 0; }
.tabela-import input[type="number"] { min-width: 64px; }
.tabela-import tbody tr.linha-erro { background: rgba(196,30,104,0.05); }
.tabela-import tbody tr.linha-aviso { background: rgba(245,169,78,0.08); }
.valor-original {
  font-size: 10px; color: var(--text-muted); margin-bottom: 4px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 160px;
}
.msg-erro, .msg-aviso {
  font-size: 11px; font-weight: 600; margin-top: 4px; line-height: 1.35;
}
.msg-erro { color: var(--saida-cor); }
.msg-aviso { color: #9C6A0A; }
.tabela-import tr.linha-divisor-parte td {
  background: var(--bg); font-weight: 700; font-size: 12px; color: var(--azul-marinho);
  padding: 10px 8px; border-bottom: 2px solid var(--border);
}
.empty-state .icon { font-size: 28px; margin-bottom: 10px; }

.erro {
  background: rgba(245,169,78,0.18); color: #9C6A0A;
  border-radius: 8px; padding: 10px 14px; font-size: 0.85rem; margin-bottom: 16px;
}
.sucesso { background: rgba(31,156,140,0.12); color: #0F6B5C; }

.subnav { display: flex; gap: 6px; margin-bottom: 14px; }
.subnav a { padding: 6px 14px; border-radius: 999px; font-size: 0.82rem; font-weight: 600; text-decoration: none; color: var(--text-muted); border: 1px solid var(--border); }
.subnav a.ativo { background: var(--magenta); color: #fff; border-color: var(--magenta); }

.search-form { display: flex; gap: 8px; }
.search-form input { margin-bottom: 0; min-width: 220px; }
.page-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }
.page-header h2 { font-family: var(--font-display); color: var(--azul-marinho); font-size: 1.2rem; }

/* ============ FILTRO DE PERÍODO / SITUAÇÃO (pill) ============ */
.pill-select {
  display: flex; align-items: center; gap: 8px;
  background: var(--bg); border: 1px solid var(--border); border-radius: 999px;
  padding: 7px 14px; transition: border-color .15s;
}
.pill-select:focus-within { border-color: var(--teal); }
.pill-select label { font-size: 10.5px; color: var(--text-muted); font-weight: 600; text-transform: uppercase; margin: 0; white-space: nowrap; }
.pill-select input, .pill-select select {
  border: none; background: transparent; font-family: var(--font-mono); font-variant-numeric: tabular-nums;
  font-weight: 600; font-size: 13px; color: var(--azul-marinho); width: auto; padding: 0; cursor: pointer;
}
.pill-select input:focus, .pill-select select:focus { outline: none; }

/* ============ SUBABAS ============ */
.subtabs { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 20px; }
.subtab {
  display: inline-flex; align-items: center; gap: 7px; padding: 9px 16px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--card-bg); color: var(--text-muted);
  font-size: 12.5px; font-weight: 600; text-decoration: none; cursor: pointer;
}
.subtab svg { width: 14px; height: 14px; flex-shrink: 0; }
.subtab.ativo { background: var(--magenta); border-color: var(--magenta); color: white; }
.subtab.desativado { opacity: 0.45; cursor: not-allowed; }
.subtab-badge { background: var(--saida-cor); color: white; font-size: 10.5px; font-weight: 700; border-radius: 999px; padding: 1px 7px; line-height: 1.5; }
.subtab.ativo .subtab-badge { background: rgba(255,255,255,0.3); }

/* ============ CONFERÊNCIA (Lançamentos > notas fiscais em lote / conciliação bancária) ============ */
/* ============ EDIÇÃO EM MASSA DA COLUNA SITUAÇÃO (Lançamentos/Colaboradores/Alunos) ============ */
.situacao-edit { display: none; padding: 6px 8px; font-size: 12.5px; min-width: 132px; }
tbody.modo-massa .situacao-view { display: none; }
tbody.modo-massa .situacao-edit { display: inline-block; }

/* ============ EDIÇÃO EM MASSA DA COLUNA OBS (Lançamentos de Alunos) — mesmo mecanismo
   acima (toggle .modo-massa no tbody via alternarModoMassaIcone()), só que pra um campo
   de texto livre em vez de data. ============ */
.obs-edit { display: none; padding: 6px 8px; font-size: 12.5px; min-width: 140px; }
tbody.modo-massa .obs-view { display: none; }
tbody.modo-massa .obs-edit { display: inline-block; }

.linha-conferencia { display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap; padding: 14px 0; border-bottom: 1px solid var(--border); }
.linha-conferencia:last-child { border-bottom: none; }
.linha-conferencia .field { margin-bottom: 0; flex: 1; min-width: 130px; }
.linha-conferencia .field input:disabled { background: var(--bg); color: var(--text-muted); }
.linha-conferencia .field-nome-extrato { flex: 2.2; min-width: 220px; }
.linha-conferencia > input[type="checkbox"] { width: auto; flex-shrink: 0; align-self: center; margin-bottom: 8px; }

/* Tabela de conciliação (Lançamentos > Entrada > Conciliação bancária) — "tabela
   operacional": uma linha-resumo por pagamento (checkbox/tipo/nome/vincular/valor/data)
   com uma segunda <tr> de detalhe escondida por baixo, revelada pelo chevron — só quem
   precisa conferir categoria ou dividir o pagamento em mais de um item precisa abrir. */
.tabela-conciliacao td, .tabela-conciliacao th { vertical-align: middle; }
.linha-conc-resumo td { border-bottom: none; }
.linha-conc-detalhe td { padding-top: 0; }
.linha-conc-detalhe.escondida { display: none; }
.linha-conc-resumo .campo-select-tabela,
.linha-conc-resumo input[type="date"] { font-size: 12.5px; padding: 7px 8px; }
.linha-conc-resumo .conciliacao-valor-total { width: 110px; font-weight: 700; }
.linha-conc-resumo[data-tipo="saida"] .conciliacao-valor-total { color: var(--saida-cor); }
.linha-conc-resumo[data-tipo="entrada"] .conciliacao-valor-total { color: var(--teal); }
.btn-chevron {
  width: 30px; height: 30px; padding: 0; border-radius: 8px; border: 1px solid var(--border);
  background: transparent; color: var(--text-muted); cursor: pointer; display: flex;
  align-items: center; justify-content: center; transition: transform .15s, color .15s, border-color .15s;
}
.btn-chevron:hover { border-color: var(--teal); color: var(--teal); }
.btn-chevron.aberto { color: var(--teal); border-color: var(--teal); transform: rotate(180deg); }
.conciliacao-detalhe-conteudo { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 4px 0 14px; }
.conciliacao-itens { display: flex; flex-direction: column; gap: 6px; }
.conciliacao-item { display: flex; gap: 8px; align-items: center; }
.conciliacao-item select { flex: 1; min-width: 150px; }
.conciliacao-item .valor-estreito { width: 110px; flex-shrink: 0; }
.conciliacao-restante { font-size: 12px; font-weight: 700; color: var(--text-muted); margin-left: auto; }
.conciliacao-restante.restante-zerado { color: var(--teal); }
.conciliacao-restante.restante-negativo { color: var(--saida-cor); }

.conferencia-massa-acoes { display: flex; align-items: center; gap: 14px; margin-bottom: 14px; flex-wrap: wrap; font-size: 12.5px; }
.conferencia-massa-acoes label { display: flex; align-items: center; gap: 6px; cursor: pointer; }
.conferencia-massa-acoes input[type="checkbox"] { width: auto; }
.miniatura-anexo {
  width: 38px; height: 38px; border-radius: 8px; border: 1px solid var(--border);
  display: flex; align-items: center; justify-content: center; color: var(--text-muted);
  flex-shrink: 0; text-decoration: none; transition: border-color .15s, color .15s;
}
.miniatura-anexo svg { width: 18px; height: 18px; }
.miniatura-anexo:hover { border-color: var(--teal); color: var(--teal); }
.acoes-conferencia { display: flex; gap: 6px; flex-shrink: 0; }
.acoes-conferencia button { width: 34px; height: 34px; padding: 0; border-radius: 8px; flex-shrink: 0; }

/* ============ GRID DE PAINÉIS (Visão geral) ============ */
.dashboard-grid { display: grid; grid-template-columns: 1.6fr 1fr; gap: 18px; }
@media (max-width: 900px) { .dashboard-grid { grid-template-columns: 1fr; } }

.panel-sub { font-size: 12px; color: var(--text-muted); margin-bottom: 20px; }

.donut-linha { display: flex; align-items: center; gap: 24px; flex-wrap: wrap; padding-top: 6px; }
.donut { width: 120px; height: 120px; border-radius: 50%; flex-shrink: 0; position: relative; }
.donut-centro {
  position: absolute; inset: 16px; border-radius: 50%; background: var(--card-bg);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-weight: 700; font-size: 12.5px; color: var(--text); text-align: center; padding: 4px;
}
.donut-legenda { display: flex; flex-direction: column; gap: 7px; max-width: 220px; }
.legenda-item { display: flex; align-items: center; gap: 7px; font-size: 11.5px; }
.legenda-item .dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.legenda-item .nome { color: var(--text); font-weight: 600; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.legenda-item .pct { color: var(--text-muted); }

.top-categorias { display: flex; flex-direction: column; gap: 12px; }
.cat-row { display: flex; align-items: center; gap: 12px; }
.cat-row .cat-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
.cat-row .cat-name { font-size: 12.5px; width: 90px; flex-shrink: 0; color: var(--text); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cat-bar-track { flex: 0 1 45%; height: 8px; background: var(--bg); border-radius: 6px; overflow: hidden; }
.cat-bar-fill { height: 100%; border-radius: 6px; }
.cat-row .cat-val { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 11.5px; font-weight: 600; flex: 1; min-width: 78px; text-align: right; color: var(--text-muted); }

.btn-chip {
  display: inline-block; padding: 9px 14px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg);
  font-size: 12.5px; font-weight: 600; cursor: pointer; color: var(--text);
}
.btn-chip:hover { border-color: var(--teal); color: var(--teal); }

/* ============ CHIPS DE CATEGORIA (Configurações > Categorias) ============ */
.categorias-grupo { display: flex; flex-wrap: wrap; gap: 8px; }
.categoria-chip {
  display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px;
  border-radius: 999px; font-size: 12.5px; font-weight: 600; background: var(--bg);
  color: var(--text); border: 1px solid var(--border);
}
.categoria-chip.fixa { color: var(--text-muted); }
.categoria-chip .del-chip {
  display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
  border-radius: 50%; border: none; background: none; color: var(--text-muted); cursor: pointer;
  font-size: 12px; line-height: 1; padding: 0;
}
.categoria-chip .del-chip:hover { background: rgba(196,30,104,0.12); color: var(--magenta); }

summary { list-style: none; }
summary::-webkit-details-marker { display: none; }

/* "Ver detalhamento" (donuts de categoria) — link discreto com chevron, sem caixa/fundo. */
summary.btn-detalhe {
  display: inline-flex; align-items: center; gap: 5px;
  color: var(--teal); font-size: 12px; font-weight: 600;
  cursor: pointer;
}
summary.btn-detalhe:hover { text-decoration: underline; }
summary.btn-detalhe .chevron-ic { width: 12px; height: 12px; stroke: currentColor; flex-shrink: 0; transition: transform .15s; }
details[open] > summary.btn-detalhe .chevron-ic { transform: rotate(180deg); }
summary.btn-detalhe .txt-ocultar { display: none; }
details[open] > summary.btn-detalhe .txt-ver { display: none; }
details[open] > summary.btn-detalhe .txt-ocultar { display: inline; }

/* botão de submit só com ícone (funil), usado no lugar do texto "Filtrar" nos
   formulários de período — mesma altura/borda do pill-select ao lado. */
.btn-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; padding: 0; border-radius: 9px; border: 1px solid var(--border);
  background: var(--bg); color: var(--text-muted); cursor: pointer; flex-shrink: 0;
}
.btn-icon:hover { border-color: var(--teal); color: var(--teal); opacity: 1; }
.btn-icon svg { width: 16px; height: 16px; stroke: currentColor; }
/* estado "ativo" de um .btn-icon usado como toggle (ex.: Editar em massa em
   Lançamentos > Entradas/Saídas) — preenche de cor pra avisar que o modo está ligado,
   já que sem texto (só ícone) não dava pra contar com um "Cancelar edição em massa". */
.btn-icon.ativo { background: var(--magenta); border-color: var(--magenta); color: white; }
.btn-icon.ativo:hover { color: white; }
/* Variante "perigo" do .btn-icon (ex.: excluir selecionados em massa) — só tinge no
   hover, mesmo espírito discreto do .del-btn. */
.btn-icon-danger:hover { border-color: var(--saida-cor); color: var(--saida-cor); }
/* Variante compacta do .btn-icon pra caber dentro de célula de tabela (ex.: "+ vincular
   professor" em Configurações Ano Letivo). */
.btn-icon-sm { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 0; border-radius: 6px; border: 1px solid var(--border); background: var(--bg); color: var(--text-muted); cursor: pointer; font-size: 14px; line-height: 1; }
.btn-icon-sm:hover { border-color: var(--teal); color: var(--teal); }

/* ============ TABELA COM BUSCA/FILTROS (cabeçalho de painel) ============ */
.table-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; gap: 12px; flex-wrap: wrap; }

/* Barra "busca em destaque": título sozinho em cima (.table-header), embaixo a busca
   ocupa o espaço livre e as ações (Editar em massa / Novo lançamento) ficam compactas à
   direita, só ícone/redondo — usada em Lançamentos > Entradas/Saídas em vez de amontoar
   filtro + busca + os dois botões numa linha só com o título. */
.barra-busca-acoes { display: flex; gap: 10px; align-items: center; margin-bottom: 16px; }
.barra-busca-acoes .search-combo { flex: 1; min-width: 0; }
.barra-busca-acoes .search-combo select { max-width: 170px; flex-shrink: 0; }
.acoes-compactas { display: flex; gap: 8px; flex-shrink: 0; }
.filters { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.filters select {
  width: auto; padding: 9px 14px; border: 1px solid var(--border); border-radius: 999px;
  font-size: 12.5px; font-weight: 600; color: var(--text); background: var(--bg); cursor: pointer; transition: border-color .15s;
}
.filters select:hover, .filters select:focus { border-color: var(--teal); outline: none; }
/* campo de busca em formato pill, com a lupa como um botão circular (CTA) embutido no final —
   a lupa em si é um <button> real (ver .search-wrap/.search-icon-btn e campoBusca() em
   helpers.php), não mais um background-image decorativo: precisa funcionar como o CTA
   de busca, não só parecer um. */
.filters input[type="text"], .search-form input[type="text"] {
  width: auto; padding: 9px 40px 9px 16px; border: 1px solid var(--border); border-radius: 999px;
  font-size: 12.5px; background: var(--input-bg); transition: border-color .15s, box-shadow .15s;
}
.filters input[type="text"]:focus, .search-form input[type="text"]:focus {
  outline: none; border-color: var(--teal); box-shadow: 0 0 0 3px rgba(31,156,140,0.12);
}
.search-wrap { position: relative; display: inline-flex; }
.search-icon-btn {
  position: absolute; right: 4px; top: 50%; transform: translateY(-50%);
  width: 28px; height: 28px; padding: 0; border: none; border-radius: 50%;
  background: var(--magenta); color: #fff; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
}
.search-icon-btn svg { width: 14px; height: 14px; stroke: currentColor; }
.search-icon-btn:hover { opacity: .88; }

/* Combo categoria(s) + busca num único pill contínuo — select(s) e campo de texto grudados,
   sem gap entre si, com a lupa como botão circular embutido na borda direita (modelo da
   barra de busca do Google Images). Usado só onde categoria/tipo e busca por descrição
   representam UM filtro combinado; filtros independentes (ex.: Situação) continuam em
   pills separadas (ver .search-wrap acima). As regras abaixo pisam de propósito em
   ".filters select"/".filters input[type=text]" (mesma especificidade, vêm depois no
   arquivo) pra tirar o visual de pill solta de cada campo quando ele mora aqui dentro. */
.search-combo {
  display: flex; align-items: stretch; border: 1px solid var(--border); border-radius: 999px;
  background: var(--input-bg); overflow: hidden; transition: border-color .15s, box-shadow .15s;
}
.search-combo:focus-within { border-color: var(--teal); box-shadow: 0 0 0 3px rgba(31,156,140,0.12); }
.search-combo select {
  border: none; border-right: 1px solid var(--border); background: transparent; border-radius: 0;
  padding: 9px 14px; font-size: 12.5px; font-weight: 600; color: var(--text); cursor: pointer;
}
.search-combo select:focus { outline: none; }
.search-combo input[type="text"] {
  border: none; background: transparent; border-radius: 0; flex: 1; min-width: 150px;
  padding: 9px 14px; font-size: 12.5px;
}
.search-combo input[type="text"]:focus { outline: none; box-shadow: none; }
.search-combo-btn {
  border: none; border-radius: 50%; background: var(--magenta); color: #fff; cursor: pointer;
  width: 28px; height: 28px; margin: 4px; padding: 0; flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
}
.search-combo-btn svg { width: 14px; height: 14px; stroke: currentColor; }
.search-combo-btn:hover { opacity: .88; }
th.th-sort { cursor: pointer; user-select: none; }
th.th-sort:hover { color: var(--text); }
.muted-small { font-size: 10.5px; color: var(--text-muted); margin-top: 2px; }

/* ============ PAINEL "O QUE PRECISA DA SUA ATENÇÃO HOJE" (Dashboard) ============ */
.atencao-lista { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px,1fr)); gap: 10px; margin-top: 10px; }
.atencao-item {
  display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-radius: 12px;
  border: 1px solid var(--border); background: var(--bg); text-decoration: none;
  transition: border-color .15s, transform .1s, box-shadow .15s;
}
.atencao-item:hover { transform: translateY(-1px); box-shadow: 0 6px 16px rgba(0,0,0,0.06); }
/* Badge circular do ícone (SVG stroke, mesmo estilo dos ícones da sidebar) — cor de fundo
   por severidade (crítico/aviso/info), não mais um emoji solto do tamanho do texto. */
.atencao-icone-badge {
  width: 36px; height: 36px; border-radius: 10px; display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; order: 2;
}
.atencao-icone-badge svg { width: 18px; height: 18px; }
.atencao-icone-badge.atencao-icone-emoji { font-size: 17px; }
/* Número em destaque (quantos itens), antes do badge — a primeira coisa que bate o olho. */
.atencao-contagem {
  font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 19px; font-weight: 700;
  min-width: 30px; text-align: center; flex-shrink: 0; order: 1;
}
.atencao-texto { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; order: 3; }
.atencao-texto strong { font-size: 13px; color: var(--text); }
.atencao-texto .muted-small { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.atencao-seta { color: var(--text-muted); font-size: 15px; flex-shrink: 0; order: 4; }
.atencao-critico { border-color: rgba(196,30,104,0.35); }
.atencao-critico:hover { border-color: var(--saida-cor); }
.atencao-critico .atencao-contagem { color: var(--saida-cor); }
.atencao-critico .atencao-icone-badge { background: rgba(196,30,104,0.12); color: var(--saida-cor); }
.atencao-aviso { border-color: rgba(245,169,78,0.4); }
.atencao-aviso:hover { border-color: var(--laranja); }
.atencao-aviso .atencao-contagem { color: #B87400; }
.atencao-aviso .atencao-icone-badge { background: rgba(245,169,78,0.18); color: #B87400; }
.atencao-info { border-color: rgba(108,60,233,0.3); }
.atencao-info:hover { border-color: var(--magenta); }
.atencao-info .atencao-contagem { color: var(--magenta); }
.atencao-info .atencao-icone-badge { background: rgba(108,60,233,0.1); color: var(--magenta); }

/* ============ PAINEL "GERAR INSIGHTS DA MINHA OPERAÇÃO" (Dashboard) ============ */
.insights-cabecalho { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.insights-cabecalho form { flex-shrink: 0; }
.insights-form-linha { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.toggle-sutil-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.toggle-sutil-btn:disabled:hover { color: var(--text-muted); }
/* Spinner do botão "Gerar Insights" enquanto a chamada (síncrona, sem AJAX) roda no
   servidor — ver aoGerarInsights() no <script> desta página. */
.btn-spinner {
  display: inline-block; width: 12px; height: 12px; margin-right: 7px; vertical-align: -1px;
  border: 2px solid rgba(255,255,255,0.4); border-top-color: #fff; border-radius: 50%;
  animation: btn-spinner-girar .7s linear infinite;
}
@keyframes btn-spinner-girar { to { transform: rotate(360deg); } }
.insights-grupo { margin-top: 16px; }
.insights-grupo-titulo { display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 600; color: var(--text-muted); margin-bottom: 10px; }
.badge-motor {
  display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 999px;
  font-size: 10.5px; font-weight: 700; letter-spacing: 0.02em; text-transform: uppercase; flex-shrink: 0;
}
.badge-motor-ia { background: rgba(108,60,233,0.12); color: var(--magenta); }
.badge-motor-regras { background: rgba(31,156,140,0.12); color: var(--teal); }
.insights-lista { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px,1fr)); gap: 10px; }
.insight-card {
  padding: 14px 16px; border-radius: 12px; border: 1px solid var(--border); background: var(--bg);
  border-left: 3px solid var(--border);
}
.insight-card strong { display: block; font-size: 13px; color: var(--text); margin-bottom: 4px; }
.insight-card p { font-size: 12px; color: var(--text-muted); line-height: 1.5; margin: 0; }
.insight-alta { border-left-color: var(--saida-cor); }
.insight-media { border-left-color: var(--laranja); }
.insight-baixa { border-left-color: var(--azul-claro); }
.insight-info { border-left-color: var(--teal); }

/* ---- Status do catálogo (Estoque > Produtos) — badge de status por linha ---- */
.status-pill { font-size: 11px; font-weight: 700; padding: 3px 9px; border-radius: 999px; display: inline-block; white-space: nowrap; }
.status-pill.status-ok { background: rgba(31,156,140,0.14); color: var(--teal); }
.status-pill.status-baixo { background: rgba(245,169,78,0.18); color: #9C6A0A; }
.status-pill.status-critico { background: rgba(196,30,104,0.14); color: var(--saida-cor); }
.status-pill.status-parado { background: rgba(143,180,217,0.28); color: var(--azul-marinho); }

/* ---- Lembretes (Estoque) — pendências acionáveis (crítico/baixo/compras recentes) ---- */
.lembretes-lista { display: flex; flex-direction: column; gap: 8px; }
.lembrete-item { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border: 1px solid var(--border); border-radius: 10px; background: var(--bg); }
.lembrete-item .ic { font-size: 16px; flex-shrink: 0; }
.lembrete-item .txt { flex: 1; font-size: 12.5px; color: var(--text-muted); }
.lembrete-item .txt b { display: block; font-size: 12.5px; font-weight: 600; color: var(--text); }
.lembrete-item .cta { font-size: 11.5px; font-weight: 700; color: var(--magenta); white-space: nowrap; text-decoration: none; }

/* ---- Oportunidades (Mural > Eventos) — cartões de recomendação repetir/revisar/pendente ---- */
.oportunidades-lista { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px,1fr)); gap: 12px; }
.oportunidade-card { border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px; display: flex; flex-direction: column; gap: 6px; }
.oportunidade-tag { font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; padding: 3px 9px; border-radius: 999px; align-self: flex-start; }
.oportunidade-repetir .oportunidade-tag { background: rgba(31,156,140,0.14); color: var(--teal); }
.oportunidade-revisar .oportunidade-tag { background: rgba(245,169,78,0.18); color: #9C6A0A; }
.oportunidade-pendente .oportunidade-tag { background: rgba(108,60,233,0.12); color: var(--magenta); }
.oportunidade-card h4 { font-size: 13.5px; font-weight: 700; color: var(--text); }
.oportunidade-card p { font-size: 12px; color: var(--text-muted); line-height: 1.5; }

/* ---- Linha do tempo (Mural > Eventos) — um cartão por evento, agrupado por mês, numa
   linha vertical com marcadores (cor = resultado). Cada cartão usa DUAS cat-bar-track
   empilhadas (receita/despesa), mesmo formato de barra do painel "Eventos por categoria"
   — só que aqui o eixo é o tempo, não categoria. Tooltip nativo via title (sem lib). ---- */
.timeline-legenda { display: flex; flex-wrap: wrap; gap: 14px; margin: 4px 0 12px; font-size: 11.5px; color: var(--text-muted); }
.timeline-legenda span { display: flex; align-items: center; gap: 5px; }
.timeline-legenda i { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }

.linha-tempo-eventos { position: relative; padding-left: 22px; }
.linha-tempo-eventos::before { content: ""; position: absolute; left: 5px; top: 6px; bottom: 6px; width: 2px; background: var(--border); }
.tempo-mes { font-family: var(--font-display); font-size: 11.5px; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; margin: 18px 0 8px; position: relative; }
.tempo-mes:first-child { margin-top: 0; }
.tempo-mes::before { content: ""; position: absolute; left: -22px; top: 3px; width: 10px; height: 10px; border-radius: 50%; background: var(--azul-marinho); border: 2px solid var(--card-bg); }

.tempo-evento { background: var(--bg); border: 1px solid var(--border); border-radius: 12px; padding: 12px 14px; margin-bottom: 8px; position: relative; }
.tempo-evento::before { content: ""; position: absolute; left: -20px; top: 16px; width: 8px; height: 8px; border-radius: 50%; border: 2px solid var(--card-bg); background: var(--text-muted); }
.tempo-evento.pos::before { background: var(--teal); }
.tempo-evento.neg::before { background: var(--saida-cor); }
.tempo-evento.pendente::before { background: var(--amarelo); }
.tempo-evento-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; margin-bottom: 10px; }
.tempo-evento-titulo { font-weight: 700; font-size: 13.5px; }
.tempo-evento-meta { font-size: 11.5px; color: var(--text-muted); margin-top: 2px; }
.tempo-evento-resultado { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-weight: 700; font-size: 14.5px; white-space: nowrap; cursor: default; }
.tempo-evento-resultado.pos { color: var(--teal); }
.tempo-evento-resultado.neg { color: var(--saida-cor); }
.tempo-evento-resultado.pendente { color: var(--amarelo-texto); font-size: 11.5px; }
.tag-pendente-mini { font-size: 10px; font-weight: 700; color: var(--amarelo-texto); background: rgba(242,194,48,0.18); padding: 2px 7px; border-radius: 6px; margin-left: 6px; }
.tempo-evento-bars { display: flex; flex-direction: column; gap: 4px; margin-bottom: 8px; }
.tempo-bar-track { height: 8px; background: var(--card-bg); border-radius: 5px; overflow: hidden; cursor: default; }
.tempo-bar-fill { height: 100%; border-radius: 5px; }
.tempo-bar-fill.receita { background: var(--teal); }
.tempo-bar-fill.despesa { background: var(--saida-cor); }
.tempo-evento-valores { font-size: 11.5px; color: var(--text-muted); }

/* ============ PAGINAÇÃO (modelo A: numerada) ============ */
.paginacao { display: flex; align-items: center; gap: 4px; justify-content: center; margin-top: 18px; flex-wrap: wrap; }
.paginacao .pg-item {
  min-width: 30px; height: 30px; padding: 0 6px; border: 1px solid var(--border); background: var(--card-bg);
  border-radius: 7px; font-size: 12px; font-weight: 600; color: var(--text-muted); font-family: var(--font-mono);
  display: inline-flex; align-items: center; justify-content: center; text-decoration: none; cursor: pointer;
}
.paginacao a.pg-item:hover { border-color: var(--teal); color: var(--teal); }
.paginacao .pg-nav { color: var(--azul-marinho); font-weight: 700; }
.paginacao .pg-atual { background: var(--magenta); border-color: var(--magenta); color: white; cursor: default; }
.paginacao .pg-desativado { opacity: 0.4; cursor: default; }
.paginacao .pg-reticencias { color: var(--text-muted); font-size: 12px; padding: 0 3px; }
.paginacao-info { text-align: center; font-size: 11.5px; color: var(--text-muted); margin-top: 8px; }
.paginacao-totais { text-align: center; font-size: 12.5px; color: var(--text-muted); font-family: var(--font-mono); font-variant-numeric: tabular-nums; margin-top: 4px; }
.paginacao-totais .valor-cell { font-weight: 600; }
.header-hint { font-size: 11.5px; color: var(--text-muted); background: var(--bg); padding: 10px 12px; border-radius: 8px; margin-top: 10px; font-family: var(--font-mono); font-variant-numeric: tabular-nums; }

/* ============ PAINEL DE FORMULÁRIO (campos soltos, não em <form-grid> padrão) ============ */
.field { margin-bottom: 13px; }
.field label { display: block; font-size: 11px; font-weight: 600; color: var(--text-muted); margin-bottom: 6px; text-transform: uppercase; letter-spacing: 0.03em; }
.field input, .field select, .field textarea {
  width: 100%; padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px;
  font-family: var(--font-body); font-size: 13.5px; color: var(--text); background: var(--input-bg);
}
.field input:focus, .field select:focus, .field textarea:focus { outline: none; border-color: var(--teal); background: var(--card-bg); }
.span-full { grid-column: 1 / -1; }
.radio-group { display: flex; gap: 16px; align-items: center; padding: 9px 2px; flex-wrap: wrap; }
.radio-group label { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); font-weight: 500; text-transform: none; cursor: pointer; }
.radio-group input[type="checkbox"], .radio-group input[type="radio"] { width: auto; accent-color: var(--teal); }

.btn-primary { padding: 11px 22px; border: none; border-radius: 8px; background: var(--magenta); color: white; font-weight: 600; font-size: 13.5px; cursor: pointer; margin-top: 6px; transition: opacity .15s; }
.btn-primary:hover { opacity: 0.9; }
.btn-secondary { padding: 10px 18px; border: 1px solid var(--border); border-radius: 8px; background: var(--card-bg); color: var(--text-muted); font-weight: 600; font-size: 13px; cursor: pointer; margin-top: 6px; margin-left: 8px; }
.btn-secondary:hover { background: var(--bg); }

/* botão redondo "novo X", usado nas subabas Entradas/Saídas ao lado da busca */
.btn-fab { position: relative; width: 36px; height: 36px; border-radius: 9px; border: none; background: var(--magenta); color: white; display: flex; align-items: center; justify-content: center; cursor: pointer; flex-shrink: 0; transition: opacity .15s; }
.btn-fab:hover { opacity: .88; }
.btn-fab svg { width: 17px; height: 17px; }

/* ============ PAINEL DE FORMULÁRIO EXPANSÍVEL (Lançamentos) ============ */
.form-panel-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
.form-panel-head h3 { margin-bottom: 0; }
.form-panel-close { width: 26px; height: 26px; border-radius: 7px; border: 1px solid var(--border); background: var(--card-bg); color: var(--text-muted); font-size: 15px; line-height: 1; cursor: pointer; flex-shrink: 0; text-decoration: none; display: inline-flex; align-items: center; justify-content: center; padding: 0; }
.form-panel-close:hover { background: var(--bg); color: var(--text); }

/* ============ GRÁFICO DE BARRAS (Entradas × Saídas) ============ */
/* Largura fixa (46px) — casada com CHART_COL_LARGURA no JS (dashboard.php), que calcula
   a posição de cada ponto da linha de margem a partir dela (índice × largura), sem medir
   o layout depois de montado. Gap reduzido (era 18px) a pedido — colunas mais próximas.
   overflow-x direto aqui (em vez de um <div> wrapper por fora) — com a janela padrão de
   12 meses e essa largura, o gráfico cabe sem rolar na maioria das telas; a rolagem só
   entra em ação em telas bem estreitas. */
.chart { display: flex; align-items: flex-end; gap: 8px; height: 190px; padding-top: 10px; min-width: min-content; position: relative; overflow-x: auto; }
.chart-col { flex: 0 0 46px; width: 46px; display: flex; flex-direction: column; align-items: center; gap: 6px; height: 100%; justify-content: flex-end; position: relative; }
/* Régua vertical discreta, só no hover — ajuda a alinhar visualmente a coluna com o
   ponto correspondente na linha de margem por cima. */
.chart-col-guia { position: absolute; top: 0; bottom: 30px; left: 50%; width: 1px; background: var(--border); opacity: 0; pointer-events: none; transition: opacity .1s; }
.chart-col:hover .chart-col-guia { opacity: 1; }
/* Linha de margem de lucro (%), desenhada por cima das barras pelo JS (renderGraficoFluxo/
   desenharLinhaMargemChart) a partir do data-margem de cada .chart-col — escala própria
   (%), independente da escala em R$ das barras. pointer-events:none pra não atrapalhar o
   hover das colunas por baixo (o tooltip é acionado pela coluna inteira, não pelo ponto). */
.chart-margem-svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.chart-margem-linha { fill: none; stroke: var(--magenta); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.chart-margem-ponto { fill: var(--magenta); stroke: var(--card-bg); stroke-width: 1.5; }
/* Tooltip único e compartilhado (um <div> só, reaproveitado por todas as colunas) — ver
   mostrarChartTooltip()/esconderChartTooltip() no <script> desta página. position:fixed
   porque a posição é calculada a partir de getBoundingClientRect() (coordenadas de
   viewport), sem somar scroll — mais simples e robusto que position:absolute aqui. */
.chart-tooltip {
  position: fixed; pointer-events: none; background: var(--azul-marinho); color: #fff;
  font-size: 11px; line-height: 1.6; padding: 8px 11px; border-radius: 9px; opacity: 0;
  transform: translate(-50%, -100%); transition: opacity .1s; white-space: nowrap; z-index: 50;
  box-shadow: 0 8px 20px rgba(0,0,0,.18);
}
.chart-tooltip .e { color: #7CE0C6; }
.chart-tooltip .s { color: #F5A0C6; }

/* Toggle discreto (Subcategoria/Categoria, Mês/Ano) — mais neutro que .segmented-toggle
   (usado no formulário de Colaboradores para CLT/PJ, esse sim continua com destaque de
   cor): aqui o estado ativo é só um leve contraste de fundo, sem cor de marca. */
.toggle-sutil { display: inline-flex; gap: 2px; background: var(--bg); border-radius: 8px; padding: 2px; }
.toggle-sutil-btn { background: none; border: none; padding: 4px 10px; font-size: 11.5px; font-weight: 600; color: var(--text-muted); border-radius: 6px; cursor: pointer; font-family: inherit; transition: background .15s, color .15s; }
.toggle-sutil-btn:hover:not(.ativo) { color: var(--text); }
.toggle-sutil-btn.ativo { background: var(--card-bg); color: var(--text); box-shadow: 0 1px 2px rgba(0,0,0,0.08); }
/* Toggle Ativo/Inativo do cabeçalho de /alunos?editar (mesmo modelo do toggle-sutil, só
   com cor própria quando selecionado — verde pra Ativo, cinza pra Inativo — em vez do
   contraste neutro padrão). */
.status-ativo-btn.ativo { background: var(--verde-agua); color: #fff; box-shadow: none; }
.status-inativo-btn.ativo { background: var(--text-muted); color: #fff; box-shadow: none; }
/* Linhas horizontais de referência (0/25/50/75/100% do maior valor do período) — dá uma
   régua visual pra comparar a altura das barras sem precisar passar o mouse em cada uma. */
.chart-bars {
  display: flex; gap: 6px; align-items: flex-end; height: 150px; width: 100%; justify-content: center;
  background-image: repeating-linear-gradient(to top, var(--border) 0, var(--border) 1px, transparent 1px, transparent 37.5px);
  background-position: bottom; border-bottom: 1px solid var(--border);
}
.bar-wrap { display: flex; flex-direction: column; align-items: center; justify-content: flex-end; height: 100%; }
.bar { width: 16px; border-radius: 4px 4px 0 0; transition: filter .15s; }
.bar.entrada { background: var(--teal); }
.bar.saida { background: var(--saida-cor); }
.bar:hover { filter: brightness(1.18); }
.chart-label { font-size: 10.5px; color: var(--text-muted); font-weight: 600; }
/* Saldo do mês, embaixo do rótulo — o número que mais importa (positivo/negativo) de
   bater o olho, sem precisar comparar a altura das duas barras uma com a outra. */
.chart-saldo { font-size: 9.5px; font-weight: 700; font-family: var(--font-mono); font-variant-numeric: tabular-nums; padding: 1px 7px; border-radius: 20px; white-space: nowrap; }
.chart-saldo.positivo { color: var(--teal); background: rgba(31,156,140,0.12); }
.chart-saldo.negativo { color: var(--saida-cor); background: rgba(196,30,104,0.1); }

/* ============ SEÇÃO RECOLHÍVEL (comparativo mês a mês) ============ */
.sec { border: 1px solid var(--border); border-radius: 11px; overflow: hidden; }
.sec-head { display: flex; align-items: center; gap: 11px; padding: 13px 15px; cursor: pointer; user-select: none; background: #FCFBF9; }
.sec-badge { width: 26px; height: 26px; border-radius: 7px; flex-shrink: 0; color: white; display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; }
.sec-head .txt { flex: 1; min-width: 0; }
.sec-head .txt h4 { font-size: 13.5px; font-weight: 600; margin: 0; color: var(--text); }
.sec-head .txt span { font-size: 11.5px; color: var(--text-muted); }
.sec-head .chev { font-size: 11px; color: var(--text-muted); transition: transform .15s; flex-shrink: 0; }
.sec.collapsed .sec-head .chev { transform: rotate(-90deg); }
.sec-body { padding: 16px 15px 18px; border-top: 1px solid var(--border); }
.sec.collapsed .sec-body { display: none; }
.badge-1 { background: var(--magenta); }
.badge-2 { background: var(--rosa); }
.badge-3 { background: var(--azul-marinho); }
.badge-4 { background: var(--teal); }

/* ============ PAINEL COLAPSÁVEL (registrar compra/venda no Estoque) ============ */
.collapsible-header { display: flex; align-items: center; justify-content: space-between; cursor: pointer; user-select: none; }
.collapsible-header .htitle { display: flex; align-items: center; gap: 10px; }
.collapsible-header .plus-icon { width: 26px; height: 26px; border-radius: 7px; background: var(--magenta); color: white; display: flex; align-items: center; justify-content: center; font-size: 15px; font-weight: 700; flex-shrink: 0; }
.collapsible-header h3 { margin-bottom: 0; }
.collapsible-header .chevron { font-size: 12px; color: var(--text-muted); transition: transform .15s; }
.collapsible-panel.open .collapsible-header .chevron { transform: rotate(180deg); }
.collapsible-body { display: none; margin-top: 20px; padding-top: 20px; border-top: 1px solid var(--border); }
.collapsible-panel.open .collapsible-body { display: block; }

.tag.clt { background: rgba(37,75,119,0.1); color: var(--azul-marinho); }
.tag.pj { background: rgba(217,112,158,0.15); color: var(--rosa); }
.tag.alerta { background: rgba(245,169,78,0.18); color: #9C6A0A; }
.tag.admin { background: rgba(37,75,119,0.1); color: var(--azul-marinho); }
.tag.financeiro { background: rgba(31,156,140,0.12); color: var(--teal); }
.tag.secretaria { background: rgba(217,112,158,0.15); color: var(--rosa); }

/* ============ CALENDÁRIO (Mural de Eventos) ============ */
.cal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; gap: 12px; flex-wrap: wrap; }
.cal-header h3 { margin-bottom: 0; }
.cal-header-controls { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cal-nav { display: flex; gap: 8px; }
.cal-nav button, .cal-nav a { width: 32px; height: 32px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg); cursor: pointer; font-size: 14px; color: var(--azul-marinho); display: inline-flex; align-items: center; justify-content: center; text-decoration: none; }
.cal-nav button:hover, .cal-nav a:hover { border-color: var(--teal); }
.cal-weekdays { display: grid; grid-template-columns: repeat(7,1fr); gap: 6px; margin-bottom: 6px; }
.cal-weekdays span { font-size: 10.5px; font-weight: 700; text-transform: uppercase; color: var(--text-muted); text-align: center; }
.cal-grid { display: grid; grid-template-columns: repeat(7,1fr); gap: 6px; }
.cal-dia { min-height: 84px; border: 1px solid var(--border); border-radius: 8px; padding: 6px; background: var(--input-bg); overflow: hidden; }
.cal-dia.vazio { border: none; background: none; }
.cal-dia.hoje { border-color: var(--magenta); background: rgba(196,30,104,0.05); }
.cal-dia-num { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 11.5px; font-weight: 700; color: var(--text-muted); margin-bottom: 4px; }
.cal-dia.hoje .cal-dia-num { color: var(--magenta); }
.cal-item { font-size: 9.5px; padding: 1px 4px; margin-bottom: 2px; border-radius: 4px; background: rgba(37,75,119,0.08); color: var(--azul-marinho); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
a.cal-item, a.cal-day-item { display: block; text-decoration: none; cursor: pointer; }
a.cal-item:hover, a.cal-day-item:hover { filter: brightness(0.94); }
a.cal-day-item { display: flex; }
.cal-item.tipo-aniversario-aluno { background: rgba(31,156,140,0.18); color: #12695D; }
.cal-item.tipo-aniversario-colaborador { background: rgba(217,112,158,0.18); color: #A14E76; }
.cal-item.tipo-evento { background: rgba(108,60,233,0.14); color: var(--magenta); }
.cal-item.tipo-lembrete { background: rgba(245,169,78,0.18); color: #9C6A0A; }
.cal-item.tipo-vencimento { background: rgba(196,30,104,0.12); color: var(--saida-cor); }
.cal-item-mais { font-size: 9px; color: var(--text-muted); }

/* Legenda de cores do calendário (Mural) — chips com o dot + rótulo, mesmas cores usadas
   em .cal-item/.cal-day-item, pra deixar explícito o que cada cor representa. O último
   chip (Vencimentos) é interativo — checkbox escondido dentro do <label>, estilo próprio
   pra sinalizar que é ligável/desligável (borda tracejada), diferente dos 4 informativos. */
.cal-legenda-dot { width: 8px; height: 8px; border-radius: 999px; flex-shrink: 0; }
.cal-legenda-dot.aniversario-aluno { background: #1F9C8C; }
.cal-legenda-dot.aniversario-colaborador { background: #D9709E; }
.cal-legenda-dot.evento { background: var(--magenta); }
.cal-legenda-dot.lembrete { background: var(--laranja); }
.cal-legenda-dot.vencimento { background: var(--saida-cor); }

/* ---- Legenda flutuante (Mural > Calendário) — botão discreto que abre um popover com
   as 5 categorias, cada uma com checkbox (não só Vencimentos, que era o único caso antes)
   — ver toggleCategoriaCalendario()/toggleLegendaCalendarioPopover() no <script>. ---- */
.cal-legenda-flutuante { position: relative; }
.cal-legenda-btn {
  display: inline-flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 600;
  color: var(--text-muted); background: var(--input-bg); border: 1px solid var(--border);
  border-radius: 999px; padding: 7px 14px; cursor: pointer; font-family: inherit;
}
.cal-legenda-btn:hover { border-color: var(--magenta); color: var(--text); }
.cal-legenda-btn-dots { display: flex; gap: 2px; }
.cal-legenda-btn-dots i { width: 6px; height: 6px; border-radius: 50%; display: block; }
.cal-legenda-popover {
  position: absolute; top: calc(100% + 8px); right: 0; background: var(--card-bg);
  border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 12px 32px rgba(0,0,0,0.14);
  padding: 12px; width: 230px; z-index: 30; display: none; flex-direction: column; gap: 9px;
}
.cal-legenda-popover.aberta { display: flex; }
.cal-legenda-popover-item { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--text); cursor: pointer; }
.cal-legenda-popover-item input[type="checkbox"] { margin-left: auto; width: auto; accent-color: var(--magenta); }
@media (max-width: 900px) { .cal-dia { min-height: 56px; } .cal-item { display: none; } }

/* Alterna entre visões Hoje / Semana / Mês do calendário. */
.cal-visao-switch { display: flex; gap: 3px; background: var(--input-bg); border: 1px solid var(--border); border-radius: 8px; padding: 3px; }
.cal-visao-switch a { padding: 5px 12px; border-radius: 6px; font-size: 12px; font-weight: 600; color: var(--text-muted); text-decoration: none; }
.cal-visao-switch a.ativo { background: var(--card-bg); color: var(--magenta); box-shadow: 0 1px 3px rgba(0,0,0,0.1); }

/* Visão Semana — mesma grade de 7 colunas do mês, células mais altas com a lista de itens por inteiro (sem cortar em 3). */
.cal-week-grid { display: grid; grid-template-columns: repeat(7,1fr); gap: 8px; }
.cal-week-dia { border: 1px solid var(--border); border-radius: 8px; padding: 8px; background: var(--input-bg); min-height: 170px; }
.cal-week-dia.hoje { border-color: var(--magenta); background: rgba(196,30,104,0.05); }
.cal-week-dia-cab { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 6px; }
.cal-week-dia-cab span:first-child { font-size: 10.5px; font-weight: 700; text-transform: uppercase; color: var(--text-muted); }
.cal-week-dia.hoje .cal-dia-num { color: var(--magenta); }
.cal-week-dia-itens .cal-item { white-space: normal; font-size: 10.5px; padding: 3px 5px; }
.cal-week-vazio { font-size: 11px; color: var(--text-muted); text-align: center; padding: 14px 0; }
@media (max-width: 900px) { .cal-week-dia { min-height: 100px; padding: 6px; } }

/* Visão Hoje (dia) — lista vertical com todos os itens do dia, sem limite de 3. */
.cal-day-list { display: flex; flex-direction: column; gap: 8px; }
.cal-day-item { display: flex; gap: 12px; align-items: flex-start; padding: 12px 14px; border: 1px solid var(--border); border-radius: 10px; background: var(--input-bg); border-left-width: 3px; }
.cal-day-item-icone { font-size: 20px; line-height: 1; }
.cal-day-item-titulo { font-weight: 700; font-size: 13.5px; }
.cal-day-item-detalhe { font-size: 12px; color: var(--text-muted); margin-top: 2px; }
.cal-day-item.tipo-aniversario-aluno { border-left-color: #1F9C8C; }
.cal-day-item.tipo-aniversario-colaborador { border-left-color: #D9709E; }
.cal-day-item.tipo-evento { border-left-color: var(--magenta); }
.cal-day-item.tipo-lembrete { border-left-color: var(--laranja); }
.cal-day-item.tipo-vencimento { border-left-color: var(--saida-cor); }

/* ============ TOGGLE (Status ativo/inativo — Aluno) ============ */
.status-toggle-row { display: flex; align-items: center; gap: 10px; padding-top: 8px; }
.toggle-switch { position: relative; display: inline-block; width: 40px; height: 22px; flex-shrink: 0; }
.toggle-switch input { opacity: 0; width: 0; height: 0; }
.toggle-slider { position: absolute; inset: 0; cursor: pointer; background: var(--border); border-radius: 999px; transition: background .15s; }
.toggle-slider::before { content: ''; position: absolute; height: 16px; width: 16px; left: 3px; top: 3px; background: #fff; border-radius: 50%; transition: transform .15s; }
.toggle-switch input:checked + .toggle-slider { background: var(--teal); }
.toggle-switch input:checked + .toggle-slider::before { transform: translateX(18px); }
.toggle-label { font-size: 13px; font-weight: 600; color: var(--text); }

/* variante pra alternâncias entre duas opções igualmente válidas (ex.: forma de
   compensação de horas extras em Colaboradores) — NÃO é status ativo/inativo, então a
   bolinha nunca fica cinza feito "desligada"; os dois lados ficam coloridos, só troca
   de cor. */
.toggle-switch-neutro .toggle-slider { background: var(--azul-claro); }
.toggle-switch-neutro input:checked + .toggle-slider { background: var(--teal); }

/* alternância de duas opções em segmento (dois botões lado a lado, o ativo preenchido)
   — usada em pares sem noção de ativo/inativo onde o toggle-switch de pílula (acima)
   não é claro o bastante (ex.: CLT/PJ em Colaboradores). */
.segmented-toggle { display: inline-flex; background: rgba(108,60,233,0.08); border-radius: 10px; padding: 3px; gap: 3px; width: fit-content; }
.segmented-toggle .seg-btn {
  padding: 8px 16px; border: none; border-radius: 7px; background: transparent;
  color: var(--magenta); font-weight: 700; font-size: 12.5px; cursor: pointer; transition: background .15s, color .15s;
}
.segmented-toggle .seg-btn:hover:not(.ativo) { background: rgba(108,60,233,0.14); }
.segmented-toggle .seg-btn.ativo { background: var(--magenta); color: #fff; box-shadow: 0 2px 6px rgba(108,60,233,0.35); }

/* Status de entrega (Estoque > Lançamentos) — mesma ideia de segmento (dois botões, o
   ativo preenchido) do .segmented-toggle acima, mas em classes próprias (não reaproveita
   .segmented-toggle/.seg-btn) pra não depender de empatar especificidade CSS com aquele
   componente — cada lado aqui tem sua própria cor (teal = entregue, âmbar = pendente/
   encomendado) e o tamanho é bem menor, pra caber numa célula de tabela. */
.status-entrega-toggle { display: inline-flex; background: rgba(128,128,128,0.1); border-radius: 7px; padding: 2px; gap: 2px; width: fit-content; }
.status-entrega-btn {
  padding: 3px 8px; border: none; border-radius: 5px; background: transparent;
  color: var(--text-muted); font-weight: 700; font-size: 10.5px; line-height: 1.4; cursor: pointer; transition: background .15s, color .15s;
}
.status-entrega-btn:hover { background: rgba(128,128,128,0.16); }
.status-entrega-btn.entrega-entregue-ativo { background: var(--teal); color: #fff; }
.status-entrega-btn.entrega-pendente-ativo { background: var(--laranja); color: #fff; }

/* ============ COR DE DESTAQUE (WHITELABEL) — um único círculo de seleção, sem presets ============ */
.field input.color-input-big, .color-input-big { width: 22px; height: 22px; padding: 0; border: none; border-radius: 50%; cursor: pointer; background: none; flex-shrink: 0; box-shadow: 0 0 0 1.5px var(--border); }
.color-input-big::-webkit-color-swatch-wrapper { padding: 0; }
.color-input-big::-webkit-color-swatch { border: none; border-radius: 50%; }
.color-input-big::-moz-color-swatch { border: none; border-radius: 50%; }

/* ============ LOGO DA ESCOLA (Dados da Escola) ============ */
.logo-preview {
  width: 68px; height: 68px; border-radius: 14px; flex-shrink: 0; overflow: hidden;
  background: linear-gradient(135deg, var(--magenta), var(--teal));
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-display); font-weight: 700; font-size: 22px; color: white;
}
.logo-preview img { width: 100%; height: 100%; object-fit: contain; background: white; }

/* Linha única da Marca: logo clicável + nome + iniciais + cor, aproveitando a mesma linha
   em vez de espalhar cada campo num bloco separado. */
.marca-row { display: flex; gap: 16px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 6px; }
.marca-row .field { flex: 1; min-width: 160px; margin-bottom: 0; }
.marca-row .campo-nome-escola { flex: 0 1 220px; }
.marca-row .campo-iniciais { flex: 0 0 90px; min-width: 0; }
.marca-row .campo-cor { flex: 0 0 60px; min-width: 0; }
.marca-row .campo-cor input.color-input-big { width: 40px; height: 40px; }

.logo-preview-btn { position: relative; border: none; background: none; padding: 0; cursor: pointer; border-radius: 14px; flex-shrink: 0; }
.logo-edit-ic {
  position: absolute; right: -4px; bottom: -4px; width: 22px; height: 22px; border-radius: 50%;
  background: var(--azul-marinho); color: #fff; border: 2px solid var(--card-bg);
  display: flex; align-items: center; justify-content: center;
}
.logo-edit-ic svg { width: 11px; height: 11px; stroke: currentColor; }
.logo-remove-ic {
  position: absolute; right: -4px; top: -4px; width: 20px; height: 20px; border-radius: 50%;
  background: var(--saida-cor); color: #fff; border: 2px solid var(--card-bg); padding: 0; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
}
.logo-remove-ic svg { width: 10px; height: 10px; stroke: currentColor; }

/* ============ NOTIFICAÇÕES ============ */
.notif-lista { display: flex; flex-direction: column; gap: 10px; padding: 6px 0; }
.notif-card { padding: 14px 16px; border-radius: 10px; border: 1px solid var(--border); }
.notif-card.unread { background: rgba(196,30,104,0.05); border-color: rgba(196,30,104,0.25); }
.notif-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.notif-card-title { font-size: 14px; font-weight: 700; color: var(--text); display: flex; align-items: center; gap: 6px; }
.notif-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--magenta); display: inline-block; flex-shrink: 0; }
.notif-card-data { font-size: 11.5px; color: var(--text-muted); white-space: nowrap; }
.notif-card-msg { font-size: 13px; color: var(--text-muted); line-height: 1.5; margin-top: 6px; }

/* ============ CONFIGURAÇÕES ============ */
.turma-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px,1fr)); gap: 14px; margin-top: 6px; }

/* ============ TURMAS — TABELA MESTRE-DETALHE (aba Turmas em Alunos) ============ */
.turmas-md-table { width: 100%; border-collapse: collapse; }
.turmas-md-table th { text-align: left; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); padding: 10px 12px; border-bottom: 1px solid var(--border); white-space: nowrap; }
.turmas-md-table td { padding: 12px; border-bottom: 1px solid var(--border); font-size: 13px; vertical-align: middle; }
/* Compacta: com 8 colunas de dado + chevron, cabe mais gente numa tela normal com fonte e
   padding menores — o wrapper overflow-x:auto ao redor da tabela cobre o resto (telas
   estreitas continuam roláveis, nada é cortado). */
.turmas-md-table-compacta th, .turmas-md-table-compacta td { padding: 9px 10px; font-size: 12px; }
.turma-md-row { cursor: pointer; }
.turma-md-row:hover { background: var(--bg); }
.turma-md-nome { font-family: var(--font-display); font-weight: 600; color: var(--azul-marinho); }
.turma-md-row .turnos { font-size: 11px; color: var(--text-muted); margin-top: 1px; }
.turma-md-sem-docente { font-size: 11.5px; color: var(--laranja); white-space: nowrap; }
.turma-md-professoras { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; margin-bottom: 4px; }
.turma-md-vincular { display: inline-flex; align-items: center; gap: 5px; }
.turma-md-vincular select { font-size: 11px; padding: 4px 6px; }
.turma-md-vincular .btn-icon { width: 24px; height: 24px; border-radius: 6px; }
.turma-md-refeicao { white-space: nowrap; }
.turma-md-chevron { color: var(--text-muted); transition: transform .15s; }
.turma-md-row.aberta .turma-md-chevron { transform: rotate(90deg); }
.turma-md-detalhe { background: var(--bg); }
.turma-md-detalhe td { padding: 14px 20px; cursor: default; }
.turma-md-alunos-lista { display: flex; flex-direction: column; gap: 4px; }
.turma-aluno-item { display: flex; align-items: center; gap: 10px; padding: 7px 4px; border-bottom: 1px solid var(--border); font-size: 13px; }
.turma-aluno-item:last-child { border-bottom: none; }

/* Configurações Ano Letivo (planilha única) — turma, mensalidade, materiais e
   professores numa tabela só, uma linha por turma, arrastável pra reordenar. */
.tabela-ano-letivo td { vertical-align: middle; }
.tabela-ano-letivo .campo-moeda { width: 110px; }
.anoletivo-drag { cursor: grab; color: var(--text-muted); text-align: center; font-size: 13px; opacity: .6; width: 18px; }
.linha-anoletivo:hover { background: var(--bg); }

/* "Ano letivo" (Configurações → Turmas) usa .pill-select dentro de .filters — sem este
   reforço, ".filters select" (mesma especificidade, vem depois no arquivo) reaplicaria o
   visual de pill solta no <select>, duplicando o contorno dentro do .pill-select. */
.filters .pill-select select {
  width: auto; padding: 0; border: none; border-radius: 0; background: transparent;
  font-family: var(--font-mono); font-weight: 600; font-size: 13px; color: var(--azul-marinho); cursor: pointer;
}


/* ============ MODAL: SITUAÇÃO (aluno/colaborador) ============ */
.modal-overlay { display: none; position: fixed; inset: 0; background: rgba(20,18,15,0.5); z-index: 1000; align-items: flex-start; justify-content: center; padding: 40px 20px; overflow-y: auto; }
.modal-overlay.open { display: flex; }
.modal-card { background: var(--card-bg); border-radius: var(--radius); max-width: 840px; width: 100%; box-shadow: 0 24px 60px rgba(0,0,0,0.28); overflow: hidden; }
.modal-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 20px 24px; border-bottom: 1px solid var(--border); position: sticky; top: 0; background: var(--card-bg); }
.modal-head h3 { font-family: var(--font-display); font-size: 17px; font-weight: 600; color: var(--azul-marinho); margin-bottom: 2px; }
.modal-body { padding: 24px; max-height: 72vh; overflow-y: auto; }
.modal-body h4 { font-family: var(--font-display); font-size: 14px; font-weight: 600; color: var(--azul-marinho); margin: 22px 0 10px; }
.modal-body h4:first-child { margin-top: 0; }
.modal-body table { margin-bottom: 4px; }
.modal-body .cards { grid-template-columns: repeat(2, 1fr); }
.modal-body .cards-sm { grid-template-columns: repeat(3, 1fr); }
.modal-body .card .valor { font-size: 19px; }
.tag-btn { border: none; cursor: pointer; font: inherit; }
/* Linha discreta abaixo dos cards de Situação financeira (Alunos) somando os 3 valores —
   não é mais um dado novo (é só Pago+Vencido+A Pagar), então fica pequena e sem destaque,
   diferente dos cards acima. */
.cards-soma-total { text-align: left; font-size: 11px; color: var(--text-muted); margin: -6px 0 16px; font-variant-numeric: tabular-nums; }

/* ============ agrupamento compacto de formulário (Lançamentos > Novo lançamento) ============ */
.linha3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 14px; }
.linha2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.linha4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.linha5 { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; }
.valor-estreito { max-width: 160px; }
.rotulo-grupo { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text-muted); margin: 18px 0 8px; }
.rotulo-grupo:first-child { margin-top: 0; }
@media (max-width: 640px) {
  .linha3, .linha2, .linha4, .linha5 { grid-template-columns: 1fr; }
  .valor-estreito { max-width: none; }
}

/* ============ LINHA COMPACTA (Estoque > lote de compras) ============ */
/* Estoque > Registrar compra ou venda — sinaliza por cor (mesmo padrão entrada/saída do
   resto do sistema) qual tipo está selecionado: compra = teal, venda = --saida-cor. */
.mv-tipo-select.mv-tipo-compra { border-color: var(--teal); background: rgba(31,156,140,0.1); color: var(--teal); font-weight: 700; }
.mv-tipo-select.mv-tipo-venda { border-color: var(--saida-cor); background: rgba(196,30,104,0.08); color: var(--saida-cor); font-weight: 700; }

/* O painel inteiro (borda, título, botões) segue o tom do tipo selecionado — mesma cor de
   entrada/saída do resto do sistema, só que aplicada ao modal todo, não só ao select.
   border-width explícito (não só border-color) porque #id.classe já teria especificidade
   suficiente pra vencer .panel sozinho, mas deixar a borda mais grossa também torna a
   troca óbvia mesmo em telas onde a diferença de cor sozinha passaria despercebida. */
#form-mov-novo.tema-compra { border-width: 2px; border-color: var(--teal); }
#form-mov-novo.tema-venda { border-width: 2px; border-color: var(--saida-cor); }
#form-mov-novo.tema-compra .form-panel-head { background: rgba(31,156,140,0.08); margin: -24px -24px 16px; padding: 16px 24px; border-radius: var(--radius) var(--radius) 0 0; }
#form-mov-novo.tema-venda .form-panel-head { background: rgba(196,30,104,0.06); margin: -24px -24px 16px; padding: 16px 24px; border-radius: var(--radius) var(--radius) 0 0; }
#form-mov-novo.tema-compra .form-panel-head h3 { color: var(--teal); }
#form-mov-novo.tema-venda .form-panel-head h3 { color: var(--saida-cor); }
#form-mov-novo.tema-compra .btn-primary, #form-mov-novo.tema-compra .btn-chip { background: var(--teal); border-color: var(--teal); color: white; }
#form-mov-novo.tema-venda .btn-primary, #form-mov-novo.tema-venda .btn-chip { background: var(--saida-cor); border-color: var(--saida-cor); color: white; }

.linha-lote { display: grid; grid-template-columns: 1.1fr 1.3fr 0.7fr 0.5fr 0.8fr auto; gap: 6px; align-items: end; margin-bottom: 8px; }
.linha-lote.linha-lote-orcamento { grid-template-columns: 0.9fr 1.4fr 0.8fr 0.8fr auto; }
.linha-lote .field { margin-bottom: 0; min-width: 0; }
.linha-lote .field label { font-size: 9.5px; margin-bottom: 3px; }
/* Rótulo (Categoria/Produto/Tamanho/Qtd./Valor) só aparece na primeira linha do lote —
   repetir em cada linha adicionada era poluição visual, já que as colunas se alinham
   pelo grid mesmo sem o texto. */
.linha-lote:not(.linha-lote-primeira) .field label { display: none; }
.linha-lote input { padding: 7px 6px; font-size: 12px; width: 100%; box-sizing: border-box; }
.linha-lote .btn-remover-linha {
  width: 30px; height: 30px; padding: 0; border: 1px solid var(--border); border-radius: 7px;
  background: var(--card-bg); color: var(--text-muted); cursor: pointer; flex-shrink: 0;
}
.linha-lote .btn-remover-linha:hover { background: #F3E8EC; color: var(--magenta); border-color: transparent; }
.lote-total-linha { font-size: 13px; color: var(--text-muted); }
.lote-total-linha strong { color: var(--text); font-variant-numeric: tabular-nums; }
@media (max-width: 560px) {
  .linha-lote { grid-template-columns: 1fr 1fr; }
}

/* ============ TELA DE LOGIN/INSTALAÇÃO (sem sidebar) ============ */
.tela-login { min-height: 100vh; width: 100%; display: flex; align-items: center; justify-content: center; padding: 20px; position: relative; }
.card-login { width: 100%; max-width: 360px; background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius); padding: 32px 28px; box-shadow: 0 8px 24px rgba(37,75,119,0.08); }
.card-login h1 {
  font-family: var(--font-display); font-size: 1.3rem; margin: 0 0 6px;
  background: var(--brand-gradient); -webkit-background-clip: text; background-clip: text;
  color: transparent; -webkit-text-fill-color: transparent;
}
.card-login p.sub { color: var(--text-muted); font-size: 0.85rem; margin: 0 0 22px; }
.card-login form { display: flex; flex-direction: column; }
.card-login form label:not(:first-child) { margin-top: 14px; }
.card-login button[type="submit"] { margin-top: 22px; }
.tela-login .theme-toggle-btn { position: absolute; top: 22px; right: 22px; }

/* ============ TOOLTIP DE AJUDA (ex.: "por que não posso editar isso?") ============ */
.info-tip {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  width: 15px; height: 15px; border-radius: 50%; background: var(--border); color: var(--text-muted);
  font-size: 10px; font-weight: 700; font-style: normal; text-transform: none; cursor: help;
  margin-left: 6px; vertical-align: middle;
}
.info-tip:hover, .info-tip:focus { background: var(--azul-marinho); color: white; }
.info-tip:hover::after, .info-tip:focus::after {
  content: attr(data-tip); position: absolute; left: 50%; bottom: 135%; transform: translateX(-50%);
  width: 230px; background: var(--azul-marinho-escuro); color: #fff; font-size: 11.5px; font-weight: 500;
  text-transform: none; letter-spacing: normal; line-height: 1.45; padding: 9px 11px; border-radius: 8px;
  box-shadow: 0 10px 24px rgba(0,0,0,0.2); z-index: 30;
}
.info-tip:hover::before, .info-tip:focus::before {
  content: ''; position: absolute; left: 50%; bottom: 122%; transform: translateX(-50%);
  border: 5px solid transparent; border-top-color: var(--azul-marinho-escuro);
}

/* ============ ALTERNADOR DE TEMA CLARO/ESCURO ============ */
.theme-toggle-btn {
  width: 34px; height: 34px; padding: 0; border-radius: 50%; border: 1px solid var(--border);
  background: var(--card-bg); color: var(--text); font-size: 15px; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; line-height: 1;
}
.theme-toggle-btn:hover { background: var(--bg); }
