/* =====================================================================
   OrbiCaja - Estilos base y tokens de diseño
   Tema claro/oscuro. Diseño táctil (objetivo de toque >= 44px).
   ===================================================================== */
:root{
  --orbi-navy:#1A1A6E; --orbi-mid:#3B3BAF; --orbi-accent:#6C63FF; --orbi-accent-bg:#EEEDFE;
  /* Tripletes RGB del acento (para construir rgba() de fondos/blobs/iconos del
     menú que SIGUEN al color elegido). accent2 = tono analógico para dar
     riqueza al degradado y al segundo blob. Default = púrpura. */
  --orbi-accent-rgb:108,99,255; --orbi-accent2:#8B5CF6; --orbi-accent2-rgb:139,92,246;
  --orbi-teal:#0F6E56; --orbi-teal-bg:#D6F0E4; --orbi-amber:#854F0B; --orbi-amber-bg:#FAEEDA;
  --orbi-red:#CE1126; --orbi-red-bg:#FDE8EA; --orbi-gray-bg:#F0F2F5; --orbi-border:#E5E7EB;
  --orbi-text:#1C2B3A; --orbi-muted:#6B7280; --orbi-input-bg:#F3F4F6;
  --orbi-surface:#FFFFFF;
  --orbi-touch:44px;
  --orbi-radius:12px;
  --orbi-font:'Inter','Segoe UI',Arial,sans-serif;

  /* ----- Shell admin (sidebar azul + lienzo claro) -----
     El azul es CONFIGURABLE: cámbialo aquí en un solo lugar si choca con la
     marca navy. La marca (logo/acentos) sigue siendo navy/indigo. */
  --orbi-sidebar:#2B5CE6;            /* azul del menú (arriba del degradado) */
  --orbi-sidebar-2:#1E50C8;          /* azul del menú (abajo del degradado)  */
  --orbi-sidebar-fg:#FFFFFF;         /* texto del menú */
  --orbi-sidebar-muted:rgba(255,255,255,.72);
  --orbi-sidebar-active:rgba(255,255,255,.18);  /* ítem activo (translúcido) */
  --orbi-sidebar-hover:rgba(255,255,255,.10);
  --orbi-sb-w:250px;                 /* ancho expandido */
  --orbi-sb-cw:74px;                 /* ancho colapsado (solo iconos) */
  --orbi-canvas:#F4F6FB;             /* lienzo de contenido (gris muy claro) */
  --orbi-card:#FFFFFF;               /* tarjetas */

  /* Acentos por categoría (codifican significado, no decoran) */
  --orbi-cat-blue:#3B82F6;   --orbi-cat-blue-bg:#EAF2FE;
  --orbi-cat-green:#10B981;  --orbi-cat-green-bg:#E7F8F1;
  --orbi-cat-orange:#F59E0B; --orbi-cat-orange-bg:#FEF3E2;
  --orbi-cat-purple:#8B5CF6; --orbi-cat-purple-bg:#F1ECFE;
  --orbi-cat-red:#EF4444;    --orbi-cat-red-bg:#FDECEC;
  --orbi-cat-cyan:#0891B2;   --orbi-cat-cyan-bg:#E0F5FB;
  --orbi-cat-pink:#EC4899;   --orbi-cat-pink-bg:#FCE7F3;
  --orbi-cat-slate:#475569;  --orbi-cat-slate-bg:#EEF2F7;

  /* Badge de tendencia (verde sobre verde claro) */
  --orbi-trend-bg:#ECFDF5; --orbi-trend-fg:#047857;

  /* Radios y sombra de tarjeta del nuevo diseño */
  --orbi-r-card:16px; --orbi-r-pill:999px;
  --orbi-shadow-card:0 8px 24px rgba(30,50,110,.08);

  /* Panel flotante (galería): radio grande + sombra amplia, difusa y de tono frío */
  --orbi-radius-float:28px;
  --orbi-shadow-float:0 24px 60px rgba(60,40,60,.12);

  /* Sistema de movimiento (reutilizable) */
  --orbi-dur-fast:180ms; --orbi-dur:320ms; --orbi-ease:cubic-bezier(.22,.61,.36,1);
}

[data-theme="dark"]{
  --orbi-gray-bg:#0F1320; --orbi-border:#262B3A; --orbi-text:#E5E7EB; --orbi-muted:#9CA3AF;
  --orbi-input-bg:#1A1F2E; --orbi-surface:#161B2B; --orbi-accent-bg:#23204A;
  /* El sidebar conserva su azul de marca en oscuro; cambia el lienzo y tarjetas */
  --orbi-canvas:#0F1320; --orbi-card:#161B2B;
  --orbi-cat-blue-bg:#15233B;   --orbi-cat-green-bg:#12281F;  --orbi-cat-orange-bg:#2A2113;
  --orbi-cat-purple-bg:#221A38; --orbi-cat-red-bg:#2A1717;
  --orbi-cat-cyan-bg:#0E2A33;   --orbi-cat-pink-bg:#2E1726;   --orbi-cat-slate-bg:#1E2433;
  --orbi-trend-bg:#10261C; --orbi-trend-fg:#34D399;
  --orbi-shadow-card:0 8px 24px rgba(0,0,0,.40);
  --orbi-shadow-float:0 28px 64px rgba(0,0,0,.55);
}

*{ box-sizing:border-box; }

html,body{ height:100%; }

body{
  font-family:var(--orbi-font);
  font-size:14px;                 /* base legible >= 13px */
  color:var(--orbi-text);
  background:var(--orbi-gray-bg);
  margin:0;
}

a{ color:var(--orbi-accent); text-decoration:none; }
a:hover{ text-decoration:underline; }

/* ---------- Botones táctiles ---------- */
.btn{
  min-height:var(--orbi-touch);
  border-radius:var(--orbi-radius);
  font-weight:600;
  font-size:15px;
}
.btn-orbi{
  background:var(--orbi-accent); border-color:var(--orbi-accent); color:#fff;
}
.btn-orbi:hover,.btn-orbi:focus{ background:var(--orbi-mid); border-color:var(--orbi-mid); color:#fff; }
.btn-orbi-outline{
  background:transparent; border:1px solid var(--orbi-accent); color:var(--orbi-accent);
}

/* ---------- Inputs táctiles ---------- */
.form-control,.form-select{
  min-height:var(--orbi-touch);
  background:var(--orbi-input-bg);
  border:1px solid var(--orbi-border);
  color:var(--orbi-text);
  border-radius:10px;
  font-size:15px;
}
.form-control:focus{
  border-color:var(--orbi-accent);
  box-shadow:0 0 0 .2rem var(--orbi-accent-bg);
  background:var(--orbi-surface);
  /* Bootstrap fija color:var(--bs-body-color) (#212529) en :focus y gana a
     .form-control{color} por especificidad: en dark lo tecleado salía oscuro
     sobre fondo oscuro. Se fuerza el color del tema. */
  color:var(--orbi-text);
}
.form-select:focus{ color:var(--orbi-text); }
/* PIN de autorización: grande y legible (la regla general de .form-control,
   más abajo, lo bajaba a 14px). */
#modal-pin .orbi-pin-input{ font-size:24px; letter-spacing:8px; font-weight:600; }
.form-control::placeholder{ color:var(--orbi-muted); opacity:.8; }
/* Deshabilitados/solo lectura: Bootstrap usa --bs-secondary-bg (gris CLARO);
   en dark quedaba fondo claro con texto claro. */
[data-theme="dark"] .form-control:disabled, [data-theme="dark"] .form-select:disabled,
[data-theme="dark"] .fld input:disabled, [data-theme="dark"] .fld select:disabled{
  background-color:rgba(255,255,255,.04); color:#AEB6C4; -webkit-text-fill-color:#AEB6C4;
}

/* ---------- Tarjetas / superficies ---------- */
.orbi-card{
  background:var(--orbi-surface);
  border:1px solid var(--orbi-border);
  border-radius:var(--orbi-radius);
  box-shadow:0 6px 24px rgba(26,26,110,.08);
}

/* Números de precio grandes */
.orbi-precio{ font-size:28px; font-weight:700; color:var(--orbi-navy); }

/* ---------- Login ----------
   Fondo claro: gradiente blanco-azul con blobs difuminados (blur) y tarjeta
   tipo "glass". Se fuerzan tokens claros dentro del login para que luzca
   consistente aunque el tema guardado sea oscuro (el login es previo a la sesión). */
.orbi-login-wrap{
  --orbi-surface:#FFFFFF; --orbi-input-bg:#F4F7FE; --orbi-text:#1C2B3A;
  --orbi-border:#E2E8F5; --orbi-muted:#6B7280;
  position:relative; overflow:hidden;
  min-height:100vh; display:flex; align-items:center; justify-content:center;
  padding:20px;
  background:
    radial-gradient(1100px 620px at 12% 8%, #FFFFFF 0%, rgba(255,255,255,0) 55%),
    linear-gradient(135deg, #EAF1FF 0%, #F6F9FF 46%, #DCE8FF 100%);
}
/* Blobs azules difuminados (decorativos) */
.orbi-login-wrap::before,
.orbi-login-wrap::after{
  content:""; position:absolute; border-radius:50%; filter:blur(72px);
  z-index:0; pointer-events:none;
}
.orbi-login-wrap::before{
  width:420px; height:420px; top:-130px; right:-90px;
  background:radial-gradient(circle, rgba(43,92,230,.45), rgba(43,92,230,0) 70%);
}
.orbi-login-wrap::after{
  width:500px; height:500px; bottom:-170px; left:-130px;
  background:radial-gradient(circle, rgba(108,99,255,.28), rgba(108,99,255,0) 70%);
}
.orbi-login-card{
  position:relative; z-index:1;
  width:100%; max-width:420px; padding:36px 32px;
  background:rgba(255,255,255,.72);
  color:var(--orbi-text);
  -webkit-backdrop-filter:blur(18px) saturate(140%);
  backdrop-filter:blur(18px) saturate(140%);
  border:1px solid rgba(255,255,255,.75);
  border-radius:22px;
  box-shadow:0 24px 60px rgba(30,50,110,.16);
}
.orbi-login-card .logo{ text-align:center; margin-bottom:8px; }
.orbi-login-card .logo-img{ width:110px; height:110px; object-fit:contain; display:block; margin:0 auto 10px; filter:drop-shadow(0 8px 18px rgba(43,92,230,.25)); }
.orbi-login-card .logo .marca{ font-size:30px; font-weight:800; color:var(--orbi-navy); letter-spacing:-.5px; }
.orbi-login-card .logo .marca span{ color:var(--orbi-accent); }
.orbi-login-card h5{ text-align:center; font-weight:700; margin-top:6px; }
.orbi-login-card .text-muted{ color:var(--orbi-muted) !important; }
.orbi-login-card .form-label{ color:var(--orbi-text); }
.orbi-login-card .input-group-text{ background:var(--orbi-input-bg); border:1px solid var(--orbi-border); color:var(--orbi-muted); }

/* ----- Login en tema OSCURO ----- */
[data-theme="dark"] .orbi-login-wrap{
  --orbi-surface:#161B2B; --orbi-input-bg:#1A1F2E; --orbi-text:#E5E7EB;
  --orbi-border:#2A3346; --orbi-muted:#9CA3AF;
  background:
    radial-gradient(1100px 620px at 12% 8%, #1B2440 0%, rgba(15,19,32,0) 55%),
    linear-gradient(135deg, #0E1424 0%, #131B31 46%, #0B1222 100%);
}
[data-theme="dark"] .orbi-login-wrap::before{ background:radial-gradient(circle, rgba(43,92,230,.40), rgba(43,92,230,0) 70%); }
[data-theme="dark"] .orbi-login-wrap::after{ background:radial-gradient(circle, rgba(108,99,255,.32), rgba(108,99,255,0) 70%); }
[data-theme="dark"] .orbi-login-card{
  background:rgba(22,27,43,.74);
  border:1px solid rgba(255,255,255,.10);
  box-shadow:0 24px 60px rgba(0,0,0,.55);
}
[data-theme="dark"] .orbi-login-card .logo .marca{ color:#EDF1FF; }

/* Animación de aparición (sin depender de hover) */
.animate-fade{ animation:orbiFade .25s ease-in; }
@keyframes orbiFade{ from{opacity:0; transform:translateY(-4px);} to{opacity:1; transform:none;} }

/* Toggle de tema */
.orbi-theme-toggle{
  position:fixed; top:14px; right:14px; z-index:10;
  width:var(--orbi-touch); height:var(--orbi-touch);
  border-radius:50%; border:1px solid var(--orbi-border);
  background:var(--orbi-surface); color:var(--orbi-text);
  font-size:18px; cursor:pointer;
}

/* =====================================================================
   MENÚ PRINCIPAL (home.php) — 8 módulos
   ===================================================================== */
.orbi-home{ min-height:100vh; padding:24px; }
.orbi-home-head{
  display:flex; align-items:center; justify-content:space-between;
  flex-wrap:wrap; gap:12px; margin-bottom:24px;
}
.orbi-home-head .marca{ font-size:26px; font-weight:800; color:var(--orbi-navy); }
.orbi-home-head .marca span{ color:var(--orbi-accent); }
/* Rejilla uniforme de módulos (homologada a la maqueta home.html) */
.orbi-home-grid{
  display:grid; gap:14px; max-width:1120px; margin:0 auto;
  grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
}
.modulo-card{
  position:relative; display:flex; flex-direction:column; gap:8px;
  min-height:150px; padding:18px; text-align:left;
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:var(--orbi-r-lg, 16px); box-shadow:0 6px 24px rgba(26,26,110,.08);
  color:var(--orbi-text); cursor:pointer; overflow:hidden;
  transition:transform .2s ease, box-shadow .2s ease, border-color .2s ease;
  animation:orbiFadeInUp .4s ease both;
}
.modulo-card .ico{
  width:52px; height:52px; display:flex; align-items:center; justify-content:center;
  border-radius:16px; font-size:26px; background:var(--orbi-accent-bg); color:var(--orbi-accent);
}
.modulo-card .nombre{ font-weight:700; font-size:15px; line-height:1.25; }
.modulo-card .desc{ font-size:12px; color:var(--orbi-muted); line-height:1.4; }
.modulo-card .candado{ font-size:12px; color:var(--orbi-muted); margin-top:auto; }

/* Ícono de candado (esquina) en módulos no disponibles */
.modulo-card .mod-lock{ position:absolute; top:14px; right:14px; font-size:13px; color:var(--orbi-muted); }
/* Badge de estado del módulo */
.modulo-card .mod-badge{
  margin-top:auto; align-self:flex-start; white-space:nowrap;
  display:inline-flex; align-items:center; gap:4px;
  font-size:10.5px; font-weight:600; padding:3px 10px; border-radius:var(--orbi-r-pill,999px);
}
.modulo-card .mod-badge.badge-activo { background:var(--orbi-teal-bg);  color:var(--orbi-teal); }
.modulo-card .mod-badge.badge-proximo{ background:var(--orbi-amber-bg); color:var(--orbi-amber); }
.modulo-card .mod-badge.badge-dev    { background:var(--orbi-input-bg); color:var(--orbi-muted); }
.modulo-card .mod-badge.badge-v2     { background:var(--orbi-accent-bg); color:var(--orbi-mid); }
.modulo-card.activo:hover,.modulo-card.activo:focus{
  transform:translateY(-4px); box-shadow:0 16px 38px rgba(26,26,110,.18); border-color:var(--orbi-accent);
}

/* ═══════════════════════════════════════════════════════════════════════
   OFFLINE (Fase B/C) — UI que SOLO aparece cuando no hay conexión.
   Todo va gateado por html[data-conexion="offline"] (lo pone orbi-offline.js),
   por lo que el modo online no se altera en nada.
   ═══════════════════════════════════════════════════════════════════════ */

/* Indicador global: píldora fija arriba-centro. Visible en toda la app. */
#orbi-offline-bar{
  display:none; position:fixed; top:10px; left:50%; transform:translateX(-50%);
  z-index:3000; align-items:center; gap:8px;
  background:#b45309; color:#fff; font-size:12.5px; font-weight:700; letter-spacing:.2px;
  padding:7px 16px; border-radius:999px; box-shadow:0 6px 20px rgba(0,0,0,.28);
  animation:orbiSlideDown .35s ease both;
}
#orbi-offline-bar .dot{ width:8px; height:8px; border-radius:50%; background:#fff; animation:orbiOffPulse 1.4s ease-in-out infinite; }
#orbi-offline-bar .pend{ background:rgba(255,255,255,.25); border-radius:999px; padding:1px 8px; font-size:11px; }
html[data-conexion="offline"] #orbi-offline-bar{ display:inline-flex; }
@keyframes orbiOffPulse{ 0%,100%{opacity:1} 50%{opacity:.25} }

/* Widget de estado del modo offline en el home (visible SIEMPRE, no solo offline). */
.hp-offline{ padding:16px 18px; }
.hp-off-head{ display:flex; align-items:center; gap:12px; }
.hp-off-ic{
  width:42px; height:42px; flex:0 0 42px; border-radius:12px;
  display:flex; align-items:center; justify-content:center; font-size:20px;
  background:var(--orbi-gray-bg); color:var(--orbi-muted);
}
.hp-offline.listo .hp-off-ic{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.hp-offline.pend  .hp-off-ic{ background:rgba(180,83,9,.14); color:#b45309; }
.hp-off-title{ font-weight:700; font-size:15px; }
.hp-off-sub{ font-size:12.5px; color:var(--orbi-muted); margin-top:1px; }
.hp-off-grid{
  display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:14px;
}
.hp-off-kpi{
  background:var(--orbi-gray-bg); border-radius:12px; padding:10px 8px; text-align:center;
}
.hp-off-kpi span{ display:block; font-size:20px; font-weight:800; color:var(--orbi-text); }
.hp-off-kpi small{ font-size:11px; color:var(--orbi-muted); }
@media (max-width:600px){ .hp-off-grid{ grid-template-columns:repeat(2,1fr); } }

/* Badges de disponibilidad en el menú de módulos (solo offline). */
html[data-conexion="offline"] .modulo-card[data-offline="ok"]::after{
  content:"Offline"; position:absolute; top:10px; right:10px; z-index:2;
  background:var(--orbi-teal-bg); color:var(--orbi-teal);
  font-size:10px; font-weight:700; letter-spacing:.4px; text-transform:uppercase;
  padding:3px 9px; border-radius:999px;
}
/* No disponible: recuadro atenuado + no clicable + cinta diagonal en la esquina. */
html[data-conexion="offline"] .modulo-card[data-offline="no"]{
  opacity:.45; pointer-events:none; filter:grayscale(.55);
}
html[data-conexion="offline"] .modulo-card[data-offline="no"]::after{
  content:"No disponible"; position:absolute; top:16px; right:-46px; z-index:2;
  width:170px; text-align:center; transform:rotate(45deg);
  background:var(--orbi-red, #b91c1c); color:#fff;
  font-size:10px; font-weight:700; letter-spacing:.3px; padding:4px 0;
  box-shadow:0 2px 6px rgba(0,0,0,.25);
}
.modulo-card.bloqueado{ opacity:.6; cursor:not-allowed; animation-name:orbiFadeInUpDim; }
.modulo-card.bloqueado .ico{ background:var(--orbi-gray-bg); color:var(--orbi-muted); }

/* Tamaños del mosaico */
.modulo-card.size-lg{ grid-column:span 2; grid-row:span 2; }
.modulo-card.size-wide{ grid-column:span 2; }
.modulo-card.size-lg .ico{ width:74px; height:74px; font-size:40px; border-radius:20px; }
.modulo-card.size-lg .nombre{ font-size:25px; }
.modulo-card.size-lg .desc, .modulo-card.size-wide .desc{ display:block; }
.modulo-card.size-lg .desc{ font-size:13.5px; max-width:32ch; }

/* Tarjeta destacada (POS): degradado de marca */
.modulo-card.destacada{ background:linear-gradient(135deg,var(--orbi-navy),var(--orbi-accent)); border:none; color:#fff; }
.modulo-card.destacada .ico{ background:rgba(255,255,255,.18); color:#fff; }
.modulo-card.destacada .desc{ color:rgba(255,255,255,.88); }
.modulo-card.destacada:hover{ box-shadow:0 18px 44px rgba(26,26,110,.34); }

/* Entrada escalonada */
.modulo-card:nth-child(1){ animation-delay:.03s; } .modulo-card:nth-child(2){ animation-delay:.07s; }
.modulo-card:nth-child(3){ animation-delay:.11s; } .modulo-card:nth-child(4){ animation-delay:.15s; }
.modulo-card:nth-child(5){ animation-delay:.19s; } .modulo-card:nth-child(6){ animation-delay:.23s; }
.modulo-card:nth-child(7){ animation-delay:.27s; } .modulo-card:nth-child(8){ animation-delay:.31s; }

@media(max-width:900px){
  .orbi-home-grid{ grid-template-columns:repeat(2,1fr); }
  .modulo-card.size-lg, .modulo-card.size-wide{ grid-column:span 2; }
  .modulo-card.size-lg{ grid-row:span 2; }
}
@media(max-width:560px){
  .orbi-home-grid{ grid-template-columns:1fr; grid-auto-rows:auto; }
  .modulo-card, .modulo-card.size-lg, .modulo-card.size-wide{ grid-column:auto; grid-row:auto; min-height:118px; }
}

/* ---------- Inicio: bienvenida + resumen del turno ---------- */
.hp-welcome{
  display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  max-width:1120px; margin:0 auto 18px;
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:var(--orbi-r-card,16px); box-shadow:var(--orbi-shadow-card);
  padding:16px 20px;
}
.hp-welcome-info{ flex:1; min-width:0; }
.hp-welcome-title{ font-size:16px; font-weight:700; color:var(--orbi-text); }
.hp-welcome-sub{ font-size:12.5px; color:var(--orbi-muted); margin-top:3px; }
.hp-chip{
  display:inline-flex; align-items:center; gap:6px; white-space:nowrap;
  font-size:12px; font-weight:600; padding:6px 14px; border-radius:var(--orbi-r-pill,999px);
}
.hp-chip.ok{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.hp-chip.muted{ background:var(--orbi-input-bg); color:var(--orbi-muted); border:1px solid var(--orbi-border); }
a.hp-chip.muted:hover{ border-color:var(--orbi-accent); color:var(--orbi-accent); }
.hp-seclabel{
  max-width:1120px; margin:32px auto 14px; padding-left:2px;
  font-size:11px; font-weight:700; color:var(--orbi-muted);
  text-transform:uppercase; letter-spacing:.6px;
}
.hp-stats{
  display:grid; grid-template-columns:repeat(4,1fr); gap:14px;
  max-width:1120px; margin:0 auto 22px;
}
.hp-stats .kpi-card{ animation:orbiFadeInUp .4s ease both; }
a.hp-kpi-link{
  text-decoration:none; color:inherit;
  transition:transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}
a.hp-kpi-link:hover{ transform:translateY(-3px); box-shadow:0 16px 38px rgba(26,26,110,.16); border-color:var(--orbi-accent); }
@media(max-width:900px){ .hp-stats{ grid-template-columns:1fr 1fr; } }
@media(max-width:560px){ .hp-stats{ grid-template-columns:1fr; } }

/* =====================================================================
   POS — layout general
   ===================================================================== */
.orbi-pos{ height:100vh; overflow:hidden; }
.orbi-pos-wrap{
  height:100vh; display:flex; flex-direction:column;
  padding:10px; gap:10px;
}

/* ---------- Banda de teclas de función F1–F10 ---------- */
.orbi-fkeys{
  display:grid; gap:8px;
  grid-template-columns:repeat(11,1fr);   /* F1..F10 + COBRAR */
}
.fkey{
  min-height:var(--orbi-touch); padding:8px 6px;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:10px; color:var(--orbi-text);
  cursor:pointer; font-size:12px; line-height:1.1; text-align:center;
}
.fkey .tecla{
  font-weight:700; font-size:11px; color:#fff;
  background:var(--orbi-mid); border-radius:6px; padding:1px 6px;
}
.fkey .et{ font-weight:600; }
.fkey:active{ transform:translateY(1px); }
.fkey.fkey-cobrar{
  grid-column:span 2; background:var(--orbi-teal); border-color:var(--orbi-teal); color:#fff;
}
.fkey.fkey-cobrar .tecla{ background:rgba(255,255,255,.25); }
.fkey.disabled{ opacity:.5; pointer-events:none; }
@media(max-width:992px){
  .orbi-fkeys{ grid-template-columns:repeat(6,1fr); }
  .fkey.fkey-cobrar{ grid-column:span 6; }
}

/* ---------- Header de información del POS ---------- */
.orbi-pos-info{
  display:flex; flex-wrap:wrap; gap:14px; align-items:center;
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:10px; padding:10px 14px;
}
.orbi-pos-info .dato{ display:flex; flex-direction:column; }
.orbi-pos-info .dato .lbl{ font-size:11px; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.4px; }
.orbi-pos-info .dato .val{ font-weight:700; font-size:15px; }
.orbi-pos-info .folio .val{ color:var(--orbi-accent); }
.orbi-pos-info .sep{ flex:1; }

/* ---------- Búsqueda ---------- */
.orbi-search .input-group-text{ background:var(--orbi-accent); color:#fff; border:none; }
#search-input{ font-size:18px; min-height:52px; }

/* ---------- Ticket ---------- */
.orbi-ticket-box{
  flex:1; overflow:auto; background:var(--orbi-surface);
  border:1px solid var(--orbi-border); border-radius:10px;
}
.orbi-ticket{ width:100%; border-collapse:collapse; }
.orbi-ticket thead th{
  position:sticky; top:0; background:var(--orbi-accent-bg); color:var(--orbi-navy);
  font-size:12px; text-transform:uppercase; letter-spacing:.4px;
  padding:10px; text-align:left;
}
.orbi-ticket tbody td{ padding:12px 10px; border-bottom:1px solid var(--orbi-border); font-size:15px; }
.orbi-ticket tbody tr{ min-height:48px; }
.orbi-ticket .col-num{ text-align:right; font-variant-numeric:tabular-nums; }
.orbi-ticket .col-acc{ text-align:center; width:56px; }
.orbi-ticket .vacio{ text-align:center; color:var(--orbi-muted); padding:40px 10px; }

/* ---------- Totales ---------- */
.orbi-totales{
  display:flex; align-items:center; gap:18px; flex-wrap:wrap;
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:10px; padding:12px 16px;
}
.orbi-totales .parcial{ display:flex; flex-direction:column; }
.orbi-totales .parcial .lbl{ font-size:12px; color:var(--orbi-muted); }
.orbi-totales .parcial .val{ font-size:18px; font-weight:600; font-variant-numeric:tabular-nums; }
.orbi-totales .total{ margin-left:auto; text-align:right; }
.orbi-totales .total .lbl{ font-size:13px; color:var(--orbi-muted); }
.orbi-totales .total .val{ font-size:40px; font-weight:800; color:var(--orbi-navy); font-variant-numeric:tabular-nums; }
#btn-cobrar{
  min-height:64px; min-width:200px; font-size:22px; font-weight:800;
  background:var(--orbi-teal); border-color:var(--orbi-teal); color:#fff;
}
#btn-cobrar:hover,#btn-cobrar:focus{ filter:brightness(1.08); }
#btn-cobrar:disabled{ opacity:.5; }

/* =====================================================================
   POS-02 — Ficha de artículo (tabs)
   ===================================================================== */
.orbi-ficha{ max-width:820px; margin:0 auto; width:100%; }
.orbi-ficha .nav-tabs{ border-bottom:2px solid var(--orbi-border); }
.orbi-ficha .nav-tabs .nav-link{
  min-height:var(--orbi-touch); color:var(--orbi-muted); font-weight:600; border:none;
}
.orbi-ficha .nav-tabs .nav-link.active{
  color:var(--orbi-accent); border-bottom:3px solid var(--orbi-accent); background:transparent;
}
.orbi-ficha .tab-content{ padding:18px 4px; }
.orbi-ficha .precio-grande{ font-size:34px; font-weight:800; color:var(--orbi-navy); }

/* =====================================================================
   POS-03 — Cobro (métodos + numpad)
   ===================================================================== */
.orbi-metodos{ display:grid; gap:12px; grid-template-columns:repeat(3,1fr); }
@media(max-width:576px){ .orbi-metodos{ grid-template-columns:repeat(2,1fr); } }
.metodo-pago{
  min-height:84px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px;
  background:var(--orbi-surface); border:2px solid var(--orbi-border); border-radius:14px;
  color:var(--orbi-text); cursor:pointer; font-weight:600; font-size:15px;
}
.metodo-pago i{ font-size:26px; color:var(--orbi-accent); }
.metodo-pago.activo{ border-color:var(--orbi-accent); background:var(--orbi-accent-bg); }
.numpad{ display:grid; gap:10px; grid-template-columns:repeat(3,1fr); }
.numpad .tecla-num{
  min-height:60px; font-size:24px; font-weight:700; border-radius:12px;
  background:var(--orbi-input-bg); border:1px solid var(--orbi-border); color:var(--orbi-text);
}
.numpad .tecla-num:active{ background:var(--orbi-accent-bg); }
.orbi-monto-display{
  font-size:42px; font-weight:800; text-align:right; font-variant-numeric:tabular-nums;
  background:var(--orbi-input-bg); border:1px solid var(--orbi-border);
  border-radius:12px; padding:8px 16px; color:var(--orbi-navy);
}

/* =====================================================================
   POS-04 — Apertura / Turno / Cierre (asistente de 3 pasos, maqueta)
   ===================================================================== */
/* El asistente llena el panel glass del shell sin pintar su propio fondo:
   topbar/step-bar/footer transparentes con línea sutil = mismo lenguaje que
   el resto de las páginas. El acento gobierna pasos/chips/realces. */
.caja04{ display:flex; flex-direction:column; flex:1 1 auto; height:100%; min-height:0; background:transparent; overflow:hidden; }

/* Cabecera del asistente, integrada al panel (como la topbar del resto) */
.caja-topbar{ display:flex; align-items:center; gap:12px; background:transparent; border-bottom:1px solid rgba(255,255,255,.55); padding:16px 24px; flex-shrink:0; }
.caja-topbar .ct-back{ width:34px; height:34px; flex-shrink:0; display:flex; align-items:center; justify-content:center; border-radius:10px; border:1px solid var(--orbi-border); background:var(--orbi-surface); color:var(--orbi-muted); font-size:17px; text-decoration:none; transition:all var(--orbi-dur-fast) var(--orbi-ease); }
.caja-topbar .ct-back:hover{ border-color:var(--orbi-accent); color:var(--orbi-accent); }
.caja-topbar .ct-title{ font-size:18px; font-weight:700; color:var(--orbi-text); flex:1; line-height:1.2; }
.caja-topbar .ct-chip{ font-size:12.5px; color:var(--orbi-muted); display:flex; align-items:center; gap:6px; background:rgba(var(--orbi-accent-rgb),.08); border:1px solid rgba(var(--orbi-accent-rgb),.14); padding:5px 12px; border-radius:var(--orbi-r-pill,999px); }
.caja-topbar .ct-chip i{ color:var(--orbi-accent); }

.step-bar{ display:flex; align-items:center; background:transparent; border-bottom:1px solid rgba(255,255,255,.55); padding:16px 24px; flex-shrink:0; }
.step-item{ display:flex; align-items:center; gap:8px; }
.step-circle{ width:32px; height:32px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:700; flex-shrink:0; transition:all var(--orbi-dur-fast) var(--orbi-ease); }
.sc-pending{ background:rgba(255,255,255,.6); color:var(--orbi-muted); border:1px solid var(--orbi-border); }
.sc-active{ background:var(--orbi-accent); color:#fff; box-shadow:0 4px 12px rgba(var(--orbi-accent-rgb),.35); }
.sc-done{ background:rgba(var(--orbi-accent-rgb),.15); color:var(--orbi-accent); border:1px solid rgba(var(--orbi-accent-rgb),.3); }
.step-label{ font-size:13px; white-space:nowrap; }
.sl-pending{ color:var(--orbi-muted); }
.sl-active{ font-weight:600; color:var(--orbi-text); }
.sl-done{ color:var(--orbi-accent); font-weight:600; }
.step-line{ flex:1; height:2px; background:var(--orbi-border); margin:0 14px; min-width:20px; border-radius:2px; transition:background var(--orbi-dur) var(--orbi-ease); }
.step-line.done{ background:var(--orbi-accent); }

.caja-body{ flex:1; min-height:0; overflow:auto; padding:26px 24px; }
.caja-body .screen{ display:none; max-width:760px; margin:0 auto; }
.caja-body .screen.active{ display:block; animation:orbiFadeIn .3s ease both; }
/* Tarjeta sólida que resalta sobre el panel glass (igual que en el resto) */
.caja-card{ background:var(--orbi-card); border:1px solid rgba(255,255,255,.9); border-radius:var(--orbi-r-card,16px); box-shadow:0 10px 28px rgba(30,50,110,.10); padding:24px; }
.caja-card-title{ font-size:17px; font-weight:700; color:var(--orbi-text); }
.caja-card-sub{ font-size:13px; color:var(--orbi-muted); margin-bottom:16px; }
.cc-lbl{ font-size:11px; text-transform:uppercase; letter-spacing:.4px; color:var(--orbi-muted); }

/* Caja del fondo inicial: realce con el acento (ya no gris plano) */
.fondo-box{ background:rgba(var(--orbi-accent-rgb),.06); border:1px solid rgba(var(--orbi-accent-rgb),.16); border-radius:var(--orbi-r-card,16px); padding:16px 18px; margin:14px 0; }
.fondo-label{ font-size:10px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; margin-bottom:8px; }
.fondo-input-row{ display:flex; align-items:center; gap:8px; }
.fondo-pre{ font-size:22px; font-weight:600; color:var(--orbi-accent); }
#input-fondo{ flex:1; border:none; background:none; outline:none; font-size:30px; font-weight:700; color:var(--orbi-text); width:100%; }
.fondo-currency{ font-size:13px; color:var(--orbi-muted); }
#fondo-desglose{ font-size:11px; color:var(--orbi-muted); font-style:italic; margin-top:6px; }

.info-callout{ border-radius:12px; padding:11px 14px; font-size:12px; line-height:1.5; }
.info-callout.info{ background:rgba(var(--orbi-accent-rgb),.08); color:var(--orbi-mid); border:1px solid rgba(var(--orbi-accent-rgb),.16); }
.info-callout.danger{ background:var(--orbi-red-bg); color:#791F1F; }
.info-callout.ok{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
[data-theme="dark"] .info-callout.info{ color:var(--orbi-accent); }

.stats-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:12px; }
.stat-mini{ background:var(--orbi-card); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-card,16px); padding:16px 12px; text-align:center; box-shadow:var(--orbi-shadow-card); }
.stat-mini-n{ font-size:22px; font-weight:700; color:var(--orbi-text); font-variant-numeric:tabular-nums; }
.stat-mini-n.ok{ color:var(--orbi-teal); } .stat-mini-n.acc{ color:var(--orbi-accent); } .stat-mini-n.amb{ color:var(--orbi-amber); }
.stat-mini-l{ font-size:10px; color:var(--orbi-muted); margin-top:4px; text-transform:uppercase; letter-spacing:.3px; }

.turno-info{ display:flex; align-items:center; gap:10px; background:rgba(var(--orbi-accent-rgb),.06); border:1px solid rgba(var(--orbi-accent-rgb),.14); border-radius:var(--orbi-r-card,16px); padding:13px 16px; margin-top:16px; font-size:13px; color:var(--orbi-muted); }
.turno-info > i{ color:var(--orbi-accent); }
.turno-info .turno-badge{ margin-left:auto; font-size:11px; font-weight:600; background:var(--orbi-teal-bg); color:var(--orbi-teal); padding:3px 12px; border-radius:var(--orbi-r-pill,999px); }

.cierre-table{ width:100%; border-collapse:collapse; }
.cierre-table thead th{ font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.4px; color:var(--orbi-muted); padding:8px 10px; border-bottom:1px solid var(--orbi-border); text-align:left; }
.cierre-table th.tc-r, .cierre-table td.tc-r{ text-align:right; }
.cierre-table tbody td{ padding:9px 10px; border-bottom:1px solid var(--orbi-border); font-size:13px; color:var(--orbi-text); }
.cierre-table td.td-num{ font-weight:600; font-variant-numeric:tabular-nums; }
.cierre-table td.td-auto{ color:var(--orbi-muted); }
.cierre-table td.td-ok{ color:var(--orbi-teal); font-weight:600; }
.cierre-table td.td-bad{ color:var(--orbi-red); font-weight:600; }
.cierre-table tr.tr-total td{ font-weight:700; background:rgba(var(--orbi-accent-rgb),.07); }
.cierre-table td input{ width:120px; text-align:right; border:1px solid var(--orbi-border); border-radius:8px; padding:6px 9px; font-size:13px; font-weight:600; background:var(--orbi-surface); color:var(--orbi-text); outline:none; transition:border-color var(--orbi-dur-fast) var(--orbi-ease), box-shadow var(--orbi-dur-fast) var(--orbi-ease); }
.cierre-table td input:focus{ border-color:var(--orbi-accent); box-shadow:0 0 0 3px rgba(var(--orbi-accent-rgb),.15); }
.cierre-nota{ font-size:11px; color:var(--orbi-muted); font-style:italic; margin-top:8px; }

.caja-footer{ display:flex; align-items:center; justify-content:flex-end; gap:10px; background:transparent; border-top:1px solid rgba(255,255,255,.55); padding:14px 24px; flex-shrink:0; }
.btn-back-step{ background:transparent; border:1px solid var(--orbi-border); border-radius:10px; padding:10px 18px; font-size:13px; font-weight:600; color:var(--orbi-muted); cursor:pointer; display:flex; align-items:center; gap:6px; transition:all var(--orbi-dur-fast) var(--orbi-ease); }
.btn-back-step:hover{ border-color:var(--orbi-accent); color:var(--orbi-accent); }
.btn-next-step{ border:none; border-radius:10px; padding:10px 24px; font-size:14px; font-weight:600; color:#fff; cursor:pointer; display:flex; align-items:center; gap:7px; transition:all var(--orbi-dur-fast) var(--orbi-ease); }
.btn-next-step.green{ background:var(--orbi-teal); } .btn-next-step.green:hover{ background:#0c5d49; box-shadow:0 6px 16px rgba(15,110,86,.3); }
.btn-next-step.red{ background:var(--orbi-red); } .btn-next-step.red:hover{ opacity:.92; box-shadow:0 6px 16px rgba(206,17,38,.3); }
.btn-next-step:disabled{ opacity:.5; cursor:not-allowed; box-shadow:none; }

/* En oscuro, las líneas glass del asistente bajan su opacidad (igual que el resto) */
[data-theme="dark"] .caja-topbar,
[data-theme="dark"] .step-bar,
[data-theme="dark"] .caja-footer{ border-color:rgba(255,255,255,.08); }
[data-theme="dark"] .caja-card{ border-color:rgba(255,255,255,.08); }
[data-theme="dark"] .sc-pending{ background:rgba(255,255,255,.06); }

@media(max-width:560px){ .stats-grid{ grid-template-columns:1fr 1fr; } .caja-topbar,.step-bar,.caja-footer,.caja-body{ padding-left:16px; padding-right:16px; } }

/* PIN grande (modal de autorización) */
.orbi-pin-input{ font-size:30px; text-align:center; letter-spacing:8px; min-height:60px; }

/* Los modales de marca recortan su contenido para que el header con fondo de
   color respete el redondeo de las esquinas superiores. */
.modal-content.orbi-card{ overflow:hidden; }

/* Encabezado del modal de autorización (contraseña de administrador) */
#modal-pin .cobro-header{ align-items:center; padding:16px 18px; }
#modal-pin .pin-head{ display:flex; align-items:center; gap:12px; }
#modal-pin .pin-head-ic{ width:40px; height:40px; flex-shrink:0; border-radius:11px;
  display:flex; align-items:center; justify-content:center; font-size:20px; color:#fff;
  background:rgba(255,255,255,.16); }
#modal-pin .pin-head .modal-title{ font-size:15px; color:#fff; line-height:1.2; }
#modal-pin .pin-head small{ color:rgba(255,255,255,.72); font-size:11.5px; }
#modal-pin .pin-motivo{ font-size:12.5px; color:var(--orbi-muted); text-align:center; margin-bottom:12px; }

/* El asistente de caja llena el panel glass a ras (sin el padding del wrap POS) */
body[data-pantalla="pos04"] .orbi-pos-wrap{ padding:0; gap:0; }

/* =====================================================================
   POS-01 — Shell moderno (rail + búsqueda + carrito a la derecha)
   Look limpio/fresco; usa los tokens para soportar tema oscuro.
   ===================================================================== */
body[data-pantalla="pos01"] .orbi-pos-wrap{ padding:0; gap:0; overflow:hidden; min-height:0; }

/* POS-01 homologado a la maqueta: banda F arriba · header · cuerpo1(ticket) +
   cuerpo2(detalle) · footer. Reutiliza los tokens del tema (claro/oscuro). */
.pos01{ display:flex; flex-direction:column; flex:1 1 auto; height:100%; min-height:0; background:var(--orbi-gray-bg); overflow:hidden; padding:14px 16px; }
/* Contenido del POS dentro de una tarjeta blanca con borde redondeado y margen,
   homologado al estilo de los listados (.inv-plana). */
.pos01 .pos-card{ display:flex; flex-direction:column; flex:1 1 auto; min-height:0;
  background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:16px;
  overflow:hidden; box-shadow:0 1px 3px rgba(0,0,0,.05); }

/* POS-01 ocupa EXACTAMENTE el alto de su contenedor (.orbi-pos-wrap) con flex a
   pantalla completa: header (banda F + datos) y footer (totales/Cobrar) fijos, y
   el ÚNICO scroll vive en la lista del ticket (.ticket-table-wrap). Se retiró el
   viejo hack `zoom:.92 + height:calc(100%/.92)`: con la tarjeta y el padding
   descuadraba el alto, empujaba el footer fuera de vista y provocaba scroll en el
   contenedor principal. */
/* En el POS el toggle de tema vive en la banda F (#pos-theme): oculta el flotante global. */
body.orbi-pos #orbi-theme-toggle{ display:none; }
.no-select{ -webkit-user-select:none; user-select:none; }

/* ---- 1 · Banda de teclas F (arriba) ---- */
/* Mismo look profundo del original pero en TONOS DEL TEMA: degradado acento→acento2
   con una capa oscura (más fuerte a la izquierda) que da la profundidad tipo navy.
   Cambia solo al elegir otro acento; no depende del azul de marca. */
.orbi-fband{ display:flex; align-items:center; gap:7px;
  background:var(--orbi-surface);
  border-bottom:1px solid var(--orbi-border);
  padding:9px 12px; flex-shrink:0; }
.orbi-fband .fkey{
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px;
  min-width:90px; min-height:48px; padding:6px 15px; cursor:pointer; line-height:1.12;
  border-radius:11px; color:var(--orbi-text);
  background:var(--orbi-surface);
  border:1.5px solid rgba(var(--orbi-accent-rgb),.42);
  transition:background .13s, border-color .13s, box-shadow .13s, transform .05s;
}
.orbi-fband .fkey:hover{
  background:rgba(var(--orbi-accent-rgb),.08);
  border-color:var(--orbi-accent); box-shadow:0 2px 8px rgba(var(--orbi-accent-rgb),.14);
}
.orbi-fband .fkey:active{ transform:translateY(1px); }
.orbi-fband .fk-label{ font-size:10px; font-weight:800; color:var(--orbi-accent); letter-spacing:.3px; }
.orbi-fband .fk-name{ font-size:11px; font-weight:600; white-space:nowrap; color:var(--orbi-text); }
/* F7 Cobrar: botón sólido (teal = dinero/confirmar). Se conserva. */
.orbi-fband .fkey-cobrar{ min-width:106px;
  background:linear-gradient(180deg, var(--orbi-teal) 0%, #0c5d49 100%);
  border-color:#0c5d49; box-shadow:0 3px 11px rgba(15,118,110,.34); }
.orbi-fband .fkey-cobrar:hover{ background:linear-gradient(180deg, #128a76 0%, #0a5040 100%); border-color:#0a5040; box-shadow:0 4px 15px rgba(15,118,110,.42); }
.orbi-fband .fkey-cobrar .fk-label{ color:rgba(255,255,255,.82); }
.orbi-fband .fkey-cobrar .fk-name{ color:#fff; }
/* Cancelar venta (Esc): rojo. Se conserva. */
.orbi-fband .fkey-cancelar{
  background:linear-gradient(180deg, rgba(220,53,69,.16) 0%, rgba(220,53,69,.06) 100%);
  border-color:rgba(220,53,69,.38); }
.orbi-fband .fkey-cancelar:hover{ background:linear-gradient(180deg, rgba(220,53,69,.28) 0%, rgba(220,53,69,.12) 100%); border-color:rgba(220,53,69,.58); box-shadow:0 3px 9px rgba(220,53,69,.18); }
.orbi-fband .fkey-cancelar .fk-label{ color:#dc3545; }
.orbi-fband .fkey-cancelar .fk-name{ color:#c02532; }
.orbi-fband .fband-sep{ width:1px; height:30px; background:var(--orbi-border); flex-shrink:0; }
.orbi-fband .theme-toggle{
  margin-left:auto; display:flex; align-items:center; gap:6px; cursor:pointer;
  background:var(--orbi-input-bg); border:1px solid var(--orbi-border); color:var(--orbi-text);
  border-radius:20px; padding:6px 14px; font-size:12px; white-space:nowrap;
  transition:background .13s, border-color .13s;
}
.orbi-fband .theme-toggle:hover{ background:rgba(var(--orbi-accent-rgb),.08); border-color:rgba(var(--orbi-accent-rgb),.4); }
.orbi-fband .theme-toggle i{ color:var(--orbi-accent); }

/* ---- 2 · Encabezado ---- */
/* Tinte sutil con el color del tema (acento) + borde inferior de acento. */
.orbi-header{ display:flex; align-items:stretch; background:var(--orbi-surface); border-bottom:1px solid var(--orbi-border); flex-shrink:0; }
.orbi-header .hdr-cell{ position:relative; flex:1; padding:9px 18px; border-right:1px solid var(--orbi-border); display:flex; flex-direction:column; justify-content:center; min-width:0; }
.orbi-header .hdr-cell:first-child{ flex:1.25; }
/* Barrita de acento a la izquierda de cada celda: toque del tema, sin saturar */
.orbi-header .hdr-cell::before{ content:''; position:absolute; left:0; top:50%; transform:translateY(-50%); width:3px; height:22px; border-radius:3px; background:rgba(var(--orbi-accent-rgb),.35); }
.orbi-header .hdr-cell:first-child::before{ background:var(--orbi-accent); }
.orbi-header .hdr-label{ font-size:10px; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.4px; }
.orbi-header .hdr-value{ font-weight:600; font-size:14px; color:var(--orbi-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.orbi-header .hdr-value.accent{ color:var(--orbi-accent); }
.hdr-comp{ display:flex; align-items:center; gap:8px; }
.comp-select{ border:1px solid var(--orbi-border); border-radius:6px; background:var(--orbi-input-bg); color:var(--orbi-text); font-size:13px; padding:4px 8px; outline:none; }
.comp-folio{ font-family:monospace; font-weight:600; color:var(--orbi-accent); font-size:13px; }
#chip-suspendidos{
  margin:8px 12px; display:flex; align-items:center; gap:9px; cursor:pointer;
  border:1px solid #C8952A; background:var(--orbi-amber-bg); color:var(--orbi-amber);
  padding:5px 14px; border-radius:10px;
}
#chip-suspendidos[hidden]{ display:none; }
.chip-sus-icon{ font-size:18px; }
.chip-sus-texto{ display:flex; flex-direction:column; line-height:1.05; text-align:left; }
.chip-sus-label{ font-size:9px; text-transform:uppercase; letter-spacing:.4px; }
.chip-sus-count{ font-weight:800; font-size:15px; }

/* ---- 3 · Cuerpo: cuerpo1 (ticket) + cuerpo2 (detalle) ---- */
.orbi-body{ flex:1; min-height:0; display:flex; }
.cuerpo1{ flex:1; min-width:0; min-height:0; display:flex; flex-direction:column; }
.search-bar{ position:relative; padding:10px 14px; background:var(--orbi-surface); border-bottom:1px solid var(--orbi-border); flex-shrink:0; }
.search-bar .search-ic{ position:absolute; left:26px; top:50%; transform:translateY(-50%); color:var(--orbi-muted); font-size:16px; }
#search-input{ width:100%; border:1px solid var(--orbi-border); border-radius:10px; background:var(--orbi-input-bg); padding:11px 14px 11px 40px; font-size:15px; color:var(--orbi-text); outline:none; }
#search-input:focus{ border-color:var(--orbi-accent); background:var(--orbi-surface); }
#search-input.is-invalid{ border-color:var(--orbi-red); background:var(--orbi-red-bg); }

.ticket-table-wrap{ flex:1; min-height:0; overflow-y:auto; overflow-x:hidden; background:var(--orbi-surface); scrollbar-width:thin; scrollbar-color:rgba(0,0,0,.18) transparent; }
.ticket-table-wrap::-webkit-scrollbar{ width:8px; }
.ticket-table-wrap::-webkit-scrollbar-thumb{ background:rgba(0,0,0,.16); border-radius:8px; }
.ticket-table-wrap::-webkit-scrollbar-track{ background:transparent; }
.ticket-table{ width:100%; border-collapse:collapse; table-layout:fixed; }
.ticket-table thead th{
  position:sticky; top:0; z-index:1; background:var(--orbi-accent-bg); color:var(--orbi-navy);
  font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.3px;
  padding:9px 12px; text-align:left;
}
.ticket-table th.th-r, .ticket-table td.td-r{ text-align:right; }
.ticket-table th.th-c, .ticket-table td.td-c{ text-align:center; }
.ticket-table tbody td{ padding:11px 12px; border-bottom:1px solid var(--orbi-border); font-size:14px; color:var(--orbi-text); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ticket-table tbody tr{ cursor:pointer; transition:background .1s ease; }
.ticket-table tbody tr:hover{ background:var(--orbi-gray-bg); }
.ticket-table tbody tr.sel{ background:var(--orbi-accent-bg); }
/* Dark: la fila seleccionada usa un tinte OSCURO translúcido del acento. Los
   acentos ([data-accent]) definen accent-bg CLARO (pensado para modo claro), que
   en oscuro dejaría fondo claro + texto claro = ilegible. Se acota a las filas
   seleccionadas (no toca encabezados/insignias que sí quieren fondo claro). */
[data-theme="dark"] .ticket-table tbody tr.sel,
[data-theme="dark"] .ticket-table tbody tr.sel td{ background:rgba(var(--orbi-accent-rgb), .24); }
/* Dark: el encabezado del listado usaba texto navy sobre accent-bg (oscuro en
   dark, o claro si hay [data-accent]) -> se perdía. Fondo OPACO (es sticky: no
   debe transparentar las filas al hacer scroll) teñido del acento + texto claro. */
[data-theme="dark"] .ticket-table thead th,
[data-theme="dark"] .orbi-ticket thead th{
  background:var(--orbi-surface);
  background:color-mix(in srgb, var(--orbi-accent) 30%, var(--orbi-surface));
  color:#F3F4F6;
  border-bottom:1px solid rgba(var(--orbi-accent-rgb), .55);
}
.ticket-table .td-id{ font-family:monospace; font-size:12px; font-weight:500; color:var(--orbi-accent); }
.ticket-table .td-imp{ font-weight:700; color:var(--orbi-teal); font-variant-numeric:tabular-nums; }
.ticket-empty td{ text-align:center; color:var(--orbi-muted); padding:46px 12px; }
/* Precio libre con autorización (CFG-08): el precio de la línea es un campo
   editable; al cambiarlo pide el PIN de un administrador (pos01.js). */
.ticket-table td.td-precio{ padding-top:6px; padding-bottom:6px; }
.ticket-table .tk-precio{ width:100%; max-width:110px; text-align:right; font:inherit; font-variant-numeric:tabular-nums;
  border:1px dashed var(--orbi-border); border-radius:7px; background:transparent; color:var(--orbi-text); padding:4px 7px; transition:border-color .15s, background .15s, box-shadow .15s; }
.ticket-table .tk-precio:hover{ border-color:var(--orbi-accent); }
.ticket-table .tk-precio:focus{ outline:none; border-style:solid; border-color:var(--orbi-accent); background:var(--orbi-surface); box-shadow:0 0 0 3px rgba(var(--orbi-accent-rgb),.18); }
.ticket-table .tk-precio.aut{ border-style:solid; border-color:var(--orbi-teal); color:var(--orbi-teal); font-weight:700; }
.ticket-table .tk-precio-wrap{ display:inline-flex; align-items:center; gap:4px; justify-content:flex-end; width:100%; }
.ticket-table .tk-precio-wrap .bi-shield-check{ color:var(--orbi-teal); font-size:13px; }

.cuerpo2{ width:300px; flex:0 0 300px; border-left:1px solid var(--orbi-border); background:var(--orbi-surface); display:flex; flex-direction:column; min-height:0; }
.c2-header{ display:flex; align-items:center; justify-content:space-between; padding:10px 16px; border-bottom:1px solid var(--orbi-border); flex-shrink:0; }
.c2-title{ font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.4px; color:var(--orbi-muted); }
.upd-badge{ font-size:10px; font-weight:600; color:var(--orbi-teal); background:var(--orbi-teal-bg); border-radius:20px; padding:2px 9px; opacity:0; transition:opacity .2s ease; }
.upd-badge.show{ opacity:1; }
.c2-body{ flex:1; overflow:auto; padding:16px; }
.c2-img{ position:relative; overflow:hidden; width:100%; height:175px; border-radius:12px; background:var(--orbi-input-bg); display:flex; align-items:center; justify-content:center; color:var(--orbi-muted); font-size:46px; margin-bottom:14px; }
/* Imagen del artículo por SKU (assets/images/productos/SKU-A.jpg); onerror la
   quita y queda el ícono placeholder. */
.c2-img img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.c2-hint{ text-align:center; color:var(--orbi-muted); font-size:13px; margin:0; }
.c2-field{ display:flex; flex-direction:column; gap:3px; padding:9px 0; border-bottom:1px solid var(--orbi-border); }
.c2-field:last-child{ border-bottom:0; }
.c2-label{ font-size:10px; text-transform:uppercase; letter-spacing:.4px; color:var(--orbi-muted); }
.c2-value{ font-weight:600; font-size:14px; color:var(--orbi-text); }
.c2-value.accent{ color:var(--orbi-accent); }
.c2-value.ok{ color:var(--orbi-teal); }
.c2-value.warn{ color:var(--orbi-amber); }
.c2-value.bad{ color:var(--orbi-red); }
.unit-pills{ display:flex; flex-wrap:wrap; gap:6px; margin-top:5px; }
.upill{ border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text); border-radius:20px; padding:4px 13px; font-size:12px; font-weight:600; cursor:pointer; }
.upill:hover{ border-color:var(--orbi-accent); }
.upill.active{ background:var(--orbi-accent); border-color:var(--orbi-accent); color:#fff; }

/* ---- 4 · Pie ---- */
.orbi-footer{ display:flex; align-items:stretch; background:var(--orbi-surface); border-top:1px solid var(--orbi-border); flex-shrink:0; }
.orbi-footer .footer-cell{ flex:1; padding:9px 18px; border-right:1px solid var(--orbi-border); display:flex; flex-direction:column; justify-content:center; min-width:0; }
.orbi-footer .footer-cell.footer-accion{ flex:0 0 200px; padding:0; }
.footer-label{ font-size:10px; text-transform:uppercase; letter-spacing:.4px; color:var(--orbi-muted); }
.footer-value{ font-weight:700; font-size:16px; color:var(--orbi-text); white-space:nowrap; }
.footer-value.total{ font-size:26px; font-weight:800; color:var(--orbi-navy); font-variant-numeric:tabular-nums; }
.footer-value.muted{ color:var(--orbi-muted); font-size:13px; font-weight:600; }
.footer-value.cambio{ color:var(--orbi-teal); font-variant-numeric:tabular-nums; }
.footer-sub{ font-size:11px; color:var(--orbi-muted); }
#btn-cobrar{ width:100%; height:100%; min-height:62px; border:none; background:var(--orbi-teal); color:#fff; font-size:18px; font-weight:800; display:flex; align-items:center; justify-content:center; gap:8px; cursor:pointer; }
#btn-cobrar:hover{ background:#0c5d49; }
#btn-cobrar:disabled{ opacity:.45; cursor:not-allowed; }

/* ---- Modal de cobro ---- */
.cobro-header{ background:var(--orbi-navy); }
.cobro-header .modal-title{ font-size:15px; color:#fff; }
.cobro-header small{ color:rgba(255,255,255,.7); }
.cobro-seclabel{ font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.4px; color:var(--orbi-muted); margin-bottom:8px; }
/* Cuerpo del modal de cobro en dos columnas: captura a la izquierda, resumen a la derecha */
.cobro-grid{ display:grid; grid-template-columns:1fr 280px; gap:20px; align-items:start; }
@media (max-width:640px){ .cobro-grid{ grid-template-columns:1fr; gap:12px; } }
.cobro-metodos{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.metodo-btn{ display:flex; flex-direction:column; align-items:center; gap:4px; padding:10px 6px; border:1px solid var(--orbi-border); border-radius:10px; background:var(--orbi-input-bg); color:var(--orbi-text); font-size:11px; font-weight:600; cursor:pointer; }
.metodo-btn i{ font-size:20px; }
.metodo-btn:hover{ border-color:var(--orbi-accent); color:var(--orbi-accent); }
.metodo-btn.active{ background:var(--orbi-accent); border-color:var(--orbi-accent); color:#fff; }
.cobro-monto{ display:flex; align-items:center; gap:8px; background:var(--orbi-input-bg); border:1px solid var(--orbi-border); border-radius:10px; padding:0 12px; height:54px; }
.cobro-monto .pre{ font-size:20px; color:var(--orbi-muted); }
#cobro-input-monto{ flex:1; border:none; background:none; outline:none; font-size:24px; font-weight:700; color:var(--orbi-text); }
.cobro-monto .cur{ font-size:12px; color:var(--orbi-muted); }
.cobro-cambio{ display:flex; justify-content:space-between; align-items:center; background:var(--orbi-teal-bg); border-radius:10px; padding:10px 14px; margin-top:12px; }
.cobro-cambio.insuf{ background:var(--orbi-red-bg); }
.cobro-cambio .lbl{ font-weight:600; color:var(--orbi-teal); }
.cobro-cambio.insuf .lbl{ color:var(--orbi-red); }
.cobro-cambio .val{ font-size:20px; font-weight:800; color:var(--orbi-teal); }
.cobro-cambio.insuf .val{ color:var(--orbi-red); }

/* ---- Modal de búsqueda (selección de artículo) ---- */
.busqueda-list{ display:flex; flex-direction:column; }
.bq-item{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:12px 16px; border-bottom:1px solid var(--orbi-border); cursor:pointer; }
.bq-item:hover{ background:var(--orbi-accent-bg); }
.bq-info{ min-width:0; }
.bq-top{ display:flex; align-items:center; gap:8px; min-width:0; }
.bq-sku{ flex:0 0 auto; font-family:monospace; font-size:11px; font-weight:700; color:var(--orbi-mid); background:var(--orbi-accent-bg); border-radius:5px; padding:1px 7px; white-space:nowrap; }
.bq-nom{ font-weight:600; font-size:13px; color:var(--orbi-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bq-cb{ display:flex; align-items:center; gap:5px; margin-top:3px; font-size:11px; color:var(--orbi-muted); font-family:monospace; }
.bq-cb i{ font-size:12px; opacity:.85; }
.bq-right{ text-align:right; white-space:nowrap; }
.bq-precio{ font-weight:700; font-size:13px; color:var(--orbi-accent); }
.bq-stock{ font-size:10px; color:var(--orbi-muted); }

/* ---- Modal de ventas en espera (suspendidas) ---- */
.sus-dialog{ max-width:480px; transition:max-width .15s ease; }
.sus-dialog.wide{ max-width:640px; }
.sus-list{ display:flex; flex-direction:column; }
.sus-item{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:12px 16px; border-bottom:1px solid var(--orbi-border); cursor:pointer; }
.sus-item:hover{ background:var(--orbi-amber-bg); }
.sus-item.active{ background:var(--orbi-accent-bg); box-shadow:inset 3px 0 0 var(--orbi-accent); }
.sus-info{ min-width:0; }
.sus-ref{ font-weight:700; font-size:13px; color:var(--orbi-text); }
.sus-ref .bi{ color:var(--orbi-amber); }
.sus-cli{ font-size:12px; color:var(--orbi-mid); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sus-cli .bi{ color:var(--orbi-muted); }
.sus-meta{ font-size:11px; color:var(--orbi-muted); margin-top:2px; }
.sus-right{ display:flex; flex-direction:column; align-items:flex-end; gap:6px; flex:0 0 auto; }
.sus-total{ font-weight:700; font-size:15px; color:var(--orbi-teal); white-space:nowrap; font-variant-numeric:tabular-nums; }
.sus-chev{ border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-muted);
  width:26px; height:26px; border-radius:8px; line-height:1; cursor:pointer; }
.sus-chev:hover{ border-color:var(--orbi-accent); color:var(--orbi-accent); }
.sus-empty{ text-align:center; color:var(--orbi-muted); padding:30px 10px; font-size:13px; }
/* Segundo nivel: detalle del ticket suspendido */
.sus-detail-head{ display:flex; align-items:center; gap:10px; padding:12px 16px; border-bottom:1px solid var(--orbi-border); }
.sus-back{ border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text);
  width:32px; height:32px; border-radius:9px; line-height:1; cursor:pointer; flex:0 0 auto; }
.sus-back:hover{ border-color:var(--orbi-accent); color:var(--orbi-accent); }
.sus-detail-title{ min-width:0; }
.sus-dt-num{ font-weight:700; font-size:14px; color:var(--orbi-text); }
.sus-dt-cli{ font-size:12px; color:var(--orbi-mid); margin-top:2px; }
.sus-detail-body{ display:flex; flex-direction:column; max-height:360px; overflow-y:auto; }
.sus-dl-row{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:9px 16px; border-bottom:1px solid var(--orbi-border-soft,#eef0f4); }
.sus-dl-nom{ font-size:13px; color:var(--orbi-text); min-width:0; }
.sus-dl-sub{ display:block; font-size:11px; color:var(--orbi-muted); margin-top:1px; }
.sus-dl-imp{ font-weight:700; font-size:13px; color:var(--orbi-text); white-space:nowrap; font-variant-numeric:tabular-nums; }
.sus-dl-total{ display:flex; justify-content:space-between; padding:12px 16px; font-weight:700; font-size:14px; color:var(--orbi-teal); }
/* Badge con el conteo de suspendidas sobre la tecla F9 */
.orbi-fband .fkey{ position:relative; }
.sus-badge{ position:absolute; top:2px; right:4px; min-width:16px; height:16px; padding:0 4px;
  border-radius:9px; background:#C8952A; color:#fff; font-size:9px; font-weight:800;
  line-height:16px; text-align:center; }

/* Responsivo: en pantallas angostas el detalle pasa abajo */
@media(max-width:900px){
  .orbi-body{ flex-direction:column; }
  .cuerpo2{ width:auto; flex:none; border-left:none; border-top:1px solid var(--orbi-border); max-height:38vh; }
  .orbi-fband{ flex-wrap:wrap; }
  .orbi-fband .theme-toggle{ margin-left:0; }
}

/* =====================================================================
   ── Inventario ──  (INV-00 a INV-05)
   Portado de los mockups; usa los tokens --orbi-*. Táctil ≥44px.
   ===================================================================== */
.inv-body { background:var(--orbi-gray-bg); min-height:100vh; display:flex; flex-direction:column; }
.inv-fixed { height:100vh; overflow:hidden; }

/* Topbar del módulo */
.inv-topbar { background:var(--orbi-navy); min-height:48px; display:flex; align-items:center; gap:10px; padding:0 14px; flex-shrink:0; }
.inv-topbar .inv-title { font-size:15px; font-weight:600; color:#fff; flex:1; }
.inv-topbar .inv-title i { opacity:.7; }
.inv-back { background:rgba(255,255,255,.12); border:.5px solid rgba(255,255,255,.25); border-radius:8px; color:#fff; font-size:13px; min-height:36px; padding:4px 14px; cursor:pointer; display:inline-flex; align-items:center; gap:6px; text-decoration:none; }
.inv-back:hover { opacity:.85; color:#fff; }
.inv-tb-btn { border:none; border-radius:8px; color:#fff; font-size:13px; font-weight:600; min-height:38px; padding:6px 16px; cursor:pointer; display:inline-flex; align-items:center; gap:6px; }
.inv-tb-btn.teal { background:var(--orbi-teal); }
.inv-tb-btn.accent { background:var(--orbi-accent); }
.inv-tb-btn.ghost { background:rgba(255,255,255,.12); border:.5px solid rgba(255,255,255,.25); }

/* INV-00 menú */
.inv-menu { flex:1; padding:24px; max-width:900px; margin:0 auto; width:100%; }
.inv-menu h1 { font-size:21px; font-weight:600; color:var(--orbi-text); margin:0 0 4px; }
.inv-menu .sub { font-size:13px; color:var(--orbi-muted); margin:0 0 6px; }
.inv-seclabel { font-size:11px; font-weight:600; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; margin:18px 0 10px; }
.inv-opts { display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:14px; }
.inv-opt { background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:14px; padding:18px; min-height:120px; display:flex; flex-direction:column; gap:10px; text-decoration:none; transition:border-color .15s, transform .1s, box-shadow .15s; }
.inv-opt:hover { border-color:var(--orbi-accent); transform:translateY(-2px); box-shadow:0 6px 18px rgba(var(--orbi-accent-rgb),.12); }
.inv-opt .ico { width:48px; height:48px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:24px; }
.inv-opt .nom { font-size:15px; font-weight:600; color:var(--orbi-text); }
.inv-opt .des { font-size:12px; color:var(--orbi-muted); line-height:1.4; }
.inv-opt .arrow { margin-top:auto; align-self:flex-end; color:var(--orbi-accent); }
.ico-teal { background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.ico-purple { background:var(--orbi-accent-bg); color:var(--orbi-accent); }
.ico-amber { background:var(--orbi-amber-bg); color:var(--orbi-amber); }
.ico-blue { background:#E6F1FB; color:#185FA5; }
.ico-cyan { background:#E0F5F8; color:#0E7490; }

/* Toolbar / filtros */
.inv-toolbar { background:var(--orbi-surface); border-bottom:1px solid var(--orbi-border); padding:8px 12px; display:flex; align-items:center; gap:8px; flex-shrink:0; }
.inv-search { flex:1; display:flex; align-items:center; gap:6px; background:var(--orbi-input-bg); border:.5px solid var(--orbi-border); border-radius:8px; padding:0 12px; min-height:40px; }
.inv-search input { background:none; border:none; outline:none; font-size:14px; color:var(--orbi-text); flex:1; width:100%; }
.inv-search i { color:var(--orbi-muted); }
.inv-filter { background:var(--orbi-input-bg); border:.5px solid var(--orbi-border); border-radius:8px; padding:0 10px; min-height:40px; font-size:13px; color:var(--orbi-text); outline:none; }
.inv-count { font-size:12px; color:var(--orbi-muted); white-space:nowrap; }

/* Tablas inventario */
.inv-tablewrap { overflow-y:auto; flex:1; background:var(--orbi-surface); }
.inv-table { width:100%; border-collapse:collapse; }
.inv-table thead tr { background:var(--orbi-input-bg); position:sticky; top:0; z-index:1; }
.inv-table thead th { padding:8px 10px; font-size:10px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.4px; border-bottom:1px solid var(--orbi-border); text-align:left; }
.inv-table thead th.r { text-align:right; }
.inv-table tbody tr { border-bottom:.5px solid var(--orbi-border); cursor:pointer; }
.inv-table tbody tr:hover { background:var(--orbi-input-bg); }
.inv-table tbody tr.sel { background:var(--orbi-accent-bg); }
/* Dark: fila seleccionada con tinte oscuro del acento (ver nota en .ticket-table). */
[data-theme="dark"] .inv-table tbody tr.sel,
[data-theme="dark"] .inv-table tbody tr.sel td { background:rgba(var(--orbi-accent-rgb), .24); }
.inv-table tbody td { padding:10px; font-size:13px; color:var(--orbi-text); }
.inv-table td.r { text-align:right; font-variant-numeric:tabular-nums; }
.inv-table .td-id { font-weight:600; color:var(--orbi-accent); font-family:monospace; font-size:12px; }
.inv-table .td-val { text-align:right; font-weight:600; color:var(--orbi-teal); font-variant-numeric:tabular-nums; }
.stk-ok { color:var(--orbi-teal); font-weight:600; } .stk-warn { color:var(--orbi-amber); font-weight:600; } .stk-bad { color:var(--orbi-red); font-weight:600; }

/* Pie de tabla con stats */
.inv-foot { background:var(--orbi-input-bg); border-top:1px solid var(--orbi-border); padding:8px 14px; display:flex; gap:22px; flex-shrink:0; flex-wrap:wrap; }
.inv-foot .st { display:flex; flex-direction:column; }
.inv-foot .st .n { font-size:17px; font-weight:600; color:var(--orbi-text); }
.inv-foot .st .l { font-size:10px; color:var(--orbi-muted); }

/* Badges movimientos / tipos */
.badge-mov { font-size:10px; padding:3px 9px; border-radius:20px; font-weight:600; }
.bm-compra { background:var(--orbi-teal-bg); color:#085041; }
.bm-venta { background:var(--orbi-red-bg); color:#791F1F; }
.bm-ajent { background:var(--orbi-accent-bg); color:#3C3489; }
.bm-ajsal { background:var(--orbi-amber-bg); color:#633806; }
.bm-trans { background:#E6F1FB; color:#0C447C; }
.cant-pos { color:var(--orbi-teal); font-weight:600; } .cant-neg { color:var(--orbi-red); font-weight:600; }

/* Layout lista + panel (inv03/04/05) */
.inv-split { display:flex; flex:1; min-height:0; }
.inv-list { display:flex; flex-direction:column; flex:1; min-width:0; border-right:1px solid var(--orbi-border); }
.inv-panel { width:340px; flex-shrink:0; background:var(--orbi-surface); display:flex; flex-direction:column; }
.inv-panel.wide { width:320px; }
.inv-panel-head { background:var(--orbi-navy); padding:8px 14px; display:flex; align-items:center; justify-content:space-between; flex-shrink:0; }
.inv-panel-head .t { font-size:14px; font-weight:600; color:#fff; }
.inv-panel-head .m { font-size:10px; padding:2px 9px; border-radius:20px; background:rgba(255,255,255,.15); color:rgba(255,255,255,.85); }
.inv-form { padding:14px; display:flex; flex-direction:column; gap:11px; flex:1; overflow-y:auto; }

/* Campos */
.fld { display:flex; flex-direction:column; gap:4px; }
.fld label { font-size:10px; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.4px; }
.fld input, .fld select { background:var(--orbi-input-bg); border:.5px solid var(--orbi-border); border-radius:8px; padding:8px 11px; font-size:14px; color:var(--orbi-text); outline:none; width:100%; min-height:40px; }
.fld input:focus, .fld select:focus { border-color:var(--orbi-accent); background:var(--orbi-surface); }
.fld input:disabled, .fld select:disabled { opacity:.7; }
.fld input.clave { font-family:monospace; font-weight:600; color:var(--orbi-accent); text-transform:uppercase; }
.row2 { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.inv-form-foot { padding:10px 14px; border-top:1px solid var(--orbi-border); display:flex; gap:8px; justify-content:flex-end; flex-shrink:0; }

/* Toggle */
.toggle-row { display:flex; align-items:center; justify-content:space-between; background:var(--orbi-input-bg); border:.5px solid var(--orbi-border); border-radius:8px; padding:10px 12px; }
.toggle-lbl { font-size:13px; font-weight:600; color:var(--orbi-text); }
.toggle-sw { position:relative; width:44px; height:24px; cursor:pointer; flex-shrink:0; }
.toggle-sw input { opacity:0; width:0; height:0; position:absolute; }
.toggle-track { position:absolute; inset:0; background:#9CA3AF; border-radius:12px; transition:background .2s; }
.toggle-thumb { position:absolute; top:3px; left:3px; width:18px; height:18px; background:#fff; border-radius:50%; transition:transform .2s; box-shadow:0 1px 3px rgba(0,0,0,.2); }
.toggle-sw input:checked ~ .toggle-track { background:var(--orbi-teal); }
.toggle-sw input:checked ~ .toggle-thumb { transform:translateX(20px); }

/* Badges tipo unidades/formas */
.badge-tipo { font-size:10px; padding:3px 9px; border-radius:20px; }
.bt-cantidad{background:var(--orbi-accent-bg);color:#3B3BAF;} .bt-peso{background:var(--orbi-teal-bg);color:#0F6E56;}
.bt-volumen{background:var(--orbi-amber-bg);color:#854F0B;} .bt-longitud{background:#E6F1FB;color:#185FA5;}
.bt-otro{background:var(--orbi-gray-bg);color:var(--orbi-muted);} .bt-efectivo{background:var(--orbi-teal-bg);color:#085041;}
.bt-tarjeta,.bt-transferencia{background:var(--orbi-accent-bg);color:#3C3489;} .bt-vale{background:var(--orbi-amber-bg);color:#633806;}
.bt-mixto,.bt-cheque{background:#E6F1FB;color:#0C447C;}
.est-activo { color:var(--orbi-teal); font-weight:600; font-size:12px; } .est-inactivo { color:var(--orbi-red); font-size:12px; }

/* Ficha inv02: tabs + secciones */
.inv-ficha { background:var(--orbi-surface); }
.inv-sec1 { display:grid; grid-template-columns:1fr 1fr; border-bottom:1px solid var(--orbi-border); }
.inv-sec1 .panel { padding:14px 16px; display:flex; flex-direction:column; gap:10px; }
.inv-sec1 .panel.left { border-right:1px solid var(--orbi-border); }
.inv-seclbl { font-size:10px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; padding-bottom:6px; border-bottom:.5px solid var(--orbi-border); }
.tab-nav { display:flex; border-bottom:1px solid var(--orbi-border); background:var(--orbi-input-bg); }
.tab-btn { padding:10px 18px; font-size:13px; font-weight:600; color:var(--orbi-muted); cursor:pointer; border:none; background:none; border-bottom:2px solid transparent; min-height:44px; }
.tab-btn.active { color:var(--orbi-accent); border-bottom-color:var(--orbi-accent); background:var(--orbi-surface); }
.tab-pane { padding:16px; display:none; } .tab-pane.active { display:block; }
.exist-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(170px,1fr)); gap:10px; }
.exist-card { background:var(--orbi-input-bg); border:.5px solid var(--orbi-border); border-radius:10px; padding:12px; }
.exist-card .alm { font-size:12px; font-weight:600; color:var(--orbi-text); margin-bottom:4px; }
.exist-card .qty { font-size:24px; font-weight:700; } .exist-card .u { font-size:10px; color:var(--orbi-muted); }
.inv-mono { font-family:monospace; font-weight:600; color:var(--orbi-accent); }

/* =====================================================================
   ── HOMOLOGACIÓN DE ESTILOS (sistema de diseño unificado) ──
   Estandariza TODOS los módulos al lenguaje visual del POS:
   bordes redondeados, links sin subrayado, colores por tokens,
   controles con misma forma/altura/foco y alineación uniforme.
   Va al final para ganar en la cascada (centraliza la consistencia).
   ===================================================================== */
:root{
  --orbi-r-sm:10px;   /* inputs, botones, chips */
  --orbi-r-md:14px;   /* tablas, paneles */
  --orbi-r-lg:16px;   /* tarjetas */
}

/* Links: nunca subrayados (color por token) */
a, a:hover, a:focus{ text-decoration:none !important; }

/* ---- Controles de formulario unificados (inputs, selects, búsquedas) ---- */
.form-control, .form-select,
.fld input, .fld select,
.inv-filter, .inv-search,
.search-wrap, .clave-inp{
  border-radius:var(--orbi-r-sm) !important;
  border:1px solid var(--orbi-border);
  background:var(--orbi-input-bg);
  color:var(--orbi-text);
}
.fld input, .fld select, .form-control, .form-select,
.inv-filter, .inv-search input{ min-height:44px; font-size:14px; }
.fld input:focus, .fld select:focus, .form-control:focus, .form-select:focus,
.inv-search:focus-within{
  border-color:var(--orbi-accent);
  box-shadow:0 0 0 .2rem var(--orbi-accent-bg);
  outline:none;
}
.fld label, .field label{ font-weight:600; }

/* ============================================================
   HOMOLOGACIÓN GLOBAL de checkboxes, radios y textareas
   (Adán 2026-07-29). Scoped a .orbi-app para no tocar el login
   ni la app móvil. Los inputs de texto con clase (.form-control,
   .fld input, .inv-filter…) ya se homologan arriba; aquí se suman
   los checkboxes/radios, las textareas y los inputs "desnudos".
   ============================================================ */
/* Checkboxes y radios: más grandes y con el color de acento del sistema. */
.orbi-app input[type="checkbox"], .orbi-app input[type="radio"]{
  width:1.2rem; height:1.2rem; accent-color:var(--orbi-accent); cursor:pointer; vertical-align:middle;
}
/* Checkbox estilo Bootstrap 5 (.form-check-input): palomita + acento + foco. */
.orbi-app .form-check-input{ cursor:pointer; }
.orbi-app .form-check-input:checked{ background-color:var(--orbi-accent); border-color:var(--orbi-accent); }
.orbi-app .form-check-input:focus{ border-color:var(--orbi-accent); box-shadow:0 0 0 .2rem var(--orbi-accent-bg); }
.orbi-app .form-switch .form-check-input{ width:2rem; }   /* respeta el ancho del toggle */

/* Textareas: mismo look que los inputs (borde, fondo, radio, foco). */
.orbi-app textarea, .orbi-app textarea.form-control{
  border:1px solid var(--orbi-border); border-radius:var(--orbi-r-sm);
  background:var(--orbi-input-bg); color:var(--orbi-text);
  padding:9px 12px; font-size:14px; min-height:74px; outline:none; line-height:1.5;
}
.orbi-app textarea:focus, .orbi-app textarea.form-control:focus{
  border-color:var(--orbi-accent); box-shadow:0 0 0 .2rem var(--orbi-accent-bg); background:var(--orbi-surface);
}
/* Nota: los inputs de texto YA se homologan en el bloque de arriba
   (.form-control / .fld input / .inv-filter / .inv-search). No se agrega un
   selector global de <input> para no pisar estilos compactos de otros módulos. */

/* ---- Botones unificados (forma + altura táctil + foco) ---- */
.btn, .inv-tb-btn, .btn-orbi, .btn-orbi-outline{
  border-radius:var(--orbi-r-sm) !important;
  font-weight:600;
}
.inv-tb-btn, .inv-back{ min-height:40px; border-radius:var(--orbi-r-sm) !important; }
.btn:focus, .inv-tb-btn:focus, .inv-back:focus{
  box-shadow:0 0 0 .2rem var(--orbi-accent-bg); outline:none;
}
.btn-orbi{ background:var(--orbi-accent); border:1px solid var(--orbi-accent); color:#fff; }
.btn-orbi:hover{ background:var(--orbi-mid); border-color:var(--orbi-mid); color:#fff; }
.btn-orbi-outline{ background:transparent; border:1px solid var(--orbi-accent); color:var(--orbi-accent); }
.btn-orbi-outline:hover{ background:var(--orbi-accent-bg); color:var(--orbi-accent); }

/* ---- Tarjetas, paneles y contenedores: redondeo consistente ---- */
.orbi-card, .modulo-card, .inv-opt, .exist-card, .cart-row, .pos-chip{
  border-radius:var(--orbi-r-lg) !important;
}
.inv-tablewrap, .orbi-ticket-box, .pos-cart, .inv-panel{ border-radius:0; }
.inv-tablewrap, .orbi-ticket-box{ border-radius:var(--orbi-r-md); }

/* ---- Topbars de módulo: bordes y alineación uniformes ---- */
.inv-topbar, .orbi-home-head{ align-items:center; }
.inv-topbar{ gap:10px; }

/* ---- Tablas: encabezado y celdas alineados de forma consistente ---- */
.inv-table thead th, .orbi-ticket thead th{ vertical-align:middle; }
.inv-table tbody td, .orbi-ticket tbody td{ vertical-align:middle; }

/* ---- Badges/píldoras: forma consistente ---- */
.badge, .badge-mov, .badge-tipo, .session-chip{ border-radius:20px; }

/* ---- nav-pills (Configuración) con el acento del sistema ---- */
.nav-pills .nav-link{ border-radius:var(--orbi-r-sm); color:var(--orbi-text); font-weight:600; }
.nav-pills .nav-link.active{ background:var(--orbi-accent); color:#fff; }

/* ---- Toolbars/filtros: misma separación y alineación vertical ---- */
.inv-toolbar, .lista-toolbar{ align-items:center; gap:8px; }

/* ---- Foco accesible general (sin depender de hover) ---- */
:focus-visible{ outline:2px solid var(--orbi-accent); outline-offset:1px; }

/* ---------------------------------------------------------------------
   Inventario: encabezado y pie HOMOLOGADOS al resto (claro, no navy)
   --------------------------------------------------------------------- */
.inv-topbar{
  background:var(--orbi-surface);
  border-bottom:1px solid var(--orbi-border);
  min-height:56px; padding:0 18px;
}
.inv-topbar .inv-title{ color:var(--orbi-navy); font-weight:700; }
.inv-topbar .inv-title i{ color:var(--orbi-accent); opacity:1; }
/* Botón "volver/Inicio": estilo outline como en los demás módulos */
.inv-back{
  background:transparent; border:1px solid var(--orbi-border); color:var(--orbi-text);
}
.inv-back:hover{ background:var(--orbi-gray-bg); color:var(--orbi-text); }
/* Botón secundario del topbar (Editar/Nuevo/Cancelar) */
.inv-tb-btn.ghost{ background:transparent; border:1px solid var(--orbi-border); color:var(--orbi-text); }
.inv-tb-btn.ghost:hover{ background:var(--orbi-gray-bg); color:var(--orbi-text); }

/* Sub-encabezados de panel (inv03/04/05) también claros */
.inv-panel-head{ background:var(--orbi-gray-bg); border-bottom:1px solid var(--orbi-border); }
.inv-panel-head .t{ color:var(--orbi-navy); }
.inv-panel-head .m{ background:var(--orbi-accent-bg); color:var(--orbi-accent); }

/* Pie de stats consistente (bordes redondeados inferiores) */
.inv-foot{ gap:24px; }
.inv-foot .st .n{ font-variant-numeric:tabular-nums; }

/* Control de tema: SIEMPRE en la esquina inferior derecha (no estorba). */
.orbi-theme-toggle{
  position:fixed !important;
  top:auto !important; left:auto !important;
  bottom:50px !important; right:32px !important;
  z-index:1080; box-shadow:0 8px 22px rgba(26,26,110,.22);
  transition:transform .2s ease, box-shadow .2s ease;
}
.orbi-theme-toggle:hover{ transform:translateY(-2px) scale(1.05); }

/* =====================================================================
   ASISTENTE "ORBI" — botón flotante (león azul) + panel de ayuda.
   Fijo abajo-derecha, ARRIBA del toggle de tema (que ya vive en ese rincón)
   para no encimarse. Ver snippets/footer.php (markup) y assets/js/orbi-ayuda.js.
   ===================================================================== */
.orbi-ayuda-fab{
  position:fixed; bottom:108px; right:24px; z-index:1085;
  width:58px; height:58px; border-radius:50%; padding:0;
  background:#fff; border:2px solid rgba(var(--orbi-accent-rgb),.35);
  box-shadow:0 10px 26px rgba(26,26,110,.22);
  display:flex; align-items:center; justify-content:center; cursor:pointer;
  animation:orbiAyudaFloat 3.2s ease-in-out infinite;
  transition:box-shadow .2s ease, transform .15s ease, border-color .2s ease;
}
.orbi-ayuda-fab:hover{ box-shadow:0 14px 32px rgba(26,26,110,.3); border-color:var(--orbi-accent); }
.orbi-ayuda-fab:active{ transform:scale(.94); }
.orbi-ayuda-fab svg{ width:42px; height:42px; position:relative; z-index:2; }
.orbi-ayuda-fab .oa-ring{
  position:absolute; inset:-6px; border-radius:50%; z-index:1; pointer-events:none;
  border:2px solid rgba(var(--orbi-accent2-rgb),.55);
  opacity:0; animation:orbiAyudaPulso 2.6s ease-out infinite;
}
.orbi-ayuda-fab .oa-ring.r2{ animation-delay:1.3s; border-color:rgba(255,255,255,.4); }
.orbi-ayuda-badge{
  position:absolute; top:-2px; right:-2px; z-index:3;
  width:16px; height:16px; border-radius:50%; background:var(--orbi-red,#DC2626);
  border:2px solid var(--orbi-canvas); display:none;
}
.orbi-ayuda-fab.tiene-novedad .orbi-ayuda-badge{ display:block; }
@keyframes orbiAyudaFloat{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-7px); } }
@keyframes orbiAyudaPulso{
  0%   { transform:scale(.85); opacity:.65; }
  70%  { opacity:.12; }
  100% { transform:scale(1.55); opacity:0; }
}
.oa-ojo{ transform-origin:50px 48px; animation:orbiAyudaPestaneo 4.5s ease-in-out infinite; }
@keyframes orbiAyudaPestaneo{ 0%,46%,54%,100%{ transform:scaleY(1); } 50%{ transform:scaleY(.1); } }
@media (prefers-reduced-motion: reduce){
  .orbi-ayuda-fab{ animation:none; }
  .orbi-ayuda-fab .oa-ring{ animation:none; display:none; }
  .oa-ojo{ animation:none; }
}
@media (max-width:480px){
  .orbi-ayuda-fab{ width:50px; height:50px; right:16px; bottom:96px; }
  .orbi-ayuda-fab svg{ width:36px; height:36px; }
}

/* Panel */
.orbi-ayuda-panel{
  position:fixed; right:24px; bottom:176px; z-index:1086;
  width:360px; max-width:calc(100vw - 32px); max-height:min(560px, 72vh);
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:var(--orbi-r-lg,16px); box-shadow:0 20px 50px rgba(16,24,40,.28);
  display:none; flex-direction:column; overflow:hidden;
  animation:orbiFadeInUp .22s ease both;
}
.orbi-ayuda-panel.show{ display:flex; }
.orbi-ayuda-panel.expandido{ width:580px; max-height:min(760px, 85vh); transition:width .18s ease, max-height .18s ease; }
@media (max-width:480px){
  .orbi-ayuda-panel{ right:16px; bottom:150px; }
  .orbi-ayuda-panel.expandido{ width:calc(100vw - 24px); max-height:85vh; }
}

.oa-head{
  display:flex; align-items:center; gap:10px; padding:14px 14px 12px;
  background:#fff; border-bottom:3px solid var(--orbi-accent);
  color:var(--orbi-navy); flex-shrink:0;
}
.oa-head svg{ width:30px; height:30px; flex-shrink:0; }
.oa-head .oa-titulos{ flex:1; min-width:0; }
.oa-head .oa-nombre{ font-size:14px; font-weight:700; color:var(--orbi-navy); }
.oa-head .oa-contexto{ font-size:11px; color:#667; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.oa-head .oa-cerrar{ background:var(--orbi-accent-bg); border:none; color:var(--orbi-mid); width:26px; height:26px; border-radius:50%; cursor:pointer; flex-shrink:0; display:flex; align-items:center; justify-content:center; }
.oa-head .oa-cerrar:hover{ background:rgba(var(--orbi-accent-rgb),.25); }

.oa-buscar{ padding:10px 12px; border-bottom:1px solid var(--orbi-border); flex-shrink:0; }
.oa-buscar .oa-input-wrap{ position:relative; display:flex; align-items:center; }
.oa-buscar .oa-input-wrap i{ position:absolute; left:11px; color:var(--orbi-muted); font-size:14px; }
.oa-buscar input{ width:100%; border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text); border-radius:999px; padding:9px 14px 9px 32px; font-size:13px; outline:none; }
.oa-buscar input:focus{ border-color:var(--orbi-accent); }

.oa-body{ flex:1; overflow-y:auto; padding:8px 12px 14px; }
.oa-vacio{ text-align:center; color:var(--orbi-muted); font-size:12.5px; padding:28px 14px; }
.oa-vacio i{ font-size:26px; opacity:.4; display:block; margin-bottom:8px; }

.oa-resultado{ display:flex; gap:10px; align-items:flex-start; padding:10px; border-radius:10px; cursor:pointer; text-align:left; width:100%; background:none; border:none; }
.oa-resultado:hover{ background:var(--orbi-input-bg); }
.oa-resultado .oa-r-ic{ width:30px; height:30px; border-radius:9px; background:var(--orbi-accent-bg); color:var(--orbi-accent); display:flex; align-items:center; justify-content:center; font-size:13px; flex-shrink:0; }
.oa-resultado .oa-r-tit{ display:block; font-size:12.5px; font-weight:600; color:var(--orbi-text); margin-bottom:2px; }
.oa-resultado .oa-r-res{ display:block; font-size:11.5px; color:var(--orbi-muted); line-height:1.4; }

.oa-detalle{ font-size:12.5px; color:var(--orbi-text); line-height:1.55; }
.oa-detalle h1,.oa-detalle h2,.oa-detalle h3{ font-size:13.5px; font-weight:700; margin:12px 0 6px; color:var(--orbi-text); }
.oa-detalle h1:first-child,.oa-detalle h2:first-child,.oa-detalle h3:first-child{ margin-top:0; }
.oa-detalle p{ margin:0 0 8px; }
.oa-detalle ul{ margin:0 0 8px; padding-left:18px; }
.oa-detalle code{ background:var(--orbi-input-bg); border-radius:4px; padding:1px 5px; font-size:11.5px; }
.oa-volver{ display:inline-flex; align-items:center; gap:5px; background:none; border:none; color:var(--orbi-accent); font-size:12px; font-weight:600; cursor:pointer; padding:0 0 10px; }

.oa-feedback{ display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-top:12px; padding-top:10px; border-top:1px solid var(--orbi-border); font-size:11.5px; color:var(--orbi-muted); }
.oa-feedback button{ border:1px solid var(--orbi-border); background:var(--orbi-surface); border-radius:999px; width:28px; height:28px; cursor:pointer; color:var(--orbi-text); flex-shrink:0; }
.oa-feedback button:hover{ border-color:var(--orbi-accent); color:var(--orbi-accent); }
.oa-feedback button.on{ background:var(--orbi-accent); border-color:var(--orbi-accent); color:#fff; }
.oa-feedback .oa-gracias{ font-size:11.5px; color:var(--orbi-teal); font-weight:600; }

/* ---------------------------------------------------------------------
   App-bar y pie de página REUTILIZABLES (snippets modhead / modfoot)
   Mismo encabezado/pie en todos los módulos.
   --------------------------------------------------------------------- */
.orbi-modhead{
  display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:12px;
  background:var(--orbi-surface); border-bottom:1px solid var(--orbi-border);
  padding:14px 22px; flex-shrink:0;
}
.orbi-modhead .marca{ font-size:24px; font-weight:800; color:var(--orbi-navy); letter-spacing:-.3px; }
.orbi-modhead .marca span{ color:var(--orbi-accent); }
.orbi-modhead .mh-actions{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }

.orbi-modfoot{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  background:var(--orbi-surface); border-top:1px solid var(--orbi-border);
  padding:9px 22px; font-size:12px; color:var(--orbi-muted); flex-shrink:0;
}
.orbi-modfoot .sep{ margin-left:auto; }
.orbi-modfoot b{ color:var(--orbi-text); font-weight:700; }
.orbi-modfoot b span{ color:var(--orbi-accent); }

/* =====================================================================
   ── ANIMACIONES Y TRANSICIONES ──  (mismo lenguaje que proveedores_2.css)
   slideDown para encabezados, fadeInUp para contenido/tarjetas, fade suave
   para áreas grandes. Respeta prefers-reduced-motion.
   ===================================================================== */
@keyframes orbiSlideDown{ from{ opacity:0; transform:translateY(-10px); } to{ opacity:1; transform:translateY(0); } }
@keyframes orbiFadeInUp{ from{ opacity:0; transform:translateY(10px); } to{ opacity:1; transform:translateY(0); } }
/* Variante atenuada: misma entrada pero termina en .6 (módulos deshabilitados).
   Necesaria porque la animación con fill-mode:both gana al opacity:.6 declarado. */
@keyframes orbiFadeInUpDim{ from{ opacity:0; transform:translateY(10px); } to{ opacity:.6; transform:translateY(0); } }
@keyframes orbiFadeIn{ from{ opacity:0; } to{ opacity:1; } }

/* Encabezado: entra deslizando desde arriba */
.orbi-modhead, .orbi-home-head{ animation:orbiSlideDown .35s ease both; }

/* Áreas de contenido: aparición suave entre secciones */
.orbi-home, .inv-menu, .orbi-ficha, .inv-split, .inv-tablewrap,
.orbi-pos-wrap, .cobro-card, .orbi-caja-card{ animation:orbiFadeIn .3s ease both; }
.orbi-modfoot{ animation:orbiFadeIn .5s ease both; }

/* Tarjetas/listas: suben al entrar (con escalonado en el menú INV-00) */
.inv-opt{ animation:orbiFadeInUp .4s ease both; }
.inv-opt:nth-child(1){ animation-delay:.04s; } .inv-opt:nth-child(2){ animation-delay:.10s; }
.inv-opt:nth-child(3){ animation-delay:.16s; } .inv-opt:nth-child(4){ animation-delay:.22s; }

/* Filas de tabla: realce al pasar/seleccionar (transición suave) */
.inv-table tbody tr, .orbi-ticket tbody tr{ transition:background .15s ease; }
.cart-row{ transition:transform .12s ease, background .15s ease, border-color .15s ease; }

/* Botón primario: leve realce táctil */
.btn-orbi, .inv-tb-btn{ transition:transform .15s ease, background .2s ease, box-shadow .2s ease; }
.btn-orbi:active, .inv-tb-btn:active{ transform:translateY(1px); }

/* Accesibilidad: desactiva animaciones si el usuario lo pidió */
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration:.01ms !important; animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
}

/* Página con encabezado/pie fijos arriba y abajo (home, configuración) */
.orbi-page{ min-height:100vh; display:flex; flex-direction:column; }
.orbi-page > .orbi-home{ flex:1 0 auto; min-height:0; }

/* =====================================================================
   ── Panel flotante (galería) ──  Reutilizable
   El contenido "flota" dentro de un panel blanco con sombra fría y una
   capa fantasma detrás (efecto pila). El lienzo aporta el aire alrededor.

   Aplícalo de dos formas, SIN tocar el HTML de las vistas:
     · con las clases .app-canvas (lienzo) + .orbi-float-panel (panel), o
     · mapeando los contenedores de un módulo a estos selectores (ver Compras).

   El marco del panel NO recorta (overflow visible) para que la sombra y la
   capa fantasma asomen; el scroll vive en una región interna (.orbi-float-scroll
   o el contenedor de tabla del módulo), así el marco flotante queda FIJO.
   ===================================================================== */
.app-canvas,
.orbi-compras .cmp-page{
  /* Degradado suave (tokens, válido en claro/oscuro): el aire de 24px flota el panel */
  background:radial-gradient(125% 90% at 50% -10%, var(--orbi-surface) 0%, var(--orbi-canvas) 55%, var(--orbi-gray-bg) 100%);
  padding:24px;
}

.orbi-float-panel,
.orbi-compras .cmp-wrap{
  position:relative;
  display:flex; flex-direction:column;
  background:var(--orbi-card);
  border-radius:var(--orbi-radius-float);
  box-shadow:var(--orbi-shadow-float);
  padding:20px;
  max-height:calc(100vh - 48px);   /* respeta el aire de 24px arriba y abajo */
  /* overflow visible (por defecto): deja asomar la sombra y la capa fantasma */
}

/* Capa fantasma detrás: misma forma, desplazada, más clara y transparente */
.orbi-float-panel::before,
.orbi-compras .cmp-wrap::before{
  content:""; position:absolute; inset:0; z-index:-1;
  border-radius:inherit;
  background:var(--orbi-card);
  box-shadow:var(--orbi-shadow-float);
  opacity:.5;
  transform:translate(12px,16px) scale(.99);
}

/* Región de scroll interna: el contenido se desplaza aquí y el marco queda fijo */
.orbi-float-scroll{ flex:1; min-height:0; overflow:auto; }

/* =====================================================================
   ── Botones con icono: icono + texto centrados (homologado) ──
   Los .btn de Bootstrap son inline-block y desalinean el icono;
   con inline-flex quedan perfectamente centrados (vertical y horizontal).
   ===================================================================== */
.btn,
.btn-orbi, .btn-orbi-outline,
.inv-tb-btn, .inv-back,
.nav-pills .nav-link{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  line-height:1.1;
}
/* El gap ya separa icono y texto: anula el margen extra de me-1/me-2 dentro de botones */
.btn > i, .inv-tb-btn > i, .inv-back > i, .nav-pills .nav-link > i{
  margin:0 !important; line-height:1;
}
/* Etiqueta de candado en tarjetas de módulo (icono + texto centrados) */
.modulo-card .candado{ display:inline-flex; align-items:center; gap:5px; }
/* Acciones del encabezado: todo centrado verticalmente */
.orbi-modhead .mh-actions{ align-items:center; }

/* =====================================================================
   ── Compras ──  (COMP-00 a COMP-04)
   Pantallas del diseño (tabla + modal flotante) homologadas al shell de
   OrbiCaja. Scoped a .orbi-compras para no chocar con otros módulos.
   ===================================================================== */
/* Shell homologado (como Configuración): barra y pie full-width; el contenido
   de las pantallas de datos flota dentro de un panel centrado.
   El lienzo (.cmp-page) y el panel (.cmp-wrap) heredan el patrón "Panel
   flotante" de arriba; aquí solo se centra y se fija el ancho máximo. */
body.orbi-compras{ min-height:100vh; display:flex; flex-direction:column; background:var(--orbi-gray-bg); }

/* Lienzo: centra el panel y le da el aire alrededor (ver .app-canvas) */
.orbi-compras .cmp-page{ flex:1; min-height:0; display:flex; justify-content:center; }
/* Panel flotante centrado (ver .orbi-float-panel) */
.orbi-compras .cmp-wrap{ width:100%; max-width:1100px; }

.orbi-compras #filters{ background:var(--orbi-input-bg); border-bottom:1px solid var(--orbi-border); padding:8px 12px; display:flex; gap:8px; align-items:center; flex-shrink:0; }
.orbi-compras #filters input, .orbi-compras #filters select{ font-size:13px; border-radius:var(--orbi-r-sm); border:1px solid var(--orbi-border); background:var(--orbi-surface); color:var(--orbi-text); padding:6px 10px; min-height:36px; outline:none; }
.orbi-compras #filters input{ flex:1; }
.orbi-compras #filters input:focus, .orbi-compras #filters select:focus{ border-color:var(--orbi-accent); }
/* Objetivo táctil >= 44px en pantallas de toque (no afecta escritorio) */
@media (pointer:coarse){
  .orbi-compras #filters input, .orbi-compras #filters select{ min-height:44px; }
}
.orbi-compras .hint{ padding:5px 12px; background:var(--orbi-input-bg); border-bottom:1px solid var(--orbi-border); font-size:11px; color:var(--orbi-muted); display:flex; align-items:center; gap:5px; flex-shrink:0; }

.orbi-compras #tbl-wrap{ flex:1; min-height:0; overflow:auto; background:var(--orbi-surface); }
.orbi-compras table{ width:100%; border-collapse:collapse; table-layout:fixed; }
.orbi-compras thead tr{ background:var(--orbi-input-bg); position:sticky; top:0; z-index:1; }
.orbi-compras th{ padding:8px 10px; font-size:10px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.4px; border-bottom:1px solid var(--orbi-border); text-align:left; white-space:nowrap; }
.orbi-compras tbody tr{ border-bottom:.5px solid var(--orbi-border); cursor:pointer; transition:background .12s ease; }
.orbi-compras tbody tr:hover{ background:var(--orbi-input-bg); }
.orbi-compras td{ padding:9px 10px; font-size:12px; color:var(--orbi-text); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:middle; }
.orbi-compras .td-nom{ font-weight:600; }
.orbi-compras .td-folio{ font-family:monospace; font-size:11px; font-weight:600; color:var(--orbi-accent); }
.orbi-compras .td-r{ text-align:right; font-variant-numeric:tabular-nums; }
.orbi-compras .td-saldo{ text-align:right; font-weight:600; color:var(--orbi-red); font-variant-numeric:tabular-nums; }
.orbi-compras .td-saldo-ok{ text-align:right; font-weight:600; color:var(--orbi-teal); font-variant-numeric:tabular-nums; }

.orbi-compras .bdg{ font-size:10px; padding:3px 9px; border-radius:20px; font-weight:600; }
.orbi-compras .b-act{ background:#D6F0E4; color:#085041; }   .orbi-compras .b-ina{ background:#F3F4F6; color:#6B7280; }
.orbi-compras .b-cred{ background:#E8E8FA; color:#3B3BAF; }
.orbi-compras .b-moral{ background:#E6F1FB; color:#0C447C; } .orbi-compras .b-fisica{ background:#FAEEDA; color:#633806; }
.orbi-compras .b-bor{ background:#E8E8FA; color:#3B3BAF; }   .orbi-compras .b-env{ background:#FAEEDA; color:#633806; }
.orbi-compras .b-rec{ background:#D6F0E4; color:#085041; }   .orbi-compras .b-can{ background:#F3F4F6; color:#6B7280; }
.orbi-compras .b-oc{ background:#E8E8FA; color:#3B3BAF; }    .orbi-compras .b-dir{ background:#FAEEDA; color:#633806; }
.orbi-compras .b-venc{ background:#FDE8EA; color:#CE1126; }  .orbi-compras .b-prox{ background:#FAEEDA; color:#854F0B; }
.orbi-compras .b-dia{ background:#D6F0E4; color:#085041; }   .orbi-compras .b-pag{ background:#F3F4F6; color:#6B7280; }

.orbi-compras #pie{ padding:7px 14px; border-top:1px solid var(--orbi-border); background:var(--orbi-input-bg); display:flex; gap:18px; font-size:11px; color:var(--orbi-muted); flex-shrink:0; flex-wrap:wrap; }
.orbi-compras #pie .fn{ font-weight:600; color:var(--orbi-text); }

.orbi-compras .overlay{ display:none; position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:1080; align-items:center; justify-content:center; }
.orbi-compras .overlay.show{ display:flex; }
.orbi-compras .modal-ficha, .orbi-compras .modal-oc, .orbi-compras .modal-rec, .orbi-compras .modal-cxp{ background:var(--orbi-surface); border-radius:var(--orbi-r-lg); width:600px; max-height:90vh; overflow:hidden; display:flex; flex-direction:column; box-shadow:0 20px 50px rgba(26,26,110,.25); animation:orbiFadeInUp .18s ease; }
.orbi-compras .modal-oc, .orbi-compras .modal-rec{ width:660px; }
.orbi-compras .modal-ficha{ width:580px; }
.orbi-compras .mhdr{ background:var(--orbi-navy); padding:11px 16px; display:flex; align-items:center; gap:10px; flex-shrink:0; }
.orbi-compras .micon{ width:34px; height:34px; border-radius:var(--orbi-r-sm); background:rgba(255,255,255,.15); display:flex; align-items:center; justify-content:center; color:#fff; font-size:17px; flex-shrink:0; }
.orbi-compras .minfo{ flex:1; min-width:0; }
.orbi-compras .mnom{ font-size:14px; font-weight:600; color:#fff; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.orbi-compras .msub{ font-size:11px; color:rgba(255,255,255,.6); }
.orbi-compras .mbadge{ font-size:10px; padding:3px 9px; border-radius:20px; background:rgba(255,255,255,.15); color:rgba(255,255,255,.85); white-space:nowrap; flex-shrink:0; }
.orbi-compras .btn-x{ background:rgba(255,255,255,.15); border:.5px solid rgba(255,255,255,.3); border-radius:var(--orbi-r-sm); color:#fff; font-size:15px; font-weight:700; width:30px; height:30px; cursor:pointer; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.orbi-compras .btn-cancel-hdr{ background:rgba(255,255,255,.12); border:.5px solid rgba(255,255,255,.25); border-radius:var(--orbi-r-sm); color:#fff; font-size:12px; padding:5px 12px; cursor:pointer; white-space:nowrap; flex-shrink:0; }
.orbi-compras .btn-confirm-hdr{ background:var(--orbi-teal); border:.5px solid #0A5A46; border-radius:var(--orbi-r-sm); color:#fff; font-size:12px; font-weight:600; padding:5px 14px; cursor:pointer; white-space:nowrap; flex-shrink:0; display:flex; align-items:center; gap:5px; }
.orbi-compras .mbody{ overflow-y:auto; flex:1; padding:14px 16px; display:flex; flex-direction:column; gap:12px; }
.orbi-compras .sec{ font-size:10px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; padding-bottom:5px; border-bottom:1px solid var(--orbi-border); margin-bottom:8px; }
.orbi-compras .fld{ display:flex; flex-direction:column; gap:3px; margin-bottom:6px; }
.orbi-compras .fld label{ font-size:10px; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.4px; }
.orbi-compras .fld input, .orbi-compras .fld select, .orbi-compras .fld textarea{ font-size:12px; border-radius:var(--orbi-r-sm); border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text); padding:7px 9px; width:100%; outline:none; }
.orbi-compras .fld input:focus, .orbi-compras .fld select:focus, .orbi-compras .fld textarea:focus{ border-color:var(--orbi-accent); background:var(--orbi-surface); }
.orbi-compras .fld input:disabled, .orbi-compras .fld select:disabled, .orbi-compras .fld textarea:disabled{ opacity:.7; cursor:default; }
.orbi-compras .r2{ display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.orbi-compras .r3{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; }

.orbi-compras .tipo-selector, .orbi-compras .flujo-selector{ display:flex; background:var(--orbi-input-bg); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-md); overflow:hidden; margin-bottom:10px; }
.orbi-compras .tipo-opt, .orbi-compras .flujo-opt{ flex:1; padding:8px 10px; font-size:12px; font-weight:600; text-align:center; cursor:pointer; color:var(--orbi-muted); border:none; background:transparent; transition:all .15s; }
.orbi-compras .tipo-opt.act-moral{ background:#E6F1FB; color:#0C447C; }  .orbi-compras .tipo-opt.act-fisica{ background:#FAEEDA; color:#633806; }
.orbi-compras .flujo-opt.act-oc{ background:#E8E8FA; color:#3B3BAF; }   .orbi-compras .flujo-opt.act-dir{ background:#FAEEDA; color:#633806; }

.orbi-compras .tog-row{ display:flex; align-items:center; justify-content:space-between; background:var(--orbi-input-bg); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-sm); padding:8px 10px; margin-bottom:6px; }
.orbi-compras .tog-lbl{ font-size:12px; font-weight:600; color:var(--orbi-text); }
.orbi-compras .sw{ position:relative; width:38px; height:21px; flex-shrink:0; cursor:pointer; }
.orbi-compras .sw input{ opacity:0; position:absolute; width:0; height:0; }
.orbi-compras .track{ position:absolute; inset:0; background:#9CA3AF; border-radius:11px; transition:background .2s; }
.orbi-compras .thumb{ position:absolute; top:2px; left:2px; width:17px; height:17px; background:#fff; border-radius:50%; transition:transform .2s; }
.orbi-compras .sw input:checked ~ .track{ background:var(--orbi-teal); }
.orbi-compras .sw input:checked ~ .thumb{ transform:translateX(17px); }

.orbi-compras .mfooter{ padding:10px 16px; border-top:1px solid var(--orbi-border); display:flex; gap:8px; justify-content:flex-end; flex-shrink:0; background:var(--orbi-input-bg); }
.orbi-compras .btn-c{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-sm); color:var(--orbi-muted); font-size:12px; padding:7px 14px; cursor:pointer; }
.orbi-compras .btn-e{ background:var(--orbi-accent); border:none; border-radius:var(--orbi-r-sm); color:#fff; font-size:12px; font-weight:600; padding:7px 14px; cursor:pointer; }
.orbi-compras .btn-env{ background:var(--orbi-amber); border:none; border-radius:var(--orbi-r-sm); color:#fff; font-size:12px; font-weight:600; padding:7px 14px; cursor:pointer; }
.orbi-compras .btn-g{ background:var(--orbi-teal); border:none; border-radius:var(--orbi-r-sm); color:#fff; font-size:12px; font-weight:600; padding:7px 14px; cursor:pointer; }

.orbi-compras table.part, .orbi-compras table.arts, .orbi-compras table.abonos{ width:100%; border-collapse:collapse; }
.orbi-compras table.part th, .orbi-compras table.arts th, .orbi-compras table.abonos th{ padding:5px 8px; font-size:10px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; background:var(--orbi-input-bg); border-bottom:1px solid var(--orbi-border); text-align:left; }
.orbi-compras table.part td, .orbi-compras table.arts td, .orbi-compras table.abonos td{ padding:5px 6px; border-bottom:.5px solid var(--orbi-border); font-size:12px; }
.orbi-compras table.part td input, .orbi-compras table.part td select, .orbi-compras table.arts td input, .orbi-compras table.arts td select{ font-size:12px; border-radius:var(--orbi-r-sm); border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text); padding:5px 7px; width:100%; outline:none; }
.orbi-compras table.part td input:disabled, .orbi-compras table.arts td input:disabled, .orbi-compras table.arts td select:disabled{ opacity:.7; cursor:default; }
/* El <select> de unidad dentro de la partida NO debe tomar el min-width/alto del select
   nativo global (160×44) o revienta la columna; se compacta a la celda con caret chico. */
.orbi-compras table.part td select.p-uni{
  min-width:0; min-height:0; height:auto; font-size:12px; font-weight:500;
  padding:5px 20px 5px 7px; line-height:1.2;
  background-position:right 6px center; background-size:10px 8px;
}
/* Campos numéricos sin flechas de step (permiten decimales, sin spinners arriba/abajo). */
.orbi-compras input.no-spin::-webkit-outer-spin-button, .orbi-compras input.no-spin::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0; }
.orbi-compras input.no-spin{ -moz-appearance:textfield; appearance:textfield; }
.orbi-compras .td-imp{ text-align:right; font-weight:600; color:var(--orbi-teal); }
/* Autocompletar de artículos (busca por SKU/nombre, filtra por proveedor). */
.orbi-compras td.cell-art{ position:relative; }
.orbi-compras .ac-pop{ position:fixed; z-index:1100; display:none; background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-md); box-shadow:0 12px 32px rgba(26,26,110,.20); max-height:248px; overflow-y:auto; padding:4px; }
.orbi-compras .ac-item{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:7px 10px; border-radius:var(--orbi-r-sm); cursor:pointer; font-size:12.5px; color:var(--orbi-text); }
.orbi-compras .ac-item:hover, .orbi-compras .ac-item.on{ background:var(--orbi-accent-bg); }
.orbi-compras .ac-nom{ font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.orbi-compras .ac-sku{ font-family:monospace; font-size:11px; color:var(--orbi-muted); flex-shrink:0; }
.orbi-compras .ac-empty{ padding:11px 12px; font-size:12px; color:var(--orbi-muted); text-align:center; }
/* Autocompletar de artículo en Inventario > Movimientos (mismo look que compras). */
.orbi-inv .ac-pop{ position:fixed; z-index:1100; display:none; background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-md); box-shadow:0 12px 32px rgba(26,26,110,.20); max-height:248px; overflow-y:auto; padding:4px; }
.orbi-inv .ac-item{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:8px 10px; border-radius:var(--orbi-r-sm); cursor:pointer; font-size:13px; color:var(--orbi-text); }
.orbi-inv .ac-item:hover, .orbi-inv .ac-item.on{ background:var(--orbi-accent-bg); }
.orbi-inv .ac-nom{ font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.orbi-inv .ac-sku{ font-family:monospace; font-size:11px; color:var(--orbi-muted); flex-shrink:0; }
.orbi-inv .ac-empty{ padding:11px 12px; font-size:12px; color:var(--orbi-muted); text-align:center; }
.orbi-compras .abono-monto{ text-align:right; font-weight:600; color:var(--orbi-teal); }
.orbi-compras .lnk-del{ color:var(--orbi-red); cursor:pointer; }
.orbi-compras .btn-add{ margin-top:6px; background:var(--orbi-surface); border:1px solid var(--orbi-accent); border-radius:var(--orbi-r-sm); padding:6px 11px; font-size:11px; color:var(--orbi-accent); font-weight:600; cursor:pointer; display:inline-flex; align-items:center; gap:5px; text-decoration:none; transition:background .15s ease, color .15s ease; }
.orbi-compras .btn-add:hover{ background:var(--orbi-accent); color:#fff; }
.orbi-compras .btn-add:disabled{ opacity:.55; cursor:default; background:var(--orbi-surface); color:var(--orbi-accent); }
.orbi-compras .diff-ok{ text-align:center; color:var(--orbi-teal); font-weight:600; }
.orbi-compras .diff-warn{ text-align:center; color:var(--orbi-amber); font-weight:600; }
.orbi-compras .diff-bad{ text-align:center; color:var(--orbi-red); font-weight:600; }

.orbi-compras .resumen, .orbi-compras .fact-res{ background:var(--orbi-input-bg); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-md); padding:10px 14px; }
.orbi-compras .res-row, .orbi-compras .fr-row{ display:flex; justify-content:space-between; font-size:12px; padding:3px 0; color:var(--orbi-muted); }
.orbi-compras .res-row span:last-child, .orbi-compras .fr-row span:last-child{ font-weight:600; color:var(--orbi-text); }
.orbi-compras .res-total{ display:flex; justify-content:space-between; font-size:15px; font-weight:700; padding-top:8px; margin-top:6px; border-top:1px solid var(--orbi-border); }
.orbi-compras .fr-saldo{ display:flex; justify-content:space-between; font-size:16px; font-weight:700; padding-top:8px; margin-top:6px; border-top:1px solid var(--orbi-border); }
.orbi-compras .fr-saldo span:last-child{ color:var(--orbi-red); }
.orbi-compras .fr-saldo-ok span:last-child{ color:var(--orbi-teal); }
.orbi-compras .alert-diff{ background:#FFFBEB; border:1px solid #FCD34D; border-radius:var(--orbi-r-md); padding:8px 12px; font-size:12px; color:#92400E; }
.orbi-compras .info-banner{ background:#EFF6FF; border:1px solid #BFDBFE; border-radius:var(--orbi-r-md); padding:8px 12px; font-size:12px; color:#1E40AF; margin-bottom:8px; }
.orbi-compras .abono-form{ background:var(--orbi-accent-bg); border:1px solid #AFA9EC; border-radius:var(--orbi-r-md); padding:12px 14px; }
.orbi-compras #form-msg .alert{ font-size:12px; padding:6px 10px; margin:0; }

.orbi-compras .cmp-menu{ flex:1; padding:24px; max-width:860px; margin:0 auto; width:100%; }
.orbi-compras .cmp-menu h1{ font-size:21px; font-weight:600; color:var(--orbi-text); margin:0 0 4px; }
.orbi-compras .cmp-menu .sub{ font-size:13px; color:var(--orbi-muted); margin:0; }
.orbi-compras .sec-label{ font-size:11px; font-weight:600; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; margin:22px 0 10px; }
.orbi-compras .opciones-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:14px; }
.orbi-compras .opcion-card{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:14px; padding:18px; cursor:pointer; text-decoration:none; display:flex; flex-direction:column; gap:10px; min-height:118px; transition:border-color .15s, transform .1s, box-shadow .15s; animation:orbiFadeInUp .3s ease both; }
.orbi-compras .opcion-card:hover{ border-color:var(--orbi-accent); transform:translateY(-2px); box-shadow:0 6px 18px rgba(var(--orbi-accent-rgb),.12); }
.orbi-compras .oc-icon{ width:44px; height:44px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:22px; }
.orbi-compras .oc-nombre{ font-size:14px; font-weight:600; color:var(--orbi-text); }
.orbi-compras .oc-desc{ font-size:12px; color:var(--orbi-muted); line-height:1.4; }
.orbi-compras .oc-arrow{ margin-top:auto; align-self:flex-end; color:var(--orbi-accent); }
.orbi-compras .icon-teal{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.orbi-compras .icon-purple{ background:var(--orbi-accent-bg); color:var(--orbi-accent); }
.orbi-compras .icon-amber{ background:var(--orbi-amber-bg); color:var(--orbi-amber); }
.orbi-compras .icon-blue{ background:#E6F1FB; color:#185FA5; }

/* =====================================================================
   ── SHELL ADMIN ──  Sidebar azul global + topbar claro
   Se aplica a páginas con body.orbi-app (todos los módulos MENOS el POS,
   que conserva su rail). El sidebar es position:fixed y el contenido se
   desplaza con padding-left, así funciona sin importar el display del body
   (bloque, flex-column, etc.). Va al final para ganar en la cascada.
   ===================================================================== */

/* Lienzo: el contenido se recorre a la derecha del sidebar fijo */
body.orbi-app{
  background:var(--orbi-canvas);
  padding-left:var(--orbi-sb-w);
  transition:padding-left var(--orbi-dur) var(--orbi-ease);
}
body.orbi-app.orbi-collapsed{ padding-left:var(--orbi-sb-cw); }

/* ---------- Sidebar ---------- */
.orbi-sidebar{
  position:fixed; top:0; left:0; bottom:0; z-index:1040;
  width:var(--orbi-sb-w);
  display:flex; flex-direction:column;
  background:linear-gradient(180deg,var(--orbi-sidebar) 0%,var(--orbi-sidebar-2) 100%);
  color:var(--orbi-sidebar-fg);
  box-shadow:0 0 40px rgba(30,50,110,.18);
  transition:width var(--orbi-dur) var(--orbi-ease), transform var(--orbi-dur) var(--orbi-ease);
  overflow:hidden;
}
.orbi-collapsed .orbi-sidebar{ width:var(--orbi-sb-cw); }

/* Encabezado del sidebar: logo + colapsar */
.orbi-sidebar .sb-head{
  display:flex; align-items:center; gap:10px;
  padding:18px 18px 14px; min-height:64px; flex-shrink:0;
}
.orbi-sidebar .sb-logo{ font-size:22px; font-weight:800; letter-spacing:-.4px; color:#fff; white-space:nowrap; }
.orbi-sidebar .sb-logo span{ color:#BFD2FF; }

/* Logomark: logo real de la marca + "ondas" animadas para llamar la atención. */
.orbi-sidebar .sb-logomark{
  position:relative; flex-shrink:0;
  width:46px; height:46px; border-radius:12px;
  display:flex; align-items:center; justify-content:center;
}
.orbi-sidebar .sb-logomark img{
  position:relative; z-index:2;
  width:38px; height:38px; object-fit:contain; display:block;
}
.orbi-sidebar .sb-logomark .sb-wave{
  position:absolute; top:50%; left:50%; z-index:1; pointer-events:none;
  width:40px; height:40px; margin:-20px 0 0 -20px; border-radius:50%;
  border:2px solid rgba(var(--orbi-accent2-rgb),.55);
  opacity:0; animation:sbWave 3s ease-out infinite;
}
.orbi-sidebar .sb-logomark .sb-wave-2{ border-color:rgba(var(--orbi-accent-rgb),.5); animation-delay:1.5s; }
@keyframes sbWave{
  0%   { transform:scale(.75); opacity:.6; }
  70%  { opacity:.12; }
  100% { transform:scale(1.9); opacity:0; }
}
@media (prefers-reduced-motion: reduce){
  .orbi-sidebar .sb-logomark .sb-wave{ animation:none; display:none; }
}
.orbi-sidebar .sb-collapse{
  margin-left:auto; width:34px; height:34px; border-radius:10px;
  border:1px solid rgba(255,255,255,.22); background:rgba(255,255,255,.10);
  color:#fff; font-size:16px; cursor:pointer; display:flex; align-items:center; justify-content:center;
  flex-shrink:0; transition:background var(--orbi-dur-fast) var(--orbi-ease);
}
.orbi-sidebar .sb-collapse:hover{ background:rgba(255,255,255,.20); }

/* Navegación */
.orbi-sidebar .sb-nav{ flex:1 1 auto; overflow-y:auto; overflow-x:hidden; padding:6px 12px; }
.orbi-sidebar .sb-nav::-webkit-scrollbar{ width:6px; }
.orbi-sidebar .sb-nav::-webkit-scrollbar-thumb{ background:rgba(255,255,255,.22); border-radius:3px; }
.orbi-sidebar .sb-seclabel{
  font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase;
  color:var(--orbi-sidebar-muted); padding:14px 12px 6px; white-space:nowrap;
}
.orbi-sidebar .sb-link{
  display:flex; align-items:center; gap:12px;
  padding:11px 12px; margin:2px 0; border-radius:12px;
  color:var(--orbi-sidebar-muted); font-weight:600; font-size:14px;
  min-height:var(--orbi-touch); white-space:nowrap;
  transition:background var(--orbi-dur-fast) var(--orbi-ease), color var(--orbi-dur-fast) var(--orbi-ease);
}
.orbi-sidebar .sb-link i{ font-size:19px; width:24px; text-align:center; flex-shrink:0; }
.orbi-sidebar .sb-link .sb-txt{ overflow:hidden; text-overflow:ellipsis; }
.orbi-sidebar .sb-link:hover{ background:var(--orbi-sidebar-hover); color:#fff; text-decoration:none; }
.orbi-sidebar .sb-link.activo{ background:var(--orbi-sidebar-active); color:#fff; box-shadow:inset 3px 0 0 #fff; }
.orbi-sidebar .sb-link.bloqueado{ opacity:.5; cursor:not-allowed; }
.orbi-sidebar .sb-link.bloqueado .sb-lock{ margin-left:auto; font-size:13px; }

/* Perfil del usuario (abajo) */
.orbi-sidebar .sb-user{
  display:flex; align-items:center; gap:11px; flex-shrink:0;
  padding:14px 16px; margin:8px 12px 14px; border-radius:14px;
  background:rgba(255,255,255,.10); border:1px solid rgba(255,255,255,.14);
}
.orbi-sidebar .sb-ava{
  width:38px; height:38px; border-radius:50%; flex-shrink:0;
  background:rgba(255,255,255,.20); color:#fff; font-weight:700; font-size:14px;
  display:flex; align-items:center; justify-content:center;
}
.orbi-sidebar .sb-uinfo{ min-width:0; line-height:1.25; }
.orbi-sidebar .sb-uname{ font-size:13.5px; font-weight:700; color:#fff; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.orbi-sidebar .sb-umail{ font-size:11.5px; color:var(--orbi-sidebar-muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* Estado colapsado: oculta textos, centra iconos */
.orbi-collapsed .orbi-sidebar .sb-logo span,
.orbi-collapsed .orbi-sidebar .sb-txt,
.orbi-collapsed .orbi-sidebar .sb-seclabel,
.orbi-collapsed .orbi-sidebar .sb-uinfo,
.orbi-collapsed .orbi-sidebar .sb-lock{ display:none; }
.orbi-collapsed .orbi-sidebar .sb-head{ justify-content:center; padding:18px 0 14px; }
.orbi-collapsed .orbi-sidebar .sb-collapse{ display:none; }
.orbi-collapsed .orbi-sidebar .sb-logo{ font-size:18px; }
.orbi-collapsed .orbi-sidebar .sb-link{ justify-content:center; padding:11px 0; }
.orbi-collapsed .orbi-sidebar .sb-user{ justify-content:center; padding:12px 0; margin-inline:10px; }

/* ---------- Inicio: botón circular destacado ----------
   Vive en el flujo de la navegación, en su propia fila centrada a media
   altura del menú (entre los grupos de íconos), para no encimarse con ningún
   ítem. Flota sobre una línea divisoria, con el mismo gradiente del avatar de
   perfil, como ancla clara para volver al home. */
.orbi-sidebar .sb-home-row{
  display:flex; align-items:center; justify-content:center;
  position:relative; margin:14px 0; min-height:var(--orbi-touch);
}
.orbi-sidebar .sb-home-row::before{   /* línea divisoria detrás del botón */
  content:""; position:absolute; left:12px; right:12px; top:50%; height:1px;
  background:rgba(255,255,255,.16);
}
.orbi-home-fab{
  position:relative; z-index:1;
  display:flex; align-items:center; justify-content:center;
  width:48px; height:48px; border-radius:50%; flex-shrink:0;
  background:linear-gradient(135deg,var(--orbi-navy),var(--orbi-accent));
  color:#fff; font-size:21px; line-height:0;
  border:none;   /* sin borde: se funde con el tema seleccionado */
  box-shadow:0 10px 26px rgba(15,25,60,.6), 0 0 0 4px rgba(255,255,255,.14), 0 2px 6px rgba(15,25,60,.4);
  transition:transform var(--orbi-dur-fast) var(--orbi-ease),
             box-shadow var(--orbi-dur-fast) var(--orbi-ease);
}
.orbi-home-fab:hover,
.orbi-home-fab:focus-visible{
  color:#fff; text-decoration:none; outline:none;
  transform:scale(1.09);
  box-shadow:0 12px 26px rgba(15,25,60,.6), 0 2px 6px rgba(15,25,60,.4);
}
.orbi-home-fab:active{ transform:scale(1.02); }
.orbi-home-fab.activo{ box-shadow:0 8px 20px rgba(15,25,60,.5), 0 0 0 4px rgba(255,255,255,.35); }
.orbi-collapsed .orbi-home-fab{ width:56px; height:56px; font-size:31px; }

/* Backdrop (solo móvil) */
.orbi-sb-backdrop{
  position:fixed; inset:0; z-index:1035; background:rgba(15,20,32,.5);
  opacity:0; visibility:hidden; transition:opacity var(--orbi-dur) var(--orbi-ease);
}

/* ---------- Pestaña lateral (tirador del drawer, solo móvil) ----------
   Vive FUERA del sidebar (que recorta overflow) y se desliza en sincronía con
   él usando el mismo transform/timing: pegada al borde izquierdo de la pantalla
   cuando el menú está cerrado, y al borde derecho del drawer cuando está abierto
   (para poder cerrarlo). El chevron gira para indicar la acción. Se pinta con el
   gradiente del menú, así combina con el tema/color seleccionado. */
.orbi-sb-handle{
  display:none;                              /* solo aparece en móvil (media query) */
  position:fixed; left:0; top:50%; z-index:1041;
  transform:translate(0,-50%);
  width:26px; height:64px; padding:0;
  align-items:center; justify-content:center;
  cursor:pointer; font-size:18px;
  /* Superficie clara u oscura (según el modo); el acento solo tiñe el chevron
     y un borde muy sutil, para estar presente sin ser intrusivo. */
  background:var(--orbi-card);
  color:var(--orbi-accent);
  border:1px solid var(--orbi-border);
  border-left:none;
  border-radius:0 14px 14px 0;
  box-shadow:2px 0 14px rgba(15,25,60,.14);
  transition:transform var(--orbi-dur) var(--orbi-ease),
             box-shadow var(--orbi-dur-fast) var(--orbi-ease),
             background var(--orbi-dur-fast) var(--orbi-ease);
}
.orbi-sb-handle i{ transition:transform var(--orbi-dur) var(--orbi-ease); }
.orbi-sb-handle:hover,
.orbi-sb-handle:focus-visible{ outline:none; background:var(--orbi-accent-bg); box-shadow:2px 0 20px rgba(15,25,60,.22); }
/* Menú abierto: la pestaña viaja al borde derecho del drawer y el chevron gira. */
body.orbi-app.sb-open .orbi-sb-handle{ transform:translate(var(--orbi-sb-w),-50%); }
body.orbi-app.sb-open .orbi-sb-handle i{ transform:rotate(180deg); }

/* ---------- Topbar (modhead reconvertido) ---------- */
.orbi-modhead.orbi-topbar{
  position:sticky; top:0; z-index:30;
  background:var(--orbi-card); border-bottom:1px solid var(--orbi-border);
  padding:10px 22px; gap:14px; min-height:64px; justify-content:flex-start;
}
.orbi-topbar .orbi-sb-toggle{
  width:40px; height:40px; border-radius:11px; flex-shrink:0;
  border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text);
  font-size:18px; cursor:pointer; display:flex; align-items:center; justify-content:center;
  transition:background var(--orbi-dur-fast) var(--orbi-ease);
}
.orbi-topbar .orbi-sb-toggle:hover{ background:var(--orbi-gray-bg); }
.orbi-topbar .tb-heading{ margin-right:auto; min-width:0; }
.orbi-topbar .tb-title{ font-size:18px; font-weight:700; color:var(--orbi-text); line-height:1.2; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.orbi-topbar .tb-sub{ font-size:12.5px; color:var(--orbi-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.orbi-topbar .tb-tools{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.orbi-topbar .tb-search{
  position:relative;
  display:flex; align-items:center; gap:8px;
  background:var(--orbi-input-bg); border:1px solid var(--orbi-border);
  border-radius:var(--orbi-r-pill); padding:0 14px; height:42px; color:var(--orbi-muted);
}
.orbi-topbar .tb-search input{ border:0; background:transparent; outline:none; color:var(--orbi-text); font-size:14px; min-width:150px; }

/* ---------- Autocompletar del buscador global (flyout bajo el pill) ---------- */
.tb-search-pop{
  position:absolute; top:calc(100% + 8px); right:0; z-index:60;
  width:400px; max-width:92vw;
  background:var(--orbi-card); border:1px solid var(--orbi-border);
  border-radius:16px; box-shadow:var(--orbi-shadow-float); overflow:hidden;
  animation:orbiSlideDown .16s var(--orbi-ease) both;
}
.tb-search-pop .ac-scroll{ max-height:min(440px,64vh); overflow-y:auto; }
.tb-search-pop .ac-grp-h{
  display:flex; align-items:center; gap:8px; padding:9px 14px 5px;
  font-size:10.5px; font-weight:800; letter-spacing:.04em; text-transform:uppercase; color:var(--orbi-muted);
}
.tb-search-pop .ac-grp-h .ac-gcount{ margin-left:auto; font-weight:700; color:var(--orbi-muted); opacity:.7; }
.tb-search-pop .ac-item{
  display:flex; align-items:flex-start; gap:10px; padding:9px 14px; cursor:pointer;
  text-decoration:none; color:var(--orbi-text); border-top:.5px solid var(--orbi-border);
}
.tb-search-pop .ac-right{ margin-top:1px; }
.tb-search-pop .ac-item:hover, .tb-search-pop .ac-item.on{ background:rgba(var(--orbi-accent-rgb),.08); }
.tb-search-pop .ac-ico{
  width:30px; height:30px; flex-shrink:0; border-radius:9px; display:flex; align-items:center; justify-content:center; font-size:15px;
}
.tb-search-pop .ac-tx{ min-width:0; flex:1; }
.tb-search-pop .ac-nom{ font-size:13.5px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.tb-search-pop .ac-sub{ display:block; font-size:11.5px; line-height:1.45; color:var(--orbi-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.tb-search-pop .ac-right{ font-size:12.5px; font-weight:700; color:var(--orbi-teal); flex-shrink:0; }
.tb-search-pop .ac-state{ padding:26px 18px; text-align:center; color:var(--orbi-muted); }
.tb-search-pop .ac-state i{ font-size:26px; opacity:.7; display:block; margin-bottom:6px; color:var(--orbi-accent); }
.tb-search-pop .ac-state p{ margin:0; font-size:13px; font-weight:700; color:var(--orbi-text); }
.tb-search-pop .ac-foot{
  border-top:1px solid var(--orbi-border); text-align:center; padding:9px;
  font-size:12.5px; font-weight:600; color:var(--orbi-accent); cursor:pointer; background:transparent;
}
.tb-search-pop .ac-foot:hover{ background:rgba(var(--orbi-accent-rgb),.06); }
.orbi-topbar .tb-icon{
  position:relative; width:42px; height:42px; border-radius:50%; flex-shrink:0;
  border:1px solid var(--orbi-border); background:var(--orbi-card); color:var(--orbi-text);
  font-size:18px; cursor:pointer; display:flex; align-items:center; justify-content:center;
  transition:background var(--orbi-dur-fast) var(--orbi-ease);
}
.orbi-topbar .tb-icon:hover{ background:var(--orbi-gray-bg); }
.orbi-topbar .tb-dot{ position:absolute; top:9px; right:10px; width:8px; height:8px; border-radius:50%; background:var(--orbi-cat-red); border:2px solid var(--orbi-card); }
.orbi-topbar .tb-ava{
  width:42px; height:42px; border-radius:50%; flex-shrink:0;
  background:linear-gradient(135deg,var(--orbi-navy),var(--orbi-accent)); color:#fff;
  font-weight:700; font-size:15px; display:flex; align-items:center; justify-content:center;
}

/* ---------- Responsive: sidebar como drawer en pantallas chicas ---------- */
@media (max-width:900px){
  body.orbi-app{ padding-left:0; }
  .orbi-sidebar{ transform:translateX(-100%); width:var(--orbi-sb-w); }
  body.orbi-app.sb-open .orbi-sidebar{ transform:translateX(0); }
  body.orbi-app.sb-open .orbi-sb-backdrop{ opacity:1; visibility:visible; }
  .orbi-sb-handle{ display:flex; }          /* pestaña visible solo en móvil */
  /* En móvil el colapso no aplica: el drawer siempre se abre completo */
  body.orbi-app.orbi-collapsed{ padding-left:0; }
  .orbi-collapsed .orbi-sidebar .sb-txt,
  .orbi-collapsed .orbi-sidebar .sb-uinfo,
  .orbi-collapsed .orbi-sidebar .sb-seclabel,
  .orbi-collapsed .orbi-sidebar .sb-logo span{ display:revert; }
  .orbi-topbar .tb-search{ display:none; }   /* el buscador pill no cabe en móvil */
}

/* ---------- Sistema de movimiento reutilizable (reveal con stagger) ---------- */
.orbi-reveal{
  opacity:0; transform:translateY(12px);
  transition:opacity var(--orbi-dur) var(--orbi-ease), transform var(--orbi-dur) var(--orbi-ease);
  transition-delay:calc(var(--i,0) * 60ms);
}
.orbi-reveal.is-in{ opacity:1; transform:none; }

/* Elevación al hover SOLO en dispositivos con puntero fino (no táctil) */
@media (hover:hover){
  .orbi-hoverable{ transition:transform var(--orbi-dur-fast) var(--orbi-ease), box-shadow var(--orbi-dur-fast) var(--orbi-ease); }
  .orbi-hoverable:hover{ transform:translateY(-2px); box-shadow:0 14px 30px rgba(30,50,110,.16); }
}

/* Entrada suave del sidebar/topbar */
.orbi-sidebar{ animation:orbiFadeIn var(--orbi-dur) var(--orbi-ease) both; }

/* Reduced-motion: el reveal debe quedar VISIBLE aunque no se anime (no oculto) */
@media (prefers-reduced-motion: reduce){
  .orbi-reveal{ opacity:1 !important; transform:none !important; }
  body.orbi-app{ transition:none; }
  .orbi-sidebar, .orbi-sb-backdrop, .orbi-sb-handle, .orbi-sb-handle i{ transition:none; }
}

/* =====================================================================
   ── BÚSQUEDA GLOBAL ──  Página de resultados (bus00)
   ===================================================================== */
.bus-wrap{ max-width:980px; margin-inline:auto; }
.bus-empty{ text-align:center; padding:48px 24px; }
.bus-empty i{ font-size:42px; color:var(--orbi-accent); }
.bus-empty h3{ margin:14px 0 6px; font-weight:700; color:var(--orbi-text); }
.bus-empty p{ color:var(--orbi-muted); max-width:520px; margin-inline:auto; }
.bus-sec{ margin-bottom:26px; }
.bus-sec-head{ display:flex; align-items:center; gap:10px; margin:4px 2px 12px; }
.bus-sec-head h4{ margin:0; font-size:16px; font-weight:700; color:var(--orbi-text); }
.bus-ico{ width:34px; height:34px; border-radius:10px; display:flex; align-items:center; justify-content:center; font-size:17px; }
.bus-count{ background:var(--orbi-gray-bg); color:var(--orbi-muted); font-size:12px; font-weight:700; border-radius:var(--orbi-r-pill); padding:2px 10px; }
.bus-list{ display:flex; flex-direction:column; gap:10px; }
.bus-item{ display:flex; align-items:center; gap:14px; padding:14px 18px; color:var(--orbi-text); }
.bus-item .bus-main{ min-width:0; flex:1; }
.bus-title{ font-weight:700; font-size:15px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bus-meta{ display:flex; flex-wrap:wrap; gap:6px 16px; margin-top:4px; font-size:12.5px; color:var(--orbi-muted); }
.bus-meta span{ display:inline-flex; align-items:center; gap:5px; }
.bus-aside{ display:flex; align-items:center; gap:10px; flex-shrink:0; color:var(--orbi-muted); }
.bus-price{ font-weight:700; font-size:15px; color:var(--orbi-navy); }
[data-theme="dark"] .bus-price{ color:var(--orbi-accent); }
.bus-estatus{ font-weight:700; border-radius:var(--orbi-r-pill); padding:1px 9px; font-size:11px; }
.bus-estatus.est-pagada{ background:var(--orbi-trend-bg); color:var(--orbi-trend-fg); }
.bus-estatus.est-cancelada{ background:var(--orbi-cat-red-bg); color:var(--orbi-cat-red); }

/* =====================================================================
   ── DASHBOARD (ANALÍTICA) ──  ana00
   Componentes reutilizables: banner, KPI cards, analítica, feed, acciones,
   top y pendientes. Colores codifican categoría/estado.
   ===================================================================== */
/* .ana-wrap ES el panel con scroll (overflow:auto lo pone el shell del home):
   va a ANCHO COMPLETO para que la barra de scroll quede pegada al borde derecho
   del bloque. El límite de ancho + centrado vive en .ana-inner, que respeta el
   aire lateral del padding del panel. */
.ana-wrap{ width:100%; }
.ana-inner{ max-width:1320px; margin-inline:auto; }

/* 1 · Banner de bienvenida (degradado azul) */
.ana-banner{
  display:flex; align-items:center; gap:24px; flex-wrap:wrap;
  position:relative; overflow:hidden;
  /* Encabezado CLARO y luminoso: superficie con un brillo suave del acento
     (radial arriba-izq) y un degradado tenue. Sigue el color del tema. */
  background:
    radial-gradient(115% 150% at 0% 0%, rgba(var(--orbi-accent-rgb),.18) 0%, rgba(var(--orbi-accent-rgb),0) 55%),
    linear-gradient(135deg, var(--orbi-surface) 0%, rgba(var(--orbi-accent-rgb),.07) 100%);
  color:var(--orbi-text);
  border:1px solid var(--orbi-border);
  border-radius:var(--orbi-r-card); padding:22px 26px; margin-bottom:18px;
  box-shadow:0 10px 30px rgba(var(--orbi-accent-rgb),.12);
}
.ana-banner .ban-left{ flex:1 1 320px; min-width:0; }
.ana-banner .ban-hi{ font-size:23px; font-weight:800; letter-spacing:-.3px; color:var(--orbi-text); }
.ana-banner .ban-sub{ color:var(--orbi-muted); font-size:13.5px; margin-top:3px; }
.ana-banner .ban-tools{ display:flex; gap:8px; flex-wrap:wrap; margin-top:14px; }
.ana-banner .ban-pill,.ana-banner .ban-btn{
  display:inline-flex; align-items:center; gap:7px; min-height:38px; padding:0 15px;
  border-radius:var(--orbi-r-pill); font-size:13px; font-weight:600; cursor:pointer;
}
/* Chip de fecha: tinte suave del acento. */
.ana-banner .ban-pill{
  cursor:default; color:var(--orbi-accent);
  background:rgba(var(--orbi-accent-rgb),.10); border:1px solid rgba(var(--orbi-accent-rgb),.22);
}
/* CTA principal (Exportar): acento sólido y luminoso. */
.ana-banner .ban-btn{
  background:linear-gradient(135deg,var(--orbi-accent),var(--orbi-accent2)); color:#fff; border:none;
  box-shadow:0 6px 16px rgba(var(--orbi-accent-rgb),.28);
}
.ana-banner .ban-btn:hover{ filter:brightness(1.06); }
/* Botón secundario (Refrescar): contorno sobre la superficie. */
.ana-banner .ban-btn.ghost{
  background:var(--orbi-surface); color:var(--orbi-accent); border:1px solid var(--orbi-border);
  box-shadow:none;
}
.ana-banner .ban-btn.ghost:hover{ background:rgba(var(--orbi-accent-rgb),.10); }
.ana-banner .ban-stats{
  display:grid; grid-template-columns:repeat(4,minmax(96px,1fr)); gap:10px; flex:1 1 360px;
}
.ana-banner .ban-stat{
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:14px; padding:12px 14px; display:flex; flex-direction:column; gap:4px;
  box-shadow:0 2px 10px rgba(var(--orbi-accent-rgb),.06);
}
.ana-banner .bs-lb{ font-size:11.5px; color:var(--orbi-muted); }
.ana-banner .bs-val{ font-size:21px; font-weight:800; font-variant-numeric:tabular-nums; color:var(--orbi-text); }

/* 2 · KPI cards */
.ana-kpis{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:18px; }
.kpi-card{ padding:16px 18px; }
.kpi-card.kpi-skeleton{ min-height:128px; background:linear-gradient(100deg,var(--orbi-card) 40%,var(--orbi-gray-bg) 50%,var(--orbi-card) 60%); }
.kpi-top{ display:flex; align-items:flex-start; justify-content:space-between; }
.kpi-ic{ width:42px; height:42px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:20px; }
.kpi-trend{ display:inline-flex; align-items:center; gap:3px; font-size:11.5px; font-weight:800; border-radius:var(--orbi-r-pill); padding:3px 9px; background:var(--orbi-trend-bg); color:var(--orbi-trend-fg); }
.kpi-trend.down{ background:var(--orbi-cat-red-bg); color:var(--orbi-cat-red); }
.kpi-val{ font-size:27px; font-weight:800; margin-top:12px; color:var(--orbi-text); font-variant-numeric:tabular-nums; letter-spacing:-.5px; }
.kpi-lb{ font-size:12.5px; color:var(--orbi-muted); }
.kpi-bar{ height:7px; border-radius:var(--orbi-r-pill); background:var(--orbi-gray-bg); margin-top:11px; overflow:hidden; }
.kpi-bar i{ display:block; height:100%; border-radius:var(--orbi-r-pill); width:0; transform-origin:left; transition:width 900ms var(--orbi-ease); }
.kpi-foot{ font-size:11px; color:var(--orbi-muted); margin-top:6px; }

/* Tintes por categoría (icono + barra) */
.cat-blue   .kpi-ic{ background:var(--orbi-cat-blue-bg);   color:var(--orbi-cat-blue); }   .cat-blue   .kpi-bar i{ background:var(--orbi-cat-blue); }
.cat-green  .kpi-ic{ background:var(--orbi-cat-green-bg);  color:var(--orbi-cat-green); }  .cat-green  .kpi-bar i{ background:var(--orbi-cat-green); }
.cat-orange .kpi-ic{ background:var(--orbi-cat-orange-bg); color:var(--orbi-cat-orange); } .cat-orange .kpi-bar i{ background:var(--orbi-cat-orange); }
.cat-purple .kpi-ic{ background:var(--orbi-cat-purple-bg); color:var(--orbi-cat-purple); } .cat-purple .kpi-bar i{ background:var(--orbi-cat-purple); }
.cat-red    .kpi-ic{ background:var(--orbi-cat-red-bg);    color:var(--orbi-cat-red); }    .cat-red    .kpi-bar i{ background:var(--orbi-cat-red); }

/* Cuadrícula principal 2fr / 1fr */
.ana-grid{ display:grid; grid-template-columns:1.6fr 1fr; gap:16px; align-items:start; }
.ana-col{ display:flex; flex-direction:column; gap:16px; min-width:0; }

/* Tarjeta genérica del dashboard */
.ana-card{ padding:18px 20px; }
.ana-card-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:14px; }
.ana-card-head h3{ font-size:16px; font-weight:700; margin:0; color:var(--orbi-text); }
.ana-card-sub{ font-size:12.5px; color:var(--orbi-muted); margin:2px 0 0; }
.ana-cat-dot{ width:10px; height:10px; border-radius:50%; margin-top:6px; }
.ana-loading{ color:var(--orbi-muted); font-size:13px; padding:18px 2px; display:flex; align-items:center; gap:8px; }

/* Toggle segmentado */
.ana-seg{ display:inline-flex; background:var(--orbi-input-bg); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-pill); padding:3px; flex-shrink:0; }
.seg-btn{ border:0; background:transparent; color:var(--orbi-muted); font-size:12.5px; font-weight:600; padding:6px 14px; border-radius:var(--orbi-r-pill); cursor:pointer; transition:all var(--orbi-dur-fast) var(--orbi-ease); }
.seg-btn.active{ background:var(--orbi-card); color:var(--orbi-text); box-shadow:0 2px 6px rgba(30,50,110,.12); }

/* 3 · Barras horizontales */
.ana-bars{ display:flex; flex-direction:column; gap:12px; }
.bar-row{ display:grid; grid-template-columns:84px 1fr auto; align-items:center; gap:12px; }
.bar-row .bar-lb{ font-size:12.5px; color:var(--orbi-muted); font-weight:600; }
.bar-track{ height:24px; background:var(--orbi-gray-bg); border-radius:8px; overflow:hidden; position:relative; }
.bar-fill{ height:100%; border-radius:8px; background:linear-gradient(90deg,var(--orbi-cat-blue),var(--orbi-sidebar)); width:0; transition:width 950ms var(--orbi-ease); display:flex; align-items:center; }
.bar-row .bar-val{ font-size:12.5px; font-weight:700; color:var(--orbi-text); font-variant-numeric:tabular-nums; white-space:nowrap; }
.bar-row .bar-val small{ color:var(--orbi-muted); font-weight:600; }

/* Mini-tiles resumen */
.ana-tiles{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px; }
.ana-tile{ background:var(--orbi-gray-bg); border-radius:12px; padding:11px 12px; }
.ana-tile .t-lb{ font-size:11px; color:var(--orbi-muted); }
.ana-tile .t-val{ font-size:16px; font-weight:800; color:var(--orbi-text); margin-top:3px; font-variant-numeric:tabular-nums; }
.ana-tile.tint-blue{ background:var(--orbi-cat-blue-bg); } .ana-tile.tint-blue .t-val{ color:var(--orbi-cat-blue); }
.ana-tile.tint-green{ background:var(--orbi-cat-green-bg); } .ana-tile.tint-green .t-val{ color:var(--orbi-cat-green); }
.ana-tile.tint-purple{ background:var(--orbi-cat-purple-bg); } .ana-tile.tint-purple .t-val{ color:var(--orbi-cat-purple); }
.ana-tile.tint-orange{ background:var(--orbi-cat-orange-bg); } .ana-tile.tint-orange .t-val{ color:var(--orbi-cat-orange); }

/* 5 · Acciones rápidas (mosaicos de color sólido) */
.qa-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.qa-tile{ display:flex; flex-direction:column; gap:3px; padding:16px; border-radius:14px; color:#fff; min-height:96px; }
.qa-tile i{ font-size:22px; margin-bottom:4px; }
.qa-tile .qa-t{ font-weight:700; font-size:14.5px; }
.qa-tile .qa-s{ font-size:11.5px; opacity:.9; }
.qa-tile:hover{ color:#fff; filter:brightness(1.05); }
.qa-blue{ background:var(--orbi-cat-blue); } .qa-green{ background:var(--orbi-cat-green); }
.qa-orange{ background:var(--orbi-cat-orange); } .qa-purple{ background:var(--orbi-cat-purple); }

/* 4 · Feed actividad en vivo */
.live-dot{ display:inline-block; width:8px; height:8px; border-radius:50%; background:var(--orbi-cat-green); margin-left:6px; vertical-align:middle; box-shadow:0 0 0 0 rgba(16,185,129,.6); animation:orbiPulse 1.8s ease-out infinite; }
@keyframes orbiPulse{ 0%{ box-shadow:0 0 0 0 rgba(16,185,129,.55); } 70%{ box-shadow:0 0 0 7px rgba(16,185,129,0); } 100%{ box-shadow:0 0 0 0 rgba(16,185,129,0); } }
.feed-list{ display:flex; flex-direction:column; }
.feed-item{ display:flex; align-items:center; gap:12px; padding:10px 0; border-bottom:1px solid var(--orbi-border); }
.feed-item:last-child{ border-bottom:0; }
.feed-ic{ width:34px; height:34px; border-radius:50%; flex-shrink:0; display:flex; align-items:center; justify-content:center; font-size:15px; background:var(--orbi-cat-green-bg); color:var(--orbi-cat-green); }
.feed-main{ min-width:0; flex:1; }
.feed-t{ font-size:13.5px; font-weight:600; color:var(--orbi-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.feed-time{ font-size:11.5px; color:var(--orbi-muted); }
.feed-amt{ font-weight:700; font-size:13.5px; color:var(--orbi-navy); white-space:nowrap; }
[data-theme="dark"] .feed-amt{ color:var(--orbi-accent); }
.feed-all{ display:inline-flex; align-items:center; gap:6px; margin-top:12px; font-size:13px; font-weight:600; color:var(--orbi-accent); }

/* 6 · Top productos */
.top-list{ display:flex; flex-direction:column; gap:12px; }
.top-row{ display:flex; align-items:center; gap:12px; }
.top-rank{ width:30px; height:30px; border-radius:9px; flex-shrink:0; display:flex; align-items:center; justify-content:center; font-weight:800; font-size:13px; background:var(--orbi-gray-bg); color:var(--orbi-muted); }
.top-row:nth-child(1) .top-rank{ background:var(--orbi-cat-green-bg); color:var(--orbi-cat-green); }
.top-main{ flex:1; min-width:0; }
.top-nm{ font-size:13.5px; font-weight:600; color:var(--orbi-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.top-bar{ height:6px; border-radius:var(--orbi-r-pill); background:var(--orbi-gray-bg); margin-top:5px; overflow:hidden; }
.top-bar i{ display:block; height:100%; border-radius:var(--orbi-r-pill); background:var(--orbi-cat-green); width:0; transition:width 900ms var(--orbi-ease); }
.top-aside{ text-align:right; flex-shrink:0; }
.top-imp{ font-size:13.5px; font-weight:700; color:var(--orbi-text); font-variant-numeric:tabular-nums; }
.top-pct{ font-size:11px; color:var(--orbi-muted); }

/* 7 · Pendientes */
.pend-list{ display:flex; flex-direction:column; gap:10px; }
.pend-item{ display:flex; align-items:center; gap:12px; padding:11px 12px; border-radius:12px; background:var(--orbi-gray-bg); color:var(--orbi-text); transition:background var(--orbi-dur-fast) var(--orbi-ease); }
.pend-item:hover{ background:var(--orbi-accent-bg); color:var(--orbi-text); }
.pend-ic{ width:38px; height:38px; border-radius:11px; flex-shrink:0; display:flex; align-items:center; justify-content:center; font-size:17px; }
.pend-txt{ flex:1; min-width:0; display:flex; flex-direction:column; line-height:1.3; }
.pend-txt b{ font-size:13.5px; font-weight:700; }
.pend-txt small{ font-size:11.5px; color:var(--orbi-muted); }
.pend-badge{ flex-shrink:0; min-width:28px; height:28px; padding:0 9px; border-radius:var(--orbi-r-pill); background:var(--orbi-accent); color:#fff; font-weight:800; font-size:13px; display:flex; align-items:center; justify-content:center; }
.pend-badge.danger{ background:var(--orbi-cat-red); }

/* Responsive del dashboard */
@media (max-width:980px){
  .ana-grid{ grid-template-columns:1fr; }
  .ana-kpis{ grid-template-columns:1fr 1fr; }
  .ana-banner .ban-stats{ grid-template-columns:repeat(2,1fr); }
}
@media (max-width:560px){
  .ana-kpis{ grid-template-columns:1fr; }
  .qa-grid{ grid-template-columns:1fr; }
  .ana-tiles{ grid-template-columns:1fr 1fr; }
  .bar-row{ grid-template-columns:64px 1fr; }
  .bar-row .bar-val{ grid-column:2; text-align:right; }
}

/* =====================================================================
   ── HOME · dos bloques flotantes glass ──  (home.php)
   Layout: rail de iconos (glass, color login) en un bloque + contenido en
   otro bloque, ambos flotando sobre el gradiente blanco-azul de la página.
   El menú es SOLO iconos (sin opción de contraer). Mantiene tema oscuro.
   ===================================================================== */

/* Página = fondo gradiente + blobs (estilo login) detrás de los bloques */
body.orbi-page.orbi-app{
  padding-left:0;
  /* El degradado se tiñe con el acento elegido (sobre base blanca) → cambia
     de color junto con el menú y los acentos. */
  background:
    radial-gradient(1000px 600px at 10% 0%, #FFFFFF 0%, rgba(255,255,255,0) 55%),
    linear-gradient(160deg,
      rgba(var(--orbi-accent-rgb),.13) 0%,
      rgba(var(--orbi-accent2-rgb),.05) 50%,
      rgba(var(--orbi-accent-rgb),.17) 100%),
    #FFFFFF;
}
body.orbi-page::before,
body.orbi-page::after{
  content:""; position:fixed; border-radius:50%; filter:blur(85px); z-index:-1; pointer-events:none;
}
body.orbi-page::before{
  width:480px; height:480px; top:-150px; right:-90px;
  background:radial-gradient(circle, rgba(var(--orbi-accent-rgb),.32), rgba(var(--orbi-accent-rgb),0) 70%);
}
body.orbi-page::after{
  width:540px; height:540px; bottom:-190px; left:-110px;
  background:radial-gradient(circle, rgba(var(--orbi-accent2-rgb),.22), rgba(var(--orbi-accent2-rgb),0) 70%);
}

/* ---------- Bloque 1: rail de iconos (glass, NO azul) ---------- */
body.orbi-page .orbi-sidebar{
  top:16px; left:16px; bottom:16px; height:auto; width:78px;
  border-radius:22px;
  background:rgba(255,255,255,.55);
  -webkit-backdrop-filter:blur(22px) saturate(150%);
  backdrop-filter:blur(22px) saturate(150%);
  border:1px solid rgba(255,255,255,.7);
  box-shadow:0 16px 40px rgba(30,50,110,.14);
}
/* Modo solo-iconos: oculta textos, marca y el botón de contraer */
body.orbi-page .orbi-sidebar .sb-logo,
body.orbi-page .orbi-sidebar .sb-txt,
body.orbi-page .orbi-sidebar .sb-seclabel,
body.orbi-page .orbi-sidebar .sb-uinfo,
body.orbi-page .orbi-sidebar .sb-lock,
body.orbi-page .orbi-sidebar .sb-collapse,
body.orbi-page .orbi-sb-toggle{ display:none !important; }
body.orbi-page .orbi-sidebar .sb-logomark{
  display:flex; align-items:center; justify-content:center;
  width:42px; height:42px; border-radius:13px; font-size:20px;
  background:transparent; color:var(--orbi-accent);
}
body.orbi-page .orbi-sidebar .sb-head{ justify-content:center; padding:16px 0 2px; min-height:0; }
body.orbi-page .orbi-sidebar .sb-nav{ padding:0 10px; }
/* Enlaces en tono claro (texto/iconos oscuros, no blancos); el realce sigue al acento */
body.orbi-page .orbi-sidebar .sb-link{
  justify-content:center; padding:8px 0; color:var(--orbi-muted);
}
body.orbi-page .orbi-sidebar .sb-link i{ font-size:18px; }
body.orbi-page .orbi-sidebar .sb-link:hover{ background:rgba(var(--orbi-accent-rgb),.10); color:var(--orbi-accent); }
body.orbi-page .orbi-sidebar .sb-link.activo{
  background:rgba(var(--orbi-accent-rgb),.16); color:var(--orbi-accent); box-shadow:none;
}
body.orbi-page .orbi-sidebar .sb-user{
  justify-content:center; padding:12px 0; margin:8px 12px 14px;
  background:rgba(var(--orbi-accent-rgb),.08); border:1px solid rgba(var(--orbi-accent-rgb),.12);
}
body.orbi-page .orbi-sidebar .sb-ava{
  background:linear-gradient(135deg,var(--orbi-navy),var(--orbi-accent)); color:#fff;
}

/* ---------- Flyout del menú lateral (etiqueta al pasar el cursor) ----------
   Elemento único position:fixed inyectado por shell.js. Escapa el recorte del
   .sb-nav y se anima (fade + desliz + escala). Sigue el color de acento del
   tema (data-accent) igual que el resto del shell. */
.sb-flyout{
  position:fixed; z-index:1200; left:0; top:0;
  padding:9px 14px; border-radius:12px;
  background:var(--orbi-accent); color:#fff;
  font-size:13px; font-weight:600; line-height:1; letter-spacing:.2px;
  white-space:nowrap; pointer-events:none;
  box-shadow:0 12px 30px rgba(var(--orbi-accent-rgb),.35), 0 2px 8px rgba(30,50,110,.18);
  opacity:0;
  transition:opacity var(--orbi-dur-fast,180ms) var(--orbi-ease,ease),
             transform var(--orbi-dur,320ms) cubic-bezier(.34,1.56,.64,1);
}
.sb-flyout::before{                        /* flechita apuntando al origen */
  content:''; position:absolute;
  width:11px; height:11px; border-radius:2px;
  background:var(--orbi-accent);
}
/* Posición: a la derecha del icono (sidebar) */
.sb-flyout.place-right{ transform-origin:left center; transform:translateY(-50%) translateX(-8px) scale(.94); }
.sb-flyout.place-right.is-visible{ opacity:1; transform:translateY(-50%) translateX(0) scale(1); }
.sb-flyout.place-right::before{ left:-4px; top:50%; transform:translateY(-50%) rotate(45deg); }
/* Posición: debajo del botón (topbar) */
.sb-flyout.place-bottom{ transform-origin:top center; transform:translateX(-50%) translateY(-6px) scale(.94); }
.sb-flyout.place-bottom.is-visible{ opacity:1; transform:translateX(-50%) translateY(0) scale(1); }
.sb-flyout.place-bottom::before{ top:-4px; left:50%; transform:translateX(-50%) rotate(45deg); }
/* Posición: arriba del botón (toggle flotante inferior derecho) */
.sb-flyout.place-top{ transform-origin:bottom center; transform:translateX(-50%) translateY(6px) scale(.94); }
.sb-flyout.place-top.is-visible{ opacity:1; transform:translateX(-50%) translateY(0) scale(1); }
.sb-flyout.place-top::before{ bottom:-4px; left:50%; transform:translateX(-50%) rotate(45deg); }
/* Ítems bloqueados: tono neutro + "Próximamente" */
.sb-flyout.is-locked{ background:#4b5573; box-shadow:0 12px 30px rgba(30,50,110,.28); }
.sb-flyout.is-locked::before{ background:#4b5573; }
.sb-flyout.is-locked::after{ content:'\00b7 Próximamente'; opacity:.7; font-weight:500; margin-left:2px; }

/* ---------- Toasts (avisos) ----------
   orbiToast() (definido en cada módulo) usa las clases semánticas de Bootstrap:
   success=verde, danger=rojo, warning=ámbar (correctas) e info/default =
   text-bg-primary, que es AZUL fijo de Bootstrap y no seguía el tema. Aquí se
   reorienta SOLO el toast "info/default" al color de acento del tema (data-accent),
   para que sea consistente con el resto de la app (rojo si el tema es rojo, etc.). */
.toast.text-bg-primary{
  background-color:var(--orbi-accent) !important;
  color:#fff !important;
}
@media (prefers-reduced-motion:reduce){
  .sb-flyout{ transition:opacity 120ms linear; }
  .sb-flyout.place-right,  .sb-flyout.place-right.is-visible{  transform:translateY(-50%); }
  .sb-flyout.place-bottom, .sb-flyout.place-bottom.is-visible{ transform:translateX(-50%); }
  .sb-flyout.place-top,    .sb-flyout.place-top.is-visible{    transform:translateX(-50%); }
}

/* ---------- Bloque 2: contenido (glass) ---------- */
body.orbi-page .hp-content{
  margin:16px 16px 16px calc(78px + 32px);
  min-height:calc(100vh - 32px);
  display:flex; flex-direction:column;
  border-radius:22px; overflow:hidden;
  background:rgba(255,255,255,.46);
  -webkit-backdrop-filter:blur(20px) saturate(140%);
  backdrop-filter:blur(20px) saturate(140%);
  border:1px solid rgba(255,255,255,.7);
  box-shadow:0 16px 40px rgba(30,50,110,.12);
}
/* La topbar y el pie se integran al bloque (transparentes) */
body.orbi-page .hp-content .orbi-modhead.orbi-topbar{ background:transparent; border-bottom:1px solid rgba(255,255,255,.55); }
body.orbi-page .hp-content .orbi-modfoot{ background:transparent; border-top:1px solid rgba(255,255,255,.55); }
body.orbi-page .orbi-home{ flex:1; min-height:0; padding:22px; background:transparent; }

/* Tarjetas de módulo: sólidas/claras para resaltar sobre el bloque glass */
body.orbi-page .modulo-card{
  background:rgba(255,255,255,.86);
  -webkit-backdrop-filter:blur(6px);
  backdrop-filter:blur(6px);
  border:1px solid rgba(255,255,255,.9);
  box-shadow:0 10px 28px rgba(30,50,110,.10);
}
body.orbi-page .modulo-card .ico{ background:rgba(var(--orbi-accent-rgb),.12); color:var(--orbi-accent); }
body.orbi-page .modulo-card.activo:hover,
body.orbi-page .modulo-card.activo:focus{
  border-color:rgba(var(--orbi-accent-rgb),.45);
  box-shadow:0 20px 44px rgba(30,50,110,.18);
}
body.orbi-page .modulo-card.destacada{
  background:rgba(255,255,255,.86); border:1px solid rgba(255,255,255,.9); color:var(--orbi-text);
}
body.orbi-page .modulo-card.destacada .ico{ background:rgba(var(--orbi-accent-rgb),.12); color:var(--orbi-accent); }
body.orbi-page .modulo-card.destacada .nombre{ color:var(--orbi-text); }
body.orbi-page .modulo-card.destacada .desc{ color:var(--orbi-muted); }
body.orbi-page .modulo-card.bloqueado{ background:rgba(255,255,255,.6); }

/* ---------- Home (orbi-page) en móvil: mismo drawer + pestaña que el resto ----------
   Se descarta el riel glass fijo: el menú queda OCULTO fuera de pantalla y se abre
   SOBRE el contenido (que pasa a ancho completo) mediante la pestaña lateral. Así el
   home móvil es consistente con los demás módulos. */
@media (max-width:900px){
  /* El sidebar toma forma de drawer, pero conserva el FONDO BLANCO (glass) del
     riel original para no alterar el diseño; solo se esconde a la izquierda. */
  body.orbi-page .orbi-sidebar{
    top:0; left:0; bottom:0; height:auto; width:var(--orbi-sb-w);
    border:none; border-right:1px solid var(--orbi-border); border-radius:0;
    background:var(--orbi-card);            /* blanco (oscuro en modo dark) */
    -webkit-backdrop-filter:none; backdrop-filter:none;
    box-shadow:0 0 40px rgba(30,50,110,.18);
    transform:translateX(-100%);
  }
  body.orbi-page.orbi-app.sb-open .orbi-sidebar{ transform:translateX(0); }
  /* Muestra las etiquetas del menú (drawer completo, no solo iconos) */
  body.orbi-page .orbi-sidebar .sb-logo,
  body.orbi-page .orbi-sidebar .sb-txt,
  body.orbi-page .orbi-sidebar .sb-seclabel,
  body.orbi-page .orbi-sidebar .sb-uinfo,
  body.orbi-page .orbi-sidebar .sb-lock{ display:revert !important; }
  body.orbi-page .orbi-sidebar .sb-logomark{ display:none !important; }
  body.orbi-page .orbi-sidebar .sb-head{ justify-content:flex-start; padding:18px 18px 14px; }
  body.orbi-page .orbi-sidebar .sb-nav{ padding:6px 12px; }
  body.orbi-page .orbi-sidebar .sb-link{ justify-content:flex-start; padding:11px 12px; }
  /* Colores de texto legibles sobre blanco (el realce sigue al acento, que ya
     aplica el estilo glass de body.orbi-page). */
  body.orbi-page .orbi-sidebar .sb-logo{ color:var(--orbi-text); }
  body.orbi-page .orbi-sidebar .sb-logo span{ color:var(--orbi-accent); }
  body.orbi-page .orbi-sidebar .sb-seclabel{ color:var(--orbi-muted); }
  body.orbi-page .orbi-sidebar .sb-uname{ color:var(--orbi-text); }
  body.orbi-page .orbi-sidebar .sb-umail{ color:var(--orbi-muted); }
  body.orbi-page .orbi-sidebar .sb-home-row::before{ background:rgba(0,0,0,.08); }
  /* Contenido a ANCHO COMPLETO: el menú overlaya, ya no reserva espacio */
  body.orbi-page .hp-content{ margin:0 !important; border-radius:0; min-height:100vh; }
  /* Pestaña visible (vence el display:none !important del riel glass) */
  body.orbi-page .orbi-sb-handle{ display:flex !important; }
}
@media (max-width:560px){
  /* En drawer el ancho es fijo (no se encoge como el riel) */
  body.orbi-page .orbi-sidebar{ width:var(--orbi-sb-w); left:0; top:0; bottom:0; }
  body.orbi-page .hp-content{ margin:0 !important; min-height:100vh; }
}

/* ---------- Variante en tema oscuro ---------- */
[data-theme="dark"] body.orbi-page.orbi-app{
  /* En oscuro el lienzo se mantiene profundo pero recibe un velo del acento */
  background:
    radial-gradient(1000px 600px at 10% 0%, rgba(var(--orbi-accent-rgb),.18) 0%, rgba(var(--orbi-accent-rgb),0) 55%),
    linear-gradient(160deg, #11152A 0%, #0F1320 55%, #141A33 100%);
}
[data-theme="dark"] body.orbi-page::before{ background:radial-gradient(circle, rgba(var(--orbi-accent-rgb),.26), rgba(var(--orbi-accent-rgb),0) 70%); }
[data-theme="dark"] body.orbi-page::after{ background:radial-gradient(circle, rgba(var(--orbi-accent2-rgb),.18), rgba(var(--orbi-accent2-rgb),0) 70%); }
[data-theme="dark"] body.orbi-page .orbi-sidebar{
  background:rgba(22,27,43,.6); border:1px solid rgba(255,255,255,.08); box-shadow:0 16px 40px rgba(0,0,0,.4);
}
[data-theme="dark"] body.orbi-page .orbi-sidebar .sb-logomark{ background:transparent; color:var(--orbi-accent); }
[data-theme="dark"] body.orbi-page .orbi-sidebar .sb-link{ color:var(--orbi-muted); }
[data-theme="dark"] body.orbi-page .orbi-sidebar .sb-link:hover,
[data-theme="dark"] body.orbi-page .orbi-sidebar .sb-link.activo{ background:rgba(var(--orbi-accent-rgb),.22); color:#fff; }
[data-theme="dark"] body.orbi-page .orbi-sidebar .sb-user{ background:rgba(var(--orbi-accent-rgb),.12); border-color:rgba(255,255,255,.08); }
[data-theme="dark"] body.orbi-page .hp-content{
  background:rgba(22,27,43,.5); border:1px solid rgba(255,255,255,.08); box-shadow:0 16px 40px rgba(0,0,0,.4);
}
[data-theme="dark"] body.orbi-page .hp-content .orbi-modhead.orbi-topbar,
[data-theme="dark"] body.orbi-page .hp-content .orbi-modfoot{ border-color:rgba(255,255,255,.08); }
[data-theme="dark"] body.orbi-page .modulo-card,
[data-theme="dark"] body.orbi-page .modulo-card.destacada{
  background:rgba(30,36,56,.9); border:1px solid rgba(255,255,255,.08); box-shadow:0 10px 28px rgba(0,0,0,.4);
}
[data-theme="dark"] body.orbi-page .modulo-card .ico{ background:rgba(var(--orbi-accent-rgb),.22); color:var(--orbi-accent); }
[data-theme="dark"] body.orbi-page .modulo-card.bloqueado{ background:rgba(30,36,56,.6); }

/* ---------- Iconos a color por módulo (home) ----------
   Cada tarjeta activa luce su propio acento. Definidos con --c (color) y
   --cbg (fondo); el fondo usa tokens cat-*-bg que ya invierten en oscuro.
   Mayor especificidad/orden que las reglas de .ico de arriba => ganan. */
body.orbi-page .modulo-card .ico.ico-c-blue   { --c:var(--orbi-cat-blue);   --cbg:var(--orbi-cat-blue-bg); }
body.orbi-page .modulo-card .ico.ico-c-cyan   { --c:var(--orbi-cat-cyan);   --cbg:var(--orbi-cat-cyan-bg); }
body.orbi-page .modulo-card .ico.ico-c-orange { --c:var(--orbi-cat-orange); --cbg:var(--orbi-cat-orange-bg); }
body.orbi-page .modulo-card .ico.ico-c-purple { --c:var(--orbi-cat-purple); --cbg:var(--orbi-cat-purple-bg); }
body.orbi-page .modulo-card .ico.ico-c-green  { --c:var(--orbi-cat-green);  --cbg:var(--orbi-cat-green-bg); }
body.orbi-page .modulo-card .ico.ico-c-pink   { --c:var(--orbi-cat-pink);   --cbg:var(--orbi-cat-pink-bg); }
body.orbi-page .modulo-card .ico.ico-c-indigo { --c:var(--orbi-accent);     --cbg:var(--orbi-accent-bg); }
body.orbi-page .modulo-card .ico.ico-c-slate  { --c:var(--orbi-cat-slate);  --cbg:var(--orbi-cat-slate-bg); }

body.orbi-page .modulo-card .ico[class*="ico-c-"]{
  background:var(--cbg); color:var(--c);
  transition:background var(--orbi-dur-fast,180ms) ease, color var(--orbi-dur-fast,180ms) ease,
             transform var(--orbi-dur-fast,180ms) ease, box-shadow var(--orbi-dur-fast,180ms) ease;
}
/* Al pasar el cursor la tarjeta, el tile se "enciende" con su color sólido */
body.orbi-page .modulo-card.activo:hover .ico[class*="ico-c-"],
body.orbi-page .modulo-card.activo:focus .ico[class*="ico-c-"]{
  background:var(--c); color:#fff;
  transform:scale(1.06) rotate(-3deg);
  box-shadow:0 8px 20px color-mix(in srgb, var(--c) 45%, transparent);
}

/* =====================================================================
   ── CONFIGURACIÓN claro/glass ──  Mismo fondo y recuadros que el home
   Fondo gradiente + blobs en el área de contenido y recuadros (.orbi-card)
   tipo glass. Los modales quedan sólidos (legibilidad). Mantiene tema oscuro.
   ===================================================================== */
body.orbi-config .cfg-main{
  position:relative; overflow:hidden;
  background:
    radial-gradient(900px 520px at 8% -5%, #FFFFFF 0%, rgba(255,255,255,0) 55%),
    linear-gradient(160deg, #EAF1FF 0%, #F6F9FF 50%, #DCE8FF 100%);
}
/* Blobs difuminados (detrás del contenido, z-index:-1 = no tapan recuadros) */
body.orbi-config .cfg-main::before,
body.orbi-config .cfg-main::after{
  content:""; position:absolute; border-radius:50%; filter:blur(80px); z-index:-1; pointer-events:none;
}
body.orbi-config .cfg-main::before{
  width:460px; height:460px; top:-150px; right:-100px;
  background:radial-gradient(circle, rgba(43,92,230,.34), rgba(43,92,230,0) 70%);
}
body.orbi-config .cfg-main::after{
  width:520px; height:520px; bottom:-190px; left:-120px;
  background:radial-gradient(circle, rgba(108,99,255,.22), rgba(108,99,255,0) 70%);
}
/* Recuadros tipo glass (excepto modales, que quedan sólidos) */
body.orbi-config .orbi-card:not(.modal-content){
  background:rgba(255,255,255,.58);
  -webkit-backdrop-filter:blur(20px) saturate(150%);
  backdrop-filter:blur(20px) saturate(150%);
  border:1px solid rgba(255,255,255,.7);
  box-shadow:0 14px 36px rgba(30,50,110,.10);
}

/* Variante en tema oscuro */
[data-theme="dark"] body.orbi-config .cfg-main{
  background:
    radial-gradient(900px 520px at 8% -5%, rgba(60,70,140,.25) 0%, rgba(60,70,140,0) 55%),
    linear-gradient(160deg, #11152A 0%, #0F1320 55%, #141A33 100%);
}
[data-theme="dark"] body.orbi-config .cfg-main::before{ background:radial-gradient(circle, rgba(43,92,230,.28), rgba(43,92,230,0) 70%); }
[data-theme="dark"] body.orbi-config .cfg-main::after{ background:radial-gradient(circle, rgba(108,99,255,.18), rgba(108,99,255,0) 70%); }
[data-theme="dark"] body.orbi-config .orbi-card:not(.modal-content){
  background:rgba(22,27,43,.55); border:1px solid rgba(255,255,255,.08);
  box-shadow:0 14px 36px rgba(0,0,0,.35);
}

/* =====================================================================
   ── COMPRAS · menú claro/glass ──  (comp00) Mismo look & feel del home
   Fondo gradiente + blobs y tarjetas (.opcion-card) tipo glass.
   Scoped a body.cmp-menu-page (solo el menú; no toca las pantallas de tablas).
   ===================================================================== */
body.cmp-menu-page{
  background:
    radial-gradient(900px 520px at 8% -5%, #FFFFFF 0%, rgba(255,255,255,0) 55%),
    linear-gradient(160deg,
      rgba(var(--orbi-accent-rgb),.13) 0%,
      rgba(var(--orbi-accent2-rgb),.05) 50%,
      rgba(var(--orbi-accent-rgb),.17) 100%),
    #FFFFFF;
}
/* Blobs difuminados anclados al viewport (z-index:-1 = detrás del contenido) */
body.cmp-menu-page::before,
body.cmp-menu-page::after{
  content:""; position:fixed; border-radius:50%; filter:blur(80px); z-index:-1; pointer-events:none;
}
body.cmp-menu-page::before{
  width:460px; height:460px; top:-150px; right:-100px;
  background:radial-gradient(circle, rgba(var(--orbi-accent-rgb),.34), rgba(var(--orbi-accent-rgb),0) 70%);
}
body.cmp-menu-page::after{
  width:520px; height:520px; bottom:-190px; left:-120px;
  background:radial-gradient(circle, rgba(var(--orbi-accent2-rgb),.22), rgba(var(--orbi-accent2-rgb),0) 70%);
}
/* Tarjetas del menú tipo glass (más esmerilado) */
body.cmp-menu-page .opcion-card{
  background:rgba(255,255,255,.55);
  -webkit-backdrop-filter:blur(22px) saturate(150%);
  backdrop-filter:blur(22px) saturate(150%);
  border:1px solid rgba(255,255,255,.7);
  box-shadow:0 14px 36px rgba(30,50,110,.10);
}
body.cmp-menu-page .opcion-card:hover{
  border-color:rgba(var(--orbi-accent-rgb),.45);
  transform:translateY(-2px);
  box-shadow:0 22px 48px rgba(30,50,110,.20);
}

/* Variante en tema oscuro */
[data-theme="dark"] body.cmp-menu-page{
  background:
    radial-gradient(900px 520px at 8% -5%, rgba(var(--orbi-accent-rgb),.18) 0%, rgba(var(--orbi-accent-rgb),0) 55%),
    linear-gradient(160deg, #11152A 0%, #0F1320 55%, #141A33 100%);
}
[data-theme="dark"] body.cmp-menu-page::before{ background:radial-gradient(circle, rgba(var(--orbi-accent-rgb),.28), rgba(var(--orbi-accent-rgb),0) 70%); }
[data-theme="dark"] body.cmp-menu-page::after{ background:radial-gradient(circle, rgba(var(--orbi-accent2-rgb),.18), rgba(var(--orbi-accent2-rgb),0) 70%); }
[data-theme="dark"] body.cmp-menu-page .opcion-card{
  background:rgba(22,27,43,.55); border:1px solid rgba(255,255,255,.08);
  box-shadow:0 14px 36px rgba(0,0,0,.35);
}

/* =====================================================================
   ── INVENTARIO · menú claro/glass ──  (inv00) Mismo look & feel del home
   Fondo gradiente + blobs y tarjetas (.inv-opt) tipo glass.
   Scoped a body.inv-menu-page (solo el menú; no toca catálogo/movimientos).
   ===================================================================== */
body.inv-menu-page{
  background:
    radial-gradient(900px 520px at 8% -5%, #FFFFFF 0%, rgba(255,255,255,0) 55%),
    linear-gradient(160deg,
      rgba(var(--orbi-accent-rgb),.13) 0%,
      rgba(var(--orbi-accent2-rgb),.05) 50%,
      rgba(var(--orbi-accent-rgb),.17) 100%),
    #FFFFFF;
}
/* La envoltura del menú deja ver el gradiente del body */
body.inv-menu-page .inv-body{ background:transparent; }
/* Blobs difuminados anclados al viewport (z-index:-1 = detrás del contenido) */
body.inv-menu-page::before,
body.inv-menu-page::after{
  content:""; position:fixed; border-radius:50%; filter:blur(80px); z-index:-1; pointer-events:none;
}
body.inv-menu-page::before{
  width:460px; height:460px; top:-150px; right:-100px;
  background:radial-gradient(circle, rgba(var(--orbi-accent-rgb),.34), rgba(var(--orbi-accent-rgb),0) 70%);
}
body.inv-menu-page::after{
  width:520px; height:520px; bottom:-190px; left:-120px;
  background:radial-gradient(circle, rgba(var(--orbi-accent2-rgb),.22), rgba(var(--orbi-accent2-rgb),0) 70%);
}
/* Tarjetas del menú tipo glass (más esmerilado) */
body.inv-menu-page .inv-opt{
  background:rgba(255,255,255,.55);
  -webkit-backdrop-filter:blur(22px) saturate(150%);
  backdrop-filter:blur(22px) saturate(150%);
  border:1px solid rgba(255,255,255,.7);
  box-shadow:0 14px 36px rgba(30,50,110,.10);
}
body.inv-menu-page .inv-opt:hover{
  border-color:rgba(var(--orbi-accent-rgb),.45);
  transform:translateY(-2px);
  box-shadow:0 22px 48px rgba(30,50,110,.20);
}

/* Variante en tema oscuro */
[data-theme="dark"] body.inv-menu-page{
  background:
    radial-gradient(900px 520px at 8% -5%, rgba(var(--orbi-accent-rgb),.18) 0%, rgba(var(--orbi-accent-rgb),0) 55%),
    linear-gradient(160deg, #11152A 0%, #0F1320 55%, #141A33 100%);
}
[data-theme="dark"] body.inv-menu-page::before{ background:radial-gradient(circle, rgba(var(--orbi-accent-rgb),.28), rgba(var(--orbi-accent-rgb),0) 70%); }
[data-theme="dark"] body.inv-menu-page::after{ background:radial-gradient(circle, rgba(var(--orbi-accent2-rgb),.18), rgba(var(--orbi-accent2-rgb),0) 70%); }
[data-theme="dark"] body.inv-menu-page .inv-opt{
  background:rgba(22,27,43,.55); border:1px solid rgba(255,255,255,.08);
  box-shadow:0 14px 36px rgba(0,0,0,.35);
}
/* Opción en construcción (grupo.php 'prox'): atenuada, sin hover, con badge */
body.inv-menu-page .inv-opt.proximo{ opacity:.6; cursor:default; }
body.inv-menu-page .inv-opt.proximo:hover{ transform:none; border-color:rgba(255,255,255,.7); box-shadow:0 14px 36px rgba(30,50,110,.10); }
.inv-opt .bdg-prox{ margin-top:auto; align-self:flex-start; display:inline-flex; align-items:center; gap:4px; font-size:10.5px; font-weight:600; padding:2px 9px; border-radius:20px; background:var(--orbi-amber-bg); color:var(--orbi-amber); }

/* =====================================================================
   ── INVENTARIO · interior catálogo (inv01) ──  Listado como tarjeta glass
   Fondo gradiente + blobs detrás y el listado flotando en una tarjeta con
   margen (.inv-card). El thead queda semi-sólido para legibilidad al scroll.
   ===================================================================== */
body.view-inv01 .inv-body{
  position:relative; overflow:hidden;
  background:
    radial-gradient(900px 520px at 8% -5%, #FFFFFF 0%, rgba(255,255,255,0) 55%),
    linear-gradient(160deg, #EAF1FF 0%, #F6F9FF 50%, #DCE8FF 100%);
}
body.view-inv01 .inv-body::before,
body.view-inv01 .inv-body::after{
  content:""; position:absolute; border-radius:50%; filter:blur(80px); z-index:-1; pointer-events:none;
}
body.view-inv01 .inv-body::before{
  width:460px; height:460px; top:-150px; right:-100px;
  background:radial-gradient(circle, rgba(43,92,230,.30), rgba(43,92,230,0) 70%);
}
body.view-inv01 .inv-body::after{
  width:520px; height:520px; bottom:-190px; left:-120px;
  background:radial-gradient(circle, rgba(108,99,255,.20), rgba(108,99,255,0) 70%);
}

/* Tarjeta glass flotante que envuelve el listado (toolbar + tabla + pie) */
.inv-card{
  flex:1; min-height:0; display:flex; flex-direction:column; overflow:hidden;
  margin:14px 18px 16px; border-radius:18px;
  background:rgba(255,255,255,.58);
  -webkit-backdrop-filter:blur(20px) saturate(150%);
  backdrop-filter:blur(20px) saturate(150%);
  border:1px solid rgba(255,255,255,.7);
  box-shadow:0 16px 40px rgba(30,50,110,.14);
}
/* Los sub-paneles internos se vuelven transparentes (los separa el borde) */
.inv-card .inv-toolbar,
.inv-card .inv-tablewrap,
.inv-card .inv-foot{ background:transparent; }
/* Encabezado de tabla semi-sólido: legible mientras se hace scroll */
.inv-card .inv-table thead tr{ background:rgba(240,244,253,.92); }
[data-theme="dark"] .inv-card .inv-table thead tr{ background:rgba(26,31,46,.92); }

/* Variante en tema oscuro */
[data-theme="dark"] body.view-inv01 .inv-body{
  background:
    radial-gradient(900px 520px at 8% -5%, rgba(60,70,140,.25) 0%, rgba(60,70,140,0) 55%),
    linear-gradient(160deg, #11152A 0%, #0F1320 55%, #141A33 100%);
}
[data-theme="dark"] body.view-inv01 .inv-body::before{ background:radial-gradient(circle, rgba(43,92,230,.26), rgba(43,92,230,0) 70%); }
[data-theme="dark"] body.view-inv01 .inv-body::after{ background:radial-gradient(circle, rgba(108,99,255,.18), rgba(108,99,255,0) 70%); }
[data-theme="dark"] .inv-card{
  background:rgba(22,27,43,.55); border:1px solid rgba(255,255,255,.08);
  box-shadow:0 16px 40px rgba(0,0,0,.4);
}

/* =====================================================================
   ── UNIFICACIÓN GLOBAL DEL SHELL ──  (estilo del home en TODOS los módulos)
   Cada módulo lleva ahora body.orbi-page + un envoltorio .hp-content, así
   que HEREDA el riel glass, el fondo degradado y el bloque flotante del home
   (definidos arriba en las secciones HOME y SHELL ADMIN). Aquí solo se ajusta
   lo necesario para que el CONTENIDO INTERIOR de cada módulo encaje dentro del
   bloque SIN rediseñarlo: alto del panel, scroll interno y "apagar" el cristal
   o fondo que algunos módulos traían por su cuenta (para no apilar capas de
   cristal). Va al final para ganar en la cascada.
   ===================================================================== */

/* El bloque flotante se comporta como un panel de alto fijo (app-pane):
   topbar arriba, contenido con scroll en medio, pie abajo. El home ya define
   su glass + márgenes; aquí fijamos la altura para todos por igual. */
body.orbi-app .hp-content{ height:calc(100vh - 32px); }

/* Región de contenido = todo lo que no sea el topbar ni el pie: ocupa el alto
   disponible y hace scroll interno, dejando FIJO el marco glass (igual que el
   home, donde solo se desplaza la rejilla de tarjetas). */
body.orbi-app .hp-content > :not(.orbi-modhead):not(.orbi-modfoot){
  flex:1 1 auto; min-height:0; overflow:auto;
}
/* Wrappers internos que traían min-height:100vh propio: que se ajusten al panel. */
body.orbi-app .hp-content .orbi-home,
body.orbi-app .hp-content .inv-body,
body.orbi-app .hp-content .cmp-page{ min-height:0; height:auto; }

/* ---- Inventario: wrapper y tarjeta interna transparentes ----
   El glass ya lo aporta .hp-content; evitamos "cristal sobre cristal". */
body.orbi-app .hp-content .inv-body{ background:transparent; flex:1 1 auto; }
body.orbi-app .hp-content .inv-card{
  margin:0; border:none; border-radius:0; box-shadow:none; padding:0;
  background:transparent; -webkit-backdrop-filter:none; backdrop-filter:none;
}
/* Catálogo (inv01): su degradado + blobs propios sobran (ya vienen del body). */
body.view-inv01.orbi-page .inv-body{ background:transparent; }
body.view-inv01.orbi-page .inv-body::before,
body.view-inv01.orbi-page .inv-body::after{ display:none; }

/* =====================================================================
   ── .inv-plana ── Listado PLANO estándar (CLASE GENERAL reutilizable).
   Ponla en el contenedor .inv-body de cualquier módulo:
       <div class="inv-fixed inv-body inv-plana" ...>
   Aporta: fondo gris plano, tarjeta blanca con margen, buscador y selects en
   blanco (no "apagados"), filas planas (sin relieve ni esquinas) y pie blanco
   con padding que resalta. Sirve para listados con .inv-card (tabla o filas
   prod-row) y para el maestro-detalle .inv-split (inv03).
   ===================================================================== */
/* Fondo plano del área de contenido (sin degradado ni cristal). */
body.orbi-app .hp-content .inv-plana{ background:var(--orbi-gray-bg); }

/* Contenedor: tarjeta blanca con margen, borde y sombra mínima. */
body.orbi-app .hp-content .inv-plana .inv-card,
body.orbi-app .hp-content .inv-plana .inv-split,
body.orbi-app .hp-content .inv-plana > .inv-list{
  margin:12px 18px 16px; border-radius:14px; padding:0; overflow:hidden;
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  box-shadow:0 1px 3px rgba(16,24,40,.06);
  -webkit-backdrop-filter:none; backdrop-filter:none;
}

/* Toolbar (filtros). En maestro-detalle (inv03) va como barra superior propia;
   dentro de .inv-card queda pegado al borde de la tarjeta. */
/* Toolbar de primer nivel (maestro-detalle inv03): se une a la tarjeta del
   split de abajo (borde inferior = divisor), formando UN solo contenedor. */
.inv-plana .inv-toolbar{
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:14px 14px 0 0; margin:12px 18px 0; padding:10px 14px;
}
/* La tarjeta del split se pega bajo el toolbar (sin borde superior ni margen). */
body.orbi-app .hp-content .inv-plana .inv-split{
  margin-top:0; border-top:none; border-radius:0 0 14px 14px; box-shadow:none;
}
.inv-plana .inv-card .inv-toolbar,
.inv-plana > .inv-list .inv-toolbar{
  margin:0; border:none; border-bottom:1px solid var(--orbi-border);
  border-radius:0; box-shadow:none;
}
/* La barra de info de cfg02 (dentro del contenedor) sin margen/borde propios. */
.inv-plana > .inv-list .info-bar{ margin:0; }

/* Buscador y selects en BLANCO (no "apagados"), borde definido y foco de acento. */
.inv-plana .inv-search,
.inv-plana .inv-filter{ background:var(--orbi-surface); border:1px solid var(--orbi-border); color:var(--orbi-text); }
.inv-plana .inv-search input{ background:transparent; }
.inv-plana .inv-filter:focus,
.inv-plana .inv-search:focus-within{ border-color:var(--orbi-accent); }

/* Filas prod-row planas (sin esquinas ni relieve). Área de lista BLANCA (más luz);
   los renglones se distinguen por su borde. */
.inv-plana .prod-listwrap{ background:var(--orbi-surface); }
.inv-plana .prod-row{ border-radius:0; }
/* Hover visible con el color del tema (acento): tinte de fondo + borde. */
.inv-plana .prod-row:hover{ transform:none; box-shadow:none; background:rgba(var(--orbi-accent-rgb),.10); border-color:rgba(var(--orbi-accent-rgb),.55); }
.inv-plana .prod-row:focus-visible{ box-shadow:none; }

/* Listado en TABLA = copia del look de inv01 (prod-list): área gris, renglones
   blancos separados con borde, hover de borde, caret › y clic al detalle. */
.inv-plana .inv-tablewrap{ background:var(--orbi-surface); padding:8px 10px; }
.inv-plana .inv-table{ border-collapse:separate; border-spacing:0 6px; table-layout:auto; }
.inv-plana .inv-table thead tr{ background:transparent; }
.inv-plana .inv-table thead th{ background:var(--orbi-surface); border-bottom:none; padding:2px 12px 6px; }
.inv-plana .inv-table tbody tr{ cursor:pointer; }
.inv-plana .inv-table tbody td{
  background:var(--orbi-surface); padding:11px 12px;
  border-top:1px solid var(--orbi-border); border-bottom:1px solid var(--orbi-border);
}
.inv-plana .inv-table tbody td:first-child{ border-left:1px solid var(--orbi-border); }
.inv-plana .inv-table tbody td:last-child{ border-right:1px solid var(--orbi-border); }
.inv-plana .inv-table tbody tr:hover td{ background:rgba(var(--orbi-accent-rgb),.10); border-color:rgba(var(--orbi-accent-rgb),.55); }
.inv-plana .inv-table tbody tr.sel td{ background:var(--orbi-accent-bg); border-color:var(--orbi-accent); }
[data-theme="dark"] .inv-plana .inv-table tbody tr.sel td{ background:rgba(var(--orbi-accent-rgb),.24); }
/* Fila de estado vacío/carga (un td con colspan): sin recuadro. */
.inv-plana .inv-table tbody tr td[colspan]{ background:transparent; border:none; }
/* Separadores de grupo (cat09 grp-sep, cfg02 grp-row): banda gris, sin borde ni hover. */
.inv-plana .inv-table tbody tr.grp-sep td,
.inv-plana .inv-table tbody tr.grp-row td{ background:var(--orbi-gray-bg); border:none; }
.inv-plana .inv-table tbody tr.grp-sep:hover td,
.inv-plana .inv-table tbody tr.grp-row:hover td{ background:var(--orbi-gray-bg); }
.inv-plana .inv-table tbody tr.grp-sep,
.inv-plana .inv-table tbody tr.grp-row{ cursor:default; }
/* Caret › al final de cada fila (igual que .prod-go de inv01). */
.inv-plana .inv-table .inv-caret{ width:34px; text-align:right; padding-right:14px; padding-left:8px; color:var(--orbi-muted); }

/* Pie blanco con padding interno, que resalta contra el área. */
.inv-plana .inv-foot{
  background:var(--orbi-surface); border-top:1px solid var(--orbi-border);
  padding:14px 22px; box-shadow:0 -1px 3px rgba(16,24,40,.04);
}

/* ---- Compras: panel interno transparente (sin capa fantasma ni sombra) ---- */
body.orbi-compras .hp-content .cmp-page{ background:transparent; flex:1 1 auto; }
body.orbi-compras .hp-content .cmp-wrap{
  max-height:none; height:100%; margin:0; padding:0; border-radius:0;
  background:transparent; box-shadow:none;
}
body.orbi-compras .hp-content .cmp-wrap::before{ display:none; }

/* ---- Configuración: su degradado + blobs propios sobran dentro del panel ---- */
body.orbi-config.orbi-page .cfg-main{ background:transparent; }
body.orbi-config.orbi-page .cfg-main::before,
body.orbi-config.orbi-page .cfg-main::after{ display:none; }

/* ---- Tarjetas de menú (inv00 / comp00): mismo cristal que las del home ----
   Resaltan sólidas sobre el panel glass, igual que las .modulo-card del home. */
body.inv-menu-page .inv-opt,
body.cmp-menu-page .opcion-card{
  background:rgba(255,255,255,.86);
  -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
  border:1px solid rgba(255,255,255,.9);
  box-shadow:0 10px 28px rgba(30,50,110,.10);
}
[data-theme="dark"] body.inv-menu-page .inv-opt,
[data-theme="dark"] body.cmp-menu-page .opcion-card{
  background:rgba(30,36,56,.9); border:1px solid rgba(255,255,255,.08);
  box-shadow:0 10px 28px rgba(0,0,0,.4);
}

/* ---- POS: hereda menú + bloque flotante; su INTERIOR no se toca ----
   El app del POS (rail propio + carrito) llena el panel tal cual. */
body.orbi-pos.orbi-app{ height:100vh; overflow:hidden; }
body.orbi-pos .hp-content .orbi-pos-wrap{
  height:100%; flex:1 1 auto; min-height:0; overflow:hidden;
}

/* =====================================================================
   ── POS · buscador con autocompletado (flyout) + multiplicador ──
   ===================================================================== */
.pos-search{ position:relative; }
/* Chip ×N (cantidad para el próximo artículo) */
.pos-mult{ background:var(--orbi-accent) !important; color:#fff !important; font-weight:700; border:none !important; }
.pos-mult[hidden]{ display:none !important; }
/* Flyout de sugerencias bajo el buscador */
.pos-flyout{
  position:absolute; left:0; right:0; top:calc(100% + 6px); z-index:60;
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  border-radius:14px; box-shadow:0 18px 44px rgba(30,50,110,.18);
  max-height:340px; overflow-y:auto;
}
.pos-flyout[hidden]{ display:none !important; }
.fly-item{
  display:flex; align-items:center; gap:12px; width:100%; text-align:left;
  background:transparent; border:0; border-bottom:1px solid var(--orbi-border);
  padding:10px 14px; cursor:pointer; color:var(--orbi-text); min-height:52px;
}
.fly-item:last-child{ border-bottom:0; }
.fly-item:hover, .fly-item.activo{ background:var(--orbi-accent-bg); }
.fly-ic{ width:34px; height:34px; border-radius:10px; flex-shrink:0; display:flex; align-items:center; justify-content:center; background:var(--orbi-accent-bg); color:var(--orbi-accent); font-size:16px; }
.fly-main{ flex:1; min-width:0; display:flex; flex-direction:column; }
.fly-nom{ font-weight:600; font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fly-meta{ font-size:11.5px; color:var(--orbi-muted); }
.fly-precio{ font-weight:700; color:var(--orbi-navy); font-variant-numeric:tabular-nums; flex-shrink:0; }
[data-theme="dark"] .fly-precio{ color:var(--orbi-accent); }

/* Sidebar: botón de cerrar sesión (usa estilos de .sb-link) */
.orbi-sidebar .sb-logout{ margin:4px 12px 14px; color:var(--orbi-sidebar-muted); }
.orbi-sidebar .sb-logout:hover{ background:var(--orbi-sidebar-hover); color:#fff; }

/* =====================================================================
   ── INV-01 · Lista fresca de productos (filas-tarjeta estilo POS) ──
   Reemplaza la tabla por filas tipo carrito: thumbnail tintado por semáforo,
   nombre + meta, almacén, badge de stock y valor de inventario. Flex con
   anchos fijos a la derecha para que las columnas alineen entre filas.
   ===================================================================== */
.prod-listwrap{ flex:1; min-height:0; display:flex; flex-direction:column; overflow:hidden; }

.prod-listhead{
  display:flex; align-items:center; gap:14px; padding:8px 22px 8px 18px;
  font-size:10.5px; font-weight:700; text-transform:uppercase; letter-spacing:.05em;
  color:var(--orbi-muted); border-bottom:1px solid var(--orbi-border); flex-shrink:0;
}
.prod-listhead .ph-sp{ width:42px; flex-shrink:0; }
.prod-listhead .ph-art{ flex:1; min-width:0; }
.prod-listhead .ph-alm{ width:140px; flex-shrink:0; }
.prod-listhead .ph-ex{ width:138px; flex-shrink:0; text-align:center; }
.prod-listhead .ph-caj{ width:96px; flex-shrink:0; text-align:center; }
.prod-listhead .ph-val{ width:118px; flex-shrink:0; text-align:right; }
.prod-listhead .ph-go{ width:20px; flex-shrink:0; }

.prod-list{ flex:1; min-height:0; overflow-y:auto; padding:8px; display:flex; flex-direction:column; gap:6px; }
.prod-list::-webkit-scrollbar{ width:8px; }
.prod-list::-webkit-scrollbar-thumb{ background:var(--orbi-border); border-radius:4px; }

.prod-row{
  display:flex; align-items:center; gap:14px; padding:10px 12px;
  border-radius:14px; background:var(--orbi-surface); border:1px solid var(--orbi-border);
  cursor:pointer; outline:none;
  transition:transform .12s var(--orbi-ease), box-shadow .15s var(--orbi-ease), border-color .15s var(--orbi-ease), background .15s var(--orbi-ease);
}
@media (hover:hover){
  .prod-row:hover{ transform:translateY(-1px); box-shadow:0 10px 26px rgba(30,50,110,.12); border-color:rgba(var(--orbi-accent-rgb),.35); }
}
.prod-row:focus-visible{ border-color:var(--orbi-accent); box-shadow:0 0 0 .2rem var(--orbi-accent-bg); }

.prod-thumb{
  position:relative; overflow:hidden;
  width:42px; height:42px; border-radius:12px; flex-shrink:0;
  display:flex; align-items:center; justify-content:center; font-size:19px;
  background:var(--orbi-accent-bg); color:var(--orbi-accent);
}
/* Miniatura por SKU (assets/images/productos/SKU-A.jpg); si no existe, el JS la
   quita (onerror) y queda visible el ícono placeholder de abajo. */
.prod-thumb img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.prod-thumb.tone-ok{   background:var(--orbi-cat-green-bg);  color:var(--orbi-cat-green); }
.prod-thumb.tone-warn{ background:var(--orbi-cat-orange-bg); color:var(--orbi-cat-orange); }
.prod-thumb.tone-bad{  background:var(--orbi-cat-red-bg);    color:var(--orbi-cat-red); }
.prod-thumb.tone-na{   background:var(--orbi-gray-bg);       color:var(--orbi-muted); }

.prod-info{ flex:1; min-width:0; }
.prod-nom{ font-weight:600; font-size:14px; color:var(--orbi-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.prod-meta{ font-size:11.5px; color:var(--orbi-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* Resaltado del término buscado (color del tema). General/reutilizable. */
.hl-q{ background:rgba(var(--orbi-accent-rgb),.20); color:var(--orbi-accent); font-weight:700; border-radius:3px; padding:0 1px; }
/* SKU (id externo) como identificador visible del artículo en el listado. */
.prod-meta .prod-sku{ font-family:monospace; font-weight:700; color:var(--orbi-text); }
.prod-meta .prod-nosku{ font-style:italic; color:var(--orbi-muted); }

.prod-alm{ width:140px; flex-shrink:0; font-size:12.5px; color:var(--orbi-muted); display:inline-flex; align-items:center; gap:5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

.badge-stk{
  width:138px; flex-shrink:0; justify-content:center;
  display:inline-flex; align-items:center; gap:6px;
  font-size:12px; font-weight:700; border-radius:var(--orbi-r-pill); padding:5px 10px;
}
.badge-stk.ok{   background:var(--orbi-cat-green-bg);  color:var(--orbi-cat-green); }
.badge-stk.warn{ background:var(--orbi-cat-orange-bg); color:var(--orbi-cat-orange); }
.badge-stk.bad{  background:var(--orbi-cat-red-bg);    color:var(--orbi-cat-red); }
.badge-stk.na{   background:var(--orbi-gray-bg);       color:var(--orbi-muted); }

/* Conteo de cajas (nº de empaques completos + piezas sueltas). */
.prod-caj{
  width:96px; flex-shrink:0; text-align:center; line-height:1.15;
  font-weight:700; font-size:14.5px; color:var(--orbi-text); font-variant-numeric:tabular-nums;
  display:flex; flex-direction:column; align-items:center;
}
.prod-caj small{ font-size:10px; font-weight:600; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.03em; }
.prod-caj.empty{ color:var(--orbi-muted); font-weight:600; }

.prod-val{
  width:118px; flex-shrink:0; text-align:right; line-height:1.15;
  font-weight:700; font-size:14.5px; color:var(--orbi-navy); font-variant-numeric:tabular-nums;
  display:flex; flex-direction:column; align-items:flex-end;
}
.prod-val small{ font-size:10px; font-weight:600; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.03em; }
[data-theme="dark"] .prod-val{ color:#A9A2FF; }

.prod-go{ width:20px; flex-shrink:0; color:var(--orbi-muted); font-size:16px; text-align:center; }

.prod-loading, .prod-empty{ padding:28px 14px; text-align:center; color:var(--orbi-muted); font-size:13px; }
.prod-empty i, .prod-loading i{ font-size:22px; display:block; margin-bottom:6px; }

/* Responsive: en pantallas chicas se ocultan columnas secundarias */
@media (max-width:760px){
  .prod-listhead .ph-alm, .prod-row .prod-alm{ display:none; }
  .prod-listhead .ph-alm{ width:0; }
}
@media (max-width:520px){
  .prod-listhead{ display:none; }
  .badge-stk{ width:auto; }
  .prod-val small{ display:none; }
  .prod-caj{ display:none; }
}

/* INV-03/04/05: el antiguo look "fila-tarjeta" se retiró. Ahora esas vistas
   usan la clase general .inv-plana (mismo look que inv01). Ver sección .inv-plana. */


/* =====================================================================
   ── Select nativo ── (reemplaza al antiguo orbiSelect)
   Combobox NATIVO del navegador, tematizado con los tokens de OrbiCaja.
   El desplegable de opciones lo pinta el sistema operativo → fiable dentro
   de modales, contenedores con overflow y tarjetas glass, sin recortes.
   Se aplica a TODOS los <select> salvo [multiple], listbox ([size]) y los
   marcados con .osel-skip. Mantiene el mismo look (44px, min 160px, caret,
   foco de acento) que tenía el dropdown anterior para no alterar layouts.
   ===================================================================== */
select:not([multiple]):not([size]):not(.osel-skip){
  -webkit-appearance:none; -moz-appearance:none; appearance:none;
  display:inline-block; vertical-align:middle;
  min-height:44px; min-width:160px; max-width:100%;
  padding:0 38px 0 12px;
  background-color:var(--orbi-input-bg);
  background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%236c757d' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
  background-repeat:no-repeat; background-position:right 12px center; background-size:13px 11px;
  border:1px solid var(--orbi-border); border-radius:var(--orbi-r-sm);
  color:var(--orbi-text); font-size:14px; font-weight:500; line-height:1.2;
  cursor:pointer; text-overflow:ellipsis;
  transition:border-color .15s var(--orbi-ease), box-shadow .15s var(--orbi-ease), background-color .15s var(--orbi-ease);
}
select:not([multiple]):not([size]):not(.osel-skip):hover{ border-color:rgba(var(--orbi-accent-rgb),.4); }
select:not([multiple]):not([size]):not(.osel-skip):focus,
select:not([multiple]):not([size]):not(.osel-skip):focus-visible{
  border-color:var(--orbi-accent); box-shadow:0 0 0 .2rem var(--orbi-accent-bg); outline:none;
}
select:not([multiple]):not([size]):not(.osel-skip):disabled{ opacity:.55; cursor:not-allowed; }
/* En tema oscuro el caret debe ser claro para contrastar. */
[data-theme="dark"] select:not([multiple]):not([size]):not(.osel-skip){
  background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
}
/* El desplegable del SO no hereda el tema; fijamos opciones legibles siempre. */
select:not([multiple]):not([size]):not(.osel-skip) option{ color:#212529; background-color:#fff; }

/* =====================================================================
   ── Notificaciones ──  campana del topbar (flyout) + Centro (página).
   Reutiliza los tokens del shell; compatible con tema claro/oscuro.
   ===================================================================== */

/* Badge rojo con el número de no leídas (sustituye al punto fijo .tb-dot). */
.orbi-topbar .tb-notif{ position:relative; }
.orbi-topbar .tb-badge{
  position:absolute; top:-4px; right:-4px; min-width:18px; height:18px; padding:0 5px;
  border-radius:999px; background:var(--orbi-cat-red); color:#fff;
  font-size:11px; font-weight:800; line-height:18px; text-align:center;
  border:2px solid var(--orbi-card); box-shadow:0 1px 3px rgba(0,0,0,.25);
}
.orbi-topbar .tb-icon.has-unread{ color:var(--orbi-cat-red); }
.orbi-topbar .tb-icon.has-unread i{ animation:ntBell 1.4s var(--orbi-ease) 1; transform-origin:50% 0; }
@keyframes ntBell{ 0%,100%{transform:rotate(0)} 20%{transform:rotate(12deg)} 40%{transform:rotate(-10deg)} 60%{transform:rotate(6deg)} 80%{transform:rotate(-3deg)} }

/* Flyout */
.notif-pop{
  position:absolute; top:calc(100% + 10px); right:0; width:360px; max-width:92vw; z-index:50;
  background:var(--orbi-card); border:1px solid var(--orbi-border);
  border-radius:16px; box-shadow:var(--orbi-shadow-float); overflow:hidden;
  animation:orbiSlideDown .18s var(--orbi-ease) both;
}
.notif-pop-head{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:12px 14px; border-bottom:1px solid var(--orbi-border);
}
.notif-pop-head .nt-h-title{ font-weight:700; color:var(--orbi-text); font-size:14.5px; }
.notif-pop-head .nt-h-title i{ color:var(--orbi-accent); margin-right:4px; }
.nt-readall{
  border:0; background:transparent; color:var(--orbi-accent); cursor:pointer;
  font-size:12.5px; font-weight:600; padding:4px 8px; border-radius:8px;
}
.nt-readall:hover{ background:var(--orbi-accent-bg); }
.notif-list{ max-height:min(420px,60vh); overflow-y:auto; }
.notif-pop-foot{ border-top:1px solid var(--orbi-border); text-align:center; padding:9px; }
.notif-pop-foot a{ font-size:13px; font-weight:600; }

/* Etiqueta de sección (Nuevas / Anteriores) */
.nt-seclabel{
  font-size:11px; font-weight:700; letter-spacing:.06em; text-transform:uppercase;
  color:var(--orbi-muted); padding:10px 14px 4px;
}

/* Item de notificación (flyout y página comparten clases) */
.nt-item{
  display:flex; align-items:flex-start; gap:11px; padding:11px 14px;
  border-bottom:1px solid var(--orbi-border); text-decoration:none; color:inherit;
  position:relative; transition:background var(--orbi-dur-fast) var(--orbi-ease); cursor:pointer;
}
.nt-item:last-child{ border-bottom:0; }
.nt-item:hover{ background:var(--orbi-gray-bg); }
.nt-item.is-unread{ background:var(--orbi-accent-bg); }
.nt-item.is-unread::before{
  content:""; position:absolute; left:0; top:0; bottom:0; width:3px; background:var(--orbi-accent);
}
.nt-ico{
  flex-shrink:0; width:38px; height:38px; border-radius:11px;
  display:flex; align-items:center; justify-content:center; font-size:18px;
}
.nt-body{ min-width:0; display:flex; flex-direction:column; gap:2px; flex:1; }
.nt-title{ font-weight:700; font-size:13.5px; color:var(--orbi-text); line-height:1.25; }
.nt-msg{ font-size:12.5px; color:var(--orbi-muted); line-height:1.35; }
.nt-time{ font-size:11px; color:var(--orbi-muted); opacity:.85; margin-top:1px; }
.nt-item.is-unread .nt-title{ color:var(--orbi-text); }
.nt-dot{ flex-shrink:0; width:9px; height:9px; border-radius:50%; background:var(--orbi-accent); margin-top:6px; }

/* Cerrar (×) una notificación (marca leída y la quita del listado superior) */
.nt-close{
  flex-shrink:0; align-self:center; cursor:pointer; color:var(--orbi-muted);
  display:inline-flex; align-items:center; justify-content:center;
  width:26px; height:26px; font-size:12px; border-radius:8px; opacity:0;
  transition:background var(--orbi-dur-fast) var(--orbi-ease),
             color var(--orbi-dur-fast) var(--orbi-ease),
             opacity var(--orbi-dur-fast) var(--orbi-ease);
}
.nt-item:hover .nt-close, .nt-close:focus{ opacity:1; }            /* en el flyout aparece al pasar el cursor */
.nt-close:hover{ background:var(--orbi-cat-red-bg); color:var(--orbi-cat-red); }
@media (hover:none){ .nt-close{ opacity:1; } }                     /* en táctil siempre visible */

/* Chips de color por severidad/tipo (mapean a los tokens de categoría) */
.nt-c-red{    background:var(--orbi-cat-red-bg);    color:var(--orbi-cat-red); }
.nt-c-amber{  background:var(--orbi-cat-orange-bg); color:var(--orbi-cat-orange); }
.nt-c-blue{   background:var(--orbi-cat-blue-bg);   color:var(--orbi-cat-blue); }
.nt-c-green{  background:var(--orbi-cat-green-bg);  color:var(--orbi-cat-green); }
.nt-c-purple{ background:var(--orbi-cat-purple-bg); color:var(--orbi-cat-purple); }

/* Vacío / cargando */
.nt-empty{ text-align:center; color:var(--orbi-muted); padding:34px 18px; }
.nt-empty i{ font-size:30px; color:var(--orbi-accent); opacity:.7; display:block; margin-bottom:8px; }
.nt-empty p{ margin:0; font-weight:700; color:var(--orbi-text); }
.nt-empty span{ font-size:12.5px; }
.nt-spin{ animation:ntSpin 1s linear infinite; }
@keyframes ntSpin{ to{ transform:rotate(360deg); } }

/* ---------- Centro de notificaciones (página ?p=not01) ---------- */
.nt-centro{
  max-width:720px; margin:0 auto; width:100%; padding:18px;
  background:var(--orbi-card); border:1px solid var(--orbi-border);
  border-radius:var(--orbi-r-card); box-shadow:var(--orbi-shadow-card);
  align-self:flex-start;
}
.nt-centro .nt-item{ border-radius:12px; border-bottom:0; margin-bottom:6px; }
.nt-centro .nt-item.is-unread{ background:var(--orbi-accent-bg); }
.nt-centro .nt-item:not(.is-unread){ background:var(--orbi-gray-bg); }
.nt-centro .nt-seclabel{ padding-left:4px; }
.nt-centro .nt-close{ opacity:1; }                 /* en la página completa siempre visible */
.nt-empty-lg{ padding:60px 18px; }
.nt-empty-lg i{ font-size:46px; }

/* Responsive: en móvil el flyout ocupa casi todo el ancho, anclado a la derecha */
@media (max-width:560px){
  .notif-pop{ position:fixed; top:64px; right:8px; left:8px; width:auto; max-width:none; }
}

/* =====================================================================
   TEMA: presets de color de acento (selector del topbar) + popovers de
   tema y perfil. El acento se aplica con [data-accent] en <html>; el
   modo claro/oscuro sigue en [data-theme]. Púrpura es el default (:root).
   ===================================================================== */
[data-accent="azul"]   { --orbi-accent:#2B5CE6; --orbi-accent-bg:#E7EEFC; --orbi-mid:#1E50C8; --orbi-accent-rgb:43,92,230;   --orbi-accent2:#4F46E5; --orbi-accent2-rgb:79,70,229; }
[data-accent="teal"]   { --orbi-accent:#0EA37D; --orbi-accent-bg:#D8F3EA; --orbi-mid:#0B8267; --orbi-accent-rgb:14,163,125;  --orbi-accent2:#0891B2; --orbi-accent2-rgb:8,145,178; }
[data-accent="indigo"] { --orbi-accent:#4F46E5; --orbi-accent-bg:#E8E7FB; --orbi-mid:#3F37C9; --orbi-accent-rgb:79,70,229;   --orbi-accent2:#6C63FF; --orbi-accent2-rgb:108,99,255; }
[data-accent="rosa"]   { --orbi-accent:#E0408A; --orbi-accent-bg:#FBE5F0; --orbi-mid:#C42E73; --orbi-accent-rgb:224,64,138;  --orbi-accent2:#EC4899; --orbi-accent2-rgb:236,72,153; }
[data-accent="ambar"]  { --orbi-accent:#D97706; --orbi-accent-bg:#FBEBD7; --orbi-mid:#B45F05; --orbi-accent-rgb:217,119,6;   --orbi-accent2:#F59E0B; --orbi-accent2-rgb:245,158,11; }
[data-accent="cian"]   { --orbi-accent:#0891B2; --orbi-accent-bg:#DCF1F7; --orbi-mid:#0B7595; --orbi-accent-rgb:8,145,178;   --orbi-accent2:#0EA37D; --orbi-accent2-rgb:14,163,125; }
[data-accent="amarillo"] { --orbi-accent:#CA8A04; --orbi-accent-bg:#FBF1CC; --orbi-mid:#A16207; --orbi-accent-rgb:202,138,4;   --orbi-accent2:#EAB308; --orbi-accent2-rgb:234,179,8; }
[data-accent="carmesi"]  { --orbi-accent:#E11D48; --orbi-accent-bg:#FCE2E8; --orbi-mid:#BE123C; --orbi-accent-rgb:225,29,72;   --orbi-accent2:#FB7185; --orbi-accent2-rgb:251,113,133; }
[data-accent="grafito"]  { --orbi-accent:#475569; --orbi-accent-bg:#EAEEF3; --orbi-mid:#334155; --orbi-accent-rgb:71,85,105;   --orbi-accent2:#64748B; --orbi-accent2-rgb:100,116,139; }

/* Botón del topbar (tema/perfil) reutiliza .tb-icon ya existente */
.tb-pop{
  position:absolute; top:calc(100% + 8px); right:0; z-index:80;
  background:var(--orbi-card); border:1px solid var(--orbi-border);
  border-radius:14px; box-shadow:var(--orbi-shadow-float); padding:14px;
  min-width:248px;
}
.tb-pop[hidden]{ display:none; }
.tb-pop .pop-h{ font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.5px; color:var(--orbi-muted); margin:0 0 9px; }
.tb-popwrap{ position:relative; }

/* Selector claro/oscuro segmentado */
.tema-modo{ display:flex; background:var(--orbi-input-bg); border:1px solid var(--orbi-border); border-radius:10px; padding:3px; gap:3px; margin-bottom:14px; }
.tema-modo button{ flex:1; border:none; background:transparent; color:var(--orbi-muted); font-size:12.5px; font-weight:600; padding:7px 10px; border-radius:8px; cursor:pointer; display:flex; align-items:center; justify-content:center; gap:6px; }
.tema-modo button.on{ background:var(--orbi-card); color:var(--orbi-accent); box-shadow:0 1px 3px rgba(16,24,40,.12); }

/* Muestrario de acentos */
.tema-swatches{ display:flex; flex-wrap:wrap; gap:10px; }
.swatch{ width:30px; height:30px; border-radius:50%; cursor:pointer; border:2px solid transparent; position:relative; transition:transform .12s; }
.swatch:hover{ transform:scale(1.1); }
.swatch.on{ border-color:var(--orbi-text); }
.swatch.on::after{ content:'\F26E'; font-family:'bootstrap-icons'; position:absolute; inset:0; display:flex; align-items:center; justify-content:center; color:#fff; font-size:13px; }

/* Popover de perfil */
.perfil-pop{ min-width:260px; }
.perfil-id{ display:flex; align-items:center; gap:11px; padding-bottom:12px; margin-bottom:10px; border-bottom:1px solid var(--orbi-border); }
.perfil-id .pa{ width:42px; height:42px; border-radius:50%; background:var(--orbi-accent); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:700; font-size:16px; flex-shrink:0; }
.perfil-id .pn{ font-size:14px; font-weight:600; color:var(--orbi-text); line-height:1.2; }
.perfil-id .pr{ font-size:12px; color:var(--orbi-muted); }
.perfil-soporte{ display:flex; align-items:center; gap:7px; font-size:11.5px; font-weight:600; color:#B45309; background:#FEF3C7; border-radius:8px; padding:7px 10px; margin-bottom:10px; }
.perfil-pop .pop-item{ display:flex; align-items:center; gap:10px; width:100%; border:none; background:transparent; color:var(--orbi-text); font-size:13px; padding:9px 10px; border-radius:9px; cursor:pointer; text-align:left; }
.perfil-pop .pop-item:hover{ background:var(--orbi-input-bg); }
.perfil-pop .pop-item i{ color:var(--orbi-accent); font-size:15px; width:18px; text-align:center; }
.perfil-pop .pop-item.danger:hover{ color:var(--orbi-red); }
.perfil-pop .pop-item.danger:hover i{ color:var(--orbi-red); }

/* Avatar como botón */
button.tb-ava{ border:none; cursor:pointer; }

/* ===== Modal de ficha reutilizable (listado + modal) para catálogos ===== */
.cm-overlay{ display:none; position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:1080; align-items:center; justify-content:center; padding:20px; }
.cm-overlay.show{ display:flex; }
.cm-box{ background:var(--orbi-surface); border-radius:var(--orbi-r-lg); width:620px; max-width:100%; max-height:92vh; overflow:hidden; display:flex; flex-direction:column; box-shadow:0 20px 50px rgba(26,26,110,.25); }
.cm-hdr{ background:var(--orbi-navy); padding:12px 16px; display:flex; align-items:center; gap:10px; flex-shrink:0; }
.cm-icon{ width:34px; height:34px; border-radius:var(--orbi-r-sm); background:rgba(255,255,255,.15); display:flex; align-items:center; justify-content:center; color:#fff; font-size:17px; flex-shrink:0; }
.cm-info{ flex:1; min-width:0; }
.cm-nom{ font-size:14px; font-weight:600; color:#fff; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cm-sub{ font-size:11px; color:rgba(255,255,255,.6); }
.cm-badge{ font-size:10px; padding:3px 9px; border-radius:20px; background:rgba(255,255,255,.15); color:rgba(255,255,255,.85); white-space:nowrap; flex-shrink:0; }
.cm-x{ background:rgba(255,255,255,.15); border:.5px solid rgba(255,255,255,.3); border-radius:var(--orbi-r-sm); color:#fff; font-size:15px; font-weight:700; width:30px; height:30px; cursor:pointer; flex-shrink:0; }
.cm-body{ overflow-y:auto; flex:1; padding:16px; display:flex; flex-direction:column; gap:10px; }
.cm-foot{ padding:10px 16px; border-top:1px solid var(--orbi-border); display:flex; gap:8px; justify-content:flex-end; flex-shrink:0; background:var(--orbi-input-bg); }
.cm-sec{ font-size:10px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; margin:2px 0; }
/* Permisos del grupo (CAT-10): tags de módulos permitidos/denegados, lectura */
.perm-box{ background:var(--orbi-input-bg); border:.5px solid var(--orbi-border); border-radius:8px; padding:10px 12px; }
.perm-box .perm-empty{ font-size:11px; color:var(--orbi-muted); }
.perm-tags{ display:flex; flex-wrap:wrap; gap:6px; }
.perm-tag{ font-size:11px; padding:3px 10px; border-radius:20px; background:var(--orbi-teal-bg); color:var(--orbi-teal); display:inline-flex; align-items:center; gap:4px; }
.perm-tag.no{ background:var(--orbi-input-bg); color:var(--orbi-muted); text-decoration:line-through; opacity:.7; }

/* Fila separadora de grupo en listados (inv-table) */
.inv-table tr.grp-sep td{ background:var(--orbi-input-bg); color:var(--orbi-navy); font-weight:700; font-size:11px; text-transform:uppercase; letter-spacing:.4px; padding:6px 10px; position:sticky; }
.inv-table tr.grp-sep td i{ color:var(--orbi-accent); margin-right:5px; }

/* ===================================================================
   Baja inteligente de catálogos: botón × por fila + overlay de confirmación
   =================================================================== */
.inv-table th.col-x, .inv-table td.td-x{ width:46px; text-align:center; padding-right:12px; }
.btn-ocultar{
    width:28px; height:28px; border-radius:8px; border:.5px solid var(--orbi-border);
    background:var(--orbi-surface); color:var(--orbi-muted); cursor:pointer;
    display:inline-flex; align-items:center; justify-content:center; font-size:14px;
    transition:background .15s ease, color .15s ease, border-color .15s ease;
}
.btn-ocultar:hover{ background:#FEECEC; color:#DC2626; border-color:#F5B5B5; }

.ocultar-ov{
    position:fixed; inset:0; background:rgba(15,23,42,.5); z-index:2000;
    display:none; align-items:center; justify-content:center; padding:16px;
}
.ocultar-ov.show{ display:flex; }
.ocultar-box{
    width:100%; max-width:400px; background:var(--orbi-surface); border-radius:var(--orbi-r-md,12px);
    box-shadow:0 20px 50px rgba(0,0,0,.3); overflow:hidden;
}
.ocultar-hdr{
    background:var(--orbi-navy); color:#fff; padding:12px 16px; font-weight:600; font-size:14px;
    display:flex; align-items:center; gap:8px;
}
.ocultar-hdr i{ color:#FCD34D; }
.ocultar-body{ padding:16px; }
.ocultar-txt{ font-size:14px; color:var(--orbi-text); margin:0 0 6px; }
.ocultar-hint{ font-size:11.5px; color:var(--orbi-muted); margin:0 0 12px; line-height:1.4; }
.ocultar-lbl{ font-size:11px; text-transform:uppercase; letter-spacing:.4px; color:var(--orbi-muted); display:block; margin-bottom:4px; }
.ocultar-inp{
    width:100%; min-height:40px; border:.5px solid var(--orbi-border); border-radius:8px;
    background:var(--orbi-input-bg); padding:0 12px; font-size:14px; color:var(--orbi-text); outline:none;
}
.ocultar-inp:focus{ border-color:var(--orbi-accent); }
.ocultar-foot{ padding:12px 16px; background:var(--orbi-input-bg); display:flex; justify-content:flex-end; gap:8px; }

/* =====================================================================
   ── VENTAS ESPECIALES ── (módulo ventasespeciales, vistas vesp00..vesp03).
   Reusa los tokens --orbi-*; scopeado bajo body.orbi-vesp. Los listados usan
   .inv-plana estándar; aquí van el tablero y los formularios de OR/recepción/factura.
   ===================================================================== */
/* Ancho COMPLETO (scrollbar pegado al borde derecho del panel) + contenido
   centrado por padding lateral (no por margin:auto, que dejaba el scroll al centro). */
body.orbi-vesp .ve-page{ max-width:none; margin:0; width:auto; padding:20px max(18px, calc((100% - 980px) / 2)) 32px; }
body.orbi-vesp .ve-form{ max-width:none; margin:0; width:auto; padding:16px max(18px, calc((100% - 880px) / 2)) 32px; display:flex; flex-direction:column; gap:12px; }
.ve-seclabel{ font-size:11px; font-weight:600; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; margin:0 0 10px; }

/* Tablero: indicadores */
.ve-stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-bottom:22px; }
.ve-stat{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:12px; padding:14px; text-align:center; }
.ve-stat .n{ font-size:22px; font-weight:700; }
.ve-stat .l{ font-size:10.5px; color:var(--orbi-muted); margin-top:2px; }
.ve-az{ color:var(--orbi-accent); } .ve-gn{ color:var(--orbi-teal); } .ve-am{ color:var(--orbi-amber); } .ve-rj{ color:var(--orbi-red); }

/* Tablero: flujo del proceso */
.ve-flujo{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:14px; padding:16px; margin-bottom:24px; display:flex; align-items:center; }
.ve-paso{ flex:1; text-align:center; padding:8px; position:relative; }
.ve-paso:not(:last-child)::after{ content:'\F138'; font-family:'bootstrap-icons'; position:absolute; right:-8px; top:38%; font-size:16px; color:var(--orbi-border); }
.ve-paso .ic{ width:46px; height:46px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:20px; margin:0 auto 8px; }
.ve-paso .ic.f1{ background:var(--orbi-accent-bg); color:var(--orbi-accent); }
.ve-paso .ic.f2{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.ve-paso .ic.f3{ background:var(--orbi-amber-bg); color:var(--orbi-amber); }
.ve-paso .nom{ font-size:12.5px; font-weight:600; color:var(--orbi-text); }
.ve-paso .sub{ font-size:10.5px; color:var(--orbi-muted); margin-top:2px; }

/* Formularios: tarjetas por sección */
.ve-sec{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:12px; padding:14px 16px; }
.ve-fld{ display:flex; flex-direction:column; gap:4px; margin-bottom:8px; }
.ve-fld label{ font-size:10px; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.4px; }
.ve-fld input, .ve-fld select, .ve-inp{ font-size:13px; border-radius:8px; border:.5px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text); padding:7px 10px; width:100%; outline:none; }
.ve-fld input:disabled{ opacity:.7; }
.ve-fld input:not(:disabled):focus, .ve-fld select:focus, .ve-inp:focus{ border-color:var(--orbi-accent); background:var(--orbi-surface); }
.ve-g2{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.ve-g3{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px; }

/* Buscador con botón (cliente / artículo) */
.ve-search{ display:flex; gap:8px; }
.ve-search input{ flex:1; }
.ve-ac{ position:relative; }
.ve-ac-pop{ position:absolute; z-index:30; left:0; right:0; top:calc(100% + 4px); background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:10px; box-shadow:0 8px 24px rgba(16,24,40,.12); max-height:280px; overflow-y:auto; }
.ve-ac-item{ padding:8px 12px; cursor:pointer; border-bottom:1px solid var(--orbi-border); font-size:12.5px; }
.ve-ac-item:last-child{ border-bottom:none; }
.ve-ac-item:hover, .ve-ac-item.sel{ background:rgba(var(--orbi-accent-rgb),.10); }
.ve-ac-item .sub{ font-size:11px; color:var(--orbi-muted); }

/* Ficha de cliente elegido */
.ve-cli{ background:var(--orbi-input-bg); border:.5px solid var(--orbi-border); border-radius:10px; padding:10px 14px; display:flex; align-items:center; gap:12px; }
.ve-cli .ic{ width:38px; height:38px; border-radius:10px; background:var(--orbi-teal-bg); color:var(--orbi-teal); display:flex; align-items:center; justify-content:center; font-size:18px; flex-shrink:0; }
.ve-cli .nom{ font-size:13px; font-weight:600; color:var(--orbi-text); }
.ve-cli .rfc{ font-size:11px; font-family:monospace; color:var(--orbi-muted); }
.ve-empty{ text-align:center; padding:16px; color:var(--orbi-muted); font-size:12.5px; }
.ve-empty i{ font-size:26px; opacity:.25; display:block; margin-bottom:6px; }

/* Tabla de partidas */
.ve-t{ width:100%; border-collapse:collapse; font-size:12.5px; }
.ve-t th{ padding:6px 8px; background:var(--orbi-input-bg); border-bottom:1px solid var(--orbi-border); font-weight:600; color:var(--orbi-muted); text-transform:uppercase; font-size:10px; text-align:left; }
.ve-t td{ padding:8px; border-bottom:1px solid var(--orbi-border); color:var(--orbi-text); vertical-align:middle; }
.ve-t td.r, .ve-t th.r{ text-align:right; }
.ve-t td.c, .ve-t th.c{ text-align:center; }
.ve-qty{ width:64px; font-size:12.5px; border:.5px solid var(--orbi-border); border-radius:6px; padding:5px 6px; text-align:center; outline:none; background:var(--orbi-input-bg); color:var(--orbi-text); }
.ve-qty:focus{ border-color:var(--orbi-accent); }
.ve-rm{ background:none; border:none; cursor:pointer; color:var(--orbi-muted); font-size:15px; }
.ve-rm:hover{ color:var(--orbi-red); }
.ve-neg{ font-size:10.5px; color:var(--orbi-red); }
.ve-code{ font-size:10.5px; font-family:monospace; color:var(--orbi-muted); }

/* Totales */
.ve-tot{ background:var(--orbi-input-bg); border:.5px solid var(--orbi-border); border-radius:10px; padding:12px 14px; }
.ve-tot .row{ display:flex; justify-content:space-between; font-size:12.5px; padding:2px 0; }
.ve-tot .row .lbl{ color:var(--orbi-muted); }
.ve-tot .sep{ height:1px; background:var(--orbi-border); margin:6px 0; }
.ve-tot .grand{ font-weight:700; font-size:17px; color:var(--orbi-teal); }

/* Anticipo */
.ve-ant{ background:var(--orbi-accent-bg); border:.5px solid rgba(var(--orbi-accent-rgb),.4); border-radius:10px; padding:12px 14px; }
.ve-ant .lbl{ font-size:10px; font-weight:600; color:var(--orbi-accent); text-transform:uppercase; margin-bottom:8px; }
.ve-ant-tipos{ display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:10px; }
.ve-ant-tipo{ border:.5px solid rgba(var(--orbi-accent-rgb),.4); border-radius:8px; padding:9px 10px; cursor:pointer; display:flex; align-items:center; gap:8px; font-size:12.5px; background:var(--orbi-surface); }
.ve-ant-tipo.sel{ border-color:var(--orbi-accent); background:var(--orbi-accent-bg); }
.ve-ant-monto{ font-size:22px; font-weight:700; color:var(--orbi-accent); border:none; background:transparent; outline:none; width:100%; text-align:right; }
.ve-ant .saldo{ font-size:12px; color:var(--orbi-accent); margin-top:4px; text-align:right; }

/* Saldo resultante */
.ve-saldo{ border-radius:10px; padding:12px 16px; display:flex; justify-content:space-between; align-items:center; }
.ve-saldo.cero{ background:var(--orbi-teal-bg); border:.5px solid var(--orbi-teal); }
.ve-saldo.pend{ background:var(--orbi-amber-bg); border:.5px solid var(--orbi-amber); }
.ve-saldo .big{ font-size:22px; font-weight:700; }

/* Stepper de pasos (factura) */
.ve-steps{ display:flex; background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:10px; overflow:hidden; }
.ve-step{ flex:1; padding:8px; text-align:center; font-size:10.5px; color:var(--orbi-muted); border-right:1px solid var(--orbi-border); }
.ve-step:last-child{ border-right:none; }
.ve-step.act{ background:var(--orbi-accent-bg); color:var(--orbi-accent); font-weight:600; }
.ve-step.done{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.ve-step .n{ font-size:13px; font-weight:700; display:block; }

/* Avisos */
.ve-note{ border-radius:8px; padding:9px 12px; font-size:11.5px; display:flex; gap:6px; align-items:flex-start; }
.ve-note.info{ background:var(--orbi-accent-bg); border:.5px solid rgba(var(--orbi-accent-rgb),.35); color:var(--orbi-accent); }
.ve-note.warn{ background:var(--orbi-red-bg); border:.5px solid var(--orbi-red); color:var(--orbi-red); }

/* Selección de OR (recepción) */
.ve-orlist{ display:flex; flex-direction:column; gap:8px; }
.ve-oritem{ border:.5px solid var(--orbi-border); border-radius:10px; padding:10px 14px; cursor:pointer; display:flex; align-items:center; gap:12px; }
.ve-oritem:hover{ border-color:var(--orbi-accent); background:var(--orbi-accent-bg); }
.ve-oritem.sel{ border-color:var(--orbi-teal); background:var(--orbi-teal-bg); }
.ve-oritem .fol{ font-family:monospace; font-weight:700; color:var(--orbi-accent); font-size:13px; width:96px; flex-shrink:0; }
.ve-oritem .cli{ font-size:12.5px; font-weight:600; color:var(--orbi-text); }
.ve-oritem .det{ font-size:11px; color:var(--orbi-muted); }
.ve-oritem .tot{ font-size:13px; font-weight:700; color:var(--orbi-teal); margin-left:auto; }

/* Badges de estado del listado */
body.orbi-vesp .bdg{ font-size:10px; padding:2px 9px; border-radius:20px; white-space:nowrap; font-weight:600; }
body.orbi-vesp .bdg.b-pend{ background:var(--orbi-accent-bg); color:var(--orbi-accent); }
body.orbi-vesp .bdg.b-rec{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
body.orbi-vesp .bdg.b-fact{ background:var(--orbi-amber-bg); color:var(--orbi-amber); }
body.orbi-vesp .bdg.b-cerr{ background:var(--orbi-input-bg); color:var(--orbi-muted); }

/* Pie de acciones */
.ve-actions{ display:flex; gap:8px; justify-content:flex-end; }

/* Resultado de timbrado */
.ve-result{ background:var(--orbi-teal-bg); border:1px solid var(--orbi-teal); border-radius:12px; padding:24px; text-align:center; }
.ve-result .ic{ font-size:40px; color:var(--orbi-teal); margin-bottom:8px; }
.ve-result .tit{ font-size:16px; font-weight:600; color:var(--orbi-teal); margin-bottom:4px; }
.ve-result .uuid{ font-family:monospace; font-size:12px; color:var(--orbi-teal); word-break:break-all; }

@media (max-width:720px){
  body.orbi-vesp .ve-stats{ grid-template-columns:repeat(2,1fr); }
  body.orbi-vesp .ve-flujo{ flex-direction:column; gap:12px; }
  body.orbi-vesp .ve-paso:not(:last-child)::after{ content:none; }
  body.orbi-vesp .ve-g2, body.orbi-vesp .ve-g3{ grid-template-columns:1fr; }
}

/* =====================================================================
   ── Riel lateral: Inicio SIEMPRE al centro vertical + overflow a "⋯ más" ──
   Solo en el riel de escritorio (body.orbi-page). El .sb-nav se parte en dos
   zonas flex:1 (arriba/abajo) con el FAB de Inicio fijo en medio -> queda
   centrado a cualquier resolución. sb-fit.js mide la altura y manda los íconos
   que no caben (los más lejanos a Inicio) al popover del botón "⋯ más", que
   vive en <body> y por eso escapa el recorte del riel. En móvil se desactiva.
   ===================================================================== */
body.orbi-page .orbi-sidebar .sb-nav{ display:flex; flex-direction:column; overflow:hidden; position:relative; }
body.orbi-page .orbi-sidebar .sb-zone{ display:flex; flex-direction:column; flex:1 1 0; min-height:0; overflow:hidden; }
body.orbi-page .orbi-sidebar .sb-zone.sb-top{ justify-content:flex-end; }      /* íconos pegados a Inicio por arriba */
body.orbi-page .orbi-sidebar .sb-zone.sb-bottom{ justify-content:flex-start; } /* íconos pegados a Inicio por abajo */
body.orbi-page .orbi-sidebar .sb-home-row{ flex:0 0 auto; }

/* Botón "⋯ más" anclado al fondo del riel (absolute: no roba espacio flex,
   así Inicio no se descentra). Oculto por defecto (attr hidden); sb-fit.js lo
   muestra solo cuando hay sobrante. */
body.orbi-page .orbi-sidebar .sb-more{
  position:absolute; left:10px; right:10px; bottom:8px; height:40px;
  align-items:center; justify-content:center;
  border:none; border-radius:12px; cursor:pointer; font-size:20px;
  background:rgba(var(--orbi-accent-rgb),.12); color:var(--orbi-accent);
  transition:background var(--orbi-dur-fast) var(--orbi-ease);
}
body.orbi-page .orbi-sidebar .sb-more[hidden]{ display:none; }
body.orbi-page .orbi-sidebar .sb-more:not([hidden]){ display:flex; }
body.orbi-page .orbi-sidebar .sb-more:hover{ background:rgba(var(--orbi-accent-rgb),.20); }

/* Popover de "más" (en <body>): lista los módulos que no cupieron, con etiqueta. */
.sb-more-pop{
  position:fixed; z-index:1200; min-width:214px; max-height:72vh; overflow-y:auto;
  padding:6px; border-radius:14px; display:none;
  background:var(--orbi-surface); border:1px solid var(--orbi-border);
  box-shadow:0 16px 40px rgba(30,50,110,.20);
}
.sb-more-pop.show{ display:block; }
.sb-more-pop .sb-link{
  display:flex; align-items:center; gap:12px;
  padding:9px 12px; margin:2px 0; border-radius:10px;
  color:var(--orbi-text); font-weight:600; font-size:14px; text-decoration:none; white-space:nowrap;
}
.sb-more-pop .sb-link i{ font-size:19px; width:24px; text-align:center; flex-shrink:0; }
.sb-more-pop .sb-link .sb-txt{ display:inline; }
.sb-more-pop .sb-link:hover{ background:rgba(var(--orbi-accent-rgb),.10); color:var(--orbi-accent); }
.sb-more-pop .sb-link.activo{ background:rgba(var(--orbi-accent-rgb),.16); color:var(--orbi-accent); }
.sb-more-pop .sb-link.bloqueado{ opacity:.55; cursor:not-allowed; }
.sb-more-pop .sb-link.bloqueado .sb-lock{ margin-left:auto; font-size:13px; }

/* Móvil (drawer azul): se apaga el centrado/overflow; el menú fluye y hace scroll. */
@media (max-width:900px){
  body.orbi-page .orbi-sidebar .sb-nav{ display:block; overflow-y:auto; }
  body.orbi-page .orbi-sidebar .sb-zone{ display:block; flex:none; overflow:visible; }
  body.orbi-page .orbi-sidebar .sb-more{ display:none !important; }
  .sb-more-pop{ display:none !important; }
}

/* =====================================================================
   Header FIJO + cuerpo con scroll propio en Inventario Físico (orbi-invf)
   y Ventas Especiales (orbi-vesp). Mismo patrón que la ficha inv02: el
   wrapper .inv-body NO scrollea (anula el overflow:auto genérico de
   .hp-content), el topbar/pie quedan fijos y SOLO la región de contenido se
   desplaza — así el contenido queda por DEBAJO del header y ya no se encima
   con él al bajar. El scroll queda a ancho completo (borde derecho del panel);
   el contenido se centra por padding en cada wrapper (.ve-form/.ve-page/
   .invf-form-wrap/.inv-menu). Se EXCLUYE el monitor (.invf-monitor): ya maneja
   su propio layout de 2 columnas con scroll interno vía .inv-fixed.
   ===================================================================== */
body.orbi-invf.orbi-app .hp-content > .inv-body:not(.invf-monitor),
body.orbi-vesp.orbi-app .hp-content > .inv-body,
body.view-inv00.orbi-app .hp-content > .inv-body{
  display:flex; flex-direction:column;
  height:100%; min-height:0; overflow:hidden;
}
body.orbi-invf.orbi-app .hp-content > .inv-body:not(.invf-monitor) > .orbi-modhead,
body.orbi-vesp.orbi-app .hp-content > .inv-body > .orbi-modhead,
body.view-inv00.orbi-app .hp-content > .inv-body > .orbi-modhead,
body.orbi-invf.orbi-app .hp-content > .inv-body:not(.invf-monitor) > .orbi-modfoot,
body.orbi-vesp.orbi-app .hp-content > .inv-body > .orbi-modfoot,
body.view-inv00.orbi-app .hp-content > .inv-body > .orbi-modfoot{
  flex:0 0 auto; z-index:2;
}
body.orbi-invf.orbi-app .hp-content > .inv-body:not(.invf-monitor) > :not(.orbi-modhead):not(.orbi-modfoot),
body.orbi-vesp.orbi-app .hp-content > .inv-body > :not(.orbi-modhead):not(.orbi-modfoot),
body.view-inv00.orbi-app .hp-content > .inv-body > :not(.orbi-modhead):not(.orbi-modfoot){
  flex:1 1 auto; min-height:0; overflow-y:auto;
}

/* =====================================================================
   INVENTARIO FÍSICO (INVF) — módulo de conteos físicos.
   Reutiliza los listados .inv-* y los tokens del tema (claro/oscuro + acento).
   ===================================================================== */
.btn-orbi-danger{ background:var(--orbi-red); border:none; color:#fff; }
.btn-orbi-danger:hover{ filter:brightness(.94); color:#fff; }

/* Badges de estado (colores) */
.orbi-invf .bdg{ display:inline-flex; align-items:center; gap:3px; font-size:10px; padding:2px 8px; border-radius:20px; font-weight:500; white-space:nowrap; }
.orbi-invf .b-act{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.orbi-invf .b-pend{ background:var(--orbi-amber-bg); color:var(--orbi-amber); }
.orbi-invf .b-cerr{ background:var(--orbi-input-bg); color:var(--orbi-muted); }
.orbi-invf .b-ok{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.orbi-invf .b-dif{ background:var(--orbi-amber-bg); color:var(--orbi-amber); }
.orbi-invf .b-sob{ background:var(--orbi-cat-blue-bg); color:var(--orbi-cat-blue); }
.orbi-invf .b-fal{ background:var(--orbi-red-bg); color:var(--orbi-red); }
.orbi-invf .b-aut{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.orbi-invf .b-rec{ background:var(--orbi-amber-bg); color:var(--orbi-amber); }
.orbi-invf .cant-pos{ color:var(--orbi-amber); font-weight:600; }
.orbi-invf .cant-neg{ color:var(--orbi-red); font-weight:600; }
.orbi-invf .diff-ok{ color:var(--orbi-teal); }
.orbi-invf .invf-prog-bar{ background:var(--orbi-border); border-radius:10px; height:5px; overflow:hidden; }
.orbi-invf .invf-prog-fill{ height:100%; border-radius:10px; transition:width .4s; }

/* --- INVF-00 tablero --- */
.invf-stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-bottom:6px; }
.invf-stat{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:12px; padding:14px; text-align:center; }
.invf-stat .n{ font-size:22px; font-weight:700; }
.invf-stat .l{ font-size:11px; color:var(--orbi-muted); margin-top:3px; }
.invf-stat .gn{ color:var(--orbi-teal); } .invf-stat .am{ color:var(--orbi-amber); }
.invf-stat .az{ color:var(--orbi-mid); }  .invf-stat .rj{ color:var(--orbi-red); }
.invf-tipos{ display:grid; grid-template-columns:repeat(2,1fr); gap:14px; }
.invf-tipo{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:14px; padding:18px; display:flex; flex-direction:column; align-items:center; gap:8px; text-align:center; text-decoration:none; transition:border-color .15s, transform .1s, box-shadow .15s; }
.invf-tipo:hover{ border-color:var(--orbi-accent); transform:translateY(-2px); box-shadow:0 6px 18px rgba(var(--orbi-accent-rgb),.12); }
.invf-tipo .ico{ width:52px; height:52px; border-radius:14px; display:flex; align-items:center; justify-content:center; font-size:24px; }
.invf-tipo .nom{ font-size:15px; font-weight:600; color:var(--orbi-text); }
.invf-tipo .des{ font-size:12px; color:var(--orbi-muted); line-height:1.5; }
.invf-tipo .tag{ font-size:10px; padding:2px 10px; border-radius:20px; font-weight:500; background:var(--orbi-accent-bg); color:var(--orbi-accent); }
.invf-ses-list{ display:flex; flex-direction:column; gap:8px; }
.invf-ses{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:12px; padding:12px 16px; display:flex; align-items:center; gap:14px; transition:border-color .15s; }
.invf-ses:hover{ border-color:var(--orbi-accent); }
.invf-ses-ico{ width:40px; height:40px; border-radius:10px; display:flex; align-items:center; justify-content:center; font-size:18px; flex-shrink:0; }
.invf-ses-ico.ic-cic{ background:var(--orbi-teal-bg); color:var(--orbi-teal); }
.invf-ses-ico.ic-pend{ background:var(--orbi-amber-bg); color:var(--orbi-amber); }
.invf-ses-ico.ic-cerr{ background:var(--orbi-input-bg); color:var(--orbi-muted); }
.invf-ses-info{ flex:1; min-width:0; }
.invf-ses-top{ display:flex; align-items:center; gap:8px; }
.invf-ses-nom{ font-size:13px; font-weight:600; color:var(--orbi-text); }
.invf-ses-det{ font-size:11px; color:var(--orbi-muted); margin-top:2px; }
.invf-ses-prog{ margin-top:6px; display:flex; align-items:center; gap:8px; }
.invf-ses-prog .invf-prog-bar{ flex:1; }
.invf-prog-txt{ font-size:10px; color:var(--orbi-muted); white-space:nowrap; }
.invf-ses-btns{ flex-shrink:0; }
.invf-btn{ border:1px solid var(--orbi-border); border-radius:8px; font-size:11px; padding:6px 12px; cursor:pointer; background:var(--orbi-surface); color:var(--orbi-muted); text-decoration:none; display:inline-flex; align-items:center; gap:5px; transition:all .15s; }
.invf-btn:hover{ border-color:var(--orbi-accent); color:var(--orbi-accent); }
.invf-btn.primary{ background:var(--orbi-teal); border-color:var(--orbi-teal); color:#fff; }
.invf-btn.primary:hover{ filter:brightness(.94); color:#fff; }

/* --- Formulario (INVF-01) y contenedores de sección --- */
/* Ancho completo + contenido centrado por padding (scroll al borde derecho). */
.invf-form-wrap, .invf-res-wrap{ max-width:none; margin:0; width:auto; padding:16px max(16px, calc((100% - 860px) / 2)); display:flex; flex-direction:column; gap:12px; }
/* Menús invf00 e inv00: ancho completo + centrado por padding (scroll a la
   derecha), sin tocar el .inv-menu de otras vistas de inventario (inv01…). */
body.orbi-invf .inv-menu,
body.view-inv00 .inv-menu{ max-width:none; margin:0; width:auto; padding:24px max(24px, calc((100% - 900px) / 2)); }
.invf-sec{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:12px; padding:14px 16px; }
.invf-sec-lbl{ font-size:11px; font-weight:600; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; margin-bottom:10px; }
.invf-form-wrap .fld, .invf-captura .fld{ display:flex; flex-direction:column; gap:3px; margin-bottom:8px; }
.invf-form-wrap .fld label, .invf-captura .fld label{ font-size:10px; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.4px; }
.invf-form-wrap .fld input, .invf-form-wrap .fld select,
.invf-captura .fld input, .invf-captura .fld select{ font-size:12px; border-radius:6px; border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text); padding:6px 10px; width:100%; outline:none; }
.invf-form-wrap .fld input:focus, .invf-form-wrap .fld select:focus,
.invf-captura .fld input:focus, .invf-captura .fld select:focus{ border-color:var(--orbi-accent); }
.invf-form-wrap .fld input:disabled{ opacity:.7; }
.invf-folio{ font-family:monospace; font-weight:600; color:var(--orbi-accent); }
.invf-r2{ display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.invf-r3{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px; }
.invf-tipo-grid{ display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:8px; }
.invf-tipo-opt{ border:1px solid var(--orbi-border); border-radius:10px; padding:14px 8px; text-align:center; cursor:pointer; transition:all .15s; color:var(--orbi-muted); display:flex; flex-direction:column; align-items:center; gap:2px; }
.invf-tipo-opt:hover{ border-color:var(--orbi-accent); }
.invf-tipo-opt.sel{ border-color:var(--orbi-accent); background:var(--orbi-accent-bg); color:var(--orbi-accent); }
.invf-tipo-opt .to-ico{ font-size:24px; }
.invf-tipo-opt .to-nom{ font-size:13px; font-weight:600; }
.invf-tipo-opt .to-sub{ font-size:10px; }
.invf-nota{ background:var(--orbi-accent-bg); border:1px solid rgba(var(--orbi-accent-rgb),.25); border-radius:8px; padding:8px 12px; font-size:11px; color:var(--orbi-accent); margin-top:8px; }
.invf-nota.info{ margin:0 0 10px; }
.invf-cont-list{ display:flex; flex-direction:column; gap:6px; }
.invf-cont-row{ display:flex; align-items:center; gap:10px; background:var(--orbi-input-bg); border:1px solid var(--orbi-border); border-radius:8px; padding:8px 12px; }
.invf-cont-nom{ flex:1; font-size:12px; font-weight:500; color:var(--orbi-text); }
.invf-cont-sec{ font-size:11px; border:1px solid var(--orbi-border); border-radius:6px; padding:4px 8px; background:var(--orbi-surface); color:var(--orbi-text); outline:none; width:220px; max-width:45%; }
.invf-cont-sec:focus{ border-color:var(--orbi-accent); }
.invf-cont-rm{ background:none; border:none; cursor:pointer; color:var(--orbi-muted); font-size:15px; }
.invf-cont-rm:hover{ color:var(--orbi-red); }
.invf-cont-add{ display:flex; gap:8px; margin-top:10px; }
.invf-cont-add select{ flex:1; font-size:12px; border-radius:6px; border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text); padding:6px 10px; outline:none; }
.invf-foot-actions{ display:flex; gap:8px; justify-content:flex-end; }

/* --- Monitor (INVF-02) --- */
.invf-live{ display:inline-flex; align-items:center; gap:5px; font-size:11px; color:var(--orbi-teal); font-weight:500; margin-left:8px; vertical-align:middle; }
.invf-live-dot{ width:7px; height:7px; border-radius:50%; background:var(--orbi-teal); animation:invfblink 1.2s infinite; }
@keyframes invfblink{ 0%,100%{opacity:1;} 50%{opacity:.3;} }
.invf-statsbar{ display:grid; grid-template-columns:repeat(5,1fr); gap:8px; padding:8px 12px; flex-shrink:0; }
.invf-sm{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:10px; padding:8px 12px; text-align:center; }
.invf-sm .n{ font-size:18px; font-weight:700; } .invf-sm .l{ font-size:10px; color:var(--orbi-muted); margin-top:1px; }
.invf-sm .gn{ color:var(--orbi-teal); } .invf-sm .am{ color:var(--orbi-amber); } .invf-sm .rj{ color:var(--orbi-red); } .invf-sm .az{ color:var(--orbi-mid); }
.invf-mon-grid{ flex:1; display:grid; grid-template-columns:1fr 340px; gap:8px; padding:0 12px 12px; overflow:hidden; min-height:0; }
.invf-mon-tabla{ display:flex; flex-direction:column; overflow:hidden; }
.invf-panel-head{ padding:8px 12px; border-bottom:1px solid var(--orbi-border); display:flex; align-items:center; gap:8px; flex-shrink:0; }
.invf-panel-head .t{ font-size:12px; font-weight:600; color:var(--orbi-text); flex:1; }
.invf-busq{ font-size:11px; border:1px solid var(--orbi-border); border-radius:6px; padding:4px 8px; outline:none; width:170px; background:var(--orbi-input-bg); color:var(--orbi-text); }
.invf-busq:focus{ border-color:var(--orbi-accent); }
.invf-mon-side{ display:flex; flex-direction:column; gap:8px; overflow-y:auto; min-height:0; }
.invf-side-box{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:10px; padding:10px 12px; }
.invf-side-t{ font-size:11px; font-weight:600; color:var(--orbi-text); margin-bottom:8px; }
.invf-cont-item{ display:flex; align-items:center; gap:8px; padding:6px 0; border-bottom:1px solid var(--orbi-border); }
.invf-cont-item:last-child{ border-bottom:none; }
.invf-avatar{ width:30px; height:30px; border-radius:50%; background:var(--orbi-accent-bg); display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; color:var(--orbi-accent); flex-shrink:0; }
.invf-cont-meta{ flex:1; min-width:0; }
.invf-cont-meta .nm{ font-size:11px; font-weight:500; color:var(--orbi-text); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.invf-cont-meta .sc{ font-size:10px; color:var(--orbi-muted); }
.invf-cont-n{ font-size:12px; font-weight:700; color:var(--orbi-teal); }
.invf-captura{ position:relative; }
.invf-ac{ position:absolute; z-index:20; left:12px; right:12px; background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:8px; box-shadow:var(--orbi-shadow-card); max-height:180px; overflow-y:auto; }
.invf-ac-item{ padding:7px 10px; font-size:12px; color:var(--orbi-text); cursor:pointer; border-bottom:1px solid var(--orbi-border); }
.invf-ac-item:hover{ background:var(--orbi-accent-bg); }
.invf-feed-box{ flex:1; min-height:120px; }
.invf-feed{ display:flex; flex-direction:column; gap:3px; max-height:220px; overflow-y:auto; }
.invf-feed-item{ font-size:10px; color:var(--orbi-muted); padding:3px 0; border-bottom:1px solid var(--orbi-border); display:flex; gap:6px; }
.invf-feed-item .h{ color:var(--orbi-accent); font-family:monospace; flex-shrink:0; }

/* --- Resultado (INVF-03) --- */
.invf-res-grid{ display:grid; grid-template-columns:repeat(5,1fr); gap:8px; }
.invf-rc{ border-radius:10px; padding:12px; text-align:center; border:1px solid var(--orbi-border); }
.invf-rc .n{ font-size:22px; font-weight:700; } .invf-rc .l{ font-size:10px; margin-top:2px; }
.invf-rc.tot{ background:var(--orbi-input-bg); } .invf-rc.tot .n{ color:var(--orbi-text); } .invf-rc.tot .l{ color:var(--orbi-muted); }
.invf-rc.ok{ background:var(--orbi-teal-bg); border-color:var(--orbi-teal); } .invf-rc.ok .n, .invf-rc.ok .l{ color:var(--orbi-teal); }
.invf-rc.dif{ background:var(--orbi-amber-bg); border-color:var(--orbi-amber); } .invf-rc.dif .n, .invf-rc.dif .l{ color:var(--orbi-amber); }
.invf-rc.sob{ background:var(--orbi-cat-blue-bg); border-color:var(--orbi-cat-blue); } .invf-rc.sob .n, .invf-rc.sob .l{ color:var(--orbi-cat-blue); }
.invf-rc.fal{ background:var(--orbi-red-bg); border-color:var(--orbi-red); } .invf-rc.fal .n, .invf-rc.fal .l{ color:var(--orbi-red); }
.invf-res-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }
.invf-auth-btns{ display:flex; gap:4px; justify-content:center; }
.invf-a{ border:none; border-radius:6px; font-size:12px; padding:4px 9px; cursor:pointer; color:#fff; }
.invf-a-aut{ background:var(--orbi-teal); } .invf-a-aut:hover{ filter:brightness(.94); }
.invf-a-rec{ background:var(--orbi-amber); } .invf-a-rec:hover{ filter:brightness(.94); }
.invf-res-box{ background:var(--orbi-teal-bg); border:1px solid var(--orbi-teal); border-radius:10px; padding:20px; text-align:center; }
.invf-res-box .ic{ font-size:36px; color:var(--orbi-teal); }
.invf-res-box .t{ font-size:15px; font-weight:600; color:var(--orbi-teal); margin-top:6px; }
.invf-res-box .s{ font-size:12px; color:var(--orbi-teal); margin-top:4px; }

@media (max-width:820px){
  .invf-stats, .invf-res-grid, .invf-statsbar{ grid-template-columns:repeat(2,1fr); }
  .invf-tipos{ grid-template-columns:1fr; }
  .invf-mon-grid{ grid-template-columns:1fr; overflow:auto; }
  .invf-r3, .invf-r2{ grid-template-columns:1fr; }
}

/* =====================================================================
   ── Control de cambios ──  historial de novedades (topbar → menú perfil).
   Reutiliza tokens del shell; scoped a .cv-* (body.orbi-cambios).
   ===================================================================== */
.cv-layout{ display:flex; align-items:flex-start; justify-content:center; gap:40px; width:100%; }

.cv-menu{
  flex-shrink:0; width:224px; position:sticky; top:16px;
  display:flex; flex-direction:column; gap:3px;
  background:var(--orbi-card); border:1px solid var(--orbi-border);
  border-radius:var(--orbi-r-card); padding:8px; box-shadow:var(--orbi-shadow-card);
}
.cv-menu-item{
  display:flex; align-items:center; gap:10px; width:100%; border:0; background:transparent;
  text-align:left; padding:9px 10px; border-radius:10px; cursor:pointer;
  font-size:13px; font-weight:600; color:var(--orbi-muted);
  transition:background var(--orbi-dur-fast) var(--orbi-ease), color var(--orbi-dur-fast) var(--orbi-ease);
}
.cv-menu-item i{ font-size:15px; width:18px; text-align:center; flex-shrink:0; }
.cv-menu-item span{ flex:1; min-width:0; }
.cv-menu-item b{
  font-size:11px; font-weight:700; color:var(--orbi-muted); background:var(--orbi-gray-bg);
  border-radius:999px; padding:1px 7px; flex-shrink:0;
}
.cv-menu-item:hover{ background:var(--orbi-gray-bg); color:var(--orbi-text); }
.cv-menu-item.is-active{ background:var(--orbi-accent-bg); color:var(--orbi-accent); }
.cv-menu-item.is-active b{ background:var(--orbi-accent); color:#fff; }

.cv-timeline{ position:relative; flex:1 1 60%; min-width:0; max-width:60%; }
.cv-item{ position:relative; display:flex; gap:16px; padding-bottom:22px; }
.cv-item:last-child{ padding-bottom:0; }
.cv-item::before{
  content:""; position:absolute; left:19px; top:42px; bottom:-22px; width:2px;
  background:var(--orbi-border);
}
.cv-item:last-child::before{ display:none; }
.cv-dot{
  position:relative; z-index:1; flex-shrink:0; width:40px; height:40px;
  border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-size:17px; box-shadow:0 0 0 4px var(--orbi-canvas);
}
.cv-c-blue{   background:var(--orbi-cat-blue-bg);   color:var(--orbi-cat-blue); }
.cv-c-green{  background:var(--orbi-cat-green-bg);  color:var(--orbi-cat-green); }
.cv-c-orange{ background:var(--orbi-cat-orange-bg); color:var(--orbi-cat-orange); }
.cv-c-purple{ background:var(--orbi-cat-purple-bg); color:var(--orbi-cat-purple); }
.cv-c-red{    background:var(--orbi-cat-red-bg);    color:var(--orbi-cat-red); }
.cv-c-cyan{   background:var(--orbi-cat-cyan-bg);   color:var(--orbi-cat-cyan); }
.cv-c-slate{  background:var(--orbi-cat-slate-bg);  color:var(--orbi-cat-slate); }

.cv-card{
  flex:1; min-width:0; background:var(--orbi-card); border:1px solid var(--orbi-border);
  border-radius:var(--orbi-r-card); padding:14px 16px; box-shadow:var(--orbi-shadow-card);
  transition:transform var(--orbi-dur-fast) var(--orbi-ease), box-shadow var(--orbi-dur-fast) var(--orbi-ease);
}
.cv-card-head{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:7px; }
.cv-fecha{
  font-size:11px; font-weight:700; letter-spacing:.04em; text-transform:uppercase;
  color:var(--orbi-accent); background:var(--orbi-accent-bg); padding:3px 9px; border-radius:999px;
  white-space:nowrap;
}
.cv-titulo{ margin:0; font-size:15px; font-weight:700; color:var(--orbi-text); }
.cv-badge-new{
  font-size:10.5px; font-weight:800; letter-spacing:.04em; text-transform:uppercase;
  color:#fff; background:var(--orbi-accent); padding:3px 9px; border-radius:999px;
}
.cv-version{
  font-size:11px; font-weight:700; font-family:ui-monospace,Consolas,monospace;
  color:var(--orbi-muted); background:var(--orbi-gray-bg); padding:2px 8px; border-radius:999px;
}
.cv-lista{ margin:0; padding-left:18px; color:var(--orbi-muted); font-size:13.5px; line-height:1.55; }
.cv-lista li{ margin-bottom:3px; }
.cv-lista li:last-child{ margin-bottom:0; }

.cv-empty{ text-align:center; color:var(--orbi-muted); padding:50px 18px; }
.cv-empty i{ font-size:30px; color:var(--orbi-accent); opacity:.7; display:block; margin-bottom:8px; }
.cv-empty p{ margin:0; font-weight:700; color:var(--orbi-text); }

@media (max-width:860px){
  .cv-layout{ flex-direction:column; }
  .cv-menu{
    position:static; width:100%; flex-direction:row; overflow-x:auto;
    gap:6px; padding:8px;
  }
  .cv-menu-item{ width:auto; flex-shrink:0; }
  .cv-menu-item span{ white-space:nowrap; }
  .cv-timeline{ max-width:none; width:100%; }
}
/* ── CRM ── (crm00 a crm04) - seguimiento de prospectos/eventos, scoped a
   .orbi-crm. Reutiliza .hp-seclabel/.hp-stats/.kpi-card/.cat-* del home,
   .inv-search/.inv-filter/.inv-table/.inv-card/.inv-foot del listado plano,
   .orbi-card y los tokens --orbi-cat-* (sin duplicarlos). */
.orbi-crm .crm-wrap{ padding:24px; max-width:1080px; margin:0 auto; width:100%; }

.orbi-crm .crm-nav{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:24px; }
.orbi-crm .crm-nav a{ background:var(--orbi-card); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-card); padding:16px; display:flex; flex-direction:column; gap:8px; text-decoration:none; box-shadow:var(--orbi-shadow-card); transition:border-color .15s, transform .1s; }
.orbi-crm .crm-nav a:hover{ border-color:var(--orbi-accent); transform:translateY(-2px); }
.orbi-crm .crm-nav .ic{ width:38px; height:38px; border-radius:10px; display:flex; align-items:center; justify-content:center; font-size:18px; background:var(--orbi-accent-bg); color:var(--orbi-accent); }
.orbi-crm .crm-nav .nom{ font-size:13.5px; font-weight:700; color:var(--orbi-text); }
.orbi-crm .crm-nav .des{ font-size:11.5px; color:var(--orbi-muted); line-height:1.4; }

.orbi-crm .crm-cols{ display:grid; grid-template-columns:1fr 1fr; gap:20px; }
@media (max-width:860px){ .orbi-crm .crm-cols{ grid-template-columns:1fr; } .orbi-crm .crm-nav{ grid-template-columns:1fr; } }

.orbi-crm .crm-list{ background:var(--orbi-card); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-card); box-shadow:var(--orbi-shadow-card); overflow:hidden; }
.orbi-crm .crm-row{ display:flex; align-items:center; gap:10px; padding:11px 14px; border-top:1px solid var(--orbi-border); text-decoration:none; color:inherit; }
.orbi-crm .crm-row:first-child{ border-top:0; }
.orbi-crm .crm-row:hover{ background:var(--orbi-input-bg); }
.orbi-crm .crm-row .crm-ic{ width:32px; height:32px; border-radius:9px; display:flex; align-items:center; justify-content:center; font-size:14px; flex-shrink:0; }
.orbi-crm .crm-row .crm-info{ min-width:0; flex:1; display:flex; flex-direction:column; gap:1px; }
.orbi-crm .crm-row .nom{ font-size:12.5px; font-weight:600; color:var(--orbi-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.orbi-crm .crm-row .sub{ font-size:11px; color:var(--orbi-muted); }
.orbi-crm .crm-row .fecha{ font-size:11px; font-weight:700; color:var(--orbi-accent); white-space:nowrap; text-align:right; }
.orbi-crm .crm-row .fecha.vencido{ color:var(--orbi-red); }
.orbi-crm .crm-empty{ text-align:center; color:var(--orbi-muted); font-size:12.5px; padding:24px; }

/* Badges de etapa/tipo (mismos tokens --orbi-cat-* que .etq en otros módulos). */
.orbi-crm .etq{ font-size:10.5px; font-weight:700; padding:2px 9px; border-radius:20px; white-space:nowrap; display:inline-block; }
.orbi-crm .etq.bg-blue{   background:var(--orbi-cat-blue-bg);   color:var(--orbi-cat-blue); }
.orbi-crm .etq.bg-cyan{   background:var(--orbi-cat-cyan-bg);   color:var(--orbi-cat-cyan); }
.orbi-crm .etq.bg-orange{ background:var(--orbi-cat-orange-bg); color:var(--orbi-cat-orange); }
.orbi-crm .etq.bg-purple{ background:var(--orbi-cat-purple-bg); color:var(--orbi-cat-purple); }
.orbi-crm .etq.bg-green{  background:var(--orbi-cat-green-bg);  color:var(--orbi-cat-green); }
.orbi-crm .etq.bg-red{    background:var(--orbi-cat-red-bg);    color:var(--orbi-cat-red); }
.orbi-crm .venc{ color:var(--orbi-red); font-weight:700; }

/* Tablero (kanban por etapa) - crm01 */
.orbi-crm .tab-body{ display:flex; flex-direction:column; min-height:0; flex:1; }
.orbi-crm .tab-toolbar{ display:flex; gap:10px; align-items:center; padding:14px clamp(14px,2.2vw,24px) 0; flex-wrap:wrap; }
.orbi-crm .tab-board-wrap{ flex:1; min-height:0; overflow-x:auto; padding:14px clamp(14px,2.2vw,24px) 20px; }
.orbi-crm .tab-board{ display:flex; gap:14px; height:100%; min-width:max-content; }
.orbi-crm .tab-col{ width:266px; flex-shrink:0; display:flex; flex-direction:column; background:var(--orbi-canvas); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-card); overflow:hidden; max-height:100%; }
.orbi-crm .tab-col-head{ padding:11px 13px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid var(--orbi-border); flex-shrink:0; }
.orbi-crm .tab-col-head .nom{ font-size:12.5px; font-weight:700; color:var(--orbi-text); display:flex; align-items:center; gap:6px; }
.orbi-crm .tab-col-head .dot{ width:8px; height:8px; border-radius:50%; }
.orbi-crm .tab-col-head .cnt{ font-size:11px; font-weight:700; color:var(--orbi-muted); background:var(--orbi-card); border-radius:20px; padding:1px 8px; }
.orbi-crm .tab-col-body{ flex:1; overflow-y:auto; padding:10px; display:flex; flex-direction:column; gap:9px; }
.orbi-crm .tab-card{ background:var(--orbi-card); border:1px solid var(--orbi-border); border-radius:12px; padding:11px 12px; box-shadow:var(--orbi-shadow-card); display:flex; flex-direction:column; gap:6px; }
.orbi-crm .tab-card .nom{ font-size:12.5px; font-weight:700; color:var(--orbi-text); text-decoration:none; display:block; }
.orbi-crm .tab-card .nom:hover{ color:var(--orbi-accent); }
.orbi-crm .tab-card .tipo{ font-size:10.5px; color:var(--orbi-muted); display:flex; align-items:center; gap:5px; }
.orbi-crm .tab-card .linea{ font-size:11px; color:var(--orbi-muted); display:flex; align-items:center; gap:5px; }
.orbi-crm .tab-card .linea.vencido{ color:var(--orbi-red); font-weight:600; }
.orbi-crm .tab-card .monto{ font-size:12px; font-weight:700; color:var(--orbi-teal); }
.orbi-crm .tab-card select.mover{ margin-top:2px; font-size:11px; padding:5px 7px; border-radius:7px; border:1px solid var(--orbi-border); background:var(--orbi-input-bg); color:var(--orbi-text); width:100%; }
.orbi-crm .tab-col-empty{ text-align:center; color:var(--orbi-muted); font-size:11.5px; padding:20px 8px; }
.orbi-crm .dot.bg-blue{ background:var(--orbi-cat-blue); } .orbi-crm .dot.bg-cyan{ background:var(--orbi-cat-cyan); }
.orbi-crm .dot.bg-orange{ background:var(--orbi-cat-orange); } .orbi-crm .dot.bg-purple{ background:var(--orbi-cat-purple); }
.orbi-crm .dot.bg-green{ background:var(--orbi-cat-green); } .orbi-crm .dot.bg-red{ background:var(--orbi-cat-red); }

/* Calendario - crm02 */
.orbi-crm .cal-scroll{ flex:1; min-height:0; overflow-y:auto; padding:18px clamp(14px,2.2vw,24px) 24px; }
.orbi-crm .cal-wrap{ max-width:980px; margin:0 auto; }
.orbi-crm .cal-toolbar{ display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; gap:10px; flex-wrap:wrap; }
.orbi-crm .cal-mes{ font-size:16px; font-weight:700; color:var(--orbi-text); min-width:190px; text-align:center; text-transform:capitalize; }
.orbi-crm .cal-nav{ display:flex; gap:6px; }
.orbi-crm .cal-leyenda{ display:flex; gap:14px; font-size:11.5px; color:var(--orbi-muted); flex-wrap:wrap; }
.orbi-crm .cal-leyenda span{ display:flex; align-items:center; gap:5px; }
.orbi-crm .cal-leyenda .dot{ width:8px; height:8px; border-radius:50%; }
.orbi-crm .cal-grid{ display:grid; grid-template-columns:repeat(7,1fr); gap:1px; background:var(--orbi-border); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-card); overflow:hidden; }
.orbi-crm .cal-dow{ background:var(--orbi-input-bg); padding:7px 6px; font-size:10.5px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; text-align:center; }
.orbi-crm .cal-day{ background:var(--orbi-card); min-height:96px; padding:6px; display:flex; flex-direction:column; gap:3px; }
.orbi-crm .cal-day.fuera{ background:var(--orbi-input-bg); opacity:.55; }
.orbi-crm .cal-day.hoy .num{ background:var(--orbi-accent); color:#fff; border-radius:50%; width:20px; height:20px; display:inline-flex; align-items:center; justify-content:center; }
.orbi-crm .cal-day .num{ font-size:11.5px; font-weight:700; color:var(--orbi-text); }
.orbi-crm .cal-ev{ font-size:10px; padding:2px 6px; border-radius:6px; text-decoration:none; display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:600; }
.orbi-crm .cal-mas{ font-size:9.5px; color:var(--orbi-muted); padding-left:2px; }
.orbi-crm .bg-blue{ background:var(--orbi-cat-blue-bg); color:var(--orbi-cat-blue); }
.orbi-crm .bg-purple{ background:var(--orbi-cat-purple-bg); color:var(--orbi-cat-purple); }
.orbi-crm .bg-green{ background:var(--orbi-cat-green-bg); color:var(--orbi-cat-green); }

/* Ficha - crm04 (mismo patrón visual que la ficha de clientes de admin/) */
.orbi-crm .fic-scroll{ flex:1; overflow-y:auto; padding:20px 16px; }
.orbi-crm .fic-wrap{ max-width:760px; margin:0 auto; display:flex; flex-direction:column; gap:16px; }
.orbi-crm .fic-card{ background:var(--orbi-card); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-card); box-shadow:var(--orbi-shadow-card); padding:18px 18px 20px; }
.orbi-crm .fic-card h6{ font-size:12px; font-weight:700; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.5px; margin:0 0 14px; display:flex; align-items:center; gap:7px; }
.orbi-crm .fic-card h6 i{ color:var(--orbi-accent); font-size:15px; }
.orbi-crm .fic-head{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.orbi-crm .fic-ic{ width:46px; height:46px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:20px; background:var(--orbi-accent-bg); color:var(--orbi-accent); flex-shrink:0; }
.orbi-crm .fic-nom{ font-size:16px; font-weight:700; color:var(--orbi-text); }
.orbi-crm .fic-sub{ font-size:12px; color:var(--orbi-muted); }

.orbi-crm .fld{ display:flex; flex-direction:column; gap:4px; margin-bottom:2px; }
.orbi-crm .fld label{ font-size:11px; font-weight:600; color:var(--orbi-muted); text-transform:uppercase; letter-spacing:.3px; }
.orbi-crm .fld input, .orbi-crm .fld select, .orbi-crm .fld textarea{
  background:var(--orbi-input-bg); border:1px solid var(--orbi-border); border-radius:8px;
  padding:8px 11px; font-size:13px; color:var(--orbi-text); outline:none; width:100%; font-family:inherit;
}
.orbi-crm .fld input:focus, .orbi-crm .fld select:focus, .orbi-crm .fld textarea:focus{ border-color:var(--orbi-accent); background:var(--orbi-card); }
.orbi-crm .fld input:disabled, .orbi-crm .fld select:disabled, .orbi-crm .fld textarea:disabled{ opacity:.7; }
.orbi-crm .fld textarea{ resize:vertical; }

.orbi-crm .fic-saldo{ display:flex; gap:18px; background:var(--orbi-input-bg); border-radius:10px; padding:10px 14px; font-size:12.5px; }
.orbi-crm .fic-saldo b{ display:block; font-size:15px; color:var(--orbi-text); }

.orbi-crm .hist-item{ display:flex; gap:10px; padding:9px 0; border-top:1px solid var(--orbi-border); font-size:12.5px; }
.orbi-crm .hist-item:first-child{ border-top:0; }
.orbi-crm .hist-fecha{ color:var(--orbi-muted); white-space:nowrap; font-weight:600; min-width:78px; }
.orbi-crm .hist-empty{ color:var(--orbi-muted); font-size:12.5px; padding:8px 0; }

@media (max-width:560px){
  .cv-item{ gap:12px; }
  .cv-dot{ width:34px; height:34px; font-size:15px; }
  .cv-item::before{ left:16px; top:36px; }
}

/* ── Pedidos ── (los que hacen los clientes desde tienda/), scoped a
   .orbi-pedidos. Reutiliza .inv-plana/.inv-card/.inv-table/.inv-toolbar. */
/* Lista por pestañas de surtido + tarjetas (idéntica al mockup modulos/pedidos/index.html) */
.view-ped00 .ped-scroll{ flex:1; min-height:0; overflow-y:auto; padding:clamp(14px,2.2vw,24px); }
.view-ped00 .ped-wrap{ max-width:920px; margin:0 auto; }

.view-ped00 .ped-note{ display:flex; gap:10px; align-items:flex-start; background:var(--orbi-accent-bg); border:1px solid var(--orbi-accent); border-radius:var(--orbi-r-lg); padding:12px 15px; margin-bottom:16px; font-size:12.5px; color:var(--orbi-text); line-height:1.5; }
.view-ped00 .ped-note i{ color:var(--orbi-accent); font-size:17px; flex-shrink:0; }

.view-ped00 .ped-tabs{ display:flex; gap:4px; border-bottom:1px solid var(--orbi-border); margin-bottom:16px; }
.view-ped00 .ped-tabs .tab-btn{ display:inline-flex; align-items:center; gap:7px; }
.view-ped00 .ped-count{ font-size:11px; font-weight:700; background:var(--orbi-input-bg); color:var(--orbi-muted); border-radius:20px; padding:1px 8px; min-width:20px; text-align:center; }
.view-ped00 .tab-btn.active .ped-count{ background:var(--orbi-accent); color:#fff; }

.view-ped00 .ped-card{ background:var(--orbi-surface); border:1px solid var(--orbi-border); border-radius:var(--orbi-r-lg); box-shadow:var(--orbi-shadow-card); padding:14px 16px; margin-bottom:12px; }
.view-ped00 .ped-top{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:4px; }
.view-ped00 .ped-folio{ font-family:monospace; font-weight:700; font-size:13px; color:var(--orbi-text); }
.view-ped00 .ped-pago{ font-size:11px; font-weight:700; border-radius:20px; padding:3px 11px; white-space:nowrap; }
.view-ped00 .ped-pago.ok{ background:var(--orbi-cat-green-bg); color:var(--orbi-cat-green); }
.view-ped00 .ped-pago.warn{ background:var(--orbi-cat-orange-bg); color:var(--orbi-cat-orange); }
.view-ped00 .ped-cliente{ font-size:14.5px; font-weight:600; color:var(--orbi-text); margin-bottom:2px; }
.view-ped00 .ped-meta{ font-size:12px; color:var(--orbi-muted); margin-bottom:8px; }
.view-ped00 .ped-items{ font-size:12px; color:var(--orbi-muted); line-height:1.6; margin-bottom:10px; padding-left:2px; }
.view-ped00 .ped-items b{ color:var(--orbi-text); font-weight:600; }
.view-ped00 .ped-foot{ display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; }
.view-ped00 .ped-total{ font-size:15px; font-weight:700; color:var(--orbi-navy); }
[data-theme="dark"] .view-ped00 .ped-total{ color:#A9A2FF; }
.view-ped00 .ped-actions{ display:flex; gap:8px; }
.view-ped00 .btn-orbi-ok{ background:var(--orbi-teal); border:1px solid var(--orbi-teal); color:#fff; }
.view-ped00 .btn-orbi-ok:hover{ filter:brightness(.94); color:#fff; }
.view-ped00 .btn-ped-cancel{ min-width:120px; color:var(--orbi-red); border-color:var(--orbi-red); }
.view-ped00 .ped-cobrado{ font-size:11.5px; color:var(--orbi-muted); }

.view-ped00 .ped-empty{ text-align:center; color:var(--orbi-muted); font-size:13px; padding:36px 14px; }
.view-ped00 .ped-empty i{ font-size:24px; display:block; margin-bottom:8px; }

.orbi-pedidos .etq{ font-size:10.5px; font-weight:700; padding:2px 9px; border-radius:20px; white-space:nowrap; display:inline-block; }
.orbi-pedidos .etq.bg-blue{   background:var(--orbi-cat-blue-bg);   color:var(--orbi-cat-blue); }
.orbi-pedidos .etq.bg-orange{ background:var(--orbi-cat-orange-bg); color:var(--orbi-cat-orange); }
.orbi-pedidos .etq.bg-purple{ background:var(--orbi-cat-purple-bg); color:var(--orbi-cat-purple); }
.orbi-pedidos .etq.bg-green{  background:var(--orbi-cat-green-bg);  color:var(--orbi-cat-green); }
.orbi-pedidos .etq.bg-red{    background:var(--orbi-cat-red-bg);    color:var(--orbi-cat-red); }

.orbi-pedidos .pd-item{ display:flex; justify-content:space-between; gap:10px; padding:8px 0; border-top:1px solid var(--orbi-border); font-size:12.5px; }
.orbi-pedidos .pd-item:first-child{ border-top:0; }
.orbi-pedidos .pd-item .cant{ color:var(--orbi-muted); }
.orbi-pedidos .pd-total{ display:flex; justify-content:space-between; margin-top:10px; padding-top:10px; border-top:1px dashed var(--orbi-border); font-weight:700; }
