/* ═══════════════════════════════════════════════════════════════════════
   Panel de gestión · estilos
   Estaba dentro del index.html, junto a otras 3.200 líneas. Fuera de ahí
   se puede leer, buscar y cambiar sin abrir la aplicación entera.
   ═══════════════════════════════════════════════════════════════════════ */
:root{
  /* Paleta neutra fría. La anterior tenía dominante beige (#FAFAF9, #E9E7E2) y
     en pantalla se leía como suciedad. Ahora el lienzo es blanco casi puro y
     las tarjetas blanco puro: la separación la hace el borde, no el tono. */
  --fondo:#FFFFFF;--sup:#FFFFFF;--sup-2:#F7F9FB;--hover:#F2F5F8;--lienzo:#FFFFFF;
  /* Texto casi negro y toda la escala de grises subida: --tenue (#8B877F) se
     quedaba en 3,6:1 sobre blanco y no llegaba a AA. Ahora los cuatro pasan. */
  --tinta:#0C0D0F;--tinta-2:#3A3F47;--tenue:#5B626D;--flojo:#6E7681;
  --linea:#E4E8ED;--linea-2:#EDEFF2;--linea-fuerte:#C7CDD5;
  --acc:#A93B2B;--acc-2:#C25441;--acc-suave:#A93B2B14;--acc-barra:#A93B2B1F;
  --verde:#1E6E57;--verde-suave:#1E6E5714;
  --rojo:#A3392C;--rojo-suave:#A3392C14;
  --ambar:#9C7318;--ambar-suave:#9C731814;
  --sombra:0 1px 2px rgba(13,17,23,.05);
  --sombra-pop:0 14px 38px -10px rgba(13,17,23,.18);
  --r:12px;--r-sm:9px;--barra:59px;--lat:250px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%}
/* Nada de texto seleccionable por defecto: nunca es una web para leer, es un
   panel para pulsar. Sin esto, pasar el ratón por un título o una pastilla
   enseña el cursor de escritura como si ahí se pudiera teclear, y no se
   puede. Los campos de formulario lo recuperan explícitamente: ahí sí hace
   falta seleccionar y escribir. */
html{-webkit-user-select:none;-moz-user-select:none;user-select:none}
input,textarea,select,[contenteditable]{
  -webkit-user-select:text;-moz-user-select:text;user-select:text}
body{background:var(--fondo);color:var(--tinta);font-family:"IBM Plex Sans",system-ui,sans-serif;
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
h1,h2,h3{font-family:"Fraunces",Georgia,serif;font-weight:600;margin:0;letter-spacing:-.014em}
a{color:inherit}
button{color:inherit}
.rec,.rec .tit,.loc,.loc *{color:inherit}
.mono{font-family:"IBM Plex Mono",monospace;font-variant-numeric:tabular-nums}

/* ── barra superior ── */
.top{position:sticky;top:0;z-index:60;height:var(--barra);background:var(--sup);
  border-bottom:1px solid var(--linea);display:flex;align-items:center;gap:14px;padding:0 18px}
.top .marca{display:flex;align-items:center;gap:11px;flex:none}
.top .marca img{height:21px}
.top .etiq{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.09em;
  text-transform:uppercase;color:var(--tenue);background:var(--sup-2);border:1px solid var(--linea);
  padding:3px 8px;border-radius:6px}
.miga{display:flex;align-items:center;gap:7px;font-size:13.5px;color:var(--tenue);min-width:0}
.miga b{color:var(--tinta);font-weight:500}
.miga a:hover{color:var(--acc);text-decoration:underline}
.miga s{text-decoration:none;color:var(--flojo)}
.top .sp{margin-left:auto}
.top .quien{font-size:13px;color:var(--tinta-2)}
.top .quien b{font-weight:500}

/* ── estructura ── */
/* Altura exacta, no mínima. Con `min-height` la página crecía por debajo de la
   ventana y aparecía un segundo scroll: uno el del navegador y otro el del
   panel ejecutivo, que va dentro de un marco. Dos barras de desplazamiento en
   la misma pantalla desorientan, y además dejaban las ventanas emergentes del
   panel ancladas a un sitio que no se estaba viendo. */
.marco{display:grid;grid-template-columns:var(--lat) minmax(0,1fr);
  height:calc(100vh - var(--barra));overflow:hidden}
.lat{border-right:1px solid var(--linea);background:var(--sup);padding:20px 0 44px;
  position:sticky;top:var(--barra);height:calc(100vh - var(--barra));overflow-y:auto}
/* El aire entre grupos es lo que hace legible un menú corto: 34px arriba
   separan bloques de verdad, 10px abajo atan la etiqueta a sus items. */
.lat .grupo{font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--flojo);padding:0 22px;margin:34px 0 10px}
.lat .grupo:first-child{margin-top:4px}
.lat a{display:flex;align-items:center;gap:12px;padding:11px 22px;margin-bottom:3px;
  color:var(--tinta-2);text-decoration:none;font-size:13.5px;cursor:pointer;
  border-left:2px solid transparent}
.lat a:hover{background:var(--hover);color:var(--tinta)}
.lat a.on{background:var(--acc-suave);color:var(--acc);border-left-color:var(--acc);font-weight:500}
.lat a svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round;flex:none;opacity:.85}
.lat a .n{margin-left:auto;font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--flojo)}
.lat a.on .n{color:var(--acc)}

/* ── Permisos ────────────────────────────────────────────────────────────
   Las casillas van en tarjetas por área: se reparte el acceso pensando en
   departamentos, no en una lista plana de treinta líneas. */
.perm-h{display:flex;gap:11px;align-items:flex-start;margin:22px 0 12px;
  padding-top:18px;border-top:1px solid var(--linea)}
.perm-h svg{width:17px;height:17px;stroke:var(--tinta-2);fill:none;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round;flex:none;margin-top:1px}
.perm-h b{font-size:14px}
.perm-rej{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:11px}
.grupo-perm{border:1px solid var(--linea);border-radius:var(--r-sm);padding:13px 14px 11px}
.gp-t{font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--tenue);margin-bottom:9px}
.perm{display:flex;align-items:center;gap:9px;padding:5px 0;cursor:pointer;font-size:13.5px}
.perm input{width:17px;height:17px;accent-color:var(--verde);cursor:pointer;flex:none;margin:0}
.perm.bloq{opacity:.55;cursor:default}
.perm.bloq input{cursor:default}
.sw-fila{display:flex;align-items:center;gap:10px;cursor:pointer;font-size:13.5px;color:var(--tinta-2)}

/* ── Módulo desplegable ──────────────────────────────────────────────────
   El padre no es un enlace a una pantalla: abre y cierra sus informes. Los
   hijos se sangran para que se lea de un vistazo qué cuelga de qué. */
.lat a.padre .fl{margin-left:auto;display:flex;transition:transform .15s}
.lat a.padre .fl svg{width:13px;height:13px;opacity:.55}
.lat a.padre.desplegado .fl{transform:rotate(90deg)}
.lat .hijos{border-left:1px solid var(--linea);margin:4px 0 10px 30px}
.lat .hijos a{padding:9px 18px 9px 14px;font-size:13px;border-left:2px solid transparent;
  margin-left:-1px;margin-bottom:2px}
.lat .hijos a svg{width:14px;height:14px;opacity:.7}

.vista{min-width:0;background:var(--lienzo);display:flex;flex-direction:column;min-height:0}
.tope{background:var(--sup);border-bottom:1px solid var(--linea);padding:18px 24px 16px;
  display:flex;align-items:flex-end;gap:18px;flex-wrap:wrap;z-index:40;flex:none}
.tope h1{font-size:21px;line-height:1.2}
.tope p{margin:3px 0 0;color:var(--tenue);font-size:13.5px}
.tope .der{margin-left:auto;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.met{display:flex;gap:22px}
.met div{text-align:right}
.met b{display:block;font-family:"IBM Plex Mono",monospace;font-size:17px;font-weight:500;line-height:1.1}
.met span{font-size:10px;letter-spacing:.07em;text-transform:uppercase;color:var(--flojo)}
.cuerpo{padding:22px 24px 70px;flex:1;min-height:0;overflow-y:auto}
/* Los informes ocupan el mismo hueco que `.cuerpo` y necesitan lo mismo.
   Antes ahí había un iframe, y el iframe sí llevaba `flex:1; min-height:0`.
   Al sustituirlo por un div normal nadie se las dio: el informe crecía por
   debajo del alto de la ventana, `.marco` recortaba lo que sobraba —tiene
   `overflow:hidden` para congelar la página— y no había forma de desplazarse.
   Desde fuera parecía que la aplicación entera se había quedado sin scroll. */
/* Sin relleno arriba: ese hueco se lo queda ahora la vista de dentro.
   Con el relleno aquí, Safari colocaba las cabeceras pegajosas de las
   tablas 22 px por debajo del borde y dejaba asomando una tira de la fila
   que pasaba por detrás. El hueco se ve igual; la referencia cambia. */
#inf-raiz{flex:1;min-height:0;overflow-y:auto;padding:0 24px 70px;
  background:var(--lienzo);scrollbar-gutter:stable}
/* El BI vive incrustado: su propia página dentro del panel. Sin padding ni
   scroll propio, para que se comporte como una vista más y no como una web
   metida a la fuerza dentro de otra. */
/* Ocupa lo que quede, sea cual sea el alto de la cabecera. Antes tenía restados
   74 px a mano: el día que la cabecera creció —al añadirle botones que se
   parten en dos líneas— la suma pasó de la ventana y apareció el segundo scroll. */
.marco-bi{width:100%;flex:1;min-height:0;height:auto;border:0;display:block;background:var(--lienzo)}
/* Sin esto el display:block de arriba gana al atributo que lo esconde y el
   panel ejecutivo se quedaba asomando debajo de Inicio. */
.marco-bi[hidden]{display:none}

/* ── controles ── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:34px;
  padding:0 14px;border:none;border-radius:8px;font-family:inherit;font-size:13.5px;font-weight:600;
  cursor:pointer;background:var(--acc);color:#fff;white-space:nowrap}
.btn:hover{filter:brightness(1.07)}
.btn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round;flex:none}
.btn.mal{color:var(--rojo);border-color:var(--rojo)}
.btn.mal:hover{background:var(--rojo-suave);filter:none}
.btn.sec{background:var(--sup);color:var(--tinta);border:1px solid var(--linea)}
.btn.sec:hover{background:var(--hover);filter:none}
.btn.gh{background:none;color:var(--tenue);border:1px solid transparent}
.btn.gh:hover{color:var(--rojo);background:var(--rojo-suave)}
.btn[disabled]{opacity:.4;pointer-events:none}
.fila{display:flex;flex-wrap:wrap;gap:9px;align-items:center}
.fila .sp{margin-left:auto}
input,select,textarea{width:100%;min-height:34px;padding:6px 10px;font-family:inherit;font-size:13.5px;
  border:1px solid var(--linea);border-radius:8px;background:var(--sup);color:var(--tinta)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--acc);
  box-shadow:0 0 0 3px var(--acc-suave)}
label.lab{font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--tenue);display:block;margin-bottom:5px}
.fld{margin-bottom:12px}
.bus{position:relative;min-width:190px}
.bus input{padding-left:31px}
.bus svg{position:absolute;left:11px;top:10px;width:14px;height:14px;stroke:var(--flojo);
  fill:none;stroke-width:1.9}

/* ── tarjetas y tablas ── */
.tarjeta{background:var(--sup);border:1px solid var(--linea);border-radius:11px;padding:16px;
  box-shadow:var(--sombra)}
.rej{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:13px}
.gtit{margin:24px 0 0;padding:0 2px 8px;border-bottom:1px solid var(--linea);
  font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--tenue);display:flex;align-items:center;gap:10px}
.gtit:first-child{margin-top:0}
.gtit .n{margin-left:auto;color:var(--flojo)}
.tw{overflow-x:auto}
table{border-collapse:collapse;width:100%;min-width:620px;font-size:13.5px}
th{font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--tenue);font-weight:500;text-align:left;padding:8px 12px;background:var(--sup);
  border-bottom:1px solid var(--linea);white-space:nowrap}
td{padding:7px 12px;border-bottom:1px solid var(--linea-2);vertical-align:middle;background:var(--sup)}
tbody tr:hover td{background:var(--hover)}
tr.fuera td{background:var(--sup-2)}
td .nom{font-weight:500}
td .des{color:var(--tenue);font-size:12px;line-height:1.4;margin-top:1px;max-width:52ch}
td.num{text-align:right;font-family:"IBM Plex Mono",monospace;white-space:nowrap}
td .base{color:var(--flojo);font-size:12.5px}
td input.pr{width:78px;min-height:28px;padding:3px 8px;text-align:right;
  font-family:"IBM Plex Mono",monospace;font-size:13px}
td input.pr.propio{border-color:var(--acc);background:var(--acc-suave)}
tr.off td .nom{color:var(--flojo)}
.sw{position:relative;display:inline-block;width:34px;height:19px}
.sw input{position:absolute;opacity:0;width:0;height:0}
.sw i{position:absolute;inset:0;background:var(--linea);border-radius:99px;transition:.16s;cursor:pointer}
.sw i::before{content:"";position:absolute;width:13px;height:13px;left:3px;top:3px;background:#fff;
  border-radius:50%;transition:.16s;box-shadow:0 1px 3px rgba(0,0,0,.16)}
.sw input:checked + i{background:var(--verde)}
.sw input:checked + i::before{transform:translateX(15px)}
.x{background:none;border:none;color:var(--flojo);font-size:15px;cursor:pointer;padding:2px 5px}
.x:hover{color:var(--rojo)}
.pas{font-family:"IBM Plex Mono",monospace;font-size:10px;padding:2px 8px;border-radius:99px;
  background:var(--sup-2);color:var(--tenue);white-space:nowrap;border:1px solid var(--linea)}
.pas.ok{background:var(--verde-suave);color:var(--verde);border-color:transparent}
.pas.av{background:var(--ambar-suave);color:var(--ambar);border-color:transparent}

/* ── inicio ── */
.card-mod{display:block;text-decoration:none;background:var(--sup);border:1px solid var(--linea);
  border-radius:12px;padding:18px;box-shadow:var(--sombra);transition:.15s;cursor:pointer}
.card-mod:hover{border-color:var(--linea-fuerte);transform:translateY(-1px);
  box-shadow:0 8px 22px -12px rgba(13,17,23,.16)}
.card-mod .ic{width:34px;height:34px;border-radius:9px;background:var(--acc-suave);
  display:flex;align-items:center;justify-content:center;margin-bottom:13px}
.card-mod .ic svg{width:17px;height:17px;stroke:var(--acc);fill:none;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.card-mod h3{font-size:16px;margin-bottom:4px}
.card-mod p{margin:0;color:var(--tenue);font-size:13px;line-height:1.45}
.card-mod .dato{margin-top:12px;padding-top:11px;border-top:1px solid var(--linea-2);
  font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--tinta-2)}

/* ── recetas ── */
.rec{position:relative;display:flex;flex-direction:column;text-align:left;background:var(--sup);
  border:1px solid var(--linea);border-radius:11px;padding:0;overflow:hidden;cursor:pointer;
  box-shadow:var(--sombra);transition:.15s}
.rec:hover{border-color:var(--linea-fuerte);transform:translateY(-1px)}
.rec .top2{padding:14px 15px 12px;flex:1}
.rec .fam{font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.11em;
  text-transform:uppercase;color:var(--acc);margin-bottom:7px;display:block}
.rec .tit{font-family:"Fraunces",Georgia,serif;font-size:16.5px;font-weight:600;line-height:1.22;
  display:block;margin-bottom:5px}
.rec .sku{font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--flojo);display:block}
.rec .pie{display:flex;align-items:center;gap:8px;padding:9px 15px;border-top:1px solid var(--linea-2);
  background:var(--sup-2);font-size:12px;color:var(--tinta-2)}
.rec .pie .pas{margin-left:auto}

/* ── panel lateral ── */
.velo{position:fixed;inset:0;z-index:90;background:rgba(13,17,23,.38);display:none}
.hamb{display:none;align-items:center;justify-content:center;width:40px;height:36px;flex:none;
  border:1px solid var(--linea);background:var(--sup);border-radius:9px;cursor:pointer;padding:0;
  color:var(--tinta)}
.hamb svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round}
.hamb:active{background:var(--hover)}
.velo.on{display:block}
.hoja{position:fixed;top:0;right:0;bottom:0;z-index:95;width:100%;max-width:440px;background:var(--sup);
  border-left:1px solid var(--linea);padding:22px;overflow-y:auto;transform:translateX(100%);
  transition:transform .2s ease;box-shadow:-18px 0 50px -20px rgba(13,17,23,.16)}
.hoja.on{transform:none}
.hoja h2{font-size:18px;margin-bottom:3px}
.hoja .sub{color:var(--tenue);font-size:13px;margin-bottom:18px}
.nota{background:var(--sup-2);border:1px solid var(--linea);border-radius:9px;padding:11px 13px;
  font-size:12.5px;color:var(--tinta-2);line-height:1.5;margin-bottom:15px}
.nota b{color:var(--tinta)}
.nota.av{background:var(--ambar-suave);border-color:#9C731833;color:#6b4f11}
.vacio,.cargando{padding:60px 0;text-align:center;color:var(--tenue);font-size:13.5px}
.aviso-toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);z-index:120;
  background:var(--tinta);color:#fff;padding:10px 17px;border-radius:99px;font-size:13.5px;
  opacity:0;pointer-events:none;transition:opacity .2s}
.aviso-toast.on{opacity:1}

/* ── entrada ── */
.entrada{max-width:370px;margin:11vh auto;text-align:center;padding:0 22px}
.entrada img{height:40px;margin-bottom:24px}
.entrada h1{font-size:21px;margin-bottom:5px}
.entrada p{color:var(--tenue);font-size:13.5px;margin:0 0 22px}
.err{background:var(--rojo-suave);color:var(--rojo);border-radius:8px;padding:9px 11px;
  font-size:13px;margin-bottom:13px}
.aviso-espera{color:var(--tenue);font-size:13px;padding:8px 0}
@media(max-width:760px){
  .marco{grid-template-columns:1fr}
  .lat{position:static;height:auto;border-right:none;border-bottom:1px solid var(--linea);
    display:flex;gap:4px;overflow-x:auto;padding:10px 12px}
  .lat .grupo{display:none}
  .lat a{border-left:none;border-radius:8px;padding:8px 13px;margin-bottom:0;white-space:nowrap}
  .lat a.on{border-left:none}
  .tope{position:static}
}

/* ══════ lenguaje visual del dashboard de ventas ══════ */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:8px;margin-bottom:14px}
.kpi{background:var(--sup);border:1px solid var(--linea);border-radius:var(--r);padding:10px 12px;
  box-shadow:var(--sombra);position:relative;overflow:hidden}
.kpi .lab{font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--tenue);
  font-weight:600;display:flex;align-items:center;gap:7px}
.kpi .val{font-family:"IBM Plex Sans",system-ui,sans-serif;font-weight:600;font-size:19px;
  letter-spacing:-.03em;margin-top:8px;line-height:1;font-variant-numeric:tabular-nums}
.kpi .sub{font-size:11px;color:var(--tenue);margin-top:2px;line-height:1.3}
.kpi.acento .val{color:var(--acc)}
.kpi.aviso .val{color:var(--ambar)}
.kpi.bien .val{color:var(--verde)}
.card{background:var(--sup);border:1px solid var(--linea);border-radius:var(--r);
  box-shadow:var(--sombra);padding:20px 22px;margin-bottom:14px}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.card-h h3{font-size:15.5px;font-family:"IBM Plex Sans",sans-serif;font-weight:600;
  letter-spacing:-.012em}
.card-h .n{font-size:12px;color:var(--tenue);font-variant-numeric:tabular-nums}
.tabs{display:flex;gap:2px;margin:0 0 20px;border-bottom:1px solid var(--linea)}
.tab{padding:10px 15px;font-size:13.5px;font-weight:500;letter-spacing:-.01em;color:var(--tenue);
  background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;font-family:inherit}
.tab:hover{color:var(--tinta)}
.tab.on{color:var(--acc);border-bottom-color:var(--acc)}

/* ── Stock de tiendas ─────────────────────────────────────────────────────
   Aquí sí hay cuadrícula: son columnas de números que se comparan en vertical,
   y las filas sueltas del resto del panel no dejan alinearlos. El contenedor
   lleva su propio desplazamiento lateral para que en el móvil se mueva la
   tabla y no la página entera. */
.tabla-stock{overflow-x:auto;margin:0 -22px;padding:0 22px}
.tabla-stock table{width:100%;border-collapse:collapse;font-size:13.5px}
.tabla-stock th{font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--tenue);
  font-weight:600;text-align:left;padding:0 0 9px;border-bottom:1px solid var(--linea);white-space:nowrap}
.tabla-stock td{padding:9px 0;border-bottom:1px solid var(--linea-2);vertical-align:middle}
.tabla-stock tr:last-child td{border-bottom:none}
.tabla-stock th.num,.tabla-stock td.num{text-align:right;font-variant-numeric:tabular-nums;
  padding-left:18px;white-space:nowrap}
.tabla-stock td.nm{font-weight:500;letter-spacing:-.008em;min-width:180px}
.tabla-stock td.tenue{color:var(--flojo)}
.tabla-stock td.neg{color:var(--ambar);font-weight:600}
.tabla-stock td.pos{color:var(--verde);font-weight:600}
.tabla-stock tr.cli{cursor:pointer}
.tabla-stock tr.cli:hover td{background:var(--hover)}
/* El aviso del negativo. Va en ámbar y no en rojo a propósito: no es un error,
   es el estado normal del módulo hasta que se cuente el inventario. */
.nota-stock{display:flex;gap:11px;align-items:flex-start;background:var(--ambar-suave);
  border:1px solid var(--ambar);border-radius:var(--r);padding:13px 16px;margin-bottom:14px;
  font-size:12.5px;line-height:1.5;color:var(--tinta-2)}
.nota-stock svg{width:16px;height:16px;flex:none;margin-top:1px;stroke:var(--ambar);
  fill:none;stroke-width:1.7}
.nota-stock b{color:var(--tinta)}
.ayuda{font-size:12.5px;color:var(--tenue);line-height:1.5;margin:-4px 0 14px;max-width:74ch}
@media(max-width:640px){ .tabla-stock{margin:0 -18px;padding:0 18px} }



/* ── Stock de una tienda ───────────────────────────────────────────────────
   Una lista, un buscador y un filtro. Nada más: la pregunta es «cuánto tengo
   de esto» y se contesta con un número, no con cuatro columnas. */
.st-barra{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;
  margin:0 0 14px}
input.st-busca{width:100%;min-height:40px;padding:9px 13px;border-radius:10px;font-size:14px}
.st-fam > .uni-b{width:auto;gap:7px;padding:8px 13px;min-height:40px;font-size:13px;
  border-color:var(--linea);border-radius:10px;background:var(--sup);white-space:nowrap}
.st-fam[data-on="1"] > .uni-b{border-color:var(--acc);color:var(--acc)}
.st-fam .uni-p{left:auto;right:0;min-width:250px;max-height:340px;overflow:auto}
.st-fam .uni-p button{display:flex;align-items:center;justify-content:space-between;gap:12px}
.st-fam .uni-p button i{font-style:normal;font-size:10.5px;color:var(--flojo)}
.st-cab,.st-fila{display:grid;grid-template-columns:minmax(0,1fr) 128px 230px;gap:18px;
  align-items:center}
.st-cab{padding:0 0 9px;border-bottom:1px solid var(--linea);
  font-size:9.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--tenue)}
.st-cab span:nth-child(2){text-align:right}
.st-fila{padding:11px 0;border-bottom:1px solid var(--linea-2);transition:background .12s}
.st-fila:last-child{border-bottom:none}
.st-fila:hover{background:var(--hover)}
.st-nom{min-width:0}
.st-nom b{display:block;font-weight:500;font-size:14px;letter-spacing:-.008em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.st-nom i{display:block;font-style:normal;font-size:10.5px;color:var(--flojo);margin-top:2px}
.st-val{text-align:right;white-space:nowrap}
.st-val b{font-size:18px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.st-val span{font-size:11px;color:var(--flojo);margin-left:4px}
.st-sin{font-size:12px;color:var(--flojo)}
.st-mov{font-size:11.5px;color:var(--flojo);font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:760px){
  .st-barra{grid-template-columns:1fr}
  .st-cab{display:none}
  .st-fila{grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;padding:13px 0}
  .st-mov{grid-column:1/-1}
}

/* ── Inventario de tienda ──────────────────────────────────────────────────
   Esto no se usa sentado delante de un ordenador: se usa de pie en la tienda,
   con el móvil en una mano. Todo es más grande de lo que sería en una pantalla
   de escritorio y los objetivos de toque son amplios a propósito. */
.inv-tiendas{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.inv-tienda{display:flex;flex-direction:column;align-items:flex-start;gap:3px;
  min-height:70px;padding:14px 16px;border:1px solid var(--linea);border-radius:11px;
  background:var(--sup);font-family:inherit;text-align:left;cursor:pointer;transition:.12s}
.inv-tienda:hover{border-color:var(--acc);background:var(--acc-suave)}
.inv-tienda b{font-size:14.5px;font-weight:600;letter-spacing:-.01em;color:var(--tinta)}
.inv-tienda i{font-style:normal;font-size:11.5px;color:var(--flojo)}
.inv-tienda.abierto{border-color:var(--ambar)}
.inv-tienda.abierto i{color:var(--ambar)}

.inv-lista{display:grid}
.inv-fila{display:grid;grid-template-columns:minmax(0,1fr) 150px;gap:16px;align-items:center;
  padding:12px 0;border-bottom:1px solid var(--linea-2);transition:background .12s}
.inv-fila:last-child{border-bottom:none}
.inv-fila:hover{background:var(--hover)}
.inv-fila.hecho .inv-nom b{color:var(--tenue)}
.inv-nom{min-width:0}
.inv-nom b{display:block;font-weight:500;font-size:14.5px;letter-spacing:-.008em}
.inv-nom i{display:block;font-style:normal;font-size:11px;color:var(--flojo);margin-top:2px}
.inv-campo{display:grid;grid-template-columns:96px 40px;gap:8px;align-items:center;
  justify-content:end;margin:0;cursor:text}
.inv-campo i{font-style:normal;font-size:11.5px;color:var(--flojo);text-align:left}
input.inv-in{width:100%;min-height:44px;padding:8px 11px;text-align:right;border-radius:9px;
  font-variant-numeric:tabular-nums;font-size:17px;font-weight:500}
input.inv-in::-webkit-outer-spin-button,input.inv-in::-webkit-inner-spin-button{
  -webkit-appearance:none;margin:0}
input.inv-in{-moz-appearance:textfield}
.inv-fila.hecho input.inv-in{border-color:var(--verde);background:var(--verde-suave)}
input.inv-in:disabled{opacity:.6;cursor:default}
@media(max-width:640px){
  .inv-tiendas{grid-template-columns:1fr 1fr}
  .inv-fila{grid-template-columns:minmax(0,1fr) 128px;gap:10px}
  .inv-campo{grid-template-columns:80px 36px}
  input.inv-in{min-height:46px;font-size:17px}
}

/* ── Unidades de medida ── */
.fmt-filtros{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 16px}
.fmt-chip{width:auto;min-height:32px;padding:6px 13px;border:1px solid var(--linea);
  background:var(--sup);color:var(--tenue);border-radius:999px;font-size:12.5px;
  font-family:inherit;cursor:pointer;transition:.12s}
.fmt-chip:hover{border-color:var(--linea-fuerte);color:var(--tinta)}
.fmt-chip.on{background:var(--acc-suave);border-color:var(--acc);color:var(--acc);font-weight:500}
/* La tarjeta ocupa el ancho entero. Lo que se limita es la línea de texto, no
   el contenedor: dejar la tarjeta estrecha dejaba media pantalla en blanco, y
   dejar el texto suelto a lo ancho lo vuelve ilegible. */
.fmt-cab,.fmt-fila{display:grid;grid-template-columns:minmax(0,1fr) 156px 156px 208px;
  gap:22px;align-items:center}
.fmt-cab{padding:0 0 9px;border-bottom:1px solid var(--linea);
  font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--tenue)}
/* El rótulo se alinea con el NÚMERO, no con el borde de la columna: debajo de
   ese borde no cae la cifra, cae el selector de unidad, y el título quedaba
   corrido a la derecha. El relleno equivale al ancho de ese selector.
   Y la columna se ensancha lo justo para que el rótulo entero quepa en una
   línea: partido en dos se leía peor que acortado. */
.fmt-cab span:nth-child(2),.fmt-cab span:nth-child(3){text-align:right;padding-right:44px;
  white-space:nowrap}
.fmt-fila{padding:9px 0;border-bottom:1px solid var(--linea-2);transition:background .12s}
.fmt-fila:last-child{border-bottom:none}
.fmt-fila:hover{background:var(--hover)}
.fmt-fila.hecho .fmt-nom b{color:var(--tenue)}
.fmt-nom{min-width:0}
.fmt-nom b{display:block;font-weight:500;font-size:13.5px;letter-spacing:-.008em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fmt-omni{display:block;font-style:normal;font-size:10.5px;color:var(--flojo);margin-top:2px}
.fmt-omni.ojo{color:var(--ambar)}
/* Rejilla fija y no `flex`: la unidad cambia de ancho según el texto —«ml»,
   «L», «kg»— y con `justify-content:flex-end` arrastraba consigo la casilla del
   número. El resultado era una columna de cifras desalineada fila a fila. */
.fmt-campo{display:grid;grid-template-columns:74px 38px;gap:6px;align-items:center;
  justify-content:end;margin:0;cursor:text}
.fmt-campo i{font-style:normal;font-size:10.5px;color:var(--flojo);text-align:left}
input.fmt-in{width:100%;min-height:32px;padding:5px 9px;text-align:right;
  border-radius:7px;font-variant-numeric:tabular-nums;font-size:13.5px}
.fmt-cont{gap:3px}
/* Selector de unidad propio. El <select> del navegador se pinta con el aspecto
   del sistema operativo y desentona con todo lo demás. */
.uni{position:relative;display:block;width:100%}
.uni-b{display:flex;align-items:center;justify-content:space-between;gap:1px;
  width:100%;min-height:26px;padding:3px 3px 3px 5px;border:1px solid transparent;
  border-radius:6px;background:transparent;color:var(--tenue);font-family:inherit;
  font-size:11.5px;cursor:pointer;transition:.12s}
.uni-b:hover{background:var(--sup-2);border-color:var(--linea);color:var(--tinta)}
.uni-b svg{width:12px;height:12px;stroke-width:2.2;opacity:.65}
/* El `display:flex` de abajo gana por especificidad al `[hidden]{display:none}`
   del navegador, así que sin esta línea el menú no se oculta nunca: se abrían
   los cincuenta a la vez. */
.uni-p[hidden]{display:none}
.uni-p{position:absolute;top:calc(100% + 4px);right:0;z-index:40;display:flex;
  flex-direction:column;min-width:62px;padding:4px;background:var(--sup);
  border:1px solid var(--linea);border-radius:9px;
  box-shadow:0 8px 24px #0c0d0f1f,0 2px 6px #0c0d0f0f}
.uni-p button{width:100%;min-height:28px;padding:4px 10px;border:none;border-radius:6px;
  background:transparent;color:var(--tinta-2);font-family:inherit;font-size:12.5px;
  text-align:left;cursor:pointer;transition:.1s}
.uni-p button:hover{background:var(--hover)}
.uni-p button.on{background:var(--acc-suave);color:var(--acc);font-weight:500}
/* El selector de familia: mismo desplegable, pero ancho de botón y con el
   recuento de lo que queda pendiente en cada una. */
.fam-sel{width:auto;margin-left:4px}
.fam-sel > .uni-b{width:auto;gap:6px;padding:6px 10px;min-height:32px;font-size:12.5px;
  border-color:var(--linea);border-radius:999px;background:var(--sup)}
.fam-sel[data-on] > .uni-b{border-color:var(--acc);color:var(--acc)}
.fam-sel .uni-p{left:0;right:auto;min-width:268px;max-height:340px;overflow:auto}
.fam-sel .uni-p button{display:flex;align-items:center;justify-content:space-between;gap:12px}
.fam-sel .uni-p button i{font-style:normal;font-size:10.5px;color:var(--flojo);
  font-variant-numeric:tabular-nums}
.fam-sel .uni-p button.on i{color:var(--acc)}
/* Las flechitas del campo numérico ensucian una lista larga y nadie las usa. */
input.fmt-in::-webkit-outer-spin-button,input.fmt-in::-webkit-inner-spin-button{
  -webkit-appearance:none;margin:0}
input.fmt-in{-moz-appearance:textfield}
/* Interruptor de dos posiciones: se ve en cuál está y se puede volver. */
.fmt-sw{display:grid;grid-template-columns:1fr 1fr;gap:3px;padding:3px;
  background:var(--sup-2);border:1px solid var(--linea);border-radius:9px}
.fmt-sw button{width:100%;min-height:28px;padding:5px 8px;border:1px solid transparent;
  border-radius:6px;background:transparent;color:var(--flojo);font-family:inherit;
  font-size:11.5px;letter-spacing:.01em;white-space:nowrap;cursor:pointer;transition:.12s}
.fmt-sw button:hover{color:var(--tinta);background:var(--sup)}
.fmt-sw button[data-set="revisar"].on{background:var(--sup);color:var(--ambar);
  font-weight:500;border-color:var(--linea);box-shadow:0 1px 2px #0000000d}
.fmt-sw button[data-set="confirmado"].on{background:var(--verde);color:#fff;
  font-weight:500;border-color:var(--verde)}
.fmt-sw button[data-set="confirmado"].on:hover{background:var(--verde);color:#fff}
.fmt-pie{font-size:11.5px;color:var(--flojo);margin:16px 0 0;line-height:1.55}
@media(max-width:860px){
  .fmt-cab{display:none}
  .fmt-fila{grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 0}
  .fmt-nom{grid-column:1/-1}
  .fmt-campo{justify-content:flex-start}
  .fmt-campo::before{content:attr(data-et);font-size:10.5px;color:var(--flojo);margin-right:2px}
  .fmt-sw{grid-column:1/-1}
}

/* filas minimalistas, sin cuadrícula de tabla */
.filas{display:flex;flex-direction:column}
.linea{display:flex;align-items:center;gap:16px;padding:11px 0;border-bottom:1px solid var(--linea-2)}
.linea:last-child{border-bottom:none}
.linea .cuerpo{flex:1;min-width:0}
.linea .nm{font-size:14.5px;font-weight:500;line-height:1.35;letter-spacing:-.008em}
.linea .ds{color:var(--tenue);font-size:12.5px;line-height:1.45;margin-top:2px;max-width:62ch}
.linea .der{display:flex;align-items:center;gap:14px;flex:none}
.linea .pre{font-variant-numeric:tabular-nums;font-size:14.5px;font-weight:500;text-align:right;
  min-width:64px}
.linea .pre small{display:block;font-size:11px;color:var(--flojo);font-weight:400;margin-top:1px}
.linea input.pr{width:76px;min-height:30px;padding:4px 9px;text-align:right;
  font-variant-numeric:tabular-nums;font-size:13.5px}
.linea input.pr.propio{border-color:var(--acc);background:var(--acc-suave);color:var(--acc);font-weight:500}
.linea.off .nm{color:var(--flojo)}
.linea.off .ds{color:var(--flojo)}
/* ── Barra de trabajo de la carta ─────────────────────────────────────────
   Buscador, acción y leyenda en una sola línea, pegada al contenido que
   gobierna. Antes el buscador vivía arriba del todo, lejos de lo que filtra. */
.barra-carta{display:flex;align-items:center;gap:11px;flex-wrap:wrap;margin-bottom:16px}
.barra-carta .bus{margin:0;flex:0 1 260px}
.barra-carta .sp{flex:1}
.leyenda{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--tenue)}
.leyenda i{width:11px;height:11px;border-radius:3px;border:1px solid var(--acc);
  background:var(--acc-suave);flex:none}
@media(max-width:760px){.barra-carta .leyenda{display:none}}

/* Los controles de cada plato van juntos y separados del texto: precio,
   interruptor y acciones se leen como un bloque, no como cuatro cosas sueltas. */
.linea .der{padding-left:14px;border-left:1px solid var(--linea-2)}
.linea .ops{display:flex;gap:2px;opacity:0;transition:opacity .12s}
.linea:hover .ops{opacity:1}
.eti{font-size:11px;color:var(--flojo);letter-spacing:-.005em}

/* ══════ fichas de local ══════ */
.locales{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:14px}
.loc{background:var(--sup);border:1px solid var(--linea);border-radius:var(--r);
  box-shadow:var(--sombra);overflow:hidden;display:flex;flex-direction:column;
  transition:box-shadow .15s,border-color .15s}
.loc:hover{border-color:var(--linea-fuerte);box-shadow:0 8px 22px -12px rgba(13,17,23,.16)}
.loc .arriba{padding:16px 18px 14px;cursor:pointer;flex:1}
.loc .nom{font-size:16px;font-weight:600;letter-spacing:-.014em;line-height:1.25}
.loc .cifra{display:flex;align-items:baseline;gap:7px;margin-top:16px}
.loc .cifra b{font-size:26px;font-weight:600;letter-spacing:-.03em;font-variant-numeric:tabular-nums;
  line-height:1}
.loc .cifra span{font-size:12.5px;color:var(--tenue)}
.loc .barra{height:3px;background:var(--sup-2);border-radius:99px;margin-top:12px;overflow:hidden}
.loc .barra i{display:block;height:100%;background:var(--verde);border-radius:99px}
.loc.vacio-loc .barra i{background:var(--flojo)}
.loc .abajo{display:flex;gap:2px;padding:9px 12px;border-top:1px solid var(--linea-2);
  background:var(--sup-2)}
.loc .abajo button,.loc .abajo a{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;
  min-height:30px;border:none;background:none;color:var(--tinta-2);font-family:inherit;font-size:12.5px;
  cursor:pointer;border-radius:7px;text-decoration:none}
.loc .abajo button:hover,.loc .abajo a:hover{background:var(--sup);color:var(--acc)}
.loc .abajo svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.8}
.loc .est{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:500;
  padding:3px 9px;border-radius:99px;margin-top:11px}
.loc .est.pub{background:var(--verde-suave);color:var(--verde)}
.loc .est.no{background:var(--sup-2);color:var(--tenue)}

/* estado vacío con salida */
.arranque{background:var(--sup);border:1px dashed var(--linea);border-radius:var(--r);
  padding:38px 26px;text-align:center}
.arranque h3{font-size:17px;margin-bottom:6px}
.arranque p{color:var(--tenue);font-size:13.5px;margin:0 auto 20px;max-width:46ch;line-height:1.55}
.arranque .fila{justify-content:center}

/* QR */
.qr-caja{text-align:center;padding:8px 0 4px}
.qr-caja .qrbox{display:inline-block;padding:14px;background:#fff;border:1px solid var(--linea);
  border-radius:14px}
.qr-caja svg{display:block;width:148px;height:148px}
.qr-caja .pie{margin-top:14px;font-family:"IBM Plex Mono",monospace;font-size:12px;color:var(--tenue);
  word-break:break-all}

/* ══════ densidad y acciones ══════ */
.linea{gap:14px;padding:5px 0}
.linea .nm{font-size:14px;line-height:1.3}
.linea .ds{font-size:12px;line-height:1.35;margin-top:1px;max-width:70ch}
.linea .der{gap:10px}
.linea .pre{color:var(--tinta);font-weight:600;font-size:14.5px;min-width:62px}
.linea .pre small{color:var(--tenue);font-weight:400}
.linea input.pr{min-height:29px;font-weight:600;color:var(--tinta)}
.linea input.pr::placeholder{font-weight:400;color:var(--flojo)}
.linea .ops{opacity:1;gap:5px}
.op{width:29px;height:29px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--linea);background:var(--sup);border-radius:7px;cursor:pointer;padding:0;
  color:var(--tinta-2);transition:.12s;flex:none}
.op:hover{border-color:var(--acc);color:var(--acc);background:var(--acc-suave)}
.op.mal:hover{border-color:var(--rojo);color:var(--rojo);background:var(--rojo-suave)}
.op svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.op.mas{width:auto;padding:0 12px;gap:6px;font-family:inherit;font-size:12.5px;font-weight:600;
  color:var(--acc);border-color:var(--acc);background:var(--acc-suave)}
.op.mas:hover{background:var(--acc);color:#fff}
.card{padding:13px 18px;margin-bottom:10px}
.card-h{margin-bottom:6px;padding-bottom:8px;border-bottom:1px solid var(--linea-2)}
.kpis{margin-bottom:16px}

/* ══════ móvil ══════ */
html,body{max-width:100%;overflow-x:hidden}
@media(max-width:760px){
  .top{gap:9px;padding:0 13px}
  .miga{display:none}
  .top .etiq{display:none}
  .top .quien{font-size:12px;max-width:38vw;overflow:hidden;text-overflow:ellipsis;
    white-space:nowrap;flex:none}
  .top .marca img{height:19px}
  #b-salir{font-size:12px;padding:0 10px;min-height:32px;flex:none}

  .tope{padding:14px 15px 13px;flex-wrap:wrap;gap:11px}
  .tope h1{font-size:19px}
  .tope p{font-size:12.5px}
  .tope .der{margin-left:0;width:100%;gap:8px}
  .tope .der .btn,.tope .der a.btn{flex:1 1 auto;min-height:42px;font-size:13.5px}
  .bus{min-width:0;flex:1 1 100%;order:-1}

  /* los módulos, en un cajón que se abre con el botón de la barra */
  .hamb{display:inline-flex}
  .lat{position:fixed;top:var(--barra);left:0;bottom:0;z-index:92;
    width:78vw;max-width:296px;display:block;overflow-y:auto;
    padding:16px 0 34px;background:var(--sup);border-right:1px solid var(--linea);
    border-bottom:none;transform:translateX(-102%);transition:transform .22s ease;
    box-shadow:14px 0 34px -18px rgba(13,17,23,.34)}
  .lat.on{transform:none}
  .lat .grupo{display:block;padding:0 20px;margin:26px 0 9px}
  .lat .grupo:first-child{margin-top:0}
  .lat a{border-radius:0;padding:14px 20px;font-size:15px;gap:13px;margin-bottom:2px;
    border-left:3px solid transparent}
  .lat a svg{width:18px;height:18px}
  .lat a .n{font-size:12px}

  .cuerpo{padding:15px 15px 60px}
  .kpis{grid-template-columns:repeat(2,1fr);gap:7px}
  .rej,.locales{grid-template-columns:1fr;gap:11px}

  .linea{flex-wrap:wrap;gap:9px;padding:9px 0}
  .linea .cuerpo{flex:1 1 100%}
  .linea .der{width:100%;justify-content:flex-end;gap:12px}
  .linea input.pr{width:88px;min-height:40px;font-size:15px}
  .op{width:40px;height:40px}
  .op svg{width:17px;height:17px}
  .sw{width:44px;height:25px}
  .sw i::before{width:19px;height:19px}
  .sw input:checked + i::before{transform:translateX(19px)}

  .card{padding:12px 14px}
  .hoja{max-width:100%}
  .hoja.ancha{max-width:100%}
  .prev{height:56vh}
  .btn{min-height:42px}
}

/* ══════ vista previa de la carta ══════ */
.hoja.ancha{max-width:520px}
.prev{border:1px solid var(--linea);border-radius:16px;overflow:hidden;background:#fff;
  height:62vh;box-shadow:var(--sombra);position:relative}
.prev iframe{width:100%;height:100%;border:0;display:block;background:#fff}
.prev.cargando::after{content:"";position:absolute;inset:0;background:var(--sup-2);
  opacity:.55;pointer-events:none}
.prev-pie{display:flex;align-items:center;gap:8px;margin-top:9px;font-size:11.5px;color:var(--tenue)}
.prev-pie i{width:6px;height:6px;border-radius:50%;background:var(--verde);flex:none}


/* ── Filtro de grupos, de los que haya ────────────────────────────────────
   `.fmt-sw` no vale aquí: es un interruptor de dos posiciones, con rejilla
   fija de dos columnas y color solo para «revisar» y «confirmado». Con cinco
   botones se partía torcido y el activo no se distinguía del resto.        */
.grupos{display:flex;flex-wrap:wrap;gap:6px}
.grupos button{background:var(--sup);color:var(--tenue);border:1px solid var(--linea);
  border-radius:999px;padding:6px 13px;font-size:12.5px;font-family:inherit;font-weight:500;
  cursor:pointer;transition:.13s;white-space:nowrap}
.grupos button:hover{border-color:var(--acc);color:var(--tinta)}
.grupos button.on{background:var(--acc-suave);border-color:var(--acc);color:var(--acc);font-weight:600}

/* ── Reparto ────────────────────────────────────────────────────────────
   Una tarjeta por ruta, y dentro una fila por tienda: nombre, los siete días
   como botones grandes, la cobertura máxima bien visible y el interruptor de
   confirmación. 288px son los mismos siete botones de 36px que cabecean la
   columna de días: si uno de los dos números se toca, hay que tocar el otro,
   porque es lo que mantiene la cuadrícula alineada. */
.rep-cab,.rep-fila{display:grid;grid-template-columns:minmax(0,1.4fr) 288px 130px 190px;
  gap:16px;align-items:center}
.rep-cab{padding:0 0 9px;border-bottom:1px solid var(--linea);
  font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--tenue)}
.rep-dias-cab{display:grid;grid-template-columns:repeat(7,36px);gap:6px;text-align:center}
.rep-fila{padding:11px 0;border-bottom:1px solid var(--linea-2)}
.rep-fila:last-child{border-bottom:none}
/* Mientras no la confirme una persona, el dato es una suposición nuestra: la
   fila entera se tiñe de ámbar para que nadie lo confunda con un hecho. */
.rep-fila.provisional{background:var(--ambar-suave)}
.rep-nom{min-width:0}
.rep-nom b{font-weight:500;font-size:13.5px;letter-spacing:-.008em}
.rep-prov{display:inline-block;margin-left:8px;font-style:normal;font-size:9.5px;
  text-transform:uppercase;letter-spacing:.05em;color:var(--ambar);background:var(--ambar-suave);
  border:1px solid #9C731833;padding:2px 7px;border-radius:999px;vertical-align:middle}
.rep-dias{display:grid;grid-template-columns:repeat(7,36px);gap:6px}
.rep-dia{min-height:36px;border:1px solid var(--linea);border-radius:8px;background:var(--sup);
  color:var(--flojo);font-family:"IBM Plex Mono",monospace;font-size:12.5px;font-weight:600;
  cursor:pointer;transition:.12s}
.rep-dia:hover{border-color:var(--linea-fuerte);color:var(--tinta)}
.rep-dia.on{background:var(--verde);border-color:var(--verde);color:#fff}
.rep-dia.on:hover{filter:brightness(1.08)}
.rep-dia[disabled]{opacity:.5;pointer-events:none}
/* El número que manda en el pedido automático se ve sin tener que buscarlo:
   es la única cifra en negrita y de mayor tamaño de toda la fila. */
.rep-cob{font-size:13px;color:var(--tenue)}
.rep-cob b{font-family:"IBM Plex Mono",monospace;font-size:16px;color:var(--tinta);
  font-weight:600;margin-right:3px}
.rep-cob.vacio{color:var(--flojo)}
.rep-sw.fmt-sw{width:auto}
@media(max-width:860px){
  .rep-cab{display:none}
  .rep-fila{grid-template-columns:1fr 1fr;gap:10px 14px;padding:14px 0}
  .rep-nom{grid-column:1/-1}
  .rep-dias{grid-column:1/-1;grid-template-columns:repeat(7,1fr)}
  .rep-dia{min-height:40px}
  .rep-cob{grid-column:1/2}
  .rep-sw.fmt-sw{grid-column:2/3}
}
