  :root{
    --bg:#f4f5f7; --surface:#ffffff; --surface-2:#f7f8fa; --surface-3:#eef0f3; --field:#f1f2f4;
    --text:#1c1c1e; --text-2:#6b7280; --text-3:#9aa0a6;
    --outline:rgba(16,24,40,.08); --outline-2:rgba(16,24,40,.14);
    --primary:#e11d2a; --on-primary:#ffffff; --primary-2:#b3141f; --primary-tint:rgba(225,29,42,.10);
    --header:rgba(255,255,255,.80);
    --shadow-1:0 1px 3px rgba(16,24,40,.06),0 1px 2px rgba(16,24,40,.04);
    --shadow-2:0 12px 30px rgba(16,24,40,.10),0 4px 10px rgba(16,24,40,.05);
    --green:#0a9d58; --red:#e11d2a;
    --c-banco:#e11d2a; --bg-banco:rgba(225,29,42,.10); --bd-banco:rgba(225,29,42,.22);
    --c-jmap:#1f6feb;  --bg-jmap:rgba(31,111,235,.10); --bd-jmap:rgba(31,111,235,.22);
    --c-dif:#c2680c;   --bg-dif:rgba(232,136,12,.14);  --bd-dif:rgba(232,136,12,.26);
    --c-otro:#6b7280;  --bg-otro:rgba(142,142,147,.12); --bd-otro:rgba(142,142,147,.22);
    --r-sm:12px; --r:16px; --r-lg:20px;
  }
  *{ box-sizing:border-box; }
  html,body{ height:100%; }
  body{
    margin:0; background:linear-gradient(180deg,#ffffff 0%,#eef0f3 100%) fixed; color:var(--text); min-height:100%;
    font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,system-ui,sans-serif;
    font-size:15px; line-height:1.45; letter-spacing:-.01em;
    -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
    /* Evita que un elemento angosto suelto (input con min-width fijo, etc.) empuje
       TODA la pagina a scroll horizontal en celular - los que si necesitan scroll
       propio (.tablebox) lo manejan con su propio overflow. */
    overflow-x:hidden;
  }
  ::selection{ background:var(--primary-tint); }

  /* ---------- barra superior translucida ---------- */
  header{
    position:sticky; top:0; z-index:20;
    display:flex; align-items:center; gap:12px; flex-wrap:wrap;
    padding:12px 20px;
    background:var(--header);
    -webkit-backdrop-filter:saturate(180%) blur(20px); backdrop-filter:saturate(180%) blur(20px);
    border-bottom:1px solid var(--outline);
  }
  .hgroup{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; }
  header h1{ margin:0; font-size:20px; font-weight:650; letter-spacing:-.02em; line-height:1.2;
             white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  #upd{ font-size:12px; color:var(--text-2); margin-top:1px; }

  /* ---------- menu de navegacion del header ----------
     En pantalla ancha, .nav-menu es "display:contents": no agrega ningun
     nivel de layout propio, los botones de adentro se comportan como si
     estuvieran sueltos en el <header> (flex row de siempre, sin cambios).
     En celular (ver media query mas abajo) se convierte en un dropdown
     propio, anclado al boton hamburguesa - ahi es donde se "esconden" para
     no ocupar tantas filas arriba de la lista de empresas. Notificaciones
     y Cerrar sesion quedan A PROPOSITO fuera de .nav-menu (piden acceso
     rapido segun el usuario), el resto (Tablero/Relacionadas/Validacion
     SRI/SRI Recibidos/Vehiculos/Usuarios) entra al menu. */
  .nav-menu{ display:contents; }
  .hamburger-btn{ display:none; font-size:18px; line-height:1; padding:9px 13px; }
  /* "Volver al portal" (link externo, sale de la app entera) se reemplaza
     por "← Atras" (#btnAtras, usa history.back()) en TODO tamaño de
     pantalla, no solo celular - la app ya tiene un historial real con
     pushState/popstate (ver navPush()/popstate mas abajo en el JS) para
     navegar Reporte -> Empresa -> Empresas sin salir al portal, pero el
     boton visible seguia mandando afuera incluso en escritorio
     (18-sep-2026, reportado por Carlos Ponce). */
  #btnVolverPortal{ display:none !important; }
  #btnAtras{ display:inline-flex !important; align-items:center; }
  @media (max-width: 767px){
    .hamburger-btn{ display:inline-block; }
    /* Limpieza del topbar en celular: el nombre de usuario (ADMIN) se
       esconde. El logo tambien se esconde - el titulo (#title) ya muestra
       "Reporte - Empresa" (o el nombre de la empresa solo, en la pantalla
       de sus reportes), asi que repetirlo junto al logo era duplicar el
       mismo nombre dos veces en el header.
       "Cerrar sesion" dejo de flotar fijo arriba a la derecha (chocaba con
       el nombre de empresa) y paso a vivir dentro del menu hamburguesa
       (#navMenu, ver HTML) junto con Tablero/Relacionadas/etc. */
    #userLabel{ display:none !important; }
    header img[alt="Pronto!"]{ display:none; }
    /* El titulo (#title) ya dice reporte+empresa, asi que la migaja de pan
       (Empresas > empresa > reporte) queda triplicando la misma info -
       se esconde en movil. */
    #crumbs{ display:none; }
    /* El boton "Actualizar" se reemplaza en movil por el gesto de
       arrastrar hacia abajo (ver pull-to-refresh en el JS, mas abajo). */
    #btnRef{ display:none !important; }
    .nav-menu{
      display:none; position:absolute; top:calc(100% + 6px); right:12px; z-index:70;
      flex-direction:column; gap:2px; min-width:210px; padding:6px;
      background:var(--surface); border:1px solid var(--outline); border-radius:var(--r);
      box-shadow:var(--shadow-2);
    }
    .nav-menu.open{ display:flex; }
    .nav-menu button{ width:100%; text-align:left; border-radius:var(--r-sm); }
    /* En movil, toggleNotifPanel() ya no abre este #notifPanel anclado -
       usa un modal centrado (ver toggleNotifModalMovil en el JS), igual
       que Filtros. Este panel solo se usa en desktop (ver regla base). */
  }

  /* ---------- botones ---------- */
  button{ cursor:pointer; border:0; font:inherit; font-size:14px; font-weight:600;
          border-radius:999px; padding:9px 16px; transition:transform .08s ease, background .15s, box-shadow .15s, opacity .15s;
          -webkit-user-select:none; user-select:none; }
  button:active{ transform:scale(.97); }
  button:disabled{ opacity:.4; cursor:default; transform:none; }
  button:focus-visible{ outline:2px solid var(--primary); outline-offset:2px; }
  .triton-date-wrap{position:relative;display:inline-flex;align-items:center;width:125px;height:34px;box-sizing:border-box;background:var(--field);border:1px solid var(--outline-2);border-radius:var(--r-sm);z-index:2;}
  .triton-date-wrap:hover{border-color:var(--outline);}
  .triton-date-wrap:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-tint);}
  .triton-date-text{width:100%;height:100%;box-sizing:border-box;border:0!important;outline:0!important;background:transparent!important;color:var(--text);font:inherit;font-size:13px;padding:6px 30px 6px 8px;min-width:0;}
  .triton-date-text::placeholder{color:var(--text-2);opacity:.75;}
  .triton-date-calendar{position:absolute;right:2px;top:2px;width:29px;height:28px;padding:0;border:0;background:transparent;color:var(--text-2);border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:none;font-size:15px;z-index:3;}
  .triton-date-calendar:hover{background:var(--outline-2);color:var(--text);}
  .triton-date-picker{position:absolute!important;right:2px!important;top:2px!important;width:29px!important;height:28px!important;opacity:0!important;pointer-events:none!important;border:0!important;padding:0!important;}
  .primary{ background:var(--primary); color:var(--on-primary); box-shadow:var(--shadow-1); }
  .primary:hover{ box-shadow:var(--shadow-2); }
  .ghost{ background:var(--surface-3); color:var(--text); }
  .ghost.has-sel{ background:var(--primary-tint); color:var(--primary); }
  .ghost:hover{ background:var(--outline-2); }

  /* ---------- inputs y selects "sueltos" (fuera de .ac-box/.triton-date-wrap/.toolbar,
     que ya traen su propio estilo mas especifico y ganan por especificidad) - antes no
     tenian NINGUN estilo base, quedaban con el cuadrado por defecto del navegador en
     decenas de formularios (Vehiculos, Bitacora, Triton, Abastecimiento...) (17-sep-2026) */
  input[type=text], input[type=number], input[type=date], input[type=month],
  input[type=password], input[type=email], select, textarea{
    font:inherit; font-size:13.5px; color:var(--text); background:var(--field);
    border:1px solid var(--outline-2); border-radius:var(--r-sm); padding:8px 12px;
    transition:border-color .15s, box-shadow .15s;
  }
  input[type=text]:hover, input[type=number]:hover, input[type=date]:hover, input[type=month]:hover,
  input[type=password]:hover, input[type=email]:hover, select:hover, textarea:hover{ border-color:var(--outline); }
  input[type=text]:focus, input[type=number]:focus, input[type=date]:focus, input[type=month]:focus,
  input[type=password]:focus, input[type=email]:focus, select:focus, textarea:focus{
    outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-tint);
  }
  input::placeholder, textarea::placeholder{ color:var(--text-3); opacity:.75; }
  input:disabled, select:disabled, textarea:disabled{ opacity:.55; cursor:not-allowed; }

  /* ---------- contenedor ---------- */
  .wrap{ padding:20px; max-width:1200px; margin:0 auto; }
  .crumbs{ font-size:13px; color:var(--text-2); margin-bottom:16px; display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
  .crumbs a{ color:var(--primary); cursor:pointer; text-decoration:none; font-weight:500; }
  .crumbs a:hover{ text-decoration:underline; }

  /* ---------- tarjetas (empresas / reportes) ---------- */
  .cards{ display:grid; grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); gap:16px; }
  .card{ position:relative; background:var(--surface); border:1px solid var(--outline);
         border-radius:var(--r-lg); padding:20px; cursor:pointer; box-shadow:var(--shadow-1);
         transition:transform .14s ease, box-shadow .14s ease, border-color .14s; }
  .card:not(.disabled):hover{ transform:translateY(-2px); box-shadow:var(--shadow-2); border-color:transparent; }
  .card:not(.disabled)::after{ content:"›"; position:absolute; right:16px; top:50%; transform:translateY(-50%);
         font-size:26px; line-height:1; color:var(--text-3); font-weight:400; }
  .card.disabled{ cursor:default; opacity:.55; }
  .card h3{ margin:0 0 6px; font-size:17px; font-weight:600; letter-spacing:-.01em; padding-right:18px; }
  .card p{ margin:0; font-size:13px; color:var(--text-2); }
  /* Inicio (23-oct-2026): mismo estilo que el Inicio de Bitacora - saludo, buscador y
     tarjetas agrupadas. --rc / --rc-bg = color del grupo (se pasan en linea por grupo). */
  .home-hola{ display:flex; align-items:flex-end; gap:16px; flex-wrap:wrap; margin:2px 0 4px; }
  .home-hola > div:first-child{ flex:1 1 280px; }
  .home-hola .t{ font-size:22px; font-weight:650; letter-spacing:-.02em; }
  .home-hola .s{ font-size:14px; color:var(--text-2); margin-top:2px; }
  .home-buscar{ flex:0 1 320px; position:relative; }
  .home-buscar::before{ content:"\1F50D"; position:absolute; left:14px; top:50%; transform:translateY(-50%); font-size:14px; opacity:.6; pointer-events:none; }
  .home-buscar input{ width:100%; height:40px; border:1px solid var(--outline-2); border-radius:999px; background:var(--surface);
                      padding:0 16px 0 40px; font:inherit; font-size:14px; color:var(--text); box-shadow:var(--shadow-1); }
  .home-buscar input:focus{ outline:2px solid var(--primary); outline-offset:1px; }
  .home-sec{ display:flex; align-items:center; gap:10px; margin:24px 0 10px; font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--text-2); }
  .home-sec::before{ content:""; width:4px; height:14px; border-radius:2px; background:var(--rc); }
  .home-sec span{ font-size:12px; font-weight:500; text-transform:none; letter-spacing:0; color:var(--text-3); }
  .home-cards{ display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:16px; }
  .home-card{ position:relative; display:flex; gap:14px; align-items:flex-start; padding:16px 38px 16px 18px;
              background:var(--surface); border:1px solid var(--outline); border-radius:var(--r-lg); cursor:pointer; box-shadow:var(--shadow-1);
              transition:transform .14s ease, box-shadow .14s ease, border-color .14s; }
  .home-card::after{ content:"\203A"; position:absolute; right:16px; top:50%; transform:translateY(-50%); font-size:26px; line-height:1; color:var(--text-3); }
  .home-card:hover{ transform:translateY(-2px); box-shadow:var(--shadow-2); border-color:var(--rc); }
  .home-card:focus-visible{ outline:2px solid var(--rc); outline-offset:2px; }
  .home-ic{ flex:0 0 44px; height:44px; border-radius:12px; background:var(--rc-bg); display:inline-flex; align-items:center; justify-content:center; font-size:21px; }
  .home-ic.mono{ font-size:14px; font-weight:750; letter-spacing:.02em; color:var(--rc); }
  .home-card h3{ margin:0 0 3px; font-size:17px; font-weight:600; letter-spacing:-.01em; }
  .home-card p{ margin:0; font-size:13px; color:var(--text-2); line-height:1.4; }
  .home-vacio{ margin:30px 0; text-align:center; color:var(--text-2); }
  @media (max-width:640px){ .home-cards{ grid-template-columns:1fr; } }
  .home-badges{ display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; }
  .home-badges:empty{ display:none; }
  .home-badge{ font-size:11.5px; font-weight:700; padding:2px 9px; border-radius:99px; background:var(--surface-3); color:var(--text-2); }
  .home-badge.alerta{ background:rgba(232,136,12,.15); color:#b35f00; }
  /* Abastecimiento (23-oct-2026): panel "Calcular" en tarjeta, con la misma etiqueta de seccion del Inicio. */
  .ab-panel{ background:var(--surface); border:1px solid var(--outline); border-radius:var(--r-lg); box-shadow:var(--shadow-1); padding:18px 20px; margin-bottom:18px; max-width:1100px; }
  .ab-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(270px,1fr)); gap:18px 32px; }
  .ab-label{ display:flex; align-items:center; gap:8px; margin-bottom:9px; font-size:11.5px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--text-2); }
  .ab-label::before{ content:""; width:4px; height:12px; border-radius:2px; background:var(--primary); }
  .ab-row, .ab-mini{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; min-height:36px; }
  .ab-mini{ font-size:13px; color:var(--text-2); min-height:34px; }
  .ab-mini + .ab-mini{ margin-top:4px; }
  .ab-mini input{ width:64px; }
  .ab-sep{ color:var(--text-3); }
  .ab-val{ display:flex; align-items:center; min-height:36px; font-size:15px; font-weight:600; }
  .ab-tag{ margin-left:8px; padding:2px 9px; border-radius:99px; font-size:11px; font-weight:700; background:var(--primary-tint); color:var(--primary); }
  .ab-hint{ margin-top:6px; font-size:12.5px; line-height:1.4; color:var(--text-2); }
  .ab-hint a{ color:var(--primary); font-weight:600; cursor:pointer; text-decoration:none; }
  .ab-hint a:hover{ text-decoration:underline; }
  .ab-actions{ display:flex; align-items:center; gap:18px; flex-wrap:wrap; margin-top:18px; padding-top:16px; border-top:1px solid var(--outline); }
  .ab-check{ display:flex; align-items:center; gap:6px; font-size:13px; color:var(--text-2); cursor:pointer; }

  /* ---------- mosaicos de estado ---------- */
  .stat-row{ display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:10px; margin-bottom:14px; }
  .stat{ background:var(--surface); border:1px solid var(--outline);
         border-radius:var(--r); padding:12px 15px; cursor:pointer; transition:transform .1s, box-shadow .15s, background .15s;
         box-shadow:var(--shadow-1); container-type:inline-size; }
  .stat:hover{ transform:translateY(-1px); box-shadow:var(--shadow-2); }
  .stat.active{ box-shadow:0 0 0 2px var(--c,var(--primary)) inset, var(--shadow-1); background:var(--cbg,var(--surface)); }
  /* clamp() con unidades cqw: el numero se achica solo cuando la tarjeta es
     angosta (muchos KPI en una fila), sin depender del ancho de pantalla -
     asi no se ve desproporcionado en tarjetas chicas (16-sep-2026). */
  .stat .n{ font-size:clamp(15px,13cqw,23px); font-weight:750; letter-spacing:-.02em; color:var(--c,var(--text)); font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .stat .lbl{ font-size:clamp(10.5px,6.5cqw,12.5px); font-weight:600; color:var(--text-2); margin-top:3px; display:flex; align-items:center; gap:7px; }
  .stat .lbl::before{ content:""; width:9px; height:9px; border-radius:50%; background:var(--c,var(--text-3)); flex:0 0 auto; }
  .stat .tot{ font-size:clamp(11px,6cqw,13px); color:var(--text); margin-top:4px; font-variant-numeric:tabular-nums; }
  @media (max-width:640px){
    /* Las tarjetas de KPI (Documentos/Saldo total/etc.) en celular pesan
       demasiado para lo poco que muestran (un numero + una etiqueta) -
       se comprimen para dejarle mas espacio vertical a la lista real. */
    .stat-row{ gap:8px; margin-bottom:10px; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); }
    .stat{ padding:8px 12px; }
    .stat .n{ font-size:clamp(13px,13cqw,18px); }
    .stat .lbl{ font-size:clamp(9.5px,6.5cqw,10.5px); margin-top:1px; }
    .stat .tot{ font-size:clamp(10px,6cqw,11px); margin-top:2px; }
    /* El cajon de "Fecha de corte" (CxC/Inventario) quedaba muy ancho y
       alto para lo poco que dice - se comprime y el picker pasa a ocupar
       todo el ancho para que el dedo lo toque facil. La barra de
       "Mostrando X de Y..." tambien se achica para no sentirse tan suelta. */
    .corte-box{ padding:9px 12px !important; gap:6px !important; }
    .corte-box .corte-lbl{ font-size:13px !important; }
    .corte-box input[type=date]{ font-size:14px !important; padding:7px 10px !important; flex:1 1 100%; }
    .corte-box .corte-msg{ font-size:11.5px !important; }
    #cartBar > div{ font-size:12px !important; margin:0 2px 6px !important; }
  }
  .st-banco{ --c:var(--c-banco); --cbg:var(--bg-banco); --cbd:var(--bd-banco); }
  .st-jmap { --c:var(--c-jmap);  --cbg:var(--bg-jmap);  --cbd:var(--bd-jmap); }
  .st-dif  { --c:var(--c-dif);   --cbg:var(--bg-dif);   --cbd:var(--bd-dif); }
  .st-otro { --c:var(--c-otro);  --cbg:var(--bg-otro);  --cbd:var(--bd-otro); }

  /* ---------- barra de filtros ---------- */
  .toolbar{ display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin-bottom:14px; }
  .toolbar input[type=text], .toolbar select, .toolbar input[type=date]{
    font:inherit; font-size:13.5px; color:var(--text); background:var(--field);
    border:1px solid transparent; border-radius:var(--r-sm); padding:8px 12px; transition:border-color .15s, box-shadow .15s; }
  .toolbar input[type=text]{ min-width:230px; }
  .toolbar input[type=date]{ color-scheme:light dark; }
  .toolbar input[type=text]:focus, .toolbar select:focus, .toolbar input[type=date]:focus{ outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-tint); }
  .toolbar input[type=text]::placeholder{ color:var(--text-3); }
  .toolbar label{ font-size:14px; color:var(--text); display:inline-flex; align-items:center; gap:7px; cursor:pointer; }
  .toolbar input[type=checkbox]{ width:18px; height:18px; accent-color:var(--primary); cursor:pointer; }
  .rj-no-spin::-webkit-outer-spin-button, .rj-no-spin::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0; }
  .rj-no-spin{ -moz-appearance:textfield; }

  /* ---------- filtro con buscador (escribir y ver opciones al instante) ---------- */
  .ac-box{ position:relative; display:inline-flex; align-items:center; }
  .ac-box input[type=text]{
    font:inherit; font-size:13.5px; color:var(--text); background:var(--field);
    border:1px solid transparent; border-radius:var(--r-sm); padding:8px 30px 8px 12px; min-width:220px;
    transition:border-color .15s, box-shadow .15s; }
  .ac-box input[type=text]:focus{ outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-tint); }
  .ac-box input[type=text]::placeholder{ color:var(--text-3); }
  .ac-clear{ position:absolute; right:8px; top:50%; transform:translateY(-50%); border:0; background:transparent;
    color:var(--text-2); font-size:16px; line-height:1; cursor:pointer; padding:2px 4px; }
  .ac-clear:hover{ color:var(--text); }
  .ac-menu{ position:absolute; top:calc(100% + 4px); left:0; min-width:100%; width:max-content; max-width:320px;
    max-height:260px; overflow:auto; background:var(--surface); border:1px solid var(--outline);
    border-radius:var(--r); box-shadow:var(--shadow-2, var(--shadow-1)); z-index:30; display:none; }
  .ac-item{ padding:8px 12px; cursor:pointer; font-size:13.5px; }
  .ac-item:hover{ background:var(--primary-tint); }
  .ac-empty{ padding:8px 12px; font-size:13px; color:var(--text-2); }
  .grow{ flex:1 1 auto; }

  /* ---------- tabla ---------- */
  .tablebox{ background:var(--surface); border:1px solid var(--outline); border-radius:var(--r-lg);
             overflow:auto; -webkit-overflow-scrolling:touch; max-height:calc(100vh - 340px); box-shadow:var(--shadow-1); }
  table{ border-collapse:collapse; width:100%; font-size:12.5px; }
  th,td{ padding:5px 8px; border-bottom:1px solid var(--outline); white-space:nowrap; text-align:left; vertical-align:middle; }
  /* con table-layout:fixed (activado por JS via bcInitColResize) el ancho de
     cada columna queda fijo - sin este overflow:hidden el texto que no
     entra se dibuja encima de la columna vecina en vez de cortarse. */
  td{ overflow:hidden; text-overflow:ellipsis; }
  .col-resizer{ position:absolute; top:0; right:-5px; bottom:0; width:10px; cursor:col-resize; z-index:2; }
  .col-resizer::after{ content:''; position:absolute; top:20%; bottom:20%; left:50%; width:3px; margin-left:-1.5px;
    border-radius:3px; background:var(--outline-2); }
  .col-resizer:hover::after, .col-resizer.active::after{ background:var(--primary); top:10%; bottom:10%; width:4px; margin-left:-2px; }
  .col-resizer:hover, .col-resizer.active{ background:var(--primary-tint); }
  tbody tr:last-child td{ border-bottom:0; }
  /* iOS Safari a veces "fantasmea"/superpone el contenido de celdas con
     position:sticky (encabezado + primera columna) mientras se hace scroll
     con inercia - forzar su propia capa de composicion evita ese glitch. */
  thead th, tbody td:first-child{ -webkit-transform:translateZ(0); transform:translateZ(0); }
  thead th{ position:sticky; top:0; z-index:1; background:var(--surface-2);
            padding:7px 8px; font-size:10.5px; font-weight:650; text-transform:uppercase; letter-spacing:.02em; color:var(--text-2); }
  /* fila de totales (tfoot) fija abajo mientras se hace scroll en la tabla,
     igual que el encabezado queda fijo arriba. */
  tfoot td{ position:sticky; bottom:0; z-index:1; background:var(--surface-2); border-top:1px solid var(--outline); border-bottom:0; }
  tbody tr{ transition:background .12s; }
  tbody td{ background:var(--surface); }
  tbody tr:nth-child(even) td{ background:var(--surface-2); }
  tbody tr:hover td{ background:var(--primary-tint); }
  td.num, th.num{ text-align:right; font-variant-numeric:tabular-nums; }
  tr.done{ opacity:.5; }
  tr.done td.desc{ text-decoration:line-through; }
  .desc{ max-width:180px; overflow:hidden; text-overflow:ellipsis; }
  td.wrap-desc{ white-space:normal; max-width:260px; line-height:1.35; }
  /* primera columna fija (como "Inmovilizar paneles" de Excel) - para no
     perder de vista a que fila corresponde cada dato al desplazarse a la
     derecha en tablas con muchas columnas */
  tbody td:first-child{ position:sticky; left:0; z-index:2; box-shadow:1px 0 0 var(--outline); }
  thead th:first-child{ position:sticky; left:0; top:0; z-index:3; box-shadow:1px 0 0 var(--outline); }
  td.card-toggle{ display:none; }

  /* ---------- Cartera/CxC/CxP/Cierres/Ventas/Compras/Retenciones/Inventario
     (#tboxC, ver renderCartTabla()) en celular: en vez de tabla ancha con
     scroll horizontal, cada fila pasa a ser una tarjeta con "Etiqueta: valor"
     apilado - igual que una app de banco muestra sus movimientos. Con mas de
     4 columnas la tarjeta arranca comprimida (solo .card-sum, la primera
     columna + el monto/cantidad mas relevante) y ".card-more" (el resto)
     queda oculto detras del boton "Ver mas" hasta que la fila tenga
     .expanded (toggleCartCard()). Requiere que cada <td> tenga data-label
     (ya lo hace renderCartTabla()). ---------- */
  @media (max-width:640px){
    #tboxC{ max-height:none; overflow:visible; border:0; background:transparent; box-shadow:none; }
    #tboxC table{ width:100%; }
    #tboxC thead{ display:none; }
    #tboxC tbody{ display:block; }
    #tboxC tr{ display:block; margin-bottom:10px; padding:4px 12px; border-radius:var(--r-sm);
      background:var(--surface); border:1px solid var(--outline); box-shadow:var(--shadow-1); }
    #tboxC tr.cierre-row:hover{ background:var(--surface) !important; }
    #tboxC td{ display:flex; justify-content:space-between; align-items:center; gap:14px;
      position:static !important; box-shadow:none !important; background:transparent !important;
      padding:8px 0; border-bottom:1px dashed var(--outline); white-space:normal; text-align:left; }
    #tboxC tr:nth-child(even) td{ background:transparent; }
    #tboxC td:last-child{ border-bottom:0; }
    #tboxC td::before{ content:attr(data-label); font-size:10.5px; font-weight:650; text-transform:uppercase;
      letter-spacing:.02em; color:var(--text-2); text-align:left; flex:0 0 auto; }
    #tboxC td.num{ text-align:right; }
    #tboxC td.card-more{ display:none; }
    #tboxC tr.expanded td.card-more{ display:flex; }
    #tboxC td.card-toggle{ display:flex; justify-content:center; padding:6px 0 0; border-bottom:0; }
    #tboxC td.card-toggle::before{ content:none; }
    .card-toggle-btn{ background:none; border:0; color:var(--primary); font-size:12.5px; font-weight:650;
      padding:6px 10px; cursor:pointer; display:flex; align-items:center; gap:4px; }
    .card-toggle-btn .chev{ transition:transform .15s ease; }
    #tboxC tr.expanded .card-toggle-btn .chev{ transform:rotate(180deg); }
  }

  /* ---------- CxC/CxP agrupado por cliente/proveedor (#tboxC, ver
     renderCarteraAgrupada()) - una tarjeta por cliente/proveedor con su
     saldo total, desplegable para ver sus documentos individuales. ---------- */
  .cxc-group{ background:var(--surface); border:1px solid var(--outline); border-radius:var(--r);
    margin-bottom:8px; overflow:hidden; box-shadow:var(--shadow-1); transition:box-shadow .15s ease, border-color .15s ease; }
  .cxc-group:hover{ border-color:var(--outline-2); box-shadow:var(--shadow-2,0 4px 14px rgba(16,24,40,.08)); }
  .cxc-group.expanded{ border-color:var(--primary-tint,var(--outline-2)); }
  /* Alto fijo y consistente sin importar que tan largo sea el nombre: el
     nombre/codigo se truncan a UNA linea cada uno (nunca se envuelven ni
     empujan el monto de lugar) y el monto queda en una columna de ancho fijo
     siempre pegado a la derecha. Avatar circular con la inicial del nombre
     (color derivado del texto, consistente para el mismo cliente siempre)
     ayuda a escanear la lista de un vistazo en vez de una pared de texto. */
  .cxc-group-head{ display:flex; align-items:center; gap:12px; padding:12px 16px; cursor:pointer; }
  .cxc-group-head:hover{ background:var(--surface-2); }
  .cxc-avatar{ flex:0 0 auto; width:34px; height:34px; border-radius:50%; display:flex; align-items:center;
    justify-content:center; font-size:13px; font-weight:700; color:#fff; }
  .cxc-group-name{ min-width:0; flex:1 1 auto; }
  .cxc-group-name .nom{ display:block; font-weight:650; font-size:14px; line-height:1.35;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .cxc-group-name .cod{ display:inline-block; margin-top:2px; font-weight:600; font-size:10.5px;
    letter-spacing:.02em; color:var(--text-2); background:var(--surface-3); border-radius:999px;
    padding:1px 8px; }
  .cxc-group-meta{ display:flex; align-items:center; gap:14px; flex:0 0 auto; }
  .cxc-group-count{ font-size:11px; font-weight:600; color:var(--text-2); white-space:nowrap;
    background:var(--surface-3); border-radius:999px; padding:3px 9px; }
  .cxc-group-total{ font-weight:750; font-size:15px; font-variant-numeric:tabular-nums;
    white-space:nowrap; min-width:78px; text-align:right; color:var(--text); }
  .cxc-group-total.neg{ color:var(--red); }
  .cxc-group-head .chev{ transition:transform .15s ease; color:var(--text-3); flex-shrink:0;
    width:22px; height:22px; border-radius:50%; display:flex; align-items:center; justify-content:center;
    background:var(--surface-3); font-size:11px; }
  .cxc-group.expanded .cxc-group-head .chev{ transform:rotate(180deg); background:var(--primary-tint,var(--surface-3)); color:var(--primary); }
  .cxc-group-body{ display:none; border-top:1px solid var(--outline); padding:10px 16px 14px; background:var(--surface-2); }
  .cxc-group.expanded .cxc-group-body{ display:block; }
  .cxc-group-body table{ font-size:12px; background:var(--surface); border-radius:var(--r-sm); overflow:hidden; }
  @media (max-width:480px){
    .cxc-group-count{ display:none; }   /* con poco ancho, prioridad al nombre y al monto */
    .cxc-avatar{ width:28px; height:28px; font-size:11px; }
  }

  /* ---------- pills / chips ---------- */
  .pill{ display:inline-flex; align-items:center; font-size:11.5px; font-weight:650; letter-spacing:.01em;
         border-radius:999px; padding:3px 11px; color:var(--c,var(--text)); background:var(--cbg,var(--surface-3)); white-space:nowrap; }
  .p-banco{ --c:var(--c-banco); --cbg:var(--bg-banco); }
  .p-jmap { --c:var(--c-jmap);  --cbg:var(--bg-jmap); }
  .p-dif  { --c:var(--c-dif);   --cbg:var(--bg-dif); }
  .p-otro { --c:var(--c-otro);  --cbg:var(--bg-otro); }
  .neg{ color:var(--red); } .pos{ color:var(--green); }

  /* ---------- control segmentado (reemplaza <select> de pocas opciones fijas) ---------- */
  .seg{ display:inline-flex; background:var(--surface-3); border-radius:999px; padding:3px; gap:2px; }
  .seg-btn{ cursor:pointer; border:0; font:inherit; font-size:12px; font-weight:650; border-radius:999px;
    padding:6px 13px; background:transparent; color:var(--text-2); transition:background .12s,color .12s; }
  .seg-btn.active{ background:var(--primary); color:var(--on-primary); box-shadow:var(--shadow-1); }
  .seg-btn:hover:not(.active){ background:var(--outline-2); color:var(--text); }

  /* ---------- badge contador sobre un boton ---------- */
  .count-badge{ display:inline-flex; align-items:center; justify-content:center; min-width:17px; height:17px;
    padding:0 5px; border-radius:999px; background:var(--primary); color:var(--on-primary); font-size:10px;
    font-weight:700; margin-left:7px; font-variant-numeric:tabular-nums; vertical-align:2px; }

  /* ---------- pipeline de progreso (Pedido -> Generando -> Descargar -> Importado) ---------- */
  .pipeline{ display:flex; align-items:center; }
  .pl-step{ display:flex; flex-direction:column; align-items:center; gap:5px; width:60px; flex:0 0 auto; }
  .pl-dot{ width:19px; height:19px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:10px; font-weight:750; flex:0 0 auto; }
  .pl-dot.done{ background:var(--primary); color:var(--on-primary); }
  .pl-dot.current{ background:var(--surface); color:var(--primary); border:2px solid var(--primary); }
  .pl-dot.warn{ background:var(--surface); color:var(--c-dif); border:2px solid var(--c-dif); }
  .pl-dot.pending{ background:var(--surface-3); color:var(--text-3); }
  .pl-line{ flex:1 1 14px; height:2px; background:var(--outline-2); min-width:10px; margin-top:-19px; }
  .pl-line.done{ background:var(--primary); }
  .pl-lbl{ font-size:9px; color:var(--text-2); text-align:center; line-height:1.2; }
  .pl-sub{ font-size:11px; color:var(--text-2); margin-top:6px; }

  .cmt{ font:inherit; font-size:13px; color:var(--text); background:var(--field); width:180px;
        border:1px solid transparent; border-radius:var(--r-sm); padding:7px 10px; transition:border-color .15s, box-shadow .15s; }
  .cmt:focus{ outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-tint); }
  .saved{ color:var(--green); font-size:11px; margin-left:6px; opacity:0; transition:opacity .2s; }
  .saved.show{ opacity:1; }

  /* ---------- banner / varios ---------- */
  #banner{ display:none; margin:0 0 16px; padding:12px 16px; border-radius:var(--r);
           background:var(--bg-dif); border:1px solid var(--bd-dif); color:var(--text); font-size:14px; }
  .spin{ display:inline-block; width:15px; height:15px; border:2px solid var(--c-dif);
         border-top-color:transparent; border-radius:50%; animation:s .8s linear infinite; vertical-align:-2px; margin-right:8px; }
  @keyframes s{ to{ transform:rotate(360deg); } }
  .muted{ color:var(--text-2); padding:28px 14px; text-align:center; font-size:14px; }
  /* .muted esta pensado para mensajes tipo "Cargando..."/"Sin datos" centrados -
     pero se usa tambien en <label class="small muted"> como etiqueta compacta de
     formulario en decenas de pantallas (Vehiculos, Bitacora, Triton, Abastecimiento...),
     heredando ese padding gigante sin querer. Se resetea solo para <label> (17-sep-2026). */
  label.muted{ padding:0; text-align:left; font-size:inherit; }

  /* ---------- scrollbars sutiles ---------- */
  .tablebox::-webkit-scrollbar{ width:10px; height:10px; }
  .tablebox::-webkit-scrollbar-thumb{ background:var(--outline-2); border-radius:999px; border:2px solid transparent; background-clip:padding-box; }
  .tablebox::-webkit-scrollbar-track{ background:transparent; }

  /* ---------- estados financieros ---------- */
  .ef-tabs{ display:flex; gap:8px; margin-bottom:16px; flex-wrap:wrap; align-items:center; }
  .ef-tab{ padding:8px 18px; border-radius:999px; font-size:14px; font-weight:600;
           background:var(--surface-3); color:var(--text-2); cursor:pointer; border:1px solid transparent;
           transition:background .15s, color .15s; }
  .ef-tab.active{ background:var(--primary); color:var(--on-primary); }
  .ef-tab:hover:not(.active){ background:var(--outline-2); }
  .ef-table{ width:100vw; max-width:100vw; margin-left:calc(-50vw + 50%); box-sizing:border-box; padding:0 20px; }
  .ef-table table{ width:100%; min-width:max-content; }
  .ef-table td, .ef-table th{ white-space:nowrap; padding:8px 7px!important; font-size:12.5px; }
  .ef-group{ background:var(--surface-2)!important; }
  .ef-group td{ font-weight:700; font-size:12px; letter-spacing:.04em; color:var(--text-2); text-transform:uppercase; padding:10px 14px!important; }
  .ef-sub{ background:var(--surface)!important; }
  .ef-sub td{ padding-left:28px!important; }
  .ef-sub:hover td{ background:var(--surface-2); }
  .ef-arrow{ display:inline-block; width:12px; margin-right:6px; font-size:10px; color:var(--text-3); transition:transform .15s; }
  .ef-sub-open .ef-arrow{ transform:rotate(90deg); }
  .ef-cuenta td{ padding-left:44px!important; font-size:12.5px; color:var(--text-2); background:var(--surface)!important; border-top:1px dashed var(--outline-2)!important; }
  .ef-cuenta-loading td{ padding-left:44px!important; font-size:12.5px; background:var(--surface)!important; }
  .ef-subtotal td{ font-weight:700; border-top:1px solid var(--outline-2)!important; background:var(--surface-2)!important; }
  .ef-utilidad td{ font-weight:750; border-top:2px solid var(--outline)!important; font-size:14px; }
  .ef-pos{ color:var(--green)!important; }
  .ef-neg{ color:var(--red)!important; }

  /* ---------- KPIs financieros / DuPont ---------- */
  .kpi-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:16px; margin-bottom:22px; }
  .kpi-box{ background:var(--surface); border:1px solid var(--outline); border-radius:var(--r); padding:14px 16px; }
  .kpi-box-t{ font-size:13px; font-weight:600; color:var(--text-2); margin-bottom:8px; }
  .kpi-chart{ width:100%; height:auto; display:block; }
  .kpi-chart-lbl{ font-size:10px; fill:var(--text-3); }
  .kpi-chart-val{ font-size:10px; font-weight:700; fill:var(--text-2); }

  /* ---------- Validacion SRI ---------- */
  .sri-bar{ height:16px; background:var(--surface-3); border-radius:999px; overflow:hidden; }
  .sri-bar-in{ height:100%; width:0; background:var(--primary); transition:width .25s; }
  .sri-progress-top{ display:flex; justify-content:space-between; font-size:13px; font-weight:650; color:var(--text-2); margin-bottom:6px; }

  /* ---------- pie de pagina ---------- */
  .appfoot{ max-width:1200px; margin:8px auto 0; padding:24px 20px 34px; text-align:center;
            border-top:1px solid var(--outline); }
  .foot-brand{ font-size:13px; color:var(--text-2); }
  .foot-brand .kxpg{ font-weight:750; letter-spacing:.16em; color:var(--text); }
  .foot-sub{ font-size:12px; color:var(--text-3); margin-top:3px; }

  /* ---------- multi-select filtros ---------- */
  .msel{ position:relative; }
  .msel-btn{ background:var(--field); color:var(--text); border:1px solid var(--outline-2);
    border-radius:var(--r-sm); padding:9px 13px; font-size:13.5px; font-weight:500;
    white-space:nowrap; cursor:pointer; transition:border-color .15s, background .15s; }
  .msel-btn.has-sel{ border-color:var(--primary); color:var(--primary); background:var(--primary-tint); }
  .msel-btn:hover{ border-color:var(--primary); }
  .msel-panel{ position:absolute; top:calc(100% + 5px); left:0; z-index:40;
    background:var(--surface); border:1px solid var(--outline-2); border-radius:var(--r);
    box-shadow:var(--shadow-2); min-width:220px; max-width:300px; }
  /* Un chip de filtro (Tienda/Cliente/etc.) que vive DENTRO de la ventana de
     Filtros (.modal-body, con su propio scroll) no puede desplegarse como
     superposicion "flotante" - el scroll del contenedor lo recorta (se veia
     cortado a la mitad). Adentro del modal se despliega EN LINEA (empuja el
     resto del contenido hacia abajo) para que quede dentro del area que sí
     se puede scrollear. */
  .modal-body .msel{ width:100%; }
  .modal-body .msel-btn{ width:100%; text-align:left; }
  .modal-body .msel-panel{ position:static; width:100%; max-width:none; margin-top:6px; }
  .msel-search{ width:100%; font:inherit; font-size:13.5px; padding:10px 12px;
    border:0; border-bottom:1px solid var(--outline); background:var(--field);
    border-radius:var(--r) var(--r) 0 0; outline:none; color:var(--text); }
  .msel-opts{ max-height:230px; overflow-y:auto; padding:5px 4px; }
  .msel-opt{ display:flex; align-items:center; gap:8px; padding:6px 10px; cursor:pointer;
    font-size:13.5px; border-radius:6px; }
  .msel-opt:hover{ background:var(--surface-2); }
  /* Checkbox propio (en vez del cuadrado nativo del navegador, que desentona
     con el resto del diseño) - cuadrado redondeado, tilde dibujado con CSS. */
  .msel-opt input[type=checkbox]{ appearance:none; -webkit-appearance:none; margin:0; position:relative;
    width:18px; height:18px; border-radius:6px; border:1.5px solid var(--outline-2);
    background:var(--surface); cursor:pointer; flex-shrink:0; transition:background .12s, border-color .12s; }
  .msel-opt input[type=checkbox]:checked{ background:var(--primary); border-color:var(--primary); }
  .msel-opt input[type=checkbox]:checked::after{ content:''; position:absolute; left:5px; top:1px;
    width:5px; height:9px; border:solid var(--on-primary); border-width:0 2px 2px 0; transform:rotate(45deg); }
  .msel-actions{ display:flex; border-top:1px solid var(--outline); border-radius:0 0 var(--r) var(--r); overflow:hidden; }
  .msel-act{ flex:1; border:0; padding:8px 6px; font-size:13px; cursor:pointer;
    background:var(--surface); font:inherit; font-weight:500; transition:background .12s; }
  .msel-act:hover{ background:var(--surface-2); }
  .msel-act-todos{ color:var(--text-2); border-right:1px solid var(--outline); }
  .msel-act-clear{ color:var(--red); }

  /* La ventana de Filtros usa el modal .modal-bg/.modal existente (ver
     abrirFiltrosModal()) - no necesita CSS propio. */

  /* ---------- panel de admin ---------- */
  .form-row{ margin-bottom:14px; }
  .form-row label{ display:block; font-size:12px; font-weight:650; text-transform:uppercase;
    letter-spacing:.04em; color:var(--text-2); margin-bottom:5px; }
  .form-row input{ width:100%; font:inherit; font-size:14px; background:var(--field);
    border:1px solid var(--outline-2); border-radius:var(--r-sm); padding:9px 12px; color:var(--text);
    transition:border-color .15s, box-shadow .15s; }
  .form-row input:focus{ outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-tint); }
  .form-row small{ color:var(--text-2); font-size:12px; display:block; margin-top:4px; }
  .form-row select{ width:100%; font:inherit; font-size:14px; background:var(--field);
    border:1px solid var(--outline-2); border-radius:var(--r-sm); padding:9px 12px; color:var(--text);
    transition:border-color .15s, box-shadow .15s; }
  .form-row select:focus{ outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-tint); }
  .form-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0 14px; }
  /* Registrar en JMap (Bancos/Conciliacion) - checkbox de modo destacado
     como tarjeta clicable, y la seccion condicional (proveedor/cliente)
     agrupada visualmente en vez de sueltos como el resto de campos. */
  /* Registrar en JMap: resumen, bloques y boton fijo abajo (01-oct-2026) */
  .rj-resumen{ display:flex; justify-content:space-between; align-items:center; gap:12px; background:var(--surface-2); border-radius:var(--r-sm); padding:14px 16px; margin-bottom:12px; }
  .rj-monto{ font-size:26px; font-weight:800; letter-spacing:-.5px; line-height:1.1; } .rj-monto.rj-out{ color:var(--red); } .rj-monto.rj-in{ color:var(--green); }
  .rj-chip{ display:inline-block; margin-top:6px; font-size:12px; font-weight:600; padding:3px 10px; border-radius:20px; }
  .rj-chip.rj-out{ background:rgba(220,38,38,.1); color:var(--red); } .rj-chip.rj-in{ background:rgba(22,163,74,.12); color:var(--green); }
  .rj-meta{ text-align:right; font-size:12.5px; color:var(--text-2); line-height:1.5; }
  .rj-regla{ font-size:12.5px; color:var(--text-2); background:var(--primary-tint); border-radius:8px; padding:7px 12px; margin-bottom:12px; }
  .rj-sec{ border:1px solid var(--outline); border-radius:var(--r-sm); padding:12px 14px 4px; margin-bottom:12px; }
  .rj-sec-t{ font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.4px; color:var(--text-2); margin-bottom:10px; }
  .rj-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0 14px; } @media (max-width:640px){ .rj-grid{ grid-template-columns:1fr; } .rj-resumen{ flex-direction:column; align-items:flex-start; } .rj-meta{ text-align:left; } }
  .rj-footer{ position:sticky; bottom:-18px; background:var(--surface); padding:12px 0 18px; margin-bottom:-18px; border-top:1px solid var(--outline); }
  .rj-footer button{ width:100%; padding:12px; border-radius:var(--r-sm); font-size:15px; font-weight:700; cursor:pointer; }
  .rj-toggle{ background:var(--surface-2); border:1px solid var(--outline); border-radius:var(--r-sm);
    padding:10px 12px; margin-bottom:12px; }
  .rj-toggle label{ display:flex; align-items:center; gap:9px; font-size:13.5px; font-weight:500;
    color:var(--text); cursor:pointer; }
  .rj-toggle input[type=checkbox]{ width:16px; height:16px; accent-color:var(--primary); cursor:pointer; flex:0 0 auto; }
  .rj-subsection{ background:var(--surface-2); border:1px solid var(--outline); border-radius:var(--r-sm);
    padding:12px 14px 6px; margin-bottom:14px; }
  .rj-results{ border:1px solid var(--outline-2); border-radius:var(--r-sm); margin-top:4px;
    max-height:160px; overflow:auto; background:var(--surface); }
  .rj-results:empty{ display:none; }
  .docab-item{ display:flex; align-items:center; gap:10px; padding:10px 14px; border-bottom:1px solid var(--outline); font-size:13.5px; }
  .docab-item:last-child{ border-bottom:0; }
  .docab-item .lado{ font-size:11px; font-weight:650; text-transform:uppercase; letter-spacing:.03em;
    padding:2px 8px; border-radius:999px; background:var(--surface-3); color:var(--text-2); flex:0 0 auto; }
  .adm-card{ background:var(--surface); border:1px solid var(--outline); border-radius:var(--r-lg);
    padding:24px; margin-top:16px; max-width:520px; }
  .adm-card h3{ margin:0 0 18px; font-size:17px; }

  /* ---------- notificaciones (campanita) ---------- */
  .notif-badge{ position:absolute; top:2px; right:2px; background:var(--red); color:#fff;
    font-size:10px; font-weight:700; min-width:16px; height:16px; border-radius:999px;
    display:flex; align-items:center; justify-content:center; padding:0 3px; line-height:1; }
  .notif-panel{ position:absolute; top:calc(100% + 6px); right:0; z-index:70; width:340px; max-height:420px;
    overflow-y:auto; background:var(--surface); border:1px solid var(--outline-2); border-radius:var(--r);
    box-shadow:var(--shadow-2); }
  .notif-item{ padding:12px 14px; border-bottom:1px solid var(--outline); font-size:13.5px; cursor:pointer; }
  .notif-item:last-child{ border-bottom:0; }
  .notif-item:hover{ background:var(--surface-2); }
  .notif-item.unread{ background:var(--primary-tint); }
  .notif-item .fecha{ font-size:11px; color:var(--text-2); margin-top:3px; }
  .notif-head{ display:flex; align-items:center; justify-content:space-between; padding:10px 14px;
    border-bottom:1px solid var(--outline); font-weight:650; font-size:13px; }
  .notif-head button{ background:none; border:0; color:var(--primary); font:inherit; font-size:12px; cursor:pointer; }
  .notif-empty{ padding:24px; text-align:center; color:var(--text-2); font-size:13px; }

  /* ---------- modal drill-down ---------- */
  .modal-bg{ position:fixed; inset:0; z-index:60; background:rgba(0,0,0,.5);
    display:flex; align-items:center; justify-content:center; padding:20px; }
  .modal{ background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--shadow-2);
    width:100%; max-width:820px; max-height:82vh; display:flex; flex-direction:column; overflow:hidden; }
  .modal-head{ display:flex; align-items:center; gap:12px; padding:16px 20px;
    border-bottom:1px solid var(--outline); flex-shrink:0; }
  .modal-head h3{ margin:0; font-size:16px; font-weight:650; flex:1; }
  .modal-sub{ font-size:13px; color:var(--text-2); }
  .modal-close{ background:none; border:0; font-size:20px; cursor:pointer;
    color:var(--text-2); padding:4px 8px; border-radius:8px; line-height:1; font:inherit; }
  .modal-close:hover{ background:var(--surface-2); }
  .modal-body{ overflow:auto; flex:1; }
  .modal-body table{ width:100%; }

  /* Formulario de Usuarios (showUserForm): 2 columnas lado a lado en vez de
     una sola columna larga - responsive, 1 columna en pantallas angostas. */
  .userform-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0 32px; align-items:start; }
  @media(max-width:680px){ .userform-grid{ grid-template-columns:1fr; } }

  /* ---------- Bitacora: formulario de venta (tabs + grid compacto) ---------- */
  .bv-tabs{ display:flex; gap:22px; margin-bottom:18px; border-bottom:1px solid var(--outline); }
  .bv-tabbtn{ background:none; border:0; border-bottom:2px solid transparent; margin-bottom:-1px;
    padding:10px 2px; font:inherit; font-size:13.5px; font-weight:650; color:var(--text-2); cursor:pointer; }
  .bv-tabbtn:hover{ color:var(--text); }
  .bv-tabbtn.active{ color:var(--primary); border-bottom-color:var(--primary); }

  .bv-grid{ display:grid; grid-template-columns:repeat(auto-fit, minmax(230px, 1fr)); gap:0 16px; }
  .bv-grid > .full{ grid-column:1/-1; }
  .bv-grid > .wide{ grid-column:1/-1; max-width:640px; }
  .bv-grid .form-row{ margin-bottom:14px; }
  .bv-grid.collapsed{ display:none; }
  .bv-box{ padding:12px 14px; border:1px dashed var(--outline-2); border-radius:var(--r-sm); }
  .bv-cob-table{ border:1px solid var(--outline-2); border-radius:var(--r-sm); overflow:hidden; }
  .bv-cob-row{ display:grid; grid-template-columns:96px 1fr 1fr; gap:10px; align-items:center; padding:6px 12px; border-bottom:1px solid var(--outline-2); }
  .bv-cob-row:last-child{ border-bottom:none; }
  .bv-cob-head{ font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.02em; color:var(--text-dim); background:var(--field); }
  .bv-cob-label{ font-weight:600; font-size:13px; }
  .bv-cob-row select, .bv-cob-row input{ width:100%; font:inherit; font-size:13px; background:var(--field); border:1px solid var(--outline-2); border-radius:var(--r-sm); padding:6px 8px; color:var(--text); }
  @media (max-width:600px){
    .bv-cob-row{ grid-template-columns:76px 1fr 1fr; gap:6px; padding:6px 8px; }
  }
  .bd-bar-track{ background:var(--field); border-radius:99px; height:8px; width:100%; overflow:hidden; }
  .bd-bar-fill{ height:100%; border-radius:99px; background:var(--c,var(--green)); }
  .bd-meta-input{ width:80px; }
  .bd-pct{ font-size:12px; font-weight:600; color:var(--text-2); white-space:nowrap; }
  .bv-check{ display:flex; align-items:center; gap:7px; font-size:13px; cursor:pointer; }
  .bv-check input[type=checkbox]{ width:17px; height:17px; accent-color:var(--primary); cursor:pointer; flex-shrink:0; }

  .bv-section{ border-top:1px solid var(--outline); padding-top:14px; margin-top:14px; }
  .bv-section:first-child{ border-top:0; padding-top:0; margin-top:0; }
  .bv-sec-head{ display:flex; align-items:center; justify-content:space-between; gap:10px;
    width:100%; background:none; border:0; padding:0; margin:0 0 14px; cursor:pointer; text-align:left; }
  .bv-sec-head .t{ font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--text-2); }
  .bv-sec-head .arrow{ font-size:12px; color:var(--text-3); transition:transform .15s ease; flex-shrink:0; }
  .bv-sec-head.collapsed .arrow{ transform:rotate(-90deg); }
  .bv-sec-head.collapsed{ margin-bottom:0; }

  .bv-detail{ display:grid; grid-template-columns:1fr 1fr; gap:0 20px; }
  .bv-detail > .full{ grid-column:1/-1; }
  .bv-detail-item{ padding:9px 0; border-bottom:1px solid var(--outline); }
  .bv-detail-item .lbl{ font-size:11px; text-transform:uppercase; letter-spacing:.03em; color:var(--text-2); margin-bottom:3px; }
  .bv-detail-item .val{ font-size:14px; }
  @media (max-width:640px){ .bv-detail{ grid-template-columns:1fr; } }
  tr.cierre-row:hover{ background:var(--primary-tint) !important; cursor:pointer; }

  /* ---------- pantalla de login ---------- */
  #loginWall{ position:fixed; inset:0; z-index:999;
    background:linear-gradient(135deg,#1a1a2e 0%,#16213e 50%,#0f3460 100%);
    display:flex; align-items:center; justify-content:center; }
  .lcard{ background:var(--surface); border-radius:var(--r-lg); padding:36px 40px;
    width:100%; max-width:360px; box-shadow:0 24px 60px rgba(0,0,0,.45),0 6px 18px rgba(0,0,0,.25); }
  .lcard-logo{ text-align:center; margin-bottom:24px; }
  .lcard-logo .ico{ font-size:38px; line-height:1; margin-bottom:8px; }
  .lcard-logo h2{ margin:0 0 3px; font-size:20px; font-weight:700; letter-spacing:-.02em; }
  .lcard-logo small{ color:var(--text-2); font-size:13px; }
  .lfield{ margin-bottom:14px; }
  .lfield label{ display:block; font-size:12.5px; font-weight:650; text-transform:uppercase;
    letter-spacing:.04em; color:var(--text-2); margin-bottom:6px; }
  .lfield input{ width:100%; font:inherit; font-size:15px; background:var(--field);
    border:1px solid var(--outline-2); border-radius:var(--r-sm); padding:11px 14px;
    color:var(--text); transition:border-color .15s, box-shadow .15s; }
  .lfield input:focus{ outline:none; border-color:var(--primary); box-shadow:0 0 0 3px var(--primary-tint); }
  .lbtn{ width:100%; padding:12px; font-size:15px; font-weight:700; margin-top:8px;
    border-radius:var(--r-sm) !important; }
  .lerr{ color:var(--red); font-size:13px; margin-top:10px; min-height:18px; text-align:center; }

/* Cierre PDV: filas con detalle por doble clic */
.cp-fila{ cursor:pointer; user-select:none; }
.cp-det td:first-child, .cp-det th:first-child{ position:static!important; transform:none!important; }


/* Configurar cierres de caja (modal admin, 03-oct-2026) */
.ccfg-top{ display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:10px 16px; padding:10px 14px; background:var(--surface-2); border-radius:var(--r-sm); margin-bottom:16px; font-size:13.5px; }
.ccfg-sw{ display:flex; align-items:center; gap:10px; cursor:pointer; }
.ccfg-sw input{ appearance:none; -webkit-appearance:none; width:36px; height:20px; border-radius:999px; background:var(--outline-2); position:relative; cursor:pointer; flex:0 0 auto; transition:background .15s; margin:0; }
.ccfg-sw input::after{ content:""; position:absolute; top:2px; left:2px; width:16px; height:16px; border-radius:50%; background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.25); transition:left .15s; }
.ccfg-sw input:checked{ background:var(--primary); }
.ccfg-sw input:checked::after{ left:18px; }
.ccfg-per{ display:flex; align-items:center; gap:8px; color:var(--text-2); white-space:nowrap; }
.ccfg-per select{ width:auto; height:32px; padding:0 8px; font-size:13px; }
.ccfg-sec-h{ display:flex; justify-content:space-between; align-items:baseline; margin:0 2px 8px; font-size:13px; font-weight:650; }
.ccfg-cnt{ font-size:12px; font-weight:600; color:var(--primary); background:var(--primary-tint); border-radius:999px; padding:2px 10px; }
.ccfg-grupo{ border:1px solid var(--outline); border-radius:var(--r-sm); margin-bottom:8px; overflow:hidden; }
.ccfg-grupo-h{ display:flex; align-items:center; gap:10px; padding:9px 12px; font-size:13px; cursor:pointer; user-select:none; }
.ccfg-grupo-h:hover{ background:var(--surface-2); }
.ccfg-chev{ color:var(--text-3); font-size:11px; transition:transform .15s; }
.ccfg-grupo.ab .ccfg-chev{ transform:rotate(90deg); }
.ccfg-gtit{ flex:1; min-width:0; display:flex; align-items:baseline; gap:8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.ccfg-gtit .cod{ font-size:11.5px; color:var(--text-3); font-variant-numeric:tabular-nums; }
.ccfg-badge{ font-size:11.5px; color:var(--text-2); background:var(--surface-3); border-radius:999px; padding:2px 9px; white-space:nowrap; }
.ccfg-gacc{ display:flex; gap:10px; }
.ccfg-gacc a{ font-size:12px; color:var(--primary); text-decoration:none; }
.ccfg-gacc a.q{ color:var(--text-3); } .ccfg-gacc a.q:hover{ color:var(--red); }
.ccfg-lista{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); border-top:1px solid var(--outline); max-height:360px; overflow:auto; }
.ccfg-cta{ display:flex; align-items:center; gap:9px; padding:6px 12px; font-size:12.5px; cursor:pointer; min-width:0; }
.ccfg-cta:hover{ background:var(--surface-2); }
.ccfg-cta input{ width:15px; height:15px; accent-color:var(--primary); flex:0 0 auto; margin:0; }
.ccfg-txt{ display:flex; flex-direction:column; min-width:0; line-height:1.25; }
.ccfg-txt .nom{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ccfg-txt .cod{ font-size:11px; color:var(--text-3); font-variant-numeric:tabular-nums; }
.ccfg-res .cod{ font-variant-numeric:tabular-nums; color:var(--text-2); min-width:104px; }
.ccfg-res .nom{ flex:1; }
.ccfg-cta.off{ color:var(--text-3); } .ccfg-cta.off .nom{ text-decoration:line-through; }
.ccfg-pie{ position:sticky; bottom:-18px; display:flex; align-items:center; justify-content:flex-end; gap:8px; background:var(--surface); padding:12px 0 18px; margin:12px 0 -18px; border-top:1px solid var(--outline); }
.ccfg-err{ flex:1; color:var(--red); font-weight:600; font-size:13px; }
@media (max-width:560px){ .ccfg-lista{ grid-template-columns:1fr; } .ccfg-gtit .cod{ display:none; } }
.ccfg-res{ display:flex; align-items:center; gap:10px; padding:8px 12px; font-size:13px; cursor:pointer; border-bottom:1px solid var(--outline); }
.ccfg-res:last-child{ border-bottom:0; } .ccfg-res:hover{ background:var(--primary-tint); }
.ccfg-res .tag{ font-size:11px; color:var(--text-2); background:var(--surface-3); border-radius:999px; padding:2px 8px; white-space:nowrap; }
.ccfg-res.ya{ opacity:.55; }
.ccfg-vacio{ font-size:13px; color:var(--text-2); background:var(--surface-2); border-radius:var(--r-sm); padding:12px 14px; margin-bottom:10px; }
#ccfgRes{ max-height:240px; }

/* Bancos / Conciliacion (08-oct-2026): acciones a la derecha de la ruta y KPI finos en una fila. */
.bc-crumb-acc{ margin-left:auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.bc-crumb-acc button, .bc-crumb-acc .msel-btn{ height:32px; padding:0 12px; font-size:13px; }
.bc-sync{ color:#15803d; background:rgba(22,163,74,.10); border-radius:999px; padding:4px 10px; font-size:12.5px; font-weight:600; white-space:nowrap; cursor:default; }
.bc-kpis{ gap:8px; margin-bottom:12px; overflow-x:auto; }
.bc-kpis .stat{ padding:7px 11px; display:grid; grid-template-columns:auto 1fr; align-items:baseline; column-gap:8px; min-width:0; }
.bc-kpis .stat .n{ grid-row:1; grid-column:1; font-size:18px; }
.bc-kpis .stat .tot{ grid-row:1; grid-column:2; text-align:right; margin:0; font-size:12px; color:var(--text-2); white-space:nowrap; }
.bc-kpis .stat .lbl{ grid-row:2; grid-column:1 / -1; display:block; margin-top:1px; font-size:11.5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bc-kpis .stat .lbl::before{ display:inline-block; width:7px; height:7px; margin-right:6px; vertical-align:middle; }
/* Bancos: vista nueva de la tabla (Tabulator). */
.bc-nueva .tabulator{ font-size:13px; border:1px solid var(--outline); border-radius:var(--r-lg); background:var(--surface); }
.bc-nueva .tabulator .tabulator-tableholder{ overflow-x:auto; }
.bc-nueva .tabulator .tabulator-header{ background:var(--surface); border-bottom:1px solid var(--outline); }
.bc-nueva .tabulator .tabulator-header .tabulator-col{ background:var(--surface); border-right:0; }
.bc-nueva .tabulator .tabulator-col-title{ font-size:11px; font-weight:600; color:var(--text-3); text-transform:uppercase; letter-spacing:.04em; }
.bc-nueva .tabulator-row{ background:var(--surface); border-bottom:1px solid var(--outline); }
.bc-nueva .tabulator-row.tabulator-group{ cursor:pointer; }
.bc-nueva .tabulator-row.tabulator-row-even{ background:var(--surface); }
.bc-nueva .tabulator-row:hover{ background:var(--surface-2)!important; }
.bc-nueva .tabulator-row.done{ opacity:.55; }
.bc-nueva .tabulator-row .tabulator-cell{ padding:7px 9px; border-right:0; overflow:hidden; text-overflow:ellipsis; }
.bc-nueva .tabulator .tabulator-row.tabulator-group{ background:var(--surface-2); border-top:1px solid var(--outline); padding:9px 10px; font-weight:700; }
.bc-nueva .tabulator-row.tabulator-group .bc-gr{ color:var(--text-2); font-weight:500; margin-left:8px; font-size:13px; }
.bc-nueva .tabulator-footer{ background:var(--surface)!important; border-top:2px solid var(--outline); font-weight:700; }
.bc-nueva .tabulator-footer .tabulator-calcs-holder, .bc-nueva .tabulator-calcs{ background:var(--surface)!important; }
.bc-nueva .neg{ color:var(--red); } .bc-mu{ color:var(--text-3); }
.bc-nueva mark{ background:#fef08a; padding:0 1px; border-radius:3px; }
.bc-reg{ border:1px solid var(--outline-2); background:var(--surface); border-radius:999px; width:28px; height:24px; cursor:pointer; font-size:13px; line-height:1; }
.bc-reg:hover{ border-color:var(--primary); color:var(--primary); }
.bc-nueva .tabulator-row .tabulator-cell.bc-ico{ padding:4px 2px; overflow:visible; text-overflow:clip; }
.bc-cmt{ border:0; background:transparent; cursor:pointer; font-size:14px; line-height:1; padding:2px 4px; border-radius:6px; filter:grayscale(1); opacity:.28; }
.bc-cmt.on{ filter:none; opacity:1; }
.bc-cmt:hover{ opacity:1; background:var(--surface-2); }
.bc-cmt-pop{ position:fixed; z-index:200; width:300px; max-width:calc(100vw - 16px); background:var(--surface); border:1px solid var(--outline); border-radius:12px; box-shadow:var(--shadow-2); padding:10px 12px; }
.bc-cmt-tit{ font-size:12px; font-weight:650; color:var(--text-2); margin-bottom:6px; }
.bc-cmt-pop textarea{ width:100%; height:70px; box-sizing:border-box; resize:vertical; }
.bc-cmt-acc{ margin-top:8px; display:flex; gap:8px; justify-content:flex-end; }
.bc-seg{ display:inline-flex; background:var(--surface-2); border-radius:999px; padding:3px; }
.bc-seg button{ border:0; background:transparent; border-radius:999px; padding:5px 12px; font-size:12.5px; cursor:pointer; color:var(--text-2); }
.bc-seg button.on{ background:var(--surface); color:var(--primary); font-weight:650; box-shadow:var(--shadow-1); }
.bc-colsel{ position:relative; }
.bc-cols-panel{ display:none; position:absolute; right:0; top:calc(100% + 4px); z-index:60; background:var(--surface); border:1px solid var(--outline); border-radius:12px; box-shadow:var(--shadow-2); padding:8px 12px; min-width:240px; font-size:13px; }
.bc-cols-panel.on{ display:block; }
.bc-cols-panel label{ display:flex; gap:8px; align-items:center; padding:4px 0; cursor:pointer; white-space:nowrap; }
.bc-cols-tit{ font-size:11.5px; color:var(--text-2); margin-bottom:4px; }
.bc-kpis.kpi-angostos{ grid-template-columns:repeat(auto-fill,minmax(150px,210px))!important; }
.toolbar.tb-1linea{ flex-wrap:nowrap; gap:6px; }
.toolbar.tb-1linea > input[type=text]{ flex:1 1 140px; min-width:140px; width:auto; }
.toolbar.tb-1linea > *{ flex-shrink:0; }
.toolbar.tb-1linea > input[type=text]{ flex-shrink:1; }
.bc-sync.sb-mal{ color:var(--red); background:var(--primary-tint); }
.toolbar.tb-1linea .msel-btn{ padding-left:10px; padding-right:10px; white-space:nowrap; }
.corte-mini{ display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--text-2); white-space:nowrap; }
.corte-mini input[type=date]{ height:32px; padding:0 8px; font:inherit; font-size:13px; border-radius:8px; border:1px solid var(--outline-2); background:var(--surface); color:var(--text); width:auto; }
.corte-mini button{ height:32px; padding:0 12px!important; font-size:13px; }
.corte-mini.pasado input[type=date]{ border-color:#f59e0b; background:#fffbeb; color:#92400e; font-weight:600; }
.seg.seg-mini .seg-btn{ font-size:12.5px; padding:5px 12px; }
.rcx-drop{ display:flex; flex-direction:column; align-items:center; gap:4px; padding:30px 16px; border:2px dashed var(--outline-2); border-radius:var(--r-lg); cursor:pointer; text-align:center; font-size:14px; }
.rcx-drop:hover, .rcx-drop.on{ border-color:var(--primary); background:var(--primary-tint); }
.rcx-aviso{ margin:10px 0; padding:9px 12px; border-radius:var(--r-sm); font-size:13px; line-height:1.5; }
.rcx-aviso.err{ background:#fef3c7; color:#92400e; }
.rcx-resumen{ display:flex; align-items:center; gap:14px; padding:12px 14px; background:var(--surface-2); border-radius:var(--r-sm); margin-bottom:14px; }
.rcx-av{ width:38px; height:38px; border-radius:50%; background:#d97706; color:#fff; font-weight:700; display:flex; align-items:center; justify-content:center; flex:0 0 auto; }
.rcx-quien{ flex:1 1 auto; min-width:0; font-size:14px; }
.rcx-quien b{ display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rcx-quien .rcx-chip{ margin-top:3px; }
.rcx-ya{ background:rgba(22,163,74,.10); color:#15803d; padding:10px 14px; border-radius:var(--r-sm); font-size:13.5px; margin:0 0 12px; line-height:1.5; }
.rcx-quien select{ height:32px; padding:0 8px; font-size:13px; max-width:100%; }
.rcx-sub{ font-size:12px; color:var(--text-3); margin-top:2px; }
.rcx-chip{ display:inline-block; font-size:11px; font-weight:600; color:var(--text-2); background:var(--surface-3); border-radius:999px; padding:1px 8px; vertical-align:middle; }
.rcx-num, .rcx-tot{ flex:0 0 auto; font-size:14px; }
.rcx-tot{ text-align:right; padding-left:14px; border-left:1px solid var(--outline); }
.rcx-tot b{ font-size:18px; color:var(--primary); }
.rcx-l{ display:block; font-size:10.5px; font-weight:650; text-transform:uppercase; letter-spacing:.05em; color:var(--text-3); margin-bottom:3px; }
.rcx-campos{ display:grid; grid-template-columns:160px minmax(0,1fr) minmax(0,1fr); gap:10px 12px; margin-bottom:12px; }
.rcx-campos label{ display:block; min-width:0; }
.rcx-campos input, .rcx-campos select{ width:100%; height:34px; padding:0 10px; font-size:13px; box-sizing:border-box; }
.rcx-fac{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; padding:10px 14px; border:1px solid var(--outline); border-radius:var(--r-sm); margin-bottom:10px; font-size:13.5px; }
.rcx-fac .rcx-l{ margin:0 4px 0 0; }
.rcx-fac-sri{ font-weight:600; font-variant-numeric:tabular-nums; }
.rcx-flecha{ color:var(--text-3); }
.rcx-fac select{ flex:1 1 240px; height:34px; padding:0 10px; font-size:13px; }
.rcx-tabbox{ margin-bottom:4px; }
.rcx-tab{ font-size:13px; }
.rcx-tab td{ vertical-align:middle; }
.rcx-tab select{ height:32px; padding:0 8px; font-size:12.5px; max-width:240px; }
.rcx-imp{ display:inline-block; font-size:11.5px; font-weight:650; border-radius:999px; padding:2px 10px; }
.rcx-imp.renta{ background:#e0f2fe; color:#075985; } .rcx-imp.iva{ background:#ede9fe; color:#5b21b6; }
.rcx-cta{ color:var(--text-3); font-size:12px; font-variant-numeric:tabular-nums; }
.rcx-nota{ font-size:12px; color:var(--text-3); margin-right:auto; }
.ccfg-err:empty{ display:none; }
@media (max-width:700px){ .rcx-resumen{ flex-wrap:wrap; } .rcx-tot{ border-left:0; padding-left:0; text-align:left; } .rcx-campos{ grid-template-columns:1fr; } }
.rcx-ok{ background:rgba(22,163,74,.10); color:#15803d; padding:12px 14px; border-radius:var(--r-sm); font-size:14px; }
.corte-mini span{ color:var(--text-3); }
.cobros-tab table{ font-size:13px; }
.cobros-tab td{ white-space:nowrap; }
.cobros-tab .cb-num{ font-variant-numeric:tabular-nums; color:var(--text-2); }
.cobros-tab .cb-cli{ max-width:260px; overflow:hidden; text-overflow:ellipsis; font-weight:550; }
.cobros-tab .cb-tipo{ max-width:190px; overflow:hidden; text-overflow:ellipsis; color:var(--text-2); }
.cobros-tab .cb-cob{ max-width:120px; overflow:hidden; text-overflow:ellipsis; color:var(--text-2); }
.cobros-tab .cb-banco, .cobros-tab .cb-ref{ max-width:180px; overflow:hidden; text-overflow:ellipsis; color:var(--text-2); }
.cobros-tab .cb-ret{ color:#7c3aed; }
.cb-mu{ color:var(--text-3); }
.toolbar.bc-tb{ gap:6px; }
.toolbar.bc-tb #q{ flex:1 1 120px; min-width:120px; width:auto; }
.toolbar.bc-tb .bc-seg button{ padding:5px 10px; }

/* 10-oct-2026: Bancos - origen en JMap de un movimiento "Solo en JMap" */
.bc-org-pop{ width:440px; max-width:calc(100vw - 16px); max-height:70vh; overflow:auto; }
.bc-org-reg + .bc-org-reg{ border-top:1px solid var(--outline); margin-top:10px; padding-top:10px; }
.bc-org-cab{ margin-bottom:6px; font-size:13px; }
.bc-org-fila{ display:grid; grid-template-columns:72px 1fr; gap:6px; font-size:12.5px; padding:2px 0; }
.bc-org-fila > span{ color:var(--text-3); }
.bc-org-lin{ width:100%; border-collapse:collapse; font-size:12px; margin-top:6px; }
.bc-org-lin th{ text-align:left; font-weight:600; color:var(--text-3); font-size:11px; border-bottom:1px solid var(--outline); padding:3px 4px; }
.bc-org-lin td{ padding:3px 4px; border-bottom:1px solid var(--outline); vertical-align:top; }
.bc-org-lin .num{ text-align:right; white-space:nowrap; }
.bc-org-cta{ font-variant-numeric:tabular-nums; white-space:nowrap; color:var(--text-2); }
.bc-org-err{ color:var(--danger,#dc2626); font-size:12.5px; margin-top:4px; }

/* 12-oct-2026: Usuarios - matriz de permisos (empresas x opciones) */
.umat-acc{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-bottom:8px; }
.umat-acc .ghost{ font-size:12.5px; padding:6px 12px; }
.umat-ayuda{ font-size:11.5px; color:var(--text-2); }
.umat-scroll{ overflow:auto; max-height:60vh; border:1px solid var(--outline-2); border-radius:var(--r-sm); background:var(--field); }
.umat{ border-collapse:separate; border-spacing:0; font-size:12.5px; width:100%; }
.umat th{ position:sticky; top:0; z-index:2; background:var(--surface); padding:6px 4px 4px; border-bottom:1px solid var(--outline-2); text-align:center; vertical-align:bottom; min-width:64px; }
.umat .umat-emp{ font-size:10.5px; font-weight:700; color:var(--text-2); white-space:nowrap; max-width:84px; overflow:hidden; text-overflow:ellipsis; margin:0 auto; }
.umat .umat-n{ font-size:10px; color:var(--text-3); height:12px; }
.umat td{ padding:3px 4px; border-bottom:1px solid var(--outline-2); text-align:center; }
.umat td input{ width:16px; height:16px; accent-color:var(--primary); cursor:pointer; vertical-align:middle; }
.umat .umat-op{ position:sticky; left:0; z-index:1; background:var(--field); text-align:left; min-width:230px; max-width:300px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; padding-left:10px; }
.umat th.umat-op{ z-index:3; background:var(--surface); text-align:left; font-size:11px; color:var(--text-3); text-transform:uppercase; }
.umat .umat-op.sub{ color:var(--text-2); padding-left:22px; }
.umat .umat-na{ color:var(--text-3); }
.umat .umat-grp{ text-align:left; padding-left:12px; }
.umat .umat-grp label{ display:inline-flex; align-items:center; gap:6px; cursor:pointer; }
.umat .umat-grp span{ font-size:11.5px; color:var(--text-2); }
.umat tr.umat-seg td{ background:var(--surface-2,#f1f3f6); font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.03em; color:var(--text-2); text-align:left; padding:7px 10px; }
.umat tr.umat-seg td:last-child{ text-align:center; padding:3px 4px; }
.umat tr.umat-base td{ background:var(--surface); }
.umat tr.umat-base td.umat-op{ background:var(--surface); }
.umat tbody tr:not(.umat-seg):hover td{ background:var(--surface-2,#f1f3f6); }
.umat .umat-fila{ font-size:10.5px; color:var(--text-3); }
.umat-bt{ border:1px solid var(--outline-2); background:var(--surface); color:var(--primary); border-radius:6px; font-size:11px; line-height:1; padding:3px 6px; cursor:pointer; margin-top:3px; }
.umat-bt:hover{ background:var(--primary); color:#fff; }

/* 12-oct-2026: Ventas - Detalle por producto, filtros antes de buscar */
.vd-panel{ background:var(--field); border:1px solid var(--outline-2); border-radius:var(--r-sm); padding:12px 16px; margin-bottom:14px; }
.vd-tit{ font-size:13.5px; font-weight:700; margin-bottom:10px; }
.vd-tit span{ font-weight:400; color:var(--text-2); font-size:12px; }
.vd-fila{ display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
.vd-dim{ position:relative; }
.vd-dd{ font:inherit; font-size:13.5px; padding:8px 12px; border-radius:8px; border:1px solid var(--outline-2); background:var(--surface-3,var(--surface)); color:var(--text); cursor:pointer; white-space:nowrap; }
.vd-dd.on{ border-color:var(--primary); color:var(--primary); }
.vd-pop{ display:none; position:absolute; top:calc(100% + 4px); left:0; z-index:50; width:320px; background:var(--surface); border:1px solid var(--outline-2); border-radius:10px; box-shadow:0 10px 30px rgba(0,0,0,.15); padding:10px; }
.vd-dim.abierto .vd-pop{ display:block; }
.vd-pop input[type=text]{ width:100%; box-sizing:border-box; margin-bottom:6px; }
.vd-pop-acc{ display:flex; gap:14px; font-size:12px; margin-bottom:6px; }
.vd-lista{ max-height:260px; overflow:auto; }
.vd-lista label{ display:flex; gap:8px; align-items:center; font-size:13px; padding:3px 2px; cursor:pointer; }
.vd-lista input{ accent-color:var(--primary); }
.vd-txt{ flex:1 1 240px; min-width:200px; font:inherit; font-size:13.5px; padding:8px 12px; border-radius:8px; border:1px solid var(--outline-2); background:var(--surface-3,var(--surface)); color:var(--text); }
.vd-limpiar{ font-size:12.5px; }
.vd-res{ font-size:12.5px; color:var(--text-2); max-width:520px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
