/* ==========================================================================
   Control de Cartera de Arrendatarios - Conaltura Inmobiliaria
   Hoja de estilos portada desde la aplicación de referencia.

   Secciones:
     1. Paleta y base
     2. Encabezado, pestañas y tarjetas
     3. Controles y formularios
     4. Tablas  (incluye la SECCIÓN DE CORRECCIÓN de los filtros de columna)
     5. Dashboard
     6. Modales, avisos y notificaciones
     7. Ingreso y cambio de contraseña
     8. Adaptaciones por ancho y para impresión
   ========================================================================== */

/* --- 1. Paleta y base ---------------------------------------------------- */
:root{
  --azul:#125160;
  --azul-2:#0b3944;
  --azul-3:#1b6878;
  --verde:#A1D81A;
  --verde-2:#7CAF10;
  --gris:#F3F6F7;
  --gris-2:#DCE6E8;
  --gris-3:#EAF0F1;
  --texto:#26383D;
  --muted:#6B7F86;
  --blanco:#FFFFFF;
  --rojo:#DC2626;
  --rojo-bg:#FEE2E2;
  --morado:#7C3AED;
  --morado-bg:#EDE9FE;
  --azul-pill:#2563EB;
  --azul-pill-bg:#DBEAFE;
  --cafe:#7C4A2D;
  --cafe-bg:#F3E8DF;
  --verde-pill:#166534;
  --verde-pill-bg:#DCFCE7;
  --sombra:0 18px 45px rgba(18,81,96,.12);
  --sombra-suave:0 10px 28px rgba(18,81,96,.08);
  --radio:22px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;
  font-family:Inter,Segoe UI,Roboto,Arial,sans-serif;
  color:var(--texto);
  min-height:100vh;
  background:
    radial-gradient(circle at top left,rgba(161,216,26,.18),transparent 30%),
    radial-gradient(circle at bottom right,rgba(18,81,96,.14),transparent 30%),
    linear-gradient(135deg,#fff 0%,#f7faf9 48%,#eef3f4 100%);
}
button,input,select,textarea{font:inherit}
button{user-select:none}
.app{width:min(1760px,calc(100% - 28px));margin:0 auto;padding:24px 0 42px}

/* --- 2. Encabezado, pestañas y tarjetas --------------------------------- */
.hero{
  position:relative;overflow:hidden;color:#fff;
  background:linear-gradient(135deg,var(--azul),var(--azul-2));
  border-radius:30px;padding:26px 28px;box-shadow:var(--sombra)
}
.hero:before{content:"";position:absolute;right:-92px;top:-92px;width:360px;height:270px;border-radius:82px;transform:rotate(-9deg);background:var(--verde);opacity:.97}
.hero:after{content:"";position:absolute;right:185px;bottom:-78px;width:180px;height:180px;border-radius:50%;background:rgba(255,255,255,.07)}
.hero-content{position:relative;z-index:1;display:grid;grid-template-columns:1fr auto;gap:20px;align-items:center}
.brand{display:flex;gap:18px;align-items:center}
.logo{width:70px;height:70px;border-radius:23px;background:#fff;color:var(--azul);display:grid;place-items:center;font-weight:950;font-size:28px;box-shadow:0 14px 30px rgba(0,0,0,.14);letter-spacing:-1px}

/* Logo institucional.
   El archivo es blanco sobre fondo transparente, así que va directamente sobre
   el azul del encabezado y NO dentro de una caja blanca, donde desaparecería.
   Se fija la altura y el ancho se calcula solo, para respetar su proporción
   original de 953x300. */
.logo-marca{height:30px;width:auto;display:block;flex:0 0 auto}

/* Tamaño pedido para el encabezado de la aplicación.
   object-fit:contain hace que la imagen se ajuste DENTRO de esa caja sin
   deformarse: la proporción original (953x300) se respeta aunque la caja no sea
   exactamente proporcional. */
.hero .logo-marca{height:80px;width:250px;object-fit:contain;object-position:left center}

@media (max-width:720px){
  .logo-marca{height:24px}
  .hero .logo-marca{height:56px;width:175px}
}
h1{margin:0 0 8px;font-size:clamp(27px,4vw,44px);line-height:1.05;letter-spacing:-.02em}
.subtitle{margin:0;color:rgba(255,255,255,.84);font-size:14px;max-width:890px;line-height:1.55}
.hero-chip{display:inline-flex;align-items:center;gap:8px;margin-top:12px;background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.18);padding:7px 11px;border-radius:999px;font-size:12px;font-weight:800}
.hero-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end;max-width:440px}

.btn{border:0;border-radius:14px;padding:11px 14px;font-weight:850;cursor:pointer;transition:.18s transform,.18s box-shadow,.18s background,.18s opacity;display:inline-flex;gap:8px;align-items:center;justify-content:center;white-space:nowrap;text-decoration:none}
.btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 20px rgba(18,81,96,.18)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-primary{background:var(--verde);color:var(--azul)}
.btn-secondary{background:rgba(255,255,255,.15);color:#fff;border:1px solid rgba(255,255,255,.22)}
.btn-light{background:#fff;color:var(--azul);border:1px solid var(--gris-2)}
.btn-danger{background:#FEE2E2;color:#B91C1C}
.btn-azul{background:var(--azul);color:#fff}
.btn-soft{background:#EAF4F5;color:var(--azul)}

.tabs{margin:18px 0;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.tab-btn{border:1px solid var(--gris-2);background:rgba(255,255,255,.82);color:var(--azul);border-radius:999px;padding:10px 16px;font-weight:900;cursor:pointer;box-shadow:0 8px 18px rgba(18,81,96,.06);transition:.16s;text-decoration:none;display:inline-block}
.tab-btn.active{background:var(--azul);color:#fff;border-color:var(--azul)}
.panel{display:none;animation:fade .18s ease}
.panel.active{display:block}
@keyframes fade{from{opacity:.4;transform:translateY(3px)}to{opacity:1;transform:none}}

.card{background:rgba(255,255,255,.94);border:1px solid rgba(220,230,232,.98);border-radius:var(--radio);box-shadow:var(--sombra-suave)}
.card-header{padding:18px 18px 13px;border-bottom:1px solid var(--gris-2);display:flex;justify-content:space-between;gap:16px;align-items:center;flex-wrap:wrap}
.card-title{margin:0;color:var(--azul);font-size:20px;letter-spacing:-.01em}
.card-subtitle{margin:5px 0 0;color:var(--muted);font-size:13px;line-height:1.45}

/* --- 3. Controles y formularios ----------------------------------------- */
.control-grid{display:grid;grid-template-columns:minmax(230px,.7fr) minmax(280px,1.2fr) auto;gap:12px;padding:16px;align-items:end}
.field{min-width:0}
label,.mini-label{display:block;font-size:11px;color:var(--muted);font-weight:850;margin-bottom:5px;text-transform:uppercase;letter-spacing:.04em}
input,select,textarea{width:100%;border:1px solid #d6e1e3;background:#fff;color:var(--texto);border-radius:12px;padding:10px 11px;outline:none;transition:.16s border,.16s box-shadow;font-size:14px}
input:focus,select:focus,textarea:focus{border-color:var(--azul);box-shadow:0 0 0 3px rgba(18,81,96,.11)}
textarea{resize:vertical;min-height:58px;line-height:1.35}
.status-strip{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:0 16px 16px}
.info-chip{display:inline-flex;align-items:center;gap:7px;background:#f7fafb;border:1px solid var(--gris-2);border-radius:999px;padding:7px 10px;font-size:12px;color:var(--muted);font-weight:750}
.info-chip strong{color:var(--azul)}
.upload-zone{border:1.5px dashed #b8cdd1;background:linear-gradient(180deg,#fbfdfd,#f5f9f9);border-radius:18px;padding:18px;display:flex;align-items:center;justify-content:space-between;gap:14px;margin:0 16px 16px}
.upload-copy strong{display:block;color:var(--azul);margin-bottom:4px}
.upload-copy span{font-size:12px;color:var(--muted);line-height:1.45}

.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:16px 0}
.kpi{background:#fff;border:1px solid var(--gris-2);border-radius:20px;padding:17px;box-shadow:var(--sombra-suave);position:relative;overflow:hidden}
.kpi:after{content:"";position:absolute;right:-25px;top:-25px;width:88px;height:88px;border-radius:50%;background:rgba(161,216,26,.12)}
.kpi small{display:block;color:var(--muted);font-weight:800;margin-bottom:9px;font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.kpi strong{display:block;color:var(--azul);font-size:clamp(24px,3vw,31px);line-height:1.08;letter-spacing:-.02em}
.kpi em{display:block;margin-top:8px;color:#70868c;font-style:normal;font-size:12px}

.toolbar{padding:14px;display:grid;grid-template-columns:minmax(260px,1.4fr) repeat(3,minmax(170px,.6fr)) auto;gap:10px;align-items:end;border-bottom:1px solid var(--gris-2);background:linear-gradient(180deg,#fff,#f8fbfb)}
.toolbar.base{grid-template-columns:minmax(260px,1fr) auto}

.rules-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;padding:14px}
.rule-stat{background:#f8fbfb;border:1px solid var(--gris-2);border-radius:15px;padding:12px}
.rule-stat span{display:block;color:var(--muted);font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.045em;line-height:1.25}
.rule-stat strong{display:block;color:var(--azul);font-size:24px;margin-top:6px}

/* --- 4. Tablas ----------------------------------------------------------- */
.table-card{overflow:hidden}
.table-meta{padding:9px 14px;background:#F7FAFA;border-bottom:1px solid var(--gris-2);color:var(--muted);font-size:12px;font-weight:750;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:center}
.table-wrap{overflow:auto;max-height:670px;background:#fff;scrollbar-color:#aac2c7 #eef3f4;scrollbar-width:thin}
table{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px}
.base-table{min-width:1800px}
.clean-table{min-width:2050px}
.siniestros-table{min-width:2850px}

thead th{position:sticky;top:0;z-index:4;background:var(--azul);color:#fff;padding:11px 9px;text-align:left;border-right:1px solid rgba(255,255,255,.15);white-space:nowrap;font-size:11px;text-transform:uppercase;letter-spacing:.025em}
thead tr.filter-row th{top:37px;z-index:5;background:#edf3f4;color:var(--azul);padding:5px 6px;text-transform:none;letter-spacing:0;border-right:1px solid #dce6e8;border-bottom:1px solid #d4e0e2}
thead tr.filter-row th.sticky-id{z-index:7;background:#edf3f4}

.sort-head{display:flex;align-items:center;gap:7px;width:100%;padding:0;border:0;background:transparent;color:inherit;font:inherit;font-weight:900;text-transform:inherit;letter-spacing:inherit;cursor:pointer;text-align:left;white-space:nowrap;overflow:hidden}
.sort-head > span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sort-head:hover .sort-indicator{background:rgba(255,255,255,.18)}
.sort-indicator{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 5px;border-radius:6px;background:rgba(255,255,255,.09);font-size:10px;line-height:1;flex:0 0 auto}
.filter-row .sort-indicator{background:#dce7e9;color:var(--azul)}

th.actions-col,td.actions-col{position:sticky;right:0;z-index:3;text-align:center;box-shadow:-3px 0 8px rgba(18,81,96,.06)}
th.actions-col{z-index:7;background:var(--azul)}
.filter-row th.actions-col{z-index:8;background:#edf3f4}
td.actions-col{background:#fff!important;padding:6px!important}
.row-delete{border:0;border-radius:10px;padding:7px 9px;background:#FEE2E2;color:#B91C1C;font-weight:900;font-size:11px;cursor:pointer}
.row-delete:hover{background:#fecaca}
.restored-chip{display:inline-flex;align-items:center;gap:5px;padding:3px 7px;border-radius:999px;background:#ecfccb;color:#3f6212;font-size:10px;font-weight:900;margin-left:5px}

.column-scroll-control{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:center;padding:9px 14px;background:#f7fafb;border-bottom:1px solid var(--gris-2);position:sticky;top:0;z-index:8}
.column-scroll-control span{font-size:11px;font-weight:850;color:var(--azul);white-space:nowrap}
.column-scroll-control input[type=range]{padding:0;border:0;box-shadow:none;accent-color:var(--azul);height:24px;cursor:ew-resize;background:transparent}
.column-scroll-control input[type=range]:disabled{opacity:.35;cursor:default}

tbody td{border-bottom:1px solid #edf2f3;border-right:1px solid #edf2f3;padding:9px 8px;vertical-align:top;background:#fff;word-break:break-word;overflow:hidden}
tbody tr:nth-child(even) td{background:#fbfdfd}
tbody tr:hover td{background:#f4faef}
td.money{text-align:right;white-space:nowrap;font-weight:780;color:#27484f}
td.sticky-id,th.sticky-id{position:sticky;left:0;z-index:3;box-shadow:3px 0 7px rgba(18,81,96,.05)}
th.sticky-id{z-index:6;background:var(--azul)}
tbody td.sticky-id{background:#fff;font-weight:900;color:var(--azul)}
tbody tr:nth-child(even) td.sticky-id{background:#fbfdfd}

.manage-cell{padding:7px!important}
.manage-cell textarea{min-height:54px;font-size:12px;padding:8px 9px;border-radius:10px;background:#fffdf5;border-color:#e5e0c8}
.status-cell{padding:8px!important}
.status-select{font-size:12px;font-weight:850;border-radius:999px;padding:8px 10px;border-width:1px}
.status-select.empty{background:#fff;color:var(--muted);border-color:#d7e1e3}
.status-select.reportado{background:#FEF3C7;color:#92400E;border-color:#FDE68A}
.status-select.desistido{background:var(--verde-pill-bg);color:var(--verde-pill);border-color:#86efac}
.status-select.siniestrado{background:var(--rojo-bg);color:#991B1B;border-color:#fecaca}
.status-select.sin-aseguradora{background:var(--morado-bg);color:#6D28D9;border-color:#ddd6fe}
.status-select.pagado{background:var(--azul-pill-bg);color:#1D4ED8;border-color:#bfdbfe}
.status-select.siniestro-terminado{background:var(--cafe-bg);color:var(--cafe);border-color:#dec6b5}

.sin-status-select{font-size:12px;font-weight:900;border-radius:999px;padding:8px 10px;border-width:1px}
.sin-status-select.activo{background:#FEE2E2;color:#991B1B;border-color:#FCA5A5}
.sin-status-select.terminado{background:#DBEAFE;color:#1D4ED8;border-color:#93C5FD}
.sin-edit{padding:7px!important}
.sin-edit input,.sin-edit textarea{font-size:12px;padding:8px 9px;border-radius:10px}
.sin-observations textarea{min-height:54px;background:#fffdf5;border-color:#e5e0c8}
.sin-months{font-weight:950;text-align:center;color:var(--azul);background:#F5FAFB!important}
.sin-invalid{border-color:#DC2626!important;box-shadow:0 0 0 2px rgba(220,38,38,.12)!important}
.claims-note{margin:0 14px 14px}

.empty-state{padding:48px 20px;text-align:center;color:var(--muted)}
.empty-icon{width:62px;height:62px;border-radius:20px;background:#eef5f6;color:var(--azul);display:grid;place-items:center;margin:0 auto 14px;font-size:26px;font-weight:900}
.empty-state h3{margin:0 0 7px;color:var(--azul)}
.empty-state p{margin:0 auto;max-width:640px;font-size:13px;line-height:1.55}

/* ==========================================================================
   SECCIÓN DE CORRECCIÓN: filtros de columna
   --------------------------------------------------------------------------
   En la aplicación anterior cada pulsación reconstruía la tabla completa,
   incluido el <thead> con los inputs de filtro, y luego intentaba devolver el
   foco por JavaScript. De ahí la pérdida del cursor y el salto de línea del
   campo. Ahora:

     * El <thead> se pinta una sola vez en el servidor y JavaScript solo
       reemplaza el <tbody>: el input enfocado nunca se desmonta.
     * table-layout:fixed + <colgroup> dan ancho fijo a cada columna, así que
       escribir no puede reajustar el ancho ni empujar el campo a otra línea.
     * El input ocupa exactamente el ancho de su columna, en una sola línea y
       con altura fija.
   ========================================================================== */
.grid-tabla{table-layout:fixed}
.grid-tabla th,.grid-tabla td{overflow:hidden}

.column-filter{
  display:block;
  width:100%;
  height:30px;              /* altura fija: no crece ni se parte */
  min-width:0;              /* el ancho lo manda el <colgroup>, no el input */
  max-width:100%;
  white-space:nowrap;       /* una sola línea, siempre */
  overflow:hidden;
  text-overflow:ellipsis;
  line-height:18px;
  border-radius:8px!important;
  padding:5px 7px!important;
  font-size:11px!important;
  background:#fff!important;
  color:var(--texto)!important;
  border:1px solid #cadadd!important;
}
.column-filter::placeholder{color:#93a5aa}
.column-filter.active-filter{border-color:var(--verde-2)!important;box-shadow:0 0 0 2px rgba(161,216,26,.18)!important}
/* Se oculta la "x" nativa de los input[type=search]: cambia el ancho del campo
   al aparecer y desaparecer mientras se escribe. */
.column-filter::-webkit-search-cancel-button,
.column-filter::-webkit-search-decoration{-webkit-appearance:none;appearance:none}

/* Los editables de la tabla tampoco deben alterar la geometría al escribir. */
.grid-tabla td textarea{width:100%;max-width:100%;resize:vertical}
.grid-tabla td input,.grid-tabla td select{width:100%;max-width:100%}

/* Paginación: vive fuera de la tabla, así ni paginar toca el <thead>. */
.paginacion{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.paginacion .pag-btn{border:1px solid var(--gris-2);background:#fff;color:var(--azul);border-radius:9px;min-width:32px;height:30px;padding:0 9px;font-size:12px;font-weight:900;cursor:pointer}
.paginacion .pag-btn:disabled{opacity:.4;cursor:not-allowed}
.paginacion .pag-btn.activo{background:var(--azul);color:#fff;border-color:var(--azul)}
.paginacion select{width:auto;height:30px;padding:0 8px;font-size:12px;font-weight:800;border-radius:9px}
.paginacion-info{font-size:12px;font-weight:800;color:var(--azul);white-space:nowrap}

/* Indicador de guardado por fila y aviso de conflicto de edición. */
.guardado{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:900;border-radius:999px;padding:3px 7px;white-space:nowrap;transition:.2s opacity}
.guardado.oculto{opacity:0}
.guardado.guardando{background:#EAF4F5;color:var(--azul)}
.guardado.ok{background:#DCFCE7;color:#166534}
.guardado.error{background:#FEE2E2;color:#991B1B;cursor:pointer}
.guardado.conflicto{background:#FEF3C7;color:#92400E;cursor:pointer}
.celda-conflicto{outline:2px solid #F59E0B;outline-offset:-2px}
.cargando-tbody{opacity:.55;transition:.15s opacity}

/* --- 5. Dashboard -------------------------------------------------------- */
.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}
.dash-card{padding:18px}
.dash-card h3{margin:0 0 5px;color:var(--azul);font-size:17px}
.dash-card p{margin:0 0 16px;color:var(--muted);font-size:12px}
.bar-list{display:grid;gap:10px}
.bar-row{display:grid;grid-template-columns:minmax(120px,210px) 1fr auto;gap:10px;align-items:center;font-size:12px}
.bar-label{font-weight:800;color:#405b62;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-track{height:10px;background:#edf2f3;border-radius:999px;overflow:hidden}
.bar-fill{height:100%;background:linear-gradient(90deg,var(--azul),var(--verde));border-radius:999px;min-width:2px}
.bar-value{font-weight:900;color:var(--azul);white-space:nowrap;text-align:right}
.top-list{display:grid;gap:8px}
.top-item{display:grid;grid-template-columns:30px 1fr auto;gap:10px;align-items:center;padding:9px 10px;border-radius:13px;border:1px solid var(--gris-2);background:#fbfdfd}
.rank{width:28px;height:28px;border-radius:9px;background:#e7f1f3;color:var(--azul);display:grid;place-items:center;font-weight:900;font-size:11px}
.top-item strong{display:block;color:#365159;font-size:12px;margin-bottom:2px}
.top-item small{color:var(--muted);font-size:11px}
.top-money{font-weight:900;color:var(--azul);font-size:12px;white-space:nowrap}
.legend{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.legend span{padding:5px 8px;border-radius:999px;font-size:10px;font-weight:850}

/* --- 6. Modales, avisos y notificaciones -------------------------------- */
.modal{position:fixed;inset:0;background:rgba(8,35,42,.56);display:none;align-items:center;justify-content:center;padding:18px;z-index:90;backdrop-filter:blur(3px)}
.modal.open{display:flex}
.modal-card{background:#fff;border-radius:24px;width:min(470px,100%);padding:22px;box-shadow:0 25px 80px rgba(0,0,0,.25)}
.modal-card.modal-wide{width:min(1500px,96vw);max-height:92vh;display:flex;flex-direction:column;padding:0;overflow:hidden}
.modal-wide .modal-wide-header{padding:18px 20px;border-bottom:1px solid var(--gris-2);display:flex;align-items:center;justify-content:space-between;gap:14px}
.modal-wide .modal-wide-header h3{margin:0}
.modal-wide .modal-wide-body{padding:14px 18px 18px;overflow:auto}
.removed-toolbar{display:grid;grid-template-columns:minmax(260px,1fr) auto auto;gap:10px;align-items:end;margin-bottom:12px}
.removed-meta{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:0 0 10px;color:var(--muted);font-size:12px;font-weight:800}
.removed-table-wrap{overflow:auto;max-height:58vh;border:1px solid var(--gris-2);border-radius:15px;background:#fff}
.removed-table{min-width:1450px}
.removed-table th{position:sticky;top:0}
.removed-table td{padding:8px;vertical-align:middle}
.source-badge{display:inline-flex;padding:4px 8px;border-radius:999px;font-size:10px;font-weight:900;white-space:nowrap}
.source-auto{background:#EAF4F5;color:var(--azul)}
.source-manual{background:#FEE2E2;color:#991B1B}
.restore-row{border:0;border-radius:10px;padding:7px 9px;background:#ECFCCB;color:#3F6212;font-weight:900;font-size:11px;cursor:pointer}
.restore-row:disabled{opacity:.4;cursor:not-allowed}
.parse-warning{display:inline-flex;padding:3px 7px;border-radius:999px;background:#FEF3C7;color:#92400E;font-size:10px;font-weight:900}
.modal-card h3{margin:0 0 8px;color:var(--azul)}
.modal-card p{margin:0 0 16px;color:var(--muted);font-size:13px;line-height:1.5}
.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:18px;flex-wrap:wrap}

.toast{position:fixed;right:18px;bottom:18px;background:var(--azul);color:#fff;padding:13px 16px;border-radius:16px;box-shadow:var(--sombra);opacity:0;transform:translateY(10px);pointer-events:none;transition:.22s;z-index:100;max-width:min(420px,calc(100vw - 36px));font-size:13px;font-weight:750;line-height:1.4}
.toast.show{opacity:1;transform:translateY(0)}
.toast.error{background:#B91C1C}
.toast.ok{background:#166534}
.toast.warn{background:#9A6700}
.offline-banner{display:none;margin:14px 0 0;padding:11px 14px;border-radius:14px;background:#fff5d8;color:#77530b;border:1px solid #f4d78f;font-size:12px;font-weight:750}
.offline-banner.show{display:block}
.info-note{background:#F5FAFB;border:1px solid var(--gris-2);border-left:4px solid var(--verde);border-radius:12px;padding:10px 12px;font-size:12px;color:#405b62;line-height:1.5}
.storage-banner{background:#FEE2E2;color:#991B1B;border-color:#FCA5A5}
.footer-note{text-align:center;color:#7a8d92;font-size:11px;margin-top:18px}

/* Menú de usuario del encabezado.
   El encabezado tiene una forma verde decorativa en la esquina derecha, justo
   donde cae este menú. Por eso el chip y los botones llevan fondo azul sólido
   en vez del blanco translúcido de .btn-secondary: así se leen igual sobre el
   azul del encabezado y sobre el verde. */
.usuario-menu{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end}
.usuario-chip{display:inline-flex;align-items:center;gap:8px;background:rgba(11,57,68,.88);border:1px solid rgba(255,255,255,.22);padding:8px 12px;border-radius:999px;font-size:12px;font-weight:800;color:#fff}
.usuario-chip .punto{width:8px;height:8px;border-radius:50%;background:var(--verde)}
.usuario-menu .btn-secondary{background:rgba(11,57,68,.88);border-color:rgba(255,255,255,.26);color:#fff}
.usuario-menu .btn-secondary:hover{background:var(--azul-2)}

/* --- 7. Ingreso y cambio de contraseña ---------------------------------- */
.login-marco{min-height:100vh;display:grid;place-items:center;padding:24px}
.login-caja{width:min(430px,100%);background:#fff;border-radius:28px;box-shadow:var(--sombra);overflow:hidden;border:1px solid var(--gris-2)}
/* El encabezado del ingreso muestra solo el logo, centrado. */
.login-encabezado{
  position:relative;overflow:hidden;color:#fff;
  background:linear-gradient(135deg,var(--azul),var(--azul-2));
  padding:30px 24px;display:flex;justify-content:center
}
.login-encabezado:before{content:"";position:absolute;right:-78px;top:-96px;width:200px;height:170px;border-radius:62px;transform:rotate(-9deg);background:var(--verde);opacity:.96}
.login-encabezado .brand{position:relative;z-index:1;justify-content:center}
.login-encabezado .logo-marca{height:54px;margin:0 auto}
.login-cuerpo{padding:24px}
.login-cuerpo .field{margin-bottom:14px}
.login-cuerpo .btn{width:100%;padding:13px}
.login-pie{padding:0 24px 22px;color:var(--muted);font-size:11px;line-height:1.5;text-align:center}
.alerta{border-radius:13px;padding:11px 13px;font-size:12.5px;font-weight:750;line-height:1.45;margin-bottom:14px}
.alerta-error{background:#FEE2E2;color:#991B1B;border:1px solid #FCA5A5}
.alerta-ok{background:#DCFCE7;color:#166534;border:1px solid #86EFAC}
.alerta-aviso{background:#FEF3C7;color:#92400E;border:1px solid #FDE68A}
.alerta ul{margin:6px 0 0;padding-left:18px}
.requisitos-clave{font-size:11.5px;color:var(--muted);line-height:1.5;margin:-6px 0 14px}

/* --- 8. Adaptaciones por ancho y para impresión ------------------------- */
/* Portátil de 1366 px: la tabla sigue usable con desplazamiento horizontal. */
@media (max-width:1400px){
  .app{width:min(1760px,calc(100% - 20px))}
  .table-wrap{max-height:calc(100vh - 330px);min-height:320px}
}
@media (max-width:1200px){
  .control-grid{grid-template-columns:1fr 1fr}
  .control-grid .actions-group{grid-column:1/-1}
  .toolbar{grid-template-columns:1fr 1fr}
  .kpi-grid{grid-template-columns:1fr 1fr}
  .rules-grid{grid-template-columns:repeat(3,1fr)}
  .dashboard-grid{grid-template-columns:1fr}
}
@media (max-width:720px){
  .removed-toolbar{grid-template-columns:1fr}
  .column-scroll-control{grid-template-columns:1fr;gap:3px}
  .column-scroll-control span{white-space:normal}
  .app{width:min(100% - 16px,1760px);padding-top:8px}
  .hero{border-radius:22px;padding:22px 18px}
  .hero-content{grid-template-columns:1fr}
  .hero-actions{justify-content:flex-start}
  .brand{align-items:flex-start}
  .logo{width:58px;height:58px;border-radius:18px}
  .control-grid,.toolbar,.toolbar.base{grid-template-columns:1fr}
  .kpi-grid,.rules-grid{grid-template-columns:1fr}
  .upload-zone{align-items:flex-start;flex-direction:column}
  .bar-row{grid-template-columns:110px 1fr auto}
  .tabs{overflow:auto;flex-wrap:nowrap;padding-bottom:4px}
  .tab-btn{flex:0 0 auto}
}
@media print{
  .tabs,.hero-actions,.control-grid,.upload-zone,.toolbar,.modal,.toast,.offline-banner,.paginacion,.column-scroll-control,.usuario-menu{display:none!important}
  .panel{display:block!important}
  .table-wrap{max-height:none;overflow:visible}
  .card{box-shadow:none}
  .dashboard-grid{grid-template-columns:1fr}
  body{background:#fff}
  .hero{background:#fff;color:var(--azul);box-shadow:none;border:1px solid var(--gris-2)}
  .subtitle{color:var(--muted)}
  .hero:before,.hero:after{display:none}
}
