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

:root {
  --bg:        #0d1117;
  --bg2:       #161b22;
  --bg3:       #21262d;
  --bg4:       #30363d;
  --border:    #30363d;
  --border-lt: #444c56;
  --text:      #e6edf3;
  --text-mute: #7d8590;
  --text-dim:  #484f58;
  --blue:      #388bfd;
  --blue-lt:   #79c0ff;
  --green:     #3fb950;
  --green-lt:  #56d364;
  --red:       #f85149;
  --red-lt:    #ff7b72;
  --yellow:    #d29922;
  --yellow-lt: #e3b341;
  --purple:    #8957e5;
  --radius:    6px;
  --radius-lg: 10px;
  --shadow:    0 8px 24px rgba(1,4,9,0.5);
}

/* ─── Tema claro ─────────────────────────────────────────────────────────────── */
:root[data-theme="light"] {
  --bg:        #f6f8fa;
  --bg2:       #ffffff;
  --bg3:       #eaeef2;
  --bg4:       #d0d7de;
  --border:    #d0d7de;
  --border-lt: #afb8c1;
  --text:      #1f2328;
  --text-mute: #636c76;
  --text-dim:  #8c959f;
  --blue:      #0969da;
  --blue-lt:   #0a66c2;
  --green:     #1a7f37;
  --green-lt:  #1a7f37;
  --red:       #cf222e;
  --red-lt:    #d1242f;
  --yellow:    #9a6700;
  --yellow-lt: #7d4e00;
  --purple:    #8250df;
  --shadow:    0 8px 24px rgba(140,149,159,0.25);
}
/* Realces que usavam transparências escuras ficam mais sóbrios no claro */
:root[data-theme="light"] .kpi-bar { background: rgba(255,255,255,0.92); }

body {
  font-family: -apple-system, 'Segoe UI', system-ui, sans-serif;
  background: var(--bg);
  color: var(--text);
  font-size: 13px;
  line-height: 1.5;
  min-height: 100vh;
}

/* ─── Remove number input arrows globally ──────────────────────────────────── */
input[type=number] { -moz-appearance: textfield; appearance: textfield; }
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }

/* ─── Header ───────────────────────────────────────────────────────────────── */
.app-top {
  position: sticky;
  top: 0;
  z-index: 100;
}
.app-header {
  background: var(--bg2);
  border-bottom: 1px solid var(--border);
  padding: 10px 20px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.app-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--text);
  display: flex;
  align-items: center;
  gap: 8px;
}
.app-subtitle { font-size: 11px; color: var(--text-mute); margin-top: 1px; }
.header-actions { display: flex; gap: 8px; align-items: center; }

/* ─── Nav tabs ─────────────────────────────────────────────────────────────── */
.nav-tabs {
  display: flex;
  background: var(--bg2);
  border-bottom: 1px solid var(--border);
  padding: 0 16px;
  gap: 0;
  overflow-x: auto;
}
.nav-tab {
  padding: 9px 16px;
  border: none;
  background: transparent;
  color: var(--text-mute);
  cursor: pointer;
  font-size: 12px;
  font-weight: 500;
  border-bottom: 2px solid transparent;
  transition: all 0.15s;
  white-space: nowrap;
  letter-spacing: 0.01em;
}
.nav-tab:hover { color: var(--text); }
.nav-tab.active { color: var(--blue-lt); border-bottom-color: var(--blue); }

/* ─── Tab panes ────────────────────────────────────────────────────────────── */
.tab-pane { display: none; padding: 20px; max-width: 1400px; margin: 0 auto; }
.tab-pane.active { display: block; }

/* ─── Buttons ──────────────────────────────────────────────────────────────── */
.btn {
  padding: 6px 14px;
  border-radius: var(--radius);
  border: 1px solid transparent;
  cursor: pointer;
  font-size: 12px;
  font-weight: 500;
  transition: all 0.15s;
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.btn-primary { background: var(--blue); color: #fff; border-color: var(--blue); }
.btn-primary:hover { background: #1f6feb; }
.btn-secondary { background: var(--bg3); color: var(--text); border-color: var(--border-lt); }
.btn-secondary:hover { background: var(--bg4); border-color: var(--text-mute); }
.btn-success { background: transparent; color: #56d364; border-color: #238636; }
.btn-success:hover { background: #238636; color: #fff; }
.btn-sm { padding: 4px 10px; font-size: 11px; }
.btn-icon { background: transparent; border: none; cursor: pointer; padding: 3px 6px; border-radius: 4px; font-size: 13px; }
.btn-danger { color: var(--red-lt); }
.btn-danger:hover { background: rgba(248,81,73,0.12); }
.btn-icon:hover { background: var(--bg3); }

/* ─── Inputs ───────────────────────────────────────────────────────────────── */
.inp {
  background: var(--bg);
  border: 1px solid var(--border-lt);
  border-radius: var(--radius);
  color: var(--blue-lt);        /* azul = dado de entrada */
  padding: 5px 8px;
  font-size: 12px;
  width: 100%;
  transition: border-color 0.15s, box-shadow 0.15s;
  font-family: inherit;
}
.inp:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px rgba(56,139,253,0.2); }
.inp-calc {
  color: #ffa657 !important;   /* laranja = calculado */
  background: rgba(255,166,87,0.05) !important;
  cursor: default;
}
.inp-nome { color: var(--text) !important; font-weight: 600; }
.inp-texto { color: var(--text) !important; }
.inp-sm { width: 70px; min-width: 55px; }

/* ─── Param row ────────────────────────────────────────────────────────────── */
.prow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 5px 0;
  border-bottom: 1px solid rgba(48,54,61,0.6);
}
.prow:last-child { border-bottom: none; }
.prow-label {
  color: var(--text-mute);
  font-size: 11.5px;
  flex: 1;
  min-width: 0;
}
.prow-label-sub { color: var(--text-dim); font-size: 11px; }
.prow-value {
  display: flex;
  align-items: center;
  gap: 5px;
  flex-shrink: 0;
}
.prow-value .inp { width: 80px; }
.prow-prefix { font-size: 11px; color: var(--text-mute); }
.prow-suffix { font-size: 11px; color: var(--text-dim); white-space: nowrap; }

/* ─── Board layout ─────────────────────────────────────────────────────────── */
.pboard {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  align-items: start;
}

/* ─── Cards ────────────────────────────────────────────────────────────────── */
.pcard {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  transition: border-color 0.2s, box-shadow 0.2s;
}
.pcard:hover { border-color: var(--border-lt); box-shadow: 0 4px 12px rgba(0,0,0,0.3); }
.pcard-sm { grid-column: span 1; }
.pcard-md { grid-column: span 2; }
.pcard-lg { grid-column: span 3; }

.pcard-header {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: var(--bg3);
  border-bottom: 1px solid var(--border);
  font-size: 11.5px;
  font-weight: 600;
  color: var(--text-mute);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
.pcard-icon { font-size: 14px; }
.pcard-body { padding: 12px 14px; }
.pcard-subheader {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--blue-lt);
  margin: 8px 0 4px;
  font-weight: 600;
}

/* ─── Two / Three column layout inside card ────────────────────────────────── */
.prow-2col {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.prow-3col {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 16px;
}

/* ─── Marketing distribution ───────────────────────────────────────────────── */
.prow-mkt { padding: 6px 0; }
.mkt-dist {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-top: 4px;
}
.mkt-item {
  display: flex;
  align-items: center;
  gap: 5px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 4px 8px;
}
.mkt-label { font-size: 10px; color: var(--text-mute); white-space: nowrap; }
.mkt-total {
  font-size: 11px;
  font-weight: 600;
  color: var(--green-lt);
  margin-left: auto;
  background: rgba(63,185,80,0.1);
  border: 1px solid rgba(63,185,80,0.3);
  padding: 3px 8px;
  border-radius: 4px;
}
.mkt-err { color: var(--red-lt); background: rgba(248,81,73,0.1); border-color: rgba(248,81,73,0.3); }

/* ─── Colapso de cards (aba Parâmetros — mesmo padrão das Tipologias) ──────── */
.pcard[data-cardkey] > .pcard-header { cursor: pointer; user-select: none; }
.pcard-toggle { color: var(--text-dim); font-size: 12px; margin-left: 6px; transition: transform 0.2s; }
.pcard.collapsed .pcard-toggle { transform: rotate(-90deg); }
.pcard.collapsed > .pcard-body { display: none; }

/* ─── Flag "✓ Revisado" por card (aba Parâmetros) ──────────────────────────── */
.card-ok {
  display: flex;
  align-items: center;
  gap: 5px;
  margin-left: auto;
  cursor: pointer;
  font-size: 10px;
  color: var(--text-dim);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 2px 8px;
  white-space: nowrap;
  user-select: none;
}
.card-ok input[type=checkbox] { cursor: pointer; accent-color: var(--green-lt); margin: 0; }
.card-ok-on {
  color: var(--green-lt);
  background: rgba(63,185,80,0.1);
  border-color: rgba(63,185,80,0.35);
  font-weight: 600;
}
.cards-ok-counter {
  font-size: 11px;
  color: var(--text-mute);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 3px 10px;
  white-space: nowrap;
}
.cards-ok-counter.cards-ok-all {
  color: var(--green-lt);
  background: rgba(63,185,80,0.1);
  border-color: rgba(63,185,80,0.35);
  font-weight: 600;
}

/* ─── Toggle (checkbox) ────────────────────────────────────────────────────── */
.toggle-wrap {
  display: flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
  font-size: 11px;
  color: var(--text-mute);
}
.toggle-wrap input[type=checkbox] { cursor: pointer; accent-color: var(--blue); }

/* ─── Regime toggle ─────────────────────────────────────────────────────────── */
.regime-toggle {
  display: flex;
  gap: 0;
  margin-bottom: 14px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 3px;
}
.regime-btn {
  flex: 1;
  padding: 7px 12px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  font-size: 12px;
  font-weight: 500;
  background: transparent;
  color: var(--text-mute);
  transition: all 0.15s;
}
.regime-btn:hover { color: var(--text); }
.regime-btn.regime-active {
  background: var(--blue);
  color: #fff;
  box-shadow: 0 1px 4px rgba(0,0,0,0.4);
}

/* ─── Tributação info ───────────────────────────────────────────────────────── */
.trib-info {
  font-size: 11px;
  color: var(--text-dim);
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 7px 10px;
  margin-bottom: 10px;
  line-height: 1.6;
}
.trib-breakdown {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 8px;
}
.trib-tag {
  font-size: 11px;
  font-weight: 600;
  color: var(--green-lt);
  background: rgba(63,185,80,0.1);
  border: 1px solid rgba(63,185,80,0.25);
  padding: 3px 8px;
  border-radius: 4px;
}
.trib-sub { font-size: 10px; color: var(--text-dim); }
.trib-total-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--border);
  font-size: 11px;
  color: var(--text-mute);
  font-weight: 600;
}
.trib-total-val { color: var(--green-lt); font-size: 13px; }
.trib-ativo-tag {
  margin-top: 12px;
  padding: 7px 12px;
  background: rgba(63,185,80,0.08);
  border: 1px solid rgba(63,185,80,0.2);
  border-radius: 5px;
  font-size: 11px;
  color: var(--text-mute);
}
.trib-ativo-tag strong { color: var(--green-lt); }

/* ─── RET bar chart ────────────────────────────────────────────────────────── */
.ret-visual {
  width: 100%;
  padding: 12px 16px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 8px;
}
.ret-visual-title {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--text-mute);
  margin-bottom: 10px;
  font-weight: 600;
}
.ret-bar-row {
  display: grid;
  grid-template-columns: 55px 1fr 48px;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
}
.ret-bar-lbl { font-size: 11px; color: var(--text-mute); }
.ret-bar-track {
  height: 8px;
  background: var(--bg);
  border-radius: 4px;
  overflow: hidden;
}
.ret-bar-fill {
  height: 100%;
  border-radius: 4px;
  transition: width 0.3s ease;
}
.ret-bar-val { font-size: 11px; color: var(--text); text-align: right; }
.ret-bar-total { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--border); }
.ret-bar-total .ret-bar-val { color: var(--green-lt); font-weight: 700; }

/* ─── Responsive board updates ──────────────────────────────────────────────── */
@media (max-width: 1000px) {
  .prow-3col { grid-template-columns: 1fr 1fr; }
}
.check-label {
  display: flex;
  align-items: center;
  gap: 5px;
  cursor: pointer;
  color: var(--text-mute);
}
.check-label input { accent-color: var(--blue); }

/* ─── Month Picker ─────────────────────────────────────────────────────────── */
.mp-wrap { position: relative; }
.mp-display {
  display: flex;
  align-items: center;
  gap: 4px;
  width: 110px;
}
.mp-input { color: #79c0ff !important; cursor: pointer; width: 90px; }
.mp-icon { font-size: 13px; cursor: pointer; opacity: 0.6; }

.mp-popup {
  position: absolute;
  z-index: 9999;
  background: var(--bg2);
  border: 1px solid var(--border-lt);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow);
  padding: 10px;
  width: 190px;
  user-select: none;
}
.mp-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--border);
}
.mp-nav {
  background: transparent;
  border: none;
  color: var(--text-mute);
  cursor: pointer;
  font-size: 16px;
  padding: 2px 8px;
  border-radius: 4px;
  transition: all 0.15s;
}
.mp-nav:hover { background: var(--bg3); color: var(--text); }
.mp-year-lbl { font-size: 13px; font-weight: 600; color: var(--text); }
.mp-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 4px;
}
.mp-month-btn {
  background: transparent;
  border: 1px solid transparent;
  border-radius: 5px;
  color: var(--text-mute);
  cursor: pointer;
  font-size: 11px;
  padding: 6px 2px;
  text-align: center;
  transition: all 0.12s;
}
.mp-month-btn:hover { background: var(--bg3); color: var(--text); border-color: var(--border); }
.mp-sel {
  background: var(--blue) !important;
  color: #fff !important;
  border-color: var(--blue) !important;
  font-weight: 600;
}

/* ─── KPI Cards ────────────────────────────────────────────────────────────── */
.kpi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: 12px;
  margin-bottom: 20px;
}
.kpi-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 14px 16px;
  border-left: 3px solid var(--border);
}
.kpi-pos { border-left-color: var(--green); }
.kpi-neg { border-left-color: var(--red); }
.kpi-tol { border-left-color: var(--yellow); }
.kpi-tol .kpi-valor { color: var(--yellow-lt); }
.kpi-pos .kpi-valor { color: var(--green-lt); }
.kpi-neg .kpi-valor { color: var(--red-lt); }
.kpi-neutral { border-left-color: var(--text-mute); }
.kpi-info { border-left-color: var(--blue); }
.kpi-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-mute); margin-bottom: 6px; }
.kpi-valor { font-size: 22px; font-weight: 700; line-height: 1.2; color: var(--text); }
.kpi-pos .kpi-valor { color: #56d364; }
.kpi-neg .kpi-valor { color: #ff7b72; }
.kpi-neutral .kpi-valor { color: var(--yellow-lt); }
.kpi-info .kpi-valor { color: var(--blue-lt); }
.kpi-sub { font-size: 10px; color: var(--text-mute); margin-top: 4px; }

/* ── Cards de Resultados: 3 canais independentes (21/07/2026) ─────────────────
   borda esquerda = FAMÍLIA do indicador · fonte do valor = STATUS vs meta ·
   fundo = nominal (sem) | valor presente (tint azul). Famílias em tons que não
   colidem com as cores de status (teal p/ resultados, bronze p/ TIRs). */
:root {
  --fam-vgv:    #388bfd;   /* azul — VGV/VGVL */
  --fam-margem: #b08968;   /* marrom — margens e rentabilidade */
  --fam-res:    #2dd4bf;   /* teal — VPL e resultados */
  --fam-tir:    #d4a72c;   /* bronze — TIRs */
  --fam-caixa:  #7d8590;   /* cinza — necessidade de caixa e ratios de caixa */
}
:root[data-theme="light"] {
  --fam-vgv:    #0969da;
  --fam-margem: #8b5a3c;
  --fam-res:    #0d9488;
  --fam-tir:    #b58500;
  --fam-caixa:  #6e7781;
}
.kpi-fam-vgv    { border-left-color: var(--fam-vgv); }
.kpi-fam-margem { border-left-color: var(--fam-margem); }
.kpi-fam-res    { border-left-color: var(--fam-res); }
.kpi-fam-tir    { border-left-color: var(--fam-tir); }
.kpi-fam-caixa  { border-left-color: var(--fam-caixa); }
/* Status na FONTE do valor: aprovado / tolerável / reprovado / sem meta (cinza) */
.kpi-card .kpi-valor.kpi-v-pos  { color: var(--green-lt); }
.kpi-card .kpi-valor.kpi-v-tol  { color: var(--yellow-lt, #e3b341); }
.kpi-card .kpi-valor.kpi-v-neg  { color: var(--red-lt, #ff7b72); }
.kpi-card .kpi-valor.kpi-v-mute { color: var(--text-mute); }
/* Tolerância no tema claro: laranja de verdade (o --yellow-lt claro é #7d4e00,
   um marrom que não lê como "atenção" — feedback do usuário 21/07) */
:root[data-theme="light"] .kpi-card .kpi-valor.kpi-v-tol { color: #e8590c; }
/* Indicador a VALOR PRESENTE: tint azul (mesma convenção da linha VP do gráfico
   e do destaque do DRE) + rótulo azulado. No escuro o tint precisa ser mais
   forte para contrastar com os cards vizinhos (feedback do usuário 21/07). */
.kpi-vp { background: rgba(56, 139, 253, 0.17); }
.kpi-vp .kpi-label { color: var(--blue-lt, #79c0ff); }
:root[data-theme="light"] .kpi-vp { background: #e7f0fb; }
:root[data-theme="light"] .kpi-vp .kpi-label { color: #0969da; }
.kpi-badge-warn {
  display: inline-block; margin-left: 6px; padding: 1px 6px; border-radius: 8px;
  font-size: 9px; font-weight: 700; letter-spacing: 0.02em; text-transform: none;
  color: #1c1200; background: var(--yellow-lt, #e3b341); cursor: help; vertical-align: middle;
}

/* ─── Charts ───────────────────────────────────────────────────────────────── */
.chart-grid { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: 14px; margin-bottom: 20px; }
@media (max-width: 900px) { .chart-grid { grid-template-columns: minmax(0,1fr); } }
.chart-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 14px;
}
.chart-card h3 { font-size: 10px; color: var(--text-mute); margin-bottom: 10px; text-transform: uppercase; letter-spacing: 0.07em; }
.chart-wrap { height: 280px; position: relative; }

/* ─── Fase Cards ───────────────────────────────────────────────────────────── */
#fases-container { display: flex; flex-direction: column; gap: 12px; }

.fase-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  transition: border-color 0.2s;
}
.fase-card:hover { border-color: var(--border-lt); }
.fase-inativa { opacity: 0.45; }

.fase-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 14px;
  cursor: pointer;
  background: var(--bg3);
  border-bottom: 1px solid var(--border);
  gap: 10px;
}
.fase-header-left { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }
.fase-header-left .inp-nome { background: transparent; border: 1px solid transparent; }
.fase-header-left .inp-nome:focus { background: var(--bg); border-color: var(--blue); }
.fase-header-right { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
.fase-badge {
  font-size: 11px;
  color: var(--green-lt);
  background: rgba(63,185,80,0.1);
  border: 1px solid rgba(63,185,80,0.25);
  padding: 2px 8px;
  border-radius: 4px;
  white-space: nowrap;
}
.fase-toggle { color: var(--text-dim); font-size: 12px; transition: transform 0.2s; }
.fase-card.collapsed .fase-toggle { transform: rotate(-90deg); }
.fase-card.collapsed .fase-body { display: none; }

.fase-body { padding: 14px; }
.fase-cols {
  display: grid;
  /* auto-FIT (22/07/2026): colapsa as faixas vazias — as 2 seções dividem TODA a
     largura do card (antes auto-fill criava faixas ociosas à direita e as colunas
     ficavam ~200px, forçando quebras de linha). A impressão mantém auto-fill
     200px via !important no @media print (layout A4 validado). */
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 16px 28px;
  margin-bottom: 14px;
}
.fase-col h4 {
  font-size: 10px;
  font-weight: 600;
  color: var(--blue-lt);
  margin-bottom: 8px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
}

/* ─── IVVI section ─────────────────────────────────────────────────────────── */
.ivvi-section {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 10px 12px;
}
.ivvi-section-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
}
.ivvi-section-header h4 {
  font-size: 10px;
  font-weight: 600;
  color: var(--blue-lt);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
.ivvi-section-header small { font-size: 10px; color: var(--text-dim); }
.ivvi-body { display: flex; gap: 18px; align-items: stretch; }
.ivvi-controls { flex: 0 0 auto; min-width: 360px; }
.ivvi-chart-wrap { flex: 1 1 auto; min-width: 0; min-height: 200px; position: relative; }
@media (max-width: 900px) {
  .ivvi-body { flex-direction: column; }
  .ivvi-controls { min-width: 0; }
  .ivvi-chart-wrap { min-height: 220px; }
}
.ivvi-rows { display: flex; flex-direction: column; gap: 4px; }
.ivvi-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 4px 0;
  border-bottom: 1px solid rgba(48,54,61,0.4);
}
.ivvi-row:last-child { border-bottom: none; }
.ivvi-label { font-size: 10px; color: var(--text-mute); width: 50px; flex-shrink: 0; }

/* Linha empilhada: label em cima, valores embaixo */
.prow-stack {
  flex-direction: column;
  align-items: flex-start;
  gap: 0;
}

/* ─── Fases toolbar ────────────────────────────────────────────────────────── */
.fases-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 14px;
}
/* Toolbar padrão das abas (título + ações, ex.: Imprimir/PDF) */
.tab-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 14px;
}
/* Títulos de aba padronizados (mesma família visual dos cabeçalhos de card) */
.tab-toolbar h2, .fases-toolbar h2 {
  font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--text-mute);
}

/* Menu suspenso do cabeçalho (Arquivo ▾) */
.hdr-menu { position: relative; }
.hdr-menu-drop {
  position: absolute; right: 0; top: calc(100% + 4px); z-index: 300;
  min-width: 215px; padding: 4px;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius); box-shadow: var(--shadow);
}
.hdr-menu-drop button {
  display: block; width: 100%; text-align: left; padding: 7px 10px;
  background: none; border: none; color: var(--text);
  font-size: 12px; cursor: pointer; border-radius: 4px;
}
.hdr-menu-drop button:hover { background: var(--bg3); }

/* Ícone de ajuda contextual */
.help-q {
  display: inline-flex; align-items: center; justify-content: center;
  width: 13px; height: 13px; margin-left: 4px; flex-shrink: 0;
  border-radius: 50%; border: 1px solid var(--text-dim);
  color: var(--text-dim); font-size: 9px; font-weight: 700;
  cursor: help; vertical-align: middle; line-height: 1;
}
.help-q:hover { color: var(--blue-lt); border-color: var(--blue-lt); }

/* App velado enquanto nenhum empreendimento está aberto (evita flash do cenário default) */
body.app-sem-projeto .tab-pane,
body.app-sem-projeto .kpi-bar { filter: blur(5px); opacity: 0.35; pointer-events: none; user-select: none; }

/* ─── Guia de preenchimento (1ª visita) ────────────────────────────────────── */
.onboard-banner {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
  margin: 10px 16px 0; padding: 8px 14px;
  background: rgba(56,139,253,0.08);
  border: 1px solid rgba(56,139,253,0.35);
  border-radius: var(--radius); font-size: 12px; color: var(--text);
}
.onboard-banner .onboard-tab {
  background: var(--bg3); border: 1px solid var(--border); border-radius: 4px;
  color: var(--blue-lt); font-size: 11.5px; font-weight: 600;
  padding: 3px 8px; cursor: pointer;
}
.onboard-banner .onboard-tab:hover { border-color: var(--blue); }
.onboard-banner .onboard-x {
  margin-left: auto; background: none; border: none; cursor: pointer;
  color: var(--text-mute); font-size: 11.5px; font-weight: 600; padding: 3px 6px;
}
.onboard-banner .onboard-x:hover { color: var(--text); }

/* Versão do app */
.kpi-bar-versao { position: absolute; right: 14px; font-size: 10px; color: var(--text-dim); white-space: nowrap; }
.cfg-versao { margin-right: auto; font-size: 10.5px; color: var(--text-dim); align-self: center; }

/* ─── Relatório Resumo (parâmetros + resultados por tipologia) ─────────────── */
.rel-overlay {
  position: fixed; inset: 0; z-index: 800;
  background: rgba(0,0,0,0.55);
  overflow: auto; padding: 24px;
}
.rel-page {
  max-width: 1200px; margin: 0 auto;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius-lg); padding: 18px 20px 24px;
}
.rel-toolbar { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 14px; }
.rel-toolbar h2 { font-size: 17px; }
.rel-sub { font-size: 11px; color: var(--text-mute); margin-top: 2px; }
.rel-acoes { display: flex; gap: 8px; flex-wrap: wrap; }
.rel-tbl { width: 100%; border-collapse: collapse; font-size: 11.5px; }
.rel-tbl td, .rel-tbl th { border: 1px solid var(--border); padding: 3px 8px; }
/* Tabela larga (muitas tipologias): na TELA rola na horizontal com a coluna de
   rótulos congelada; na IMPRESSÃO o overlay é escalado p/ caber no A4 (js) */
.rel-tbl-scroll { overflow-x: auto; }
.rel-tbl th:first-child, .rel-tbl td:first-child {
  position: sticky; left: 0; z-index: 2; background: var(--bg2);
}
.rel-tbl .rel-sec th:first-child { background: #2e2e6b; z-index: 3; }
.rel-tbl .rel-grupo td:first-child { background: var(--bg3); }
.rel-tbl .dre-an-head td:first-child { background: var(--bg3); }
.rel-sec th { background: #2e2e6b; color: #fff; }
.rel-sec-titulo { font-size: 15px; font-weight: 800; text-align: left; padding: 8px 10px !important; }
.rel-col-fase, .rel-col-total { font-size: 10px; font-weight: 700; text-align: center; width: 150px; }
.rel-col-total { font-size: 12px; }
.rel-grupo td {
  font-weight: 700; text-decoration: underline;
  background: var(--bg3); padding: 4px 8px;
}
.rel-lbl { padding-left: 18px !important; color: var(--text); }
.rel-lbl-ind { padding-left: 36px !important; color: var(--text-mute); font-size: 11px; }
.rel-nota { color: var(--text-mute); font-size: 10.5px; white-space: nowrap; width: 90px; }
.rel-un { color: var(--text-mute); text-align: center; width: 62px; white-space: nowrap; }
.rel-v { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.rel-v-total { font-weight: 700; background: rgba(46,46,107,0.10); }
:root[data-theme="light"] .rel-grupo td { background: #eef0f4; }
/* DRE Analítica por Classes (overlay) — subtotais de grupo e linhas de resultado */
.dre-an-grupo td { font-weight: 700; }
.dre-an-head td { font-weight: 700; background: rgba(46,46,107,0.10); }

/* ─── Cadastro de Terrenos ─────────────────────────────────────────────────── */
.ter-status {
  display: inline-block; margin-left: 6px; padding: 1px 7px;
  font-size: 10px; font-weight: 700; border-radius: 9px;
  border: 1px solid currentColor; vertical-align: 1px;
}
.ter-form-modal { max-width: 680px; max-height: 88vh; overflow-y: auto; padding: 18px 26px 22px; }
.ter-form .prow { margin-bottom: 7px; }
.ter-form .prow-stack .prow-value { width: 100%; }
.ter-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 22px; }
@media (max-width: 700px) { .ter-grid2 { grid-template-columns: 1fr; } }
.tf-lote-row {
  display: flex; align-items: center; gap: 12px;
  padding: 3px 8px; margin-bottom: 3px;
  background: var(--bg3); border: 1px solid var(--border); border-radius: 4px;
  font-size: 12px;
}
.tf-lote-row .tf-lote-if { font-weight: 600; min-width: 84px; }
.tf-lote-row button { margin-left: auto; }
.proj-link-ter { color: var(--blue-lt); text-decoration: none; }
.proj-link-ter:hover { text-decoration: underline; }

/* Viabilidades vinculadas ao terreno (chips clicáveis na lista) */
.ter-vias { display: flex; align-items: center; flex-wrap: wrap; gap: 4px; margin-top: 4px; font-size: 11px; color: var(--text-mute); }
.ter-vias-vazio { color: var(--text-dim); font-style: italic; }
.ter-via-chip {
  padding: 1px 8px; font-size: 11px; font-weight: 600; cursor: pointer;
  background: rgba(56,139,253,0.10); color: var(--blue-lt);
  border: 1px solid rgba(56,139,253,0.35); border-radius: 9px;
}
.ter-via-chip:hover { background: rgba(56,139,253,0.22); border-color: var(--blue); }

/* Decisões (snapshots imutáveis) */
.dec-aviso {
  margin-top: 10px; padding: 8px 12px; font-size: 11.5px; line-height: 1.45;
  background: rgba(210,153,34,0.10); border: 1px solid rgba(210,153,34,0.45);
  border-radius: var(--radius); color: var(--text);
}
.dec-row {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 7px 10px; margin-bottom: 5px;
  background: var(--bg3); border: 1px solid var(--border); border-radius: 6px;
}
.dec-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dec-titulo { font-size: 12.5px; }
.dec-meta { font-size: 10.5px; color: var(--text-mute); }
.dec-vigente {
  margin-left: 6px; padding: 1px 7px; font-size: 9.5px; font-weight: 700;
  color: var(--green-lt); border: 1px solid var(--green); border-radius: 9px;
}
.dec-cancelada { opacity: 0.6; }
.dec-cancelada .dec-titulo b { text-decoration: line-through; }
.dec-cancel-info { color: var(--red-lt); }

/* Anexos do terreno */
.anexo-row {
  display: flex; align-items: center; gap: 10px;
  padding: 5px 8px; margin-bottom: 4px;
  background: var(--bg3); border: 1px solid var(--border); border-radius: 5px;
  font-size: 11.5px;
}
.anexo-tipo {
  flex: 0 0 auto; padding: 1px 7px; font-size: 10px; font-weight: 700;
  color: var(--blue-lt); border: 1px solid rgba(56,139,253,0.4); border-radius: 8px;
  background: rgba(56,139,253,0.08); white-space: nowrap;
}
.anexo-nome { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text); }
.anexo-meta { flex: 0 0 auto; font-size: 10px; color: var(--text-mute); white-space: nowrap; }
.anexo-acoes { flex: 0 0 auto; display: flex; gap: 4px; align-items: center; }
.anexo-adder {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
  margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--border);
}

/* Modo leitura — decisão congelada em visualização */
.leitura-banner {
  display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
  margin: 10px 16px 0; padding: 8px 14px;
  background: rgba(210,153,34,0.12);
  border: 1px solid rgba(210,153,34,0.5);
  border-radius: var(--radius); font-size: 12px; color: var(--text);
}
.leitura-banner button { margin-left: 0; }
.leitura-banner button:first-of-type { margin-left: auto; }
body.modo-leitura .tab-pane input,
body.modo-leitura .tab-pane select,
body.modo-leitura .tab-pane textarea { pointer-events: none; opacity: 0.8; }
body.modo-leitura .save-status { display: none; }
@media print { .leitura-banner { display: none !important; } }

/* Comparador de empreendimentos */
.proj-cmp-wrap { display: flex; align-items: center; margin-right: 10px; cursor: pointer; }
.proj-cmp-wrap input { cursor: pointer; }
.cmp-tbl { width: 100%; border-collapse: collapse; margin-top: 8px; }
.cmp-tbl th, .cmp-tbl td { padding: 7px 10px; border-bottom: 1px solid var(--border); font-size: 12px; }
.cmp-tbl thead th { color: var(--text); font-weight: 700; border-bottom: 2px solid var(--border-lt); }
.cmp-tbl tbody tr:last-child td { border-bottom: none; }

/* ─── Legend ───────────────────────────────────────────────────────────────── */
.legend-bar {
  display: flex;
  gap: 14px;
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 5px 12px;
  font-size: 11px;
}
.legend-item { display: flex; align-items: center; gap: 5px; }
.legend-dot { width: 8px; height: 8px; border-radius: 2px; }

/* ─── Table ────────────────────────────────────────────────────────────────── */
.tbl-scroll { overflow-x: auto; border-radius: var(--radius); }
.tbl { width: 100%; border-collapse: collapse; font-size: 11px; }
.tbl th {
  background: var(--bg3);
  color: var(--text-mute);
  padding: 7px 10px;
  text-align: right;
  font-weight: 600;
  border-bottom: 1px solid var(--border);
  white-space: nowrap;
  position: sticky;
  top: 0;
}
.tbl th:first-child, .tbl th:nth-child(2) { text-align: left; }
.tbl td {
  padding: 5px 10px;
  border-bottom: 1px solid rgba(48,54,61,0.4);
  text-align: right;
  color: var(--text-mute);
  white-space: nowrap;
}
.tbl td:first-child, .tbl td:nth-child(2) { text-align: left; color: var(--text-dim); }
.tbl tbody tr:hover { background: rgba(56,139,253,0.04); }
.td-pos { color: #56d364 !important; }
.td-neg { color: #ff7b72 !important; }
.fw-bold { font-weight: 600; }
.row-neg td:nth-child(2) { border-left: 2px solid rgba(248,81,73,0.3); }
.tbl-total td {
  background: var(--bg3);
  color: var(--text);
  font-weight: 600;
  border-top: 2px solid var(--border-lt);
}

/* ─── Section card ─────────────────────────────────────────────────────────── */
.section-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 14px;
}
.section-card h3 {
  font-size: 10px;
  color: var(--text-mute);
  margin-bottom: 10px;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  font-weight: 600;
}

/* ─── Responsive ───────────────────────────────────────────────────────────── */
@media (max-width: 1200px) {
  .pboard { grid-template-columns: repeat(2, 1fr); }
  .pcard-lg { grid-column: span 2; }
  .pcard-md { grid-column: span 2; }
}
@media (max-width: 760px) {
  .pboard { grid-template-columns: 1fr; }
  .pcard-sm, .pcard-md, .pcard-lg { grid-column: span 1; }
  .prow-2col { grid-template-columns: 1fr; }
  .kpi-grid { grid-template-columns: 1fr 1fr; }
  .fase-cols { grid-template-columns: 1fr; }
  .chart-grid { grid-template-columns: 1fr; }
}

/* ─── Curvas de Desembolso ────────────────────────────────────────────────── */
.curvas-layout {
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: 16px;
  align-items: start;
  min-height: 600px;
}

/* Sidebar */
.curvas-sidebar {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.curvas-sidebar-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 12px;
  background: var(--bg3);
  border-bottom: 1px solid var(--border);
  font-size: 11px;
  font-weight: 600;
  color: var(--text-mute);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}
.curvas-list {
  padding: 6px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  flex: 1;
}
.curva-item-card {
  padding: 8px 10px;
  border-radius: var(--radius);
  border: 1px solid transparent;
  cursor: pointer;
  transition: all 0.15s;
}
.curva-item-card:hover { background: var(--bg3); border-color: var(--border); }
.curva-sel { background: rgba(56,139,253,0.12) !important; border-color: var(--blue) !important; }
.curva-item-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 3px; }
.curva-dur { font-size: 12px; font-weight: 600; color: var(--text); }
.curva-item-bot { display: flex; align-items: center; justify-content: space-between; }
.curva-soma { font-size: 10px; color: var(--green-lt); }
.curva-soma-err { color: var(--red-lt) !important; }
.curva-ncols { font-size: 10px; color: var(--text-dim); }
.curva-badge-ativa {
  font-size: 10px;
  font-weight: 600;
  color: var(--yellow-lt);
  background: rgba(227,179,65,0.12);
  border: 1px solid rgba(227,179,65,0.25);
  padding: 1px 6px;
  border-radius: 4px;
}
.curvas-sidebar-info {
  padding: 10px 12px;
  border-top: 1px solid var(--border);
  font-size: 10px;
  color: var(--text-mute);
  line-height: 1.7;
}
.curvas-prazo-info strong { color: var(--text); }
.curva-aviso {
  color: var(--yellow-lt);
  margin-top: 4px;
  font-size: 10px;
}

/* Editor */
.curvas-editor {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
}
.curva-editor-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 16px;
  background: var(--bg3);
  border-bottom: 1px solid var(--border);
  flex-wrap: wrap;
  gap: 8px;
}
.curva-editor-title { display: flex; align-items: center; gap: 10px; }
.curva-editor-title h3 { font-size: 13px; font-weight: 600; color: var(--text); }
.curva-editor-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.curva-total-badge {
  font-size: 12px;
  font-weight: 600;
  padding: 3px 10px;
  border-radius: 4px;
}
.curva-ok { color: var(--green-lt); background: rgba(63,185,80,0.1); border: 1px solid rgba(63,185,80,0.25); }
.curva-err { color: var(--red-lt); background: rgba(248,81,73,0.1); border: 1px solid rgba(248,81,73,0.25); }
.curva-chart-box {
  height: 200px;
  padding: 12px 16px 8px;
  border-bottom: 1px solid var(--border);
}
.curva-table-scroll {
  overflow-y: auto;
  max-height: 380px;
  padding: 0;
}
.curva-tbl { font-size: 12px; }
.curva-tbl th { font-size: 10px; text-align: center; }
.curva-tbl td:nth-child(odd) { text-align: center; }
.curva-mes-num {
  font-size: 11px;
  color: var(--text-dim);
  text-align: center;
  width: 40px;
}

/* ── Nova curva form (inline na sidebar) ─── */
.nova-curva-form {
  padding: 8px 10px;
  background: rgba(56,139,253,0.08);
  border-bottom: 1px solid var(--border);
}
.nova-curva-label { font-size: 10px; color: var(--text-mute); margin-bottom: 5px; }

/* ── Área de importação do Excel ─── */
.import-area {
  border-bottom: 1px solid var(--border);
  background: rgba(255,166,87,0.04);
}
.import-header {
  padding: 8px 14px 6px;
  display: flex;
  align-items: baseline;
  gap: 12px;
  flex-wrap: wrap;
}
.import-title { font-size: 11px; font-weight: 600; color: var(--yellow-lt); white-space: nowrap; }
.import-hint  { font-size: 10px; color: var(--text-dim); line-height: 1.5; }
.import-body  { padding: 0 14px 10px; }
.import-ta {
  width: 100%;
  height: 130px;
  background: var(--bg);
  border: 1px solid var(--border-lt);
  border-radius: var(--radius);
  color: #79c0ff;
  padding: 8px 10px;
  font-size: 12px;
  font-family: 'Courier New', monospace;
  resize: vertical;
  line-height: 1.6;
}
.import-ta:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px rgba(56,139,253,0.2); }
.import-actions { display: flex; gap: 8px; margin-top: 8px; }
.import-feedback { font-size: 11px; margin-top: 6px; min-height: 16px; }

/* ─── Curva de Marketing ────────────────────────────────────────────────────── */
.curvas-mkt-layout {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
}

/* Badges de modo auto / customizado */
.curva-badge-auto {
  font-size: 10px;
  color: var(--text-dim);
  background: var(--bg3);
  border: 1px solid var(--border);
  padding: 2px 8px;
  border-radius: 4px;
}
.curva-badge-custom {
  font-size: 10px;
  color: var(--yellow-lt);
  background: rgba(227,179,65,0.1);
  border: 1px solid rgba(227,179,65,0.25);
  padding: 2px 8px;
  border-radius: 4px;
}

/* Badges de etapa na tabela */
.mkt-etapa-badge {
  font-size: 10px;
  font-weight: 600;
  padding: 2px 7px;
  border-radius: 4px;
  white-space: nowrap;
  display: inline-block;
}
.mkt-etapa-lanc { color: #ffa657; background: rgba(255,166,87,0.1);  border: 1px solid rgba(255,166,87,0.25); }
.mkt-etapa-prod { color: #79c0ff; background: rgba(56,139,253,0.1);  border: 1px solid rgba(56,139,253,0.25); }
.mkt-etapa-ent  { color: #56d364; background: rgba(86,211,100,0.1);  border: 1px solid rgba(86,211,100,0.25); }
.mkt-etapa-gen  { color: var(--text-mute); background: var(--bg3);   border: 1px solid var(--border); }

/* Override alinhamento para tabela de marketing */
.mkt-tbl td:nth-child(odd) { text-align: left; }

/* ─── Outros Custos e Despesas ──────────────────────────────────────────────── */
.outros-layout {
  display: flex;
  flex-direction: column;
  gap: 0;
  background: var(--bg2);
  border-radius: 8px;
  overflow: hidden;
  border: 1px solid var(--border);
  margin: 0;
}

.outros-form-card {
  background: var(--bg2);
}
.outros-form-card .pcard-header {
  padding: 10px 18px;
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
}

.outros-form-body {
  padding: 14px 18px;
}

.outros-form-row {
  display: flex;
  gap: 12px;
  align-items: flex-end;
  flex-wrap: wrap;
}

.outros-form-field {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.outros-field-desc  { flex: 3; min-width: 200px; }
.outros-field-val   { flex: 1.2; min-width: 150px; }
.outros-field-mes   { flex: 1; min-width: 130px; }
.outros-field-parc  { flex: 0.6; min-width: 90px; }
.outros-field-btn   { flex: 0; }

.outros-label {
  font-size: 10px;
  color: var(--text-mute);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  font-weight: 500;
}

/* Tabela */
.outros-table-card, .outros-table-card-wrap {
  background: var(--bg2);
}
.outros-table-card-wrap .pcard-header,
.outros-table-card .pcard-header {
  padding: 10px 18px;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
  background: var(--bg3);
}

.outros-total-badge {
  margin-left: auto;
  font-size: 11px;
  font-weight: 600;
  color: #ffa657;
  background: rgba(255,166,87,0.1);
  border: 1px solid rgba(255,166,87,0.25);
  border-radius: 4px;
  padding: 2px 8px;
}

.outros-table-scroll {
  overflow-x: auto;
  overflow-y: auto;
  max-height: 420px;
}

.outros-tbl {
  min-width: 100%;
  border-collapse: collapse;
  font-size: 12px;
}
.outros-tbl th {
  background: var(--bg3);
  color: var(--text-mute);
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  padding: 7px 10px;
  white-space: nowrap;
  position: sticky;
  top: 0;
  z-index: 1;
  border-bottom: 1px solid var(--border);
}
.outros-tbl td {
  padding: 6px 10px;
  border-bottom: 1px solid var(--border-dk, #21262d);
  white-space: nowrap;
}
.outros-tbl tfoot td {
  background: var(--bg3);
  border-top: 1px solid var(--border);
}

.outros-th-desc, .outros-td-desc {
  text-align: left;
  position: sticky;
  left: 0;
  z-index: 2;
  background: var(--bg2);
  min-width: 180px;
  max-width: 240px;
  color: var(--text);
}
.outros-tbl tfoot .outros-td-desc {
  background: var(--bg3);
}
.outros-tbl th.outros-th-desc { background: var(--bg3); z-index: 3; }
.outros-tbl td.outros-td-desc { z-index: 2; }

.outros-th-mes  { text-align: right; min-width: 96px; }
.outros-td-val  { text-align: right; color: var(--text-dim); }
.outros-td-val.td-neg { color: #f85149; }
.outros-th-total, .outros-td-total {
  text-align: right;
  min-width: 100px;
  position: sticky;
  right: 0;
  background: var(--bg2);
  border-left: 1px solid var(--border);
}
.outros-tbl tfoot .outros-td-total { background: var(--bg3); }
.outros-tbl th.outros-th-total { background: var(--bg3); z-index: 3; }
.outros-tbl td.outros-td-total { z-index: 2; }

.outros-empty {
  padding: 48px 24px;
  text-align: center;
  color: var(--text-mute);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}

/* ─── Modal de Configurações ────────────────────────────────────────────────── */
.modal-overlay {
  position: fixed; inset: 0; z-index: 200;
  background: rgba(0,0,0,0.55);
  display: flex; align-items: flex-start; justify-content: center;
  padding: 60px 16px; overflow-y: auto;
}
.modal-box {
  background: var(--bg2);
  border: 1px solid var(--border-lt);
  border-radius: 10px;
  width: 100%; max-width: 560px;
  box-shadow: 0 16px 48px rgba(0,0,0,0.5);
}
.modal-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 18px; border-bottom: 1px solid var(--border);
  font-size: 14px; font-weight: 700; color: var(--text);
}

/* ─── Matriz de sensibilidade ─── */
.mtz-modal { max-width: min(1180px, 96vw); padding: 16px 18px; max-height: 92vh; overflow: auto; }
.mtz-legenda { font-size: 11px; color: var(--text-mute); margin: 6px 0 14px; line-height: 1.5; }
.mtz-carregando { padding: 30px; text-align: center; color: var(--text-mute); }
.mtz-conteudo { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 18px; }
.mtz-card { min-width: 0; overflow-x: auto; }
.mtz-wrap { display: flex; align-items: stretch; gap: 4px; }
.mtz-varcol {
  writing-mode: vertical-rl; transform: rotate(180deg);
  text-align: center; font-size: 10px; font-weight: 700; color: var(--text-mute);
  text-transform: uppercase; letter-spacing: .04em; padding: 22px 0 4px;
}
.mtz-tblbox { flex: 1; min-width: 0; }
.mtz-varlin {
  text-align: center; font-size: 10px; font-weight: 700; color: var(--text-mute);
  text-transform: uppercase; letter-spacing: .04em; margin-bottom: 3px;
}
.mtz-tbl { border-collapse: collapse; width: 100%; font-size: 11px; }
.mtz-tbl th, .mtz-tbl td {
  border: 1px solid var(--border); padding: 4px 6px; text-align: center; white-space: nowrap;
}
.mtz-tbl thead th { background: var(--bg3); color: var(--text); font-weight: 700; }
.mtz-tbl .mtz-corner { background: var(--bg2); text-align: left; font-size: 10px; color: var(--text-mute); }
.mtz-tbl .mtz-rowh { background: var(--bg3); color: var(--text); font-weight: 700; }
.mtz-tbl td { color: var(--text); font-variant-numeric: tabular-nums; }
.mtz-tbl .mtz-zero-col { border-left: 2px solid var(--text-mute); border-right: 2px solid var(--text-mute); }
.mtz-tbl tr.mtz-zero-lin th, .mtz-tbl tr.mtz-zero-lin td { border-top: 2px solid var(--text-mute); border-bottom: 2px solid var(--text-mute); }
.mtz-tbl td.mtz-base { outline: 2px solid var(--accent, #58a6ff); outline-offset: -2px; font-weight: 700; }
@media (max-width: 720px) { .mtz-conteudo { grid-template-columns: 1fr; } }

/* Impressão da matriz: só o modal, 1 matriz por página A4 paisagem, escalada */
@media print {
  html:has(body.printing-matriz) { height: auto !important; overflow: hidden !important; }
  body.printing-matriz { background: #fff; margin: 0 !important; padding: 0 !important; height: auto !important; overflow: hidden !important; }
  body.printing-matriz > *:not(#mtz-modal-overlay) { display: none !important; }
  body.printing-matriz #mtz-modal-overlay {
    position: static; display: block; background: none; padding: 0; margin: 0; inset: auto; height: auto;
  }
  body.printing-matriz .mtz-modal {
    max-width: none; width: auto; max-height: none; overflow: visible;
    background: #fff; border: none; box-shadow: none; padding: 0; margin: 0;
  }
  body.printing-matriz .proj-head, body.printing-matriz .mtz-legenda { display: none !important; }
  body.printing-matriz .mtz-conteudo { display: block !important; }
  body.printing-matriz .mtz-card {
    overflow: visible; display: flex; align-items: center; justify-content: center;
    width: 100%; height: calc(210mm - 18mm); box-sizing: border-box;
  }
  /* quebra ANTES de cada matriz, menos a 1ª — evita a página em branco final */
  body.printing-matriz .mtz-card + .mtz-card { break-before: page; page-break-before: always; }
  body.printing-matriz .mtz-wrap {
    transform: scale(var(--mtz-scale, 1)); transform-origin: center; overflow: visible;
  }
  /* preto no branco para nitidez do heatmap na impressão */
  body.printing-matriz .mtz-tbl th, body.printing-matriz .mtz-tbl td {
    border-color: #999; color: #111; -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  body.printing-matriz .mtz-tbl thead th, body.printing-matriz .mtz-tbl .mtz-rowh { background: #eee; }
  body.printing-matriz .mtz-varcol, body.printing-matriz .mtz-varlin, body.printing-matriz .mtz-corner { color: #333; }
}
.modal-x { background: none; border: none; color: var(--text-mute); font-size: 16px; cursor: pointer; }
.modal-x:hover { color: var(--text); }
.modal-body { padding: 16px 18px; display: flex; flex-direction: column; gap: 18px; }
.modal-foot { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 18px; border-top: 1px solid var(--border); }

.cfg-sec-h { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.4px; color: var(--blue-lt); margin-bottom: 8px; }
.cfg-toggle { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text); cursor: pointer; }
.cfg-eixos { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
@media (max-width: 520px) { .cfg-eixos { grid-template-columns: 1fr; } }
.cfg-eixo { background: var(--bg); border: 1px solid var(--border); border-radius: 6px; padding: 10px; }
.cfg-eixo-h { font-size: 11px; font-weight: 600; color: var(--text-mute); margin-bottom: 6px; }
.cfg-eixo .inp-select { margin-bottom: 8px; }
.cfg-row3 { display: flex; flex-direction: column; gap: 5px; }
.cfg-row3 label, .cfg-meta { display: flex; align-items: center; justify-content: space-between; gap: 6px; font-size: 11.5px; color: var(--text-mute); }
.cfg-row3 label .inp, .cfg-meta .inp { width: 70px; text-align: right; }
.cfg-row3 label span, .cfg-meta span span { color: var(--text-dim); font-size: 11px; }
.cfg-hint { font-size: 10.5px; color: var(--text-dim); margin-top: 8px; line-height: 1.4; }
.cfg-hint code { background: var(--bg); padding: 1px 4px; border-radius: 3px; color: var(--text-mute); }
.cfg-metas { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px; }
@media (max-width: 520px) { .cfg-metas { grid-template-columns: 1fr; } }
.cfg-meta { color: var(--text); }
.cfg-meta > span { display: inline-flex; align-items: center; gap: 4px; }

/* ─── Modal GeoCuritiba (mapa do lote) ──────────────────────────────────────── */
.geo-img-wrap { width: 100%; background: var(--bg); position: relative; line-height: 0; }
.geo-img-wrap img { width: 100%; height: auto; display: block; }
.geo-overlay-svg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; }
.geo-msg { padding: 40px 24px; text-align: center; color: var(--text-mute); font-size: 13px; line-height: 1.5; }
.geo-msg small { color: var(--text-dim); font-size: 11px; }

/* ─── Marcos temporais (0 / L / O / C) ──────────────────────────────────────── */
.marco-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  font-size: 9px;
  font-weight: 700;
  margin-left: 5px;
  vertical-align: middle;
  cursor: default;
  line-height: 1;
}
.marco-0 { background: rgba(125,133,144,0.22); color: #adbac7; border: 1px solid rgba(125,133,144,0.55); }
.marco-l { background: rgba(255,166,87,0.18);  color: #ffa657; border: 1px solid rgba(255,166,87,0.55); }
.marco-o { background: rgba(56,139,253,0.18);  color: #79c0ff; border: 1px solid rgba(56,139,253,0.55); }
.marco-f { background: rgba(210,153,34,0.18);  color: #e3b341; border: 1px solid rgba(210,153,34,0.55); }
.marco-c { background: rgba(86,211,100,0.18);  color: #56d364; border: 1px solid rgba(86,211,100,0.55); }

.marcos-legenda {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 16px;
  padding: 6px 14px;
  font-size: 10.5px;
  color: var(--text-mute);
  background: var(--bg);
  border-bottom: 1px solid var(--border);
}
.marcos-legenda-item {
  display: inline-flex;
  align-items: center;
  gap: 2px;
}
.marcos-legenda-item .marco-badge { margin-left: 0; margin-right: 4px; }
/* Variante da legenda quando fica sob um gráfico (One-pager / Resultados) */
.marcos-legenda-chart { padding: 0 10px 8px; margin: 0; gap: 8px 14px; font-size: 10px; }

/* Imagens do terreno/empreendimento */
.terreno-imgs {
  display: flex;
  gap: 10px;
}
.terreno-img-slot {
  position: relative;
  flex: 1;
  min-height: 110px;
  max-height: 150px;
  border: 1px dashed var(--border-lt);
  border-radius: 6px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  overflow: hidden;
  background: var(--bg);
  transition: border-color 0.15s, background 0.15s;
}
.terreno-img-slot:hover { border-color: var(--blue); background: rgba(56,139,253,0.05); }
.terreno-img-slot img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.terreno-img-cheio { border-style: solid; }
.terreno-img-add {
  color: var(--text-dim);
  font-size: 20px;
  text-align: center;
  line-height: 1.1;
}
.terreno-img-add small { font-size: 10px; }
.terreno-img-rm {
  position: absolute;
  top: 4px;
  right: 4px;
  width: 20px;
  height: 20px;
  border: none;
  border-radius: 4px;
  background: rgba(0,0,0,0.65);
  color: #f85149;
  font-size: 11px;
  cursor: pointer;
}
.terreno-img-rm:hover { background: rgba(248,81,73,0.85); color: #fff; }

/* Select com a mesma cara dos inputs */
.inp-select {
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath fill='%237d8590' d='M0 0l4 5 4-5z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 8px center;
  padding-right: 22px;
  cursor: pointer;
  width: 100%;
}
.inp-select option { background: var(--bg2); color: var(--text); }

/* Lista editável de desencaixes */
.oc-lista-tbl { width: 100%; border-collapse: collapse; font-size: 12px; }
.oc-lista-tbl th {
  background: var(--bg3);
  color: var(--text-mute);
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  padding: 7px 8px;
  border-bottom: 1px solid var(--border);
  white-space: nowrap;
}
.oc-lista-tbl td {
  padding: 5px 8px;
  border-bottom: 1px solid #21262d;
  vertical-align: middle;
}
.oc-lista-tbl tr:hover td { background: rgba(56,139,253,0.04); }
/* Reordenação por arrastar (handle ⠿) */
.oc-drag-td { text-align: center; padding: 0 2px !important; }
.oc-drag {
  cursor: grab; color: var(--text-dim); font-size: 13px; user-select: none;
  display: inline-block; padding: 2px 4px;
}
.oc-drag:hover { color: var(--text); }
.oc-drag:active { cursor: grabbing; }
tr.oc-arrastando td { opacity: 0.45; }
tr.oc-drop-antes td  { border-top: 2px solid var(--blue) !important; }
tr.oc-drop-depois td { border-bottom: 2px solid var(--blue) !important; }
/* Mesmo arraste na lista de Classes de Desencaixes (Administração), que é de
   DIVs e não de linhas de tabela — daí as marcas próprias. box-shadow inset em
   vez de borda para a linha não "pular" ao aparecer a marca. */
.adm-grupo-linha.adm-arrastando { opacity: 0.45; }
.adm-grupo-linha.adm-drop-antes  { box-shadow: inset 0 2px 0 var(--blue); }
.adm-grupo-linha.adm-drop-depois { box-shadow: inset 0 -2px 0 var(--blue); }
.inp-calc-txt {
  color: var(--orange, #ffa657);
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  font-size: 12px;
}
/* Tipologias: textos calculados longos (ex.: sinal com a corretagem "na cabeça")
   quebram para a linha de baixo em vez de sobrepor o rótulo (22/07/2026).
   Pega-ratão: o .prow-label global tem flex:1 (basis 0) — sem espaço livre ele
   fica com LARGURA ZERO e o texto pinta por baixo do value (que tem shrink 0).
   Aqui o rótulo ganha base real e o value pode encolher + quebrar linha. */
.fase-card .prow:not(.prow-stack) .prow-label { flex: 1 1 90px; min-width: 72px; }
/* ⚠ no .prow-stack (flex COLUMN) o flex-basis vira ALTURA — rótulo fica auto */
.fase-card .prow-stack .prow-label { flex: 0 0 auto; }
.fase-card .prow-value { flex-shrink: 1; min-width: 0; flex-wrap: wrap; justify-content: flex-end; }
.fase-card .inp-calc-txt { white-space: normal; text-align: right; }

/* Botão de remoção compacto */
.btn-icon-sm {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border-radius: 4px;
  border: none;
  cursor: pointer;
  font-size: 10px;
  transition: background 0.15s;
}
.btn-danger-sm {
  background: rgba(248,81,73,0.12);
  color: #f85149;
}
.btn-danger-sm:hover {
  background: rgba(248,81,73,0.28);
}

/* ─── Barra fixa de KPIs ────────────────────────────────────────────────────── */
.kpi-bar {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 90;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 24px;
  padding: 8px 24px;
  background: rgba(13, 17, 23, 0.92);
  backdrop-filter: blur(8px);
  border-top: 1px solid var(--border);
}
.kpi-bar-item {
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.kpi-bar-label {
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.6px;
  color: var(--text-mute);
}
.kpi-bar-valor {
  font-size: 15px;
  font-weight: 700;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.kpi-bar-valor.kpib-pos { color: #56d364; }
.kpi-bar-valor.kpib-tol { color: #e3b341; }
.kpi-bar-valor.kpib-neg { color: #f85149; }
.kpi-bar-sep {
  width: 1px;
  height: 22px;
  background: var(--border);
}
/* Espaço para o conteúdo não ficar atrás da barra */
body { padding-bottom: 52px; }

/* ─── Indicador de alertas ──────────────────────────────────────────────────── */
.alert-indicator { position: relative; }
.alert-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 10px;
  font-size: 12px;
  font-weight: 600;
  color: #e3b341;
  background: rgba(227,179,65,0.1);
  border: 1px solid rgba(227,179,65,0.35);
  border-radius: 6px;
  cursor: pointer;
  transition: background 0.15s;
}
.alert-btn:hover { background: rgba(227,179,65,0.22); }
#alert-count {
  background: #e3b341;
  color: #0d1117;
  border-radius: 8px;
  font-size: 10px;
  font-weight: 700;
  padding: 0 5px;
  min-width: 16px;
  text-align: center;
}
.alert-dropdown {
  display: none;
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  min-width: 340px;
  max-width: 440px;
  background: var(--bg2);
  border: 1px solid var(--border-lt);
  border-radius: 8px;
  box-shadow: 0 8px 28px rgba(0,0,0,0.5);
  z-index: 200;
  overflow: hidden;
}
.alert-dropdown.open { display: block; }
.alert-item {
  display: block;
  width: 100%;
  text-align: left;
  padding: 9px 14px;
  font-size: 12px;
  color: var(--text);
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--border);
  cursor: pointer;
  transition: background 0.12s;
}
.alert-item:last-child { border-bottom: none; }
.alert-item:hover { background: var(--bg3); }

/* Destaque temporário do campo com problema */
.alert-flash {
  animation: alertFlash 2.5s ease-out;
}
@keyframes alertFlash {
  0%, 60% { box-shadow: 0 0 0 3px rgba(227,179,65,0.55); border-color: #e3b341 !important; }
  100%    { box-shadow: none; }
}

/* ─── Novidades (sininho 🔔) ─────────────────────────────────────────────────── */
/* Distinto do ⚠ de alertas DE PROPÓSITO: aquele é do cenário aberto (laranja,
   muda ao trocar de projeto), este é do aplicativo (neutro, igual para todos).
   Fica junto da barra do usuário — assunto de conta, não de cenário. */
.nov-wrap { position: relative; }
.nov-btn {
  position: relative;
  padding: 5px 9px;
  font-size: 14px;
  line-height: 1;
  color: var(--text-mute);
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  cursor: pointer;
  transition: all 0.15s;
}
.nov-btn:hover { border-color: var(--border-lt); color: var(--text); }
.nov-btn.crit { border-color: var(--red); }
.nov-badge {
  position: absolute;
  top: -7px; right: -7px;
  min-width: 18px; height: 18px;
  padding: 0 5px;
  background: var(--blue);
  color: #fff;
  border: 2px solid var(--bg2);
  border-radius: 9px;
  font-size: 10.5px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* Vermelho + pulso SÓ com crítico não confirmado: neste app o vermelho já
   significa "número ruim", então é reservado ao que exige parar e olhar. */
.nov-badge.crit { background: var(--red); animation: novPulso 2s ease-out 3; }
@keyframes novPulso {
  0%   { box-shadow: 0 0 0 0 rgba(207,34,46,0.65); }
  70%  { box-shadow: 0 0 0 7px rgba(207,34,46,0); }
  100% { box-shadow: 0 0 0 0 rgba(207,34,46,0); }
}
.nov-drop {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  width: 390px;
  max-width: calc(100vw - 32px);
  background: var(--bg2);
  border: 1px solid var(--border-lt);
  border-radius: 8px;
  box-shadow: var(--shadow);
  z-index: 200;
  overflow: hidden;
}
.nov-head {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
}
.nov-head h4 {
  font-size: 11px; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.06em; color: var(--text-mute);
}
.nov-btn-lidas { padding: 3px 8px; font-size: 11px; }
.nov-lista { max-height: 410px; overflow-y: auto; }
.nov-item { padding: 11px 12px; border-bottom: 1px solid var(--border); }
.nov-item:last-child { border-bottom: none; }
.nov-item.novo { background: rgba(56,139,253,0.07); }
.nov-item.critico { border-left: 3px solid var(--yellow); }
.nov-l1 { display: flex; align-items: center; gap: 6px; margin-bottom: 5px; flex-wrap: wrap; }
.nov-chip { font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 10px; white-space: nowrap; }
.nov-chip-nov  { background: rgba(56,139,253,0.16); color: var(--blue-lt); }
.nov-chip-fix  { background: rgba(63,185,80,0.16);  color: var(--green-lt); }
.nov-chip-reg  { background: rgba(210,153,34,0.18); color: var(--yellow-lt); }
.nov-chip-dica { background: var(--bg4); color: var(--text-mute); }
.nov-chip-crit { background: rgba(210,153,34,0.22); color: var(--yellow-lt); border: 1px solid var(--yellow); }
.nov-data { font-size: 10.5px; color: var(--text-dim); margin-left: auto; }
.nov-ponto { width: 7px; height: 7px; border-radius: 50%; background: var(--blue); flex-shrink: 0; }
.nov-tit { font-size: 12.5px; font-weight: 600; margin-bottom: 3px; line-height: 1.35; }
.nov-corpo { font-size: 11.5px; color: var(--text-mute); line-height: 1.45; }
.nov-ver { font-size: 10.5px; color: var(--text-dim); margin-top: 5px; }
.nov-link { color: var(--blue-lt); cursor: pointer; font-weight: 600; }
.nov-link:hover { text-decoration: underline; }
.nov-vazio { padding: 22px 14px; text-align: center; font-size: 12px; color: var(--text-dim); }

/* Modal do crítico (login) — só para o que muda número de cenário salvo */
.nov-modal { max-width: 540px; width: 100%; padding: 0; overflow: hidden; }
.nov-modal-topo {
  display: flex; align-items: center; gap: 9px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--border);
  background: rgba(210,153,34,0.12);
}
.nov-modal-topo h3 { font-size: 14px; font-weight: 700; }
.nov-modal-ico { font-size: 19px; }
.nov-modal-corpo { padding: 16px 18px; font-size: 12.5px; line-height: 1.6; }
.nov-modal-corpo p + p { margin-top: 9px; }
.nov-modal-tit { font-weight: 600; }
.nov-modal-rod {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 11px 18px;
  border-top: 1px solid var(--border);
  background: var(--bg3);
}
.nov-modal-obs { font-size: 10.5px; color: var(--text-dim); }
.nov-modal-acoes { display: flex; gap: 8px; }

/* Formulário de Novidades no painel Administração (superadmin) */
.adm-nov-form {
  margin-top: 12px; padding: 12px;
  background: var(--bg3);
  border: 1px dashed var(--border-lt);
  border-radius: var(--radius);
}
.adm-nov-grid {
  display: grid; gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
}
.adm-nov-form .fld label {
  display: block; margin-bottom: 4px;
  font-size: 10px; text-transform: uppercase; letter-spacing: 0.05em;
  color: var(--text-mute);
}
.adm-nov-form .inp, .adm-nov-form textarea.inp {
  width: 100%; padding: 5px 8px;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border); border-radius: var(--radius);
  font-size: 12px; font-family: inherit;
}
.adm-nov-form textarea.inp { resize: vertical; }
.adm-nov-chks { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
.adm-nov-chk { display: flex; align-items: flex-start; gap: 7px; font-size: 12px; cursor: pointer; }
.adm-nov-chk small { color: var(--text-mute); font-size: 11px; }

/* ─── Status de auto-save ───────────────────────────────────────────────────── */
.save-status {
  font-size: 11px;
  color: var(--text-dim);
  padding: 5px 8px;
  white-space: nowrap;
  transition: color 0.3s;
}
.save-status.saving { color: #e3b341; }

/* ─── Validação de inputs ───────────────────────────────────────────────────── */
.inp.inp-invalid, input.inp-invalid {
  border-color: #f85149 !important;
  box-shadow: 0 0 0 2px rgba(248,81,73,0.25);
}

/* ─── Tipografia: contraste dos valores e sufixos discretos ─────────────────── */
.inp {
  color: var(--blue-lt);      /* azul = dado de entrada (legenda) */
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.inp.inp-calc {
  font-weight: 600;
}
.prow-suffix, .prow-prefix {
  font-size: 9.5px;
  color: var(--text-dim);
  letter-spacing: 0.2px;
}
.prow-label {
  font-size: 11.5px;
}

/* Hint dentro de cards */
.pcard-hint {
  font-size: 10.5px;
  color: var(--text-dim);
  margin-bottom: 10px;
  line-height: 1.4;
}

/* Badge de unidades no header da fase */
/* VGV bruto (todas as unidades, incl. permuta) — neutro; o VGVL fica no verde padrão */
.fase-badge-vgv {
  color: var(--text-mute);
  background: rgba(125,133,144,0.12);
}
.fase-badge-un {
  background: rgba(56,139,253,0.12);
  color: #79c0ff;
  border: 1px solid rgba(56,139,253,0.3);
}

/* ─── Fluxo de caixa detalhado ──────────────────────────────────────────────── */
/* Título + Exportar Excel acompanham a rolagem (pedido do usuário, 13/08/2026):
   a tabela é longa e o botão sumia de vista. Fica logo abaixo do cabeçalho fixo;
   as sub-abas grudam abaixo dele (--fluxo-tb-h medido em syncAppTopVar). */
.tab-toolbar-fluxo {
  position: sticky;
  top: var(--app-top-h, 130px);
  z-index: 45;
  background: var(--bg);
  margin-bottom: 0;
  padding: 8px 0 4px;
}
.fluxo-subtabs {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
  margin-bottom: 0;
  border-bottom: 1px solid var(--border);
  padding: 8px 0;
  position: sticky;
  top: calc(var(--app-top-h, 130px) + var(--fluxo-tb-h, 40px));
  z-index: 40;
  background: var(--bg);
}
.fluxo-subtab {
  padding: 6px 14px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--bg2);
  color: var(--text-mute);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.15s;
}
.fluxo-subtab:hover { border-color: var(--border-lt); color: var(--text); }
.fluxo-subtab.active { background: var(--blue); color: #fff; border-color: var(--blue); }

.fluxo-visao-toggle { margin-left: auto; display: flex; gap: 4px; }
.fluxo-visao {
  padding: 6px 12px;
  border: 1px solid var(--border);
  border-radius: 6px;
  background: var(--bg2);
  color: var(--text-mute);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.15s;
}
.fluxo-visao:hover { border-color: var(--border-lt); color: var(--text); }
.fluxo-visao.active { background: var(--bg4); color: var(--text); border-color: var(--border-lt); }

/* Nota explicativa das colunas: fica ABAIXO da tabela e da legenda dos marcos
   (decisão do usuário, 13/08/2026 — ocupava meia tela no cabeçalho e empurrava
   a tabela para baixo). Texto de referência: consulta-se quando precisa. */
.fluxo-det-legenda {
  font-size: 11px;
  color: var(--text-dim);
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid var(--border);
  line-height: 1.4;
}
/* Rodapé (marcos + nota) DENTRO da área de rolagem, abaixo da última linha:
   deixa a aba caber na tela com UMA só rolagem. Ancorado à esquerda para não
   deslizar quando a tabela (larga) rola na horizontal — mesma técnica da
   coluna congelada. A largura é a da janela visível, não a da tabela. */
.fluxo-rodape-scroll {
  position: sticky;
  left: 0;
  width: 100%;
  padding: 0 2px 4px;
}
/* O respiro inferior da aba é dispensável aqui: a área de rolagem encosta na
   faixa de KPIs (que já tem os seus 52px reservados no body) */
#tab-fluxo { padding-bottom: 0; }
/* Tabela do fluxo: rolagem interna (vertical + horizontal) com cabeçalho fixo.
   A altura é calculada para a aba INTEIRA caber na tela — só esta área rola
   (13/08: com os textos fora dela a página rolava 190px por conta própria, as
   barras fixas "pulavam" antes de grudar e a roda do mouse fazia coisas
   diferentes dentro e fora da tabela). Os 119px = respiro do topo da aba (20)
   + sub-abas (47) + faixa de KPIs (52); o cabeçalho e a toolbar entram pelas
   variáveis, por isso o cálculo acompanha telas e zooms diferentes. */
#fluxo-det-tabela .tbl-scroll {
  max-height: calc(100vh - var(--app-top-h, 130px) - var(--fluxo-tb-h, 40px) - 119px);
  overflow: auto;
}
.tbl-fluxo-det { font-size: 11px; }
.tbl-fluxo-det thead th {
  position: sticky;
  top: 0;
  z-index: 30;
}
.tbl-fluxo-det th { font-size: 9.5px; line-height: 1.2; text-align: right; padding: 6px 7px; white-space: nowrap; background: var(--bg3); }
.tbl-fluxo-det th small { color: var(--text-dim); font-weight: 400; }
.tbl-fluxo-det td { padding: 4px 7px; text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.tbl-fluxo-det th:nth-child(1), .tbl-fluxo-det td:nth-child(1),
.tbl-fluxo-det th:nth-child(2), .tbl-fluxo-det td:nth-child(2) { text-align: left; }
.tbl-fluxo-det .fx-m2  { color: var(--blue-lt); }
.tbl-fluxo-det .fx-pct { color: var(--text-mute); }
/* Bloco "Fluxo de Caixa" destacado ao final das tabelas (rola junto) */
.tbl-fluxo-det th.fx-sep, .tbl-fluxo-det td.fx-sep { border-left: 2px solid var(--blue); }
/* Cabeçalho opaco (azul sobre bg3) para não deixar linhas vazarem na rolagem */
.tbl-fluxo-det thead th.fx-sep {
  background: linear-gradient(rgba(56,139,253,0.18), rgba(56,139,253,0.18)), var(--bg3);
}

/* ─── Aba Resumo (one-pager) ────────────────────────────────────────────────── */
.resumo-header { margin-bottom: 14px; display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.resumo-header h2 { font-size: 16px; color: var(--text); }
.resumo-sub { font-size: 11px; color: var(--text-dim); margin-top: 2px; }
.resumo-visao-tabs { display: flex; gap: 4px; flex-wrap: wrap; }
.resumo-header-acoes { display: flex; align-items: flex-start; gap: 10px; flex-wrap: wrap; }
#resumo-print-btn { white-space: nowrap; }

.resumo-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px;
  align-items: stretch;
}
@media (max-width: 1100px) { .resumo-grid { grid-template-columns: minmax(0, 1fr); } }

.resumo-col { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
/* Cards com gráfico crescem para que as 3 colunas terminem na mesma altura */
.resumo-col .rsm-card:has(.rsm-chart) { flex: 1 1 0; display: flex; flex-direction: column; }
.resumo-col .rsm-card:has(.rsm-chart) .rsm-chart { flex: 1 1 auto; }
/* Tornado compacto no topo das sensibilidades (layout 4.1, 11/08/2026): 2 barras
   leem bem baixinho e não disputam altura com os 4 gráficos de sensibilidade;
   o gráfico do Fluxo de Caixa (coluna 2) absorve a altura liberada */
.resumo-col .rsm-card.rsm-card-tornado { flex: 0 0 auto; }
.resumo-col .rsm-card.rsm-card-tornado .rsm-chart { flex: 0 0 auto; height: 130px; }
/* Fluxo de Caixa (coluna 2) cresce até um teto — altura demais exagera; abaixo
   do teto a coluna 2 pode terminar antes das vizinhas (decisão do usuário 11/08) */
.resumo-col .rsm-card.rsm-card-fluxo { max-height: 490px; }

.rsm-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 8px;
  overflow: hidden;
}
.rsm-card-h {
  background: var(--bg3);
  color: var(--text);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  padding: 7px 12px;
  border-bottom: 1px solid var(--border);
}
.rsm-chart { padding: 8px; position: relative; }

.rsm-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  padding: 4px 12px;
  font-size: 12px;
  border-bottom: 1px solid rgba(48,54,61,0.4);
}
.rsm-row:last-child { border-bottom: none; }
.rsm-lbl { color: var(--text-mute); }
.rsm-val { color: var(--text); font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; }
.rsm-sub .rsm-lbl { padding-left: 12px; color: var(--text-dim); font-size: 11px; }
/* Item dentro de um grupo (DRE analítica por classe) — 2º nível de indentação */
.rsm-ind2 .rsm-lbl { padding-left: 26px !important; font-size: 10.5px !important; }
.rsm-dre2 .rsm-ind2 .rsm-v { font-size: 10.5px; }
.rsm-sub .rsm-val { font-weight: 500; color: var(--text-mute); font-size: 11px; }
.rsm-bold .rsm-lbl { color: var(--text); font-weight: 600; }
.rsm-bold .rsm-val { font-size: 13px; }
.rsm-head { background: rgba(56,139,253,0.06); }
.rsm-head .rsm-lbl { color: var(--blue-lt, #79c0ff); font-weight: 700; }
.rsm-head .rsm-val { font-weight: 700; }
.rsm-neg { color: #f85149 !important; }
.rsm-pos { color: #56d364 !important; }
.rsm-tol { color: #e3b341 !important; }
.rsm-card-ind .rsm-row { padding-top: 5px; padding-bottom: 5px; }

/* DRE em duas colunas: Nominal | VP (valores em R$ mil) */
.rsm-dre2 .rsm-row { display: grid; grid-template-columns: minmax(0,1fr) 72px 72px; gap: 6px; }
.rsm-link { color: var(--blue-lt); text-decoration: none; }
.rsm-link:hover { text-decoration: underline; }
.rsm-dre2 .rsm-lbl { white-space: normal; line-height: 1.2; }
.rsm-dre2 .rsm-v { text-align: right; color: var(--text); font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; font-size: 12px; }
.rsm-dre2 .rsm-vp { color: var(--text-mute); }
.rsm-dre2 .rsm-sub .rsm-v { font-weight: 500; color: var(--text-mute); font-size: 11px; }
.rsm-dre2 .rsm-sub .rsm-vp { color: var(--text-dim); }
.rsm-dre2 .rsm-bold .rsm-v { font-size: 13px; }
.rsm-dre2 .rsm-head .rsm-v { font-weight: 700; }
/* DRE: rótulos das linhas-cabeçalho em preto (sem azul), mantendo o preenchimento */
.rsm-dre2 .rsm-head .rsm-lbl { color: var(--text); }
/* DRE: mesmo destaque (preenchimento) nas linhas de Resultado */
.rsm-dre2 .rsm-hl { background: rgba(56,139,253,0.06); }
.rsm-dre2 .rsm-dre-head { background: transparent; }
.rsm-dre2 .rsm-dre-head .rsm-v { color: var(--text-mute); font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: .03em; }
/* Bloco GERENCIAL do DRE (custo de capital do empreendedor): divisória tracejada
   e re-rotulagem das colunas (Nominal|VP → Projeto|RET) */
.rsm-dre2 .rsm-dre-ger { border-top: 1px dashed var(--border); margin-top: 2px; padding-top: 7px; }
.rsm-dre2 .rsm-dre-ger .rsm-dre-ger-titulo { color: var(--blue-lt, #79c0ff); font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: .03em; }
/* DRE Analítica: coluna de Análise Vertical (base 100% escolhida no toggle) nos totais —
   width:1% + nowrap = encolhe à largura mínima necessária para o valor */
.rel-tbl .rel-av, .rel-tbl .rel-av-h { color: var(--text-mute); font-size: 10px; white-space: nowrap; width: 1%; padding-left: 4px; padding-right: 6px; }
.rel-av-sel { font-size: 11px; color: var(--text-mute); display: inline-flex; align-items: center; gap: 4px; margin-right: 8px; }
.rsm-dre-nota { padding: 6px 12px 2px; font-size: 10px; color: var(--text-dim); line-height: 1.3; }

/* Alternância da DRE do One-pager: Grupos (classes de desencaixe) × Analítica */
.rsm-dre-toggle { float: right; display: inline-flex; gap: 2px; }
.rsm-dre-vis {
  padding: 1px 8px; font-size: 9.5px; font-weight: 600; cursor: pointer; text-transform: none;
  border: 1px solid var(--border); border-radius: 4px; background: var(--bg2); color: var(--text-mute);
}
.rsm-dre-vis.active { background: var(--blue); border-color: var(--blue); color: #fff; }

.rsm-dre-tabs { display: flex; flex-wrap: wrap; gap: 3px; padding: 6px 10px; border-bottom: 1px solid var(--border); background: var(--bg); }
.rsm-dre-tab {
  padding: 3px 9px; font-size: 10.5px; font-weight: 600; cursor: pointer;
  border: 1px solid var(--border); border-radius: 4px; background: var(--bg2); color: var(--text-mute);
}
.rsm-dre-tab:hover { color: var(--text); border-color: var(--border-lt); }
.rsm-dre-tab.active { background: var(--blue); color: #fff; border-color: var(--blue); }

/* ─── Login / Auth ─────────────────────────────────────────────────────────── */
.auth-overlay {
  position: fixed; inset: 0; z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  background: var(--bg);
  padding: 20px;
}
.auth-box {
  width: 100%; max-width: 380px;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius-lg); box-shadow: var(--shadow);
  padding: 28px 26px;
}
.auth-brand {
  font-size: 16px; font-weight: 600; color: var(--text);
  text-align: center; margin-bottom: 22px;
}
.auth-brand .icon { margin-right: 6px; }
.auth-box h2 { font-size: 15px; color: var(--text); margin-bottom: 16px; }
.auth-box label {
  display: block; font-size: 12px; color: var(--text-mute);
  margin: 12px 0 5px;
}
.auth-box input {
  width: 100%; padding: 9px 11px; font-size: 13px;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border-lt); border-radius: var(--radius);
}
.auth-box input:focus { outline: none; border-color: var(--blue); }
.auth-submit { width: 100%; margin-top: 18px; padding: 9px; justify-content: center; }
.auth-link {
  display: block; text-align: center; margin-top: 14px;
  font-size: 12px; color: var(--blue-lt); text-decoration: none;
}
.auth-link:hover { text-decoration: underline; }
.auth-msg { min-height: 16px; margin-top: 10px; font-size: 12px; color: var(--text-mute); }
.auth-msg-erro { color: var(--red-lt); }
.auth-msg-ok { color: var(--green-lt); }

.auth-userbar { display: flex; align-items: center; gap: 8px; }
.auth-user-info { display: flex; flex-direction: column; line-height: 1.15; text-align: right; }
.auth-user-info #auth-user-nome { font-size: 12px; color: var(--text); }
.auth-user-role { font-size: 10px; color: var(--text-mute); }

/* ─── Empreendimentos (modal) ──────────────────────────────────────────────── */
.proj-box { width: 100%; max-width: 560px; padding: 18px 22px; }
.proj-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 14px;
}
.proj-head h2 { font-size: 15px; color: var(--text); }
.proj-toolbar { display: flex; gap: 8px; margin-bottom: 12px; }
.proj-busca {
  flex: 1; padding: 8px 11px; font-size: 13px;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border-lt); border-radius: var(--radius);
}
.proj-busca:focus { outline: none; border-color: var(--blue); }
.proj-ordem {
  padding: 8px 10px; font-size: 13px;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border-lt); border-radius: var(--radius); cursor: pointer;
}
.proj-lista { display: flex; flex-direction: column; gap: 8px; max-height: 60vh; overflow-y: auto; }
.proj-vazio { color: var(--text-mute); font-size: 13px; text-align: center; padding: 26px 10px; line-height: 1.6; }
.proj-row {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 10px 12px; background: var(--bg3); border: 1px solid var(--border);
  border-radius: var(--radius);
}
.proj-row-atual { border-color: var(--blue); }
.proj-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.proj-nome { font-size: 13px; color: var(--text); font-weight: 500; }
.proj-tag {
  font-size: 10px; color: var(--blue-lt); border: 1px solid var(--blue);
  border-radius: 4px; padding: 0 5px; margin-left: 4px; vertical-align: middle;
}
.proj-data { font-size: 11px; color: var(--text-mute); }
.proj-acoes { display: flex; gap: 6px; flex-shrink: 0; }
.proj-foot { margin-top: 14px; display: flex; justify-content: flex-end; }

/* ─── Logomarca no topo ────────────────────────────────────────────────────── */
.app-logo:empty { display: none; }
.app-logo img { height: 26px; width: auto; vertical-align: middle; margin-right: 8px; border-radius: 3px; }

/* ─── Administração (modal) ────────────────────────────────────────────────── */
.admin-box { width: 100%; max-width: 880px; padding: 24px 26px; }
/* Menu lateral (13/08/2026): o painel tinha 9 seções numa rolagem só. Agora a
   navegação fica fixa à esquerda e SÓ o conteúdo rola — a rolagem passou a ser
   a de um tema, não a do painel inteiro. */
.admin-body { max-height: 72vh; overflow: hidden; }
.adm-layout { display: flex; gap: 18px; align-items: flex-start; max-height: 72vh; }
.adm-nav {
  display: flex; flex-direction: column; gap: 2px;
  width: 210px; flex-shrink: 0;
  padding-right: 14px;
  border-right: 1px solid var(--border);
}
.adm-nav-item {
  display: flex; align-items: center; gap: 9px;
  padding: 8px 10px;
  background: transparent; border: 1px solid transparent; border-radius: var(--radius);
  color: var(--text-mute); font-size: 12.5px; font-weight: 600; text-align: left;
  cursor: pointer; transition: all 0.15s; font-family: inherit;
}
.adm-nav-item:hover { background: var(--bg3); color: var(--text); }
.adm-nav-item.active { background: var(--blue); color: #fff; border-color: var(--blue); }
.adm-nav-ico { font-size: 14px; line-height: 1; }
.adm-conteudo {
  flex: 1; min-width: 0;
  max-height: 72vh; overflow-y: auto;
  padding-right: 4px;
}
/* O último bloco do tema não precisa da margem inferior da seção */
.adm-conteudo .adm-sec:last-child { margin-bottom: 4px; }

@media (max-width: 720px) {
  /* Em tela estreita o menu vira uma faixa horizontal rolável no topo */
  .adm-layout { flex-direction: column; gap: 12px; }
  .adm-nav {
    flex-direction: row; width: 100%; overflow-x: auto;
    padding: 0 0 10px; border-right: none; border-bottom: 1px solid var(--border);
  }
  .adm-nav-item { white-space: nowrap; }
  .adm-conteudo { max-height: 56vh; width: 100%; }
}
.adm-role {
  padding: 5px 8px; font-size: 12px; flex-shrink: 0;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border-lt); border-radius: var(--radius); cursor: pointer;
}
.adm-sec { margin-bottom: 22px; }
.adm-sec h3 { font-size: 13px; color: var(--text); margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
.adm-count { font-size: 11px; color: var(--text-mute); background: var(--bg3); border-radius: 10px; padding: 1px 8px; }
.adm-sec label { display: block; font-size: 12px; color: var(--text-mute); margin: 12px 0 5px; }
.adm-sec input[type=text], .adm-sec input[type=number] {
  width: 100%; padding: 8px 11px; font-size: 13px;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border-lt); border-radius: var(--radius);
}
.adm-sec input:focus { outline: none; border-color: var(--blue); }
.adm-acoes { display: flex; align-items: center; gap: 12px; margin-top: 14px; }
.adm-acoes .auth-msg { margin-top: 0; }
.adm-logo-row { display: flex; align-items: center; gap: 14px; margin-bottom: 6px; }
.adm-logo-prev {
  width: 96px; height: 60px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  background: var(--bg3); border: 1px solid var(--border); border-radius: var(--radius);
  font-size: 11px; color: var(--text-mute); overflow: hidden;
}
.adm-logo-prev img { max-width: 100%; max-height: 100%; object-fit: contain; }
.adm-users { display: flex; flex-direction: column; gap: 6px; }
.adm-user {
  display: flex; align-items: center; gap: 12px;
  padding: 9px 12px; background: var(--bg3);
  border: 1px solid var(--border); border-radius: var(--radius);
}
.adm-user-info { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
.adm-user-nome { font-size: 13px; color: var(--text); }
.adm-user-mail { font-size: 11px; color: var(--text-mute); }
.adm-badge { font-size: 10px; padding: 2px 8px; border-radius: 4px; border: 1px solid; }
.adm-badge-superadmin { color: var(--purple); border-color: var(--purple); }
.adm-badge-admin { color: var(--blue-lt); border-color: var(--blue); }
.adm-badge-member { color: var(--text-mute); border-color: var(--border-lt); }
.adm-switch { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--text-mute); cursor: pointer; }
.adm-invite { display: flex; gap: 8px; margin-top: 12px; }
.adm-invite-col { flex-direction: column; }
.adm-invite input {
  flex: 1; padding: 8px 11px; font-size: 13px;
  background: var(--bg); color: var(--text);
  border: 1px solid var(--border-lt); border-radius: var(--radius);
}
.adm-invite input:focus { outline: none; border-color: var(--blue); }
.adm-invite button { flex-shrink: 0; }
.adm-del { flex-shrink: 0; background: transparent; color: var(--red-lt); border: 1px solid var(--red); }
.adm-del:hover { background: var(--red); color: #fff; }

/* ─── Scrollbar ────────────────────────────────────────────────────────────── */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: var(--bg); }
::-webkit-scrollbar-thumb { background: var(--bg4); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--blue); }

/* ─── Impressão / PDF do Resumo (1 página A4 paisagem) ────────────────────────── */
@media print {
  @page { size: A4 landscape; margin: 8mm; }
  .onboard-banner { display: none !important; }
  /* Evita páginas extras: nada além do Resumo escalado contribui para a altura */
  html, body.printing-resumo { height: auto !important; overflow: hidden !important; }
  body.printing-resumo { margin: 0 !important; padding: 0 !important; }
  /* Esconde o "cromo" do app e as demais abas; mantém só o Resumo */
  body.printing-resumo .app-top,
  body.printing-resumo .kpi-bar,
  body.printing-resumo #resumo-print-btn,
  body.printing-resumo .resumo-visao-tabs,
  body.printing-resumo .rsm-dre-toggle,
  body.printing-resumo .tab-pane:not(#tab-resumo) { display: none !important; }
  body.printing-resumo #tab-resumo {
    display: block !important; height: var(--print-h); overflow: hidden;
    padding: 0 !important; margin: 0 !important;
  }
  body.printing-resumo #resumo-root {
    transform: scale(var(--print-scale, 1)); transform-origin: top left;
  }
  /* Preserva cores (margens, critérios, gráficos) na impressão */
  body.printing-resumo, body.printing-resumo * {
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  body.printing-resumo .rsm-card { break-inside: avoid; }

  /* ── Aba Resultados (A4 paisagem, múltiplas páginas) ── */
  html, body.printing-resultados { height: auto !important; }
  body.printing-resultados { margin: 0 !important; padding: 0 !important; }
  body.printing-resultados .app-top,
  body.printing-resultados .kpi-bar,
  body.printing-resultados #resultados-print-btn,
  body.printing-resultados .tab-pane:not(#tab-resultados) { display: none !important; }
  body.printing-resultados #tab-resultados { display: block !important; }
  body.printing-resultados, body.printing-resultados * {
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  body.printing-resultados .kpi-card,
  body.printing-resultados .chart-card,
  body.printing-resultados .section-card,
  body.printing-resultados tr { break-inside: avoid; }

  /* ── Impressão genérica de aba (A4 paisagem, múltiplas páginas) ── */
  html, body.printing-aba { height: auto !important; }
  body.printing-aba { margin: 0 !important; padding: 0 !important; }
  body.printing-aba .app-top,
  body.printing-aba .kpi-bar,
  body.printing-aba .tab-print-btn,
  body.printing-aba .tab-toolbar .btn,
  body.printing-aba .fases-toolbar .btn,
  body.printing-aba .tab-pane:not(.print-target) { display: none !important; }
  body.printing-aba .tab-pane.print-target { display: block !important; }
  body.printing-aba, body.printing-aba * {
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
  body.printing-aba .pcard, body.printing-aba .section-card,
  body.printing-aba .chart-card, body.printing-aba .fase-card,
  body.printing-aba .outros-form-card, body.printing-aba .outros-table-card,
  body.printing-aba tr { break-inside: avoid; }
  /* Tabelas com rolagem interna: mostrar tudo no papel (curvas de obra, mkt, D.A., outros) */
  body.printing-aba .outros-table-scroll,
  body.printing-aba .curva-table-scroll { max-height: none !important; overflow: visible !important; }
  /* Fluxo de Caixa: as duas barras sticky (toolbar + sub-abas) e a rolagem
     interna da tabela não fazem sentido no papel — sticky sem viewport gruda
     no topo de cada página e a max-height cortaria as linhas. */
  .tab-toolbar-fluxo, .fluxo-subtabs, .fluxo-rodape-scroll { position: static !important; }
  #fluxo-det-tabela .tbl-scroll { max-height: none !important; overflow: visible !important; }
  /* Tipologias: 1 card por página, com o título repetido como cabeçalho de cada página */
  body.printing-aba #tab-fases .fases-toolbar { display: none !important; }
  body.printing-aba #tab-fases .fase-card::before,
  body.printing-aba #tab-fases .ivvi-section::before {
    content: attr(data-print-header);
    display: block; font-size: 13px; font-weight: 600; color: var(--text-mute);
    padding: 0 0 8px 2px;
  }
  /* 2 páginas por tipologia: cada nova tipologia começa em página nova, e a
     seção de Velocidade de vendas (com o gráfico) também. Usa break-before
     (não -after) p/ não gerar página em branco no fim. */
  /* Restaura o layout multicoluna dos parâmetros na impressão: a media query
     mobile (max-width:760px) casa no viewport de impressão e colapsava tudo em
     1 coluna, deixando os parâmetros altíssimos (estouravam p/ a 2ª página). */
  body.printing-aba #tab-fases .fase-cols {
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)) !important;
  }
  /* fase-card pode quebrar internamente (não usar break-inside:avoid aqui, senão
     o bloco de parâmetros "pula" inteiro p/ a página seguinte, deixando a 1ª em branco) */
  body.printing-aba #tab-fases .fase-card { break-inside: auto; }
  body.printing-aba #tab-fases .fase-card + .fase-card { break-before: page; page-break-before: always; }
  body.printing-aba #tab-fases .ivvi-section { break-before: page; page-break-before: always; }
  /* Parâmetros: a media query mobile (max-width:760px) também casa no viewport
     de impressão e colapsava as colunas internas dos cards (.prow-3col → 2,
     .prow-2col → 1) — o card Financiamento no Crédito Associativo passava de
     800px (> 733px úteis do A4 paisagem) e, com break-inside:avoid, o excedente
     era CORTADO. Restaurar as colunas devolve todos os cards p/ dentro da página
     (medido: fin associativo 800px → 569px). Mesmo pega-ratão do fix das Tipologias. */
  body.printing-aba #tab-parametros .prow-3col { grid-template-columns: 1fr 1fr 1fr !important; }
  body.printing-aba #tab-parametros .prow-2col { grid-template-columns: 1fr 1fr !important; }
  /* Board em BLOCO na impressão (cards empilhados, 1 por linha, como nas
     Tipologias): o grid de cards no viewport de impressão (2 colunas em
     ≤1100px) deixa vãos/colunas vazias que, ao cruzar o limite da página,
     geram uma ÚLTIMA PÁGINA EM BRANCO (fragmento de grid sem conteúdo
     pintado). Em bloco, o fim do board = borda do último card. */
  body.printing-aba #tab-parametros .pboard { display: block !important; }
  body.printing-aba #tab-parametros .pboard > .pcard { margin-bottom: 12px; }
  /* ZERO altura invisível após o último card: margem final, padding do pane e
     min-height do body viram página em branco ao cruzar o limite (o padding
     final o Chrome trunca, mas margem colapsada e min-height NÃO — validado
     no harness headless). */
  body.printing-aba #tab-parametros .pboard > .pcard:last-child { margin-bottom: 0; }
  body.printing-aba .tab-pane.print-target { padding-bottom: 0 !important; }
  body.printing-aba { min-height: 0 !important; }
  /* Cards recolhidos na tela saem EXPANDIDOS no papel (o chevron não imprime) */
  body.printing-aba #tab-parametros .pcard.collapsed > .pcard-body { display: block !important; }
  body.printing-aba #tab-parametros .pcard-toggle { display: none !important; }
  /* Outros Desencaixes: imprime só o card de parâmetros (o cronograma sai pelo CSV) */
  body.printing-aba #tab-outros #oc-matrix { display: none !important; }
  /* Marketing e D.A.: a curva de D.A. começa em página nova */
  body.printing-aba #tab-curvas-mkt #curvas-da-root { break-before: page; page-break-before: always; margin-top: 0 !important; }

  /* ── Relatório Resumo (A4 paisagem, multipágina) ── */
  html, body.printing-relatorio { height: auto !important; }
  body.printing-relatorio { margin: 0 !important; padding: 0 !important; }
  body.printing-relatorio .app-top,
  body.printing-relatorio .kpi-bar,
  body.printing-relatorio .tab-pane { display: none !important; }
  body.printing-relatorio .rel-overlay { position: static; background: none; padding: 0; overflow: visible; }
  body.printing-relatorio .rel-page { max-width: none; border: none; border-radius: 0; padding: 0; background: #fff; }
  body.printing-relatorio .rel-acoes { display: none !important; }
  body.printing-relatorio .rel-tbl { font-size: 10px; }
  body.printing-relatorio .rel-tbl td, body.printing-relatorio .rel-tbl th { border-color: #999; }
  /* Sem rolagem na impressão: tabela inteira visível (a escala vem do js) e
     coluna congelada volta ao fluxo normal */
  body.printing-relatorio .rel-tbl-scroll { overflow: visible !important; }
  body.printing-relatorio .rel-tbl th:first-child,
  body.printing-relatorio .rel-tbl td:first-child { position: static; }
  body.printing-relatorio .rel-page, body.printing-relatorio .rel-page * { color: #1f2328; }
  body.printing-relatorio .rel-sec th { background: #2e2e6b !important; color: #fff !important; }
  body.printing-relatorio .rel-grupo td { background: #eee !important; }
  body.printing-relatorio .rel-tbl tr { break-inside: avoid; }
  body.printing-relatorio, body.printing-relatorio * {
    -webkit-print-color-adjust: exact; print-color-adjust: exact;
  }
}

/* ─── Assistente de IA (botão flutuante + painel de chat) ───────────────────── */
.asst-fab {
  position: fixed; right: 18px; bottom: 52px; z-index: 900;
  width: 46px; height: 46px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--blue); color: #fff; border: none; cursor: pointer;
  font-size: 21px; box-shadow: var(--shadow);
}
.asst-fab:hover { filter: brightness(1.1); }
.asst-panel {
  position: fixed; right: 18px; bottom: 106px; z-index: 901;
  width: 400px; max-width: calc(100vw - 36px);
  height: 540px; max-height: calc(100vh - 160px);
  display: none; flex-direction: column;
  background: var(--bg2); border: 1px solid var(--border);
  border-radius: var(--radius-lg); box-shadow: var(--shadow); overflow: hidden;
}
.asst-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 14px; border-bottom: 1px solid var(--border); background: var(--bg3);
}
.asst-head h3 { margin: 0; font-size: 13px; color: var(--text); }
.asst-head .asst-fechar {
  background: none; border: none; color: var(--text-mute); cursor: pointer; font-size: 16px;
}
.asst-msgs {
  flex: 1; overflow-y: auto; padding: 12px; display: flex; flex-direction: column; gap: 8px;
}
.asst-msg {
  max-width: 92%; padding: 8px 11px; border-radius: 10px;
  font-size: 12.5px; line-height: 1.45; color: var(--text);
  overflow-wrap: break-word;
}
.asst-user { align-self: flex-end; background: var(--blue); color: #fff; }
.asst-assistant { align-self: flex-start; background: var(--bg3); border: 1px solid var(--border); }
.asst-assistant ul { margin: 4px 0 4px 18px; padding: 0; }
.asst-assistant li { margin: 2px 0; }
.asst-assistant code {
  background: var(--bg4); padding: 1px 4px; border-radius: 4px; font-size: 11.5px;
}
.asst-assistant .asst-br { height: 6px; }
.asst-pensando { color: var(--text-mute); font-style: italic; }
.asst-pensando::after { content: ''; animation: asst-dots 1.2s steps(4, end) infinite; }
@keyframes asst-dots { 0% { content: ''; } 25% { content: '.'; } 50% { content: '..'; } 75% { content: '...'; } }
.asst-erro { color: var(--red-lt); }
.asst-input-row {
  display: flex; gap: 8px; padding: 10px 12px; border-top: 1px solid var(--border);
  background: var(--bg3); align-items: flex-end;
}
.asst-input-row textarea {
  flex: 1; resize: none; min-height: 36px; max-height: 110px;
  background: var(--bg2); color: var(--text); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 8px 10px; font-size: 12.5px; font-family: inherit;
}
.asst-input-row textarea:focus { outline: none; border-color: var(--blue); }
.asst-aviso {
  padding: 4px 12px 8px; font-size: 10.5px; color: var(--text-dim); background: var(--bg3);
}
@media print { .asst-fab, .asst-panel { display: none !important; } }

/* Assistente — avatar e ditado por voz (12/08/2026) */
.asst-fab { background: var(--bg2); border: 1px solid var(--border); padding: 0; overflow: hidden; }
.asst-fab img { width: 88%; height: 88%; object-fit: contain; display: block; margin: auto; pointer-events: none; }
.asst-fab:hover { filter: none; border-color: var(--blue); box-shadow: 0 0 0 3px rgba(56,139,253,0.25), var(--shadow); }
.asst-head h3 { display: flex; align-items: center; gap: 7px; }
.asst-avatar { width: 22px; height: 22px; object-fit: contain; }
.asst-mic {
  background: var(--bg2); border: 1px solid var(--border); border-radius: var(--radius);
  color: var(--text); cursor: pointer; font-size: 14px; padding: 7px 9px; line-height: 1;
}
.asst-mic:hover { border-color: var(--blue); }
.asst-mic.asst-mic-on {
  background: var(--red); border-color: var(--red); color: #fff;
  animation: asst-pulso 1.1s ease-in-out infinite;
}
@keyframes asst-pulso { 0%,100% { box-shadow: 0 0 0 0 rgba(248,81,73,0.5); } 50% { box-shadow: 0 0 0 6px rgba(248,81,73,0); } }
