/* Único tema de toda la app: oscuro siempre, sin importar el modo
   claro/oscuro del sistema operativo del usuario ni ningún toggle —
   antes esto dependía de prefers-color-scheme y de un botón para
   alternar; ambos se quitaron a pedido explícito para que todos vean
   siempre esta misma paleta. */
:root{
  --surface-1:#131a24;
  --surface-2:#182230;
  --page:#0a0e14;
  --text-primary:#dff7fb;
  --text-secondary:#a8d4e0;
  --text-muted:#e0d9c4;
  --grid:#1f2a3a;
  --baseline:#2c3a4d;
  --border:rgba(135,180,255,0.14);
  --accent:#0a6fa8;
  --accent-ink:#ffffff;
  --gauge-track:#c7d6e3;

  --s1-blue:#3987e5;
  --s2-aqua:#199e70;
  --s3-yellow:#c98500;
  --s4-green:#008300;
  --s5-violet:#9085e9;
  --s6-red:#e66767;
  --s7-magenta:#d55181;
  --s8-orange:#d95926;

  --good:#0ca30c;
  --warning:#fab219;
  --serious:#ec835a;
  --critical:#d03b3b;

  --good-bg:rgba(12,163,12,0.18);
  --warning-bg:rgba(250,178,25,0.20);
  --critical-bg:rgba(208,59,59,0.20);
}

*{box-sizing:border-box;}
body{
  margin:0;
  font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
  background:var(--page);
  color:var(--text-primary);
  -webkit-font-smoothing:antialiased;
  position:relative;
}
a{color:inherit;}

/* Pantalla de carga / transición entre páginas: fondo azul con el logo
   centrado, se muestra al llegar a una página nueva o al hacer clic en
   un link del menú, y se desvanece cuando el contenido ya está listo. */
.page-loader{
  position:fixed;inset:0;z-index:99999;background:#2e5da1;
  display:flex;align-items:center;justify-content:center;
  transition:opacity .35s ease, visibility .35s ease;
}
.page-loader.hidden{opacity:0;visibility:hidden;pointer-events:none;}
.page-loader.hidden .page-loader-logo{animation:none;}
.page-loader-logo{
  width:130px;height:130px;object-fit:contain;
  animation:page-loader-pulse 1.4s ease-in-out infinite;
}
@keyframes page-loader-pulse{
  0%,100%{transform:scale(1);opacity:1;}
  50%{transform:scale(1.08);opacity:.85;}
}
@media print{ .page-loader{display:none !important;} }

/* Fondo decorativo "burbujas": círculos suaves detrás de las tarjetas
   (que tienen fondo sólido), visibles solo en el espacio entre ellas. */
body::before{
  content:"";
  position:fixed;
  inset:0;
  z-index:-1;
  pointer-events:none;
  background-image:
    radial-gradient(circle at 6% 10%,  rgba(255,255,255,0.050) 0%, transparent 9%),
    radial-gradient(circle at 90% 6%,  rgba(255,255,255,0.045) 0%, transparent 12%),
    radial-gradient(circle at 82% 85%, rgba(255,255,255,0.050) 0%, transparent 15%),
    radial-gradient(circle at 10% 88%, rgba(255,255,255,0.035) 0%, transparent 10%),
    radial-gradient(circle at 48% 42%, rgba(255,255,255,0.030) 0%, transparent 22%),
    radial-gradient(circle at 66% 18%, rgba(255,255,255,0.040) 0%, transparent 8%),
    radial-gradient(circle at 24% 60%, rgba(255,255,255,0.032) 0%, transparent 12%);
}

.app-layout{display:flex;align-items:stretch;min-height:100vh;}
.app-main{flex:1;min-width:0;}
.app{max-width:1400px;margin:0 auto;padding:20px 24px 60px;}
.app.app-full{max-width:none;}

/* HEADER */
header.top{
  display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;
  gap:16px;margin-bottom:20px;
}
.title-block h1{font-size:22px;margin:0 0 4px;font-weight:700;}
.title-block p{margin:0;color:var(--text-secondary);font-size:13.5px;}
.header-controls{display:flex;gap:10px;flex-wrap:wrap;align-items:center;}
.control{
  background:var(--surface-2);border:1px solid var(--border);border-radius:8px;
  padding:8px 12px;font-size:13.5px;color:var(--text-primary);
}
input.control{min-width:220px;}
select.control{cursor:pointer;}
button.icon-btn{
  background:var(--surface-2);border:1px solid var(--border);border-radius:8px;
  width:36px;height:36px;cursor:pointer;color:var(--text-primary);font-size:16px;
  display:flex;align-items:center;justify-content:center;
}
button.icon-btn:hover{background:var(--page);}

/* SIDEBAR */
.sidebar{
  width:224px;flex:none;background:var(--surface-1);border-right:1px solid var(--border);
  display:flex;flex-direction:column;transition:width .15s ease;
  position:sticky;top:0;align-self:flex-start;height:100vh;overflow-x:hidden;overflow-y:auto;
  font-family:'Sora', system-ui, -apple-system, "Segoe UI", sans-serif;
}
.sidebar.collapsed{width:60px;}
.sidebar-header{display:flex;align-items:center;justify-content:space-between;padding:12px;gap:8px;}
.sidebar-logo{width:24px;height:24px;border-radius:6px;object-fit:contain;flex:none;}
.sidebar-brand{font-weight:700;font-size:12px;letter-spacing:0.4px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;}
.sidebar-toggle{
  background:none;border:1px solid var(--border);border-radius:8px;color:var(--text-secondary);
  cursor:pointer;padding:7px;flex:none;display:flex;align-items:center;justify-content:center;
}
.sidebar-toggle svg{width:16px;height:16px;}
.sidebar-toggle:hover{background:var(--surface-2);color:var(--text-primary);}
.sidebar-links{display:flex;flex-direction:column;gap:2px;padding:4px 8px;flex:1;}
.sidebar-link{
  display:flex;align-items:center;gap:12px;padding:9px 10px;border-radius:8px;
  color:var(--text-secondary);text-decoration:none;white-space:nowrap;font-size:12.5px;font-weight:500;letter-spacing:0.1px;
  background:none;border:none;cursor:pointer;width:100%;text-align:left;
}
.sidebar-link:hover{background:var(--surface-2);color:var(--text-primary);}
.sidebar-link.active{background:var(--accent);color:var(--accent-ink);font-weight:600;}
.sidebar-link.danger{color:var(--critical);}
.sidebar-icon{flex:none;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;}
.sidebar-icon svg{width:18px;height:18px;stroke-width:1.8;}
.sidebar-label{overflow:hidden;text-overflow:ellipsis;}
.sidebar.collapsed .sidebar-label,
.sidebar.collapsed .sidebar-brand{display:none;}
.sidebar.collapsed .sidebar-link{justify-content:center;padding:9px;}
.sidebar.collapsed .sidebar-header{flex-direction:column;justify-content:center;padding:10px 6px;gap:6px;}
.sidebar-group{display:flex;flex-direction:column;}
.sidebar-parent-row{display:flex;align-items:stretch;gap:2px;}
.sidebar-parent-row .sidebar-link{flex:1;min-width:0;}
.sidebar-chevron{
  flex:none;background:none;border:none;color:var(--text-muted);cursor:pointer;
  width:26px;border-radius:8px;transition:transform .15s ease;
  display:flex;align-items:center;justify-content:center;
}
.sidebar-chevron svg{width:14px;height:14px;}
.sidebar-chevron:hover{background:var(--surface-2);color:var(--text-primary);}
.sidebar-group.expanded .sidebar-chevron{transform:rotate(180deg);}
.sidebar-sublist{display:none;flex-direction:column;padding-left:30px;gap:1px;margin:2px 0 4px;}
.sidebar-group.expanded .sidebar-sublist{display:flex;}
.sidebar-sublink{
  display:block;padding:7px 10px;border-radius:8px;font-size:11.5px;
  color:var(--text-muted);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.sidebar-sublink:hover{background:var(--surface-2);color:var(--text-primary);}
.sidebar-sublink.active{color:var(--accent);font-weight:600;}
.sidebar.collapsed .sidebar-chevron,
.sidebar.collapsed .sidebar-sublist{display:none;}
.sidebar-subgroup{display:flex;flex-direction:column;}
.sidebar-subparent-row{display:flex;align-items:stretch;gap:2px;}
.sidebar-subparent-row .sidebar-sublink{flex:1;min-width:0;}
.sidebar-subchevron{
  flex:none;background:none;border:none;color:var(--text-muted);cursor:pointer;
  width:22px;border-radius:8px;transition:transform .15s ease;
  display:flex;align-items:center;justify-content:center;
}
.sidebar-subchevron svg{width:13px;height:13px;}
.sidebar-subchevron:hover{background:var(--surface-2);color:var(--text-primary);}
.sidebar-subgroup.expanded .sidebar-subchevron{transform:rotate(180deg);}
.sidebar-subsublist{display:none;flex-direction:column;padding-left:14px;gap:1px;margin:1px 0 3px;}
.sidebar-subgroup.expanded .sidebar-subsublist{display:flex;}
.sidebar.collapsed .sidebar-subchevron,
.sidebar.collapsed .sidebar-subsublist{display:none;}
.sidebar-footer{border-top:1px solid var(--border);padding:8px;display:flex;flex-direction:column;gap:2px;}
.sidebar-user{
  display:flex;align-items:center;gap:12px;padding:8px 10px;font-size:11.5px;color:var(--text-muted);
  text-decoration:none;border-radius:8px;overflow:hidden;
}
.sidebar-user:hover{background:var(--surface-2);color:var(--text-primary);}
.sidebar-user.active{background:var(--accent);color:var(--accent-ink);}
.sidebar-user .sidebar-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sidebar.collapsed .sidebar-user{justify-content:center;padding:9px;}
.nav-avatar{width:26px;height:26px;border-radius:50%;object-fit:cover;border:1px solid var(--border);flex:none;}

/* MENÚ EN CELULAR: bajo MOBILE_NAV_BREAKPOINT (900px, ver auth-guard.js) el
   sidebar deja de convivir en la fila y pasa a ser un cajón que se abre
   encima del contenido, con un botón ☰ flotante y un fondo oscuro para
   cerrarlo tocando afuera. Ocultos por completo en escritorio. */
.mobile-menu-btn{
  display:none;position:fixed;top:14px;left:14px;z-index:310;
  width:40px;height:40px;border-radius:10px;border:1px solid var(--border);
  background:var(--surface-1);color:var(--text-primary);
  align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 2px 10px rgba(0,0,0,.25);
}
.mobile-menu-btn svg{width:19px;height:19px;}
.sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:250;}
.sidebar-backdrop.active{display:block;}

@media(max-width:900px){
  .mobile-menu-btn{display:flex;}
  .app{padding:60px 14px 40px;}
  .sidebar{
    position:fixed;top:0;left:0;height:100vh;width:264px;max-width:82vw;
    transform:translateX(-100%);transition:transform .2s ease;z-index:300;
    box-shadow:2px 0 20px rgba(0,0,0,.35);
  }
  .sidebar.mobile-open{transform:translateX(0);}
  input.control{min-width:0;}
  .eval-header-grid{grid-template-columns:1fr;}
  .eval-signatures{flex-wrap:wrap;gap:24px;}
}
@media(max-width:560px){
  .app{padding:56px 10px 36px;}
  .title-block h1{font-size:19px;}
}

.btn{
  background:var(--surface-2);border:1px solid var(--border);border-radius:8px;
  padding:8px 14px;font-size:13.5px;color:var(--text-primary);cursor:pointer;
  text-decoration:none;display:inline-flex;align-items:center;gap:6px;
}
.btn:hover{background:var(--page);}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);}
.btn.primary:hover{filter:brightness(1.05);}
.btn.danger{color:var(--critical);}
.btn.warning{background:var(--warning-bg);border-color:var(--warning);color:#8a6200;}
.btn.warning:hover{filter:brightness(0.97);}
.btn:disabled{opacity:0.5;cursor:not-allowed;}
.btn svg,.pill svg,.icon-btn svg{width:15px;height:15px;flex:none;}

/* KPI GRID */
.kpi-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px;
}
@media(max-width:1100px){.kpi-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:560px){.kpi-grid{grid-template-columns:1fr;}}
.stat-tile{
  background:var(--surface-1);border:1px solid var(--border);border-radius:12px;
  padding:14px 16px;
}
.stat-tile .label{font-size:12px;color:var(--text-secondary);margin-bottom:6px;}
.stat-tile .value{font-size:22px;font-weight:600;letter-spacing:-0.3px;}
.stat-tile .sub{font-size:11.5px;color:var(--text-muted);margin-top:4px;}
.stat-tile.status-critical .value{color:var(--critical);}
.stat-tile.status-good .value{color:var(--good);}
.stat-tile.status-warning .value{color:var(--warning);}
.stat-tile.status-critical{border-color:var(--critical);}
.stat-tile.status-good{border-color:var(--good);}
.stat-tile.status-warning{border-color:var(--warning);}
.stat-tile.clickable{cursor:pointer;transition:border-color .15s, transform .1s, background .15s;}
.stat-tile.clickable:hover{border-color:var(--accent);transform:translateY(-1px);}
.stat-tile.clickable.active-filter{background:var(--surface-2);box-shadow:inset 0 0 0 2px currentColor;}

/* Variante con ícono circular al costado (tarjetas KPI más dinámicas). */
.stat-tile.stat-tile-icon{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;}

/* CHART CARDS */
.chart-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:14px;margin-bottom:20px;}
@media(max-width:1000px){.chart-grid{grid-template-columns:1fr;}}
.chart-grid.secondary{grid-template-columns:1fr 1fr;}
@media(max-width:1000px){.chart-grid.secondary{grid-template-columns:1fr;}}
.chart-grid-3{display:grid;grid-template-columns:1.1fr 1fr 0.9fr;gap:14px;margin-bottom:20px;}
@media(max-width:1200px){.chart-grid-3{grid-template-columns:1fr 1fr;}}
@media(max-width:700px){.chart-grid-3{grid-template-columns:1fr;}}
.card{
  background:var(--surface-1);border:1px solid var(--border);border-radius:12px;
  padding:16px 18px;
}
.card h3{margin:0 0 2px;font-size:14.5px;font-weight:600;}
.card .card-sub{font-size:12px;color:var(--text-muted);margin-bottom:10px;}
.card canvas{max-height:280px;}

.legend-row{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;font-size:12px;color:var(--text-secondary);}
.legend-row .dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;}
.legend-row .clickable-legend{cursor:pointer;text-decoration:underline dotted;text-underline-offset:2px;}
.legend-row .clickable-legend:hover{color:var(--accent);}

/* ---- hand-built SVG / HTML charts ---- */
.chart-svg-wrap{position:relative;}
.chart-svg-wrap svg{width:100%;height:auto;display:block;overflow:visible;}
.svg-gridline{stroke:var(--grid);stroke-width:1;}
.svg-axis-label{fill:var(--text-muted);font-size:10.5px;}
.svg-endlabel{font-size:11px;font-weight:600;}
.chart-tooltip{
  position:absolute;pointer-events:none;background:var(--surface-2);border:1px solid var(--border);
  border-radius:8px;padding:8px 10px;font-size:12px;box-shadow:0 4px 14px rgba(0,0,0,0.12);
  opacity:0;transition:opacity .1s;white-space:nowrap;z-index:5;
}
.chart-tooltip .tt-row{display:flex;align-items:center;gap:6px;margin-top:2px;}
.chart-tooltip .tt-dot{width:8px;height:8px;border-radius:50%;flex:none;}
.chart-tooltip .tt-month{font-weight:600;color:var(--text-primary);margin-bottom:2px;}
.hover-col{fill:transparent;}
.hover-col:hover{fill:var(--page);opacity:0.5;}
.crosshair{stroke:var(--baseline);stroke-width:1;opacity:0;pointer-events:none;}

.donut-wrap{display:flex;align-items:center;justify-content:center;gap:20px;flex-wrap:wrap;}
.donut-center-value{font-size:26px;font-weight:700;fill:var(--text-primary);}
.donut-center-value.neg{fill:var(--critical);}
.donut-center-label{font-size:10.5px;fill:var(--text-muted);}
.donut-seg{transition:opacity .15s;}
.donut-seg:hover{opacity:0.75;}

/* REPORTE MENSUAL (Editar datos) */
.report-recipients{display:flex;flex-wrap:wrap;gap:8px 16px;background:var(--surface-1);border:1px solid var(--border);border-radius:12px;padding:12px 16px;}

.report-recipient{display:flex;align-items:center;gap:7px;font-size:13px;}

#reporteTable{table-layout:fixed;width:auto;min-width:100%;font-size:11.5px;border-collapse:separate;border-spacing:0;}
#reporteTable th, #reporteTable td{white-space:normal;word-break:break-word;padding:6px 6px;overflow:hidden;}
#reporteTable thead th{background:var(--surface-2);z-index:2;border-bottom:none;box-shadow:inset 0 -1px 0 var(--border);}
#reporteTable td.num, #reporteTable th.num{text-align:center;}
#reporteTable input[type="checkbox"]{width:15px;height:15px;cursor:pointer;}
#reporteTable th.sortable{cursor:grab;user-select:none;line-height:1.25;position:sticky;top:0;}
#reporteTable th.sortable:hover{color:var(--accent);}
#reporteTable th.sortable.drag-over{box-shadow:inset 2px 0 0 var(--accent), inset -1px 0 0 var(--border);background:var(--surface-1);}
#reporteTable .col-resizer{position:absolute;top:0;right:-3px;width:7px;height:100%;cursor:col-resize;z-index:3;}
#reporteTable .col-resizer:hover, #reporteTable .col-resizer.resizing{background:var(--accent);opacity:0.6;}
#reporteTable .num-critical{color:var(--critical);font-weight:600;}
#reporteTable .num-warning{color:var(--warning);font-weight:600;}
#reporteTable .num-good{color:var(--good);font-weight:600;}
#diferenciasTable .num-critical, #diferenciasTotalsTable .num-critical{color:var(--critical);font-weight:600;}
#diferenciasTable .num-warning, #diferenciasTotalsTable .num-warning{color:var(--warning);font-weight:600;}
#diferenciasTable .num-good, #diferenciasTotalsTable .num-good{color:var(--good);font-weight:600;}
/* Columna "Total": se destaca del resto de las columnas mensuales */
#diferenciasTable th.col-total, #diferenciasTable td.col-total,
#diferenciasTotalsTable td.col-total{
  border-left:2px solid var(--border);background:var(--surface-2);font-weight:700;
}
.report-bulk-actions{display:flex;flex-wrap:wrap;gap:10px 22px;align-items:center;background:var(--surface-1);border:1px solid var(--border);border-radius:12px;padding:12px 16px;margin-top:14px;}
.report-bulk-group{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-secondary);}
.report-bulk-group .btn{padding:5px 10px;font-size:12px;}

.hbar-list{display:flex;flex-direction:column;gap:10px;}
.hbar-row{display:grid;grid-template-columns:110px 1fr 90px;align-items:center;gap:10px;}
.hbar-label{font-size:12.5px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hbar-track{position:relative;height:16px;}
.hbar-fill{
  position:absolute;left:0;top:3px;height:10px;border-radius:4px;background:var(--accent);
  transition:filter .1s;
}
.hbar-fill:hover{filter:brightness(1.12);}
.hbar-fill.neg{background:var(--critical);}
.hbar-fill.warning{background:var(--warning);}
.hbar-fill.good{background:var(--good);}
.hbar-value{font-size:12px;font-variant-numeric:tabular-nums;text-align:right;color:var(--text-primary);font-weight:500;}

.mini-progress{min-width:120px;}
.mini-progress-label{font-size:11px;color:var(--text-secondary);white-space:nowrap;margin-bottom:4px;}
.mini-progress-row{display:flex;align-items:center;gap:6px;}
.mini-progress-row .hbar-track{flex:1;}
.mini-progress-pct{font-size:11px;font-variant-numeric:tabular-nums;color:var(--text-secondary);font-weight:600;flex:none;min-width:32px;text-align:right;}

tr.rank-row-top{background:var(--good-bg);}
tr.rank-row-bottom{background:var(--critical-bg);}

/* Registro de Pagos: filas de distrito expandibles con iglesias adentro */
.distrito-row{background:var(--surface-1);border:1px solid var(--border);border-radius:10px;margin-bottom:10px;overflow:hidden;}
.distrito-row-head{display:flex;align-items:center;gap:12px;padding:12px 14px;cursor:pointer;}
.distrito-row-head:hover{background:var(--page);}
.distrito-toggle{
  width:22px;height:22px;flex:none;border-radius:6px;border:1px solid var(--border);background:var(--surface-2);
  color:var(--text-primary);font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;
}
.distrito-row-label{font-weight:600;flex:1;}
.distrito-row-count{font-size:12px;color:var(--text-muted);}
.distrito-row-total{font-weight:700;font-variant-numeric:tabular-nums;min-width:110px;text-align:right;}
.distrito-row-children{border-top:1px solid var(--border);background:var(--page);}
.iglesia-row{display:flex;align-items:center;gap:12px;padding:9px 14px 9px 46px;font-size:13px;}
.iglesia-row:not(:last-child){border-bottom:1px solid var(--border);}
.iglesia-row-label{flex:1;color:var(--text-secondary);}
.iglesia-row-count{font-size:11.5px;color:var(--text-muted);}
.iglesia-row-total{font-weight:600;font-variant-numeric:tabular-nums;min-width:110px;text-align:right;}

/* ANÁLISIS (página de detalle por indicador) */
.kpi-hero{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;}
.kpi-hero .hero-value{font-size:34px;font-weight:700;letter-spacing:-0.5px;}
.kpi-hero .hero-sub{color:var(--text-muted);font-size:13px;}
.two-col-equal{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
@media(max-width:800px){.two-col-equal{grid-template-columns:1fr;}}
.donut-row-3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
@media(max-width:900px){.donut-row-3{grid-template-columns:1fr 1fr;}}
@media(max-width:600px){.donut-row-3{grid-template-columns:1fr;}}
.rank-pct{color:var(--text-muted);}
.crumb-link{cursor:pointer;color:var(--accent);}
.crumb-link:hover{text-decoration:underline;}
.crumb-current{font-weight:600;}

.theme-swatch-row{display:flex;gap:14px;flex-wrap:wrap;}
.theme-swatch{display:flex;flex-direction:column;align-items:center;gap:6px;background:none;border:none;cursor:pointer;padding:4px;}
.theme-swatch .swatch-dot{width:36px;height:36px;border-radius:50%;border:2px solid var(--border);}
.theme-swatch.active .swatch-dot{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent);}
.theme-swatch .swatch-label{font-size:11.5px;color:var(--text-secondary);}

/* TABS */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:16px;flex-wrap:wrap;}
.tab-btn{
  background:none;border:none;padding:10px 14px;font-size:13.5px;cursor:pointer;
  color:var(--text-secondary);border-bottom:2px solid transparent;font-weight:500;
}
.tab-btn.active{color:var(--text-primary);border-bottom-color:var(--accent);}
.tab-panel{display:none;}
.tab-panel.active{display:block;}

/* TABLE */
.table-wrap{overflow-x:auto;background:var(--surface-1);border:1px solid var(--border);border-radius:12px;}
.table-wrap.scrollable{max-height:540px;overflow-y:auto;}
.table-wrap.fill-viewport{max-height:calc(100vh - 300px);overflow-y:auto;}
#estadoIglesiasTable th, #estadoIglesiasTable td{text-align:center;}
table{border-collapse:collapse;width:100%;font-size:12.8px;min-width:900px;}
thead th{
  position:sticky;top:0;background:var(--surface-1);text-align:left;
  padding:10px 10px;font-weight:600;color:var(--text-secondary);
  border-bottom:1px solid var(--border);cursor:pointer;white-space:nowrap;font-size:11.8px;
  text-transform:uppercase;letter-spacing:0.02em;
}
thead th:hover{color:var(--text-primary);}
thead th.sorted::after{content:" ▾";}
thead th.sorted.asc::after{content:" ▴";}
tbody td{padding:9px 10px;border-bottom:1px solid var(--grid);white-space:nowrap;font-variant-numeric:tabular-nums;}
tbody tr:hover{background:var(--page);}
tbody tr.conciliada-row{background:var(--good-bg);}
tbody tr.conciliada-row:hover{background:var(--good-bg);}
tbody tr.mx-dirty{background:var(--warning-bg);}
tbody tr.mx-dirty:hover{background:var(--warning-bg);}
tbody tr:last-child td{border-bottom:none;}
td.num{text-align:right;}
td.name{font-variant-numeric:normal;font-weight:500;}
.small-table{min-width:600px;}

/* Ranking completo (Informes, Análisis Mensual, 7ME, Panel del pastor):
   títulos y valores de todas las columnas centrados. */
#rankingTable th, #rankingTable td,
#aiRankingTable th, #aiRankingTable td{text-align:center;}

/* Acumulado (Por Iglesia / Por Distrito): columnas numéricas (Diezmo a
   Balance) con título y valor centrados entre sí. */
#churchesTable th.num, #churchesTable td.num,
#districtsTable th.num, #districtsTable td.num{text-align:center;}
#districtsTable .num-critical, #churchesTable .num-critical{color:var(--critical);font-weight:600;}
#districtsTable .num-warning, #churchesTable .num-warning{color:var(--warning);font-weight:600;}
#districtsTable .num-good, #churchesTable .num-good{color:var(--good);font-weight:600;}

.roomy-table th, .roomy-table td{padding-left:20px;padding-right:20px;}
.roomy-table th:first-child, .roomy-table td:first-child{padding-left:10px;}
.estado-table th, .estado-table td{text-align:center;}
.estado-table th:first-child, .estado-table td:first-child{text-align:left;}
.estado-table th:first-child{color:var(--accent);}
.estado-table td.name{color:var(--accent);font-weight:700;}
.estado-table thead th:not(:first-child):nth-child(even),
.estado-table tbody tr:not(.estado-total-row) td:not(:first-child):nth-child(even){background:var(--page);}
.estado-table .estado-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:700;white-space:nowrap;text-transform:none;letter-spacing:normal;}
.estado-table .estado-chip .b-dot{width:6px;height:6px;border-radius:50%;flex:none;}
.estado-table tr.estado-total-row td{background:var(--surface-2);font-weight:700;border-top:2px solid var(--border);}
.estado-table .estado-pct{color:var(--s3-yellow);font-weight:700;margin-left:2px;}
.estado-table td.clickable{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px;}
.estado-table td.clickable:hover{background:var(--surface-2);}
table.small-table th.sortable{cursor:pointer;user-select:none;}
table.small-table th.sortable:hover{color:var(--accent);}
/* Nombre de distrito clickeable (Proyección > Detalle por mes > Por
   distrito): salta a "Por iglesia" filtrado a ese distrito. */
td.clickable-distrito{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px;}
td.clickable-distrito:hover{color:var(--accent);}
.centered-nums th.num, .centered-nums td.num{text-align:center;}
#churchesTable td.name, #churchesTable th:first-child,
#monthTable td.name, #monthTable th:first-child{color:var(--accent);font-weight:700;}

/* Diferencias Mensuales: 17 columnas (Iglesia/Distrito/Responsable/Saldo
   Inicial/12 meses/Total) — celdas más compactas para que quepan sin
   scroll horizontal en ancho completo. Saldo Inicial/meses/Total comparten
   la misma clase "num", así que un mismo ancho fijo los deja parejos. */
#diferenciasTable, #diferenciasTotalsTable{min-width:0;table-layout:fixed;width:100%;}
#diferenciasTable th, #diferenciasTable td,
#diferenciasTotalsTable td{padding:6px 4px;font-size:12.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#diferenciasTable th{font-size:11px;}
#diferenciasTable td.num, #diferenciasTotalsTable td.num{padding-left:2px;padding-right:6px;}
#diferenciasTable th.num, #diferenciasTable td.num,
#diferenciasTotalsTable td.num{text-align:center;}
.table-wrap.diferencias-wrap{max-height:calc(100vh - 170px);border-bottom-left-radius:0;border-bottom-right-radius:0;}
.diferencias-group-row{font-weight:600;background:var(--surface-1);}
.diferencias-group-row td{border-top:1px solid var(--border);}
.diferencias-total-row{font-weight:700;background:var(--surface-2);}
/* Fila de totales fuera del área con scroll (tabla aparte, debajo de
   .diferencias-wrap): queda siempre visible sin necesidad de bajar hasta el
   final, igual que el encabezado queda arriba fijo. Los anchos de columna se
   sincronizan por JS (syncTotalsColWidths) para que calcen con la tabla de
   arriba, incluso al redimensionar columnas u ocultar meses sin datos. */
/* Sin scroll propio: la fila de totales no tiene nada que desplazar sola —
   solo debe seguir el scroll horizontal de la tabla de arriba (ver el sync
   por JS en diferencias-mensuales.js), nunca mostrar su propia barra. */
.table-wrap.diferencias-totals-wrap{margin-top:-1px;border-top:none;border-top-left-radius:0;border-top-right-radius:0;overflow-x:hidden;}
#diferenciasTotalsTable tr{background:var(--surface-2);}
#diferenciasTotalsTable td{border-top:2px solid var(--border);border-bottom:none;}
/* Anchos iniciales — se sobrescriben por columna (inline) desde
   diferencias-mensuales.js, que además permite arrastrar para cambiarlos. */
#diferenciasTable .col-resizer{position:absolute;top:0;right:-3px;width:7px;height:100%;cursor:col-resize;z-index:3;}
#diferenciasTable .col-resizer:hover, #diferenciasTable .col-resizer.resizing{background:var(--accent);opacity:0.6;}

.badge{
  display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;
  font-size:11px;font-weight:600;white-space:nowrap;
}
.badge .b-dot{width:6px;height:6px;border-radius:50%;}
.badge.eficiente{background:var(--good-bg);color:var(--good);}
.badge.eficiente .b-dot{background:var(--good);}
.badge.deficiente{background:var(--warning-bg);color:#ffd479;}
.badge.deficiente .b-dot{background:var(--warning);}
.badge.riesgo-a{background:var(--critical-bg);color:var(--critical);}
.badge.riesgo-a .b-dot{background:var(--critical);}
.badge.riesgo-b{background:var(--warning-bg);color:#8a6200;}
.badge.riesgo-b .b-dot{background:var(--warning);}
.badge.riesgo-c{background:var(--good-bg);color:var(--good);}
.badge.riesgo-c .b-dot{background:var(--good);}
.badge.excelencia{background:rgba(42,120,214,0.14);color:var(--accent);}
.badge.excelencia .b-dot{background:var(--accent);}
.badge.naranja{background:rgba(235,104,52,0.16);color:var(--s8-orange);}
.badge.naranja .b-dot{background:var(--s8-orange);}
.badge.clave{background:var(--warning-bg);color:var(--warning);margin-left:6px;}
.badge.clave .b-dot{background:var(--warning);}

.neg{color:var(--critical);}
.pos{color:var(--text-primary);}
.diferencia-cell{cursor:pointer;}
.diferencia-cell:hover{text-decoration:underline;background:var(--page);}

.section-note{font-size:12px;color:var(--text-muted);margin:0 0 12px;}

.resp-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:16px;}
@media(max-width:800px){.resp-cards{grid-template-columns:1fr;}}
.resp-card{background:var(--surface-1);border:1px solid var(--border);border-radius:12px;padding:14px 16px;cursor:pointer;}
.resp-card.active{border-color:var(--accent);}

.gauge-select{cursor:pointer;border:1px solid transparent;border-radius:12px;padding:10px;transition:border-color .15s, background .15s;}
.gauge-select:hover{background:var(--page);}
.gauge-select.active{border-color:var(--accent);background:var(--page);}
.resp-card .rname{font-weight:600;font-size:14px;margin-bottom:6px;}
.resp-card .rmeta{font-size:12px;color:var(--text-secondary);}
.resp-card .rtotal{font-size:19px;font-weight:600;margin-top:8px;}
.resp-card .rtotal.num-critical{color:var(--critical);}
.resp-card .rtotal.num-warning{color:var(--warning);}
.resp-card .rtotal.num-good{color:var(--good);}

/* Tarjeta KPI con ícono circular (usada en Diferencias Mensuales > Por Distrito) */
.resp-card.kpi-card{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;cursor:default;}
.kpi-icon-badge{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex:none;}
.kpi-icon-badge.blue{background:rgba(10,111,168,.18);color:var(--accent);}
.kpi-icon-badge.critical{background:var(--critical-bg);color:var(--critical);}
.kpi-icon-badge.warning{background:var(--warning-bg);color:var(--warning);}
.kpi-icon-badge.good{background:var(--good-bg);color:var(--good);}

/* Ranking horizontal con barras divergentes desde cero (Por Distrito) */
.dist-rank-list{display:flex;flex-direction:column;gap:7px;max-height:420px;overflow-y:auto;}
.dist-rank-row{display:grid;grid-template-columns:20px 108px 1fr 2px 1fr 92px;align-items:center;gap:6px;}
.dist-rank-num{font-size:11px;color:var(--text-muted);text-align:center;}
.dist-rank-label{font-size:12.5px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dist-rank-neg{display:flex;justify-content:flex-end;height:14px;}
.dist-rank-pos{display:flex;justify-content:flex-start;height:14px;}
.dist-rank-zero{width:2px;height:18px;background:var(--border);justify-self:center;}
.dist-rank-fill{height:10px;border-radius:3px;min-width:2px;transition:filter .1s;}
.dist-rank-fill:hover{filter:brightness(1.12);}
.dist-rank-fill.num-critical{background:var(--critical);}
.dist-rank-fill.num-warning{background:var(--warning);}
.dist-rank-fill.num-good{background:var(--good);}
.dist-rank-value{font-size:12px;font-variant-numeric:tabular-nums;text-align:right;font-weight:600;}
.dist-rank-value.num-critical{color:var(--critical);}
.dist-rank-value.num-warning{color:var(--warning);}
.dist-rank-value.num-good{color:var(--good);}

.footer-note{margin-top:30px;font-size:11.5px;color:var(--text-muted);text-align:center;}

/* Interruptor tipo switch (on/off) — por ejemplo, mostrar/ocultar una columna */
.switch{position:relative;display:inline-block;width:44px;height:24px;flex:none;cursor:pointer;vertical-align:middle;}
.switch input{position:absolute;opacity:0;width:0;height:0;}
.switch-slider{position:absolute;inset:0;background:var(--border);border-radius:24px;transition:background .15s ease;}
.switch-slider::before{content:'';position:absolute;left:3px;top:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .15s ease;box-shadow:0 1px 2px rgba(0,0,0,.3);}
.switch input:checked + .switch-slider{background:var(--good);}
.switch input:checked + .switch-slider::before{transform:translateX(20px);}
.switch input:focus-visible + .switch-slider{outline:2px solid var(--accent);outline-offset:2px;}

.pill-filter{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px;}
.pill{
  padding:6px 12px;border-radius:20px;font-size:12.5px;border:1px solid var(--border);
  background:var(--surface-1);cursor:pointer;color:var(--text-secondary);
  display:inline-flex;align-items:center;gap:5px;
}
.pill.active{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);}
.pill.disabled{opacity:0.4;cursor:not-allowed;}

.donut-legend-list{display:flex;flex-direction:column;gap:8px;margin-top:16px;}
.donut-legend-list .dl-row{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--text-secondary);}
.donut-legend-list .dl-row .dot{width:9px;height:9px;border-radius:50%;flex:none;}
.donut-legend-list .dl-row .dl-label{flex:1;}
.donut-legend-list .dl-row .dl-value{font-weight:600;color:var(--text-primary);white-space:nowrap;}

.attention-list{display:flex;flex-direction:column;gap:8px;}
.attention-item{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  background:var(--surface-1);border:1px solid var(--border);border-radius:10px;padding:12px 14px;
}
.attention-item .ai-left{display:flex;flex-direction:column;gap:2px;}
.attention-item .ai-name{font-weight:600;font-size:13.5px;}
.attention-item .ai-dist{font-size:11.5px;color:var(--text-muted);}
.attention-item .ai-right{text-align:right;}
.attention-item .ai-val{font-weight:600;font-size:14.5px;}
.attention-item .ai-label{font-size:11px;color:var(--text-muted);}

/* ===================================================================
   Agenda de auditoría (vista mes / semana)
   =================================================================== */
.agenda-grid{
  display:grid;grid-template-columns:repeat(7,1fr);gap:6px;
}
.agenda-grid.week .agenda-cell{min-height:140px;}
.agenda-daylabel{
  text-align:center;font-size:11.5px;font-weight:600;color:var(--text-muted);
  padding:4px 0 8px;text-transform:uppercase;letter-spacing:.03em;
}
.agenda-cell{
  background:var(--surface-1);border:1px solid var(--border);border-radius:10px;
  min-height:92px;padding:8px;display:flex;flex-direction:column;gap:4px;
}
.agenda-cell.dim{opacity:0.4;}
.agenda-cell.today{border-color:var(--accent);}
.agenda-daynum{font-size:12.5px;font-weight:600;color:var(--text-secondary);}
.agenda-item{
  display:block;width:100%;text-align:left;font-size:11.5px;line-height:1.3;
  background:var(--accent);color:var(--accent-ink);border:none;border-radius:6px;padding:4px 6px;
  cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.agenda-item:hover{opacity:0.85;}

/* ===================================================================
   Añadido para login.html / editar.html
   =================================================================== */

/* login page */
.auth-wrap{
  min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;
}
.auth-card{
  background:var(--surface-1);border:1px solid var(--border);border-radius:14px;
  padding:32px 28px;width:100%;max-width:380px;
}
.auth-card h1{font-size:19px;margin:0 0 4px;}
.auth-card p.sub{color:var(--text-secondary);font-size:13px;margin:0 0 20px;}
.field{margin-bottom:14px;}
.field label{display:block;font-size:12.5px;color:var(--text-secondary);margin-bottom:5px;}
.field input, .field select{
  width:100%;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;
  padding:9px 11px;font-size:14px;color:var(--text-primary);
}
.field input:disabled{background:var(--grid);color:var(--text-muted);cursor:not-allowed;opacity:0.8;}
.search-results{
  position:absolute; z-index:20; left:0; right:0; top:100%; margin-top:4px;
  background:var(--surface-2); border:1px solid var(--border); border-radius:8px;
  max-height:260px; overflow-y:auto; box-shadow:0 6px 20px rgba(0,0,0,0.18);
}
.search-results .result-item{padding:8px 11px; cursor:pointer; font-size:13.5px;}
.search-results .result-item .rdist{color:var(--text-muted); font-size:12px;}
.search-results .result-item:hover, .search-results .result-item.active{background:var(--page);}
.search-results .no-results{padding:8px 11px;color:var(--text-muted);font-size:12.5px;}
.auth-error{
  background:var(--critical-bg);color:var(--critical);border-radius:8px;padding:9px 11px;
  font-size:12.5px;margin-bottom:14px;display:none;
}
.auth-error.show{display:block;}

.selected-church-card{
  background:linear-gradient(135deg, rgba(250,178,25,0.16), rgba(250,178,25,0.04));
  border:1px solid rgba(250,178,25,0.35);border-left:4px solid var(--warning);
  border-radius:8px;padding:10px 12px;margin-bottom:14px;
}
.selected-church-card.empty{
  background:var(--surface-2);border-color:var(--border);border-left-color:var(--border);
  color:var(--text-muted);font-size:12.5px;font-style:italic;
}
.selected-church-card .sc-label{
  font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--warning);font-weight:700;margin-bottom:3px;
}
.selected-church-card .sc-name{font-size:22px;font-weight:800;color:var(--text-primary);line-height:1.25;}
.selected-church-card .sc-distrito{font-size:12.5px;color:var(--text-secondary);margin-top:2px;}
.selected-church-card .sc-tesorero{font-size:12px;color:var(--text-muted);margin-top:4px;}

/* editar.html layout */
.editor-grid{display:grid;grid-template-columns:280px 1fr;gap:18px;align-items:start;}
@media(max-width:900px){.editor-grid{grid-template-columns:1fr;}}
.editor-sidebar{background:var(--surface-1);border:1px solid var(--border);border-radius:12px;padding:16px;position:sticky;top:16px;}
.editor-sidebar h3{margin:0 0 10px;font-size:13.5px;}

.conc-iglesia-banner{
  background:var(--surface-1);border:1px solid var(--accent);border-left:4px solid var(--accent);
  border-radius:10px;padding:12px 16px;margin-bottom:18px;font-size:15px;font-weight:600;
}
.conc-iglesia-banner .dist{color:var(--text-muted);font-weight:400;font-size:12.5px;margin-top:2px;}

/* Buscador de iglesias con autocompletado (Conciliación) */
.conc-iglesia-dropdown{
  position:absolute;left:0;right:0;top:100%;margin-top:4px;z-index:20;
  background:var(--surface-2);border:1px solid var(--border);border-radius:10px;
  max-height:320px;overflow-y:auto;box-shadow:0 8px 24px rgba(0,0,0,0.18);
}
.conc-iglesia-item{padding:9px 14px;cursor:pointer;font-size:13.5px;border-bottom:1px solid var(--border);}
.conc-iglesia-item:last-child{border-bottom:none;}
.conc-iglesia-item:hover{background:var(--page);}
.conc-iglesia-item .dist{color:var(--text-muted);font-weight:400;font-size:12px;}
.conc-iglesia-item.has-data{background:rgba(250,178,25,0.16);}
.conc-iglesia-item.has-data:hover{background:rgba(250,178,25,0.26);}
.conc-iglesia-item.has-conciliado{color:var(--good);font-weight:600;}
.conc-iglesia-empty{padding:10px 14px;font-size:13px;color:var(--text-muted);}

/* Comparativo entre Entidad: dos fieldsets de carga lado a lado */
.cmp-upload-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
@media(max-width:800px){.cmp-upload-grid{grid-template-columns:1fr;}}
.cmp-row-diff td{background:rgba(208,59,59,0.08);}
.cmp-row-diff td:first-child{border-left:3px solid var(--critical);}

/* Comparativo entre Entidad: tarjetas con Débito/Crédito por separado y
   panel de selección manual (mismo patrón visual que Conciliación). */
.cmp-card-amounts{display:flex;gap:14px;font-size:10.5px;text-align:right;white-space:nowrap;color:var(--text-muted);}
.cmp-card-amounts div{display:flex;flex-direction:column;}
.cmp-card-amounts b{font-size:13px;font-weight:700;}
.cmp-amt-deb b{color:var(--critical);}
.cmp-amt-cred b{color:var(--good);}
.cmp-mid-row{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:4px;}
/* Foco por teclado (navegación con flechas / shift+flechas) sobre las tarjetas */
.conc-card:focus{outline:none;box-shadow:0 0 0 2px var(--accent);}

/* Conciliación de Cuenta: dos columnas del mismo ancho (Pendientes /
   Seleccionados) con el saldo y el botón "Conciliar" en el medio — al
   marcar una tarjeta pasa de una columna a la otra. */
.conc-transfer{display:grid;grid-template-columns:1fr 220px 1fr;gap:16px;align-items:start;}
@media(max-width:900px){.conc-transfer{grid-template-columns:1fr;}}
.conc-col h4{margin:0 0 10px;font-size:13.5px;}
.conc-col-mid{
  background:var(--surface-1);border:1px solid var(--border);border-radius:12px;
  padding:16px;position:sticky;top:16px;text-align:center;
}
.conc-mid-saldo{font-size:26px;font-weight:700;margin:6px 0 14px;}
.conc-conciliar-btn{width:100%;justify-content:center;background:var(--good);border-color:var(--good);color:#fff;}
.conc-conciliar-btn:disabled{background:var(--surface-2);border-color:var(--border);color:var(--text-muted);cursor:not-allowed;}

.conc-card-list{display:flex;flex-direction:column;gap:10px;max-height:560px;overflow-y:auto;padding-right:2px;}
.conc-card{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  background:var(--surface-1);border:1px solid var(--accent);border-radius:10px;
  padding:12px 14px;cursor:pointer;transition:transform .1s;
}
.conc-card:hover{background:var(--page);}
.conc-card:active{transform:scale(0.99);}
.conc-card .conc-card-desc{font-weight:600;color:var(--text-primary);}
.conc-card .conc-card-fecha{font-size:11px;color:var(--text-muted);margin-top:2px;}
.conc-card .conc-card-amt{font-size:17px;font-weight:700;white-space:nowrap;}
/* El monto siempre se colorea por signo (verde=positivo, rojo=negativo),
   tanto en Pendientes como en Seleccionados — el borde es lo que distingue
   en qué columna está la tarjeta. */
.conc-card .conc-card-amt.pos{color:var(--good);}
.conc-card .conc-card-amt.neg{color:var(--critical);}

.conc-card.conc-card-selected{border-color:var(--warning);}
.form-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
@media(max-width:900px){.form-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:560px){.form-grid{grid-template-columns:1fr;}}
.form-grid.cols-5{grid-template-columns:repeat(5,1fr);}
@media(max-width:900px){.form-grid.cols-5{grid-template-columns:repeat(3,1fr);}}
@media(max-width:560px){.form-grid.cols-5{grid-template-columns:repeat(2,1fr);}}
.preview-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px;}
@media(max-width:700px){.preview-grid{grid-template-columns:1fr 1fr;}}
.preview-tile{background:var(--page);border:1px solid var(--border);border-radius:10px;padding:10px 12px;}
.preview-tile .label{font-size:11px;color:var(--text-muted);}
.preview-tile .value{font-size:15px;font-weight:600;margin-top:2px;}
.preview-tile.status-critical{border-color:var(--critical);}
.preview-tile.status-critical .value{color:var(--critical);}
.preview-tile.status-good{border-color:var(--good);}
.preview-tile.status-good .value{color:var(--good);}
.preview-tile.status-warning{border-color:var(--warning);}
.preview-tile.status-warning .value{color:var(--warning);}

.field label.checkbox-label{
  display:flex;align-items:center;gap:8px;cursor:pointer;margin-bottom:0;
}
.field label.checkbox-label input[type="checkbox"],
.field label.checkbox-label input[type="radio"]{
  width:17px;height:17px;flex:none;accent-color:var(--accent);cursor:pointer;
}
.radio-group{
  display:flex;flex-direction:column;gap:0;border:1px solid var(--border);
  border-radius:8px;overflow:hidden;background:var(--surface-2);
}
.radio-group .checkbox-label{padding:10px 12px;transition:background .12s;}
.radio-group .checkbox-label:not(:last-child){border-bottom:1px solid var(--border);}
.radio-group .checkbox-label:hover{background:var(--page);}
.radio-subpanel{
  display:none;flex-direction:column;gap:8px;margin-top:8px;padding:10px 12px 10px 14px;
  border:1px solid var(--border);border-left:3px solid var(--accent);
  border-radius:0 8px 8px 0;background:var(--surface-1);
}
fieldset.complete{border-color:var(--good);background:var(--good-bg);}
.toast{
  position:fixed;bottom:20px;right:20px;background:var(--surface-2);border:1px solid var(--border);
  border-radius:10px;padding:12px 16px;font-size:13.5px;box-shadow:0 6px 20px rgba(0,0,0,0.15);
  opacity:0;transform:translateY(8px);transition:opacity .2s, transform .2s;pointer-events:none;z-index:50;
}
.toast.show{opacity:1;transform:translateY(0);}
.toast.error{color:var(--critical);}
.toast.ok{color:var(--good);}

.modal-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,0.55);
  display:flex;align-items:center;justify-content:center;z-index:100;padding:20px;
}
.modal-box{
  background:var(--surface-1);border:1px solid var(--border);border-radius:14px;
  padding:32px 28px;max-width:380px;width:100%;text-align:center;
}
.modal-box .modal-icon{font-size:40px;margin-bottom:10px;}
.modal-box h3{margin:0 0 10px;font-size:18px;}
.modal-box p{margin:0 0 20px;color:var(--text-secondary);font-size:14px;}
fieldset{border:1px solid var(--border);border-radius:10px;padding:14px;margin:0 0 16px;}
fieldset legend{padding:0 6px;font-size:12.5px;color:var(--text-secondary);font-weight:600;}

/* ---------- Modal "Crear Informe" ---------- */
.informe-modal-box{max-width:640px;width:100%;text-align:left;padding:0;border-radius:14px;overflow:hidden;max-height:88vh;display:flex;flex-direction:column;}
.informe-modal-header{
  background:var(--accent);color:var(--accent-ink);display:flex;align-items:center;gap:10px;
  padding:16px 20px;flex:none;
}
.informe-modal-header-icon{font-size:20px;}
.informe-modal-header h3{margin:0;font-size:17px;color:#fff;flex:1;}
.informe-modal-close{
  background:none;border:none;color:#fff;font-size:18px;cursor:pointer;opacity:0.85;
  padding:4px 6px;line-height:1;
}
.informe-modal-close:hover{opacity:1;}
.informe-modal-body{padding:20px 22px 24px;overflow-y:auto;}
.informe-toolbar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:20px;}
.informe-section{border:1px solid var(--border);border-radius:12px;padding:16px 18px;background:var(--surface-1);}
.informe-section + .informe-section{margin-top:16px;}
.informe-section-title{font-weight:700;font-size:14px;margin-bottom:14px;display:flex;align-items:center;gap:8px;}
.informe-subgroup{margin-bottom:16px;}
.informe-subgroup:last-child{margin-bottom:0;}
.informe-label{margin:0 0 8px;font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;}
.informe-switch-row{display:flex;flex-wrap:wrap;gap:14px 22px;}
.informe-switch-item{display:flex;align-items:center;gap:8px;font-size:13.5px;cursor:pointer;}
.informe-radio-row{display:flex;flex-wrap:wrap;gap:18px;}
.informe-radio-item{display:flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer;}
.informe-col-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px 16px;}
.informe-col-item{display:flex;align-items:center;gap:7px;font-size:13.5px;cursor:pointer;}

/* ===================================================================
   Evaluación Tesorería de Iglesias (submódulo de Auditoría)
   =================================================================== */
.eval-header-grid{
  display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:12px 16px;
  border:1px solid var(--border);border-radius:10px;padding:14px;margin-bottom:18px;
  background:var(--surface-1);
}
.eval-nivel-box{display:flex;flex-direction:column;justify-content:flex-end;}
.eval-nivel-value{
  font-weight:700;font-size:15px;padding:8px 10px;border-radius:8px;text-align:center;
  background:var(--surface-2);border:1px solid var(--border);color:var(--text-primary);
}
.eval-area{margin-bottom:22px;}
.eval-area-title{
  background:var(--surface-2);border:1px solid var(--border);border-left:4px solid var(--accent);
  border-bottom:none;border-radius:8px 8px 0 0;padding:10px 14px;font-weight:700;font-size:13px;letter-spacing:.02em;
}
.eval-area table{margin:0;table-layout:fixed;width:100%;}
.eval-area .table-wrap{border-radius:0 0 8px 8px;}
.eval-area table td.num, .eval-area table th.num{text-align:center;}
.eval-item-input{width:100%;min-width:0 !important;max-width:100%;text-align:center;padding:8px 6px;box-sizing:border-box;}
.eval-subtotal-row td{font-weight:700;background:var(--surface-2);}
/* Mismas proporciones de columna que las tablas de arriba (N°=40px,
   Requerimiento=1fr, Puntaje=90px, Alcanzado=100px), para que los dos
   números del Total queden centrados justo bajo esas dos columnas. */
.eval-total-row{
  display:grid;grid-template-columns:40px 1fr 90px 100px;align-items:center;gap:0;
  border:1px solid var(--border);border-radius:10px;
  padding:14px 0;background:var(--surface-1);font-weight:700;
}
.eval-total-row > *:nth-child(1){grid-column:1 / 3;padding-left:10px;}
.eval-total-row > *:nth-child(2){grid-column:3;}
.eval-total-row > *:nth-child(3){grid-column:4;}
.eval-total-label{font-size:15px;}
.eval-total-value{
  text-align:center;font-size:16px;padding:6px 8px;border-radius:8px;
  background:var(--surface-2);border:1px solid var(--border);
}
.eval-signatures{display:flex;gap:60px;margin-top:60px;padding:0 20px;}
.eval-signature-box{flex:1;text-align:center;}
.eval-signature-line{border-top:1px solid var(--text-secondary);margin-bottom:8px;}
.eval-signature-label{font-size:12.5px;font-weight:600;}
.eval-signature-name{font-size:12px;color:var(--text-secondary);margin-top:2px;min-height:15px;}

/* ===================================================================
   Directorio de Tesoreros: próximos cumpleaños + calendario 12 meses
   =================================================================== */
.proximo-item{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:var(--surface-1);border:1px solid var(--border);border-radius:10px;padding:10px 14px;
}
.proximo-item.clickable{cursor:pointer;transition:border-color .15s, transform .1s;}
.proximo-item.clickable:hover{border-color:var(--accent);transform:translateY(-1px);}
.proximo-name{font-weight:600;font-size:13.5px;}
.proximo-iglesia{font-size:12px;color:var(--text-muted);}
.proximo-right{text-align:right;}
.proximo-when{font-weight:600;font-size:13px;color:var(--accent);}
.proximo-date{font-size:11.5px;color:var(--text-muted);}

.cumple-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;}
.cumple-month{background:var(--surface-1);border:1px solid var(--border);border-radius:10px;padding:12px 14px;}
.cumple-month-title{font-weight:700;font-size:13px;margin-bottom:8px;color:var(--accent);}
.cumple-item{display:flex;align-items:baseline;gap:8px;padding:4px 0;border-bottom:1px solid var(--grid);font-size:12.5px;}
.cumple-item:last-child{border-bottom:none;}

/* ===================================================================
   Agenda — calendario (año / mes / semana)
   =================================================================== */
.cal-weekday-row{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px;}
.cal-weekday-row div{text-align:center;font-size:11.5px;color:var(--text-muted);font-weight:600;text-transform:uppercase;}

.cal-month-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;}
.cal-day-cell{
  min-height:92px;background:var(--surface-1);border:1px solid var(--border);border-radius:8px;
  padding:6px;display:flex;flex-direction:column;gap:3px;cursor:pointer;
}
.cal-day-cell:hover{background:var(--surface-2);}
.cal-day-cell.outside{opacity:0.35;}
.cal-day-cell.today{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);}
.cal-day-num{font-size:12px;font-weight:600;color:var(--text-secondary);}
.cal-day-cell.today .cal-day-num{color:var(--accent);}
.cal-event-chip{
  font-size:10.5px;padding:2px 5px;border-radius:5px;color:#fff;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;cursor:pointer;
}
.cal-event-more{font-size:10px;color:var(--text-muted);padding:1px 5px;}

.cal-week-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;}
.cal-week-day{
  min-height:340px;background:var(--surface-1);border:1px solid var(--border);border-radius:10px;padding:10px;
  display:flex;flex-direction:column;gap:6px;cursor:pointer;
}
.cal-week-day:hover{background:var(--surface-2);}
.cal-week-day.today{border-color:var(--accent);}
.cal-week-day-header{font-size:12px;font-weight:700;color:var(--text-secondary);text-align:center;padding-bottom:6px;border-bottom:1px solid var(--border);}
.cal-week-day.today .cal-week-day-header{color:var(--accent);}

.cal-year-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px;}
.cal-year-month{background:var(--surface-1);border:1px solid var(--border);border-radius:10px;padding:12px;cursor:pointer;}
.cal-year-month:hover{background:var(--surface-2);}
.cal-year-month-title{font-weight:700;font-size:13px;margin-bottom:8px;color:var(--accent);text-align:center;}
.cal-year-weekday-row{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:3px;}
.cal-year-weekday-row span{font-size:8.5px;color:var(--text-muted);text-align:center;}
.cal-year-day-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;}
.cal-year-day{
  aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  font-size:8.5px;color:var(--text-muted);border-radius:3px;
}
.cal-year-day.outside{opacity:0.3;}
.cal-year-day.today{background:var(--accent);color:var(--accent-ink);font-weight:700;}
.cal-year-dot{width:3px;height:3px;border-radius:50%;display:block;}
.cumple-day{font-weight:700;min-width:20px;}
.cumple-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cumple-iglesia{color:var(--text-muted);font-size:11.5px;white-space:nowrap;}

/* ===================================================================
   Impresión / exportar a PDF (botón "Exportar a PDF" -> window.print())
   =================================================================== */
@media print{
  html, body{background:#fff !important;}
  body::before{display:none !important;}
  .sidebar, .header-controls, .footer-note, .toast{display:none !important;}
  .mobile-menu-btn, .sidebar-backdrop{display:none !important;}
  .app-layout{display:block;}
  .app-main{flex:none;width:100%;}
  .app{max-width:none;margin:0;padding:0 8px;background:#fff !important;}
  .card{background:#fff !important;box-shadow:none;}
  .card, .kpi-grid, .stat-tile, .table-wrap{break-inside:avoid;}
  * { -webkit-print-color-adjust:exact; print-color-adjust:exact; }
  @page{ size: letter; margin: 10mm 12mm; }

  /* Evaluación Tesorería: informe compacto, cabe en una sola hoja carta.
     Se fuerza texto oscuro en todo el bloque; los badges de nivel/riesgo
     recuperan su color propio abajo (selectores más específicos) a
     propósito. */
  #guardarBtn, #guardarBorradorBtn, #guardarNote, #borradorNote, #editingNote,
  .eval-print-area ~ section{ display:none !important; }
  .eval-print-area, .eval-print-area *{
    color:#161616 !important; background-color:transparent !important;
  }
  .eval-print-area{ font-size:11px; }
  .eval-print-area .badge.riesgo-a{ color:#b3261e !important; background:#fbe7e6 !important; }
  .eval-print-area .badge.riesgo-b{ color:#8a6200 !important; background:#fbf1d9 !important; }
  .eval-print-area .badge.riesgo-c{ color:#1c7a34 !important; background:#e3f5e7 !important; }
  .eval-print-area .badge.excelencia{ color:#1a56c4 !important; background:#e5edfb !important; }

  .eval-header-grid{
    display:grid; grid-template-columns:1.3fr 1fr 1.1fr; align-items:start;
    background:#fbfbfb !important; border-color:#999 !important;
    padding:8px 10px; gap:6px 12px; margin-bottom:8px; border-radius:6px;
  }
  .eval-header-grid label{ font-size:9px; color:#555 !important; text-transform:uppercase; letter-spacing:.03em; }
  .eval-header-grid select, .eval-header-grid input, .eval-item-input{
    border:none !important; background:transparent !important; padding:1px 0 !important;
    font-weight:600; font-size:11px; -webkit-appearance:none; appearance:none;
  }
  .eval-nivel-box{ min-width:0; }
  .eval-nivel-value{
    border:1px solid #999 !important; padding:4px 6px; font-size:10.5px;
    white-space:normal !important; word-break:break-word; line-height:1.25;
    box-sizing:border-box; width:100%;
  }

  .eval-print-area .table-wrap{ overflow:visible !important; border-radius:4px; border-color:#999 !important; }
  .eval-print-area .small-table{ min-width:0 !important; }
  .eval-print-area table{ min-width:0 !important; width:100% !important; table-layout:fixed; font-size:10px; }
  .eval-print-area thead th{ position:static; padding:3px 6px; font-size:8.5px; border-color:#999 !important; }
  .eval-print-area tbody td{ padding:3px 6px; white-space:normal; word-break:break-word; border-color:#ccc !important; }

  .eval-area{ margin-bottom:8px; break-inside:avoid; }
  .eval-area-title{
    padding:4px 10px; font-size:10px; border-radius:4px 4px 0 0;
    background:#eef4fc !important; border-color:#999 !important; border-left:4px solid #2a78d6 !important;
  }
  .eval-subtotal-row td{ padding:3px 6px; background:#f2f2f2 !important; }
  .eval-total-row{
    padding:8px 0; margin-top:4px; border-radius:6px;
    background:#fbfbfb !important; border-color:#999 !important;
  }
  .eval-total-label{ font-size:12px; }
  .eval-total-value{ font-size:12px; padding:4px 4px; border-color:#999 !important; }

  #pageSubtitle{ display:none !important; }
  header.top{ display:block !important; text-align:center; margin-bottom:8px; }
  header.top .title-block{ width:100%; }
  header.top h1{ text-align:center; font-size:17px; margin:0; }

  .eval-signatures{ margin-top:110px; padding:0 20px; }
  .eval-signature-line{ border-top-color:#333 !important; margin-bottom:4px; }
  .eval-signature-label{ font-size:10.5px; }
  .eval-signature-name{ font-size:10px; }

  /* Traspasos de Tesorería: exporta el acta a un documento formal aparte
     (#actaPrintArea), en vez de imprimir la pantalla tal cual — así el PDF
     queda con aspecto de acta impresa, con líneas en blanco para firmar. */
  body.printing-acta > *:not(.acta-print){ display:none !important; }
  body.printing-acta .acta-print{ display:block !important; }
}

.acta-print{ display:none; }
@media print{
  .acta-print{
    color:#161616 !important; background:#fff !important;
    max-width:190mm; margin:0 auto; font-size:11px;
    overflow-wrap:anywhere; word-break:break-word;
  }
  .acta-print-header{
    display:flex; align-items:center; gap:14px;
    border-bottom:2px solid #2a78d6; padding-bottom:10px; margin-bottom:14px;
  }
  .acta-print-logo{ width:44px; height:44px; object-fit:contain; }
  .acta-print-header h1{ font-size:16px; margin:0; letter-spacing:.02em; }
  .acta-print-header p{ font-size:11px; margin:2px 0 0; color:#555; }
  .acta-print h2{
    font-size:11.5px; background:#eef4fc; border-left:4px solid #2a78d6;
    padding:4px 8px; margin:14px 0 6px; border-radius:0 4px 4px 0;
  }
  .acta-print p{ margin:0 0 8px; line-height:1.4; }
  .acta-print table{ width:100% !important; min-width:0 !important; border-collapse:collapse; font-size:10.5px; margin-bottom:8px; border:1px solid #999; }
  .acta-print table td, .acta-print table th{
    border:1px solid #ccc; padding:5px 7px; text-align:left; vertical-align:top;
  }
  .acta-print table th{ background:#f5f5f5; }
  .acta-print table td.num, .acta-print table th.num{ text-align:right; }
  .acta-print table thead{ display:table-header-group; }
  .acta-print table tr{ break-inside:avoid; page-break-inside:avoid; }
  .acta-print-signatures{
    display:grid; grid-template-columns:repeat(2,1fr); gap:36px 30px; margin-top:70px;
    break-inside:avoid;
  }
  .acta-sig-line{ border-top:1px solid #333; margin-bottom:5px; }
  .acta-sig-label{ font-size:10px; font-weight:600; text-align:center; }
  .acta-sig-name{ font-size:10px; text-align:center; color:#555; margin-top:2px; }
  @page{ size:letter; margin:14mm; }
}
