.dt-box{overflow-x:auto}
table.dataTable{width:100%!important;border-collapse:collapse;font-size:14px}
table.dataTable thead th{background:var(--navy);color:#C9CEE6;font-family:var(--font-head);font-weight:700;font-size:12px;letter-spacing:.05em;padding:13px 16px;border:none}
table.dataTable tbody td{padding:12px 16px;border-top:1px solid var(--n-100)}
table.dataTable.display tbody tr:hover{background:var(--indigo-50)}
.dt-search input,.dt-length select{border:1.5px solid var(--n-200);border-radius:8px;padding:8px 12px;font-family:var(--font-body);font-size:13px}
.dt-search input:focus,.dt-length select:focus{outline:none;border-color:var(--blue)}
.dt-paging .dt-paging-button{border-radius:8px!important;border:1px solid var(--n-200)!important;margin:0 2px;padding:6px 12px!important;color:var(--navy)!important;background:#fff!important}
.dt-paging .dt-paging-button.current{background:var(--blue)!important;color:#fff!important;border-color:var(--blue)!important}
.dataTables_wrapper .dt-layout-row{margin-bottom:12px;display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between}
/* simple table */
.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl thead th{background:var(--navy);color:#C9CEE6;font-family:var(--font-head);font-weight:700;font-size:12px;text-align:left;padding:13px 16px}
.tbl tbody td{padding:12px 16px;border-top:1px solid var(--n-100)}
.tbl tbody tr:hover{background:var(--indigo-50)}
.tbl .chk{accent-color:var(--blue);width:18px;height:18px}
.row-act{display:flex;gap:4px}.row-act button{width:30px;height:30px;border:none;background:var(--n-100);border-radius:7px;cursor:pointer;color:var(--n-700);font-size:12px}.row-act button:hover{background:var(--n-200)}
.bulk-bar{display:none;align-items:center;gap:14px;background:var(--navy);color:#fff;border-radius:var(--r-md);padding:10px 16px;margin-bottom:12px;font-size:13px}
.bulk-bar.show{display:flex}.bulk-bar b{font-family:var(--font-head)}.bulk-bar .spacer{flex:1}
/* responsive card-table (mobile) */
.rtable{width:100%;border-collapse:collapse;font-size:14px}
.rtable thead th{background:var(--navy);color:#C9CEE6;font-family:var(--font-head);font-weight:700;font-size:12px;text-align:left;padding:12px 14px}
.rtable td{padding:12px 14px;border-top:1px solid var(--n-100)}
@media(max-width:640px){
  .rtable thead{display:none}
  .rtable,.rtable tbody,.rtable tr,.rtable td{display:block;width:100%}
  .rtable tr{border:1px solid var(--n-200);border-radius:var(--r-md);margin-bottom:10px;padding:6px;box-shadow:var(--shadow)}
  .rtable td{border:none;display:flex;justify-content:space-between;padding:8px 10px}
  .rtable td::before{content:attr(data-l);font-family:var(--font-head);font-weight:700;color:var(--n-500);font-size:12px}
}
/* ===== Vue data grid (nativo, sin jQuery) ===== */
.vgrid-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin-bottom:12px}
.vgrid-toolbar .vg-search{position:relative;flex:1;min-width:180px;max-width:320px}
.vgrid-toolbar .vg-search i{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--n-500);font-size:13px}
.vgrid-toolbar .vg-search input{width:100%;border:1.5px solid var(--n-200);border-radius:8px;padding:9px 12px 9px 34px;font-size:14px;font-family:var(--font-body)}
.vgrid-toolbar .vg-search input:focus{outline:none;border-color:var(--blue)}
.vgrid-toolbar .vg-len{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--n-500)}
.vgrid-toolbar .vg-len select{border:1.5px solid var(--n-200);border-radius:8px;padding:7px 10px;font-size:13px}
.vgrid{width:100%;border-collapse:collapse;font-size:14px}
.vgrid thead th{background:var(--navy);color:#C9CEE6;font-family:var(--font-head);font-weight:700;font-size:12px;text-align:left;padding:12px 14px;cursor:pointer;user-select:none;white-space:nowrap}
.vgrid thead th .so{margin-left:6px;opacity:.5;font-size:10px}
.vgrid thead th.sorted .so{opacity:1;color:var(--orange)}
.vgrid tbody td{padding:11px 14px;border-top:1px solid var(--n-100)}
.vgrid tbody tr:hover{background:var(--indigo-50)}
.vgrid .vg-empty{text-align:center;color:var(--n-500);padding:24px}
.vgrid-foot{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin-top:12px}
.vgrid-foot .vg-info{font-size:12.5px;color:var(--n-500)}
.vgrid-pages{display:flex;gap:5px}
.vgrid-pages button{min-width:34px;height:34px;border:1.5px solid var(--n-200);background:#fff;border-radius:8px;font-family:var(--font-head);font-weight:700;font-size:13px;color:var(--navy);cursor:pointer}
.vgrid-pages button.active{background:var(--blue);color:#fff;border-color:var(--blue)}
.vgrid-pages button:disabled{opacity:.4;cursor:not-allowed}
.vg-fallback{background:var(--n-50);border:1px dashed var(--n-300);border-radius:var(--r-md);padding:24px;text-align:center;color:var(--n-500);font-size:13px}
/* ============================================================
   v1.3 — Grids con columnas y filas bloqueadas (sticky, sin plugin)
   ============================================================ */
.locktbl-wrap{position:relative;overflow:auto;max-height:360px;border:1px solid var(--n-200);border-radius:var(--r-lg);background:#fff}
.locktbl{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%;font-size:13.5px}
.locktbl th,.locktbl td{padding:11px 14px;white-space:nowrap;border-bottom:1px solid var(--n-100);background:#fff}
.locktbl thead th{background:var(--navy);color:#C9CEE6;font-family:var(--font-head);font-weight:700;font-size:12px;text-align:left}
.locktbl tbody tr:hover td{background:var(--indigo-50)}
/* ---- Encabezado fijo (fila superior bloqueada) ---- */
.locktbl thead th{position:sticky;top:0;z-index:3}
/* ---- Primera columna bloqueada ---- */
.locktbl .lock-col{position:sticky;left:0;z-index:2;box-shadow:2px 0 0 var(--n-200)}
.locktbl thead .lock-col{z-index:4;background:var(--navy)}
.locktbl tbody .lock-col{background:#fff;font-family:var(--font-head);font-weight:700;color:var(--navy)}
.locktbl tbody tr:hover .lock-col{background:var(--indigo-50)}
/* segunda columna bloqueada (opcional) */
.locktbl .lock-col-2{position:sticky;z-index:2;box-shadow:2px 0 0 var(--n-200)}
.locktbl thead .lock-col-2{z-index:4}
/* ---- Fila(s) inferior fija (totales) ---- */
.locktbl tfoot td{position:sticky;bottom:0;z-index:3;background:var(--n-50);font-family:var(--font-head);font-weight:700;color:var(--navy);border-top:2px solid var(--n-200)}
.locktbl tfoot .lock-col{z-index:4}
/* ---- Fila destacada bloqueada dentro del cuerpo ---- */
.locktbl tr.row-pinned td{position:sticky;top:39px;z-index:3;background:#FEF6EC;box-shadow:0 1px 0 var(--n-200)}
.locktbl tr.row-pinned .lock-col{z-index:4;background:#FEF6EC}
.lock-hint{font-size:11.5px;color:var(--n-500);margin-top:10px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.lock-chip{display:inline-flex;align-items:center;gap:5px;background:var(--n-100);border-radius:99px;padding:3px 10px;font-size:11px;font-family:var(--font-head);font-weight:700;color:var(--n-700)}
