/* =============================================================
   app-modern.css  —  Reskin visual do LicitaNexus (aditivo)
   -------------------------------------------------------------
   Camada de MODERNIZAÇÃO. Carrega POR ÚLTIMO no <head>, depois do
   Bootstrap, do app.css e do <style> inline do base.html, para
   vencer a cascata sem !important.

   É 100% cosmético: cores, bordas, raios, sombras, tipografia e
   estilo de componentes. NÃO mexe em posição, grid ou layout.
   Para reverter: remova a linha <link> do base.html. Nada mais.
   ============================================================= */

/* ---------- 1. TOKENS (claro) ---------- */
:root{
  /* neutros com leve viés azul (slate) — "escolhidos", não cinza puro */
  --main-bg:        #eef1f5;
  --surface:        #ffffff;
  --surface-2:      #f7f9fc;
  --surface-3:      #eef2f7;
  --border-color:   #e4e9f0;
  --border-strong:  #d4dbe6;
  --text-heading:   #1e293b;
  --text-body:      #3d4757;
  --text-muted:     #6b7688;
  --text-faint:     #94a1b3;

  --primary:        #0d6efd;
  --primary-hover:  #0b5ed7;
  --primary-soft:   #e8f0fe;

  /* semânticas (semáforo) — separadas do azul de marca */
  --ok:#15803d;   --ok-bg:#dcfce7;   --ok-line:#22c55e;
  --warn:#ca8a04; --warn-bg:#fef9c3; --warn-line:#eab308;   /* amarelo vivo p/ alertas (era laranja) */
  --crit:#b91c1c; --crit-bg:#fee2e2; --crit-line:#ef4444;

  --radius:        12px;
  --radius-sm:     9px;
  --shadow-sm:     0 1px 2px rgba(16,24,40,.05);
  --shadow:        0 1px 2px rgba(16,24,40,.05), 0 1px 3px rgba(16,24,40,.08);
  --shadow-lg:     0 10px 30px rgba(16,24,40,.14);

  /* --- mapeia tudo nas variáveis do Bootstrap 5.3 --- */
  --bs-primary:#0d6efd; --bs-primary-rgb:13,110,253;
  --bs-body-bg: var(--main-bg);
  --bs-body-color: var(--text-body);
  --bs-emphasis-color: var(--text-heading);
  --bs-secondary-color: var(--text-muted);
  --bs-tertiary-color: var(--text-faint);
  --bs-border-color: var(--border-color);
  --bs-border-radius: var(--radius-sm);
  --bs-border-radius-lg: var(--radius);
  --bs-border-radius-sm: 7px;
  --bs-box-shadow: var(--shadow);
  --bs-box-shadow-sm: var(--shadow-sm);
  --bs-link-color:#0b5ed7; --bs-link-color-rgb:11,94,215;
  --bs-link-hover-color:#0a4fbb;
  --bs-heading-color: var(--text-heading);
}

/* ---------- 2. TOKENS (escuro) — dá o mesmo cuidado ao 2º tema ---------- */
[data-theme="dark"], [data-bs-theme="dark"]{
  --main-bg:        #12151b;
  --surface:        #1c212a;
  --surface-2:      #171b22;
  --surface-3:      #232935;
  --border-color:   #2c333f;
  --border-strong:  #39424f;
  --text-heading:   #f1f5f9;
  --text-body:      #c4cdda;
  --text-muted:     #94a1b3;
  --text-faint:     #6c7889;
  --primary-soft:   #16233b;
  --ok-bg:#123020;  --warn-bg:#3a2f0a;  --crit-bg:#301616;
  --warn:#facc15; --warn-line:#facc15;   /* amarelo vivo no dark (melhor contraste) */
  --shadow-sm:0 1px 2px rgba(0,0,0,.4);
  --shadow:0 1px 2px rgba(0,0,0,.4);
  --shadow-lg:0 12px 34px rgba(0,0,0,.5);

  --bs-body-bg: var(--main-bg);
  --bs-body-color: var(--text-body);
  --bs-emphasis-color: var(--text-heading);
  --bs-border-color: var(--border-color);
  --bs-secondary-bg: var(--surface-2);
  --bs-tertiary-bg: var(--surface-3);
}

/* ---------- 3. BASE ---------- */
body{
  background: var(--main-bg);
  color: var(--text-body);
  -webkit-font-smoothing:antialiased;
  letter-spacing:-.1px;
}
h1,h2,h3,h4,h5{ color: var(--text-heading); letter-spacing:-.3px; }
#main-content, .content-wrapper{ background: var(--main-bg); }
a{ text-decoration:none; }

/* ---------- 4. CARDS ---------- */
.card{
  background: var(--surface);
  border:1px solid var(--border-color);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
}
.card .card-header{
  background: transparent;
  border-bottom:1px solid var(--border-color);
  font-weight:600; color:var(--text-heading);
}
.card .card-footer{ background:transparent; border-top:1px solid var(--border-color); }

/* KPI / stat cards já existentes ganham a pele nova */
.stat-card, .clickable-kpi{
  border-radius: var(--radius) !important;
  box-shadow: var(--shadow);
  border:1px solid var(--border-color);
  transition: transform .12s ease;
}
.clickable-kpi:hover{ transform: translateY(-1px); }
.kpi-icon-box{ border-radius: var(--radius-sm) !important; }
.kpi-label{ color: var(--text-muted); letter-spacing:.01em; }

/* ---------- 5. BOTÕES — sistema único, padronizado em TODAS as telas ----------
   21/10/2026: alinhado ao botão dos cards (btn-acao, "Proposta C", escolha do usuário): claro com borda,
   ícone na cor primária, hover = borda azul + fundo azul-claro, sem sombra. Só a ação PRINCIPAL de cada
   tela/janela fica azul cheia (btn-primary); excluir/remover = texto vermelho no mesmo formato. */
.btn{
  --btn-radius: 9px;
  display:inline-flex; align-items:center; justify-content:center; gap:.5rem;
  border-radius: var(--btn-radius);
  border:1px solid transparent;
  font-weight:500; line-height:1.3; text-decoration:none;
  padding:.5rem .9rem; font-size:.875rem;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease, transform .04s ease;
}
.btn:focus-visible{ outline:none; box-shadow:0 0 0 3px var(--primary-soft); }
.btn:active{ transform: translateY(1px); }
.btn > i, .btn > .fa, .btn > svg{ font-size:.95em; line-height:1; }

/* tamanhos */
.btn-sm, .btn-action-sm{ --btn-radius:8px; padding:.38rem .7rem; font-size:.8rem; }
.btn-lg{ --btn-radius:10px; padding:.68rem 1.25rem; font-size:1rem; }
.btn-block{ display:flex; width:100%; }

/* PRINCIPAL — uma por tela/janela (Salvar, Buscar, Criar) */
.btn-primary, .btn-success, .btn-nexus-primary{ background:var(--primary); border-color:var(--primary); color:#fff; box-shadow:none; }
.btn-primary:hover, .btn-primary:focus, .btn-success:hover, .btn-success:focus,
.btn-nexus-primary:hover, .btn-nexus-primary:focus{ background:var(--primary-hover); border-color:var(--primary-hover); color:#fff; }
.btn-primary > i, .btn-success > i, .btn-nexus-primary > i{ color:inherit; }

/* NEUTRAS — todas as variações claras/contorno viram UM só visual (o do btn-acao) */
.btn-light, .btn-white, .btn-secondary, .btn-system-light, .btn-modal, .btn-tool, .btn-dark, .btn-info,
.btn-outline-primary, .btn-outline-secondary, .btn-outline-dark, .btn-outline-info, .btn-outline-success,
.btn-action-neutral, .btn-action-ghost{
  background:var(--surface); border-color:var(--border-strong); color:var(--text-heading); box-shadow:none;
}
:is(.btn-light, .btn-white, .btn-secondary, .btn-system-light, .btn-modal, .btn-tool, .btn-dark, .btn-info,
    .btn-outline-primary, .btn-outline-secondary, .btn-outline-dark, .btn-outline-info, .btn-outline-success,
    .btn-action-neutral, .btn-action-ghost):is(:hover, :focus-visible, .show){
  background:var(--primary-soft); border-color:var(--primary); color:var(--text-heading);
}
:is(.btn-light, .btn-white, .btn-secondary, .btn-system-light, .btn-modal, .btn-tool, .btn-dark, .btn-info,
    .btn-outline-primary, .btn-outline-secondary, .btn-outline-dark, .btn-outline-info, .btn-outline-success,
    .btn-action-neutral, .btn-action-ghost) > i:first-child{ color:var(--primary); }

/* PERIGO — excluir/remover: mesmo formato, texto e ícone vermelhos */
.btn-danger, .btn-outline-danger, .btn-action-danger{ background:var(--surface); border-color:var(--border-strong); color:var(--crit); box-shadow:none; }
:is(.btn-danger, .btn-outline-danger, .btn-action-danger):is(:hover, :focus-visible){ background:var(--crit-bg); border-color:var(--crit); color:var(--crit); }
:is(.btn-danger, .btn-outline-danger, .btn-action-danger) > i{ color:inherit; }

/* alternância (grupo de botões com rádio/checkbox, .active) */
.btn-check:checked + .btn, .btn-check:active + .btn, .btn-group > .btn.active{
  background:var(--primary-soft); border-color:var(--primary); color:var(--primary-hover);
}

/* Enfeites que as telas antigas punham direto no botão (pílula, sombra, negrito, margem do ícone) não valem
   mais: o padrão é um só. O espaço entre ícone e texto é o gap do botão. */
.btn.rounded-pill{ border-radius:var(--btn-radius) !important; }
.btn.shadow-sm, .btn.shadow, .btn.shadow-lg{ box-shadow:none !important; }
.btn.fw-bold, .btn.fw-semibold, .btn.fw-bolder{ font-weight:500 !important; }
.btn:not(.d-block):not(.d-inline-block) > i:first-child:is(.me-1, .me-2, .me-3){ margin-right:0 !important; }

/* aviso (raro) */
.btn-warning{ background:var(--warn-line); border-color:var(--warn-line); color:#3a2600; }
.btn-warning:hover{ filter:brightness(.96); color:#3a2600; }

/* link */
.btn-link{ color:var(--primary); text-decoration:none; box-shadow:none; }
.btn-link:hover{ color:var(--primary-hover); text-decoration:underline; }

/* estados */
.btn:disabled, .btn.disabled{ opacity:.55; box-shadow:none; }
.btn-group > .btn{ box-shadow:none; }
.btn-close:focus-visible{ box-shadow:0 0 0 3px var(--primary-soft); outline:none; }

/* ---------- 6. FORMULÁRIOS ---------- */
.form-control, .form-select{
  border-radius: var(--radius-sm);
  border-color: var(--border-strong);
  background: var(--surface-2);
  color: var(--text-heading);
  padding:.55rem .8rem;
}
.form-control::placeholder{ color: var(--text-faint); }
.form-control:focus, .form-select:focus{
  border-color: var(--primary);
  box-shadow: 0 0 0 3px var(--primary-soft);
  background: var(--surface);
}
.input-group-text{ background: var(--surface-3); border-color: var(--border-strong); color: var(--text-muted); border-radius: var(--radius-sm); }
.form-label{ font-weight:600; color: var(--text-muted); font-size:.82rem; }
/* selects nativos: chevron consistente e tema-aware. O controle fica moderno;
   o popup aberto ainda é do sistema (só o dropdown customizado pesquisável troca isso). */
.form-select{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%236b7688' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right .7rem center; background-size:14px; padding-right:2.2rem;
}
[data-theme="dark"] .form-select, [data-bs-theme="dark"] .form-select{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%2394a1b3' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");
}

/* ---------- 7. TABELAS ---------- */
.table{ --bs-table-bg:transparent; color: var(--text-body); }
.table > :not(caption) > * > *{ border-bottom-color: var(--border-color); padding:.7rem .8rem; }
.table > thead th{
  text-transform:uppercase; font-size:.68rem; letter-spacing:.06em;
  color: var(--text-faint); font-weight:700; border-bottom:1px solid var(--border-color);
}
.table-hover > tbody > tr:hover > *{ background: var(--surface-2); }

/* ---------- 8. BADGES → PILLS c/ semáforo ---------- */
.badge{ font-weight:600; border-radius:20px; padding:.35em .7em; letter-spacing:.01em; }
.badge.bg-success, .badge.text-bg-success{ background: var(--ok-bg) !important; color: var(--ok) !important; }
.badge.bg-warning, .badge.text-bg-warning{ background: var(--warn-bg) !important; color: var(--warn) !important; }
.badge.bg-danger,  .badge.text-bg-danger { background: var(--crit-bg) !important; color: var(--crit) !important; }
.badge.bg-primary, .badge.text-bg-primary{ background: var(--primary-soft) !important; color: var(--primary-hover) !important; }
.badge.bg-secondary, .badge.text-bg-secondary{ background: var(--surface-3) !important; color: var(--text-muted) !important; }

/* pílula reutilizável com bolinha (novo primitivo do wireframe) */
.pill{ display:inline-flex; align-items:center; gap:6px; font-size:.72rem; font-weight:700; padding:3px 9px; border-radius:20px; }
.pill .dot{ width:7px; height:7px; border-radius:50%; }
.pill.ok{ background:var(--ok-bg); color:var(--ok); } .pill.ok .dot{ background:var(--ok-line); }
.pill.warn{ background:var(--warn-bg); color:var(--warn); } .pill.warn .dot{ background:var(--warn-line); }
.pill.crit{ background:var(--crit-bg); color:var(--crit); } .pill.crit .dot{ background:var(--crit-line); }
.pill.accent{ background:var(--primary-soft); color:var(--primary-hover); } .pill.accent .dot{ background:var(--primary); }
.pill.neutral{ background:var(--surface-3); color:var(--text-muted); } .pill.neutral .dot{ background:var(--text-faint); }

/* ---------- 9. DROPDOWNS ---------- */
.dropdown-menu{
  border-radius: var(--radius); border:1px solid var(--border-color);
  box-shadow: var(--shadow-lg); background: var(--surface); padding:.4rem;
}
.dropdown-item{ border-radius: 7px; color: var(--text-body); padding:.5rem .7rem; }
.dropdown-item:hover{ background: var(--surface-3); color: var(--primary-hover); }
.dropdown-item.active, .dropdown-item:active{ background: var(--primary); color:#fff; }
.dropdown-divider{ border-color: var(--border-color); }

/* ---------- 9b. MODAIS — sistema único, padronizado em TODAS as telas ---------- */
.modal-content{
  border-radius:16px; border:1px solid var(--border-color);
  box-shadow:var(--shadow-lg); background:var(--surface); overflow:hidden;
}
.modal-header{
  padding:1rem 1.25rem; border-bottom:1px solid var(--border-color); background:var(--surface);
}
.modal-title{ font-weight:700; color:var(--text-heading); letter-spacing:-.2px; }
.modal-body{ padding:1.25rem; color:var(--text-body); }
.modal-footer{ padding:.85rem 1.25rem; border-top:1px solid var(--border-color); background:var(--surface); gap:.5rem; }
.modal-footer > *{ margin:0; }              /* espaçamento agora vem do gap, sem margens irregulares */
.modal-backdrop.show{ opacity:.5; }  /* sem backdrop-filter: blur — evitava engasgo ao abrir modal */
/* utilitários bg-* usados dentro de modais passam a respeitar os 2 temas */
.modal .bg-light{ background:var(--surface-2) !important; color:var(--text-body); }
.modal .bg-white{ background:var(--surface) !important; }
.modal thead.bg-white th, .modal thead.bg-white{ background:var(--surface-2) !important; color:var(--text-muted); }
.modal tfoot.bg-light, .modal tfoot.bg-light td{ background:var(--surface-2) !important; }
.modal .border-secondary{ border-color:var(--border-strong) !important; }
.modal .text-primary{ color:var(--primary) !important; }
/* modal-glass mantém o efeito vidro, padronizado nos 2 temas */
/* Sem backdrop-filter (09/09/2026): o fundo abaixo é 94% opaco, então o desfoque não
   aparecia — mas custava caro (medido no modal do Suporte: 43fps com blur x 61fps sem,
   travadas de 117ms). Um elemento com backdrop-filter também vira bloco de contenção e
   joga dropdowns `position:fixed` para fora do lugar (foi o bug do modal do mural). */
.modal-glass .modal-content{ background:rgba(255,255,255,.94); }
[data-theme="dark"] .modal-glass .modal-content,
[data-bs-theme="dark"] .modal-glass .modal-content{ background:rgba(28,33,42,.94); }

/* ---------- 9c. OFFCANVAS / TOASTS ---------- */
.offcanvas{ background:var(--surface); color:var(--text-body); border-color:var(--border-color); }
.offcanvas-header{ border-bottom:1px solid var(--border-color); }
.toast{ border-radius:var(--radius); border:1px solid var(--border-color); box-shadow:var(--shadow-lg); background:var(--surface); }
.toast-header{ background:transparent; border-bottom:1px solid var(--border-color); color:var(--text-heading); }

/* ---------- 10. NAV / TABS ---------- */
.nav-tabs{ border-bottom:1px solid var(--border-color); }
.nav-tabs .nav-link{ border:0; color: var(--text-muted); font-weight:600; border-bottom:2px solid transparent; }
.nav-tabs .nav-link:hover{ color: var(--text-heading); border-color:transparent; }
.nav-tabs .nav-link.active{ color: var(--primary); background:transparent; border-bottom-color: var(--primary); }
.nav-pills .nav-link{ border-radius: var(--radius-sm); color: var(--text-muted); font-weight:600; }
.nav-pills .nav-link.active{ background: var(--primary); color:#fff; }

/* ---------- 11. TOPBAR (polish leve, sem re-layout) ---------- */
#topbar{
  background: var(--surface);
  border-bottom:1px solid var(--border-color);
  box-shadow: var(--shadow-sm);
}
.main-header, .page-header-bar{ color: var(--text-heading); }

/* ---------- 12. ALERTS / LIST GROUPS ---------- */
.alert{ border-radius: var(--radius); border:1px solid transparent; }
.alert-success{ background: var(--ok-bg); color: var(--ok); border-color: transparent; }
.alert-warning{ background: var(--warn-bg); color: var(--warn); }
.alert-danger { background: var(--crit-bg); color: var(--crit); }
.alert-info, .alert-primary{ background: var(--primary-soft); color: var(--primary-hover); }
.list-group-item{ background: var(--surface); border-color: var(--border-color); color: var(--text-body); }

/* ---------- 13. COMPONENTES NEXUS já existentes ---------- */
.nexus-dd-btn, .nexus-search-pill, .nexus-clear-btn{ border-radius: var(--radius-sm); }
.nexus-dd-menu{ border-radius: var(--radius); box-shadow: var(--shadow-lg); }
/* Cabeçalho de grupo dentro do dropdown (ex.: "Agendados desta empresa") */
.nexus-dd-group{ padding:.5rem .85rem .2rem; font-size:.68rem; font-weight:800; text-transform:uppercase;
  letter-spacing:.5px; color:var(--text-muted); pointer-events:none; }
.nexus-dd-group + li .nexus-dd-item{ padding-top:.3rem; }
.nexus-filter-bar{ border-radius: var(--radius); box-shadow: var(--shadow); border:1px solid var(--border-color); }

/* ---------- 13b. NEXUS-SELECT — substitui os <select> nativos (regra: nada nativo) ---------- */
.nexus-select{ position:relative; display:block; width:100%; }
select.nexus-native-hidden{ display:none !important; }      /* select fica no lugar, escondido, mas ativo (value + submit) */
.nexus-select-btn{
  display:flex; align-items:center; gap:.5rem; width:100%;
  background:var(--surface-2); border:1px solid var(--border-strong); color:var(--text-heading);
  border-radius:var(--radius-sm); padding:.55rem .8rem; font-weight:500; font-size:.95rem;
  line-height:1.25; text-align:left; transition:border-color .12s ease, box-shadow .12s ease;
}
.nexus-select-btn:hover{ border-color:var(--primary); }
.nexus-select.open .nexus-select-btn{ border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-soft); }
.nexus-select-label{ flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.nexus-select-label.nexus-ph{ color:var(--text-faint); font-weight:400; }
.nexus-select-caret{ color:var(--text-muted); font-size:.68rem; }
.nexus-select-menu{
  position:absolute; z-index:1085; top:calc(100% + 4px); left:0; min-width:max(100%, 180px);
  background:var(--surface); border:1px solid var(--border-color); border-radius:var(--radius);
  box-shadow:var(--shadow-lg); padding:.35rem; display:none; max-height:280px; overflow:auto;
}
.nexus-select.open .nexus-select-menu{ display:block; }
.nexus-select.open-up .nexus-select-menu{ top:auto; bottom:calc(100% + 4px); }
.nexus-select-search{ padding:.1rem .1rem .35rem; }
.nexus-select-search input{
  width:100%; border:1px solid var(--border-strong); border-radius:7px; padding:.4rem .6rem;
  font-size:.85rem; background:var(--surface-2); color:var(--text-heading);
}
.nexus-select-search input:focus{ outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-soft); }
.nexus-select-item{
  display:block; width:100%; text-align:left; border:0; background:transparent; color:var(--text-body);
  padding:.5rem .6rem; border-radius:7px; font-size:.9rem; cursor:pointer;
}
.nexus-select-item:hover{ background:var(--surface-3); color:var(--primary-hover); }
.nexus-select-item.sel{ background:var(--primary-soft); color:var(--primary-hover); font-weight:600; }
.nexus-select-item:disabled{ opacity:.5; cursor:default; }
.nexus-select-sm .nexus-select-btn{ padding:.35rem .6rem; font-size:.8rem; }

/* ---------- 13c. ANTI-FLICKER da sidebar (estado aplicado antes do paint) ---------- */
body.nav-preload .sidebar,
body.nav-preload .sidebar *,
body.nav-preload #main-content,
body.nav-preload .content-wrapper{ transition:none !important; }

/* ---------- 14. MISC ---------- */
.border-primary-custom{ border-left:4px solid var(--primary) !important; }
hr{ border-color: var(--border-color); opacity:1; }
::selection{ background: var(--primary-soft); }
.text-muted{ color: var(--text-muted) !important; }
.shadow-sm{ box-shadow: var(--shadow-sm) !important; }
.shadow{ box-shadow: var(--shadow) !important; }
.empty-state{ color: var(--text-muted); }

/* =============================================================
   15. DARK MODE — correções de componentes com cor FIXA (páginas legado)
   -------------------------------------------------------------
   Várias telas (dashboard, editais, boletins, CRM, agenda, ferramentas)
   têm CSS próprio com #fff / texto escuro cravado, que ignora os tokens.
   Aqui reancoramos esses componentes nos tokens só no tema escuro.
   Seletores medidos com auditoria automática das telas em dark.
   ============================================================= */

/* --- 15a. Títulos e textos escuros → claros --- */
[data-theme="dark"] h1, [data-theme="dark"] h2, [data-theme="dark"] h3,
[data-theme="dark"] h4, [data-theme="dark"] h5, [data-theme="dark"] h6,
[data-theme="dark"] .h1, [data-theme="dark"] .h2, [data-theme="dark"] .h3,
[data-theme="dark"] .h4, [data-theme="dark"] .h5{
  color: var(--text-heading) !important;
  -webkit-text-fill-color: var(--text-heading);
}
[data-theme="dark"] .text-dark{
  color: var(--text-heading) !important;
  -webkit-text-fill-color: var(--text-heading) !important;
}
[data-theme="dark"] .text-secondary, [data-theme="dark"] .text-muted{ color: var(--text-muted) !important; }
[data-theme="dark"] .text-body, [data-theme="dark"] .text-black, [data-theme="dark"] .text-black-50{ color: var(--text-body) !important; }

/* --- 15b. Números de KPI / stat com cor fixa escura --- */
[data-theme="dark"] .kpi-value, [data-theme="dark"] .cat-title, [data-theme="dark"] .hub-title,
[data-theme="dark"] .stat-value, [data-theme="dark"] .stat-item .stat-value,
[data-theme="dark"] .stat-value.fs-5, [data-theme="dark"] .searchable-content{
  color: var(--text-heading) !important; -webkit-text-fill-color: var(--text-heading) !important;
}
[data-theme="dark"] .tripod-card-title{ color: var(--text-muted) !important; border-bottom-color: var(--border-color) !important; }
[data-theme="dark"] .global-stats-card .stat-value{ color: var(--primary) !important; -webkit-text-fill-color: var(--primary) !important; }

/* --- 15c. Caixas brancas → superfície escura --- */
/* componentes Nexus compartilhados (barra de filtro/busca em várias telas) */
[data-theme="dark"] .nexus-filter-bar, [data-theme="dark"] .nexus-search-pill,
[data-theme="dark"] .fbar-wrap, [data-theme="dark"] .tag-input-container,
[data-theme="dark"] .geo-panel, [data-theme="dark"] .date-card,
[data-theme="dark"] .timeline-content, [data-theme="dark"] .edital-info-box,
[data-theme="dark"] .info-grid, [data-theme="dark"] .kanban-card,
[data-theme="dark"] .searchable-select-list, [data-theme="dark"] .wiz-card-option,
[data-theme="dark"] .stat-item, [data-theme="dark"] .category-card{
  background: var(--surface) !important;
  border-color: var(--border-color) !important;
  color: var(--text-body);
}
[data-theme="dark"] .info-grid, [data-theme="dark"] .fbar-wrap,
[data-theme="dark"] .stat-item{ background: var(--surface-2) !important; }

/* botões/pílulas claras (mantêm hover) */
[data-theme="dark"] .nexus-dd-btn, [data-theme="dark"] .custom-dd-btn,
[data-theme="dark"] .pill-btn, [data-theme="dark"] .status-pill,
[data-theme="dark"] .pcheck-text,
[data-theme="dark"] .glass-input{
  background: var(--surface-2); border-color: var(--border-strong); color: var(--text-heading);
}
[data-theme="dark"] .nexus-dd-btn:hover, [data-theme="dark"] .custom-dd-btn:hover,
[data-theme="dark"] .pill-btn:hover, [data-theme="dark"] .status-pill:hover{ background: var(--surface-3); border-color: var(--border-strong); color: var(--text-heading); }
[data-theme="dark"] .glass-input:focus{ background: var(--surface) !important; border-color: var(--primary); }
[data-theme="dark"] .glass-input::placeholder{ color: var(--text-faint); }
[data-theme="dark"] .kanban-card:hover{ border-color: var(--primary); }

/* --- 15d. FullCalendar (Agenda) — tema escuro via variáveis --- */
[data-theme="dark"] .fc{
  --fc-page-bg-color: var(--surface);
  --fc-neutral-bg-color: var(--surface-2);
  --fc-border-color: var(--border-color);
  --fc-today-bg-color: rgba(13,110,253,.14);
  --fc-list-event-hover-bg-color: var(--surface-2);
  --fc-neutral-text-color: var(--text-muted);
  color: var(--text-body);
}
[data-theme="dark"] .fc .fc-col-header-cell,
[data-theme="dark"] .fc .fc-daygrid-day,
[data-theme="dark"] .fc .fc-scrollgrid,
[data-theme="dark"] .fc-theme-standard td, [data-theme="dark"] .fc-theme-standard th{
  background: var(--surface); border-color: var(--border-color);
}
[data-theme="dark"] .fc-col-header-cell-cushion,
[data-theme="dark"] .fc-daygrid-day-number,
[data-theme="dark"] .fc-toolbar-title,
[data-theme="dark"] .fc .fc-daygrid-day-top{ color: var(--text-body); }
[data-theme="dark"] .fc-day-today{ background: var(--fc-today-bg-color) !important; }

/* --- 15e. offcanvas com header/body claros de página --- */
[data-theme="dark"] .offcanvas .offcanvas-header, [data-theme="dark"] .offcanvas .offcanvas-body{
  background: var(--surface); color: var(--text-body);
}

/* --- 15f. remanescentes: utilitarios bg-white / bg-light / btn-light claros + celulas do calendario --- */
[data-theme="dark"] .bg-white{ background: var(--surface) !important; }
[data-theme="dark"] .bg-light{ background: var(--surface-2) !important; }
[data-theme="dark"] .fc .fc-daygrid-day, [data-theme="dark"] .fc td.fc-day,
[data-theme="dark"] .fc th.fc-day, [data-theme="dark"] .fc td.fc-timegrid-slot{
  background: var(--surface) !important;
}
[data-theme="dark"] .fc .fc-day-today{ background: rgba(13,110,253,.16) !important; }

/* ═══════════════════════════════════════════════════════════════════════
   16. DESIGN SYSTEM / KIT — componentes reaproveitáveis (fonte única)
   Macros em macros/ui.html consomem estas classes. NÃO reestilizar por página.
   ═══════════════════════════════════════════════════════════════════════ */

/* --- 16a. Trilha de navegação (breadcrumb) — substitui os "Voltar" fixos --- */
.nexus-breadcrumb{
  display:flex; align-items:center; flex-wrap:wrap; gap:2px;
  font-size:.8rem; margin-bottom:.9rem; color:var(--text-muted);
}
.nexus-breadcrumb .bc-item{
  display:inline-flex; align-items:center; gap:5px; padding:3px 8px; border-radius:7px;
  color:var(--text-muted); text-decoration:none; font-weight:600; line-height:1.2;
  transition:background .12s, color .12s; max-width:280px; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap;
}
a.bc-item:hover{ color:var(--primary-hover); background:var(--primary-soft); }
.nexus-breadcrumb .bc-home{ font-size:.9rem; padding:3px 7px; }
.nexus-breadcrumb .bc-current{ color:var(--text-heading); font-weight:700; cursor:default; }
.nexus-breadcrumb .bc-sep{ font-size:.6rem; color:var(--text-muted); opacity:.55; margin:0 1px; }

/* --- 16b. KPIs padronizados (ícone FontAwesome em badge) --- */
.nexus-kpis{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(158px,1fr));
  gap:12px; margin-bottom:20px;
}
.nexus-kpi{
  background:var(--surface); border:1px solid var(--border-color); border-radius:12px;
  padding:13px 15px; box-shadow:var(--shadow); min-width:0;
}
.nexus-kpi .k-top{ display:flex; align-items:center; gap:11px; }
.nexus-kpi .k-ic{
  width:36px; height:36px; border-radius:10px; display:grid; place-items:center;
  font-size:15px; flex:0 0 auto; background:var(--primary-soft); color:var(--primary-hover);
}
.nexus-kpi .k-val{
  font-size:23px; font-weight:800; color:var(--text-heading); letter-spacing:-.5px;
  line-height:1; font-variant-numeric:tabular-nums; min-width:0;
}
.nexus-kpi .k-val-money{ font-size:16.5px; line-height:1.15; }
.nexus-kpi .k-lbl{ font-size:12px; color:var(--text-muted); margin-top:9px; }
.nexus-kpi.ok    .k-ic{ background:var(--ok-bg);   color:var(--ok); }
.nexus-kpi.ok    .k-val{ color:var(--ok); }
.nexus-kpi.money .k-ic{ background:var(--ok-bg);   color:var(--ok); }
.nexus-kpi.info  .k-ic{ background:rgba(14,165,233,.14); color:#0284c7; }
.nexus-kpi.warn  .k-ic{ background:var(--warn-bg); color:var(--warn); } .nexus-kpi.warn .k-val{ color:var(--warn); }
.nexus-kpi.crit  .k-ic{ background:var(--crit-bg); color:var(--crit); } .nexus-kpi.crit .k-val{ color:var(--crit); }
/* KPI clicável (filtra o board/lista) + estado ativo */
.nexus-kpi.kpi-clickable{ cursor:pointer; transition:transform .12s, box-shadow .12s, border-color .12s; }
.nexus-kpi.kpi-clickable:hover{ transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:var(--primary); }
.nexus-kpi.kpi-active{ border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-soft); }
@media (max-width:640px){ .nexus-kpis{ grid-template-columns:repeat(2,1fr); } }

/* --- 16c. KANBAN reaproveitável (Central de Propostas + Quadro por empresa) --- */
.kb-board{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px; align-items:start; }
.kb-col{ background:var(--surface-2); border:1px solid var(--border-color); border-radius:14px;
         display:flex; flex-direction:column; min-width:0; }
.kb-col__head{ display:flex; flex-direction:column; gap:3px; padding:12px 14px 10px;
               border-bottom:1px solid var(--border-color); }
.kb-col__head-top{ display:flex; align-items:center; gap:9px; }
.kb-col__dot{ width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
.kb-col__name{ font-weight:800; font-size:13.5px; color:var(--text-heading); letter-spacing:-.2px; white-space:nowrap; }
.kb-col__count{ margin-left:auto; font-size:11px; font-weight:800; color:var(--text-muted);
                background:var(--surface-3); border-radius:20px; padding:1px 8px; min-width:22px; text-align:center; }
.kb-col__total{ font-size:12px; font-weight:800; color:var(--text-body);
                font-variant-numeric:tabular-nums; margin-left:18px; min-height:15px; }
.kb-col__body{ padding:11px; display:flex; flex-direction:column; gap:10px; min-height:120px;
               flex:1; transition:background .15s; border-radius:0 0 14px 14px; }
.kb-col__body.drag-over{ background:var(--primary-soft); outline:2px dashed var(--primary); outline-offset:-6px; }
.kb-col__empty{ text-align:center; color:var(--text-muted); font-size:12px; padding:16px 8px;
                border:1px dashed var(--border-color); border-radius:10px; }
.kb-col[data-status="em_elaboracao"] .kb-col__dot{ background:#3b82f6; }
.kb-col[data-status="elaborada"]     .kb-col__dot{ background:#0ea5e9; }
.kb-col[data-status="vencedora"]     .kb-col__dot{ background:var(--ok-line); }
.kb-col[data-status="perdida"]       .kb-col__dot{ background:#94a3b8; }

.kb-card{ position:relative; display:flex; gap:2px; background:var(--surface);
          border:1px solid var(--border-color); border-radius:11px; padding:0;
          box-shadow:var(--shadow-sm); cursor:grab; overflow:hidden;
          transition:box-shadow .15s, transform .05s; }
.kb-card:hover{ box-shadow:var(--shadow); }
.kb-card:active{ cursor:grabbing; }
.kb-card.dragging{ opacity:.45; transform:scale(.98); }
.kb-card::before{ content:''; position:absolute; left:0; top:0; bottom:0; width:4px; background:var(--border-color); }
.kb-card.st-em_elaboracao::before{ background:#3b82f6; }
.kb-card.st-elaborada::before{ background:#0ea5e9; }
.kb-card.st-vencedora::before{ background:var(--ok-line); }
.kb-card.st-perdida::before{ background:#94a3b8; }
.kb-card__grip{ display:flex; align-items:center; padding:0 3px 0 9px; color:var(--text-muted); font-size:11px; }
.kb-card__body{ flex:1; min-width:0; padding:11px 12px 10px 4px; }
.kb-card__title{ font-weight:700; font-size:13px; color:var(--text-heading); line-height:1.3;
                 display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
                 overflow-wrap:anywhere; word-break:break-word; }
.kb-card__meta{ margin-top:6px; display:flex; flex-direction:column; gap:2px; min-width:0; }
.kb-card__emp{ font-size:11.5px; font-weight:700; color:var(--text-body); display:flex; align-items:flex-start;
               gap:5px; min-width:0; overflow-wrap:anywhere; word-break:break-word; line-height:1.25; }
.kb-card__emp .fa-fw{ color:var(--text-muted); font-size:10px; flex-shrink:0; margin-top:2px; }
.kb-card__org{ font-size:11px; color:var(--text-muted); min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.kb-card__foot{ margin-top:9px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.kb-card__val{ font-weight:800; font-size:13.5px; color:var(--text-heading);
               font-variant-numeric:tabular-nums; white-space:nowrap; }
.kb-card__actions{ margin-left:auto; display:flex; gap:4px; }
.kb-act{ width:28px; height:28px; border-radius:7px; display:grid; place-items:center; font-size:12px;
         color:var(--text-muted); background:var(--surface-2); border:1px solid var(--border-color);
         text-decoration:none; transition:all .12s; }
.kb-act:hover{ color:var(--primary-hover); border-color:#7da8f9; background:var(--primary-soft); }
.kb-act--del{ border:0; }
.kb-act--del:hover{ color:var(--crit); border-color:transparent; background:var(--crit-bg); }
.kb-act--win{ display:none; }
.kb-card.st-vencedora .kb-act--win{ display:grid; color:var(--ok); background:var(--ok-bg); border-color:transparent; }
.kb-card.st-vencedora .kb-act--win:hover{ background:var(--ok); color:#fff; }
.kb-card.st-vencedora .kb-act--win.has-contrato{ color:var(--ok); opacity:.6; }
@media (max-width:1100px){ .kb-board{ grid-template-columns:1fr 1fr; } }
@media (max-width:680px){ .kb-board{ grid-template-columns:1fr; } }

/* --- 16d. Toggle de visão (Quadro / Lista) --- */
.pk-viewtoggle{ display:inline-flex; background:var(--surface-2); border:1px solid var(--border-color);
                border-radius:10px; padding:3px; gap:2px; }
.pk-viewtoggle button{ border:0; background:transparent; color:var(--text-muted); font-weight:700;
                       font-size:12.5px; padding:6px 14px; border-radius:7px; cursor:pointer;
                       display:inline-flex; align-items:center; gap:6px; transition:all .15s; }
.pk-viewtoggle button.active{ background:var(--surface); color:var(--primary-hover); box-shadow:var(--shadow-sm); }

/* --- 16e. Toolbar do board + Lista (visão alternativa do Kanban) --- */
.pk-toolbar{ display:flex; align-items:center; gap:12px; margin:2px 0 14px; }
.pk-count{ font-size:13px; color:var(--text-muted); font-weight:600; }
.pk-list{ background:var(--surface); border:1px solid var(--border-color); border-radius:14px;
          box-shadow:var(--shadow); overflow:hidden; }
.prop-row{ display:flex; align-items:center; gap:14px; padding:13px 18px 13px 0; text-decoration:none;
           border-bottom:1px solid var(--border-color); }
.prop-row:last-child{ border-bottom:0; }
.prop-row:hover{ background:var(--surface-2); }
.prop-stripe{ width:4px; align-self:stretch; min-height:44px; flex:0 0 auto; background:var(--border-color); }
.prop-stripe.st-em_elaboracao{ background:#3b82f6; }
.prop-stripe.st-elaborada{ background:#0ea5e9; }
.prop-stripe.st-vencedora{ background:var(--ok-line); }
.prop-stripe.st-perdida{ background:#94a3b8; }
.prop-main{ flex:1; min-width:0; }
.prop-title{ font-weight:700; color:var(--text-heading); font-size:14px; }
.prop-sub{ font-size:12.5px; color:var(--text-muted); margin-top:3px; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.prop-emp{ font-weight:600; color:var(--text-body); }
.st-badge{ font-size:10.5px; font-weight:700; padding:2px 9px; border-radius:20px; white-space:nowrap; }
.st-badge.st-em_elaboracao{ background:#eff6ff; color:#1d4ed8; }
.st-badge.st-elaborada{ background:#e0f2fe; color:#0369a1; }
.st-badge.st-vencedora{ background:var(--ok-bg); color:var(--ok); }
.st-badge.st-perdida{ background:#f1f5f9; color:#64748b; }
[data-theme="dark"] .st-badge.st-em_elaboracao{ background:#16233b; color:#93c5fd; }
[data-theme="dark"] .st-badge.st-elaborada{ background:#0c2a3a; color:#7dd3fc; }
[data-theme="dark"] .st-badge.st-perdida{ background:#232935; color:#94a1b3; }
.prop-right{ text-align:right; display:flex; flex-direction:column; align-items:flex-end; gap:6px; flex:0 0 auto; }
.prop-val{ font-weight:800; color:var(--text-heading); font-variant-numeric:tabular-nums; }
.prop-actions{ display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end; }
.prop-actions .btn{ font-size:.75rem !important; padding:.25rem .7rem; border-radius:8px; }
.np-head-ic{ width:40px; height:40px; border-radius:11px; display:grid; place-items:center;
             background:var(--primary-soft); color:var(--primary-hover); font-size:17px; flex:0 0 auto; }

/* ================================================================
   15g. DARK — componentes com cor FIXA em <style> local das páginas
   (ferramentas: raio-x / gov-spy / explorador / oráculo / gerador; proposta)
   Reancorra nos tokens. !important vence os <style> locais; light intacto.
   ================================================================ */

/* Cards brancos: cada ferramenta redefine .nexus-card com background:#fff */
[data-theme="dark"] .nexus-card{
  background: var(--surface) !important;
  border-color: var(--border-color) !important;
  box-shadow: none !important;
}

/* Botões de ação claros (raio-x / proposta): seguem o sistema único da seção 5 (21/10/2026) */

/* Badges "soft" (fundo claro + texto escuro) */
[data-theme="dark"] .badge-soft-primary{
  background: var(--surface-3) !important;
  color: var(--text-heading) !important;
  border-color: var(--border-color) !important;
}
[data-theme="dark"] .badge-soft-success{ background: rgba(34,197,94,.16) !important; color:#86efac !important; }
[data-theme="dark"] .badge-soft-danger{ background: rgba(239,68,68,.16) !important; color:#fca5a5 !important; }

/* Banner de concentracao (gov-spy) */
[data-theme="dark"] .rei-volume-banner{ background: var(--surface-3) !important; }

/* Textos-valor escuros (raio-x cadastral / proposta / gov-spy) */
[data-theme="dark"] .info-value,
[data-theme="dark"] .header-info-value,
[data-theme="dark"] .qsa-nome,
[data-theme="dark"] .mini-stat-value{ color: var(--text-heading) !important; }

/* Tabelas (gov-spy .table-clean / proposta .items-table) */
[data-theme="dark"] .table-clean th,
[data-theme="dark"] .items-table thead th{ color: var(--text-muted) !important; border-color: var(--border-color) !important; }
[data-theme="dark"] .items-table thead th{ background: var(--surface-3) !important; }
[data-theme="dark"] .table-clean td,
[data-theme="dark"] .items-table td,
[data-theme="dark"] .item-desc-text{ color: var(--text-body) !important; }
[data-theme="dark"] .table-clean td{ border-color: var(--border-color) !important; }
[data-theme="dark"] .table-clean tbody tr:hover{ background: var(--surface-3) !important; }

/* Botao "Raio-x" (btn-outline-dark) com texto escuro no dark */
[data-theme="dark"] .btn-outline-dark{ color: var(--text-heading) !important; border-color: var(--border-strong) !important; }
[data-theme="dark"] .btn-outline-dark:hover{ background: var(--surface-3) !important; }

/* =========================================================================
   15h. DARK — formularios das FERRAMENTAS + detalhes remanescentes
   Raiz: templates (oraculo, gerador, explorador, hub...) redefinem classes
   proprias em <style> local com cor CLARA cravada. Fix unico via tokens.
   ========================================================================= */
/* cabecalho de card / toggles / labels / inputs readonly das ferramentas */
[data-theme="dark"] .nexus-card-header{ color: var(--text-heading) !important; border-bottom-color: var(--border-color) !important; }
[data-theme="dark"] .custom-toggle-group{ background: var(--surface-3) !important; }
[data-theme="dark"] .custom-toggle-btn{ color: var(--text-muted) !important; }
[data-theme="dark"] .custom-toggle-btn.active{ background: var(--surface) !important; color: var(--primary) !important; box-shadow: none !important; }
[data-theme="dark"] .form-label{ color: var(--text-muted) !important; }
[data-theme="dark"] .form-check-label{ color: var(--text-body) !important; }
[data-theme="dark"] .form-control[readonly]{ background: var(--surface-3) !important; color: var(--text-muted) !important; border-color: var(--border-color) !important; }
/* botao "select" custom (abre dropdown Bootstrap) */
[data-theme="dark"] .btn-dropdown-select{ background: var(--surface-2) !important; color: var(--text-body) !important; border-color: var(--border-strong) !important; }
[data-theme="dark"] .btn-dropdown-select.text-muted{ color: var(--text-muted) !important; }
/* itens/busca dentro dos dropdowns Bootstrap (menu ja e escuro via token) */
[data-theme="dark"] .dropdown-search-input{ background: var(--surface-2) !important; color: var(--text-body) !important; border-color: var(--border-strong) !important; }
[data-theme="dark"] .dropdown-item{ color: var(--text-body) !important; }
[data-theme="dark"] .dropdown-item:hover{ background: var(--surface-3) !important; }
/* tabela do explorador de precos */
[data-theme="dark"] .table-nexus th{ background: var(--surface-3) !important; color: var(--text-muted) !important; border-bottom-color: var(--border-color) !important; }
[data-theme="dark"] .table-nexus td{ color: var(--text-body) !important; border-color: var(--border-color) !important; }
[data-theme="dark"] .table-nexus tbody tr:hover{ background: var(--surface-3) !important; }
/* botao outline (Imprimir) do explorador */
[data-theme="dark"] .btn-nexus-outline{ color: var(--text-body) !important; border-color: var(--border-strong) !important; }
[data-theme="dark"] .btn-nexus-outline:hover{ background: var(--surface-3) !important; color: var(--primary) !important; }

/* Agenda — container branco do FullCalendar */
[data-theme="dark"] #calendario-container{ background: var(--surface) !important; border-color: var(--border-color) !important; box-shadow: none !important; }

/* Editar perfil — moldura da foto */
[data-theme="dark"] .img-preview-container{ background: var(--surface-3) !important; }

/* Manual do usuario — acordeao Bootstrap com cor clara cravada */
[data-theme="dark"] .accordion-item{ background: var(--surface) !important; border-color: var(--border-color) !important; }
[data-theme="dark"] .accordion-button{ color: var(--text-body) !important; }
[data-theme="dark"] .accordion-button.collapsed{ background: var(--surface-2) !important; }
[data-theme="dark"] .accordion-button:not(.collapsed){ background: var(--primary-soft) !important; color: var(--text-heading) !important; box-shadow: none !important; }
[data-theme="dark"] .accordion-body{ background: var(--surface) !important; color: var(--text-body) !important; }
[data-theme="dark"] .accordion-button::after{ filter: invert(1) grayscale(1) brightness(1.6) !important; }

/* Hub de ferramentas — chips pastel dos icones viram tinta escura translucida
   (color-mix usa a propria cor do icone; degrada de forma inocua se nao suportado) */
[data-theme="dark"] .tool-icon-wrapper, [data-theme="dark"] .tool-ic{ background: color-mix(in srgb, currentColor 20%, transparent) !important; }

/* Perfil da empresa (perfil_empresa_v2) + gerenciar filtros v2 */
[data-theme="dark"] .info-card p{ color: var(--text-body) !important; }
[data-theme="dark"] .edital-card-result{ background: var(--surface) !important; border-color: var(--border-color) !important; }
[data-theme="dark"] .search-control-card .form-switch .form-check-label{ color: var(--text-body) !important; }
[data-theme="dark"] .create-placeholder{ background: var(--surface-2) !important; color: var(--text-muted) !important; border-color: var(--border-strong) !important; }
[data-theme="dark"] .create-placeholder:hover{ background: var(--surface-3) !important; }

/* Tabela de documentos (kanban) + Bootstrap .table-light (gap global) no dark */
[data-theme="dark"] .table-light,
[data-theme="dark"] thead.table-light th,
[data-theme="dark"] .table-light > :not(caption) > * > *{
  --bs-table-bg: var(--surface-3) !important; --bs-table-color: var(--text-muted) !important;
  background-color: var(--surface-3) !important; color: var(--text-muted) !important; border-color: var(--border-color) !important;
}
[data-theme="dark"] .status-row-vencido{ background-color: rgba(239,68,68,.14) !important; }
[data-theme="dark"] .status-row-proximo{ background-color: rgba(234,179,8,.14) !important; }
[data-theme="dark"] .status-row-ausente{ background-color: transparent !important; }
[data-theme="dark"] .documento-row:hover{ background-color: var(--surface-3) !important; }

/* =========================================================================
   15i. DARK — ferramentas de engenharia (readequador / exequibilidade /
   precificacao) usam classes glassmorphism com branco cravado no <style> local.
   ========================================================================= */
[data-theme="dark"] .bg-nexus-light{ background: var(--surface-2) !important; background-image: none !important; }
[data-theme="dark"] .card-clean{ background: var(--surface) !important; border-color: var(--border-color) !important; box-shadow: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
[data-theme="dark"] .input-clean{ background: var(--surface-2) !important; border-color: var(--border-strong) !important; color: var(--text-heading) !important; }
[data-theme="dark"] .input-clean::placeholder{ color: var(--text-faint) !important; }
[data-theme="dark"] .label-clean{ color: var(--text-muted) !important; }
[data-theme="dark"] .drop-zone{ background: var(--surface-2) !important; border-color: var(--border-strong) !important; }
[data-theme="dark"] .drop-zone h5, [data-theme="dark"] .drop-zone h6{ color: var(--text-heading) !important; }
[data-theme="dark"] .info-box{ background: var(--surface-3) !important; }
[data-theme="dark"] .info-box .text-dark{ color: var(--text-heading) !important; }
[data-theme="dark"] .dropdown-menu-custom{ background: var(--surface-2) !important; border-color: var(--border-color) !important; }
[data-theme="dark"] .search-input-dropdown{ background: var(--surface-3) !important; color: var(--text-body) !important; border-color: var(--border-color) !important; }
[data-theme="dark"] .btn-termometro{ background: var(--surface-3) !important; border-color: var(--border-color) !important; color: var(--text-body) !important; }
[data-theme="dark"] .table-calc thead, [data-theme="dark"] .table-calc thead.table-light{ background: var(--surface-3) !important; }
[data-theme="dark"] .table-calc th{ color: var(--text-muted) !important; }
[data-theme="dark"] .table-calc td{ color: var(--text-body) !important; border-color: var(--border-color) !important; }
[data-theme="dark"] .nav-pills-custom{ border-bottom-color: var(--border-color) !important; }
[data-theme="dark"] .nav-pills-custom .nav-link{ color: var(--text-muted) !important; }
/* catálogo item — botão de preço de mercado já usa tokens; nada a fazer */

/* ══════════════════════════════════════════════════════════════════════
   Componente de anexo de documento (doc-dropzone) — Upload + Editar
   Tema-aware: usa tokens, funciona em light e dark. Fonte única de estilo.
   ══════════════════════════════════════════════════════════════════════ */
.doc-grid{ display:grid; grid-template-columns:1.05fr .95fr; gap:1.5rem; align-items:start; }
@media (max-width:992px){
  .doc-grid{ grid-template-columns:1fr; }
  .doc-grid .doc-preview{ order:2; }
  .doc-grid .doc-form{ order:1; }
}

/* --- Dropzone --- */
.ddz{ border:2px dashed var(--primary,#1f6ef3); border-radius:14px; padding:34px 20px; text-align:center;
      cursor:pointer; transition:background .18s, border-color .18s; background:var(--surface-2,#f7f9fc); }
.ddz:hover, .ddz.drag-over{ background:var(--primary-soft,#e8f0fe); border-color:var(--primary-hover,#1a5fd0); }
.ddz-icon{ font-size:2.6rem; color:var(--primary,#1f6ef3); }
.ddz-title{ color:var(--text-body,#334155); font-weight:600; margin-top:.7rem; margin-bottom:.15rem; }
.ddz-hint{ font-size:.83rem; color:var(--text-muted,#64748b); }
.ddz-fileinfo{ display:flex; align-items:center; justify-content:center; gap:1rem; }
.ddz-fileinfo .ok-ic{ font-size:2.3rem; color:var(--ok,#15803d); }
.ddz-name{ font-weight:700; color:var(--text-heading,#1e293b); word-break:break-all; }
.ddz-size{ font-size:.8rem; color:var(--text-muted,#64748b); }
.ddz-remove{ border:0; background:var(--crit-bg,#fee2e2); color:var(--crit,#b91c1c);
             width:30px; height:30px; border-radius:8px; font-size:1rem; line-height:1; flex:0 0 auto; }
.ddz-remove:hover{ background:var(--crit,#b91c1c); color:#fff; }
.ddz-flash{ transition:background-color .5s; background-color:var(--ok-bg,#d1e7dd) !important; }

/* --- Painel de preview --- */
.doc-preview{ display:flex; flex-direction:column; height:74vh; min-height:420px;
              border:1px solid var(--border-color,#e4e9f0); border-radius:14px; overflow:hidden;
              background:var(--surface,#fff); box-shadow:var(--shadow-sm); }
.doc-preview__bar{ display:flex; align-items:center; gap:.6rem; padding:.6rem .85rem;
                   background:var(--surface-2,#f7f9fc); border-bottom:1px solid var(--border-color,#e4e9f0); }
.doc-preview__bar h6{ margin:0; font-size:.85rem; font-weight:800; color:var(--text-heading);
                      display:flex; align-items:center; gap:.4rem; white-space:nowrap; }
.doc-preview__fname{ font-size:.72rem; color:var(--text-muted); overflow:hidden; text-overflow:ellipsis;
                     white-space:nowrap; max-width:38%; }
.doc-badge-novo{ display:none; align-items:center; gap:.35rem; margin-left:auto; font-size:.7rem; font-weight:800;
                 padding:.18rem .55rem; border-radius:999px; background:var(--ok-bg,#dcfce7); color:var(--ok,#15803d);
                 animation:ddzPulse 1.6s ease-in-out infinite; }
@keyframes ddzPulse{ 0%,100%{ opacity:1; } 50%{ opacity:.55; } }
.doc-preview__actions{ margin-left:auto; display:flex; gap:.4rem; }
.doc-badge-novo + .doc-preview__actions{ margin-left:.5rem; }
.doc-preview__open{ width:30px; height:30px; border-radius:8px; display:grid; place-items:center; font-size:.8rem;
                    color:var(--text-muted); background:var(--surface); border:1px solid var(--border-color);
                    text-decoration:none; }
.doc-preview__open:hover{ color:var(--primary-hover); border-color:#7da8f9; background:var(--primary-soft); }
.doc-preview__stage{ position:relative; flex:1; min-height:0; background:var(--surface-3,#eef2f7); }
.doc-preview__frame{ width:100%; height:100%; border:0; display:none; opacity:0;
                     transition:opacity .35s ease, transform .35s ease; transform:scale(.995); }
.doc-preview__frame.is-visible{ opacity:1; transform:scale(1); }
.doc-preview__frame.ddz-swap{ animation:ddzSwap .5s ease; }
@keyframes ddzSwap{ 0%{ opacity:0; transform:translateY(10px) scale(.99); }
                    100%{ opacity:1; transform:translateY(0) scale(1); } }
.doc-preview__empty{ position:absolute; inset:0; display:flex; flex-direction:column; align-items:center;
                     justify-content:center; gap:.6rem; text-align:center; color:var(--text-muted); padding:1.5rem; }
.doc-preview__empty i{ font-size:2.6rem; opacity:.45; }
@media (prefers-color-scheme:dark){ .doc-preview__stage{ background:#0f141b; } }
[data-theme="dark"] .doc-preview__stage{ background:#0f141b; }
