
:root{
  --azul:#253485;
  --azul-osc:#131b47;
  --azul-cl:#3448a8;
  --rojo:#de0716;
  --rojo-cl:#f79aa0;
  --rojo-osc:#a8121c;
  --tinta:#0d1b2a;
  --tinta-2:#46566b;
  --linea:#dde3ec;
  --fondo:#e3e7ee;
  --liga:#1d4ed8;
  --error:#b91c1c;
  --ok:#047857;
  --panel-osc:#101836;
}
*{box-sizing:border-box;margin:0;padding:0;}
body{
  font-family:'IBM Plex Sans','Segoe UI',system-ui,sans-serif;
  background:var(--fondo);color:var(--tinta);min-height:100vh;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{margin:0;}
button{font-family:inherit;cursor:pointer;}
input,select,textarea{font-family:inherit;color:var(--tinta);}
a{color:var(--liga);}
:focus-visible{outline:2px solid var(--liga);outline-offset:2px;border-radius:5px;}
@media (prefers-reduced-motion:reduce){*{animation:none !important;transition:none !important;}}
.mono{font-family:'IBM Plex Mono',ui-monospace,monospace;font-variant-numeric:tabular-nums;}

/* ==================================================================
   SHELL DE LA APLICACIÓN
================================================================== */
#app{display:none;}
#app.on{display:flex;min-height:100vh;}

.sidebar{
  width:246px;flex:none;position:sticky;top:0;height:100vh;z-index:40;
  background:linear-gradient(180deg,var(--azul) 0%,var(--azul-osc) 100%);
  display:flex;flex-direction:column;
  box-shadow:2px 0 22px -10px rgba(19,27,71,.8);
}
.sb-compact-toggle{position:absolute;top:12px;right:10px;width:28px;height:28px;border:1px solid rgba(255,255,255,.2);border-radius:8px;background:rgba(255,255,255,.1);color:#fff;font-size:23px;line-height:20px;cursor:pointer;z-index:2;transition:background .16s,transform .16s;}.sb-compact-toggle:hover{background:rgba(255,255,255,.2);}.sb-logo{position:relative;}
.sb-logo{padding:18px 16px 15px;text-align:center;border-bottom:1px solid rgba(255,255,255,.09);}
.sb-logo img{width:100%;max-width:158px;background:#fff;border-radius:8px;padding:8px 10px;display:block;margin:0 auto;}
.sb-logo .sis{
  display:block;margin-top:9px;font-family:'Archivo',sans-serif;font-size:12.5px;
  color:#fff;letter-spacing:.02em;
}
.sb-logo .sis b{font-weight:800;}
.sb-logo .sis i{font-style:normal;font-weight:300;color:var(--rojo-cl);letter-spacing:.13em;margin-left:.2em;}
.sb-logo .sub{
  display:block;margin-top:5px;font-size:9px;font-weight:700;letter-spacing:.2em;
  text-transform:uppercase;color:#8794cf;
}

.sb-user{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.09);}
.avatar{
  width:36px;height:36px;flex:none;border-radius:10px;display:grid;place-items:center;
  background:linear-gradient(135deg,#3d52c0,var(--rojo));color:#fff;
  font-family:'Archivo',sans-serif;font-weight:700;font-size:12.5px;letter-spacing:.01em;
}
.avatar.sm{width:34px;height:34px;font-size:11.5px;border-radius:9px;}
.avatar img{width:100%;height:100%;max-width:100%;max-height:100%;display:block;object-fit:cover;border-radius:inherit;}
.foto-usuario-editor{display:flex;align-items:center;gap:12px;padding:10px;border:1px solid #dce3f0;border-radius:12px;background:#f7f9fd;overflow:hidden;}
.foto-grande{width:52px;height:52px;min-width:52px;max-width:52px;min-height:52px;max-height:52px;border-radius:50%;font-size:11px;overflow:hidden;box-shadow:0 3px 12px rgba(24,43,105,.14);}
.foto-usuario-editor .foto-grande img{width:52px!important;height:52px!important;max-width:52px!important;max-height:52px!important;object-fit:cover!important;}
.foto-usuario-captura{flex:1;min-width:0;display:grid;gap:6px;}
.sb-user .datos{min-width:0;}
.sb-user .datos b{display:block;color:#fff;font-size:12.5px;font-weight:600;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sb-user .datos span{display:block;font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:#95a3dd;font-weight:600;margin-top:2px;}

.sb-nav{flex:1;padding:14px 10px;overflow-y:auto;}
.sb-tit{font-size:9px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:#7683c4;padding:9px 10px 6px;}
.sb-tit-label{display:flex;align-items:center;gap:8px;min-width:0;}
.sb-tit-ic{display:inline-flex;width:15px;height:15px;flex:none;letter-spacing:0;}
.sb-desplegable{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;border:0;border-radius:7px;background:transparent;text-align:left;color:#b4bee7;min-height:36px;}
.sb-desplegable:hover,.sb-desplegar:hover{background:rgba(255,255,255,.09);color:#fff;}
.sb-flecha{display:inline-block;font-size:21px;line-height:1;transition:transform .16s;}
[aria-expanded="true"]>.sb-flecha{transform:rotate(90deg);}
.sb-opciones[hidden]{display:none!important;}
.sb-modulo{margin-bottom:1px;}
.sb-modulo-fila{display:flex;align-items:stretch;gap:2px;min-height:36px;}
.sb-modulo-fila>.sb-item{flex:1;min-width:0;margin-bottom:3px;}
.sb-desplegar{display:flex;align-items:center;justify-content:center;flex:none;width:32px;margin-bottom:3px;border:0;border-radius:7px;background:transparent;color:#ccd4f0;}
.sb-grupo :focus-visible{outline-color:#fff;outline-offset:-2px;}
.sb-item{
  display:flex;align-items:center;gap:11px;width:100%;
  padding:10px 12px;margin-bottom:3px;border:none;border-radius:9px;
  background:transparent;color:#ccd4f0;font-size:15px;font-weight:600;text-align:left;
  position:relative;transition:background .16s,color .16s,transform .12s;
}
.sb-item .ic{width:18px;height:18px;flex:none;opacity:.9;}
.sb-item .txt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sb-item:hover{background:rgba(255,255,255,.09);color:#fff;transform:translateX(2px);}
.sb-item.on{background:rgba(255,255,255,.13);color:#fff;}
.sb-item.principal .txt{text-transform:uppercase;}
.sb-item.hija .txt{text-transform:none;}
.sb-item.on::before{content:'';position:absolute;left:-10px;top:8px;bottom:8px;width:3px;background:var(--rojo);border-radius:0 3px 3px 0;}
.sb-item.futuro{opacity:.62;}
.sb-item.futuro .pend{margin-left:auto;font-family:'IBM Plex Mono',monospace;font-size:9px;color:#7683c4;letter-spacing:.05em;}
.sb-item.salir{color:#ffb9b9;}
.sb-item.salir:hover{background:rgba(220,38,38,.22);color:#fff;}
/* El mismo formato para los módulos con y sin opciones desplegables. */
.sb-item.principal{font-size:9px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;padding:9px 10px 6px;}
.sb-item.principal .ic{width:15px;height:15px;}
.sb-pie{padding:12px 16px;border-top:1px solid rgba(255,255,255,.09);font-family:'IBM Plex Mono',monospace;font-size:9.5px;color:#7683c4;letter-spacing:.05em;}
.sb-credito{display:block;margin-top:5px;color:#b0b9e3;}
.sidebar-compacta .sidebar{width:76px;}
.sidebar-compacta .sb-logo{padding:18px 9px 15px;}.sidebar-compacta .sb-logo img{width:52px;padding:5px;border-radius:7px;}.sidebar-compacta .sb-logo .sis,.sidebar-compacta .sb-user .datos,.sidebar-compacta .sb-tit-label>span:not(.sb-tit-ic),.sidebar-compacta .sb-item .txt,.sidebar-compacta .sb-item .pend,.sidebar-compacta .sb-pie{display:none;}.sidebar-compacta .sb-flecha{font-size:16px;}
.sidebar-compacta .sb-user{justify-content:center;padding:12px 8px;}.sidebar-compacta .sb-nav{padding:12px 8px;}.sidebar-compacta .sb-tit{padding:8px 0 5px;text-align:center;}.sidebar-compacta .sb-tit-label{justify-content:center;}.sidebar-compacta .sb-tit-ic{width:18px;height:18px;}.sidebar-compacta .sb-modulo-fila{min-height:0;}.sidebar-compacta .sb-modulo-fila>.sb-item,.sidebar-compacta .sb-item{justify-content:center;gap:0;padding:10px 0;min-height:36px;}.sidebar-compacta .sb-item .ic{width:19px;height:19px;}.sidebar-compacta .sb-desplegar{width:20px;}.sidebar-compacta .sb-item.on::before{left:-8px;}.sidebar-compacta .sb-item[title]{cursor:pointer;}

.contenido{flex:1;min-width:0;display:flex;flex-direction:column;}

/* ---------- Cabecera de módulo ---------- */
.head{
  position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  padding:18px 28px 17px;background:linear-gradient(180deg,#fff,#fbfcfe);
  border-bottom:1px solid var(--linea);box-shadow:0 1px 3px rgba(13,27,42,.05);
}
.head::after{
  content:'';position:absolute;left:0;right:0;bottom:-1px;height:3px;
  background:linear-gradient(90deg,var(--rojo) 0,var(--azul) 42%,var(--azul-cl) 72%,rgba(52,72,168,0) 100%);
}
.head .placa{
  width:48px;height:48px;flex:none;border-radius:14px;display:grid;place-items:center;
  background:linear-gradient(145deg,#3a4fb4 0%,#253485 55%,#0d1338 100%);
  border:1px solid rgba(247,154,160,.5);color:var(--rojo-cl);position:relative;overflow:hidden;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.28),0 10px 20px -12px rgba(19,27,71,.95);
}
.head .placa::after{content:'';position:absolute;inset:0;background:linear-gradient(160deg,rgba(255,255,255,.18),rgba(255,255,255,0) 55%);}
.head .placa svg{width:25px;height:25px;position:relative;z-index:1;}
.head .txt{min-width:0;line-height:1.05;}
.head .eyebrow{
  display:flex;align-items:center;gap:6px;font-family:'Archivo',sans-serif;
  font-size:8.5px;font-weight:700;letter-spacing:.36em;text-transform:uppercase;
  color:var(--rojo-osc);margin-bottom:6px;
}
.head .eyebrow i{width:4px;height:4px;background:var(--rojo);transform:rotate(45deg);flex:none;}
.head h1{font-family:'Archivo',sans-serif;font-weight:800;font-size:23px;letter-spacing:.045em;text-transform:uppercase;color:var(--azul);}
.head p{margin:6px 0 0;font-size:12.5px;color:var(--tinta-2);max-width:76ch;}
.head .der{margin-left:auto;display:flex;gap:9px;flex-wrap:wrap;align-items:center;}
.head .head-acciones{margin-left:auto;display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap;max-width:100%;}
.head .head-acciones .der{margin-left:0;}
.head-global{display:flex;align-items:center;justify-content:flex-end;gap:9px;flex-wrap:wrap;max-width:100%;}
.head .head-global .head-emergencias{margin-left:0;}
.head .head-global .head-emergencias:empty{display:none;}
.btn-actualizar-datos[aria-busy="true"]{opacity:.72;cursor:wait;}
.head .eyebrow .cod{font-family:'IBM Plex Mono',monospace;font-size:9.5px;letter-spacing:.05em;color:#94a3b8;text-transform:none;font-weight:400;}
.head .eyebrow .cod::before{content:'\00b7';margin:0 5px;color:#cbd5e1;}
.codigo{
  font-family:'IBM Plex Mono',monospace;font-size:10.5px;color:var(--tinta-2);
  border:1px solid var(--linea);border-radius:6px;padding:3px 8px;background:#fff;letter-spacing:.03em;
}

.zona{padding:24px 28px 44px;}

/* ---------- Pestañas de trabajo ---------- */
.workspace-tabs{display:flex;align-items:stretch;gap:5px;min-height:48px;padding:7px 24px 0;background:#f4f6fa;border-bottom:1px solid #dbe3ef;overflow-x:auto;}
.workspace-tab{display:flex;align-items:stretch;flex:0 0 auto;border:1px solid #dbe3ef;border-bottom:none;border-radius:9px 9px 0 0;background:#e9eef6;}
.workspace-tab.on{background:#fff;border-color:#b7c5dc;box-shadow:0 -2px 0 var(--azul-cl) inset;}
.workspace-tab-ir,.workspace-tab-cerrar{border:0;background:transparent;color:var(--tinta-2);cursor:pointer;}
.workspace-tab-ir{display:flex;align-items:center;gap:7px;padding:10px 11px;font:600 12px 'IBM Plex Sans',sans-serif;white-space:nowrap;}
.workspace-tab.on .workspace-tab-ir{color:var(--azul);}
.workspace-tab-ic{display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;}
.workspace-tab-ic svg{width:16px;height:16px;}
.workspace-tab-cerrar{padding:0 9px 1px 2px;font-size:18px;line-height:1;}
.workspace-tab-cerrar:hover{color:#b3111c;}

/* ---------- Campos de formulario ----------
   Vive aquí y no en acceso.css porque lo usan los modales de la aplicación:
   alta y edición de usuario, alta de perfil y cambio de contraseña. */
.campo{display:flex;flex-direction:column;min-width:0;}
.campo > label{
  font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--tinta-2);margin-bottom:7px;
}
.campo .inp{width:100%;}
.campo input:disabled, .campo .inp:disabled{background:#f4f6fa;color:#94a3b8;cursor:not-allowed;}

/* ---------- Botones ---------- */
.btn{
  border:1px solid transparent;border-radius:9px;padding:10px 17px;
  font-weight:600;font-size:13px;color:#fff;background:var(--azul-cl);
  display:inline-flex;align-items:center;gap:8px;white-space:nowrap;
  transition:transform .12s,box-shadow .18s,background .18s,border-color .18s;
}
.btn:hover{transform:translateY(-1px);box-shadow:0 8px 18px -10px rgba(19,27,71,.8);}
.btn-nuevo{background:linear-gradient(180deg,#12a06f,#0a7a53);}
.btn-nuevo:hover{background:linear-gradient(180deg,#15b47d,#0b8a5e);}
.btn-claro{background:#fff;color:var(--tinta);border-color:#c9d3e2;}
.btn-claro:hover{border-color:var(--azul-cl);color:var(--azul);}
.btn-sm{padding:7px 13px;font-size:12.5px;border-radius:8px;}

.ico-btn{
  width:32px;height:32px;padding:0;border-radius:9px;border:1px solid var(--linea);
  background:#f4f7fb;color:#5b6b80;display:grid;place-items:center;
  transition:background .15s,color .15s,border-color .15s;
}
.ico-btn svg{width:15px;height:15px;}
.ico-btn:hover{background:#e6ecf7;color:var(--azul);border-color:#c3cede;}
.ico-btn.edit:hover{background:#dbe4fe;color:#1d4ed8;border-color:#bfd0fb;}
.ico-btn.pass:hover{background:#fef3c7;color:#92400e;border-color:#f4dd9a;}
.ico-btn.mail:hover{background:#e0f2fe;color:#0369a1;border-color:#bae6fd;}
.ico-btn.lock:hover{background:#fee2e2;color:#991b1b;border-color:#f6c6c6;}
.ico-btn.on:hover{background:#d1fae5;color:#065f46;border-color:#a7e8cd;}
.ico-btn:disabled{opacity:.3;cursor:not-allowed;}

/* ---------- Tarjetas y tablas ---------- */
.tarjeta{background:#fff;border:1px solid var(--linea);border-radius:14px;box-shadow:0 1px 2px rgba(13,27,42,.04);overflow:hidden;}
.t-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:15px 18px;border-bottom:1px solid #eef1f7;flex-wrap:wrap;}
.t-head h3{font-family:'Archivo',sans-serif;font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--azul);}
.t-body{padding:18px;}

.filtros{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;padding:16px 18px;border-bottom:1px solid #eef1f7;background:#fbfcfe;}
.f-campo label{display:block;font-size:10px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--tinta-2);margin-bottom:5px;}
.inp{
  font-size:13.5px;padding:10px 13px;border:1px solid #c3cede;border-radius:9px;background:#fff;color:var(--tinta);
  transition:border-color .16s,box-shadow .16s;
}
.inp:focus{outline:none;border-color:var(--liga);box-shadow:0 0 0 3px rgba(29,78,216,.13);}
.inp::placeholder{color:#718096;}
select.inp{appearance:none;padding-right:30px;
  background-image:linear-gradient(45deg,transparent 50%,#8d9bb1 50%),linear-gradient(135deg,#8d9bb1 50%,transparent 50%);
  background-position:calc(100% - 16px) 50%,calc(100% - 11px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;}
.f-campo .inp{min-width:190px;}
.f-campo.ancho .inp{min-width:280px;}
.f-cuenta{
  margin-left:auto;font-size:15px;font-weight:800;letter-spacing:.01em;color:var(--azul);
  padding:8px 13px;border:1px solid #cbd8f4;border-radius:9px;background:#eef3ff;
  white-space:nowrap;line-height:1.2;font-variant-numeric:tabular-nums;
}

.tabla-wrap{overflow-x:auto;}
table.tabla{min-width:940px;}
table.tabla{width:100%;border-collapse:collapse;}
table.tabla thead th{
  text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--tinta-2);
  padding:11px 14px;border-bottom:2px solid #e2e8f0;white-space:nowrap;background:#fbfcfe;
}
table.tabla tbody td{padding:12px 14px;border-bottom:1px solid #f1f5f9;font-size:13.5px;vertical-align:middle;}
table.tabla tbody tr:last-child td{border-bottom:none;}
table.tabla tbody tr:hover{background:#f8fafc;}
table.tabla tbody tr.apagada{opacity:.58;}
.cel-usuario{display:flex;align-items:center;gap:11px;min-width:225px;}
.cel-usuario .datos{min-width:0;}
.cel-usuario .datos b{display:block;font-size:13.5px;font-weight:700;color:#0f172a;line-height:1.3;}
.cel-usuario .datos span{display:block;font-size:12px;color:var(--tinta-2);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:230px;}
.cel-fecha{color:var(--tinta-2);font-size:12.5px;white-space:nowrap;font-family:'IBM Plex Mono',monospace;font-variant-numeric:tabular-nums;}
/* Sucursal, perfil y estado en un solo renglón: "Matriz Ciudad de México"
   partido en cuatro líneas empujaba la columna de acciones fuera de la vista. */
table.tabla td.nowrap, table.tabla th.nowrap{white-space:nowrap;}
table.tabla .badge{max-width:none;}
.cel-fecha .nunca{color:#cbd5e1;font-style:italic;font-family:'IBM Plex Sans',sans-serif;}
.acciones{display:flex;gap:5px;justify-content:flex-end;}

.badge{display:inline-block;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:700;white-space:nowrap;border:1px solid transparent;}
.b-admin{background:#e6e9fb;color:#2c3a94;border-color:#c9d0f3;}
.b-perfil{background:#e0f2fe;color:#075985;border-color:#bae1f8;}
.b-activo{background:#dcfce7;color:#166534;border-color:#b6ecc9;}
.b-bloq{background:#fef3c7;color:#92400e;border-color:#f2dda2;}
.b-inact{background:#fee2e2;color:#991b1b;border-color:#f6c9c9;}
.b-sistema{background:#f1f5f9;color:#475569;border-color:#dfe6ef;}
.b-neutro{background:#eef1f7;color:#3f4a63;border-color:#dde3ec;}

.t-pie{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 18px;border-top:1px solid #eef1f7;font-size:12.5px;color:var(--tinta-2);flex-wrap:wrap;background:#fbfcfe;}
.pager{display:flex;gap:5px;}
.pager button{width:31px;height:31px;border-radius:8px;border:1px solid var(--linea);background:#fff;font-size:12.5px;color:var(--tinta-2);}
.pager button.on{background:var(--azul);color:#fff;border-color:var(--azul);font-weight:700;}

/* ---------- Administración y control ---------- */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(196px,1fr));gap:14px;margin-bottom:20px;position:sticky;top:95px;z-index:25;padding:8px 0;background:var(--fondo,#f3f5fa);}
.kpi{background:#fff;border:1px solid var(--linea);border-left:4px solid var(--azul-cl);border-radius:12px;padding:15px 17px;box-shadow:0 1px 2px rgba(13,27,42,.04);}
.kpi.aviso{border-left-color:#d97706;}
.kpi.riesgo{border-left-color:var(--rojo);}
.kpi .lbl{font-family:'Archivo',sans-serif;font-size:10px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--tinta-2);}
.kpi .num{font-family:'Archivo',sans-serif;font-weight:800;font-size:34px;line-height:1.08;margin-top:5px;color:var(--azul);font-variant-numeric:tabular-nums;}
.kpi.aviso .num{color:#b45309;}
.kpi.riesgo .num{color:#b3111c;}
.kpi .sub{font-size:12px;color:var(--tinta-2);margin-top:3px;}
.kpi-alerta{font:inherit;text-align:left;cursor:pointer;width:100%;}
.kpi-alerta:hover,.kpi-alerta.on{border-color:#aebbd0;box-shadow:0 8px 18px -14px rgba(19,27,71,.65);}
.semaforo{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;white-space:nowrap;}
.semaforo i{display:inline-block;width:9px;height:9px;border-radius:50%;box-shadow:0 0 0 2px rgba(15,23,42,.08);}
.semaforo-verde{color:#087552;}.semaforo-verde i{background:#16a34a;}
.semaforo-amarillo{color:#a16207;}.semaforo-amarillo i{background:#eab308;}
.semaforo-rojo{color:#b3111c;}.semaforo-rojo i{background:#dc2626;}
.vigencia-indicador{margin-top:6px;min-height:16px;}

/* ---------- Disponibilidad de unidades ---------- */
.program-tabs{
  display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:10px;
  padding:6px;margin-bottom:20px;background:#e7ecf5;border:1px solid #d7deea;border-radius:14px;
}
.program-tab{
  border:1px solid transparent;border-radius:10px;background:transparent;color:#526178;
  padding:12px 16px;text-align:left;display:flex;align-items:center;justify-content:space-between;gap:12px;
  font-family:'Archivo',sans-serif;font-size:13px;font-weight:700;
}
.program-tab small{font-family:'IBM Plex Sans',sans-serif;font-size:11.5px;font-weight:500;color:#7b8aa1;}
.program-tab.on{background:#fff;color:var(--azul);border-color:#cbd5e1;box-shadow:0 3px 10px rgba(23,37,84,.08);}
.program-tab.on small{color:#526178;}

.flota-kpis{grid-template-columns:repeat(3,minmax(230px,330px));justify-content:start;gap:12px;margin-bottom:14px;}
.flota-principales{grid-template-columns:repeat(2,minmax(230px,330px));margin-bottom:4px;}
  .flota-resumen-sticky{position:sticky;top:95px;z-index:100;isolation:isolate;height:334px;box-sizing:border-box;padding-bottom:10px;background:var(--fondo,#f3f5fa);overflow:visible!important;}
  .flota-resumen-sticky>.kpis{position:static;}
  .flota-layout-toolbar{position:absolute;right:0;top:-42px;display:flex;align-items:center;gap:8px;z-index:60;}
  .flota-layout-toolbar span{font-size:10px;color:#718096;}
  .flota-layout-editando [data-layout-card]{cursor:move;outline:2px dashed rgba(37,99,235,.42);outline-offset:3px;}
  .flota-layout-editando .flota-resize-handle{display:block;position:absolute;right:4px;bottom:4px;width:12px;height:12px;border-right:3px solid #2563eb;border-bottom:3px solid #2563eb;cursor:nwse-resize;}
  [data-layout-card]{position:relative;}
  .flota-fila-principal{grid-template-columns:345px 345px repeat(6,minmax(0,1fr));height:334px;min-height:334px;overflow:visible;padding-bottom:6px;position:relative;z-index:1;}
  .flota-fila-principal>.kpi{min-width:0;}
  .flota-fila-principal>.kpi:nth-child(-n+2){min-height:334px;height:334px;box-sizing:border-box;}
  .flota-fila-principal>.kpi:nth-child(n+3){min-height:160px;height:160px;padding:12px 10px;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;text-align:center;}
  .flota-fila-principal>.kpi:nth-child(n+3) .lbl,
  .flota-fila-principal>.kpi:nth-child(n+3) .num,
  .flota-fila-principal>.kpi:nth-child(n+3) .sub{width:100%;text-align:center;}
  .flota-fila-principal>.kpi:nth-child(n+3) .preasig-en-kpi{width:100%;justify-content:center;flex-direction:column;gap:3px;text-align:center;}
  .flota-fila-principal>.kpi:nth-child(9){grid-column:3;grid-row:2;}
  .flota-fila-principal>.kpi:nth-child(10){grid-column:7;grid-row:2;}
  .flota-fila-principal>.kpi.preasignadas{grid-column:4 / span 3;grid-row:2;margin-top:0;min-height:140px;height:140px;padding:12px 10px;position:relative;z-index:2;}
  .flota-fila-principal>.kpi:nth-child(n+9){min-height:140px;height:140px;position:relative;top:-170px;z-index:2;}
  .flota-resumen-sticky + .tarjeta-flota{margin-top:15px;position:relative;z-index:1;}
  .flota-principales>.kpi{width:100%;box-sizing:border-box;}
  .flota-kpis .kpi{min-width:0;padding:14px 13px;border-radius:12px;}
.flota-kpis>.kpi{align-self:start;}
.flota-estados{display:grid;grid-template-columns:repeat(9,minmax(145px,1fr));gap:10px;margin:0 0 18px;overflow-x:auto;padding-bottom:4px;}
.flota-estados .kpi{padding:12px 14px;border-radius:10px;min-width:0;}
.flota-estados .kpi .lbl{font-size:9px;letter-spacing:.09em;line-height:1.2;}
.flota-estados .kpi .num{font-size:27px;margin-top:4px;}
.flota-estados .kpi .sub{font-size:10px;line-height:1.2;min-height:24px;}
.flota-kpis .kpi .lbl{font-size:10px;letter-spacing:.09em;line-height:1.25;}
.flota-kpis .kpi .num{font-size:32px;margin-top:6px;}
.flota-kpis .kpi .sub{font-size:11px;line-height:1.25;min-height:28px;}
.preasig-resumen{display:grid;grid-template-columns:repeat(11,minmax(0,1fr));gap:8px;margin:-8px 0 16px;}
  .flota-resumen-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:0 0 18px;}
  .flota-resumen-card{margin:0;overflow:hidden;}
  .flota-resumen-card .t-head{padding:14px 16px;}
  .flota-resumen-card .tabla-wrap{max-height:260px;overflow:auto;}
  .flota-resumen-card .tabla{min-width:0;}
  .flota-resumen-ciudad{grid-column:1 / -1;}
.preasig-estado:nth-child(1){grid-column:3;}
.preasig-estado:nth-child(2){grid-column:4;}
.preasig-estado:nth-child(3){grid-column:5;}
.preasig-estado{min-width:0;padding:9px 12px;border:1px solid #d6dfed;border-left:3px solid #0891b2;border-radius:9px;background:#fff;display:grid;grid-template-columns:1fr auto;align-items:center;column-gap:10px;}
.preasig-estado .lbl{font:700 9px 'Archivo',sans-serif;letter-spacing:.08em;text-transform:uppercase;color:#526178;}
.preasig-estado strong{grid-column:2;grid-row:1 / span 2;font:700 22px 'Archivo',sans-serif;color:#0e7490;}
.preasig-estado small{font-size:10px;color:#7b8aa1;}
.tarjeta-flota{overflow:visible;}
.tipo-multi{position:relative;min-width:190px;}
.tipo-multi>summary{height:42px;min-width:190px;padding:11px 36px 10px 12px;border:1px solid #bdcbe0;border-radius:9px;background:#fff;color:var(--tinta);font-size:13px;cursor:pointer;list-style:none;position:relative;}
.tipo-multi>summary::-webkit-details-marker{display:none;}
.tipo-multi>summary:after{content:'▾';position:absolute;right:12px;color:#8392aa;}
.tipo-multi[open]>summary{border-color:#8fa4ce;border-radius:9px 9px 0 0;}
.tipo-multi-panel{position:absolute;z-index:30;top:100%;left:0;min-width:100%;width:max-content;max-width:290px;max-height:280px;overflow:auto;padding:7px;background:#fff;border:1px solid #bdcbe0;border-top:0;border-radius:0 0 9px 9px;box-shadow:0 10px 22px rgba(23,37,84,.16);}
.tipo-multi-panel label{display:flex;align-items:center;gap:8px;padding:8px 9px;border-radius:6px;color:var(--tinta);font-size:13px;letter-spacing:0;text-transform:none;cursor:pointer;}
.tipo-multi-panel label:hover{background:#f1f5fb;}
.tipo-multi-panel input{width:16px;height:16px;margin:0;accent-color:#243f9b;}
.tipo-multi-panel button{margin:7px 4px 3px;}
.preasignaciones-card table.tabla{min-width:900px;}
.kpi-flota{font:inherit;text-align:left;cursor:pointer;color:inherit;width:100%;}
.kpi-flota:hover{border-color:#aebbd0;box-shadow:0 8px 18px -14px rgba(19,27,71,.65);}
.kpi-flota.on{outline:3px solid rgba(30,64,175,.13);border-color:#8fa4ce;}
.kpi-flota span{display:block;}
  .kpi-flota .detalle-tipos{display:flex;flex-direction:column;gap:4px;margin-top:9px;padding-top:8px;border-top:1px solid #e6ebf4;}
  .kpi-flota .detalle-tipo{display:grid;grid-template-columns:minmax(0,1fr) 72px 30px;gap:8px;align-items:center;font-size:12px;line-height:1.2;color:var(--tinta-2);}
  .kpi-flota .detalle-tipo>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .kpi-flota .detalle-tipo i{display:block;height:8px;border-radius:99px;background:#e8edf5;overflow:hidden;}
  .kpi-flota .detalle-tipo i b{display:block;height:100%;min-width:2px;border-radius:99px;}
  .kpi-flota .detalle-tipo strong{font:700 13px 'IBM Plex Mono',monospace;text-align:right;color:var(--azul);}
  .kpi-flota .detalle-vacio{font-size:10px;color:var(--tinta-2);}
  .flota-principales .kpi-flota .detalle-tipo>span{overflow:visible;text-overflow:clip;white-space:normal;}
  .kpi-flota.disponibles-con-operador .detalle-tipo{grid-template-columns:minmax(0,1fr) 30px;grid-template-areas:'tipo total' 'barra total';row-gap:4px;}
  .kpi-flota.disponibles-con-operador .detalle-tipo>span{grid-area:tipo;overflow:visible;text-overflow:clip;white-space:nowrap;}
  .kpi-flota.disponibles-con-operador .detalle-tipo>i{grid-area:barra;width:100%;}
  .kpi-flota.disponibles-con-operador .detalle-tipo>strong{grid-area:total;grid-row:1 / span 2;}
  .kpi-flota.disponibles-con-operador .detalle-tipo i{background:#dbeafe;}
  .kpi-flota.disponibles-con-operador .detalle-tipo i b{background:#2563eb!important;}
  .preasig-en-kpi{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-top:9px;padding-top:7px;border-top:1px solid #e6ebf4;font-size:10px;color:#526178;line-height:1.15;}
  .preasig-en-kpi strong{font:700 16px 'IBM Plex Mono',monospace;color:#0e7490;}
  .detalle-tipos{display:flex;flex-direction:column;gap:7px;}
  .detalle-tipo{display:grid;grid-template-columns:minmax(180px,1fr) 160px 42px;gap:10px;align-items:center;font-size:14px;line-height:1.2;color:var(--tinta-2);}
  .detalle-tipo>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .detalle-tipo i{display:block;height:9px;border-radius:99px;background:#e8edf5;overflow:hidden;}
  .detalle-tipo i b{display:block;height:100%;min-width:2px;border-radius:99px;}
  .detalle-tipo strong{font:700 14px 'IBM Plex Mono',monospace;text-align:right;color:var(--azul);}
  .kpi-ciudades{border-left-color:#2563eb!important;cursor:default!important;width:100%;height:184px;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;}
  .kpi-ciudades .ciudades-detalle{display:flex;flex-direction:column;gap:10px;margin-top:10px;padding-top:9px;border-top:1px solid #e6ebf4;flex:1;min-height:0;max-height:none;overflow-y:auto;}
  .ciudad-detalle{border-left:6px solid var(--ciudad-color);border-radius:8px;background:#f8fafc;padding:12px 16px;}
  .ciudad-detalle-titulo{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;color:var(--ciudad-color);font-size:14px;font-weight:800;}
  .flota-enlace-filtro{cursor:pointer;}
  button.flota-enlace-filtro{border:0;background:transparent;padding:0;color:inherit;font:inherit;text-align:left;text-decoration:underline;text-decoration-color:transparent;text-underline-offset:3px;}
  button.flota-enlace-filtro:hover,.flota-enlace-filtro:focus{color:var(--azul);text-decoration-color:currentColor;outline:none;}
  .ciudad-detalle-titulo strong{font:700 12px 'IBM Plex Mono',monospace;color:var(--tinta);white-space:nowrap;}
  .kpi-ciudades .ciudad-detalle{padding:8px 10px;border-left-width:4px;}
  .kpi-ciudades .detalle-tipo{grid-template-columns:minmax(70px,1fr) 45px 25px;gap:5px;font-size:11px;}
  .kpi-ciudades .detalle-tipo i{height:6px;}
  .kpi-ciudades .detalle-tipo strong{font-size:11px;}
.kpi-flota.disponible{border-left-color:#159365;}
.kpi-flota.disponible .num{color:#087552;}
.kpi-flota.disponibles-con-operador{border-left-color:#16a34a;}
.kpi-flota.disponibles-con-operador .num{color:#15803d;}
.kpi-flota.viaje{border-left-color:#2563eb;}
.kpi-flota.transito{border-left-color:#7c3aed;}
.kpi-flota.transito .num{color:#6d28d9;}
.kpi-flota.taller{border-left-color:#d97706;}
.kpi-flota.taller .num{color:#b45309;}
.kpi-flota.preasignadas{border-left-color:#0891b2;}
.kpi-flota.preasignadas .num{color:#0e7490;}
.kpi-flota.fuera{border-left-color:#c81e2a;}
.kpi-flota.fuera .num{color:#b3111c;}
.b-transito{background:#f3e8ff;color:#6b21a8;border-color:#dfc5f4;}

.resumen-bases table.tabla{min-width:760px;}
.resumen-bases td:not(:first-child),.resumen-bases th:not(:first-child){text-align:center;}
.resumen-bases td.disponible{color:#087552;font-weight:700;}
.resumen-bases td.transito{color:#6d28d9;font-weight:700;}
.resumen-bases td.taller{color:#b45309;font-weight:700;}
.resumen-bases td.fuera{color:#b3111c;font-weight:700;}
.tabla-flota{min-width:1040px!important;}
.unidad-eco{font-size:14px;color:#172554;}

@media (max-width:1350px){
  .flota-kpis{grid-template-columns:repeat(3,minmax(210px,1fr));gap:10px;}
  .flota-principales{grid-template-columns:repeat(2,minmax(210px,1fr));}
  .flota-estados{grid-template-columns:repeat(9,minmax(135px,1fr));gap:8px;}
}
@media (max-width:760px){
  .program-tabs{grid-template-columns:1fr;}
    .flota-resumen-grid{grid-template-columns:1fr;}
    .flota-resumen-ciudad{grid-column:auto;}
  .kpis{top:76px;}
  .flota-kpis{grid-template-columns:1fr;gap:8px;}
  .flota-principales{grid-template-columns:1fr;}
  .flota-estados{grid-template-columns:repeat(9,minmax(145px,1fr));gap:8px;}
  .preasig-resumen{grid-template-columns:repeat(11,minmax(82px,1fr));gap:6px;overflow-x:auto;padding:3px 3px 8px;}
  .program-tab{align-items:flex-start;flex-direction:column;gap:3px;}
}

.rejilla{display:grid;grid-template-columns:1.3fr .7fr;gap:18px;align-items:start;}
@media (max-width:1080px){.rejilla{grid-template-columns:1fr;}}

/* ---------- Centro operativo inicial ---------- */
.inicio-bienvenida{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:18px;padding:22px 24px;background:linear-gradient(120deg,#172d78,#263f9b);border-radius:15px;color:#fff;box-shadow:0 8px 24px rgba(23,45,120,.16);}
.inicio-eyebrow{font:700 10px 'Archivo',sans-serif;letter-spacing:.18em;text-transform:uppercase;color:#b9c9ff;margin-bottom:8px;}
.inicio-bienvenida h2{font:800 27px 'Archivo',sans-serif;letter-spacing:-.02em;margin:0 0 5px;}
.inicio-bienvenida p{font-size:13.5px;color:#dbe5ff;margin:0;max-width:690px;}
.inicio-fecha{font:500 12px 'IBM Plex Mono',monospace;color:#dbe5ff;white-space:nowrap;text-transform:capitalize;}
.inicio-kpis{margin-bottom:18px;}
.inicio-kpi{min-height:106px;}
.inicio-kpi.disponible{border-left-color:#159365;}.inicio-kpi.disponible .num{color:#087552;}
.inicio-kpi.viaje{border-left-color:#2563eb;}.inicio-kpi.viaje .num{color:#1d4ed8;}
.inicio-grid-principal,.inicio-grid-secundario{display:grid;grid-template-columns:1.15fr .85fr;gap:18px;align-items:start;margin-bottom:18px;}
.inicio-grid-secundario{grid-template-columns:1fr 1fr;}
.inicio-tareas,.inicio-accesos,.inicio-modulos{padding:10px 14px 14px;display:grid;gap:8px;}
.inicio-tarea,.inicio-acceso,.inicio-modulo{width:100%;display:flex;align-items:center;gap:11px;text-align:left;border:1px solid transparent;border-radius:10px;background:#fff;color:var(--tinta);padding:11px 10px;cursor:pointer;transition:background .15s,border-color .15s,transform .15s;}
.inicio-tarea:hover,.inicio-acceso:hover,.inicio-modulo:hover{background:#f7f9fd;border-color:#cad5e8;transform:translateY(-1px);}
.inicio-tarea{border-color:#eef1f7;}.inicio-tarea.aviso{border-left:3px solid #d97706;}.inicio-tarea.riesgo{border-left:3px solid #c81e2a;}
.inicio-tarea-punto{width:9px;height:9px;border-radius:50%;background:#eab308;flex:0 0 auto;box-shadow:0 0 0 3px #fef3c7;}
.inicio-tarea.riesgo .inicio-tarea-punto{background:#dc2626;box-shadow:0 0 0 3px #fee2e2;}
.inicio-tarea b,.inicio-acceso b,.inicio-modulo b{display:block;font-size:13px;color:#172554;}.inicio-tarea small,.inicio-acceso small,.inicio-modulo small{display:block;margin-top:2px;color:var(--tinta-2);font-size:12px;line-height:1.35;}
.inicio-tarea>span:nth-child(2),.inicio-acceso>span:nth-child(2),.inicio-modulo>span:nth-child(2){min-width:0;flex:1;}
.inicio-acceso-ic,.inicio-modulo-ic{width:32px;height:32px;display:grid;place-items:center;border-radius:9px;background:#edf2ff;color:#244397;flex:0 0 auto;}.inicio-acceso-ic svg,.inicio-modulo-ic svg{width:17px;height:17px;}
.inicio-acceso-ir{font-size:22px;line-height:1;color:#91a0b8;flex:0 0 auto;}.inicio-modulo.seguridad{background:#fafbff;border-color:#dbe4ff;}.inicio-modulo.seguridad .inicio-modulo-ic{background:#e7eafe;color:#2c3a94;}
.inicio-sin-tareas{display:flex;align-items:center;gap:12px;padding:18px 10px;color:#087552;}.inicio-sin-tareas>span{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:#dcfce7;font-weight:800;}.inicio-sin-tareas b{display:block;color:#166534;font-size:13px;}.inicio-sin-tareas small{display:block;color:var(--tinta-2);margin-top:3px;}.vacio.compacto{padding:18px 10px;}
@media (max-width:900px){.inicio-grid-principal,.inicio-grid-secundario{grid-template-columns:1fr;}.inicio-bienvenida{align-items:flex-start;flex-direction:column;}.inicio-fecha{white-space:normal;}}

.barras{display:flex;flex-direction:column;gap:12px;}
.barra-fila{display:grid;grid-template-columns:150px 1fr 30px;gap:11px;align-items:center;font-size:13px;}
.barra-pista{display:block;height:8px;border-radius:999px;background:#eef1f7;overflow:hidden;}
.barra-llena{display:block;height:8px;border-radius:999px;background:linear-gradient(90deg,var(--azul-cl),var(--azul));min-width:6px;}
.barra-fila .n{text-align:right;font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:var(--tinta-2);font-variant-numeric:tabular-nums;}

/* ---------- Matriz de permisos ---------- */
.perfil-barra{display:flex;gap:18px;align-items:flex-end;flex-wrap:wrap;padding:16px 18px;border-bottom:1px solid #eef1f7;background:#fbfcfe;}
.perfil-barra .desc{max-width:56ch;padding-bottom:2px;}
.perfil-barra .desc .et{font-family:'Archivo',sans-serif;font-size:10px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--tinta-2);margin-bottom:4px;}
.perfil-barra .desc p{font-size:13px;color:var(--tinta);}
.sucio{margin-left:auto;display:none;align-items:center;gap:8px;font-size:12.5px;color:#92400e;font-weight:700;background:#fef3c7;border:1px solid #f2dda2;border-radius:999px;padding:6px 13px;}
.sucio.show{display:flex;}

.matriz-wrap{overflow-x:auto;}
table.matriz{width:100%;border-collapse:separate;border-spacing:0;min-width:820px;}
table.matriz thead th{
  position:sticky;top:0;z-index:3;background:#fbfcfe;padding:9px 6px 11px;text-align:center;
  border-bottom:2px solid #e2e8f0;vertical-align:bottom;
  font-family:'Archivo',sans-serif;font-size:10.5px;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;color:var(--tinta-2);
}
table.matriz thead th.mod-col{text-align:left;padding-left:18px;left:0;z-index:4;min-width:262px;}
table.matriz th.mod-col,table.matriz td.mod-col{position:sticky;left:0;background:#fff;z-index:2;border-right:1px solid #eef1f7;}
table.matriz thead th.mod-col{background:#fbfcfe;}
table.matriz tbody td{border-bottom:1px solid #f1f5f9;}
table.matriz tbody tr:hover td{background:#f8fafc;}
table.matriz tbody tr:hover td.mod-col{background:#f8fafc;}
.mod-cel{padding:10px 18px;}
.mod-cel .n{display:block;font-size:13.5px;font-weight:600;color:#0f172a;line-height:1.3;}
.mod-cel .c{display:block;font-family:'IBM Plex Mono',monospace;font-size:10.5px;color:#94a3b8;margin-top:2px;letter-spacing:.02em;}
tr.area td{
  background:#f2f4fb !important;padding:8px 18px !important;
  font-family:'Archivo',sans-serif;font-size:10.5px;font-weight:700;letter-spacing:.18em;
  text-transform:uppercase;color:var(--azul);border-bottom:1px solid #dfe4f5;
}
tr.area td.mod-col{background:#f2f4fb !important;}
.p-cel{text-align:center;padding:7px 6px;}
.p-box{
  width:23px;height:23px;border-radius:7px;border:1.5px solid #c9d3e2;background:#fff;
  display:inline-grid;place-items:center;padding:0;transition:background .13s,border-color .13s;
}
.p-box:hover{border-color:var(--azul-cl);}
.p-box svg{width:12px;height:12px;color:#fff;opacity:0;transition:opacity .13s;}
.p-box.on{background:var(--azul);border-color:var(--azul);}
.p-box.on svg{opacity:1;}
.p-na{color:#dbe1ea;font-family:'IBM Plex Mono',monospace;font-size:13px;}
.col-todo{
  display:block;margin:6px auto 0;font-family:'Archivo',sans-serif;font-size:9px;font-weight:700;
  letter-spacing:.13em;text-transform:uppercase;color:var(--azul-cl);
  background:transparent;border:1px solid transparent;padding:2px 7px;border-radius:5px;opacity:.62;
}
.col-todo:hover{opacity:1;background:#eef1fb;border-color:#cfd7f0;}
.leyenda{display:flex;gap:20px;flex-wrap:wrap;padding:14px 18px;border-top:1px solid #eef1f7;font-size:12.5px;color:var(--tinta-2);background:#fbfcfe;}
.leyenda b{color:var(--tinta);font-weight:700;}

/* ---------- Modal ---------- */
.overlay{
  position:fixed;inset:0;background:rgba(13,24,56,.62);backdrop-filter:blur(3px);
  display:none;align-items:flex-start;justify-content:center;padding:36px 20px;z-index:80;overflow-y:auto;
}
.overlay.on{display:flex;}
.modal{
  width:100%;max-width:940px;background:#fff;border-radius:16px;overflow:hidden;
  box-shadow:0 34px 70px -26px rgba(0,0,0,.6);animation:entrar .3s ease both;
}
.mo-head{
  display:flex;align-items:center;gap:14px;padding:18px 24px;
  background:linear-gradient(135deg,var(--azul),var(--azul-osc));color:#fff;position:relative;
}
.mo-head::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:linear-gradient(90deg,var(--rojo),transparent 70%);}
.mo-head .placa{
  width:40px;height:40px;flex:none;border-radius:11px;display:grid;place-items:center;
  background:rgba(255,255,255,.12);border:1px solid rgba(247,154,160,.45);color:var(--rojo-cl);
}
.mo-head .placa svg{width:21px;height:21px;}
.mo-head h2{font-family:'Archivo',sans-serif;font-size:17px;font-weight:800;letter-spacing:.03em;text-transform:uppercase;}
.mo-head p{font-size:12.5px;color:#c3cbee;margin-top:3px;}
.mo-cerrar svg{width:15px;height:15px;}
.mo-cerrar{margin-left:auto;width:32px;height:32px;border-radius:9px;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.08);color:#fff;display:grid;place-items:center;}
.mo-cerrar:hover{background:rgba(255,255,255,.18);}
.mo-cuerpo{display:grid;grid-template-columns:1.5fr 1fr;gap:0;max-height:min(72vh,700px);overflow-y:auto;}
@media (max-width:900px){.mo-cuerpo{grid-template-columns:1fr;}}
.mo-form{padding:6px 0;}
.mo-lado{background:#fbfcfe;border-left:1px solid #eef1f7;padding:20px;}
@media (max-width:900px){.mo-lado{border-left:none;border-top:1px solid #eef1f7;}}
.bloque{padding:18px 24px;border-bottom:1px solid #f1f5f9;}
.bloque:last-child{border-bottom:none;}
.bl-tit{display:flex;align-items:center;gap:10px;margin-bottom:14px;}
.bl-tit .n{
  width:21px;height:21px;flex:none;border-radius:7px;display:grid;place-items:center;
  background:#eef1fb;color:var(--azul);font-family:'IBM Plex Mono',monospace;font-size:11px;font-weight:600;
}
.bl-tit h4{font-family:'Archivo',sans-serif;font-size:11.5px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--azul);}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:13px;}
.g2 .full{grid-column:span 2;}
@media (max-width:620px){.g2{grid-template-columns:1fr;}.g2 .full{grid-column:auto;}}
.g2 .campo{margin-bottom:0;}
.g2 .inp{width:100%;}
.ficha-catalogo-completa{overflow:visible;}
.panel-normal{max-width:none!important;border-radius:16px;box-shadow:0 12px 35px -20px rgba(0,0,0,.35);animation:none;}
.panel-normal .mo-cuerpo{max-height:none;overflow:visible;}
.panel-normal .mo-head{position:sticky;top:0;z-index:2;}
.ficha-catalogo-barra{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:22px 25px;border-bottom:1px solid var(--linea);background:#f8f9fc;}
.ficha-catalogo-barra h3{margin:0 0 5px;color:#172a63;font-size:18px;}
.ficha-catalogo-barra p{margin:0;color:#71809a;font-size:12px;}
.ficha-catalogo-cuerpo{padding:25px;}
.ficha-catalogo-pie{display:flex;justify-content:flex-end;gap:10px;padding:16px 25px;border-top:1px solid var(--linea);background:#f8f9fc;}
@media(max-width:620px){.ficha-catalogo-barra{align-items:flex-start;flex-direction:column}.ficha-catalogo-cuerpo{padding:18px}.ficha-catalogo-pie{padding:14px 18px}}
.pista{display:block;font-size:11.5px;color:#5d6b7e;margin-top:5px;}
.contactos-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;color:#66758d;font-size:12.5px;}
.cliente-contacto{border:1px solid var(--linea);border-radius:12px;padding:14px;margin-top:10px;background:#f9fbfe;}
.cliente-contacto-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;color:var(--azul);font-size:12.5px;}
.checks-contacto{display:flex;align-items:center;gap:22px;flex-wrap:wrap;margin-top:12px;}
.vacio-contactos{border:1px dashed #bdc9dc;border-radius:10px;padding:18px;text-align:center;color:#7b889d;background:#fbfcfe;font-size:12.5px;}
.aviso-dato{color:#9a6700;background:#fff8df;border-radius:8px;padding:9px 11px;margin-top:1px;}
textarea.inp{resize:vertical;min-height:82px;line-height:1.45;}
@media (max-width:620px){.contactos-toolbar{align-items:flex-start;flex-direction:column;}}
.fichas{display:flex;gap:8px;flex-wrap:wrap;}
.ficha{padding:6px 13px;border-radius:999px;border:1px solid #c9d3e2;background:#fff;font-size:12.5px;font-weight:600;color:var(--tinta-2);}
.ficha.on{background:#eef1fb;border-color:#c2cbef;color:var(--azul);}
.palanca{display:inline-flex;align-items:center;gap:10px;cursor:pointer;font-size:13px;color:var(--tinta);}
.palanca input{position:absolute;opacity:0;width:0;height:0;}
.riel{width:38px;height:21px;border-radius:999px;background:#cbd5e1;position:relative;transition:background .16s;flex:none;}
.riel::after{content:'';position:absolute;top:2.5px;left:2.5px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .16s;box-shadow:0 1px 3px rgba(0,0,0,.3);}
.palanca input:checked + .riel{background:#0f9d63;}
.palanca input:checked + .riel::after{transform:translateX(17px);}

.vista-previa .et{font-family:'Archivo',sans-serif;font-size:10px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--tinta-2);margin-bottom:4px;}
.vista-previa h4{font-family:'Archivo',sans-serif;font-size:15px;font-weight:800;color:var(--azul);margin-bottom:3px;}
.vista-previa .d{font-size:12.5px;color:var(--tinta-2);line-height:1.55;margin-bottom:14px;}
.vp-fila{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px solid #eef1f7;font-size:12.5px;}
.vp-fila:last-of-type{border-bottom:none;}
.vp-flags{display:flex;gap:3px;flex:none;}
.vp-flag{width:27px;height:19px;border-radius:5px;display:grid;place-items:center;font-family:'Archivo',sans-serif;font-size:9.5px;font-weight:700;letter-spacing:.04em;background:#eef1f7;color:#94a3b8;}
.vp-flag.on{background:#dfe4fa;color:var(--azul);}
.vp-flag.na{background:transparent;color:#dbe1ea;}
.mo-pie{display:flex;align-items:center;gap:10px;padding:15px 24px;border-top:1px solid var(--linea);background:#fbfcfe;flex-wrap:wrap;}
.mo-pie .der{margin-left:auto;display:flex;gap:9px;}

/* ==================================================================
   MÓDULO OTIF — CONTROL DE VIAJES
================================================================== */

/* Casilla de verificación con etiqueta, usada en modales y en la ficha. */
.chk{display:inline-flex;align-items:center;gap:9px;cursor:pointer;font-size:13px;color:var(--tinta);}
.chk input{width:16px;height:16px;accent-color:var(--azul);flex:none;cursor:pointer;}
.chk.mini{font-size:12.5px;color:var(--tinta-2);white-space:nowrap;}
.chk input:disabled{cursor:not-allowed;}

/* ---------- Semáforo de puntualidad ---------- */
.sem{
  display:inline-block;padding:3px 10px;border-radius:999px;font-size:11.5px;font-weight:700;
  border:1px solid transparent;white-space:nowrap;
}
.sem.verde{background:#dcfce7;color:#166534;border-color:#b6ecc9;}
.sem.amarillo{background:#fef3c7;color:#92400e;border-color:#f2dda2;}
.sem.rojo{background:#fee2e2;color:#991b1b;border-color:#f6c9c9;}
.sem.gris{background:#eef1f7;color:#94a3b8;border-color:#e2e8f0;}

/* ---------- Listado de viajes ---------- */
.sub-cel{font-size:11.5px;color:var(--tinta-2);margin-top:2px;line-height:1.4;}
.sub-cel.alerta,.alerta{color:var(--rojo-osc);font-weight:600;}
.enlace-folio{
  background:none;border:none;padding:0;font-size:13.5px;font-weight:700;color:var(--azul);
  letter-spacing:.02em;text-decoration:underline;text-decoration-color:#c2cbef;text-underline-offset:3px;
}
.enlace-folio:hover{color:var(--rojo-osc);text-decoration-color:var(--rojo-cl);}

/* ---------- Embudo de etapas ---------- */
.embudo{display:flex;gap:8px;flex-wrap:wrap;}
.embudo .paso{
  flex:1 1 96px;min-width:96px;border:1px solid var(--linea);border-radius:11px;background:#fbfcfe;
  padding:11px 10px;text-align:center;transition:border-color .15s,background .15s,transform .12s;
}
.embudo .paso:hover{border-color:var(--azul-cl);transform:translateY(-1px);}
.embudo .paso.on{background:#eef1fb;border-color:#a9b6e8;box-shadow:inset 0 0 0 1px #c2cbef;}
.embudo .paso .n{
  display:block;font-family:'Archivo',sans-serif;font-weight:800;font-size:22px;color:var(--azul);
  font-variant-numeric:tabular-nums;line-height:1.1;
}
.embudo .paso .e{display:block;font-size:10.5px;color:var(--tinta-2);margin-top:3px;font-weight:600;}

/* ---------- Riel de etapas de la ficha ---------- */
.tarjeta.rail{margin-bottom:18px;overflow:visible;}
.rail-pasos{display:flex;gap:4px;padding:16px 18px 4px;flex-wrap:wrap;}
.rail-paso{
  flex:1 1 0;min-width:104px;border:none;background:transparent;padding:0 0 10px;position:relative;
  text-align:center;color:var(--tinta-2);
}
.rail-paso::before{
  content:'';display:block;height:5px;border-radius:999px;background:#e6ebf3;margin-bottom:8px;
  transition:background .18s;
}
.rail-paso .pt{font-size:11.5px;font-weight:600;}
.rail-paso.hecho::before{background:linear-gradient(90deg,var(--azul-cl),var(--azul));}
.rail-paso.hecho .pt{color:var(--azul);}
.rail-paso.aqui::before{background:var(--rojo);}
.rail-paso.aqui .pt{color:var(--rojo-osc);font-weight:800;}
.rail-paso.muerto::before{background:#e2e8f0;}
.rail-paso:not(:disabled):hover::before{background:#a9b6e8;}
.rail-paso:not(:disabled):hover .pt{color:var(--azul);}
.rail-paso:disabled{cursor:default;}
.rail-pie{
  display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:12px 18px;
  border-top:1px solid #eef1f7;background:#fbfcfe;font-size:12.5px;
}
.rail-et{
  font-family:'Archivo',sans-serif;font-size:9.5px;font-weight:700;letter-spacing:.15em;
  text-transform:uppercase;color:var(--tinta-2);
}
.rail-sep{width:1px;height:18px;background:var(--linea);margin:0 4px;}
.rail-cancelado{color:var(--rojo-osc);font-weight:600;font-size:12.5px;}
.tarjeta.rail .sucio{margin:0 18px 12px;width:fit-content;}

/* ---------- Ficha por secciones ---------- */
.ficha-otif{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start;}
@media (max-width:1180px){.ficha-otif{grid-template-columns:1fr;}}
.ficha-otif .secc.ancha{grid-column:1 / -1;}
.secc-head{display:flex;align-items:flex-start;gap:11px;padding:15px 18px;border-bottom:1px solid #eef1f7;background:#fbfcfe;}
.secc-head .n{
  width:23px;height:23px;flex:none;border-radius:7px;display:grid;place-items:center;
  background:#eef1fb;color:var(--azul);font-family:'IBM Plex Mono',monospace;font-size:11.5px;font-weight:600;
}
.secc-head h3{font-family:'Archivo',sans-serif;font-size:12px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--azul);}
.secc-head p{font-size:12px;color:var(--tinta-2);margin-top:4px;max-width:70ch;line-height:1.5;}
.secc-cuerpo{padding:18px;}

/* Remitentes/destinatarios: una misma presentación de consulta en Viajes y OTIF. */
.ruta-contactos{margin-top:22px;padding-top:20px;border-top:1px solid #eef1f7;}
.ruta-contactos-cabecera{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px;}
.ruta-contactos-cabecera h3{font:700 11.5px 'Archivo',sans-serif;letter-spacing:.13em;text-transform:uppercase;color:var(--azul);}
.ruta-contactos-cabecera p{font-size:12px;line-height:1.5;color:var(--tinta-2);margin-top:5px;}
.ruta-contactos-origen{font-size:10.5px;font-weight:600;color:var(--azul);background:#eef1fb;border:1px solid #dce3f5;border-radius:7px;padding:6px 9px;}
.ruta-contactos-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start;}
.ruta-contactos-grid.ruta-contactos-unico{grid-template-columns:1fr;}
.ruta-contactos-grupo{display:grid;gap:14px;min-width:0;}
.ruta-contacto{border:1px solid #dce3f0;border-top:3px solid var(--azul-cl);border-radius:11px;padding:16px 18px;background:#fbfcfe;min-width:0;}
.ruta-contacto-destinatario{border-top-color:var(--azul);}
.ruta-contacto-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:12px;}
.ruta-contacto-rol{font:700 10px 'Archivo',sans-serif;letter-spacing:.13em;text-transform:uppercase;color:var(--azul);}
.ruta-contacto-operacion{color:var(--tinta-2);font-size:11px;}
.ruta-contacto h4{font:700 14px/1.5 'Archivo',sans-serif;color:var(--azul-osc);margin:0 0 14px;overflow-wrap:anywhere;}
.ruta-contacto dl{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 18px;margin:0;}
.ruta-contacto-domicilio{grid-column:1 / -1;}
.ruta-contacto dt{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;color:var(--tinta-2);margin-bottom:5px;}
.ruta-contacto dd{font-size:12.5px;line-height:1.65;color:var(--azul-osc);margin:0;overflow-wrap:anywhere;white-space:pre-line;}
.ruta-contacto dd.ruta-contacto-ausente{color:var(--tinta-2);font-style:italic;}
@media(max-width:760px){.ruta-contactos-grid{grid-template-columns:1fr;}}
@media(max-width:420px){.ruta-contacto{padding:14px;}.ruta-contacto dl{grid-template-columns:1fr;}}

.g3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px;}
.g3 .ancho2{grid-column:span 2;}
.g3 .ancho3{grid-column:span 3;}
@media (max-width:760px){.g3{grid-template-columns:1fr;}.g3 .ancho2,.g3 .ancho3{grid-column:auto;}}

/* El alta usa toda la anchura: evita que fechas, clientes y sucursales se
   compriman dentro de una tarjeta de media pantalla. */
.g-alta-viaje,.g-asignacion-alta{
  display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px 18px;align-items:start;
}
.g-alta-viaje .col-2,.g-asignacion-alta .col-2{grid-column:span 2;}
.g-alta-viaje .col-3,.g-asignacion-alta .col-3{grid-column:span 3;}
.g-alta-viaje .col-4,.g-asignacion-alta .col-4{grid-column:span 4;}
.g-alta-viaje .col-5,.g-asignacion-alta .col-5{grid-column:span 5;}
.g-alta-viaje .col-6,.g-asignacion-alta .col-6{grid-column:span 6;}
.g-alta-viaje .col-8,.g-asignacion-alta .col-8{grid-column:span 8;}
.g-alta-viaje .col-9,.g-asignacion-alta .col-9{grid-column:span 9;}
.g-alta-viaje .full,.g-asignacion-alta .full{grid-column:1 / -1;}
.g-alta-viaje.full,.g-asignacion-alta.full{grid-column:1 / -1;}
@media (max-width:980px){
  .g-alta-viaje .campo,.g-asignacion-alta .campo{grid-column:span 6;}
}
@media (max-width:620px){
  .g-alta-viaje,.g-asignacion-alta{grid-template-columns:1fr;}
  .g-alta-viaje .campo,.g-asignacion-alta .campo{grid-column:auto;}
}
.g5{display:grid;grid-template-columns:repeat(5,1fr);gap:11px;margin-top:12px;}
@media (max-width:900px){.g5{grid-template-columns:repeat(2,1fr);}}
.g2 .full{grid-column:span 2;}

/* ---------- Programación y puntualidad ---------- */
.tiempos{display:flex;flex-direction:column;}
.tiempos-cabecera,
.tiempo-fila{
  display:grid;grid-template-columns:180px minmax(220px,1fr) minmax(220px,1fr) 150px;
  gap:18px;align-items:center;
}
.tiempos-cabecera{
  padding:0 0 9px;border-bottom:1px solid #e3e9f2;
  font-family:'Archivo',sans-serif;font-size:9.5px;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--tinta-2);
}
.tiempos-cabecera span:last-child{text-align:right;}
.tiempo-fila{
  min-height:72px;padding:12px 0;border-bottom:1px solid #edf1f6;
}
.tiempo-fila:last-child{border-bottom:none;padding-bottom:0;}
.tf-et{
  font-family:'Archivo',sans-serif;font-size:11px;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;color:var(--azul);
}
.tf-campo .inp{min-width:0;width:100%;}
.tf-sem{text-align:right;}
.sr-solo{
  position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;
  overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important;
}
@media (max-width:980px){
  .tiempos-cabecera{display:none;}
  .tiempo-fila{grid-template-columns:1fr 1fr;}
  .tf-et{grid-column:span 2;}
  .tf-campo label.sr-solo{
    position:static!important;width:auto!important;height:auto!important;margin:0 0 7px!important;
    overflow:visible!important;clip:auto!important;white-space:normal!important;
  }
  .tf-sem{grid-column:span 2;text-align:left;}
}
@media (max-width:620px){
  .tiempo-fila{grid-template-columns:1fr;}
  .tf-et,.tf-sem{grid-column:auto;}
}

/* ---------- Paradas ---------- */
.parada{border:1px solid var(--linea);border-radius:12px;padding:14px 16px;margin-bottom:13px;background:#fdfdff;}
.parada:last-child{margin-bottom:0;}
.pa-head{display:flex;align-items:center;gap:11px;margin-bottom:13px;flex-wrap:wrap;}
.pa-n{
  width:25px;height:25px;flex:none;border-radius:8px;display:grid;place-items:center;
  background:linear-gradient(145deg,#3a4fb4,#253485);color:#fff;
  font-family:'Archivo',sans-serif;font-size:12px;font-weight:800;
}
.pa-tipo{max-width:160px;padding:7px 11px;font-size:12.5px;}
.pa-quitar{margin-left:auto;}
.parada .campo > label{font-size:9.5px;letter-spacing:.12em;}
.paradas-pie{display:flex;align-items:center;gap:14px;margin-top:14px;flex-wrap:wrap;}
.total-gastos{margin-left:auto;font-size:12.5px;color:var(--tinta-2);}
.total-gastos b{color:var(--azul);font-size:15px;margin-left:8px;}

/* ---------- Evidencias ---------- */
.subir{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:16px;}
.subir .inp{font-size:12.5px;padding:8px 12px;}
.evidencias{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:13px;}
.evid{margin:0;border:1px solid var(--linea);border-radius:11px;overflow:hidden;background:#fff;}
.evid-ver{
  display:grid;place-items:center;width:100%;height:118px;
  border:none;padding:0;background:#f2f4fb;overflow:hidden;
}
.evid-ver img{width:100%;height:118px;object-fit:cover;display:block;}
.evid-doc{width:38px;height:38px;color:var(--azul-cl);}
.evid figcaption{padding:8px 10px;border-top:1px solid #eef1f7;position:relative;}
.evid figcaption b{display:block;font-size:12px;font-weight:700;color:#0f172a;}
.evid figcaption span{display:block;font-size:10.5px;color:var(--tinta-2);margin-top:2px;
  font-family:'IBM Plex Mono',monospace;}
.evid-x{
  position:absolute;top:6px;right:7px;width:20px;height:20px;border-radius:6px;border:1px solid var(--linea);
  background:#fff;color:#94a3b8;font-size:15px;line-height:1;display:grid;place-items:center;padding:0;
}
.evid-x:hover{background:#fee2e2;color:#991b1b;border-color:#f6c6c6;}

/* ---------- Tabla compacta de incidencias ---------- */
table.tabla.compacta{min-width:640px;}
table.tabla.compacta tbody td{padding:9px 12px;font-size:13px;}

/* ---------- Bitácora del viaje ---------- */
.linea-tiempo{list-style:none;margin:0;padding:0;}
.lt-cabecera,
.linea-tiempo li{
  display:grid;grid-template-columns:150px minmax(120px,160px) minmax(160px,220px) minmax(0,1fr);
  gap:18px;align-items:start;
}
.lt-cabecera{
  padding:0 14px 10px 22px;border-bottom:1px solid #e4eaf3;
  font-family:'Archivo',sans-serif;font-size:9.5px;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--tinta-2);
}
.linea-tiempo li{
  min-height:58px;padding:14px 14px 14px 22px;border-left:2px solid var(--linea);
  border-bottom:1px solid #edf1f6;position:relative;font-size:12.5px;
}
.linea-tiempo li:last-child{border-bottom:none;}
.linea-tiempo li::before{
  content:'';position:absolute;left:-6px;top:18px;width:8px;height:8px;border-radius:50%;
  background:#fff;border:2px solid var(--azul-cl);
}
.linea-tiempo li:first-child::before{border-color:var(--rojo);background:var(--rojo);}
.lt-fecha{color:var(--tinta-2);font-size:11.5px;white-space:nowrap;}
.lt-etapa{font-weight:700;color:var(--azul);}
.lt-quien{color:var(--tinta-2);font-family:'IBM Plex Mono',monospace;font-size:11.5px;overflow-wrap:anywhere;}
.lt-nota{color:var(--tinta);line-height:1.45;overflow-wrap:anywhere;min-width:0;}
@media (max-width:900px){
  .lt-cabecera{display:none;}
  .linea-tiempo li{grid-template-columns:140px minmax(0,1fr);gap:6px 16px;}
  .lt-fecha{grid-row:span 3;}
  .lt-nota{padding-top:2px;}
}
@media (max-width:560px){
  .linea-tiempo li{grid-template-columns:1fr;gap:5px;padding-left:20px;}
  .lt-fecha{grid-row:auto;}
}

/* ---------- Pestañas de catálogos ---------- */
.pestanas{display:flex;gap:4px;padding:12px 18px 0;border-bottom:1px solid #eef1f7;background:#fbfcfe;}
.pest{
  border:1px solid transparent;border-bottom:none;background:transparent;padding:9px 16px;
  border-radius:9px 9px 0 0;font-size:13px;font-weight:600;color:var(--tinta-2);
  transition:background .15s,color .15s;
}
.pest:hover{background:#eef1f7;color:var(--azul);}
.pest.on{background:#fff;border-color:var(--linea);color:var(--azul);font-weight:700;margin-bottom:-1px;}

/* ---------- Submenú del lateral ---------- */
.sb-item.hija{padding-left:26px;font-size:12.5px;opacity:.85;}
.sb-item.hija .ic{width:15px;height:15px;}
.sb-item.hija.on{opacity:1;}

/* ---------- Aviso de módulo pendiente ---------- */
.aviso-mod{background:#fff;border:1px solid var(--linea);border-radius:14px;padding:46px 30px;text-align:center;}
.aviso-mod .ic{width:46px;height:46px;color:var(--azul-cl);margin:0 auto 14px;}
.aviso-mod h3{font-family:'Archivo',sans-serif;font-size:17px;font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:var(--azul);margin-bottom:8px;}
.aviso-mod p{font-size:13px;color:var(--tinta-2);max-width:56ch;margin:0 auto 16px;line-height:1.6;}

/* ---------- Aviso flotante ---------- */
#aviso{
  position:fixed;left:50%;bottom:26px;transform:translate(-50%,18px);
  background:var(--azul-osc);color:#fff;padding:12px 20px;border-radius:11px;
  font-size:13.5px;font-weight:500;box-shadow:0 22px 44px -20px rgba(0,0,0,.8);
  border-left:3px solid var(--rojo);
  opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;z-index:120;max-width:min(520px,92vw);
}
#aviso.show{opacity:1;transform:translate(-50%,0);}

@media (max-width:900px){
  #app.on{flex-direction:column;}
  .sidebar{position:static;width:100%;height:auto;}
  .sb-logo,.sb-user,.sb-pie{display:none;}
  .sb-nav{display:block;padding:10px;max-height:45vh;overflow-y:auto;}
  .sb-item{width:100%;white-space:nowrap;}
  .sb-item.on::before{display:none;}
  .sb-item.futuro{display:none;}
  .zona{padding:18px 14px 36px;}
  .head{padding:14px 18px;}
  .head h1{font-size:19px;}
}
@media (max-width:600px){
  .head .head-acciones{flex-basis:100%;gap:9px;}
  .head-global{margin-left:auto;}
}
@media print{.head-acciones{display:none!important;}}

/* ---------- Indicador de carga del botón de acceso ---------- */
.spinner{
  width:15px;height:15px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;
  border-radius:50%;display:inline-block;animation:girar .7s linear infinite;
}
@keyframes girar{to{transform:rotate(360deg);}}
.btn-entrar:disabled{opacity:.72;cursor:default;transform:none;}

/* ---------- Estados de carga y vacío de las tablas ---------- */
.cargando{padding:48px 20px;text-align:center;color:var(--tinta-2);font-size:13.5px;}
.cargando .spinner{border-color:rgba(37,52,133,.2);border-top-color:var(--azul);width:22px;height:22px;margin-bottom:10px;}
.vacio{padding:48px 24px;text-align:center;color:#94a3b8;}
.vacio h3{font-family:'Archivo',sans-serif;font-size:16px;color:var(--tinta);margin-bottom:6px;}
.vacio p{font-size:13px;max-width:44ch;margin:0 auto;}
.csa-tabla-controles{display:none!important;}
.csa-tabla-controles label{display:flex;align-items:center;gap:7px;font-weight:600;}
.csa-tabla-tamano{width:auto;min-width:76px;padding:6px 27px 6px 9px;font-size:12px;}
.csa-tabla-cuenta{
  font-size:14px;font-weight:800;color:var(--azul);font-variant-numeric:tabular-nums;
  padding:6px 10px;border:1px solid #d2ddf5;border-radius:8px;background:#f1f5ff;
}
.csa-tabla-paginas{display:flex;align-items:center;gap:8px;margin-left:auto;}
.csa-tabla-paginas [data-csa-pagina-label]{min-width:92px;text-align:center;font-variant-numeric:tabular-nums;}
.csa-ordenable{cursor:pointer;user-select:none;white-space:nowrap;}
.csa-ordenable::after{content:' ↕';font-size:11px;color:#94a3b8;}
.csa-ordenable[aria-sort="descending"]::after{content:' ↓';color:var(--azul);}
.csa-ordenable[aria-sort="ascending"]::after{content:' ↑';color:var(--azul);}
.csa-tabla-controles button:disabled{opacity:.45;cursor:not-allowed;}
.error-caja{
  margin:0;padding:14px 18px;background:#fdf0f0;border:1px solid #f3c9c9;border-left:3px solid var(--error);
  border-radius:10px;color:var(--error);font-size:13px;
}
.hora24-control{position:relative;width:100%;}
.tarjeta.hora24-desplegado{position:relative;z-index:95;overflow:visible;}
.hora24-original{display:none!important;}
.hora24-visible{width:100%;padding-right:46px!important;font-variant-numeric:tabular-nums;}
.hora24-visible.hora24-invalido{border-color:#d4112a!important;box-shadow:0 0 0 2px rgba(212,17,42,.10);}
.hora24-abrir{position:absolute;right:7px;top:50%;transform:translateY(-50%);width:34px;height:34px;border:0;border-radius:8px;background:transparent;color:#213b8f;cursor:pointer;font-size:16px;line-height:1;}
.hora24-abrir:hover{background:#eaf0fb;}
.hora24-abrir:disabled{cursor:not-allowed;opacity:.45;}
.hora24-panel{position:absolute;z-index:90;right:0;top:calc(100% + 6px);min-width:300px;padding:12px;border:1px solid #c9d5e8;border-radius:12px;background:#fff;box-shadow:0 16px 38px rgba(22,39,84,.18);}
.hora24-panel[hidden],.hora24-fecha[hidden]{display:none!important;}
.hora24-fecha{width:100%;margin-bottom:9px;}
.hora24-reloj{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:7px;}
.hora24-dos-puntos{text-align:center;color:#243a7d;font-size:20px;}
.hora24-acciones{display:flex;justify-content:flex-end;gap:7px;margin-top:11px;}
@media(max-width:640px){.hora24-panel{left:0;right:auto;min-width:min(300px,calc(100vw - 56px));}}
