/* QUE PERROS FOOD · V1.2 */
/* ============================================================================
   QUE PERROS FOOD · V1.2
   Paleta abstraída de la gráfica del menú del local.
   ========================================================================== */
:root{
  --carbon:#1C1917; --carbon-alto:#2B2724; --carbon-panel:#221E1C;
  --queso:#FFC300;  --queso-hi:#FFD84D;    --mostaza:#D99400;
  --brasa:#D9481F;  --humo:#F7F2E8;        --ceniza:#9A9188;
  --linea:#3A3532;  --ok:#3FA96A;          --prep:#E0A02A;
  --ruta:#4A90D9;   --caja:#8A7BD8;        --wa:#25D366;  --r:14px;
}
/* Tema claro. Todo el archivo pinta con var(--...), así que redefinir
   las variables aquí cambia la página completa sin duplicar reglas.
   El oscuro sigue siendo el de por defecto: es la identidad de la marca,
   y el claro es la opción para quien lo prefiera o para pantallas con
   mucho reflejo de día. */
html[data-tema="claro"]{
  --carbon:#FFFFFF; --carbon-alto:#FFFFFF; --carbon-panel:#FFFFFF;
  --humo:#1C1917; --ceniza:#6E665E; --linea:#DED8CE;
  --queso:#E8A800; --queso-hi:#FFC300; --mostaza:#B87F00;
  --ok:#2F8B54; --prep:#B87F00; --brasa:#C43F19;
}
html[data-tema="claro"] body{background:var(--carbon)}
html[data-tema="claro"] header{
  background:radial-gradient(ellipse 90% 120% at 50% -20%,#FFFFFF 0%,var(--carbon) 70%)}
html[data-tema="claro"] nav{background:#FFFFFF;box-shadow:none}
html[data-tema="claro"] .chip{background:transparent;color:#6B645E}
html[data-tema="claro"] .marca{box-shadow:0 0 0 4px rgba(0,0,0,.1)}
html[data-tema="claro"] .btn-icono{background:rgba(0,0,0,.06);border-color:rgba(0,0,0,.15);color:#1C1917}
html[data-tema="claro"] .btn-icono:hover{color:#1C1917;border-color:#1C1917}
html[data-tema="claro"] .btn-icono svg{stroke:#1C1917}
html[data-tema="claro"] .horario-btn{box-shadow:0 0 0 4px rgba(0,0,0,.1),0 4px 16px rgba(0,0,0,.15)}
html[data-tema="claro"] .horario-btn.cerrado{box-shadow:0 0 0 4px rgba(0,0,0,.1),0 4px 16px rgba(0,0,0,.15)}
html[data-tema="claro"] .chip:hover:not(.on){color:#1C1917}
html[data-tema="claro"] .chip.on{color:#1C1917}
html[data-tema="claro"] .chip::after{background:#1C1917}
html[data-tema="claro"] .chorreado{
  background-image:
    radial-gradient(circle at 14px 0, #1C1917 11px, transparent 11.5px),
    radial-gradient(circle at 23px 0, #1C1917 7px, transparent 7.5px),
    linear-gradient(#1C1917,#1C1917);
  background-size:28px 26px,46px 26px,100% 9px;
  background-position:0 3px,0 10px,0 0; background-repeat:repeat-x}
html[data-tema="claro"] .particula-flot{background:#1C1917}
html[data-tema="claro"] .header-particles{background:linear-gradient(to top,rgba(0,0,0,.15) 0%,transparent 50%)}
html[data-tema="claro"] .header-particle{background:#1C1917}
html[data-tema="claro"] .item,
html[data-tema="claro"] .paso,
html[data-tema="claro"] .ticket,
html[data-tema="claro"] .kpi,
html[data-tema="claro"] .mapa-card,
html[data-tema="claro"] .texto-local{box-shadow:0 3px 10px rgba(0,0,0,.18),0 1px 3px rgba(0,0,0,.1)}
html[data-tema="claro"] .item,
html[data-tema="claro"] .ticket,
html[data-tema="claro"] .kpi,
html[data-tema="claro"] .mapa-card,
html[data-tema="claro"] .texto-local{border-color:#000}
html[data-tema="claro"] .item:hover{box-shadow:0 8px 24px rgba(0,0,0,.25),0 2px 8px rgba(0,0,0,.15);border-color:#000}
html[data-tema="claro"] .plancha{
  background:linear-gradient(180deg,#FFFFFF,#F7F4EE)}
html[data-tema="claro"] .plancha::before{
  background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(247,244,238,.94))}
html[data-tema="claro"] .barra,
html[data-tema="claro"] .resumen{background:rgba(255,255,255,.98);border-color:#1C1917;box-shadow:0 6px 20px rgba(0,0,0,.25)}
html[data-tema="claro"] .como div{border-color:#000}
html[data-tema="claro"] .separador-cat{background:linear-gradient(90deg,transparent,#000,transparent)}
html[data-tema="claro"] .tabbar-m,html[data-tema="claro"] .tabbar-m-staff{border-top-color:#1C1917;box-shadow:0 -4px 20px rgba(0,0,0,.12),0 -2px 8px rgba(0,0,0,.08)}
html[data-tema="claro"] .promos .promo{box-shadow:0 8px 30px rgba(232,168,0,.18),0 4px 12px rgba(0,0,0,.08)}
html[data-tema="claro"] .promos .promo:hover{box-shadow:0 16px 50px rgba(232,168,0,.25),0 8px 25px rgba(232,168,0,.15),0 0 40px rgba(232,168,0,.12)}
html[data-tema="claro"] .promos-tab .poster{box-shadow:0 4px 16px rgba(232,168,0,.15),0 2px 6px rgba(0,0,0,.06);border-color:rgba(0,0,0,.1)}
html[data-tema="claro"] .promos-tab .poster:hover{box-shadow:0 16px 40px rgba(232,168,0,.25),0 8px 20px rgba(232,168,0,.15);border-color:var(--queso)}
html[data-tema="claro"] .barra.on .in::before{animation:fabPulseClaro 2.2s ease-out infinite}
@keyframes fabPulseClaro{0%{box-shadow:0 0 0 0 rgba(0,0,0,.3)}70%{box-shadow:0 0 0 14px rgba(0,0,0,0)}100%{box-shadow:0 0 0 0 rgba(0,0,0,0)}}
html[data-tema="claro"] .btn-queso{border-color:#1C1917;box-shadow:0 6px 20px rgba(0,0,0,.2)}
html[data-tema="claro"] .hoja{background:#FFFFFF}
html[data-tema="claro"] .staff-bar{background:#1C1917}
html[data-tema="claro"] .staff-bar .salir{color:#C8C0B6}
html[data-tema="claro"] .toast{background:#1C1917;color:#F7F2E8}
html[data-tema="claro"] .tab.on{color:#1A1512}
html[data-tema="claro"] .item .mas,
html[data-tema="claro"] .item .contador .mas{color:#1A1512}
html[data-tema="claro"] .op .muestra{background:#EDE8E0}
html[data-tema="claro"] .qty button,
html[data-tema="claro"] .item .contador .menos{background:#F2EFE9}

*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth;--tabbar-h:70px}
body{font-family:'Inter',system-ui,sans-serif;background:var(--carbon);color:var(--humo);
  font-size:15px;line-height:1.45;-webkit-font-smoothing:antialiased;padding-bottom:20px}
button,input,select{font-family:inherit;color:inherit}
button{cursor:pointer;border:none;background:none}
:focus-visible{outline:3px solid var(--queso);outline-offset:2px}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:var(--carbon)}
::-webkit-scrollbar-thumb{background:var(--linea);border-radius:99px;border:2px solid var(--carbon)}
::-webkit-scrollbar-thumb:hover{background:var(--ceniza)}
*{scrollbar-width:thick;scrollbar-color:var(--linea) var(--carbon)}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

.chorreado{height:26px;width:100%;position:relative;
  background-image:
    radial-gradient(circle at 14px 0, var(--queso) 11px, transparent 11.5px),
    radial-gradient(circle at 23px 0, var(--queso) 7px, transparent 7.5px),
    linear-gradient(var(--queso),var(--queso));
  background-size:28px 26px,46px 26px,100% 9px;
  background-position:0 3px,0 10px,0 0; background-repeat:repeat-x;
  overflow:visible}
.chorreado::before{display:none}

.particula-flot{position:absolute;width:3px;height:3px;border-radius:50%;background:var(--queso);
  opacity:0;bottom:0;pointer-events:none}
.particula-flot:nth-child(1){left:10%;animation:subir 6s ease-out infinite}
.particula-flot:nth-child(2){left:25%;animation:subir 7s ease-out 1s infinite}
.particula-flot:nth-child(3){left:40%;animation:subir 5s ease-out 0.5s infinite}
.particula-flot:nth-child(4){left:55%;animation:subir 8s ease-out 2s infinite}
.particula-flot:nth-child(5){left:70%;animation:subir 6.5s ease-out 1.5s infinite}
.particula-flot:nth-child(6){left:85%;animation:subir 7.5s ease-out 3s infinite}
.particula-flot:nth-child(7){left:18%;animation:subir 5.5s ease-out 0.8s infinite}
.particula-flot:nth-child(8){left:62%;animation:subir 6.8s ease-out 2.5s infinite}
@keyframes subir{0%{transform:translateY(0) scale(1);opacity:0}10%{opacity:.4}50%{opacity:.25}100%{transform:translateY(-280px) scale(0.5);opacity:0}}

/* ============================== HEADER ==================================== */
header{background:radial-gradient(ellipse 90% 120% at 50% -20%,#0d0b0a 0%,var(--carbon) 70%);
  padding:0 16px 26px;text-align:center;position:relative;overflow:hidden}
.header-particles{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;overflow:hidden;
  background:linear-gradient(to top,rgba(255,195,0,.12) 0%,transparent 50%)}
.header-particle{position:absolute;width:3px;height:3px;border-radius:50%;background:var(--queso);opacity:.5;bottom:-10px}
.header-particle:nth-child(1){left:10%;animation:floatUp 6s ease-out infinite}
.header-particle:nth-child(2){left:25%;animation:floatUp 7s ease-out 1s infinite}
.header-particle:nth-child(3){left:40%;animation:floatUp 5s ease-out 0.5s infinite}
.header-particle:nth-child(4){left:55%;animation:floatUp 8s ease-out 2s infinite}
.header-particle:nth-child(5){left:70%;animation:floatUp 6.5s ease-out 1.5s infinite}
.header-particle:nth-child(6){left:85%;animation:floatUp 7.5s ease-out 3s infinite}
.header-particle:nth-child(7){left:18%;animation:floatUp 5.5s ease-out 0.8s infinite}
.header-particle:nth-child(8){left:62%;animation:floatUp 6.8s ease-out 2.5s infinite}
@keyframes floatUp{0%{transform:translateY(0);opacity:0}10%{opacity:.5}100%{transform:translateY(-350px);opacity:0}}
.logo-reveal{position:absolute;top:50%;left:68%;transform:translate(-50%,-50%);width:clamp(160px,32vw,280px);aspect-ratio:1/1;border-radius:50%;overflow:hidden;z-index:10;pointer-events:none;background:#000}
.logo-reveal video{width:100%;height:100%;object-fit:cover;display:block;transition:opacity 1.6s ease;opacity:1}
@media(max-width:760px){
  .logo-reveal{display:none}
}

.marca{width:92px;height:92px;margin:22px auto 12px;border-radius:50%;overflow:hidden;
  box-shadow:0 0 0 5px rgba(255,195,0,.13)}
.marca img{width:100%;height:100%;display:block;animation:breathing 4s ease-in-out infinite}
@media(max-width:760px){
  .marca img{animation:logoEntrada 1.5s cubic-bezier(.3,1.4,.5,1) forwards,breathing 4s ease-in-out 1.5s infinite}
  @keyframes logoEntrada{0%{transform:scale(0) rotate(-360deg);opacity:0}60%{transform:scale(1.3) rotate(20deg);opacity:1}80%{transform:scale(.9) rotate(-10deg)}100%{transform:scale(1) rotate(0deg);opacity:1}}
  @keyframes breathing{0%,100%{transform:scale(1)}50%{transform:scale(1.1)}}
}
@keyframes breathing{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
.eyebrow{font-size:.65rem;letter-spacing:.26em;text-transform:uppercase;color:var(--queso);font-weight:700}
h1{font-family:'Anton',sans-serif;font-size:clamp(2.5rem,12.5vw,3.8rem);line-height:.92;
  margin:8px 0 2px;text-transform:uppercase}
h1 .b{color:var(--queso);animation:brillo 3s ease-in-out infinite}
@keyframes brillo{0%,100%{color:var(--mostaza);text-shadow:0 0 8px rgba(255,195,0,.3)}50%{color:var(--queso);text-shadow:0 0 16px rgba(255,195,0,.8)}}
header p.tag{color:var(--humo);font-size:.88rem;max-width:31ch;margin:8px auto 0;padding-top:12px}

/* Angosto (por defecto): los bloques nuevos no deben notarse — mismo
   apilado centrado de siempre. .in-ancho y .datos-bloque quedan "planos"
   (display:contents) para que sus hijos se comporten como si el div
   agrupador no existiera. */
header .in-ancho,
header .marca-fila,
header .datos-bloque{display:contents}
header .separador-h{display:none}

@media(min-width:1000px){
  header{padding:20px 40px;text-align:left}
  header .in-ancho{max-width:1400px;margin:0 auto;display:flex;align-items:center;gap:26px}
  header .marca-fila{display:flex;align-items:center;gap:18px;flex:0 0 auto}
  .marca{width:64px;height:64px;margin:0;flex:0 0 auto;box-shadow:0 0 0 4px rgba(255,195,0,.13)}
  .eyebrow{display:block}
  h1{font-size:2.15rem;margin:1px 0 0;line-height:1}
  header .separador-h{width:1px;align-self:stretch;background:var(--linea);flex:0 0 auto}
  header .datos-bloque{flex:1;display:flex;flex-direction:column;justify-content:center;gap:7px;min-width:0}
  header p.tag{max-width:56ch;margin:0;text-align:left}
  .horario{margin-top:0}
  .acciones-top{position:static;margin-left:auto;flex:0 0 auto;display:flex}
}
/* Acciones del header. El candado va aquí y no en el pie porque es donde
   la gente busca "mi cuenta"; pero se queda tenue y sin etiqueta para que
   el cliente que viene a pedir una hamburguesa no lo confunda con algo
   que le sirva a él. */
.acciones-top{position:absolute;top:14px;right:14px;display:flex;gap:8px;z-index:20}
.btn-icono{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;
  background:rgba(255,255,255,.06);border:1px solid var(--linea);color:var(--ceniza);
  font-size:1rem;line-height:1;transition:.15s}
.btn-icono:hover{color:var(--queso);border-color:var(--queso)}
.btn-icono:active{transform:scale(.92)}
.btn-icono svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
.horario{display:inline-flex;align-items:center;margin-top:14px;gap:0}
.horario-btn{position:relative;display:flex;align-items:center;gap:10px;
  background:var(--ok);border-radius:12px;padding:10px 16px;
  box-shadow:0 0 0 4px rgba(63,169,106,.25),0 4px 16px rgba(63,169,106,.3),0 2px 8px rgba(0,0,0,.3);
  transition:all .3s ease}
.horario-btn.cerrado{background:var(--brasa);
  box-shadow:0 0 0 2px rgba(217,72,31,.3),0 0 8px rgba(217,72,31,.4),0 2px 8px rgba(0,0,0,.3)}
.horario-btn::after{content:'';position:absolute;bottom:-6px;left:50%;transform:translateX(-50%);
  width:60%;height:6px;background:rgba(0,0,0,.25);border-radius:50%;filter:blur(3px)}
.luz{width:12px;height:12px;border-radius:50%;background:#fff;
  box-shadow:0 0 8px #fff,0 0 16px rgba(255,255,255,.5)}
.horario-btn.cerrado .luz{background:#fff;box-shadow:0 0 6px #fff,0 0 12px rgba(255,200,100,.4)}
.horario .hora-txt{font-size:.8rem;color:#fff;font-weight:400}
.horario .hora-txt b{font-weight:800}

/* ============================== NAV ======================================= */
nav{position:sticky;top:0;z-index:60;background:rgba(28,25,23,.98);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-bottom:1px solid var(--linea);overflow-x:auto;scrollbar-width:none;
  scroll-behavior:smooth;box-shadow:0 4px 20px rgba(0,0,0,.4)}
nav::-webkit-scrollbar{display:none}
/* `justify-content:center` centra las 5 pestañas cuando caben en el ancho
   de la pantalla (siempre, en desktop — son 5 palabras cortas). Si algún
   día no caben, `overflow-x:auto` sigue permitiendo deslizar: no se
   pierde el resguardo por centrar. */
nav .in{display:flex;gap:22px;padding:11px 14px;min-width:max-content;margin:0 auto;max-width:960px;
  justify-content:center;width:100%}
/* Pestañas de línea, no pastillas: fondo transparente y una barra activa
   abajo (`.chip.on::after`), como una barra de tabs clásica en vez de
   botones sueltos — pedido explícito (2026-09-03), reemplaza el estilo
   de pastilla amarilla de antes. Sin fondo propio, así que el espaciado
   entre pestañas pasa a vivir en el `gap` de `.in` (antes 6px, pensado
   para separar pastillas ya con su propio padding lateral). */
.chip{position:relative;padding:11px 2px;background:transparent;color:var(--ceniza);
  font-size:.88rem;font-weight:700;white-space:nowrap;border:none;
  transition:color .25s ease}
.chip:hover:not(.on){color:var(--humo)}
.chip.on{color:var(--queso)}
.chip::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:3px;border-radius:3px 3px 0 0;
  background:var(--queso);transform:scaleX(0);transition:transform .25s ease}
.chip.on::after{transform:scaleX(1)}

/* Barra inferior fija, estilo app nativa (Uber Eats, Rappi, etc.): en vez
   de una fila de pastillas que se puede salir de pantalla y esconder una
   sección sin avisar, esto son 5 casillas de ancho fijo — SIEMPRE caben
   las 5, no hay nada que descubrir deslizando. Es la única nav en
   teléfono; la de arriba (.chip) queda solo para pantallas anchas, donde
   nunca hubo problema de espacio. */
/* Barra inferior fija, estilo app nativa (Uber Eats, Rappi, etc.): en vez
   de una fila de pastillas que se puede salir de pantalla y esconder una
   sección sin avisar, esto son casillas de ancho fijo que SIEMPRE caben
   completas, nada que descubrir deslizando. El mismo estilo (.tabbar-m)
   lo comparten dos barras distintas: la del cliente (.tabbar-m, dentro de
   #vitrina) y la del personal (.tabbar-m-staff, dentro de #comandas) —
   nunca están las dos visibles a la vez porque viven en contenedores que
   se esconden solos según el modo (body.staff). Cada una se activa en su
   propio punto de corte porque el panel de personal deja de necesitar
   esta barra antes (pasa a sidebar en pantalla ancha, 1100px) que el
   menú del cliente (que nunca tiene sidebar, corta a 760px). */
/* === TABBAR AMARILLO REDONDEADO (actual) === */
.tabbar-m,.tabbar-m-staff{display:none;position:fixed;top:auto;left:0;right:0;bottom:0;z-index:90;
  background:rgba(24,21,19,.97);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-top:3px solid var(--queso);border-bottom:0;overflow:visible;
  padding:7px 4px calc(7px + env(safe-area-inset-bottom));
  border-radius:20px 20px 0 0;
  box-shadow:0 -4px 20px rgba(0,0,0,.3),0 0 15px rgba(255,195,0,.3)}
.tabbar-m .tab-m,.tabbar-m-staff .tab-m{flex:1;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:3px;padding:8px 6px;border-radius:0;
  color:var(--humo);font-size:.76rem;font-weight:700;line-height:1.1;transition:.2s ease;position:relative}
.tabbar-m .tab-m:hover:not(.on),.tabbar-m-staff .tab-m:hover:not(.on){color:var(--humo);transform:translateY(-2px)}
.tabbar-m .tab-m .ico,.tabbar-m-staff .tab-m .ico{font-size:1.55rem;line-height:1;transition:transform .15s}
.tabbar-m .tab-m.on,.tabbar-m-staff .tab-m.on{color:var(--queso)}
.tabbar-m .tab-m.on .ico,.tabbar-m-staff .tab-m.on .ico{transform:translateY(-2px) scale(1.1)}
.tabbar-m .tab-m.on::after,.tabbar-m-staff .tab-m.on::after{content:'';display:block;width:4px;height:4px;
  border-radius:50%;background:var(--queso);margin-top:1px}
.tab-m .globo{position:absolute;top:2px;right:14%;background:var(--brasa);color:#fff;
  font-size:.6rem;font-weight:800;border-radius:999px;min-width:15px;height:15px;
  padding:0 3px;display:grid;place-items:center;line-height:1}
/* === FIN TABBAR AMARILLO === */

/* === TABBAR ORIGINAL (negro cuadrado) - DESCOMENTA SI QUIERES VOLVER ===
.tabbar-m,.tabbar-m-staff{display:none;position:fixed;top:auto;left:0;right:0;bottom:0;z-index:90;
  background:rgba(24,21,19,.97);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-top:1px solid var(--linea);border-bottom:0;overflow:visible;
  padding:7px 4px calc(7px + env(safe-area-inset-bottom))}
.tabbar-m .tab-m,.tabbar-m-staff .tab-m{flex:1;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:3px;padding:6px 2px;border-radius:13px;
  color:var(--ceniza);font-size:.62rem;font-weight:700;line-height:1.05;transition:.2s ease;position:relative}
.tabbar-m .tab-m:hover:not(.on),.tabbar-m-staff .tab-m:hover:not(.on){color:var(--humo);transform:translateY(-2px)}
.tabbar-m .tab-m .ico,.tabbar-m-staff .tab-m .ico{font-size:1.32rem;line-height:1;transition:transform .15s}
.tabbar-m .tab-m.on,.tabbar-m-staff .tab-m.on{color:var(--queso)}
.tabbar-m .tab-m.on .ico,.tabbar-m-staff .tab-m.on .ico{transform:translateY(-2px) scale(1.08)}
.tabbar-m .tab-m.on::after,.tabbar-m-staff .tab-m.on::after{content:'';display:block;width:4px;height:4px;
  border-radius:50%;background:var(--queso);margin-top:1px}
.tab-m .globo{position:absolute;top:2px;right:14%;background:var(--brasa);color:#fff;
  font-size:.6rem;font-weight:800;border-radius:999px;min-width:15px;height:15px;
  padding:0 3px;display:grid;place-items:center;line-height:1}
=== FIN TABBAR ORIGINAL === */
@media(max-width:760px){
  nav:not(.tabbar-m){display:none}
  .tabbar-m{display:flex}
  body{padding-bottom:calc(100px + env(safe-area-inset-bottom))}
  .toast{bottom:calc(178px + env(safe-area-inset-bottom))}
}
@media(max-width:1099px){
  .tabbar-m-staff{display:flex}
}

main{max-width:960px;margin:0 auto;padding:0 16px}
main,.seccion,.items,.ops,.tickets,.kpis{min-width:0;max-width:100%}
.seccion{display:none;padding:22px 0 40px}
.seccion.on{display:block;animation:fadeSlideIn .3s ease-out;padding-top:16px}
@keyframes fadeSlideIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
h2{font-family:'Anton',sans-serif;font-size:1.55rem;text-transform:uppercase;margin:0 0 4px}
.sub{color:var(--ceniza);font-size:.85rem;margin-bottom:16px}

.como{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:22px}
.como div{background:var(--carbon-panel);border:1px solid var(--linea);border-radius:12px;
  padding:12px 10px;text-align:center;font-size:.76rem;line-height:1.35;color:var(--ceniza)}
.como .num{display:grid;place-items:center;width:26px;height:26px;margin:0 auto 7px;
  border-radius:50%;background:var(--queso);color:#1A1512;font-family:'Anton';font-size:.9rem}
.como em{font-style:normal;color:var(--queso);font-weight:800}

/* ============================ PROMOS ======================================
   Carrusel de fotos que se administra desde el panel de personal (pestaña
   "Promos") y se pinta como lo primero dentro de #s-menu — que es la
   sección activa por defecto — para que sea lo primero que se vea al
   abrir la página, sin depender de que cargue la red primero.

   Las fotos de promo suelen ser verticales (el póster completo, con
   precio arriba y CTA abajo), así que la tarjeta NO recorta a un
   rectángulo fijo: se fija la ALTURA y el ancho se acomoda solo a la
   proporción real de cada imagen (object-fit:contain). Una promo
   horizontal queda ancha, una vertical queda angosta — ninguna pierde
   contenido por el recorte. */
.promos{position:relative;overflow:hidden;padding:10px 0;margin:4px 0}
.promos-track{display:flex;gap:14px;animation:carruselInfinito 20s linear infinite}
@keyframes carruselInfinito{0%{transform:translateX(0)}100%{transform:translateX(-75%)}}
.promos-track:hover{animation-play-state:paused}
/* `position:relative` NO es decorativo: sin él, `.cap` y el badge `⤢` (que
   son `position:absolute`) se anclan al primer ancestro con `transform`, y
   ese es `.promos-track` — que está animado. Resultado: los badges de las
   N promos se apilaban todos en la esquina de un track 4× más ancho que la
   pantalla, así que no se veía ninguno… salvo el de la tarjeta bajo el
   cursor, porque `:hover` le mete `scale()` y esa tarjeta se vuelve su
   propio bloque contenedor. Eso es exactamente lo de la captura: una sola
   promo con lupa. Con esta línea, cada badge se ancla a su tarjeta. */
.promos .promo{flex:0 0 auto;position:relative;width:calc(80vw);max-width:380px;height:220px;border-radius:16px;overflow:hidden;
  background:var(--carbon-panel);cursor:pointer;
  box-shadow:0 8px 30px rgba(0,0,0,.5),0 4px 12px rgba(0,0,0,.3);
  transition:transform .4s ease,box-shadow .4s ease,z-index .4s}
.promos .promo:hover{transform:scale(1.08);z-index:10;
  box-shadow:0 16px 50px rgba(0,0,0,.6),0 8px 25px rgba(255,195,0,.15),0 0 40px rgba(255,195,0,.1)}
/* Sin `pointer-events:none`. Lo tenía, y eso hacía que el clic nunca llegara
   al `<img>`: el delegado de #s-menu busca `.promos .promo img` con
   `closest()` sobre el target, y el target siempre era el div. O sea, el
   carrusel entero NO era clicable — el badge de lupa prometía algo que no
   pasaba. La pestaña "Promos" sí funcionaba porque ahí el img no lo tiene.
   El delegado además ahora resuelve desde la tarjeta, no desde el img, así
   que tocar el borde o el caption también abre el visor. */
/* Las fotos de promo son pósters verticales (~360×480 a 572×1024, medidos
   contra el storage real) metidos en una tarjeta horizontal (~380×220):
   `cover` solo puede mostrar una franja de ~35-45% del alto del póster,
   pase lo que pase. Se probó `object-position:top` para no cortar el
   título — resultado: la franja visible quedaba en el título/fondo y la
   comida, que en estos pósters vive en la mitad inferior, desaparecía por
   completo (reportado en producción, 2026-09-03). `75%` baja la franja
   visible hacia abajo: sacrifica el título (ya redundante — `.cap` pone
   el mismo texto encima) y el aro de precio del fondo, y prioriza la
   comida. Si un póster futuro tiene otra composición, este es el primer
   número a tocar, no una regla nueva. El zoom lento (Ken Burns) es lo que
   le faltaba a una tarjeta estática con una sola foto: se anima ella sola
   sin esperar el :hover del mouse, que en un teléfono nunca pasa.
   `alternate` para que no salte al reiniciar. */
.promos .promo img{height:100%;width:100%;object-fit:cover;object-position:center 75%;display:block;
  animation:promoKenBurns 9s ease-in-out infinite alternate}
@keyframes promoKenBurns{from{transform:scale(1)}to{transform:scale(1.12)}}
@media(prefers-reduced-motion:reduce){.promos .promo img{animation:none}}
.promos .promo .cap{position:absolute;left:0;right:0;bottom:0;padding:12px 14px 10px;
  background:linear-gradient(0deg,rgba(0,0,0,.85),transparent);color:#fff;
  font-size:.84rem;font-weight:700;line-height:1.25}
.promos .promo::after,.promos-tab .poster::after{
  content:'⤢';position:absolute;top:9px;right:9px;background:rgba(18,18,20,.65);
  color:#fff;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;
  font-size:.85rem;pointer-events:none}
@media(min-width:1000px){
  .promos{padding:16px 0;perspective:1200px}
  .promos-track{gap:20px;animation:carruselInfinito 18s linear infinite}
  .promos .promo{width:calc(28vw);max-width:420px;height:300px;border-radius:22px;
    box-shadow:0 12px 40px rgba(0,0,0,.55),0 6px 16px rgba(0,0,0,.35)}
  .promos .promo:hover{transform:scale(1.1);box-shadow:0 20px 60px rgba(0,0,0,.65),0 10px 30px rgba(255,195,0,.2),0 0 60px rgba(255,195,0,.15)}
}

/* Pestaña "Promos": a diferencia del carrusel de arriba (pensado para
   asomar rápido), aquí cada póster se ve completo y a lo ancho — no hay
   límite de alto, así que una foto vertical se lee sin comprimir nada. */
.promos-tab{display:grid;gap:18px;max-width:480px;margin:0 auto}
.promos-tab .poster{border-radius:16px;overflow:hidden;border:1px solid var(--linea);
  background:var(--carbon-panel);position:relative;cursor:pointer;transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease;box-shadow:0 4px 16px rgba(0,0,0,.3)}
.promos-tab .poster:hover{transform:translateY(-6px) scale(1.02);box-shadow:0 16px 40px rgba(255,195,0,.2),0 8px 20px rgba(0,0,0,.4);border-color:var(--queso)}
.promos-tab .poster img{width:100%;display:block;transition:transform .4s ease}
.promos-tab .poster:hover img{transform:scale(1.05)}
.promos-tab .poster .cap{padding:11px 14px;font-size:.82rem;color:var(--ceniza);
  border-top:1px solid var(--linea)}
.promos-tab .poster .promo-badge{position:absolute;top:14px;left:14px;z-index:5;font-size:.75rem;padding:5px 12px;box-shadow:0 4px 12px rgba(0,0,0,.4)}
/* Cuando la promo está vinculada a un producto real, esta fila se agrega
   debajo del póster con precio y el mismo control +/− que usa cualquier
   plato del menú (controlItem()) — es lo que la hace pedible de verdad,
   no solo una foto bonita. */
.promos-tab .poster-pedible{display:flex;align-items:center;gap:10px;padding:14px;
  border-top:1px solid var(--linea);background:var(--carbon-alto)}
.promos-tab .poster-pedible .pp-info{flex:1;min-width:0}
.promos-tab .poster-pedible .pp-nom{font-family:'Anton',sans-serif;font-size:1.05rem;text-transform:uppercase;line-height:1.1;display:block}
.promos-tab .poster-pedible .pp-precio{font-family:'Anton',sans-serif;font-size:1.3rem;color:var(--queso);line-height:1.1;display:block}
.promos-tab .poster-pedible .pp-precio small{display:block;font-size:.68rem;color:var(--ceniza);font-family:'Inter';font-weight:500}
.promos-tab .poster-pedible .pp-ctrl{display:flex;align-items:center;gap:6px;flex:0 0 auto}
.promos-tab .poster-pedible .btn-cant{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;font-size:1.2rem;font-weight:700;line-height:1}
.promos-tab .poster-pedible .btn-menos{background:var(--carbon);border:1.5px solid var(--linea);color:var(--humo)}
.promos-tab .poster-pedible .btn-mas{width:44px;height:44px;border-radius:50%;background:var(--queso);color:#1A1512;display:grid;place-items:center;font-size:1.6rem;font-weight:700;line-height:1;transition:transform .15s ease,box-shadow .2s ease;box-shadow:0 4px 12px rgba(255,195,0,.3)}
.promos-tab .poster-pedible .btn-mas:hover{transform:scale(1.1);box-shadow:0 6px 20px rgba(255,195,0,.5)}
.promos-tab .poster-pedible .btn-mas:active{transform:scale(.95)}
.promos-tab .poster-pedible .cantidad{font-family:'Anton';font-size:1.2rem;color:var(--queso);min-width:20px;text-align:center}

/* En PC los pósters caben de a dos (tres en pantallas grandes) en vez de
   una sola columna angosta. En movil se mantiene la columna unica. Los
   posters tienen alturas distintas, asi que align-items:start evita que
   una promo alta estire a su vecina. */
@media(min-width:1000px){
  .promos-tab{grid-template-columns:repeat(2,1fr);align-items:start;max-width:940px;gap:22px}
}
@media(min-width:1400px){
  .promos-tab{grid-template-columns:repeat(3,1fr);max-width:1320px}
}
/* Promo con adicionales: un solo botón en vez del ±. El ± prometía un
   contador que no puede existir — enCarrito() ignora las líneas con
   `detalle`, así que siempre marcaría 0. Un botón que abre la hoja no
   promete nada que después no cumpla. */
.promos-tab .poster-pedible .btn-armar{padding:11px 18px;border-radius:999px;
  background:var(--queso);color:#1A1512;font-family:'Anton',sans-serif;
  font-size:.95rem;letter-spacing:.04em;text-transform:uppercase;line-height:1;
  box-shadow:0 4px 12px rgba(255,195,0,.3);transition:transform .15s ease,box-shadow .2s ease}
.promos-tab .poster-pedible .btn-armar:hover{transform:scale(1.05);box-shadow:0 6px 20px rgba(255,195,0,.5)}
.promos-tab .poster-pedible .btn-armar:active{transform:scale(.96)}
.promos-tab .poster-pedible .pp-precio i{font-style:normal;font-family:'Inter',sans-serif;
  font-size:.72rem;font-weight:600;color:var(--ceniza);text-transform:uppercase;letter-spacing:.06em}
.promos-tab .poster-pedible .tag-adic{margin-top:6px}
.promos-tab .vacio{grid-column:1/-1}

/* ========================== ADICIONALES ===================================
   La hoja que se abre al tocar un plato que tiene grupo asignado. Reusa
   .hoja y .total-hoja del resto de los velos; lo único propio es la fila,
   que necesita tres zonas (nombre, precio, control) y un estado "elegido"
   que se lea de un vistazo con el pulgar encima. */
.ad-lista{display:grid;gap:8px;margin-bottom:16px}
.ad-fila{display:flex;align-items:center;gap:10px;background:var(--carbon-panel);
  border:1px solid var(--linea);border-radius:12px;padding:11px 13px;transition:border-color .18s ease,background .18s ease}
.ad-fila.on{border-color:var(--queso);background:var(--carbon-alto)}
.ad-fila .ad-n{flex:1;min-width:0;font-weight:600;font-size:.92rem}
.ad-fila .ad-p{flex:0 0 auto;font-family:'Space Grotesk';font-weight:700;font-size:.83rem;color:var(--ceniza)}
.ad-fila.on .ad-p{color:var(--queso)}
.ad-fila .ad-ctrl{flex:0 0 auto;display:flex;align-items:center;gap:6px}
.ad-fila .ad-ctrl .q{font-family:'Anton';font-size:1.05rem;color:var(--queso);min-width:16px;text-align:center}
.ad-fila .ad-ctrl button{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;
  font-size:1.25rem;font-weight:700;line-height:1}
.ad-fila .ad-ctrl .mas{background:var(--queso);color:#1A1512}
.ad-fila .ad-ctrl .mas:disabled{opacity:.3}
.ad-fila .ad-ctrl .menos{background:var(--carbon);border:1.5px solid var(--linea);color:var(--humo)}
/* Encima del editor de comandas, que ya está en 300. Si se quedara al mismo
   nivel, el orden lo decidiría el orden en el HTML y no el de apertura. */
#veloAdic{z-index:320}

/* Panel: título de grupo dentro de Precios y de Agotados. */
.ad-grupo-tit{font-family:'Space Grotesk';font-weight:700;font-size:.72rem;text-transform:uppercase;
  letter-spacing:.1em;color:var(--queso);margin:14px 0 6px}
.ad-grupo-tit:first-child{margin-top:2px}
/* Asignación por categoría. El chip es el control, no una etiqueta: tres
   estados — apagado, `medio` (algunos platos de esa categoría lo tienen,
   normalmente porque quedó a medias) y `on`. Sin el estado intermedio, una
   categoría a medio asignar se vería igual que una sin asignar. */
.ad-aplicar{margin:2px 0 12px}
.ad-aplicar .k{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;
  color:var(--ceniza);margin-bottom:7px}
.ad-cats{display:flex;flex-wrap:wrap;gap:7px}
.ad-cat{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:999px;
  background:var(--carbon-panel);border:1px solid var(--linea);color:var(--ceniza);
  font-size:.79rem;font-weight:600;line-height:1;transition:.16s}
.ad-cat .n{font-family:'Space Grotesk';font-size:.68rem;background:rgba(0,0,0,.25);
  border-radius:8px;padding:2px 6px}
.ad-cat.medio{border-color:rgba(255,195,0,.5);color:var(--humo)}
.ad-cat.on{background:var(--queso);border-color:var(--queso);color:#1A1512}
.ad-cat.on .n{background:rgba(0,0,0,.18)}
.borrar-ad{flex:0 0 auto;width:34px;height:34px;border-radius:9px;display:grid;place-items:center;
  background:transparent;border:1px solid var(--linea);color:var(--ceniza);font-size:.9rem;transition:.16s}
.borrar-ad:hover{border-color:var(--brasa);color:var(--brasa)}
/* La cabecera de la lista tiene 3 columnas y las filas ahora 4: se reserva
   el hueco del botón para que "Precio" y "Máx." sigan alineados. */
.cab-max.con-borrar::after{content:'';width:34px;flex:0 0 auto}

/* En la tarjeta del cliente: avisa que ese plato abre una hoja en vez de
   caer directo al carrito, para que el cambio de comportamiento no sea una
   sorpresa al tocar el +. */
.tag-adic{display:inline-block;margin-top:4px;font-size:.64rem;font-weight:700;
  text-transform:uppercase;letter-spacing:.06em;color:var(--queso);
  background:rgba(255,195,0,.12);border:1px solid rgba(255,195,0,.3);
  border-radius:999px;padding:2px 8px;width:fit-content}

/* Solo informa: el cambio se hace en el chip de arriba. */
.etq-adic{font-size:.71rem;color:var(--queso);letter-spacing:.02em}

/* ============================ CARTA ======================================= */
.separador-cat{height:1px;background:linear-gradient(90deg,transparent,var(--queso),transparent);margin:20px 0;opacity:.35}
.cat-titulo{display:inline-block;background:var(--queso);color:#1A1512;font-family:'Anton',sans-serif;
  font-size:1.2rem;text-transform:uppercase;padding:6px 19px;border-radius:7px;
  margin:0 0 12px;transform:skewX(-4deg)}
/* Teléfono: fila horizontal — [foto] [nombre + precio] [control].
   La estructura del HTML es la misma en las dos pantallas; lo único que
   cambia es cómo se acomoda, así el JS que la dibuja no tiene que saber
   en qué tamaño de pantalla está. */
.items{display:grid;gap:10px}
.item{display:flex;align-items:center;gap:12px;background:var(--carbon-panel);
  border:1px solid var(--linea);border-radius:var(--r);padding:14px;
  width:100%;text-align:left;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;position:relative;overflow:hidden;
  box-shadow:0 2px 8px rgba(0,0,0,.08),0 1px 2px rgba(0,0,0,.04)}
.item:hover{transform:translateY(-3px);box-shadow:0 8px 24px rgba(255,195,0,.15);border-color:rgba(255,195,0,.4)}
.item:active{transform:scale(.97);border-color:var(--queso)}
.item .der{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.item .n{font-family:'Anton',sans-serif;font-size:1.05rem;text-transform:uppercase;line-height:1.15}
.item .pr{text-align:left}
.item .p{font-family:'Anton',sans-serif;font-size:1.15rem;color:var(--queso);display:block;line-height:1}
.item .bs{font-size:.68rem;color:var(--ceniza);font-weight:500}
.item .ctrl{flex:0 0 auto}
.item .mas{width:40px;height:40px;border-radius:50%;background:var(--queso);color:#1A1512;
  display:grid;place-items:center;font-size:1.5rem;font-weight:700;flex:0 0 auto;line-height:1}
/* Antes iba display:none y la descripción solo existía como tooltip (title=""),
   que en un teléfono no se ve nunca porque no hay hover. Ahora se muestra
   truncada a 2 líneas: cabe sin romper el alto de la fila. */
.item .d{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;font-size:.74rem;color:var(--ceniza);line-height:1.3;margin-top:1px}

/* ══════════════════ CARRUSEL DE TARJETAS · PANTALLA ANCHA ══════════════════
   En móvil, la lista vertical de filas anchas es correcta: una columna es
   lo que cabe. En una pantalla de escritorio esa misma fila se estira a
   960px y dice apenas "Dog Jr. — $1.50" con un mar de vacío alrededor.
   A partir de 1000px, cada categoría pasa a ser una tira horizontal de
   tarjetas cuadradas — mismo dato, mucho menos espacio muerto.
   La descripción no desaparece: se mueve al atributo title (tooltip nativo
   al pasar el mouse), porque en una tarjeta de 176px no hay sitio para dos
   líneas de ingredientes sin que deje de sentirse compacta.            */
@media(min-width:1000px){
  /* Centrado deliberado y consistente: antes el título de categoría
     quedaba pegado a la izquierda (era una "pestaña" inline-block normal)
     mientras las tarjetas de abajo tendían a alinearse distinto — esa
     combinación es la que se ve "no simétrica". Ahora todo el bloque
     —encabezado de sección, título de categoría y fila de tarjetas—
     centra igual, así arriba y abajo se leen como una sola composición. */
  #s-menu, #s-combos{text-align:center}
  #s-menu .como, #s-combos .como{margin-left:auto;margin-right:auto}
  .items{display:flex;gap:12px;overflow-x:auto;overflow-y:hidden;padding:4px 4px 14px;
    justify-content:safe center;
    scroll-snap-type:x proximity;scrollbar-width:thin;scrollbar-color:var(--linea) transparent}
  .items::-webkit-scrollbar{height:7px}
  .items::-webkit-scrollbar-thumb{background:var(--linea);border-radius:99px}
  .items::-webkit-scrollbar-thumb:hover{background:var(--queso)}
  /* Tarjeta en pantalla ancha, con el MISMO reparto que la del POS para que
     cliente y caja se lean igual:
        [foto] [nombre + precio]
        [────  + / −  ────────]
     Antes el + iba con position:absolute encima de la foto, y por eso
     parecía flotando sin relación con nada. Ahora cada zona tiene su
     sitio y la tarjeta no cambia de alto al sumar o restar. */
  .item{flex:0 0 232px;scroll-snap-align:start;
    display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;
    gap:10px;align-items:center;text-align:left;padding:12px;min-height:0}
  html[data-tema="claro"] .item{border:1.5px solid #000;box-shadow:0 3px 10px rgba(0,0,0,.18),0 1px 3px rgba(0,0,0,.1)}
  .item .miniatura{grid-row:auto;width:58px;height:58px;border-radius:10px;margin:0;order:0}
  .item .der{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:0}
  .item .n{font-size:.92rem;line-height:1.15;overflow-wrap:anywhere}
  .item .pr{text-align:left}
  /* La franja de controles abajo, ocupando las dos columnas. */
  .item .ctrl{grid-column:1/-1;display:flex;align-items:center;
    border-top:1px solid var(--linea);padding-top:9px;margin-top:2px}
  .item .mas,.item .contador{position:static}
  .item .contador{width:100%;display:flex;align-items:center;gap:8px;
    background:transparent;box-shadow:none;padding:0;border-radius:0}
  .item .contador button{width:34px;height:34px;border-radius:9px;font-size:1.2rem}
  .item .contador .menos{order:1}
  .item .contador .q{order:2}
  .item .contador .mas{order:3;margin-left:auto}
  .item .mas{width:34px;height:34px;border-radius:9px;font-size:1.2rem;margin-left:auto}
  /* Antes se ocultaba y quedaba solo como tooltip (`title=""`) para que la
     tarjeta quedara compacta — pero un tooltip no se ve sin mouse, y en
     desktop el cliente no sabía qué traía cada producto (reportado en
     producción, 2026-09-03). Se pidió mostrarla siempre, como en el
     teléfono; el `title` se deja puesto, no estorba. */
  .item .d{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
    overflow:hidden;font-size:.78rem;color:var(--ceniza);line-height:1.25}
  .cat-titulo{margin:22px auto 10px}
  main .seccion h2{margin-bottom:2px}
}
.item.agotado{opacity:.45;pointer-events:none}
.item .miniatura{width:58px;height:58px;border-radius:10px;object-fit:cover;
  background:var(--carbon-alto);flex:0 0 auto}
.fila-foto{display:flex;gap:11px;align-items:center;padding:9px 0;border-bottom:1px solid var(--linea)}
.fila-foto .mini{width:52px;height:52px;border-radius:9px;object-fit:cover;background:var(--carbon-alto);flex:0 0 auto}
.fila-foto .hueco{width:52px;height:52px;border-radius:9px;border:1px dashed var(--linea);
  display:grid;place-items:center;color:#4A443F;font-size:1.3rem;flex:0 0 auto}
.fila-foto .nm{flex:1;font-size:.85rem;min-width:0}
.fila-foto .nm small{display:block;color:var(--ceniza);font-size:.72rem}
.fila-foto .acc{display:flex;gap:6px;flex:0 0 auto}
.fila-foto .acc button{padding:9px 12px;border-radius:9px;font-size:.76rem;font-weight:700;
  font-family:'Space Grotesk'}
.fila-foto .subir{background:var(--queso);color:#1A1512}
.fila-foto .borrar{background:transparent;border:1px solid var(--linea);color:var(--ceniza)}
.fila-foto.cargando{opacity:.5;pointer-events:none}
.fila-promo .txt-promo{flex:1;min-width:0;padding:9px 10px;border-radius:8px;
  background:var(--carbon);border:1px solid var(--linea);color:var(--humo);font-size:.8rem}
.fila-promo .orden{display:flex;flex-direction:column;gap:2px;flex:0 0 auto}
.fila-promo .orden button{width:26px;height:20px;border-radius:5px;background:var(--carbon-alto);
  border:1px solid var(--linea);color:var(--ceniza);font-size:.7rem;line-height:1}
.fila-promo .orden button:disabled{opacity:.3;pointer-events:none}
/* Bloque "hacer pedible" debajo de cada fila de promo en el panel: es
   deliberadamente un formulario aparte (no se guarda solo al escribir,
   como el texto de la foto) porque crea o actualiza una fila real en
   `items` — una acción con más peso que merece un botón explícito. */
/* Aviso FIJO dentro del formulario, no un toast que desaparece a los
   pocos segundos — la confusión de antes era exactamente esa: alguien
   pegaba el link acortado, el toast avisaba y se esfumaba, la persona
   cambiaba de pestaña sin haberlo visto, y al volver el campo se veía
   "vacío" (nunca se había guardado). Esto se queda a la vista hasta que
   el link sea el correcto. */
.aviso-campo{margin-top:8px;padding:10px 12px;border-radius:9px;
  background:rgba(217,72,31,.12);border:1px solid rgba(217,72,31,.4);
  color:var(--brasa);font-size:.76rem;line-height:1.5}
.campo input.invalido{border-color:var(--brasa)!important;box-shadow:0 0 0 1px var(--brasa)}
.pedible-promo{display:flex;flex-wrap:wrap;gap:8px;padding:0 0 16px;margin-top:-4px;
  border-bottom:1px solid var(--linea)}
.pedible-promo .in-pp{flex:1 1 160px;padding:9px 10px;border-radius:8px;background:var(--carbon);
  border:1px solid var(--linea);color:var(--humo);font-size:.8rem}
.pedible-promo .in-pp-precio{flex:0 1 100px}
.pedible-promo .pp-adic{flex:1 0 100%;display:flex;align-items:center;gap:8px}
.pedible-promo .pp-adic .k{font-size:.73rem;color:var(--ceniza);flex:0 0 auto}
.pedible-promo .in-pp-adic{flex:0 1 180px;cursor:pointer}
.pedible-promo .pp-adic-vacio{flex:1 0 100%;font-size:.73rem;color:var(--ceniza);line-height:1.5}
.pedible-promo .pp-adic-vacio b{color:var(--humo)}
/* Puntero desde Precios hacia el control por promo: sin esto, quien busca
   dónde enlazar los adicionales de una promo se queda mirando unos chips
   que nunca la incluyen. */
.ad-aplicar .k-nota{display:block;margin-top:8px;font-size:.71rem;color:var(--ceniza);line-height:1.5}
.ad-aplicar .k-nota b{color:var(--queso)}
.btn-mini{padding:9px 14px;border-radius:8px;background:var(--queso);color:#1A1512;
  font-size:.78rem;font-weight:700}
.btn-mini.btn-mini-fantasma{background:transparent;border:1px solid var(--linea);color:var(--ceniza)}
.pp-estado{flex:1 0 100%;font-size:.73rem;color:var(--ok)}
.item .contador{display:flex;align-items:center;gap:7px;flex:0 0 auto}
.item .contador button{width:40px;height:40px;border-radius:50%;font-size:1.45rem;font-weight:700;line-height:1;
  display:grid;place-items:center}
.item .contador .menos{background:var(--carbon-alto);border:1.5px solid var(--linea);color:var(--humo)}
.item .contador .mas{background:var(--queso);color:#1A1512}
.item .contador .q{min-width:22px;text-align:center;font-family:'Anton';font-size:1.25rem;color:var(--queso)}
.item.puesto{border-color:var(--queso)}
.cinta{position:absolute;top:11px;right:-32px;transform:rotate(38deg);background:var(--brasa);
  color:#fff;font-size:.6rem;font-weight:800;letter-spacing:.1em;padding:3px 34px;animation:shakeAgotado 2s ease-in-out infinite}
@keyframes shakeAgotado{0%,100%{transform:rotate(38deg)}10%,30%,50%,70%,90%{transform:rotate(36deg)}20%,40%,60%,80%{transform:rotate(40deg)}}
.promo-badge{display:inline-block;background:var(--ok);color:#fff;font-size:.72rem;font-weight:800;letter-spacing:.05em;padding:5px 12px;border-radius:6px;animation:bouncePromo 1.2s ease-in-out infinite;box-shadow:0 4px 12px rgba(0,0,0,.35);vertical-align:top}
@keyframes bouncePromo{0%,100%{transform:scale(1) translateY(0)}25%{transform:scale(1.08) translateY(-3px)}75%{transform:scale(0.96) translateY(-2px)}}
@keyframes marcaEntrada{from{transform:scale(.3);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes marcaRespira{0%,100%{transform:scale(1)}50%{transform:scale(1.06)}}
@keyframes fadeSlideUp{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
@keyframes pulsoQueso{0%,100%{opacity:1}50%{opacity:.7}}
@keyframes headerBg{0%,100%{background-position:0% 0%,0% 0%,0% 0%}50%{background-position:0% 0%,100% 100%,100% 0%}}
@keyframes destello{0%{background:var(--carbon-panel);transform:scale(1)}40%{background:rgba(255,195,0,.2);transform:scale(1.02)}100%{background:var(--carbon-panel);transform:scale(1)}}
.item.flash{animation:destello .4s ease-out}

/* ========================= CONSTRUCTOR ==================================== */
.constructor{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}
@media(max-width:780px){
  .constructor{grid-template-columns:1fr}
  .plancha{height:auto;min-height:200px;padding:14px 16px 10px}
}
/* Sin esto, el texto nowrap del resumen estira la columna y desborda la página:
   una columna de grid no baja de su min-content salvo que se le diga. */
.constructor > *{min-width:0}
#pasos{max-height:420px;overflow-y:auto;scroll-behavior:smooth;padding-right:4px}
#pasos::-webkit-scrollbar{width:6px}
#pasos::-webkit-scrollbar-thumb{background:var(--linea);border-radius:3px}
.pasos-progreso{display:flex;align-items:center;gap:10px;margin-bottom:12px;font-size:.78rem;color:var(--ceniza)}
.pasos-barra{flex:1;height:4px;background:var(--linea);border-radius:2px;overflow:hidden}
.pasos-fill{height:100%;background:var(--queso);width:0;transition:width .3s ease;border-radius:2px}
.constructor > * > *{min-width:0}
/* La plancha queda fija bajo el nav: la hamburguesa siempre a la vista.
   Fondo con la silueta del emblema, que aprovecha el espacio del banner. */
.plancha{position:sticky;top:66px;z-index:45;
  background:linear-gradient(180deg,#332E2B,#241F1D);
  border:1px solid var(--linea);border-radius:20px;
  height:232px;padding:16px 18px 12px;display:flex;flex-direction:column;
  align-items:center;justify-content:flex-end;overflow:hidden}
.plancha::after{content:'';position:absolute;inset:0;background:url(logo.png) center/70% no-repeat;opacity:.06;pointer-events:none;border-radius:20px}
.plancha.vacio{justify-content:center}
.plancha::before{content:'';position:absolute;inset:0;border-radius:20px;
  background:linear-gradient(180deg,rgba(51,46,43,.94),rgba(36,31,29,.96));pointer-events:none}
.plancha.vacio::before{
  background:linear-gradient(180deg,rgba(51,46,43,.55),rgba(36,31,29,.65));
}
.plancha > *{position:relative;z-index:1}
@media(min-width:781px){
  .constructor{gap:16px}
  .plancha{height:auto;min-height:340px;padding:24px 18px 18px}
}
.torre{display:flex;flex-direction:column-reverse;align-items:center;width:100%;
  transform-origin:bottom center;transition:transform .18s}
.capa{width:210px;animation:caer .22s cubic-bezier(.3,1.4,.5,1);cursor:pointer;
  display:flex;justify-content:center}
/* El pan de arriba se pone solo: no se quita, así que no finge ser tocable. */
.capa.fija{cursor:default}
@keyframes caer{from{transform:translateY(-30px);opacity:0}to{transform:translateY(0);opacity:1}}
.vacio-torre{text-align:center;color:var(--ceniza);font-size:.88rem;line-height:1.6;padding:20px 10px;
  display:flex;flex-direction:column;align-items:center}
.vacio-torre b{color:var(--queso);display:block;font-family:'Anton';font-size:1.35rem;
  text-transform:uppercase;margin-bottom:6px}
.vacio-torre span:not(.flecha){display:block;margin-bottom:8px}
.vacio-torre .flecha{font-size:3.2rem;display:block;animation:bota 1.2s infinite}
@keyframes bota{0%,100%{transform:translateY(0)}50%{transform:translateY(7px)}}
@keyframes bounce{0%,100%{transform:scale(1)}50%{transform:scale(1.2)}}
@keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-4px)}40%{transform:translateX(4px)}60%{transform:translateX(-3px)}80%{transform:translateX(3px)}}
@keyframes pulseGlow{0%,100%{box-shadow:0 0 0 0 rgba(255,195,0,.4)}50%{box-shadow:0 0 0 8px rgba(255,195,0,0)}}
.pista-quitar{font-size:.7rem;color:var(--ceniza);margin-top:12px;text-align:center}

.l-pan-abajo{height:26px;width:200px;background:linear-gradient(#E3B168,#C68F45);border-radius:6px 6px 16px 16px}
.l-pan-arriba{height:42px;width:200px;background:linear-gradient(#EDBB72,#D69F55);border-radius:60px 60px 8px 8px;position:relative}
.l-pan-arriba::after{content:'· · · ·';position:absolute;top:7px;left:0;right:0;text-align:center;
  color:#FFF3D6;letter-spacing:8px;font-size:.75rem}
.l-prot-carne{height:25px;width:206px;background:linear-gradient(#8E4C30,#5E2E1B);border-radius:11px;
  box-shadow:inset 0 -3px 5px rgba(0,0,0,.35)}
.l-prot-pollo{height:23px;width:204px;background:linear-gradient(#EBC77E,#C1913D);border-radius:11px;
  box-shadow:inset 0 -3px 5px rgba(0,0,0,.22)}
.l-prot-cerdo{height:23px;width:205px;background:linear-gradient(#D49A8D,#A2624F);border-radius:11px;
  box-shadow:inset 0 -3px 5px rgba(0,0,0,.25)}
.l-panfrito{height:13px;width:196px;background:linear-gradient(#D9A25C,#B87F3C);border-radius:4px}
.l-papas{height:14px;width:202px;background:repeating-linear-gradient(96deg,#F0BE4E 0 5px,#D69A2E 5px 9px);border-radius:3px}
.l-quesofundido{height:13px;width:214px;background:linear-gradient(#FFCE3D,#E8A400);
  clip-path:polygon(0 0,100% 0,96% 100%,88% 52%,76% 100%,64% 58%,50% 100%,36% 58%,24% 100%,12% 52%,4% 100%,0 40%)}
.l-quesomano{height:14px;width:198px;background:#F6F0E0;border:1px solid #DDD3BC;border-radius:5px}
.l-falafel{height:15px;width:194px;background:
  radial-gradient(circle at 20% 50%,#7E6E34 0 7px,transparent 7.5px),
  radial-gradient(circle at 50% 50%,#7E6E34 0 7px,transparent 7.5px),
  radial-gradient(circle at 80% 50%,#7E6E34 0 7px,transparent 7.5px)}
.l-kippe{height:16px;width:172px;background:linear-gradient(#7E4B28,#5C3319);border-radius:50%/42%}
.l-chile{height:9px;width:200px;background:repeating-linear-gradient(90deg,#C4331B 0 9px,#E2593A 9px 16px);border-radius:6px}
.l-verde{height:12px;width:210px;background:#7CB342;border-radius:50% 40% 55% 45%/80% 70% 90% 60%}
.l-tomate{height:11px;width:194px;background:linear-gradient(#E25744,#BE3A2A);border-radius:12px}
.l-cebolla{height:9px;width:188px;background:#E8D8EE;border:1.5px solid #C5A6D4;border-radius:10px}
.l-pepinillo{height:9px;width:184px;background:repeating-linear-gradient(90deg,#5E8C3A 0 12px,#79A84F 12px 20px);border-radius:6px}
.l-crema{height:10px;width:206px;background:#F3EDDD;border-radius:8px}
.l-tocineta{height:11px;width:198px;background:repeating-linear-gradient(100deg,#A83C2A 0 8px,#EFD8CE 8px 13px);border-radius:5px}
.l-huevo{height:14px;width:196px;background:radial-gradient(circle at 50% 50%,#F7C948 0 12px,#FBF6EA 12.5px);border-radius:9px}
.l-salsa{height:9px;width:202px;background:linear-gradient(90deg,#C0392B,#E67E22);border-radius:8px}

.paso{background:var(--carbon-panel);border:1px solid var(--linea);border-radius:var(--r);
  padding:14px;margin-bottom:11px;transition:.2s}
.paso.bloqueado{opacity:.4;pointer-events:none}
.paso.listo{border-color:rgba(63,169,106,.5)}
.paso-cab{display:flex;align-items:center;gap:10px;margin-bottom:11px}
.paso-num{width:28px;height:28px;border-radius:50%;background:var(--linea);color:var(--ceniza);
  display:grid;place-items:center;font-family:'Anton';font-size:.9rem;flex:0 0 auto}
.paso.activo .paso-num{background:var(--queso);color:#1A1512;animation:latido 1.6s infinite}
.paso.listo .paso-num{background:var(--ok);color:#fff}
@keyframes latido{0%,100%{box-shadow:0 0 0 0 rgba(255,195,0,.55)}70%{box-shadow:0 0 0 10px rgba(255,195,0,0)}}
.paso-cab h3{font-family:'Anton',sans-serif;font-size:1rem;text-transform:uppercase;letter-spacing:.03em}
.paso-cab small{display:block;color:var(--ceniza);font-size:.72rem;font-family:'Inter';
  font-weight:500;text-transform:none;letter-spacing:0}
.ops{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
/* Un contador − n + ocupa ~80 px. En una tarjeta de 160 px no queda sitio para
   el nombre y el navegador lo parte letra a letra. Estos pasos van más anchos. */
.op.multi{flex-wrap:wrap;row-gap:6px}
.op.multi .paso-num-op{width:100%;justify-content:flex-end}
.op{background:var(--carbon-alto);border:2px solid var(--linea);border-radius:12px;padding:14px 12px;
  text-align:left;font-size:.95rem;transition:.2s ease;display:flex;align-items:center;gap:10px;width:100%}
.op:hover:not(.sinstock):not(.topado){border-color:var(--queso);transform:translateX(3px);box-shadow:0 4px 12px rgba(255,195,0,.1)}
.op .muestra{width:32px;height:24px;border-radius:6px;overflow:hidden;flex:0 0 auto;
  border:1px solid rgba(255,255,255,.1);display:grid;place-items:center;background:#151312}
.op .muestra > div{width:100%!important;height:100%!important;border-radius:0!important;
  clip-path:none!important;box-shadow:none!important;border:0!important}
.op .txt{flex:1;min-width:0}
.op b{display:block;font-size:1rem;font-weight:700;line-height:1.22;
  overflow-wrap:break-word}

.op small{color:var(--ceniza);font-size:.72rem;display:block;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.op .paso-num-op{margin-left:auto}
.op .marca-op{width:26px;height:26px;border-radius:50%;background:var(--linea);color:var(--ceniza);
  display:grid;place-items:center;font-size:1.15rem;font-weight:700;flex:0 0 auto;line-height:1}
.op.on{border-color:var(--queso);background:rgba(255,195,0,.1)}
.op.on .marca-op{background:var(--ok);color:#fff}
.op:active{transform:scale(.96)}
.op.sinstock{opacity:.4;pointer-events:none}
.op.sinstock .marca-op{background:var(--brasa);color:#fff;font-size:.62rem;font-weight:800}
.op.topado{opacity:.4}
.op.base{border-color:rgba(255,195,0,.45)}
.op.base .marca-op{background:transparent;font-size:.85rem}
/* contador para ingredientes que admiten más de uno */
.paso-num-op{display:flex;align-items:center;gap:2px;flex:0 0 auto}
.paso-num-op button{width:30px;height:30px;border-radius:50%;background:var(--linea);
  font-size:1.15rem;font-weight:700;line-height:1;color:var(--humo);display:grid;place-items:center}
.paso-num-op button.mas{background:var(--queso);color:#1A1512}
.paso-num-op button:disabled{opacity:.3}
.paso-num-op span{min-width:20px;text-align:center;font-family:'Space Grotesk';font-weight:700;font-size:.9rem}

/* Mientras hay algo armado, esta barra sustituye a la del carrito:
   dos totales apilados se leen como ruido, no como información. */
.resumen{background:rgba(34,30,28,.97);backdrop-filter:blur(10px);
  border:2px solid var(--queso);border-radius:var(--r);padding:11px 13px;
  position:sticky;bottom:12px;z-index:50;box-shadow:0 10px 26px rgba(0,0,0,.6);display:none}
.resumen.on{display:block}
.resumen .det{font-size:.75rem;color:var(--ceniza);line-height:1.35;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:7px;max-width:100%}
.resumen .fila{display:flex;align-items:center;gap:10px}
.resumen .precios{flex:1;min-width:0}
.resumen .tot{font-family:'Anton',sans-serif;font-size:1.75rem;color:var(--queso);line-height:1;display:block}
.resumen .totbs{font-size:.71rem;color:var(--ceniza)}
.acciones{display:flex;gap:7px;flex:0 0 auto}


.skeleton{background:linear-gradient(90deg,var(--carbon-alto) 25%,var(--carbon) 50%,var(--carbon-alto) 75%);background-size:200% 100%;animation:shimmer 1.4s infinite;border-radius:8px}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
.skeleton-pasos{display:none}
.skeleton-pasos.on{display:block}
.skeleton-item{display:flex;align-items:center;gap:12px;background:var(--carbon-panel);border:1px solid var(--linea);border-radius:var(--r);padding:14px;margin-bottom:10px}
.skeleton-item .skeleton-foto{width:58px;height:58px;border-radius:10px;flex:0 0 auto}
.skeleton-item .skeleton-texto{flex:1}
.skeleton-item .skeleton-linea{height:12px;border-radius:6px;margin-bottom:8px}
.skeleton-item .skeleton-linea.w80{width:80%}
.skeleton-item .skeleton-linea.w50{width:50%;height:10px}
.skeleton-item .skeleton-btn{width:40px;height:40px;border-radius:50%;flex:0 0 auto}
.acciones .btn{padding:12px 16px;font-size:.85rem;flex:0 0 auto}
#btnReset{width:44px;padding:12px 0;font-size:1.1rem}
.btn{border-radius:12px;padding:15px 14px;font-weight:800;font-size:.9rem;flex:1;transition:.15s;
  text-align:center;line-height:1.2}
.btn-fantasma{background:transparent;border:1.5px solid var(--linea);color:var(--ceniza);font-weight:600}
.btn-fantasma:hover{border-color:var(--queso);color:var(--queso)}
.btn-wa{background:var(--wa);color:#fff}
.btn-wa:hover{box-shadow:0 4px 20px rgba(37,211,102,.4);transform:translateY(-1px)}
.btn:disabled{opacity:.35;cursor:not-allowed}
.btn:active:not(:disabled){transform:scale(.95);filter:brightness(1.1)}

.texto-local{background:var(--carbon-panel);border:1px solid var(--linea);
  border-radius:var(--r);padding:28px 24px;font-size:1rem}
.texto-local p{font-size:1rem;color:#C8C0B6;line-height:1.75}
.texto-local p + p{margin-top:14px}

/* ========================== CÓMO LLEGAR =================================== */
.mapa-card{background:var(--carbon-panel);border:1px solid var(--linea);border-radius:var(--r);overflow:hidden}
.mapa-card iframe{width:100%;height:290px;border:0;display:block;filter:grayscale(.25) contrast(1.05)}
.mapa-datos{padding:16px}
.dato{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid var(--linea);font-size:.87rem}
.dato:last-child{border:0}
.dato .k{color:var(--ceniza);min-width:78px;font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;padding-top:2px}

/* ============================ BARRA ======================================= */
.barra{position:fixed;left:0;right:0;bottom:0;z-index:95;background:rgba(34,30,28,.98);
  backdrop-filter:blur(12px);border-top:2px solid var(--queso);
  padding:12px 16px calc(12px + env(safe-area-inset-bottom));display:none}
.barra.on{display:block}
.barra .in{max-width:960px;margin:0 auto;display:flex;align-items:center;justify-content:space-between}
.barra .in > *{flex:none}
.resumen-pedido{display:flex;flex-direction:column;gap:0}
.precio-grande{font-family:'Anton',sans-serif;font-size:1.5rem;color:var(--queso);line-height:1}
.cantidad-chica{font-size:.75rem;color:var(--humo)}
.barra .lbl{display:none}
.btn-queso{background:var(--queso);color:#241F1D;border:none;border-radius:12px;
  padding:10px 18px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:6px;
  box-shadow:0 4px 12px rgba(0,0,0,.3);transition:transform .2s,box-shadow .2s}
.btn-queso:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(0,0,0,.4)}
.btn-queso:active{transform:scale(.96)}
.flecha{font-size:.7rem;transition:transform .3s;display:inline-block}
.btn-queso.abierto .flecha{transform:rotate(180deg)}
.btn-txt{display:inline}
.btn-icon{display:none}

@media(max-width:760px){
  .barra{position:fixed;right:16px;left:auto;bottom:calc(var(--tabbar-h, 70px) + 10px);
    z-index:95;background:none;border:none;backdrop-filter:none;padding:0;display:none}
  .barra.on{display:block}
  .barra.shake .in{animation:shake .4s ease}
  .barra .in{position:relative;display:flex;align-items:center;justify-content:center}
  .resumen-pedido{display:none}
  .btn-queso{width:60px;height:60px;border-radius:50%;padding:0;z-index:1;
    display:flex;align-items:center;justify-content:center;flex:none;
    color:#fff;position:relative;
    background:var(--carbon-alto);
    border:2px solid var(--queso);
    box-shadow:0 6px 20px rgba(0,0,0,.5);
    animation:fabFloat 3s ease-in-out infinite}
  .btn-queso svg{width:26px;height:26px}
  .btn-queso:active{transform:scale(.92)}
  .barra.on .in{position:relative;background:none}
  .barra.on .in::before{
    content:'';position:absolute;inset:0;border-radius:50%;
    animation:fabPulse 2.2s ease-out infinite;pointer-events:none}
  @keyframes fabFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
  @keyframes fabPulse{
    0%{box-shadow:0 0 0 0 rgba(255,195,0,.45)}
    70%{box-shadow:0 0 0 14px rgba(255,195,0,0)}
    100%{box-shadow:0 0 0 0 rgba(255,195,0,0)}}
  .barra .lbl{position:absolute;top:-4px;right:-4px;z-index:2;background:var(--brasa);color:#fff;
    min-width:21px;height:21px;border-radius:50%;font-size:.72rem;font-weight:800;
    display:none;align-items:center;justify-content:center;padding:0 4px;line-height:1;
    box-shadow:0 0 0 2px var(--carbon);font-family:'Inter',sans-serif}
  .barra .lbl.on{display:flex}
  .barra .lbl.bounce{animation:bounce .3s ease}
  .btn-txt{display:none !important}
  .btn-icon{display:block !important}
  html[data-tema="claro"] .btn-queso{color:#1C1917;border-color:#1C1917;background:#fff;box-shadow:0 6px 20px rgba(0,0,0,.2)}
  html[data-tema="claro"] .btn-queso svg{stroke:#1C1917}
  html[data-tema="claro"] #btnAddBurger{background:var(--queso)!important;color:#241F1D!important;border:none!important;box-shadow:0 4px 12px rgba(0,0,0,.3)!important}
  .ticket-btn .btn{width:100%!important;height:auto!important;border-radius:12px!important;padding:15px 14px!important;
    background:var(--queso)!important;color:#241F1D!important;border:none!important;
    display:block!important;flex:none!important;box-shadow:none!important;animation:none!important}
  #btnAddBurger{width:auto!important;height:auto!important;border-radius:12px!important;padding:12px 20px!important;
    display:inline-flex!important;flex:none!important;animation:none!important;box-shadow:0 4px 12px rgba(0,0,0,.3)!important}
  #btnAbrirMaps{
    width:auto;
    height:auto;
    border-radius:12px;
    padding:14px 18px;
    background:var(--queso);
    color:#1A1512;
    font-weight:700;
    display:block;
    text-decoration:none;
    margin-top:12px;
    border:none;
    box-shadow:0 4px 12px rgba(0,0,0,.3);
  }
  #btnLogin{width:100%!important;height:auto!important;border-radius:12px!important;padding:15px 14px!important;
    display:block!important;flex:none!important;animation:none!important}
}

/* ======================== HOJAS / MODALES ================================= */
/* z-index 300: por encima del panel de personal, que en pantalla ancha es
   una capa fija en 200. Estaban en 90 y quedaban sepultados detrás —
   se abría el detalle de un deudor y no se veía, o peor: se veía recién al
   salir del panel, ya sin sesión, diciendo "hay que estar conectado". */
.velo{position:fixed;inset:0;background:rgba(10,9,8,.78);z-index:300;display:none;
  align-items:flex-end;justify-content:center;backdrop-filter:blur(3px)}
.velo.on{display:flex}
.hoja{background:var(--carbon-alto);width:100%;max-width:520px;border-radius:20px 20px 0 0;
  padding:20px 16px calc(20px + env(safe-area-inset-bottom));max-height:90vh;overflow-y:auto;
  animation:subir .2s ease-out;border-top:3px solid var(--queso);position:relative}
@keyframes subir{from{transform:translateY(50px)}to{transform:translateY(0)}}
.hoja h3{font-family:'Anton',sans-serif;font-size:1.35rem;text-transform:uppercase;margin-bottom:3px}
.hoja .cerrar{position:absolute;right:16px;top:14px;font-size:1.5rem;color:var(--ceniza);padding:6px 10px}
/* Visor de imagen: a diferencia de las demás hojas (que suben desde abajo
   como una bandeja de opciones), esta centra la imagen y no tiene fondo
   propio — es un marco transparente, la protagonista es la foto. La X
   ahora se monta sobre la esquina superior derecha de la imagen misma
   (antes flotaba arriba, fuera del marco, y no se notaba tanto). */
.velo-imagen{align-items:center;padding:20px}
.hoja-imagen{background:transparent;border:0;padding:0;box-shadow:none;max-width:520px;
  animation:aparecerImg .16s ease-out;display:flex;flex-direction:column;gap:12px}
@keyframes aparecerImg{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
.hoja-imagen .marco-img{position:relative}
.hoja-imagen img{width:100%;max-height:78vh;object-fit:contain;border-radius:14px;
  display:block;background:var(--carbon-panel);cursor:pointer}
.hoja-imagen .cerrar{top:10px;right:10px;background:rgba(18,18,20,.75);border-radius:50%;
  width:34px;height:34px;display:grid;place-items:center;color:#fff;font-size:1.15rem}
.hoja-imagen #btnPedirYaPromo{width:100%;display:none}
.lista-mas-staff{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px}
.fila-mas-staff{display:flex;flex-direction:column;align-items:center;gap:6px;
  padding:16px 8px;border-radius:12px;background:var(--carbon-panel);border:1px solid var(--linea);
  color:var(--humo);font-size:.78rem;font-weight:700;position:relative}
.fila-mas-staff .ico{font-size:1.5rem}
.fila-mas-staff .globo{position:absolute;top:8px;right:10px;background:var(--brasa);color:#fff;
  font-size:.62rem;font-weight:800;border-radius:999px;min-width:16px;height:16px;
  padding:0 4px;display:grid;place-items:center;line-height:1}
.linea-item{display:flex;gap:10px;align-items:center;padding:11px 0;border-bottom:1px solid var(--linea);font-size:.87rem}
.linea-item .txt{flex:1;min-width:0}
.linea-item .txt small{display:block;color:var(--ceniza);font-size:.73rem}
.qty{display:flex;align-items:center;gap:10px}
.qty button{width:34px;height:34px;border-radius:50%;background:var(--carbon-panel);
  border:1px solid var(--linea);font-weight:700;font-size:1.15rem;line-height:1}
.qty span{min-width:20px;text-align:center;font-weight:700}
.campo{margin-top:14px}
.campo label{display:block;font-size:.75rem;color:var(--ceniza);text-transform:uppercase;
  letter-spacing:.07em;margin-bottom:6px;font-weight:600}
.campo input,.campo select{width:100%;padding:13px 12px;border-radius:11px;background:var(--carbon-panel);
  border:1px solid var(--linea);font-size:.95rem}
.radios{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px}
.radios label{display:flex;gap:9px;align-items:center;background:var(--carbon-panel);
  border:2px solid var(--linea);border-radius:12px;padding:13px;font-size:.87rem;cursor:pointer}
.radios label:has(input:checked){border-color:var(--queso);background:rgba(255,195,0,.1)}
.radios input{accent-color:var(--queso);width:18px;height:18px}
.total-hoja{display:flex;justify-content:space-between;align-items:baseline;margin:16px 0 2px}
.total-hoja .v{font-family:'Anton',sans-serif;font-size:1.8rem;color:var(--queso)}
.nota-envio{font-size:.77rem;color:var(--ceniza);margin-top:9px;line-height:1.45}

.ticket-ok{text-align:center;padding:8px 0 4px}
.ticket-ok .num{font-family:'Anton',sans-serif;font-size:4rem;color:var(--queso);line-height:1}
.ticket-ok .lbl{font-size:.78rem;color:var(--ceniza);text-transform:uppercase;letter-spacing:.12em}
.ticket-ok p{font-size:.88rem;color:var(--ceniza);margin-top:14px;line-height:1.5}
.ticket-btn{padding:16px 20px 20px}
.ticket-btn .btn{width:100%;padding:15px 14px}

/* ============================= PIE ======================================== */
footer{border-top:1px solid var(--linea);margin-top:auto;padding:24px 16px 32px;text-align:center;
  color:var(--ceniza);font-size:.77rem}
footer .llave{display:inline-block;margin-top:16px;width:28px;height:28px;border-radius:50%;
  border:1px solid var(--linea);color:#4A443F;font-size:.72rem;line-height:26px}
footer .llave:active{color:var(--queso);border-color:var(--queso)}
footer .ver{display:block;margin-top:10px;font-size:.66rem;color:#4A443F;letter-spacing:.1em}

/* Pie de todas las pestañas: consulta de pedido + crédito. Es un <div> y
   no un <footer> porque irSeccion() esconde el primer `footer` que
   encuentra (el de "Dónde estamos"). */
.pie-global{max-width:960px;margin:28px auto 0;padding:22px 16px 28px;border-top:1px solid var(--linea);
  display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;color:var(--ceniza)}
.pie-consulta{padding:11px 18px;border-radius:12px;font-size:.88rem;color:var(--humo)}
.credito-prisma{font-size:.75rem;color:var(--ceniza);text-decoration:none;letter-spacing:.02em;transition:opacity .15s}
.credito-prisma:hover{opacity:.75}
.credito-prisma b{font-weight:800}
.pc-prisma{color:#E0A23A}
.pc-cactus{color:#2FCB7E}
html[data-tema="claro"] .pc-prisma{color:#A86D10}
html[data-tema="claro"] .pc-cactus{color:#178A50}
/* En escritorio la barra del pedido es fija abajo y taparía el crédito. */
@media(min-width:761px){body:has(.barra.on) .pie-global{padding-bottom:100px}}

.ticket-btn .btn + .btn{margin-top:10px}

/* Resultado de "Consulta tu pedido" */
.res-consulta{margin-top:16px;background:var(--carbon-alto);border:1px solid var(--linea);
  border-radius:12px;padding:14px}
.rc-cab{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.rc-cab b{font-family:'Anton',sans-serif;font-size:1.5rem;color:var(--queso);line-height:1}
.rc-cab span{font-size:.78rem;color:var(--ceniza)}
.rc-estado{margin-top:12px;padding:10px 12px;border-radius:10px;font-weight:700;font-size:.92rem;
  border:1px solid currentColor}
.rc-estado.bien{color:var(--ok)}
.rc-estado.espera{color:var(--prep)}
.rc-estado.malo{color:var(--brasa)}
.rc-pasos{list-style:none;display:flex;margin:16px 0 4px;padding:0}
.rc-pasos li{flex:1;position:relative;text-align:center;font-size:.66rem;color:var(--ceniza);line-height:1.25}
.rc-pasos li::before{content:'';position:absolute;top:6px;left:-50%;width:100%;height:2px;background:var(--linea)}
.rc-pasos li:first-child::before{display:none}
.rc-pasos li.hecho::before,.rc-pasos li.ahora::before{background:var(--ok)}
.rc-pasos li i{position:relative;z-index:1;display:block;width:14px;height:14px;margin:0 auto 6px;
  border-radius:50%;background:var(--carbon-alto);border:2px solid var(--linea)}
.rc-pasos li.hecho i{background:var(--ok);border-color:var(--ok)}
.rc-pasos li.ahora i{background:var(--queso);border-color:var(--queso);box-shadow:0 0 0 4px rgba(255,195,0,.22)}
.rc-pasos li.ahora{color:var(--humo);font-weight:700}
.rc-items{list-style:none;margin:14px 0 0;padding:12px 0 0;border-top:1px dashed var(--linea);
  font-size:.86rem;line-height:1.55}
.rc-items span{color:var(--ceniza);font-size:.8rem}
.rc-tot{display:flex;justify-content:space-between;align-items:baseline;margin-top:10px;font-size:.86rem;color:var(--ceniza)}
.rc-tot b{font-family:'Anton',sans-serif;font-size:1.25rem;color:var(--queso);font-weight:400}
.rc-pie{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:12px;
  font-size:.72rem;color:var(--ceniza)}
.rc-pie .btn{padding:6px 12px;border-radius:9px;font-size:.78rem}
.rc-aviso{font-size:.86rem;line-height:1.5;color:var(--humo)}

/* En móvil `.btn-queso` se vuelve el botón redondo flotante del carrito y
   `.ticket-btn .btn` pinta de queso todo lo que haya en el ticket: se
   devuelven estos dos botones a su forma normal. */
@media(max-width:760px){
  #btnConsultarPedido{width:100%!important;height:auto!important;border-radius:12px!important;
    background:var(--queso)!important;color:#241F1D!important;border:none!important;
    display:block!important;animation:none!important;box-shadow:none!important}
  .ticket-btn .btn.btn-fantasma{background:transparent!important;color:var(--humo)!important;
    border:1.5px solid var(--linea)!important}
}

/* ═══════════════════════════ DEUDAS (fiados) ═══════════════════════════ */
.deu-fila{display:flex;align-items:center;gap:12px;background:var(--carbon-panel);
  border:1px solid var(--linea);border-radius:12px;padding:13px 14px;margin-bottom:9px;
  width:100%;text-align:left;transition:.13s}
.deu-fila:hover{border-color:var(--queso)}
.deu-fila .info{flex:1;min-width:0}
.deu-fila .nom{font-weight:700;font-size:.9rem;display:block}
.deu-fila .ced{font-size:.73rem;color:var(--ceniza);display:block;margin-top:2px}
.deu-fila .vis{font-size:.71rem;color:var(--queso);display:block;margin-top:2px;font-weight:600}
.deu-fila .monto{font-family:'Anton';font-size:1.15rem;text-align:right;flex:0 0 auto;line-height:1.1}
.deu-fila .monto small{display:block;font-family:'Inter';font-size:.68rem;font-weight:500;
  color:var(--ceniza);margin-top:2px}
.deu-fila .monto.debe{color:var(--brasa)}
.deu-fila .monto.alcorriente{color:var(--ok)}
.deu-fila .monto.afavor{color:var(--ruta)}
.deu-fila.archivado{opacity:.5}

.deu-saldo{background:var(--carbon-panel);border:1px solid var(--linea);border-radius:12px;
  padding:14px;text-align:center;margin-bottom:12px}
.deu-saldo .k{font-size:.72rem;color:var(--ceniza);text-transform:uppercase;letter-spacing:.08em;display:block}
.deu-saldo .v{font-family:'Anton';font-size:2.1rem;display:block;line-height:1.1;margin-top:3px}
.deu-saldo .bs{font-size:.76rem;color:var(--ceniza)}
.deu-saldo.debe .v{color:var(--brasa)}
.deu-saldo.alcorriente .v{color:var(--ok)}
.deu-saldo.afavor .v{color:var(--ruta)}

.deu-acciones{display:flex;gap:8px;margin-top:10px}
/* `hidden` es un atributo, y cualquier `display:` explícito le gana — por
   eso ocultar `.deu-acciones` (display:flex) con hidden no hacía nada. Esta
   regla lo restituye para todo el documento; es el default del navegador,
   solo que declarado con la fuerza suficiente para ganarle a las clases. */
[hidden]{display:none !important}

/* ---- Tandas de compra (pestaña Inventario) ---- */
/* La barra de tanda abierta va en amarillo: mientras esté ahí, cada carga
   se le suma, y eso tiene que verse sin buscarlo. */
.tanda-barra{display:flex;align-items:center;gap:10px;margin-bottom:10px;padding:11px 13px;
  border-radius:12px;background:rgba(240,180,41,.10);border:1px solid var(--queso)}
.tanda-barra .info{flex:1;min-width:0}
.tanda-barra .k{display:block;font-size:.63rem;text-transform:uppercase;letter-spacing:.07em;
  color:var(--queso);font-weight:700}
.tanda-barra .n{display:block;font-size:.88rem;font-weight:700;margin-top:1px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tanda-barra .d{display:block;font-size:.72rem;color:var(--ceniza);margin-top:1px}
.tanda-fila{display:flex;align-items:center;gap:12px;width:100%;text-align:left;
  background:var(--carbon-panel);border:1px solid var(--linea);border-radius:12px;
  padding:11px 13px;margin-bottom:8px;color:inherit;font-family:inherit;cursor:pointer}
.tanda-fila:hover{border-color:var(--queso)}
.tanda-fila.abierta{border-color:var(--queso);background:rgba(240,180,41,.06)}
.tanda-fila .info{flex:1;min-width:0}
.tanda-fila .nom{display:block;font-weight:700;font-size:.88rem}
.tanda-fila .sub2{display:block;font-size:.72rem;color:var(--ceniza);margin-top:2px}
.tanda-fila .monto{font-family:'Anton';font-size:1.1rem;flex:0 0 auto;color:var(--queso)}
.tanda-linea{display:flex;align-items:center;gap:10px;padding:9px 2px;
  border-bottom:1px solid var(--linea)}
.tanda-linea .txt{flex:1;min-width:0;font-size:.84rem;font-weight:600}
.tanda-linea .txt small{display:block;font-size:.71rem;font-weight:500;color:var(--ceniza);margin-top:2px}
.tanda-linea .mto{font-family:'Anton';font-size:1rem;color:var(--queso)}

/* ---- Cotizador (pestaña Administración) ---- */
/* Cuatro columnas: producto / precio / cantidad / subtotal. El nombre se
   lleva el espacio sobrante y los inputs quedan fijos, para que en un
   teléfono la fila no se parta. */
/* La columna de subtotal se lleva 86px: con 74 un total de cuatro cifras
   ($1.234,00) quedaba pegado al borde. */
.cot-cab,.cot-fila{display:grid;grid-template-columns:1fr 62px 62px 86px;gap:6px;align-items:center}
.cot-cab{font-size:.66rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ceniza);
  padding:0 2px 6px;border-bottom:1px solid var(--linea);margin-bottom:4px}
.cot-cab span:not(:first-child){text-align:right}
.cot-fila{padding:7px 2px;border-bottom:1px solid var(--linea)}
.cot-fila .n{font-size:.82rem;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis}
.cot-fila .n small{display:block;font-size:.68rem;font-weight:500;color:var(--ceniza)}
.cot-fila .sub{font-family:'Anton';font-size:.95rem;text-align:right;color:var(--ceniza)}
.cot-fila.activa{background:rgba(240,180,41,.06)}
.cot-fila.activa .sub{color:var(--queso)}
/* Sin precio de venta no se puede cotizar: se marca el campo, no toda la
   fila, porque es ese dato el que falta. */
.cot-fila.sin-precio input[data-cot-precio]{border-color:var(--brasa)}
.cot-in{width:100%;padding:7px 6px;border-radius:8px;background:var(--carbon-panel);
  border:1px solid var(--linea);color:var(--humo);font-family:inherit;font-size:.8rem;
  text-align:right;-moz-appearance:textfield}
.cot-in::-webkit-outer-spin-button,.cot-in::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.cot-in:focus{outline:none;border-color:var(--queso)}
.cot-total{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:14px;
  padding:12px 14px;border-radius:12px;background:var(--carbon-panel);border:1px solid var(--linea)}
.cot-total .k{font-size:.74rem;color:var(--ceniza);flex:1}
.cot-total .v{font-family:'Anton';font-size:1.7rem;color:var(--queso);line-height:1}
.cot-total .bs{font-size:.76rem;color:var(--ceniza);width:100%;text-align:right}
/* Marca "sin fiado" en la lista de clientes: quien solo pasó por caja y
   dejó su cédula, sin cuenta abierta. */
.deu-fila .nom .sin-fiado{font-family:'Inter';font-size:.63rem;font-weight:600;
  text-transform:uppercase;letter-spacing:.06em;color:var(--ceniza);
  border:1px solid var(--linea);border-radius:6px;padding:1px 5px;margin-left:6px;
  vertical-align:middle}
.deu-acciones .btn{flex:1;padding:12px}

.deu-mov{display:flex;align-items:center;gap:11px;padding:10px 0;
  border-bottom:1px solid var(--linea);font-size:.83rem}
.deu-mov:last-child{border-bottom:0}
.deu-mov .tipo{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  font-size:.9rem;font-weight:700;flex:0 0 auto}
.deu-mov .tipo.consumo{background:rgba(217,72,31,.18);color:var(--brasa)}
.deu-mov .tipo.abono{background:rgba(63,169,106,.18);color:var(--ok)}
.deu-mov .txt{flex:1;min-width:0}
.deu-mov .txt small{display:block;color:var(--ceniza);font-size:.72rem}
.deu-mov .mto{font-family:'Space Grotesk';font-weight:700;white-space:nowrap}
.deu-mov .anular{border:1px solid var(--linea);color:var(--ceniza);border-radius:8px;
  padding:5px 9px;font-size:.7rem;flex:0 0 auto}
.deu-mov.anulado{opacity:.45}
.deu-mov.anulado .mto{text-decoration:line-through}

/* ========================== MODO PERSONAL =================================
   El panel es una CAPA FIJA encima de todo, en cualquier tamaño de
   pantalla — antes esto solo pasaba en computadora (≥1100px); en
   teléfono el panel se insertaba como bloque normal dentro de la página,
   así que si el mesero venía con el scroll bajado navegando el menú,
   el panel podía aparecer a medias, fuera de la primera vista. Como capa
   fija, el panel ocupa la pantalla desde el primer instante siempre,
   sin depender de dónde estuviera el scroll antes de entrar. */
#comandas{display:none}
body.staff #vitrina{display:none}
body.staff #comandas{
  display:flex;flex-direction:column;
  position:fixed;inset:0;z-index:200;height:100vh;height:100dvh;overflow:hidden;
  background:var(--carbon);
  animation:subirPanel .3s cubic-bezier(.22,.9,.3,1)}
@keyframes subirPanel{from{transform:translateY(100%)}to{transform:translateY(0)}}
/* El menú del cliente queda debajo de la capa, sin tocarlo. Se bloquea
   su scroll mientras el panel está abierto para que la rueda/dedo mueva
   el contenido del panel y no la página de atrás. */
body.staff{overflow:hidden}

/* ══════════════════════════════ PANEL EN PANTALLA ANCHA ═══════════════════
   "Nuevo pedido" es una pestaña más, no una pantalla aparte — antes vivía
   separada (con su propio sidebar, su propia entrada y salida, su propio
   botón de volver) y eso era más código y más formas de que algo quedara
   desincronizado. Ahora todo el panel se comporta igual: en pantalla ancha,
   las pestañas de siempre (.tabs) se acomodan como sidebar a la izquierda
   — CSS puro, sin marcado nuevo — y la que se llama "Nuevo pedido" es la
   única que además reserva una columna a la derecha para el carrito,
   porque es la única pestaña donde eso tiene sentido.
   El carrito de esa columna NO es un componente nuevo: pinta sobre el
   mismo array `carrito` y las mismas funciones `agregar()` /
   `pintarCarrito()` que usa el cliente. Cambia la piel, no la lógica.

   IMPORTANTE sobre el orden: esta regla tiene que vivir DESPUÉS de
   "body.staff #comandas{display:block}" de arriba. Ambas apuntan al mismo
   selector con la misma especificidad — cuando hay empate, CSS le da la
   razón a la que aparece más abajo en el archivo. Si este bloque quedara
   antes, la regla de arriba ganaría siempre y el sidebar nunca se vería,
   aunque la pantalla fuera ancha. Ya me pasó una vez armando esto: quedó
   la nota para no repetirlo. */
.staff-body{display:contents}
/* En teléfono, "Nuevo pedido" no se muestra como pestaña: ese flujo ya
   tiene su camino propio ahí (el botón "+ Tomar pedido en el mostrador"
   lleva a la vista del cliente con "Mandar a cocina", que está pensada
   para pantalla angosta). Tener las dos cosas solo confunde.
   La fila de pestañas de siempre (.tabs) tampoco se muestra en teléfono:
   son demasiadas para cualquier fila horizontal, cómoda o no — por eso
   existe .tabbar-m-staff más abajo, la versión de solo 5 casillas fijas
   con las herramientas de uso diario, más un "Más" para las demás.
   ESTA REGLA SE MOVIÓ más abajo, justo después de ".tabs{display:flex...}"
   — vivía aquí antes y esa declaración sin media query, al aparecer
   DESPUÉS en el archivo, le ganaba el empate de especificidad y la
   barra vieja volvía a aparecer en el teléfono. Iba a pasar de nuevo si
   alguien reordenaba el CSS sin saber esto, así que quedó la nota. */
.pos-topbar{display:flex;align-items:center;padding:0 0 14px}
.pos-search{flex:1;max-width:340px;background:var(--carbon-alto);border:1px solid var(--linea);
  border-radius:10px;padding:9px 14px;font-size:.85rem;color:var(--humo)}
/* En teléfono se apila (menú arriba, carrito abajo). Las dos columnas solo
   existen en pantalla ancha — ver el @media de más arriba. Este era el bug
   del desastre en el teléfono: tenía display:flex sin condición de ancho,
   así que el menú y el carrito quedaban uno encima del otro. */
.pos-content{display:block}
.pos-menu-area{min-width:0}
.pos-cat-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.pos-cat-tab{padding:8px 17px;border-radius:999px;border:1px solid var(--linea);background:var(--carbon-alto);
  color:var(--ceniza);font-size:.8rem;font-weight:600;transition:.14s}
.pos-cat-tab:hover{border-color:var(--queso);color:var(--humo)}
.pos-cat-tab.on{background:var(--queso);color:#1A1512;border-color:var(--queso)}
/* Tarjeta de producto: foto arriba-izquierda, datos arriba-derecha, y los
   controles (+ / −) abajo ocupando el ancho. Antes todo iba centrado en
   una columna y el + quedaba flotando en una esquina, sin relación clara
   con el resto — de ahí la sensación de desorden. Ahora cada zona tiene
   su sitio fijo y la tarjeta se lee igual siempre, tenga foto o no. */
.pos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.pos-card{background:var(--carbon-alto);border:1.5px solid var(--linea);border-radius:14px;
  padding:12px;transition:.13s;position:relative;overflow:hidden;
  display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;
  gap:10px;align-items:center;text-align:left}
.pos-card:hover{border-color:var(--queso);transform:translateY(-2px);box-shadow:0 6px 20px rgba(255,195,0,.15)}
.pos-card .foto-hueco{width:58px;height:58px;border-radius:10px;background:var(--carbon);
  display:grid;place-items:center;color:#4A443F;font-size:1.3rem;flex:0 0 auto}
.pos-card img{width:58px;height:58px;object-fit:cover;border-radius:10px;display:block}
.pos-card .datos{min-width:0}
.pos-card .n{font-family:'Anton';font-size:.92rem;text-transform:uppercase;line-height:1.15;
  display:block;overflow-wrap:anywhere}
.pos-card .p{font-family:'Anton';font-size:1.1rem;color:var(--queso);display:block;margin-top:3px}
.pos-card .ctrl-pos{grid-column:1/-1;display:flex;align-items:center;gap:8px;
  border-top:1px solid var(--linea);padding-top:9px;margin-top:2px}
.pos-card .ctrl-pos button{width:36px;height:36px;border-radius:9px;font-size:1.25rem;
  font-weight:700;line-height:1;display:grid;place-items:center;flex:0 0 auto}
.pos-card .ctrl-pos .menos{background:var(--carbon);border:1.5px solid var(--linea);color:var(--humo)}
.pos-card .ctrl-pos .mas{background:var(--queso);color:#1A1512;margin-left:auto}
.pos-card .ctrl-pos .q{font-family:'Anton';font-size:1.1rem;color:var(--queso);min-width:22px;text-align:center}
.pos-card.puesto{border-color:var(--queso)}
.pos-card.agotado{opacity:.4;pointer-events:none}
.pos-card .cinta-pos{position:absolute;top:8px;right:-22px;transform:rotate(38deg);background:var(--brasa);
  color:#fff;font-size:.55rem;font-weight:800;letter-spacing:.06em;padding:2px 26px}

.pos-cart{width:100%;background:var(--carbon-alto);border:1px solid var(--linea);border-radius:14px;
  display:flex;flex-direction:column;flex:0 0 auto}
.pos-cart-header{padding:16px 18px;border-bottom:1px solid var(--linea)}
.pos-cart-header h3{font-family:'Anton';font-size:1rem;text-transform:uppercase}
.pos-cart-header small{color:var(--ceniza);font-size:.74rem}
.pos-cart-items{padding:8px 18px;max-height:40vh;overflow-y:auto}
.pos-cart-footer{padding:14px 18px 18px;border-top:1px solid var(--linea)}
.pos-canal-mini{display:flex;gap:6px;margin-bottom:10px}
.pos-canal-mini button,.pos-pago-mini button{flex:1;padding:8px;border-radius:9px;border:1.5px solid var(--linea);
  background:var(--carbon);color:var(--ceniza);font-size:.72rem;font-weight:700}
.pos-canal-mini button.on,.pos-pago-mini button.on{border-color:var(--queso);background:rgba(255,195,0,.1);color:var(--queso)}
.pos-pago-mini{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:10px}
.pos-cart input{width:100%;padding:9px 11px;border-radius:9px;background:var(--carbon);
  border:1px solid var(--linea);font-size:.82rem;margin-bottom:8px;color:var(--humo)}
.pos-cart select{width:100%;padding:9px 11px;border-radius:9px;background:var(--carbon);
  border:1px solid var(--queso);font-size:.82rem;margin-bottom:8px;color:var(--humo)}
.pos-cart input[type=checkbox]{width:auto;margin-bottom:0}

/* ─────────────── Censo de clientes (aviso de cédula en POS) ─────────────── */
.pos-cliente-aviso{display:block;font-size:.74rem;margin:-4px 0 8px;min-height:1em}
.pos-cliente-aviso.ok{color:var(--ok)}
.pos-cliente-aviso.nuevo{color:var(--queso)}
.pos-cliente-aviso.hint{color:var(--ceniza)}

/* Tarjeta de cliente: un solo recuadro con todo lo de UNA persona, con una
   etiqueta de estado a la vista (sin datos / nuevo / guardado / editado). */
.pos-cliente{border:1px solid var(--linea);border-radius:12px;padding:10px 12px 4px;margin:0 0 10px;
  background:rgba(255,255,255,.02)}
.pos-cliente-cab{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.pos-cliente-cab h4{font-family:'Anton';font-size:.9rem;text-transform:uppercase;letter-spacing:.04em;margin:0;flex:1}
.pos-cliente-chip{font-size:.66rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;
  padding:3px 9px;border-radius:99px;border:1px solid var(--linea);color:var(--ceniza)}
.pos-cliente-chip[data-estado=nuevo]{color:var(--queso);border-color:var(--queso);background:rgba(255,195,0,.1)}
.pos-cliente-chip[data-estado=encontrado]{color:var(--ok);border-color:var(--ok);background:rgba(60,200,120,.1)}
.pos-cliente-chip[data-estado=editado]{color:var(--brasa);border-color:var(--brasa);background:rgba(255,90,40,.1)}
.pos-cliente-chip[data-estado=buscando]{color:var(--humo);border-style:dashed}
.pos-cliente-campo{display:block;font-size:.68rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ceniza);margin-bottom:0}
.pos-cliente-campo input{margin-top:3px;text-transform:none;letter-spacing:0;font-weight:400}
/* Confirmar: guarda al cliente ya. Activo = amarillo queso (hay algo por guardar);
   apagado = discreto; "✓ Datos guardados" = verde. Clase propia: no usar .btn-queso
   (en móvil es la bolita flotante). */
.pos-cliente-confirmar{display:block;width:100%;margin:2px 0 8px;padding:10px 12px;border-radius:10px;
  border:none;background:var(--queso);color:#241F1D;font-weight:800;font-size:.82rem;cursor:pointer;transition:.15s}
.pos-cliente-confirmar:hover:not(:disabled){background:var(--queso-hi)}
.pos-cliente-confirmar:active:not(:disabled){transform:scale(.98)}
.pos-cliente-confirmar:disabled{background:transparent;border:1px solid var(--linea);color:var(--ceniza);cursor:default}
.pos-cliente-confirmar.listo:disabled{color:var(--ok);border-color:var(--ok);background:rgba(60,200,120,.08)}

/* Selector de fiadores guardados (aparece al marcar "Queda fiado"). */
.pos-fiado{margin:0 0 10px}
.pos-fiado[hidden]{display:none}
.pos-fiado label{display:block;font-size:.68rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ceniza);margin-bottom:4px}
.pos-fiado select{margin-bottom:4px}

/* ─────────────── Notas de cocina (checklist compacto en el POS) ─────────── */
#posNotasCocina.radios{grid-template-columns:1fr 1fr;gap:6px;margin-bottom:0}
#posNotasCocina.radios label{padding:8px 9px;font-size:.74rem;background:var(--carbon)}
.pos-total-fila{display:flex;justify-content:space-between;align-items:baseline;margin:10px 0}
.pos-total-fila .v{font-family:'Anton';font-size:1.6rem;color:var(--queso)}

/* ── Pantalla ancha: el panel se vuelve sidebar + contenido ──
   Este bloque va AL FINAL de todas las reglas .pos-* y .staff-* de arriba,
   a propósito. Comparte selectores con ellas y la misma especificidad;
   cuando hay empate, CSS le da la razón a la que aparece más abajo. Si
   estuviera antes, las reglas base de teléfono lo pisarían y en
   computadora no se vería ni el sidebar ni el carrito al lado. */
@media(min-width:1100px){
  .staff-bar{flex:0 0 auto}
  .staff-body{display:flex;flex:1;min-height:0;overflow:hidden}
  .tabs{display:flex;flex:0 0 216px;flex-direction:column;align-items:stretch;gap:2px;padding:14px 10px;
    overflow-y:auto;border-right:1px solid var(--linea);border-bottom:0}
  .tab{justify-content:flex-start;padding:11px 12px;border-radius:10px}
  .staff-main{flex:1;min-width:0;overflow-y:auto;padding:22px 26px}
  .pos-content{display:flex;gap:18px;align-items:flex-start}
  .pos-menu-area{flex:1;min-width:0}
  .pos-cart{width:340px;flex:0 0 auto;margin-top:0;position:sticky;top:0}
}

.staff-bar{position:sticky;top:0;z-index:70;background:#16130F;border-bottom:2px solid var(--queso);
  padding:9px 14px 10px}
/* Dos filas a propósito, no un flex-wrap librado al azar: la fila 1 es
   identidad + salir, siempre en su sitio; la fila 2 es estado (conexión,
   rol, tasa), que puede envolver sin que nada "se caiga" solo — antes
   todo vivía en una sola fila y en pantalla angosta el botón Salir
   terminaba huérfano en su propia línea, sin ningún orden intencional. */
.staff-fila1{display:flex;align-items:center;gap:10px}
.staff-fila2{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:7px}
.staff-bar .id{font-family:'Space Grotesk';font-weight:700;font-size:.8rem;color:var(--queso)}
.staff-bar .salir{margin-left:auto;font-size:.76rem;color:var(--ceniza);border:1px solid var(--linea);
  border-radius:9px;padding:7px 12px;flex:0 0 auto}
/* Antes esto era una pastilla con texto ("EN VIVO" / "SIN CONEXIÓN"),
   que ocupaba espacio real en una fila ya apretada (rol, tasa, salir).
   El estado real que hace falta ver de un vistazo es uno solo — ¿hay
   conexión o no? — así que ahora es solo un punto de color. El texto no
   desaparece, se mueve a title/aria-label para quien lo necesite. */
.conexion{width:11px;height:11px;border-radius:50%;flex:0 0 auto;padding:0}
.conexion.viva{background:var(--ok);box-shadow:0 0 0 3px rgba(63,169,106,.22)}
.conexion.muerta{background:var(--brasa);box-shadow:0 0 0 3px rgba(217,72,31,.22)}
.tasa-bar{font-family:'Space Grotesk';font-weight:700;font-size:.71rem;color:var(--ceniza);
  border:1px solid var(--linea);border-radius:999px;padding:3px 10px;white-space:nowrap}
.tasa-bar.vieja{color:var(--brasa);border-color:rgba(217,72,31,.5)}
/* Antes había aquí una declaración de .tabs sin media query (display:flex
   en fila horizontal). Ya no hace falta: en teléfono .tabs se esconde
   del todo (más abajo) y en pantalla ancha usa el sidebar de arriba
   (@media min-width:1100px). Esa declaración de más, al aparecer DESPUÉS
   en el archivo que ambas reglas condicionales, les ganaba el empate de
   especificidad en las dos — por eso la barra vieja de 12 pestañas
   reaparecía en el teléfono aunque hubiera una regla diciendo que no. */
.tab{padding:11px 15px;border-radius:11px 11px 0 0;background:var(--carbon-alto);color:var(--ceniza);
  font-family:'Space Grotesk';font-weight:700;font-size:.82rem;white-space:nowrap;
  display:flex;align-items:center}
/* Ancho fijo, no `margin-right` suelto: los emojis miden distinto entre sí
   (💰 vs 🧾 vs 🏷️), y sin una columna del mismo ancho para todos, cada
   fila arrancaba el texto en una posición distinta — se veía "desalineado"
   aunque cada ícono individualmente estuviera bien puesto. */
.tab .ico{flex:0 0 22px;display:inline-flex;justify-content:center;font-size:.98rem}
.tab.on{background:var(--queso);color:#1A1512}
.tab .n{background:rgba(0,0,0,.24);border-radius:9px;padding:1px 7px;font-size:.72rem;margin-left:6px}
.tab .n.alerta{background:var(--brasa);color:#fff}
/* Sin `padding` acá a propósito. Esta regla queda entre los dos @media
   (min-width:1100 arriba, max-width:1099 abajo) y un @media no suma
   especificidad, así que cualquier padding declarado aquí le ganaba el
   empate al del bloque de escritorio y le perdía al de teléfono — el
   mismo valor se comportaba distinto según el ancho. Cada @media declara
   el suyo y entre los dos cubren todo el rango. */
.staff-main{max-width:960px;margin:0 auto}
@media(max-width:1099px){
  .tab[data-v="pedido"]{display:none}
  .tabs{display:none}
  /* #comandas es una capa fija de altura 100dvh con overflow:hidden, y
     .staff-body{display:contents} hace que .staff-bar y .staff-main sean
     sus hijos flex directos. Sin estas dos líneas, .staff-main no tiene
     scroll propio: hereda la altura del contenido, el contenedor la
     recorta y las pestañas largas (Precios, Fotos, Agotados) quedan
     cortadas sin forma de bajar. En ≥1100px ya existía el equivalente
     dentro de su @media; en teléfono faltaba.
     `min-height:0` es imprescindible: sin él, un flex item nunca se
     encoge por debajo de su contenido y overflow-y:auto no llega a
     activarse nunca. */
  .staff-bar{flex:0 0 auto}
  .staff-main{flex:1 1 auto;min-height:0;overflow-y:auto;
    -webkit-overflow-scrolling:touch;overscroll-behavior:contain;
    padding:15px 15px calc(78px + env(safe-area-inset-bottom))}
}
.vista{display:none}.vista.on{display:block}
.staff-main h4{font-family:'Space Grotesk';font-size:.82rem;color:var(--ceniza);text-transform:uppercase;
  letter-spacing:.09em;margin:20px 0 10px}
.staff-main h4:first-child{margin-top:0}

.roles{display:flex;gap:6px;margin-bottom:16px}
.rol{flex:1;padding:12px 8px;border-radius:11px;background:var(--carbon-alto);color:var(--ceniza);
  font-family:'Space Grotesk';font-weight:700;font-size:.8rem;border:1px solid var(--linea)}
.rol.on{background:var(--queso);color:#1A1512;border-color:var(--queso)}
.rol .n{background:rgba(0,0,0,.2);border-radius:9px;padding:1px 7px;font-size:.72rem;margin-left:5px}

.tickets{display:grid;grid-template-columns:repeat(auto-fill,minmax(252px,1fr));gap:11px;align-items:start}
.ticket{background:var(--carbon-panel);border:1px solid var(--linea);border-left:5px solid var(--ceniza);
  border-radius:12px;padding:13px}
.ticket.pendiente{border-left-color:var(--caja)}
.ticket.recibido{border-left-color:var(--brasa)}
.ticket.preparando{border-left-color:var(--prep)}
.ticket.listo{border-left-color:var(--ok)}
.ticket.ruta{border-left-color:var(--ruta)}
.ticket.cerrado{opacity:.55}
.t-cab{display:flex;justify-content:space-between;align-items:center;font-family:'Space Grotesk';
  font-weight:700;font-size:.9rem}
.t-cab .id{font-family:'Anton';font-size:1.3rem;color:var(--queso)}
@keyframes pulseCanal{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}

.t-pago{display:block;color:#f2f0eb;font-size:.85rem;font-weight:600;margin:6px 0}

.t-canal{display:inline-block;font-size:.9rem;font-weight:800;padding:8px 16px;
  border-radius:20px;margin:6px 0 10px;
  animation:pulseCanal 1.6s ease-in-out infinite}

.t-canal.canal-recogida{background:#ffcf82;color:#3d2400}
.t-canal.canal-delivery{background:#5ba8f0;color:#042C53}

.t-min{font-family:'Space Grotesk';font-size:.79rem;color:var(--ceniza);background:var(--carbon-alto);
  border-radius:8px;padding:3px 9px}
.t-min.tarde{background:var(--brasa);color:#fff}
/* ── Chequeo rápido + ítems que no se pueden pasar por alto ──────────────
   Antes, un adicional viajaba como <small> gris de .73rem debajo del
   nombre del plato: en una pantalla con 6-8 comandas a la vez, un vistazo
   rápido lo salta. Ahora hay dos redes: un resumen arriba de la comanda
   (`.t-chequeo`) que se ve ANTES de leer renglón por renglón, y la línea
   del propio ítem con su propio marco (`.t-item-mod`) para cuando sí se
   está leyendo renglón por renglón. */
.t-chequeo{display:flex;flex-direction:column;gap:5px;margin-bottom:8px}
.t-chk{display:block;font-size:.78rem;font-weight:800;padding:5px 10px;border-radius:8px;
  letter-spacing:.01em}
.t-chk-mod{background:rgba(224,160,42,.18);color:var(--prep);border:1px solid rgba(224,160,42,.4)}
.t-chk-bebida{background:rgba(74,144,217,.18);color:var(--ruta);border:1px solid rgba(74,144,217,.4)}
.t-items{margin:10px 0;font-size:1rem}
.t-items>.t-item{padding:2px 0;font-weight:600}
.t-item-n{display:block}
.t-mini-bebida{font-size:.85em}
.t-item-mod{background:rgba(224,160,42,.12);border:1px solid rgba(224,160,42,.45);
  border-radius:8px;padding:5px 8px;margin:3px 0}
.t-item-det{display:block;color:var(--prep);font-size:.78rem;font-weight:800;margin-top:2px}
.t-items small{display:block;color:var(--prep);font-size:.73rem}
.t-total{font-family:'Space Grotesk';font-weight:700;font-size:1.15rem;
  color:var(--queso);margin-bottom:10px}
/* ── Acciones del ticket ───────────────────────────────────────────────
   Envuelve a propósito. La fila nació con 2 botones y hoy tiene 5
   (avanzar + 🖨 + 🧾 + ✎ + ✕); en una tarjeta de 252 px del grid del rack
   quedan ~226 px útiles y los de icono estaban en `flex:0 0 auto`, o sea
   irreducibles: la suma se salía de la tarjeta. Eso fue lo que se vio al
   sumar ✎, pero el bloque "Cerradas hoy" ya desbordaba antes con
   "🖨 Reimprimir" + "🧾 Comprobante".

   Contrato: la acción de estado manda la primera línea; los botones de
   icono viven dentro de `.t-acc-icos` y bajan juntos a la segunda,
   repartidos en partes iguales. Un botón nuevo (p. ej. "Cobrar") va
   DENTRO de `.t-acc-icos` si es de icono, o suelto si es de estado —
   suelto y de icono es lo que rompe esto. */
.t-acc{display:flex;flex-wrap:wrap;gap:6px}
.t-acc>button{flex:1 1 90px;min-width:0;padding:11px 10px;border-radius:10px;
  font-size:.78rem;font-weight:700;font-family:'Space Grotesk';line-height:1.15}
.t-acc-icos{display:flex;gap:6px;flex:1 1 100%}
.t-acc-icos>button{flex:1 1 0;min-width:0;padding:11px 6px;border-radius:10px;
  font-size:.78rem;font-weight:700;font-family:'Space Grotesk';line-height:1.15;
  white-space:nowrap}
.b-avanzar{background:var(--queso);color:#1A1512}
.b-ruta{background:var(--ruta);color:#fff}
.b-cerrar{background:var(--ok);color:#fff}
.b-aceptar{background:var(--ok);color:#fff}
.b-rechazar{background:transparent;border:1px solid var(--brasa);color:var(--brasa)}
/* Sin `flex:0 0 auto!important`: era lo que impedía que la fila se
   acomodara. El ancho ahora lo reparte `.t-acc-icos`. */
.b-anular{background:transparent;border:1px solid var(--linea);color:var(--ceniza)}
.vacio{text-align:center;color:var(--ceniza);padding:40px 20px;font-size:.88rem;
  border:1px dashed var(--linea);border-radius:14px;background:var(--carbon-panel)}
.vacio-icono{font-size:3rem;display:block;margin-bottom:14px;animation:vacioFlota 2.5s ease-in-out infinite}
@keyframes vacioFlota{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
.vacio h3{font-family:'Anton',sans-serif;font-size:1.2rem;text-transform:uppercase;color:var(--humo);margin-bottom:6px}
.vacio p{color:var(--ceniza)}

.grid-mesas{display:grid;gap:6px;margin-top:12px}
.mesa{aspect-ratio:1;border-radius:10px;background:var(--carbon-alto);border:1px solid var(--linea);
  display:grid;place-items:center;font-family:'Space Grotesk';font-weight:700;font-size:.76rem;color:#5D564F}
.mesa.ocupada{background:rgba(224,160,42,.16);border-color:var(--prep);color:var(--prep)}
.mesa.lista{background:rgba(63,169,106,.18);border-color:var(--ok);color:var(--ok)}
.mesa.fuera{background:transparent;border-style:dashed;color:#3E3934;text-decoration:line-through}
.cfg-grid{display:flex;gap:10px;align-items:end;margin-top:14px}
.cfg-grid .campo{flex:1;margin:0}

.fila-cfg{display:flex;gap:11px;align-items:center;padding:9px 0;border-bottom:1px solid var(--linea)}
.fila-cfg.con-desc{flex-direction:column;align-items:stretch;gap:7px;padding:11px 0}
.fila-cfg-top{display:flex;gap:11px;align-items:center}
.desc-ing{width:100%;padding:9px 10px;border-radius:9px;background:var(--carbon);
  border:1px solid var(--linea);color:var(--humo);font-family:inherit;font-size:.78rem;
  line-height:1.4;resize:vertical}
.desc-ing.tocado{border-color:var(--queso);color:var(--queso)}
.fila-cfg .nm{flex:1;font-size:.85rem;min-width:0}
.fila-cfg .nm-in{flex:1;min-width:0;padding:9px 10px;border-radius:10px;background:var(--carbon-alto);
  border:1px solid var(--linea);color:var(--humo);font-family:inherit;font-size:.85rem}
.fila-cfg .nm-in:focus{outline:none;border-color:var(--queso)}
.fila-cfg input[type=number]{width:92px;padding:9px;border-radius:10px;text-align:right;
  background:var(--carbon-alto);border:1px solid var(--linea);font-family:'Space Grotesk';
  font-weight:700;font-size:.86rem}
.fila-cfg input.tocado{border-color:var(--queso);color:var(--queso)}
.fila-cfg input.max{width:56px}
.fila-cfg input.max:disabled{opacity:.35}
.cab-max{display:flex;gap:11px;align-items:center;padding:0 0 6px;font-size:.68rem;
  color:#5D564F;text-transform:uppercase;letter-spacing:.08em}
.cab-max span:first-child{flex:1}
.cab-max span:nth-child(2){width:92px;text-align:right}
.cab-max span:last-child{width:56px;text-align:right}
.sw{position:relative;width:50px;height:29px;flex:0 0 auto}
.sw input{opacity:0;width:100%;height:100%;margin:0;cursor:pointer;position:relative;z-index:2}
.sw .pista{position:absolute;inset:0;border-radius:999px;background:var(--brasa);transition:.18s}
.sw .bolita{position:absolute;top:3px;left:3px;width:23px;height:23px;border-radius:50%;
  background:#fff;transition:.18s}
.sw input:checked ~ .pista{background:var(--ok)}
.sw input:checked ~ .bolita{transform:translateX(21px)}
.fila-cfg.off .nm{color:#5D564F;text-decoration:line-through}

/* Inventario: acciones chicas por fila (Editar / + Cargar / Archivar) y el
   estado de alerta en el badge del tab cuando algo está bajo de cobertura. */
.ins-acciones{display:flex;gap:8px;flex-wrap:wrap}
/* Ultima carga bajo el nombre del insumo: es dato de consulta, no accion,
   asi que pesa menos que el stock y no compite con los botones. */
.ins-ult-carga{display:block;font-size:.72rem;font-weight:500;color:var(--ceniza);
  margin:2px 0 8px;line-height:1.4}
/* Una linea de carga se puede tocar para corregirla; la seleccionada se
   queda marcada mientras el formulario de abajo la esta editando. */
.carga-linea{cursor:pointer;border-radius:10px;padding-left:8px;padding-right:8px;
  transition:background .15s}
.carga-linea:hover,.carga-linea:focus-visible{background:rgba(255,255,255,.05)}
.carga-linea.sel{background:rgba(243,176,28,.13);box-shadow:inset 0 0 0 1px rgba(243,176,28,.35)}
/* El unitario en vivo no es una alerta: es la cifra que se esta mirando
   mientras se teclea, asi que va en el amarillo de la casa y no en rojo. */
.carga-unit{display:none;margin-top:4px;padding:8px 10px;border-radius:10px;
  font-size:.78rem;color:var(--humo);background:rgba(243,176,28,.10);
  box-shadow:inset 0 0 0 1px rgba(243,176,28,.28)}
.carga-unit b{color:var(--queso)}
.btn-anular{color:var(--brasa);border-color:rgba(217,72,31,.4)}
.btn-anular:hover{background:rgba(217,72,31,.11)}
.btn-peq{background:var(--carbon-alto);color:var(--humo);border:1px solid var(--linea);
  border-radius:9px;padding:7px 11px;font-family:'Space Grotesk';font-weight:700;
  font-size:.74rem;cursor:pointer}
.btn-peq:hover{border-color:var(--queso)}
.btn-peq.peligro{color:var(--brasa);border-color:rgba(217,72,31,.4)}
.btn-peq.peligro:hover{background:rgba(217,72,31,.11)}
.fila-cfg .nm small .alerta{color:var(--brasa);font-weight:700}

/* Plegables. En el panel del personal hay listas de 50 filas: verlas todas
   a la vez no es información, es un muro. */
.pleg{border:1px solid var(--linea);border-radius:12px;margin-bottom:8px;overflow:hidden;
  background:var(--carbon-panel)}
.pleg > summary{list-style:none;cursor:pointer;padding:13px 14px;display:flex;align-items:center;
  gap:9px;font-family:'Space Grotesk';font-weight:700;font-size:.83rem;color:var(--humo)}
.pleg > summary::-webkit-details-marker{display:none}
.pleg > summary::before{content:'▸';color:var(--queso);font-size:.9rem;transition:transform .15s;flex:0 0 auto}
.pleg[open] > summary::before{transform:rotate(90deg)}
.pleg > summary .ins{margin-left:auto;background:var(--carbon-alto);border-radius:9px;
  padding:2px 9px;font-size:.72rem;color:var(--ceniza)}
.pleg > summary .ins.alerta{background:var(--brasa);color:#fff}
.pleg-cuerpo{padding:0 14px 14px}
.pleg-cuerpo .fila-cfg:first-child{border-top:1px solid var(--linea);padding-top:11px}

.aviso{background:rgba(217,72,31,.11);border:1px solid rgba(217,72,31,.38);border-radius:12px;
  padding:12px;font-size:.79rem;line-height:1.5;margin-bottom:14px}
.aviso b{color:var(--brasa)}
.aviso.ok{background:rgba(63,169,106,.1);border-color:rgba(63,169,106,.35)}
.aviso.ok b{color:var(--ok)}

.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(142px,1fr));gap:10px}
.kpi{background:var(--carbon-panel);border:1px solid var(--linea);border-radius:12px;padding:15px}
.kpi .v{font-family:'Space Grotesk';font-weight:700;font-size:1.75rem;color:var(--queso);line-height:1}
.kpi .k{font-size:.72rem;color:var(--ceniza);text-transform:uppercase;letter-spacing:.07em;margin-top:6px}
.rank div{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--linea);font-size:.84rem}

details.plegable{border:1px solid var(--linea);border-radius:12px;margin-bottom:8px;
  background:var(--carbon-panel);overflow:hidden}
details.plegable > summary{padding:13px 14px;cursor:pointer;list-style:none;display:flex;
  align-items:center;gap:10px;font-family:'Space Grotesk';font-weight:700;font-size:.8rem;
  text-transform:uppercase;letter-spacing:.07em;color:var(--ceniza)}
details.plegable > summary::-webkit-details-marker{display:none}
details.plegable > summary::after{content:'▾';margin-left:auto;transition:transform .2s;font-size:.95rem}
details.plegable[open] > summary::after{transform:rotate(180deg)}
details.plegable[open] > summary{color:var(--queso);border-bottom:1px solid var(--linea)}
details.plegable .cuerpo{padding:4px 14px 12px}
details.plegable .cnt{background:var(--carbon-alto);border-radius:9px;padding:1px 8px;
  font-size:.72rem;color:var(--ceniza);font-weight:700}
details.plegable .cnt.alerta{background:var(--brasa);color:#fff}
.nuevo-ing{background:var(--carbon-panel);border:1px dashed var(--linea);border-radius:12px;padding:14px;margin-top:8px}
.nuevo-ing .fila2{display:grid;grid-template-columns:1fr 1fr;gap:10px}

.rol-chip{font-family:'Space Grotesk';font-weight:700;font-size:.66rem;letter-spacing:.06em;
  padding:3px 9px;border-radius:999px;text-transform:uppercase}
.rol-chip.admin{background:rgba(255,195,0,.18);color:var(--queso)}
.rol-chip.mesero{background:rgba(74,144,217,.2);color:var(--ruta)}

/* Chip de la campana: mismo lenguaje visual que .rol-chip (es un vecino en
   la misma fila de la barra), pero es un botón, así que lleva cursor y un
   borde que cambia con el estado. El bloqueado late despacio — sin permiso
   del navegador la campana NO suena, y eso tiene que verse desde el otro
   lado de la cocina, no descubrirse cuando ya se perdió una comanda. */
.campana-chip{font-family:'Space Grotesk';font-weight:700;font-size:.66rem;letter-spacing:.06em;
  padding:3px 9px;border-radius:999px;text-transform:uppercase;cursor:pointer;
  border:1px solid transparent;white-space:nowrap}
.campana-chip.activo{background:rgba(74,217,124,.16);color:#4AD97C;border-color:rgba(74,217,124,.35)}
.campana-chip.mudo{background:var(--carbon-alto);color:var(--ceniza);border-color:var(--linea)}
.campana-chip.bloqueado{background:rgba(255,195,0,.18);color:var(--queso);
  border-color:rgba(255,195,0,.45);animation:campana-late 2.4s ease-in-out infinite}
@keyframes campana-late{0%,100%{opacity:1}50%{opacity:.55}}
/* Quien pidió menos movimiento no debería tener que aguantar un chip
   parpadeando toda la jornada: el color ya dice lo mismo. */
@media (prefers-reduced-motion: reduce){
  .campana-chip.bloqueado{animation:none}
}
/* Ojo con el orden: esta regla vive DESPUÉS de `.t-acc-icos>button`, pero
   `.t-acc-icos>button` tiene más especificidad (0,1,1 vs 0,1,0), así que el
   `padding` y el `flex` de allá siguen ganando. Solo color y borde acá. */
.b-imprimir{background:var(--carbon-alto);border:1px solid var(--linea);color:var(--humo)}
.b-imprimir:disabled{opacity:.35;pointer-events:none}

/* Botones de icono CON rótulo (Comanda, Factura, Editar, Cobrar, Anular):
   icono arriba, texto debajo. Antes eran solo iconos idénticos y no se
   distinguían entre sí. Especificidad (0,2,1) para ganarle al padding de
   `.t-acc-icos>button`. Cobrar lleva borde y texto verdes para no
   confundirse con los demás; Anular conserva su tono apagado a propósito
   (es el que menos se quiere tocar por error). */
.t-acc-icos>button.b-ico{display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:3px;padding:8px 2px 7px;line-height:1}
.b-ico .ico{font-size:1.2rem;line-height:1;white-space:nowrap}
.b-ico .rot{font-size:.62rem;font-weight:700;letter-spacing:.01em;line-height:1;white-space:nowrap}
.b-ico.b-cobrar{border-color:var(--ok);color:var(--ok)}
/* Celulares de ~320 px: las 5 columnas quedan en ~47 px y "Comanda" no cabe. */
@media (max-width:340px){
  .t-acc-icos:has(>.b-ico){gap:3px}
  .b-ico .rot{font-size:.56rem;letter-spacing:0}
}

/* La impresión ya NO vive en este documento — ver la constante CSS_IMPRIMIBLE
   y la función imprimirDocumento() más abajo en el JS. Cada comanda/cierre/
   factura se imprime en una ventana nueva, aislada, con su propio y único
   @page. Es más robusto que compartir un documento con "páginas con
   nombre": esa técnica depende de que el navegador soporte bien la
   propiedad `page`, y no todos lo hacen igual de bien. Una ventana propia
   con un solo @page simple es lo que cualquier navegador respeta siempre. */

/* z-index 400: por encima de los modales (300) y del panel (200). Un aviso
   que confirma o falla tiene que verse siempre, sobre todo cuando aparece
   como respuesta a algo que hiciste dentro de un modal. */
.toast{position:fixed;left:50%;bottom:122px;transform:translateX(-50%) translateY(12px);
  background:#16130F;border:2px solid var(--queso);border-radius:13px;padding:11px 16px;font-size:.85rem;
  z-index:400;opacity:0;pointer-events:none;transition:.16s;max-width:90vw;display:flex;gap:12px;align-items:center}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto}
.toast button{color:var(--queso);font-weight:800;font-size:.82rem;white-space:nowrap}
.toast-icono{font-size:1.1rem;flex:0 0 auto;animation:toastIconoIn .25s cubic-bezier(.22,.9,.3,1)}
@keyframes toastIconoIn{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}
.toast-icono.ok{color:var(--ok)}
.toast-icono.error{color:var(--brasa)}
.toast-icono.warn{color:var(--prep)}
.toast-icono.info{color:var(--ruta)}
.toast-progreso{position:absolute;bottom:0;left:0;height:3px;background:var(--queso);border-radius:0 0 11px 11px;transition:width linear}
.toast.on .toast-progreso{animation:shrinkBar var(--duracion,1.2s) linear forwards}
@keyframes shrinkBar{from{width:100%}to{width:0%}}
#confetti{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999}
/* ═══════════════════ EDITOR DE COMANDAS ═══════════════════════════════════
   Reusa .linea-item / .qty del carrito a propósito: quien edita ya sabe
   manejar esa fila porque es la misma que usa para tomar el pedido. Lo
   único propio de acá es el aviso de cuánto sube o baja el total, que es
   la información que de verdad hace falta antes de confirmar. */
.ed-lineas{max-height:34vh;overflow-y:auto;overscroll-behavior:contain;
  border:1px solid var(--linea);border-radius:12px;padding:4px 10px}
.ed-lineas .qty button:disabled{opacity:.3}
.ed-total-fila{display:flex;justify-content:space-between;align-items:baseline;
  margin-top:14px;font-family:'Space Grotesk';font-weight:700}
.ed-total-fila b{text-align:right;font-family:'Anton';font-size:1.5rem;color:var(--queso);
  font-weight:400;line-height:1.1}
.ed-total-fila b small{display:block;font-family:'Inter';font-size:.72rem;
  color:var(--ceniza);font-weight:500}
.ed-delta{margin-top:8px;border-radius:10px;padding:8px 12px;font-size:.8rem;font-weight:700}
.ed-delta.sube{background:rgba(63,169,106,.16);color:var(--ok);border:1px solid rgba(63,169,106,.4)}
.ed-delta.baja{background:rgba(217,72,31,.16);color:var(--brasa);border:1px solid rgba(217,72,31,.4)}
.ed-resultados{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px;
  max-height:26vh;overflow-y:auto;overscroll-behavior:contain}
.ed-add{display:flex;align-items:center;gap:8px;background:var(--carbon-alto);
  border:1px solid var(--linea);border-radius:11px;padding:9px 13px;
  color:var(--humo);font-size:.82rem;text-align:left}
.ed-add:hover{border-color:var(--queso)}
.ed-add .p{font-family:'Space Grotesk';font-weight:700;color:var(--queso);white-space:nowrap}

/* ═══════════════════ COBRO (pagos split / mezclados) ══════════════════════
   Misma lógica visual que .ed-lineas: una lista con borde, contenida y con
   scroll propio, para que la hoja del velo no crezca sin límite cuando ya
   hay varios pagos parciales registrados. */
.cob-lista{max-height:26vh;overflow-y:auto;overscroll-behavior:contain;
  border:1px solid var(--linea);border-radius:12px;padding:4px 10px;margin-bottom:4px}
.cob-linea{display:flex;justify-content:space-between;align-items:center;
  gap:8px;padding:9px 2px;border-bottom:1px solid var(--linea);font-size:.85rem}
.cob-linea:last-child{border-bottom:0}
.cob-linea .monto{font-family:'Space Grotesk';font-weight:700;color:var(--queso)}
.cob-linea .metodo{color:var(--ceniza);font-size:.75rem;text-transform:uppercase;letter-spacing:.04em}
.cob-linea.anulado{opacity:.45;text-decoration:line-through}
.cob-linea button{flex:0 0 auto;color:var(--brasa);font-size:.78rem;padding:4px 8px}
/* Equivalente en bolivares dentro del velo de cobro: secundario al dolar
   (que es lo que se guarda en `pagos`), pero legible de un vistazo, que es
   lo que se le canta al cliente. */
.cob-bs{font-family:'Space Grotesk';font-size:.78rem;color:var(--ceniza);line-height:1.2;margin-top:2px}
.cob-tasa{text-align:center;font-size:.72rem;color:var(--ceniza);margin:8px 0 2px}
.cob-tasa.vieja{color:var(--brasa)}
.saldo-tag{display:inline-block;margin-left:8px;padding:2px 8px;border-radius:20px;
  font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;
  background:rgba(217,72,31,.16);color:var(--brasa);border:1px solid rgba(217,72,31,.4)}
.saldo-tag.pagado{background:rgba(63,169,106,.16);color:var(--ok);border-color:rgba(63,169,106,.4)}


/* ══════════════ ARMADOR DE COSTOS DE RECETA ═══════════════════════════════
   La hoja es más ancha que las demás porque la tabla tiene cinco columnas y
   comprimirla a 420px obligaría a hacer scroll horizontal para ver el
   subtotal — que es justo la columna por la que se abre la pantalla. */
.hoja.hoja-costo{max-width:620px}

/* Selector de base de costo. Chips y no un <select> a propósito: las tres
   opciones tienen que estar visibles a la vez, porque el valor está en
   comparar y un select esconde lo que no está elegido. */
.bases-costo{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.chip-base{padding:7px 12px;border-radius:999px;background:var(--carbon);
  border:1px solid var(--linea);color:var(--ceniza);font-size:.74rem;font-weight:600;
  white-space:nowrap;transition:background .15s ease,color .15s ease,border-color .15s ease}
.chip-base:hover{border-color:var(--queso);color:var(--humo)}
.chip-base.on{background:var(--queso);border-color:var(--queso);color:#1A1512}

.cst-cab,.cst-fila{display:grid;grid-template-columns:1fr 62px 96px 68px 28px;
  gap:8px;align-items:center}
.cst-cab{font-size:.66rem;text-transform:uppercase;letter-spacing:.06em;
  color:var(--ceniza);padding:0 0 6px;border-bottom:1px solid var(--linea)}
.cst-cab span:nth-child(n+2){text-align:right}
.cst-fila{padding:10px 0;border-bottom:1px solid var(--linea)}
.cst-fila.sin-costo{background:rgba(217,72,31,.06)}
.cst-fila .n{font-size:.84rem;line-height:1.25;min-width:0}
.cst-fila .n small{display:block;font-size:.68rem;color:var(--ceniza);font-weight:400}
.cst-in{width:100%;padding:8px 8px;border-radius:8px;background:var(--carbon);
  border:1px solid var(--linea);color:var(--humo);font-size:.82rem;text-align:right}
.cst-in:focus{border-color:var(--queso);outline:none}
.cst-costo{display:block}
.cst-costo small{display:block;text-align:right;font-size:.6rem;margin-top:2px;
  text-transform:uppercase;letter-spacing:.04em}
/* El color de la etiqueta dice de dónde salió la cifra sin tener que leerla:
   amarillo = lo escribiste tú (no es real), rojo = no hay dato. */
.f-sim{color:var(--queso)}
.f-prom,.f-ult{color:var(--ceniza)}
.f-prev{color:var(--ocre,#E8B97A);opacity:.85}
.f-sin{color:var(--brasa)}
.cst-sub{text-align:right;font-size:.84rem;font-weight:600}
.cst-x{width:26px;height:26px;border-radius:50%;background:transparent;
  border:1px solid var(--linea);color:var(--ceniza);font-size:.7rem;line-height:1;
  display:grid;place-items:center}
.cst-x:hover{border-color:var(--brasa);color:var(--brasa)}
.cst-nuevo{width:100%;margin-top:12px;padding:11px 10px;border-radius:9px;
  background:var(--carbon);border:1px solid var(--linea);color:var(--humo);font-size:.82rem}

.cst-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:16px}
.cst-kpi{padding:12px 10px;border-radius:11px;background:var(--carbon-panel);
  border:1px solid var(--linea);text-align:center}
.cst-kpi .k{display:block;font-size:.64rem;text-transform:uppercase;
  letter-spacing:.06em;color:var(--ceniza);margin-bottom:4px}
.cst-kpi .v{display:block;font-family:'Anton',sans-serif;font-size:1.35rem;line-height:1.1}
.cst-kpi .bs{display:block;font-size:.66rem;color:var(--ceniza);margin-top:2px}
.cst-kpi input{width:100%;padding:4px 6px;border-radius:7px;background:var(--carbon);
  border:1px solid var(--linea);color:var(--humo);font-family:'Anton',sans-serif;
  font-size:1.25rem;text-align:center}
.cst-kpi input:focus{border-color:var(--queso);outline:none}
/* Semáforo de food cost. Es una convención del rubro (por debajo de ~30% de
   margen el plato no paga la operación), no una regla del negocio de nadie
   en particular — el día que el dueño trabaje con otro umbral, esto sube a
   `config` y deja de estar en el CSS. */
.cst-kpi.ok    .v{color:var(--ok)}
.cst-kpi.medio .v{color:var(--queso)}
.cst-kpi.malo  .v{color:var(--brasa)}
.cst-kpi.malo{border-color:rgba(217,72,31,.45)}

.cst-brecha{margin-top:12px;padding:10px 12px;border-radius:9px;font-size:.75rem;
  line-height:1.55;border:1px solid var(--linea);background:var(--carbon-panel);color:var(--ceniza)}
.cst-brecha b{color:var(--humo)}
.cst-brecha.sube{border-color:rgba(217,72,31,.4)}
.cst-brecha.sube b{color:var(--brasa)}
.cst-brecha.baja b{color:var(--ok)}
.cst-sim-aviso{margin-top:10px;padding:10px 12px;border-radius:9px;font-size:.73rem;
  line-height:1.55;background:rgba(255,195,0,.1);border:1px solid rgba(255,195,0,.32);
  color:var(--humo);display:flex;flex-wrap:wrap;gap:8px;align-items:center}

/* Fila de plato en la lista de costos: toda la fila abre la hoja, no un
   botón chiquito adentro. El objetivo del toque es el plato entero. */
.receta-fila{cursor:pointer;transition:background .15s ease}
.receta-fila:hover{background:var(--carbon-alto)}
.receta-fila:focus-visible{outline:2px solid var(--queso);outline-offset:2px}
.receta-margen{font-family:'Anton',sans-serif;font-size:1.1rem;color:var(--ceniza);flex:0 0 auto}
.receta-margen.ok{color:var(--ok)}
.receta-margen.medio{color:var(--queso)}
.receta-margen.malo{color:var(--brasa)}

/* Formulario de tanda nueva: reemplaza dos prompt() del navegador. */
.tanda-nueva{display:flex;flex-direction:column;gap:8px;margin-bottom:18px;
  padding:12px;border-radius:11px;background:var(--carbon-panel);border:1px solid var(--linea)}
.tanda-nueva input{padding:10px 11px;border-radius:9px;background:var(--carbon);
  border:1px solid var(--linea);color:var(--humo);font-size:.84rem}
.tanda-nueva input:focus{border-color:var(--queso);outline:none}
.tanda-nueva-acc{display:flex;gap:8px;justify-content:flex-end}
.tanda-nueva-acc .principal{background:var(--queso);color:#1A1512;border-color:var(--queso)}

@media(max-width:560px){
  /* En el teléfono la columna de subtotal se calcula sola y ocupa el ancho
     que le falta a "cantidad" y "costo", que son las dos que se tocan. */
  .cst-cab,.cst-fila{grid-template-columns:1fr 54px 82px 60px 24px;gap:5px}
  .cst-fila .n{font-size:.78rem}
  .cst-kpis{grid-template-columns:1fr;gap:6px}
  .cst-kpi{display:flex;align-items:center;justify-content:space-between;text-align:left;padding:10px 12px}
  .cst-kpi .k{margin:0}
  .cst-kpi .v,.cst-kpi input{font-size:1.15rem;width:auto;min-width:90px}
}

/* ── Varias tandas el mismo día ────────────────────────────────────────────
   Chips y no un select: con dos o tres proveedores en un viaje, cuál está
   recibiendo las cargas tiene que estar visible sin abrir nada, porque es la
   pregunta que se hace antes de cada "+ Cargar". */
.tanda-chips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 0}
.chip-tanda{display:flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;
  background:var(--carbon);border:1px solid var(--linea);color:var(--ceniza);
  font-size:.74rem;font-weight:600;white-space:nowrap}
.chip-tanda .m{font-weight:400;opacity:.75;font-size:.68rem}
.chip-tanda:hover{border-color:var(--queso);color:var(--humo)}
.chip-tanda.on{background:var(--queso);border-color:var(--queso);color:#1A1512}
.chip-tanda.on .m{opacity:.7}
.chip-tanda.mas{border-style:dashed}

/* Encabezado de día en el historial. El total del día es lo que la persona
   busca cuando revisa ("¿cuánto gasté el martes?"), y sale de sumar las
   tandas al leer — no de guardar un día como si fuera una compra. */
.tanda-dia{margin-bottom:14px}
.tanda-dia-cab{display:flex;justify-content:space-between;align-items:baseline;
  padding:0 2px 6px;border-bottom:1px solid var(--linea);margin-bottom:6px}
.tanda-dia-cab .f{font-size:.72rem;text-transform:uppercase;letter-spacing:.07em;
  color:var(--ceniza);font-weight:700}
.tanda-dia-cab .t{font-size:.72rem;color:var(--ceniza)}
.tanda-dia-cab .t b{color:var(--queso);font-family:'Anton',sans-serif;font-size:.88rem}

/* ══════════════ COTIZACIONES DE COMPRA ════════════════════════════════════ */
.cot-fila{display:flex;align-items:center;gap:10px;width:100%;text-align:left;
  padding:12px;border-radius:11px;background:var(--carbon-panel);
  border:1px solid var(--linea);margin-bottom:8px}
.cot-fila:hover{border-color:var(--queso)}
.cot-fila.comprada{opacity:.6}
.cot-fila .info{flex:1;min-width:0}
.cot-fila .nom{display:block;font-size:.88rem;font-weight:600}
.cot-fila .sub2{display:block;font-size:.71rem;color:var(--ceniza);margin-top:2px}
.cot-fila .monto{color:var(--ceniza);font-size:1.2rem}
.tag-comprada{display:inline-block;margin-left:6px;font-size:.6rem;text-transform:uppercase;
  letter-spacing:.06em;padding:2px 7px;border-radius:999px;
  background:rgba(74,232,134,.12);border:1px solid rgba(74,232,134,.3);color:var(--ok)}

.cotz-cab,.cotz-fila{display:grid;grid-template-columns:1fr 78px 92px 66px;gap:8px;align-items:center}
.cotz-cab{font-size:.64rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ceniza);
  padding:0 0 6px;border-bottom:1px solid var(--linea)}
.cotz-cab span:nth-child(n+2){text-align:right}
.cotz-fila{padding:9px 0;border-bottom:1px solid var(--linea)}
.cotz-fila.activa{background:rgba(255,195,0,.05)}
.cotz-fila .n{font-size:.83rem;line-height:1.25;min-width:0}
.cotz-fila .n small{display:block;font-size:.67rem;color:var(--ceniza)}
.cotz-in{width:100%;padding:8px;border-radius:8px;background:var(--carbon);
  border:1px solid var(--linea);color:var(--humo);font-size:.82rem;text-align:right}
.cotz-in:focus{border-color:var(--queso);outline:none}
.cotz-in:disabled{opacity:.35}
/* La referencia y su delta: el número que convierte una lista de precios en
   una decisión. Rojo = te subieron, verde = te bajaron. */
.cotz-ref{text-align:right;font-size:.78rem;color:var(--ceniza)}
.cotz-ref i{opacity:.5;font-style:normal;font-size:.7rem}
.cotz-ref small{display:block;font-size:.66rem;font-weight:700}
.cotz-ref small.sube{color:var(--brasa)}
.cotz-ref small.baja{color:var(--ok)}
.f-cotiz{color:var(--queso)}

.cotz-total{display:flex;align-items:baseline;gap:10px;margin-top:16px;padding:12px;
  border-radius:11px;background:var(--carbon-panel);border:1px solid var(--linea)}
.cotz-total .k{flex:1;font-size:.72rem;color:var(--ceniza);text-transform:uppercase;letter-spacing:.05em}
.cotz-total .v{font-family:'Anton',sans-serif;font-size:1.4rem;color:var(--queso)}
.cotz-total .bs{font-size:.7rem;color:var(--ceniza)}
.cotz-acc{display:flex;gap:8px;margin-top:10px}
.cotz-acc .btn-peq{flex:1}

/* Impacto por plato: antes → después, con el margen resultante al lado. */
.imp-fila{display:grid;grid-template-columns:1fr auto 74px;gap:10px;align-items:center;
  padding:9px 0;border-bottom:1px solid var(--linea)}
.imp-fila .n{font-size:.82rem;min-width:0}
.imp-fila .c{font-size:.76rem;color:var(--ceniza);white-space:nowrap}
.imp-fila .c b{color:var(--humo)}
.imp-fila .m{text-align:right;font-family:'Anton',sans-serif;font-size:1.05rem;color:var(--ceniza)}
.imp-fila .m small{display:block;font-family:'Inter',sans-serif;font-size:.62rem;font-weight:500;opacity:.7}
.imp-fila .m.ok{color:var(--ok)} .imp-fila .m.medio{color:var(--queso)} .imp-fila .m.malo{color:var(--brasa)}

@media(max-width:560px){
  .cotz-cab,.cotz-fila{grid-template-columns:1fr 66px 76px 56px;gap:5px}
  .cotz-fila .n{font-size:.77rem}
  .imp-fila{grid-template-columns:1fr auto;row-gap:2px}
  .imp-fila .m{grid-column:2;text-align:right}
  .imp-fila .c{grid-column:1/-1;font-size:.72rem}
}

/* ───── Datos de pago móvil dentro de la hoja de pedido ─────
   Va con el fondo del panel y borde de acento para que se lea como "esto
   es un dato que tenés que copiar", no como otro campo más del formulario.
   El botón de copiar existe porque el caso real es el cliente cambiando a
   la app del banco: sin él, transcribe el número a mano y se equivoca. */
.pm-datos{margin-top:10px;padding:12px 13px;border-radius:11px;
  background:var(--carbon-panel);border:1px solid var(--queso);
  border-left-width:3px}
.pm-datos h4{margin:0 0 8px;font-size:.78rem;letter-spacing:.04em;
  text-transform:uppercase;color:var(--queso)}
.pm-datos .pm-fila{display:flex;justify-content:space-between;align-items:center;
  gap:10px;padding:5px 0;font-size:.86rem;color:var(--humo)}
.pm-datos .pm-fila + .pm-fila{border-top:1px solid var(--linea)}
.pm-datos .pm-fila span{color:var(--ceniza);font-size:.78rem}
.pm-datos .pm-fila b{font-weight:700;letter-spacing:.01em}
.pm-datos .pm-copiar{width:100%;margin-top:9px;padding:8px;border-radius:9px;
  background:transparent;border:1px solid var(--linea);color:var(--queso);
  font-family:inherit;font-size:.78rem;font-weight:600;cursor:pointer}
.pm-datos .pm-copiar:hover{border-color:var(--queso)}
/* Aviso de fiado: mismo recuadro, solo texto (no hay datos que copiar). */
.pm-datos .pm-nota{margin:0;font-size:.84rem;line-height:1.4;color:var(--humo)}


/* Banda del rechazo en gracia: ocupa el lugar del botón "Rechazar" que se
   acaba de tocar, para que el conteo salga donde la vista ya está puesta. */
.t-gracia{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .6rem;
  border-radius:.5rem;font-size:.82rem;font-weight:600;
  background:rgba(220,60,60,.14);color:#c23b3b;border:1px solid rgba(220,60,60,.35)}
.t-gracia b{font-variant-numeric:tabular-nums;min-width:1.4em;text-align:center;
  font-size:1rem}
