/* Escala de esquinas y de aire (2026-09-06, a pedido de Margarita: "mejora el
   frontend"). Antes había 15 medidas de radio sueltas —2, 3, 4, 5, 6, 7, 9, 11,
   13, 16px...— crecidas una por una según lo que tocaba en el momento; eso es
   lo que hace que una pantalla se sienta "armada" en vez de "diseñada". Cuatro
   pasos, del más chico (una píldora) al más grande (una hoja), y todo lo que es
   CHROME de la app —botones, tarjetas, campos, la lista— pasa por aquí. Las
   fotos sueltas de pantallas puntuales (transporte, pedidos) no se tocaron: no
   son parte de lo que se pidió mejorar esta vuelta y tocarlas sin volver a
   probar cada una de esas pantallas es más riesgo que beneficio. */
:root{--t1:12px;--t2:14px;--t3:16px;--t4:20px;--t5:28px;
  --r-chico:8px; --r-medio:12px; --r-grande:16px; --r-pildora:999px;
  --fondo:#F1F4F6; --sup:#FFFFFF; --sup2:#E7ECEF;
  --tinta:#111A20; --tinta2:#4A5A66; --tinta3:#7E8E99;
  --linea:#D6DEE3; --acento:#0B6E8C; --acento-sup:#E2F0F5;
  --hay:#2E6F4E; --hay-sup:#E2F0E8; --nohay:#A84A16; --nohay-sup:#FBEADF; --rojo:#C5221F; --rojo-sup:#FCE8E6;
  --ojo:#8A6100; --ojo-sup:#FBF0D5;
  /* Gris para "opcional": más apagado que la tinta, pero todavía legible de
     verdad (4.5:1). `--tinta3` se queda en 3.4:1 y a pleno sol no se lee. */
  --suave:#687884;
  --sombra:0 1px 2px rgba(17,26,32,.06),0 8px 24px rgba(17,26,32,.06);
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
  --ui:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
@media (prefers-color-scheme:dark){:root{
  --fondo:#0D1317; --sup:#151E24; --sup2:#1E2A31; --tinta:#E7EFF3; --tinta2:#A2B2BC;
  --tinta3:#71838E; --linea:#26333B; --acento:#45B0CE; --acento-sup:#123039;
  --hay:#68C295; --hay-sup:#14291F; --nohay:#E39163; --nohay-sup:#2E1C11; --rojo:#F28B82; --rojo-sup:#3B1A18;
  --ojo:#E0BC63; --ojo-sup:#2B2312; --suave:#8496A2;
  --sombra:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.3);}}
:root[data-theme="dark"]{
  --fondo:#0D1317; --sup:#151E24; --sup2:#1E2A31; --tinta:#E7EFF3; --tinta2:#A2B2BC;
  --tinta3:#71838E; --linea:#26333B; --acento:#45B0CE; --acento-sup:#123039;
  --hay:#68C295; --hay-sup:#14291F; --nohay:#E39163; --nohay-sup:#2E1C11; --rojo:#F28B82; --rojo-sup:#3B1A18;
  --ojo:#E0BC63; --ojo-sup:#2B2312; --suave:#8496A2;}
*{box-sizing:border-box;margin:0}
html{-webkit-text-size-adjust:100%}
/* El que se desliza es `.marco`, NO la página entera. En el iPhone, cuando
   quien se desliza es la página, Safari retrae y estira su barra de
   direcciones a cada rato: en esa transición la cabecera pegajosa queda unos
   píxeles fuera de sitio y se ve un producto por detrás (el hueco que reportó
   Margarita con captura, 2026-08-19), la altura útil cambia sola —por eso
   "no ocupaba toda la pantalla"— y aparece el rebote elástico de los bordes.
   Con el deslizamiento adentro de una caja, la barra de Safari se queda
   quieta, la altura deja de moverse y la cabecera se comporta. Es además lo
   que hace que se sienta app y no página. */
html,body{height:100%}
body{background:var(--fondo);color:var(--tinta);font-family:var(--ui);
  -webkit-font-smoothing:antialiased;line-height:1.45;
  overflow:hidden;overscroll-behavior:none}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
a{color:inherit}
:focus-visible{outline:2px solid var(--acento);outline-offset:2px;border-radius:3px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---- tamaño de letra ----
   Margarita hacía zoom con los dedos para leer mejor, y ahí empezaba el lío:
   el zoom del navegador NO reacomoda el contenido, solo lo agranda, así que
   aparecía una segunda barra para moverse de lado y se perdía el acceso a
   "ver más" y a media pantalla (2026-08-19). `zoom` en CSS sí reacomoda: el
   texto crece y las líneas se reparten en el ancho de siempre, sin barras
   nuevas. Se probó antes de adoptarlo que la barra de botones de abajo
   (`position:fixed`) sigue clavada a la pantalla, que es lo que rompía el
   `transform:scale` según ya advertía el comentario de `.hoja-llena`.
   Se guarda en el celular (no en Cloudflare: no cuesta nada). */
:root{--escala:1}
/* ⚠️ El zoom va en el CONTENIDO, nunca en las cajas que miden la pantalla.
   `zoom` no agranda solo la letra: estira el elemento entero. Aplicado a
   `.marco` o a `.hoja-llena` —que miden `100dvh` y todo el ancho— la caja
   pasaba a medir un 130 % de la pantalla y se salía por abajo y por la
   derecha; como la página no se desliza, esa franja quedaba INALCANZABLE, y
   por eso Margarita no llegaba al "ver más" ni a los botones del final de una
   ficha (2026-08-19). Escalando en cambio a los HIJOS, la caja sigue midiendo
   una pantalla exacta y es su contenido el que crece y se desliza por dentro.
   `.acciones` queda fuera a propósito: es `position:fixed` y pegada al ancho
   de la pantalla, así que escalarla la sacaría de cuadro igual que antes. */
.marco > *:not(.hoja-llena), .hoja-llena > *:not(.acciones), .hoja > *{zoom:var(--escala)}
/* ⚠️ En el celular la app ocupa el ANCHO COMPLETO, sin tope. Antes eran 460 px
   fijos, y eso solo se nota cuando el navegador reporta una pantalla más ancha
   que eso — que es justo lo que pasa en el iPhone de Margarita (Safari le
   estaba dando ~745 px de ancho, por tener la página alejada o el modo de
   escritorio): la app se quedaba en sus 460 y dejaba franjas blancas a los
   lados (2026-08-20). En un teléfono normal 460 nunca limitaba nada, por eso
   pasó desapercibido tanto tiempo. */
.marco{max-width:100%;margin:0 auto;height:100dvh;overflow-y:auto;background:var(--sup);
  position:relative;box-shadow:var(--sombra);overscroll-behavior:contain}
/* Con una capa encima (ficha, hoja o visor), lo de atrás no se desliza: si no,
   el dedo movía la lista por debajo de la ficha abierta. */
.marco:has(.hoja-llena),body:has(.velo) .marco,body:has(.visor) .marco{overflow:hidden}
/* ⚠️ El ancho de la app CRECE con la pantalla. Estuvo clavado en 1080 px desde
   el principio, pensando en una laptop; en el monitor de Margarita eso dejaba
   casi medio metro de blanco a cada lado y la app se veía encerrada en una
   tira en el centro ("no me ocupa toda la pantalla", 2026-08-19).
   `min(1720px, 94vw)` deja siempre un respiro en los bordes pero aprovecha
   todo lo demás; el tope existe porque una fila de producto de dos metros
   tampoco se lee bien. */
@media screen and (min-width:900px){.marco{max-width:var(--ancho-app, min(1720px, 96vw));margin:24px auto;
  height:calc(100dvh - 48px);border-radius:10px}
  /* "Completo" quiere decir COMPLETO: sin los 24 px de margen ni las esquinas
     redondeadas, que hacían que siguiera pareciendo una tarjeta flotando. */
  .app-completa .marco{margin:0 auto;height:100dvh;border-radius:0}
  .app-completa .hoja-llena{top:0;height:100dvh;border-radius:0}}

/* ---------------- ingreso ---------------- */
.entrar{max-width:400px;margin:0 auto;padding:56px 22px;height:100dvh;overflow-y:auto;
  display:flex;flex-direction:column;justify-content:center;gap:16px}
.entrar .marca{font-size:var(--t3);font-weight:700;letter-spacing:.15em;color:var(--acento);text-align:center}
.entrar .sub{font-size:var(--t2);color:var(--tinta3);text-align:center;margin-bottom:14px}
.campo label{display:block;font-size:var(--t1);text-transform:uppercase;letter-spacing:.07em;
  color:var(--tinta3);font-weight:650;margin-bottom:5px}
.campo input{width:100%;background:var(--sup2);border:1px solid transparent;border-radius:8px;
  padding:13px;font:inherit;font-size:var(--t3);color:var(--tinta)}
.campo input:focus{outline:none;border-color:var(--acento);background:var(--sup)}
.entrar .b1{width:100%;padding:14px;border-radius:8px;background:var(--acento);color:#fff;
  font-size:var(--t3);font-weight:650;margin-top:4px}
.entrar .b1:disabled{opacity:.5}
.aviso-mal{background:var(--nohay-sup);color:var(--nohay);padding:11px 13px;border-radius:8px;
  font-size:var(--t2);font-weight:550}
.entrar .pie{font-size:var(--t1);color:var(--tinta3);text-align:center;line-height:1.5}

/* ---------------- cabecera ---------------- */
/* El hueco que dejaba esta cabecera al frenar un deslizamiento en el iPhone se
   arregló en la raíz —ahora el que se desliza es `.marco`, no la página— así
   que ya no hace falta el `translateZ(0)` que se probó el 2026-08-19: aquel
   parche atacaba el síntoma y encima creaba una capa de apilamiento de más. */
/* El `viewport-fit=cover` del <head> hace que la página llegue hasta el borde
   físico del iPhone — incluida la franja del reloj y la batería. Sin este
   relleno, los productos quedaban DEBAJO del reloj (se ve en la captura que
   mandó Margarita el 2026-08-19: el "7:07" encima de "ACEITE BOMBA VACIO").
   Va en la cabecera y no en `.marco` porque la cabecera es pegajosa: así esa
   franja queda pintada de su mismo color en vez de dejar ver la lista pasar
   por detrás. */
.cab{position:sticky;top:0;z-index:20;background:var(--sup);border-bottom:1px solid var(--linea);
  padding-top:env(safe-area-inset-top)}
/* `flex-wrap` no es adorno: con siete iconos, un celular de 360px necesitaba
   405px y los últimos se salían de la pantalla —por eso había que hacer zoom—.
   Cuando no caben, el grupo entero baja a su propia línea en vez de desbordar.
   Sin media query: bajan solo cuando de verdad no caben. */
.cab-fila{display:flex;align-items:center;gap:8px;padding:11px 14px 9px;flex-wrap:wrap}
.cab-iconos{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.logo{font-size:var(--t2);font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--acento)}
.logo span{color:var(--tinta3);font-weight:500;letter-spacing:.06em}
.cab-fila .sep{flex:1}
.bicono{flex:none;width:32px;height:32px;border-radius:var(--r-chico);border:1px solid var(--linea);
  display:grid;place-items:center;color:var(--tinta2)}
.bicono:active{background:var(--sup2)}
.quien{font-size:var(--t1);color:var(--tinta3);padding:0 14px 8px}
.bletra{flex:none;min-width:30px;height:26px;border-radius:7px;border:1px solid var(--linea);
  color:var(--tinta2);font-size:var(--t2);font-weight:700;line-height:1}
.bletra:active{background:var(--sup2)}
.bletra:disabled{opacity:.35}
.quien b{color:var(--tinta2);font-weight:650}

.buscar{padding:0 14px 11px;display:flex;gap:8px}
/* `min-width:0` por la misma razón que en las pestañas: sin él, la caja de
   buscar no se encoge por debajo del ancho de su texto y empuja al botón "+"
   fuera de la pantalla — se vio al probar la letra grande (2026-08-19). */
.buscar-caja{flex:1;min-width:0;display:flex;align-items:center;gap:9px;background:var(--sup2);
  border:1px solid transparent;border-radius:var(--r-chico);padding:11px 12px}
.buscar-caja:focus-within{border-color:var(--acento);background:var(--sup)}
.buscar-caja svg{flex:none;color:var(--tinta3)}
.buscar-caja input{flex:1;background:none;border:none;outline:none;color:var(--tinta);
  font-size:var(--t3);font-family:var(--ui);min-width:0}
.buscar-caja input::placeholder{color:var(--tinta3)}
.btn-mas{flex:none;width:44px;border-radius:var(--r-chico);background:var(--acento);color:#fff;
  font-size:var(--t4);line-height:1;display:grid;place-items:center}

.filtros{display:flex;gap:6px;overflow-x:auto;padding:0 14px 11px;scrollbar-width:none;
  align-items:center}
.filtros::-webkit-scrollbar{display:none}
/* El botón que abre la hoja. Es lo único fijo de la barra; todo lo demás son
   las etiquetas de lo que esté puesto en ese momento. */
/* `--tinta`, no `--tinta2`: cuando esto eran veinte burbujas, una más apagada
   pasaba; ahora es el único control de la barra y tiene que leerse a pleno sol
   (con `--tinta2` medía 2.95:1 en tema claro). */
.fbtn{flex:none;display:flex;align-items:center;gap:6px;font-size:var(--t1);font-weight:600;
  padding:6px 12px;border-radius:var(--r-pildora);border:1px solid var(--linea);color:var(--tinta)}
/* `.fbtn` la usan botones Y el <select> de Vendedor. Un `<button>` queda
   transparente por el reset global (`button{background:none}`) y se ve bien
   contra la barra; un `<select>` no tiene ese reset y se queda con su fondo
   nativo (blanco) — en tema oscuro, texto claro sobre blanco, ilegible
   (Margarita, 2026-09-13). Fondo propio solo para el `<select>`. */
select.fbtn{background:var(--sup2)}
/* El texto va en el color del fondo de la aplicación, no en blanco: en tema
   oscuro `--acento` es un azul claro y el blanco encima se pierde (2.51:1). */
.fbtn .cuantas{background:var(--acento);color:var(--sup);border-radius:20px;min-width:17px;
  height:17px;padding:0 5px;font-size:var(--t1);font-weight:700;display:grid;place-items:center}
.chip{flex:none;display:flex;align-items:center;gap:6px;font-size:var(--t1);font-weight:600;
  padding:6px 10px 6px 12px;border-radius:var(--r-pildora);white-space:nowrap;
  background:var(--acento-sup);color:var(--acento)}
.chip span[aria-hidden]{font-size:var(--t2);opacity:.75;line-height:1}
.chip:hover span[aria-hidden]{opacity:1}
/* `--suave` y no `--tinta3`: este último se queda en 3.38:1 y a pleno sol no se
   lee. `--suave` existe justo para lo apagado que aun así hay que poder leer. */
.chip.suelto{background:transparent;color:var(--suave);font-weight:500;
  text-decoration:underline;padding:6px 8px}
/* Texto solo para quien usa lector de pantalla: la equis sola no dice qué quita. */
.solo-lectores{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
/* Un <select> con la misma pinta que los campos de texto de las hojas. */
.campo-sel{width:100%;font:inherit;font-size:var(--t3);color:var(--tinta);
  background:var(--sup2);border:1px solid transparent;border-radius:var(--r-chico);padding:13px 10px}
.campo-sel:focus{outline:none;border-color:var(--acento);background:var(--sup)}

/* ---------------- lista ---------------- */
.conteo{padding:11px 14px 7px;font-size:var(--t1);color:var(--tinta3);
  text-transform:uppercase;letter-spacing:.07em;font-weight:600;
  display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.conteo .sep{flex:1}
.filtros-caja{position:relative}
.fila .tic{flex:none;width:22px;height:22px;border-radius:50%;border:2px solid var(--linea);
  display:grid;place-items:center;font-size:var(--t2);font-weight:800;color:#fff}
.fila.elegida{background:var(--acento-sup)}
.fila.elegida .tic{background:var(--acento);border-color:var(--acento)}
/* `min-width:0` es lo que hace que los puntos suspensivos funcionen de verdad:
   sin él un hijo de flex no se encoge por debajo de su contenido y el botón
   se salía de la pantalla en vez de cortar el texto. */
.borden{display:flex;align-items:center;gap:5px;color:var(--acento);font-weight:650;
  text-transform:none;letter-spacing:0;font-size:var(--t1);padding:2px 0;
  max-width:62%;min-width:0}
.borden b{font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* La lista era una tabla: filas pegadas, separadas solo por una rayita. Ahora
   cada producto es su propia tarjeta, con aire alrededor — se lee como algo
   que se toca, no como un renglón que se recorre. Sin sombra a propósito: en
   un Android barato una sombra por fila (y la lista tiene cientos) cuesta
   repintado; el borde de 1px ya separa la tarjeta del fondo sin ese costo. */
/* La lista no tenía su propio margen lateral: antes de ser tarjeta, la fila
   llegaba hasta el borde de la pantalla y no se notaba porque era solo una
   rayita. Ahora que tiene fondo y borde propio, necesita el mismo aire de los
   14px que ya llevan el buscador y los filtros justo arriba — si no, se ve
   pegada al costado (Margarita, 2026-09-06). */
#lista{padding:0 14px}
.fila{display:flex;gap:12px;align-items:center;width:100%;text-align:left;
  padding:13px 14px;background:var(--sup);border:1px solid var(--linea);
  border-radius:var(--r-medio);margin-bottom:8px}
.fila:active{background:var(--sup2);border-color:var(--tinta3)}
.miniatura{flex:none;width:58px;height:58px;border-radius:var(--r-chico);background:var(--sup2);
  object-fit:cover;border:1px solid var(--linea)}
.sinfoto{flex:none;width:58px;height:58px;border-radius:var(--r-chico);background:var(--sup2);
  border:1px dashed var(--linea);display:grid;place-items:center;color:var(--tinta3);
  font-size:var(--t1);text-align:center;line-height:1.25;font-weight:600}
.fila-txt{flex:1;min-width:0}
.codigo{font-family:var(--mono);font-size:var(--t2);font-weight:600;font-variant-numeric:tabular-nums}
.fila-nom{font-size:var(--t2);color:var(--tinta2);margin-top:2px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.fila-meta{display:flex;gap:5px;margin-top:6px;flex-wrap:wrap;align-items:center}
.pill{font-size:var(--t1);font-weight:650;letter-spacing:.04em;padding:3px 7px;border-radius:5px;
  text-transform:uppercase}
.pill.marca{background:var(--sup2);color:var(--tinta2)}
.pill.varias{background:var(--acento-sup);color:var(--acento)}
.pill.nohay{background:var(--nohay-sup);color:var(--nohay)}
.pill.nota{background:var(--ojo-sup);color:var(--ojo)}
/* Verde, el mismo de "sí hay": un excedente es material que está en la bodega
   ahora mismo. Junto a un "No hay" naranja se lee solo — la marca se acabó pero
   quedó un retazo, que es justo el caso en que esta píldora salva una venta. */
.pill.excedente{background:var(--hay-sup);color:var(--hay)}
/* La única píldora con fondo lleno: lo que viene en camino manda sobre lo que
   el vendedor puede prometer, y tiene que verse antes que nada. */
.pill.transito{background:var(--acento);color:var(--sup);
  display:inline-flex;align-items:center;gap:4px}
.pill.transito svg{opacity:.9}
/* El aviso de "esto viene en camino" dentro de la ficha, debajo del código.
   Discreto de color pero con su flecha: se ve que lleva a alguna parte. */
.viene{display:flex;align-items:center;gap:9px;width:100%;text-align:left;margin-top:9px;
  padding:9px 11px;border-radius:8px;background:var(--acento-sup);color:var(--acento);
  font-size:var(--t2)}
.viene b{font-weight:700}
.viene .de{display:block;font-size:var(--t1);opacity:.85;margin-top:1px}
.viene > svg:first-child{flex:none}
.viene .chev{flex:none;margin-left:auto;opacity:.7}
/* La banda de "hay algo nuevo" en Separado (Margarita, 2026-08-22): mismo
   color que `.viene`, pero es un BOTÓN — se toca para refrescar — así que
   lleva algo más de peso y una flechita que invita a tocar. */
.banda-nueva{display:flex;align-items:center;gap:9px;width:100%;text-align:left;
  margin-bottom:9px;padding:10px 12px;border-radius:8px;background:var(--acento-sup);
  color:var(--acento);font-size:var(--t2);font-weight:700}
.banda-nueva:active{opacity:.85}
.banda-nueva svg{flex:none}
.banda-nueva span{flex:1}
.viene:active{filter:brightness(.96)}
.mas{width:100%;padding:15px;font-size:var(--t2);font-weight:650;color:var(--acento)}
.cargando,.vacio{padding:40px 26px;text-align:center;color:var(--tinta3);font-size:var(--t2)}
/* Dentro de una FICHA, "sin ubicación" o "sin pagos" no es una pantalla vacía:
   es un renglón que dice que esa sección todavía no tiene nada. Con el relleno
   de 40 px y centrado, tres secciones vacías dejaban la ficha llena de huecos
   enormes y descuadrada (Margarita, 2026-08-19: "todo se ve desordenado, como
   que no hubo amor"). Aquí va como una línea discreta, alineada con el resto. */
.det-cuerpo .vacio{padding:2px 0 4px;text-align:left;font-size:var(--t2)}
.vacio .q{font-family:var(--mono);color:var(--tinta);font-weight:600}

/* ---------------- detalle ---------------- */
/* El detalle se fija a la PANTALLA, no a la página. Antes era `position:absolute`
   dentro del marco: si venías con la lista deslizada, el producto se abría a la
   altura del scroll y había que subir a mano para ver el código. */
/* ⚠️ SIN `transform` para centrar. Un elemento con transform se vuelve el marco
   de referencia de todo `position:fixed` que lleve dentro: la barra de acciones
   dejaba de pegarse a la PANTALLA y se pegaba a este marco —que además se
   desliza—, así que al bajar se plantaba en mitad del contenido y tapaba los
   botones de editar marca y borrar nota. Se centra con `inset` + `margin`, que
   no crea marco de referencia. */
.hoja-llena{position:fixed;top:0;left:0;right:0;margin-inline:auto;
  width:100%;max-width:100%;height:100dvh;background:var(--sup);z-index:30;
  display:flex;flex-direction:column;overflow-y:auto}
/* En celular las dos columnas no existen: los envoltorios desaparecen y todo
   vuelve a caer en una sola tira, como estaba. */
.col-foto,.col-info{display:contents}
.divisor{display:none}
/* En el celular la foto también respira por los lados. El margen se le puso a
   la columna, y en celular esa columna no existe (`display:contents`), así que
   la foto seguía pegada al filo de la pantalla (Margarita, 2026-08-20). Aquí
   va en los propios bloques: la franja de la marca, la foto y el pie de
   "subida por…" quedan apilados sin hueco, así que se redondean solo las
   esquinas de afuera y el conjunto se lee como una tarjeta. */
@media(max-width:899px){
  .det-producto .franja,
  .det-producto .foto-caja,
  .det-producto .credito,
  .det-producto .det-sinfoto,
  /* El bloque de fotos por marca perdió su margen al mudarse a la columna de
     la foto: antes lo heredaba de `.det-cuerpo`, y ahí ya no hay ninguno. */
  .det-producto .bloque-marcas{margin-inline:12px}

  /* ---- la barra anclada con el código ----
     En el celular la ficha es una sola tira larguísima y, al bajar, se perdía
     de vista de qué producto era. Va justo debajo de "Buscar" —que también es
     pegajoso, de ahí el `top` con su altura— y en un tono distinto para que se
     lea como barra y no como parte del contenido. */
  .det-producto{display:flex;flex-direction:column}
  .det-producto .det-cab{order:1}
  .det-producto .ident-prod{order:2;position:sticky;top:var(--alto-cab, 46px);z-index:6;
    background:var(--sup2);border-bottom:1px solid var(--linea);
    padding:9px 14px}
  .det-producto .ident-prod .det-cod{font-size:var(--t4);line-height:1.1}
  /* La descripción, a una sola línea con puntos suspensivos: la barra tiene que
     seguir siendo una barra, no crecer a tres renglones y comerse la pantalla. */
  .det-producto .ident-prod .det-nom{font-size:var(--t2);margin-top:2px;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* Un respiro entre la barra y lo primero que viene debajo: pegada al filo
     de la foto tapaba el borde de arriba y se sentía encimada. */
  .det-producto .franja,
  .det-producto .foto-caja:first-of-type,
  .det-producto .det-sinfoto{margin-top:10px}
  .det-producto .franja{order:3}
  .det-producto .foto-caja,.det-producto .det-sinfoto{order:4}
  .det-producto .credito{order:5}
  .det-producto .bloque-marcas{order:6}
  .det-producto .det-cuerpo{order:7}
  .det-producto .acciones{order:8}
  .det-producto .franja{border-radius:10px 10px 0 0;
    border:1px solid var(--linea);border-bottom:0}
  .det-producto .foto-caja > .det-foto{border-inline:1px solid var(--linea)}
  .det-producto .credito{border-radius:0 0 10px 10px;
    border:1px solid var(--linea);border-top:0}
  .det-producto .det-sinfoto{border-radius:10px;border:1px solid var(--linea)}
}
/* Mismo motivo que en `.cab`: la ficha va pegada al borde físico del teléfono,
   así que el botón "Volver" quedaba debajo del reloj. */
.det-cab{position:sticky;top:0;background:var(--sup);border-bottom:1px solid var(--linea);
  display:flex;align-items:center;padding:10px 12px;z-index:5;
  padding-top:calc(10px + env(safe-area-inset-top))}
/* 44 px de alto y algo de aire a los lados: medía 29 y estaba pegado al borde
   de arriba, donde en un celular compite con la barra del navegador — por eso
   "no me permite regresar" era en realidad un toque que caía fuera
   (Margarita, 2026-09-21). Es el mismo fallo que los botones de cámara. */
.volver{display:flex;align-items:center;gap:5px;font-size:var(--t2);color:var(--acento);
  font-weight:600;padding:10px 10px 10px 4px;min-height:44px;margin-left:-4px}
.foto-caja{position:relative}
.det-foto{width:100%;aspect-ratio:1;object-fit:contain;background:var(--sup2);display:block;
  cursor:zoom-in}
/* Lupa y giro sobre la foto. Fondo semiopaco propio: encima de una foto puede
   haber cualquier color, y un icono a secas desaparece sobre lo claro. */
.lupa,.gira{position:absolute;bottom:10px;width:36px;height:36px;border-radius:50%;
  background:rgba(10,18,23,.62);color:#fff;display:grid;place-items:center;
  backdrop-filter:blur(3px)}
.lupa{right:10px}
/* De derecha a izquierda: lupa, voltear, girar a la derecha, girar a la
   izquierda. Los dos giros quedan pegados, que es como se usan. */
.gira{right:54px}
.gira.g3{right:98px}
.gira.g4{right:142px}
.lupa:active,.gira:active{background:rgba(10,18,23,.85)}
.gira[disabled]{opacity:.5}
/* Aparece solo cuando la foto está girada o volteada. Va al lado contrario de
   los redondos, para que no se toque sin querer al andar girando. */
.guardar-asi{position:absolute;bottom:10px;left:10px;padding:0 14px;height:36px;
  border-radius:18px;background:var(--acento);color:#fff;font-size:var(--t2);font-weight:650}
.guardar-asi:disabled{opacity:.6}
/* La foto girada tiene que seguir cabiendo en su cuadro. `contain` ya la
   encoge, y el giro es una transformación visual que no cambia la caja. */
.det-foto{transition:transform .18s ease}

/* ---------------- foto a pantalla completa ---------------- */
/* Tres franjas apiladas: título, foto y herramientas. La del medio es la única
   que se desliza, así que la barra de botones nunca se va con la foto cuando
   está acercada — que era el defecto de la versión anterior. */
.visor{position:fixed;inset:0;z-index:90;background:rgba(8,13,16,.96);
  display:flex;flex-direction:column}
.visor-cab{display:flex;align-items:center;gap:12px;padding:12px 14px;
  color:#cfd8dd;font-size:var(--t1);flex:none}
.visor-tit{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.visor-x{flex:none;width:36px;height:36px;border-radius:50%;
  background:rgba(255,255,255,.1);color:#fff;display:grid;place-items:center;font-size:var(--t3)}
.visor-cont{flex:none;color:#8fa0aa;font-variant-numeric:tabular-nums}
${""/* Flotan sobre la foto, no dentro de `.visor-marco`: si vivieran ahí,
      acercar el zoom las movería con la foto en vez de quedarse fijas a los
      bordes de la pantalla, que es donde una flecha de "siguiente" tiene que
      estar siempre. `disabled` en la primera/última en vez de esconderlas:
      así la mano no "salta" de sitio al llegar a una punta de la galería. */""}
.visor-nav{position:fixed;top:50%;transform:translateY(-50%);z-index:91;
  width:42px;height:42px;border-radius:50%;background:rgba(255,255,255,.1);
  color:#fff;display:grid;place-items:center}
.visor-nav:disabled{opacity:.25;cursor:default}
.visor-nav-izq{left:10px}
.visor-nav-der{right:10px}
.visor-marco{flex:1;min-height:0;overflow:auto;display:flex;padding:6px}
/* `margin:auto` centra la foto mientras quepa, y deja de centrarla en cuanto
   hay que deslizar — que es el comportamiento correcto en los dos casos. */
.visor-lienzo{position:relative;margin:auto;flex:none}
.visor-lienzo img{position:absolute;left:50%;top:50%;display:block;
  transform-origin:center;max-width:none;max-height:none}
/* Fondo propio y opaco en las dos franjas: el velo del visor deja pasar un 4%,
   y con la aplicación detrás los botones se leían encima de un "Enviar por
   WhatsApp" fantasma. */
.visor-cab,.visor-barra{background:#0A1216}
.visor-barra{flex:none;display:flex;flex-wrap:wrap;justify-content:center;
  align-items:center;gap:8px;padding:10px 14px calc(10px + env(safe-area-inset-bottom))}
.visor-barra .grupo{display:flex;gap:2px;background:rgba(255,255,255,.09);
  border-radius:9px;padding:3px}
.visor-barra button{width:38px;height:36px;border-radius:7px;color:#e7eff3;
  display:grid;place-items:center}
.visor-barra button:hover{background:rgba(255,255,255,.14)}
.visor-guardar{flex:none;height:32px;padding:0 14px;border-radius:16px;font-size:var(--t2);
  font-weight:650;background:var(--acento);color:#fff}
.visor-guardar:disabled{opacity:.6}
.det-sinfoto{width:100%;min-height:190px;background:var(--sup2);display:flex;flex-direction:column;
  align-items:center;justify-content:center;text-align:center;color:var(--tinta3);
  padding:30px 26px;gap:7px;border-bottom:1px solid var(--linea)}
.det-sinfoto strong{font-size:var(--t2);color:var(--tinta2);font-weight:600}
.det-sinfoto span{font-size:var(--t1);max-width:230px}
.franja{display:flex;align-items:center;gap:9px;padding:7px 16px;background:var(--sup2);
  border-bottom:1px solid var(--linea);font-size:var(--t1)}
.franja b{font-weight:700}
.franja .est{font-size:var(--t1);font-weight:650}
/* Aquí viven las acciones de la foto que se está viendo. En pantallas angostas
   los botones bajan juntos a una segunda línea en vez de partir el nombre de
   quien la subió en dos renglones. */
.credito{font-size:var(--t1);color:var(--tinta3);padding:7px 16px;background:var(--sup2);
  border-bottom:1px solid var(--linea);display:flex;gap:6px 12px;align-items:center;
  flex-wrap:wrap}
.credito > svg{flex:none}
/* Cada sección con su raya y su aire. Antes iban todas pegadas con un hueco de
   17px, y las vacías —"todavía no hay ninguna"— se quedaban en dos renglones:
   fichas, videos y ubicación se leían como un solo amontonamiento. La raya dice
   dónde termina una cosa y empieza otra sin tener que dibujar cajas. */
.det-cuerpo{padding:15px 16px 132px;display:flex;flex-direction:column;gap:0}
.det-cuerpo > div{padding:18px 0}
.det-cuerpo > div + div{border-top:1px solid var(--linea)}
.det-cuerpo > div:first-child{padding-top:0}
/* El bloque de borrar no es una sección más: se separa del resto. */
.det-cuerpo > .peligro{margin-top:12px;border-top:none}
.det-cod{font-family:var(--mono);font-size:var(--t5);font-weight:700;font-variant-numeric:tabular-nums;line-height:1}
.det-nom{font-size:var(--t3);line-height:1.35;margin-top:7px;text-wrap:balance}
.editnom{font-size:var(--t1);color:var(--acento);font-weight:650;margin-top:6px;padding:2px 0}
.peligro{border:1px solid var(--linea);border-radius:8px;padding:12px 13px}
.peligro p{font-size:var(--t1);color:var(--tinta3);margin:0 0 10px;line-height:1.45}
.peligro button{width:100%;padding:11px;border-radius:7px;font-size:var(--t2);font-weight:650;
  color:var(--nohay);background:var(--nohay-sup)}
.tablita{overflow-x:auto;border:1px solid var(--linea);border-radius:8px}
.tablita table{border-collapse:collapse;width:100%;font-size:var(--t1);
  font-variant-numeric:tabular-nums}
.tablita th{background:var(--sup2);color:var(--tinta3);font-size:var(--t1);font-weight:700;
  text-transform:uppercase;letter-spacing:.05em;padding:7px 9px;text-align:right;white-space:nowrap}
.tablita th:first-child{text-align:left}
.tablita td{padding:7px 9px;text-align:right;border-top:1px solid var(--linea);white-space:nowrap}
.tablita td.quien{text-align:left;font-weight:600}
.diahist{font-size:var(--t1);font-weight:700;letter-spacing:.06em;color:var(--tinta3);
  text-transform:uppercase;padding:12px 0 5px}
.mov{display:flex;align-items:flex-start;gap:9px;padding:8px 0;border-top:1px solid var(--linea)}
.mov b{font-size:var(--t2);font-weight:600}
/* Un enlace de YouTube es una sola palabra de 80 caracteres: sin esto no puede
   partirse, empuja la fila a 614px dentro de una caja de 343px, y se lleva de
   corbata el ancho del panel entero. */
.mov .quien2{display:block;font-size:var(--t1);color:var(--tinta3);margin-top:2px;
  overflow-wrap:anywhere}
.mcod{font-family:var(--mono);font-size:var(--t1);color:var(--acento);margin-left:6px;
  cursor:pointer;font-weight:700}
/* ⚠️ El prefijo `t-` no es adorno. Estos nombres salen del tipo de movimiento
   ("enlace", "nota", ...) y sin prefijo chocaban con componentes que ya existían
   con ese mismo nombre: `.enlace` (la fila de un video en la ficha) le metía al
   puntito `width:100%`, borde y relleno, y lo convertía en un ladrillo azul de
   343px; `.nota` hacía lo suyo, más callado. Un nombre de clase genérico es
   territorio compartido: al inventar uno nuevo, prefijarlo. */
.mtipo{flex:none;width:8px;height:8px;border-radius:50%;margin-top:6px;background:var(--tinta3)}
.mtipo.t-foto{background:var(--acento)} .mtipo.t-ficha{background:var(--nohay)}
.mtipo.t-nota{background:var(--ojo)} .mtipo.t-stock{background:var(--hay)}
.mtipo.t-admin{background:#8B5CF6} .mtipo.t-enlace{background:#0EA5E9}
.listacat{border:1px solid var(--linea);border-radius:8px;max-height:45vh;overflow-y:auto;
  margin-bottom:14px}
.fila-cat{display:flex;align-items:center;gap:9px;padding:10px 12px;border-top:1px solid var(--linea)}
.fila-cat:first-child{border-top:none}
.fila-cat > span{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.fila-cat b{font-size:var(--t2);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fila-cat span span{font-size:var(--t1);color:var(--tinta3)}
/* `flex-wrap` a propósito (Margarita, 2026-09-06: "no se entiende" en la ficha
   de provincia). Cuando el rótulo lleva además "En bodega" y una píldora de
   estado con texto largo ("En el transporte, hace 3 días — falta la guía"),
   sin esto la píldora se partía a la fuerza DENTRO de su propia caja en vez de
   bajar entera a su propia línea. */
.rotulo{font-size:var(--t1);text-transform:uppercase;letter-spacing:.07em;color:var(--tinta3);
  font-weight:650;margin-bottom:8px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
/* El aire y la raya de cada sección ya los pone `.det-cuerpo > div` (más
   arriba). Lo que faltaba era que en la ficha de separado cada rótulo fuera
   HERMANO suelto de su propio contenido: la raya caía entre el título y lo
   que titulaba, y cada mitad contaba como una sección aparte. De ahí salían
   las "secciones más grandes y más pequeñas" y los "botones por aquí y por
   allá" que notó Margarita (2026-08-19). El arreglo está en el HTML —cada
   sección envuelta en su `<div class="secc">`— y aquí solo se anula el
   relleno doble de los bloques que quedan anidados. */
.secc > .rotulo{margin-bottom:8px}
.secc > div{padding:0 !important;border-top:0 !important}
/* Los pasos de Provincia son <details>/<summary> nativos (2026-09-18, mockup
   "Opción A" aprobado por Margarita): colapsados los que ya se resolvieron o
   todavía no tocan, abierto solo el paso de ahora. Sin JS para abrir/cerrar —
   el navegador ya lo hace, con teclado incluido. `.rotulo{display:flex}` le
   quita a <summary> su `display:list-item` de siempre (y con él, su
   triángulo nativo), así que aquí se dibuja uno propio con `::after`. */
.acc-paso > summary.rotulo{cursor:pointer;list-style:none}
.acc-paso > summary.rotulo::-webkit-details-marker{display:none}
.acc-paso > summary.rotulo::after{content:"";width:8px;height:8px;margin-left:auto;
  border-right:2px solid var(--tinta3);border-bottom:2px solid var(--tinta3);
  transform:rotate(45deg);transition:transform .15s;flex-shrink:0}
.acc-paso[open] > summary.rotulo::after{transform:rotate(-135deg)}
/* Colapsado, la línea de "última edición" (que vive DENTRO del <summary>)
   se ve un poco más suave — es lo único que hace falta leer sin abrir. */
.acc-paso:not([open]) > summary.rotulo{margin-bottom:0}
/* El paso ABIERTO se marca con un borde propio (2026-09-18, para parecerse
   al mockup "Opción A" que aprobó Margarita: la tarjeta del paso de ahora
   tenía un borde distinto de las demás, no solo el contenido desplegado). */
.acc-paso[open]{border-color:var(--acento) !important;border-width:1.5px}
/* El círculo con el número o el visto, al frente de cada tarjeta-paso
   (2026-09-18) — el MISMO color que ya usa `.paso-n.hecho` en la tira de
   arriba (`--acento`), para no inventar un segundo color de "completo". */
.paso-circ{width:19px;height:19px;border-radius:50%;display:inline-flex;
  align-items:center;justify-content:center;font-size:var(--t1);font-weight:700;
  border:1.5px solid var(--tinta3);color:var(--tinta3);flex-shrink:0;margin-right:2px}
.paso-circ.hecho{background:var(--hay);border-color:var(--hay);color:#fff}
/* La última fila de datos de una sección no lleva raya abajo: la sección
   siguiente ya trae la suya, y las dos juntas se veían como un renglón doble. */
.secc > .datos{border-top:0}
.secc > .datos > .dato:last-child{border-bottom:0}
/* --- Envío: vista compacta y edición en la misma tarjeta (2026-09-03) ---
   Once renglones apilados pasaron a rejilla. Clases propias (`env-*`): `.dato`
   es una FILA de `<dl>` con raya abajo, pensada para leer de arriba a abajo —
   justo lo que aquí se quería dejar de hacer. */
/* Al EDITAR, la guía no cambia de forma: los mismos bloques, con campos donde
   antes había texto. Por eso `.env-in` y `.env-f` viven junto a `.env-b*` y no
   en un juego de clases aparte. */
.env-in{width:100%;min-width:0;font:inherit;font-size:var(--t2);padding:6px 9px;
  border:1px solid var(--linea);border-radius:6px;background:var(--fondo);color:var(--tinta)}
.env-in:focus{outline:2px solid var(--acento);outline-offset:-1px;border-color:var(--acento)}
.env-in-n{font-size:var(--t3);font-weight:700;margin-bottom:6px}
/* Las opciones en fila y no apiladas: tres renglones por un grupo de dos o tres
   opciones cortas era la mitad del alto del bloque. Se envuelven si no entran. */
/* Una caja del embalaje: medidas y fotos en la MISMA tarjeta. Clase propia
   (`caja-b`): `.reparto`, que es lo que había, es una fila de una sola línea y
   aquí abajo cuelga una galería. */
/* La lista de cajas dejadas en el transporte. Clase propia: son casillas con
   fecha debajo, no la fila de `.reparto` ni el par de `.de-casilla`. */
.ent-cajas{display:flex;flex-direction:column;gap:6px;margin-bottom:2px}
/* La fila de una caja: la casilla (afirmar que se dejó) y el NOMBRE (abrir sus
   fotos) son dos cosas distintas y por eso son dos controles (2026-09-20).
   El recuadro y el verde de "ya dejada" viven en la fila, no en el <label>. */
.ent-caja-fila{display:flex;gap:9px;align-items:center;flex-wrap:wrap;font-size:var(--t2);
  border:1px solid var(--linea);border-radius:8px;padding:8px 10px}
.ent-caja-fila.puesta{border-color:var(--hay);background:var(--hay-sup)}
/* La casilla, con área de dedo (Margarita, 2026-09-21: *"igual que cuando
   tengo que escoger la caja con el checkbox"*). El cuadrito mide 22 px pero el
   <label> que lo envuelve mide 44: se puede tocar alrededor y marca igual. */
.ent-caja{display:flex;gap:9px;align-items:center;cursor:pointer;flex:none;margin:0;
  min-width:44px;min-height:44px;justify-content:center;margin:-8px 0 -8px -6px}
.ent-caja input{width:22px;height:22px;flex:none;accent-color:var(--hay);margin:0}
/* Subrayado: es un enlace y tiene que parecerlo. El número de fotos al lado
   evita el toque en vano cuando la caja no tiene ninguna. */
.ent-caja-ver{flex:1;min-width:0;text-align:left;background:none;border:0;padding:0;
  font:inherit;font-size:var(--t2);font-weight:650;color:var(--acento);
  text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.ent-caja-ver.sinfotos{color:var(--tinta3);text-decoration:none;cursor:default;font-weight:500}
.ent-caja-n{display:inline-block;margin-left:6px;font-size:var(--t1);font-weight:700;
  background:var(--acento-sup);color:var(--acento);border-radius:999px;padding:1px 7px;
  text-decoration:none}
.ent-caja-cuando{flex-basis:100%;font-style:normal;font-size:var(--t1);color:var(--tinta3)}
/* Dos columnas cuando hay sitio (2026-09-18, Margarita: "para que no se
   pierda mucho espacio visual") — una sola caja ocupando el ancho entero
   dejaba mucho aire vacío al lado. En una columna angosta (celular) se
   apilan, igual que antes. */
.cajas-grid{display:grid;grid-template-columns:1fr;gap:9px;margin-bottom:9px}
@media (min-width:520px){.cajas-grid{grid-template-columns:1fr 1fr}}
.caja-b{border:1px solid var(--linea);border-radius:9px;padding:9px 11px}
.caja-cab{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:6px}
/* Las fotos de una caja: TRES por fila, no una tira que se desliza de lado
   (2026-09-19). Son pocas y se quieren ver todas juntas. La miniatura se
   estira al ancho de su columna en vez de quedarse en 74px fijos, así la
   tarjeta no desperdicia espacio en escritorio. */
.galeria.galeria-caja{display:grid;grid-template-columns:repeat(3,1fr);
  gap:8px;overflow:visible}
.galeria.galeria-caja .cel{flex:none;min-width:0}
.galeria.galeria-caja img{width:100%;height:auto;aspect-ratio:1/1;object-fit:cover}
/* El crédito puede ocupar DOS renglones y no se recorta: antes tenía el ancho
   de la miniatura (74px) con puntos suspensivos, y por eso se leía
   "Margarita · 3…" sin decir nunca el día ni la hora. */
.galeria.galeria-caja .foto-credito{max-width:none;white-space:normal;
  line-height:1.25;font-size:var(--t1)}
.caja-cab > b{font-size:var(--t2)}
.caja-med{font-size:var(--t1);color:var(--tinta2)}
.env-ops{display:flex;flex-wrap:wrap;gap:4px 16px;margin-bottom:6px}
.env-ops .de-casilla{margin-bottom:0}
/* Dos campos cortos por fila. En celular se apilan: 375px no da para dos. */
.env-par{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
@media screen and (max-width:520px){.env-par{grid-template-columns:1fr}}
.env-f{display:block;margin-top:6px;min-width:0}
.env-f > i{font-style:normal;color:var(--tinta3);font-size:var(--t1);display:block;margin-bottom:2px}
.env-f[hidden]{display:none}
.env-ayuda{font-size:var(--t1);color:var(--tinta3);line-height:1.35;margin-top:7px}
.env-edita .de-casilla{margin-bottom:8px;font-size:var(--t2)}
/* La vista del envío copia la GUÍA IMPRESA: mismos bloques, mismos títulos,
   mismo orden. Lo que se revisa en pantalla es lo que sale en el papel. */
/* DOS columnas fijas, no `auto-fit`: la guía impresa tiene dos, y con `auto-fit`
   en la tarjeta ancha salían tres — dejaba de parecerse justo a lo que se
   quería copiar. En celular, una sola. */
.env-guia{display:grid;grid-template-columns:1fr;
  border:1px solid var(--linea);border-radius:9px;overflow:hidden;background:var(--sup)}
@media screen and (min-width:900px){.env-guia{grid-template-columns:1fr 1fr}}
.env-b{padding:10px 13px;border-top:1px solid var(--linea);border-left:1px solid var(--linea);
  min-width:0}
/* La primera fila no lleva raya arriba, ni la primera columna raya a la
   izquierda: el borde de la caja ya está. Con `auto-fit` no se sabe cuántas
   columnas hay, así que se resuelve tapando las rayas del borde exterior. */
/* En una columna, ninguna lleva raya izquierda y solo la primera pierde la de
   arriba. En dos columnas, las impares pierden la izquierda y las dos primeras
   la de arriba. */
.env-guia > .env-b{border-left:0}
.env-guia > .env-b:first-child{border-top:0}
/* --------------------- panel de escritorio de Separado y Envíos de Provincia:
   estilos COMUNES a las dos vistas (tarjetas resumen, tabla, chips de estado).
   Viven aqui, SIN media query, porque Envios los reutiliza tambien en su propia
   vista de tarjetas para celular (2026-09-07) — antes esto vivia adentro del
   bloque de 900px y por eso Envios se veia en bruto, sin caja ni bordes, en
   cuanto dejo de estar completamente oculto por debajo de esa medida. ---------- */
.panel-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:2px 0 14px}
/* Dos columnas en celular: con las cuatro en una sola fila, una etiqueta
   larga como "EN EL TRANSPORTE, SIN GUÍA" quedaba en una columna de ~80px y
   se partía en cinco líneas encima de un número casi invisible. Era la
   razón real por la que esta pestaña entera se escondía por debajo de los
   900px (2026-09-07) — la tabla de abajo ya se deslizaba de lado sin
   problema, solo esto necesitaba su propio arreglo. */
@media (max-width:700px){.panel-tiles{grid-template-columns:repeat(2,1fr)}}
/* Son <button>, no <div>: se tocan para filtrar (Margarita, 2026-08-22).
   Reinicio de lo que trae un botón por defecto — texto a la izquierda,
   sin el borde de foco azul del navegador, cursor de "esto se toca". */
.tile{display:block;width:100%;text-align:left;font:inherit;cursor:pointer;
  border:1px solid var(--linea);border-radius:10px;padding:12px 14px;background:var(--sup)}
.tile:hover{border-color:var(--acento)}
.tile-lbl{display:block;font-size:var(--t1);font-weight:650;letter-spacing:.06em;
  text-transform:uppercase;color:var(--tinta3);margin-bottom:5px}
.tile b{font-size:var(--t4);font-variant-numeric:tabular-nums;font-weight:750;color:var(--tinta)}
.tile b.ok{color:var(--hay)} .tile b.off{color:var(--nohay)} .tile b.inv{color:var(--ojo)}
.tile-pct{font-size:var(--t1);color:var(--tinta3);margin-left:6px}
/* "Por entregar" es LA tarjeta (Margarita, 2026-08-22: "me quiero quedar
   con el total por entregar como principal") — más grande siempre, sea
   cual sea la que esté activa. El COLOR de fondo ya no va aquí (ver
   `.tile-activa` abajo): antes se veía "prendida" aunque no fuera la
   tarjeta que describe el filtro puesto, y eso es justo lo que confundía. */
.tile-principal b{font-size:var(--t5)}
/* Cuál tarjeta describe el filtro puesto ahora mismo — se pone de su
   propio color; el resto se queda en blanco/neutro (Margarita, 2026-08-22:
   "debería cambiar de color cuando está seleccionado y permanecer blanco
   cuando no"). Un color por tarjeta, no uno solo genérico, porque cada una
   ya tiene su propio significado (verde/rojo/ámbar) en el número que
   muestra. */
.tile-activa[data-tile="porentregar"]{border-color:var(--ojo);background:var(--ojo-sup)}
.tile-activa[data-tile="porentregar"] .tile-lbl{color:var(--ojo)}
.tile-activa[data-tile="pagado"]{border-color:var(--hay);background:var(--hay-sup)}
.tile-activa[data-tile="pagado"] .tile-lbl{color:var(--hay)}
.tile-activa[data-tile="sinpagar"]{border-color:var(--nohay);background:var(--nohay-sup)}
.tile-activa[data-tile="sinpagar"] .tile-lbl{color:var(--nohay)}
.tile-activa[data-tile="entregado"]{border-color:var(--hay);background:var(--hay-sup)}
.tile-activa[data-tile="entregado"] .tile-lbl{color:var(--hay)}
/* Las mismas cuatro tiles de Provincia, ahora que filtran de verdad (plan del
   2026-09-07) — cada una con el color que ya trae su propio número
   (`.tile b.ok/.inv/.off`, arriba), no uno inventado. */
.tile-activa[data-tile="puedeDespachar"]{border-color:var(--hay);background:var(--hay-sup)}
.tile-activa[data-tile="puedeDespachar"] .tile-lbl{color:var(--hay)}
.tile-activa[data-tile="porEmbalar"]{border-color:var(--ojo);background:var(--ojo-sup)}
.tile-activa[data-tile="porEmbalar"] .tile-lbl{color:var(--ojo)}
.tile-activa[data-tile="enTransporteSinGuia"]{border-color:var(--nohay);background:var(--nohay-sup)}
.tile-activa[data-tile="enTransporteSinGuia"] .tile-lbl{color:var(--nohay)}
.tile-activa[data-tile="terminados"]{border-color:var(--hay);background:var(--hay-sup)}
.tile-activa[data-tile="terminados"] .tile-lbl{color:var(--hay)}

.panel-tabla-caja{overflow-x:auto;border:1px solid var(--linea);border-radius:10px}
.panel-tabla{width:100%;border-collapse:collapse;font-size:var(--t2)}
.panel-tabla th,.panel-tabla td{padding:9px 12px;text-align:left;vertical-align:top;
  border-bottom:1px solid var(--linea)}
/* Las filas se veían "desentradas" (Margarita, 2026-08-22): Documento y a
   veces Estado de pago ocupan dos líneas, y con TODO alineado arriba, el
   pill de Entrega y la fecha de las filas de una sola línea quedaban pegados
   al techo de la fila en vez de centrados con el resto — se leía disparejo
   bajando la vista por la tabla. Centrado vertical solo en el CUERPO: los
   encabezados (con sus botones de orden y sus filtros) se quedan arriba. */
.panel-tabla tbody td{vertical-align:middle}
.panel-tabla thead tr:first-child th{background:var(--sup2);font-size:var(--t1);font-weight:700;
  letter-spacing:.03em;text-transform:uppercase;color:var(--tinta2);white-space:nowrap}
.panel-tabla thead tr:first-child th button{font:inherit;font-weight:700;letter-spacing:.03em;
  text-transform:uppercase;color:var(--tinta2);padding:0}
.panel-tabla thead tr:first-child th button:hover{color:var(--acento)}
.panel-tabla .flecha{color:var(--acento);font-weight:700}
.panel-tabla .sep-th{color:var(--tinta3);margin:0 3px;font-weight:400;text-transform:none}
.panel-tabla .fila-filtros th{background:var(--sup);padding:6px 10px}
.panel-tabla .fila-filtros input,.panel-tabla .fila-filtros select{width:100%;
  font:inherit;font-size:var(--t1);border:1px solid var(--linea);border-radius:6px;
  padding:5px 7px;background:var(--fondo);color:var(--tinta)}
/* La columna Fecha salía muy ancha (Margarita, 2026-08-22: "la puedes
   ajustar un poco más, está muy ancha"). La tabla mide sus columnas por el
   contenido más ancho de cada una, y ese `<select>` cuenta el nombre del
   mes más largo entre sus opciones ("agosto 2026") para decidir cuánto
   espacio pedir — aunque la mayoría del tiempo solo muestre "Todos". Con un
   ancho propio más chico dejó de pedir de más; medido: la columna bajó de
   147px a 88px, sin cortar ni el encabezado ni la fecha corta de las filas
   ("22 ago"), que es lo que de verdad la sostiene ahora. */
#fpmes{width:4.5em}
/* Acá vivía `.th-fecha-filtro{display:flex}` — el mismo fallo que tenía
   Acciones (Margarita, 2026-08-22: "en la columna de fecha, la primera fila
   donde está el filtro de Todos, le pasa lo mismo"): un `<th>` con flex deja
   de ser celda de tabla y su borde se dibuja fuera de sitio. Sobraba además:
   era para acomodar los DOS campos de fecha de antes; ahora hay un solo
   `<select>`, y `.fila-filtros select{width:100%}` ya lo estira. Regla 15. */
/* Rayado cebra: la fila se distingue por su propio fondo, no solo por la
   línea de 1px (Margarita, 2026-08-22: "no salen las líneas como de una
   tabla, salen como pegado encima").

   ⚠️ Este comentario decía que la culpa era del escalado de pantalla de
   Windows. Era mi diagnóstico y estaba MAL: la culpa era de dos celdas con
   `display:flex` (`.td-acc` y `.th-fecha-filtro`), que dejaban de ser
   celdas de tabla y dibujaban su borde fuera de sitio — ver la regla 15 de
   la habilidad. Ya están arregladas. El rayado se queda igual, pero como
   ayuda de lectura, que es lo que siempre fue: una tabla de siete columnas
   se sigue de corrido mejor con las filas alternadas. */
.panel-tabla tbody tr{cursor:pointer}
.panel-tabla tbody tr:nth-child(even){background:var(--fondo)}
.panel-tabla tbody tr:hover{background:var(--sup2)}
.td-doc b{display:block;font-size:var(--t2)}
.td-sub{display:block;font-size:var(--t1);color:var(--tinta3);margin-top:1px}
/* Nunca `display:flex`/`grid` sobre un `<td>` o un `<tr>` (regla 15 de la
   habilidad `catalogo-friorecord`, aprendida a golpes el 2026-08-22 con la
   columna Acciones y con `.th-fecha-filtro`): un `<td>` así deja de ser
   celda de tabla y su borde se dibuja fuera de sitio. La rejilla de tres
   espacios que hubo acá para alinear el botón "Entregar" ya no hace falta:
   esta tercera vuelta de rediseño ("al tocar Factura 358177 que abra la
   foto... la columna de acciones podría llamarse Producto... una nueva
   columna Estado") repartió esos tres controles en TRES columnas propias
   — Documento (el número mismo abre la foto), Producto y Estado — así que
   cada celda vuelve a llevar un solo control y se alinea sola, sin rejilla.

   Cómo se comprueba que ninguna celda quedó con flex/grid, sin depender de
   nombres de clase: `document.querySelectorAll('td,th,tr').forEach(el =>
   { const q = el.tagName==='TR'?'table-row':'table-cell'; if
   (getComputedStyle(el).display !== q) console.log(el.tagName,
   el.className) })`. */
/* Sin ícono (Margarita, 2026-08-22: "donde dice factura no hay necesidad
   de que salga una cámara") — el color de acento y el subrayado al pasar
   el mouse ya avisan que se puede tocar.

   `width:fit-content` (mismo día, segundo aviso: "se me abre la ficha no
   solo cuando estoy sobre la palabra factura, sino en la parte superior de
   la celda... la idea es que SOLO se abra la galería cuando estoy sobre la
   palabra"). `.td-doc b{display:block}` de abajo ya lo pone en su propia
   línea, pero un bloque sin ancho propio se ESTIRA a ocupar todo el ancho
   del padre — así que cualquier clic en esa franja, incluso a la derecha
   del texto donde no hay ninguna letra, contaba como "tocar la factura" y
   abría la galería en vez de dejar pasar el clic a la fila. Con
   `fit-content` el cuadro que se puede tocar mide justo lo que mide el
   texto — se queda en su línea, pero ya no se estira de más. */
.td-doc-clic{color:var(--acento);cursor:pointer;width:fit-content}
.td-doc-clic:hover{text-decoration:underline}
/* Segundo intento de forma el mismo día. El primero (una pill redondeada
   sin borde ni ícono) seguía leyéndose como nota: "no tiene ni borde ni un
   ícono, la gente cree que es una nota y es un botón... quiero que se vea
   realmente como un botón, así como el de Producto". Es la MISMA receta de
   `.chip-foto` de arriba (borde 1px, radio 999px, ícono+texto, 3px 9px) —
   nada nuevo que inventar, solo copiarla — y solo cambia de color según el
   estado en vez del acento fijo de `.chip-foto`. */
.chip-estado{display:inline-flex;align-items:center;gap:5px;font-size:var(--t1);
  font-weight:650;border-radius:999px;padding:3px 9px;line-height:1.45;border:1px solid}
.chip-estado-inv{color:var(--ojo);border-color:var(--ojo)}
.chip-estado-ok{color:var(--hay);border-color:var(--hay)}
/* "Por entregar" se toca (abre el atajo); "Entregado" no lleva
   `role="button"` y por eso no le entra esta regla. */
.chip-estado[role="button"]{cursor:pointer}
/* Al pasar el mouse por encima, se rellena de su propio color en vez de
   quedarse solo con el borde (Margarita, 2026-08-23: "debería estar todo
   de amarillo... para que se vea más como un botón"). El texto se pone
   blanco encima del amarillo sólido para que se siga leyendo ("las letras
   irian blancas cuando esta en ese modo para que se lea"). */
.chip-estado[role="button"]:hover{background:var(--ojo);border-color:var(--ojo);color:#fff}
.chip-estado[role="button"]:active{background:var(--sup2);color:var(--ojo);border-color:var(--ojo)}
/* El pago, en PASTILLA y no en texto suelto (Margarita, 2026-09-21: *"tienes
   que hacer más obvio el pago en esta pantalla"*). Era letra de color entre
   otras letras de color, y "Pago no registrado" —el caso que frena todo— salía
   en el gris más apagado de la tabla: el más importante era el que menos se
   veía. Ahora el que falta es el que grita. */
.estado-pago{font-size:var(--t1);font-weight:700;display:inline-block;
  padding:4px 10px;border-radius:999px;white-space:nowrap}
.estado-pago-ok{color:var(--hay);background:var(--hay-sup)}
.estado-pago-pendiente{color:var(--ojo);background:var(--ojo-sup)}
.estado-pago-ninguno{color:var(--nohay);background:var(--nohay-sup)}
/* Clicable solo cuando falta pagar (`puedeCobrarDesdeLista`) — registra el
   pago sin abrir la ficha, mismo espíritu que `chip-estado[role="button"]`. */
.estado-pago[role="button"]{cursor:pointer;text-decoration:underline;text-underline-offset:2px}

@media screen and (min-width:900px){
  .env-guia > .env-b:nth-child(even){border-left:1px solid var(--linea)}
  .env-guia > .env-b:nth-child(2){border-top:0}
}
.env-b-ancho{grid-column:1 / -1;border-left:0}
.env-b-guia .env-bn{letter-spacing:.04em}
.env-bt{font-size:var(--t1);font-weight:700;text-transform:uppercase;letter-spacing:.09em;
  color:var(--tinta3);margin-bottom:3px}
.env-bn{font-size:var(--t3);font-weight:750;line-height:1.2;margin-bottom:3px;overflow-wrap:anywhere}
.env-bc{font-size:var(--t1);line-height:1.4;overflow-wrap:anywhere}
.env-bc > i{font-style:normal;color:var(--tinta3)}
/* De solo lectura (sin permiso para editar): raya al costado y letra en el
   mismo rojo con el que se imprime en la etiqueta — se lee como un AVISO y
   NO como un campo, que es justo lo que confundia cuando tenia recuadro. */
.env-aviso{font-size:var(--t2);font-weight:700;color:var(--nohay);
  border-left:3px solid var(--nohay);padding:2px 0 2px 10px;margin-top:4px}
/* Editable en la ficha misma: aqui el recuadro SI corresponde, porque ahora de
   verdad se escribe encima (2026-09-20). Crece con el texto —nunca una barra
   de scroll dentro de dos renglones— y va en el rojo del papel para que se
   reconozca lo que se esta escribiendo. */
.env-aviso-edit{display:block;width:100%;font:inherit;font-size:var(--t2);font-weight:700;
  color:var(--nohay);background:var(--sup);border:1px solid var(--linea);border-radius:7px;
  padding:8px 10px;margin-top:4px;resize:none;overflow:hidden;min-height:40px}
.env-aviso-edit::placeholder{color:var(--tinta3);font-weight:500}
.env-aviso-edit:focus{outline:none;border-color:var(--acento);
  box-shadow:0 0 0 3px var(--acento-sup)}
.env-bt-ayuda{font-weight:400;text-transform:none;letter-spacing:0;color:var(--tinta3)}
.env-guardado{font-size:var(--t1);color:var(--hay);margin-top:3px}
.env-rejilla{display:grid;gap:10px 20px;
  grid-template-columns:repeat(auto-fit, minmax(185px, 1fr))}
.env-d{min-width:0;display:flex;flex-direction:column;gap:2px}
.env-d > span{font-size:var(--t1);font-weight:650;letter-spacing:.05em;
  text-transform:uppercase;color:var(--tinta3)}
.env-d > b{font-size:var(--t2);font-weight:600;line-height:1.35;overflow-wrap:anywhere}
/* Lo que se lee de corrido —quién recibe, a dónde va, la nota— ocupa la fila
   entera en vez de partirse en una columna angosta. */
.env-ancho{grid-column:1 / -1}
.env-flete{background:var(--ojo-sup);border:1px solid var(--ojo);
  border-radius:8px;padding:9px 11px}
.env-flete > span{color:var(--ojo)}
/* ⚠️ Los `!important` son la excepción a `.secc > div{padding:0;border-top:0}`,
   que alcanza a cualquier hijo directo de la sección — `#envform` lo es. Sin
   esto el formulario quedaba pegado a la vista de arriba y sin raya que los
   separara. Misma trampa que ya mordió a `.aviso-fact`. */
.secc > .env-form{margin-top:0}
/* Los botones se quedan a la vista mientras se llena: en el celular el
   formulario mide ~1.300px y tener que bajar hasta el final para guardar es
   media pantalla de fricción por cada envío. Mismo criterio que el editor de
   direcciones. */
.env-form .hoja-btns{position:sticky;bottom:0;display:flex;gap:10px;
  justify-content:flex-end;flex-wrap:wrap;margin-top:14px;
  padding:11px 0 calc(11px + env(safe-area-inset-bottom));
  background:var(--sup);border-top:1px solid var(--linea)}
/* El formulario, también en rejilla. Clases propias `ef-*`: `.campo` y
   `.de-campo` ya existen pero con otro aire y otro tamaño de rótulo, y este
   convive DENTRO de una tarjeta, no en una hoja. */
.ef-rejilla{display:grid;gap:12px 18px;
  grid-template-columns:repeat(auto-fit, minmax(210px, 1fr))}
.ef-campo{min-width:0;display:flex;flex-direction:column;gap:4px}
/* Sin esto, `display:flex` le gana a `hidden` y el bloque de "¿quién retira en
   la matriz?" se vería siempre. */
.ef-campo[hidden],.ef-rejilla[hidden]{display:none}
.ef-campo > span{font-size:var(--t1);font-weight:650;letter-spacing:.05em;
  text-transform:uppercase;color:var(--tinta3);display:flex;align-items:center;gap:5px}
.ef-campo > em{font-size:var(--t1);font-style:normal;color:var(--tinta3);line-height:1.35}
.ef-campo .buscar-caja{margin-bottom:0}
.ef-campo .campo-sel{margin-bottom:0;width:100%}
.ef-ancho{grid-column:1 / -1}
.ef-flete{background:var(--ojo-sup);border:1px solid var(--ojo);
  border-radius:9px;padding:11px 13px;margin-top:14px}
.ef-tit{font-size:var(--t1);font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ojo);margin-bottom:8px}
/* El aviso de "la factura va a otro nombre" (2026-08-30). Clase propia, y
   ADEMÁS una excepción explícita a la regla de arriba: `.secc > div` le borra
   el relleno a cualquier hijo directo con `!important`, así que un recuadro
   que necesita aire por dentro tiene que pedirlo apuntando a su clase —
   `.secc > .aviso-fact` (dos clases) le gana a `.secc > div` (clase + tipo).
   Es la misma trampa que dejó la ficha de transporte pegada al borde; aquí
   está a la vista en vez de descubrirse mirando la pantalla. */
/* Los DOS `!important` son la excepción completa: `.secc > div` anula el
   relleno Y la raya de arriba. Sin el segundo, la caja quedaba con tres lados
   y sin línea superior — medido en el navegador (`borderTopWidth: 0px`), no
   mirando la captura. */
.secc > .aviso-fact{background:var(--ojo-sup);border:1px solid var(--ojo);
  border-top:1px solid var(--ojo) !important;
  border-radius:9px;padding:11px 13px !important;margin-top:12px}
.aviso-fact > .rotulo{color:var(--ojo);margin-bottom:6px}
.aviso-fact .datos{border-top:0}
.aviso-fact .dato:last-child{border-bottom:0}

/* ---- la ficha de separado, en TARJETAS ----
   Margarita mandó un mockup y lo primero que dijo al ver la versión con rayas
   fue "no se ve como la foto que te envié": tenía razón, su diseño agrupa cada
   sección en su propia tarjeta, no en franjas separadas por líneas. Una
   tarjeta cierra el grupo por los cuatro lados y hace evidente qué pertenece
   a qué; la raya sola solo dice "aquí cambia algo".
   El fondo de la ficha se hunde a `--fondo` y las tarjetas quedan en `--sup`:
   así funciona en los dos temas sin invertir nada a mano — en claro son
   blancas sobre gris, en oscuro son grises sobre casi negro. */
.ficha-sep{background:var(--fondo)}
.ficha-sep .det-cab{background:var(--fondo)}
/* Sin `>` (no solo hijo directo): desde que Factura/Ubicación/Retiro viven
   dentro de `.fotos-tres` (Margarita, 2026-08-23), la tarjeta ya no está
   siempre pegada a `.det-cuerpo` — sigue siendo tarjeta a cualquier
   profundidad. No cambia nada de lo que ya había: todo lo demás sigue siendo
   hijo directo igual que antes. */
.ficha-sep .det-cuerpo .secc{
  background:var(--sup);border:1px solid var(--linea);border-radius:12px;
  padding:13px 12px !important;margin-bottom:10px;border-top:1px solid var(--linea) !important}
/* En cuanto hay sitio, la tarjeta respira más por dentro. */
@media (min-width:420px){.ficha-sep .det-cuerpo .secc{padding:14px 16px !important}}
.ficha-sep .det-cuerpo > div{border-top:0}
/* `.fotos-tres` es un wrapper sin relleno propio: sus tres tarjetas ya traen
   el suyo. Sin este `padding:0` heredaba el `padding:18px 0` genérico de
   `.det-cuerpo > div` (línea de arriba) — de más en CUALQUIER tamaño, no solo
   en escritorio, así que va aquí y no dentro de la media query. */
.ficha-sep .det-cuerpo > .fotos-tres{padding:0}
/* ============ El tablero de la ficha de provincia (2026-09-03) ============
   Margarita mandó dibujado cómo quiere que se lea una factura de envío a
   provincia: *"me gustaría que mi página se vea así de organizado, claro, los
   estilos, todo"*. Lo que ese dibujo tiene y la ficha no tenía son dos cosas —
   el despacho contado como una secuencia numerada, y las tarjetas repartidas
   en columnas en vez de una tira larga hacia abajo.

   Todo esto cuelga de `.tablero`, que SOLO se le pone a `.det-cuerpo` cuando el
   separado es de provincia. Un separado local no cambia ni un píxel. */
/* Las tarjetas se ordenan con `order`, sin tocar el HTML: así el orden del DOM
   sigue siendo el de siempre y el que cambia es solo el de la pantalla. Para
   que `order` alcance a Factura/Embalaje/Ubicación —que viven dentro de
   `.fotos-tres`— esa caja desaparece con `display:contents`: sus hijas pasan a
   ser hijas de la rejilla.
   ⚠️ TODO ESTE BLOQUE VA DENTRO DE `@media screen`. En papel `.det-cuerpo`
   también es un flex (las dos columnas de la hoja, ver `@media print`), y ahí
   el `order` SÍ le hacía caso: la cabecera con el número de factura se iba al
   final de la hoja, debajo de todo. Se vio en un PDF de verdad, no en pantalla. */
@media screen{
.tablero .fotos-tres{display:contents}
/* El orden completo (2026-09-18, a pedido de Margarita, dibujado a mano):
   encabezado, Vendedor, Pago, la tira de pasos, y RECIÉN ahí los pasos de
   verdad (1 · Foto de la factura, 2 · Embalaje, 3 · Envío, 4 · En ruta,
   5 · Entrega) — Vendedor y Pago son cosas que se CONSULTAN en cualquier
   momento, no pasos que se hacen en orden, así que van juntas arriba, antes
   de la secuencia de trabajo. */
.tablero > .sep-cab{order:1}
.tablero > .viene{order:2}
.tablero .secc-vendedor{order:3}
.tablero .secc-pago{order:4}
.tablero .prov-pasos{order:5}
/* Paso 1 · Foto de la factura — antes vivía pegada al encabezado; ahora es
   una tarjeta más de la secuencia, la primera después de la tira. */
.tablero .secc-factura-foto{order:6}
.tablero .secc-embalaje{order:7}
.tablero .secc-ubicacion{order:8}
.tablero .secc-contacto{order:9}
.tablero .secc-envio-prov{order:10}
.tablero .secc-imprimir{order:11}
/* `.secc-retiro` es la tarjeta que cierra el despacho (cédula en retiro
   matriz, o entrega en transporte) — la comparten los dos casos. */
.tablero .secc-retiro{order:12}
.tablero .secc-resumen{order:12}
.tablero .papel-der .secc{order:13}
.tablero .ficha-pie{order:14}
.tablero > .solo-papel{order:15}
.tablero > .pie-acciones{order:16}
.tablero > .hoja-btns{order:17}
.tablero > .peligro{order:18}
}

/* --- La tira de los cinco pasos --- */
/* Se desliza de lado si no entra: en un celular angosto cinco columnas no
   caben, y apretarlas hasta que quepan parte los nombres en tres renglones. */
.prov-pasos{background:var(--sup);border:1px solid var(--linea);border-radius:12px;
  margin-bottom:10px;overflow-x:auto}
.ficha-sep .det-cuerpo > .prov-pasos{padding:14px 12px}
.prov-pasos ol{display:flex;list-style:none;margin:0;padding:0;min-width:420px}
.prov-paso{flex:1 1 0;min-width:0;position:relative;text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:6px}
/* Las dos mitades de la línea que une un paso con el siguiente. Van por detrás
   del número (`z-index` en `.paso-n`) y los extremos no dibujan su mitad de
   afuera. Se pintan del color del acento hasta donde llegó el despacho. */
.prov-paso::before,.prov-paso::after{content:"";position:absolute;top:12px;
  height:2px;background:var(--linea)}
.prov-paso::before{left:0;right:calc(50% + 15px)}
.prov-paso::after{left:calc(50% + 15px);right:0}
.prov-paso:first-child::before,.prov-paso:last-child::after{display:none}
.prov-paso.hecho::before,.prov-paso.hecho::after{background:var(--hay)}
.prov-paso.ahora::before{background:var(--acento)}
.paso-n{position:relative;z-index:1;width:26px;height:26px;border-radius:50%;
  display:grid;place-items:center;font-size:var(--t1);font-weight:700;
  background:var(--sup2);color:var(--tinta3);border:1.5px solid var(--linea)}
.prov-paso.hecho .paso-n{background:var(--hay);border-color:var(--hay);color:#fff}
.prov-paso.ahora .paso-n{background:var(--sup);border-color:var(--acento);
  color:var(--acento);box-shadow:0 0 0 3px var(--acento-sup)}
.paso-t{display:block;padding:0 4px;min-width:0}
.paso-t b{display:block;font-size:var(--t1);font-weight:650;line-height:1.2}
.paso-t em{display:block;font-style:normal;font-size:var(--t1);color:var(--tinta3);margin-top:1px}
.prov-paso.pend .paso-t b{color:var(--tinta3);font-weight:600}
.prov-paso.ahora .paso-t b{color:var(--acento)}
/* En el celular la tira entra ENTERA y no se desliza de lado: el paso 5 es
   justo el que suele estar en curso, y tener que arrastrar para verlo deja
   fuera de pantalla lo único que se venía a mirar. Lo que se va es el "quién"
   de cada paso —que igual está escrito debajo, en "Qué falta"—, no el nombre. */
@media (max-width:560px){
  .prov-pasos ol{min-width:0}
  .prov-pasos{overflow-x:visible}
  .paso-t em{display:none}
  .paso-t b{font-size:var(--t1)}
  .paso-t{padding:0 2px}
  .paso-n{width:23px;height:23px;font-size:var(--t1)}
  .prov-paso::before,.prov-paso::after{top:10.5px}
  .prov-paso::before{right:calc(50% + 13px)}
  .prov-paso::after{left:calc(50% + 13px)}
}

/* --- Paso 1: la cabecera y la foto del papel, en la misma tarjeta --- */
/* La fila de arriba (número, cliente, fecha, estado) sigue siendo la de
   siempre; lo que cambia es que la tarjeta deja de ser esa fila y pasa a
   contenerla, para poder colgarle la galería debajo. */
.sep-cab.sep-cab-prov{display:block}
.sep-cab-fila{display:flex;align-items:flex-start;gap:12px}
.sep-cab-fotos{margin-top:13px;padding-top:12px;border-top:1px solid var(--linea)}

/* --- Paso 5: las tres partes de la entrega, en fila cuando hay sitio --- */
.ent-cols{display:flex;flex-direction:column;gap:16px}

/* --- "Quién hace este paso", al lado del título de la tarjeta --- */
.quien-paso{font-size:var(--t1);font-weight:650;letter-spacing:.04em;text-transform:none;
  color:var(--tinta3);background:var(--sup2);border-radius:999px;padding:2px 8px;flex:none}

/* "Última edición" por etapa (2026-09-07): una línea chica bajo el rótulo de
   cada tarjeta, no un panel aparte — "cada cosa tiene una etapa... quién fue
   el último en editar esa etapa", a pedido de Margarita. */
.ultima-edicion{display:block;font-size:var(--t1);color:var(--tinta3);margin:-2px 0 8px}

/* --- El sello del pago --- */
/* ⚠️ El `!important` es la excepción a `.secc > div{padding:0 !important}` (más
   arriba): sin él el sello se queda sin relleno y el color se le pega a la
   letra. Dos clases le ganan a `.secc > div` (clase + tipo). */
/* 2026-09-18: se mudó de tarjeta propia (hijo directo de `.secc`) a una
   insignia chica dentro del rótulo de "Pago" — ya no depende de esa
   relación, así se ve igual colapsada o abierta. */
.pago-sello{display:inline-block;padding:5px 13px !important;border-radius:999px;
  font-size:var(--t1);font-weight:750;letter-spacing:.06em;
  text-transform:uppercase}
.pago-sello.ok{background:var(--hay-sup);color:var(--hay)}
.pago-sello.no{background:var(--nohay-sup);color:var(--nohay)}
/* El CAJÓN ENTERO del pago se pinta, no solo el sello (Margarita, 2026-09-21:
   *"si está que todo el cajón se ponga rojo y que si está pagado que todo se
   ponga verde"*). Colapsado, el paso de pago es una línea entre varias
   iguales y el sello chiquito se perdía; con el fondo de color se ve desde
   lejos y sin leer. Va con !important en el borde porque `.acc-paso[open]`
   pinta el suyo con !important cuando el paso está abierto. */
/* ⚠️ Va con los TRES niveles ('.ficha-sep .det-cuerpo .secc-pago'): el fondo
   de la tarjeta lo pone '.ficha-sep .det-cuerpo .secc', y una clase suelta
   pierde contra eso aunque sea más específica de nombre. El primer intento
   (2026-09-21) solo logró cambiar el borde —que sí lleva !important— y el
   fondo se quedó blanco. Es el mismo tropiezo de no leer la regla que ya
   existe antes de escribir una nueva encima. */
.ficha-sep .det-cuerpo .secc-pago.pago-ok{background:var(--hay-sup);
  border:2px solid var(--hay) !important;border-left:7px solid var(--hay) !important}
.ficha-sep .det-cuerpo .secc-pago.pago-no{background:var(--nohay-sup);
  border:2px solid var(--nohay) !important;border-left:7px solid var(--nohay) !important}
/* El título del paso también se tiñe: sin esto el renglón entero sigue
   leyéndose gris y el color queda como adorno del marco. */
.secc-pago.pago-ok > .rotulo,.secc-pago.pago-ok > .rotulo svg{color:var(--hay)}
.secc-pago.pago-no > .rotulo,.secc-pago.pago-no > .rotulo svg{color:var(--nohay)}
.secc-pago.pago-ok > summary.rotulo::after{border-color:var(--hay)}
.secc-pago.pago-no > summary.rotulo::after{border-color:var(--nohay)}
/* Y el sello pasa a ser macizo, no un pastel más encima de otro pastel
   (Margarita, 2026-09-21: *"esto no es tan notorio"*). */
.secc-pago.pago-ok .pago-sello.ok{background:var(--hay);color:#fff}
.secc-pago.pago-no .pago-sello.no{background:var(--nohay);color:#fff}
/* ⛔ El TAMAÑO y la forma del sello NO se tocan aquí: '.ficha-sep .pago-sello'
   (más abajo) unifica a propósito todas las pastillas de la ficha —mismo alto,
   misma letra, sin mayúsculas— y gana por ir después. Se probó subirle el peso
   y ponerlo en mayúsculas y no hizo nada. Lo que sí se nota es el CAJÓN, no un
   sello más grande. */

/* --- El recuadro de "sube la foto aquí" --- */
/* Es un `<button>` a propósito: se toca con el dedo, se llega con el teclado y
   el lector de pantalla lo anuncia como lo que es. Y es además el sitio donde
   se puede soltar una foto arrastrada, cosa que antes no se veía por ningún
   lado porque solo había un renglón de texto gris. */
.zona-subir{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:7px;width:100%;padding:18px 12px;border:1.5px dashed var(--linea);border-radius:10px;
  background:transparent;color:var(--tinta3);font:inherit;font-size:var(--t1);
  line-height:1.35;text-align:center;cursor:pointer}
.zona-subir svg{width:22px;height:22px;flex:none}
/* Los dos botones DENTRO del recuadro: grandes, uno al lado del otro y con su
   nombre. 46 px de alto para que el dedo no falle en el celular, que es donde
   bodega los usa (2026-09-21). En escritorio se quedan igual: aquí no estorban
   porque el recuadro ya ocupaba ese sitio. */
.zona-btns{display:flex;gap:9px;width:100%;max-width:340px;margin-top:4px}
.zona-b{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:7px;
  min-height:46px;padding:10px 12px;border:1px solid var(--linea);border-radius:9px;
  background:var(--sup);color:var(--acento);font:inherit;font-size:var(--t2);font-weight:650;
  cursor:pointer}
.zona-b:hover{border-color:var(--acento);background:var(--acento-sup)}
.zona-b svg{width:17px;height:17px}
/* El recuadro deja de ser clicable ENTERO cuando trae botones: si no, tocar
   al lado de un botón abriría la galería sin que nadie lo pidiera. */
.zona-subir:has(.zona-btns){cursor:default}
.zona-subir:hover{border-color:var(--acento);color:var(--acento);background:var(--acento-sup)}
.zona-subir:focus-visible{outline:2px solid var(--acento);outline-offset:2px}
/* ======================= fin del tablero de provincia ===================== */

/* La cabecera de la ficha (documento, cliente, estado) también en tarjeta,
   con el ícono del papel a un lado como en el mockup. */
.sep-cab{display:flex;align-items:flex-start;gap:12px;
  background:var(--sup);border:1px solid var(--linea);border-radius:12px;
  padding:13px 12px !important;margin-bottom:10px}
@media (min-width:420px){.sep-cab{padding:14px 16px !important}}
/* Esto fue: un ícono de adorno → la FOTO de la factura (2026-08-19) → nada
   (2026-08-23, "en la version mobile solo quitas la foto de la factura a
   lado del nombre de la factura.. porque esta ya se encuentra mas abajo"):
   la foto ya tiene su propia columna más abajo (`.secc-factura`), en
   celular y en escritorio por igual, y repetirla aquí sobraba en los dos
   tamaños. Se queda `display:none` y no se borra del HTML: el botón sigue
   funcionando si algún día hace falta un atajo rápido en la cabecera. */
.sep-cab .marca-doc{display:none}
.sep-cab .marca-doc img{width:100%;height:100%;object-fit:cover;display:block}
.sep-cab .marca-doc .cuantas-doc{position:absolute;right:2px;bottom:2px;
  min-width:17px;height:17px;padding:0 4px;border-radius:9px;
  background:rgba(10,18,23,.82);color:#fff;font-size:var(--t1);font-weight:700;
  display:grid;place-items:center;font-variant-numeric:tabular-nums}
/* La fecha sube aquí, a la derecha del número: estaba repetida en una tarjeta
   entera para ella sola. */
.sep-cab .fecha-doc{flex:none;text-align:right;font-size:var(--t2);color:var(--tinta2);
  max-width:33%}
.sep-cab .fecha-doc b{display:block;font-weight:650;color:var(--tinta)}
/* Lo que SOLO existe en escritorio nace apagado, y se enciende dentro de
   @media (min-width:900px). Así el celular renderiza exactamente lo mismo que
   antes de este cambio: los elementos están en el HTML pero no se pintan. */
.vend-cab{display:none}
/* Las píldoras y "Entregar" van SIEMPRE bajo la fecha, a la derecha (Margarita,
   2026-08-23: "el botón de entregar debería ir debajo de la fecha de la
   factura a lado derecho") — celular y escritorio por igual, ya no hay dos
   copias que alternar por tamaño de pantalla. */
.pills-lado{display:block;margin-top:9px}
/* El panel de Separado (2026-08-22): existe en el HTML solo cuando
   `pintarPanelSep()` corrió (que en sí mismo ya solo pasa en escritorio), pero
   se apaga también por CSS como red de seguridad — si la ventana se angosta
   cruzando los 900px un instante antes de que el redibujado por resize
   alcance a cambiar de vista, que no se vea una tabla apretada en un celular. */
.panel-sep{display:none}
/* Iba con `style="display:block"` en línea, y un estilo en línea le gana a la
   hoja: el `display:none` de escritorio no surtía efecto y las píldoras salían
   dos veces. Ahora esta copia se apaga del todo: la de `.pills-lado` de arriba
   es la única que se pinta, en cualquier tamaño. */
.pills-abajo{display:none}
/* "Editar" de Contacto y retiro: botón sólido igual que "+ Registrar pago", y
   con un lápiz delante para que se lea de un vistazo que ahí se edita. Va en
   TODOS los tamaños — Margarita lo autorizó expresamente para el celular
   (2026-08-20), a diferencia del resto de los cambios de la ficha. Sustituye
   al fondo celeste, que se probó y se quitó. */
.btn-editar{flex:none;display:inline-flex;align-items:center;gap:5px;
  background:var(--acento);color:var(--sup);
  padding:6px 11px;border-radius:7px;font-size:var(--t1);font-weight:650;
  text-transform:none;letter-spacing:0;white-space:nowrap}
.btn-editar:active{opacity:.85}
.rotulo .btn-editar{color:var(--sup)}

/* ---- El estilo sobrio de la ficha (2026-09-18, mockup "Opción B", elegido
   por Margarita: *"vamos por b"*). Ella marcó tres cosas como lo que se veía
   inconsistente: demasiada MAYÚSCULA, pastillas de tres tamaños y formas
   distintas, y botones de pesos distintos compitiendo en la misma fila.

   La idea de fondo de la opción B es que EL COLOR SIGNIFIQUE ALGO: se reserva
   para cuando algo está mal de verdad, y todo lo demás baja a gris tranquilo.
   Por eso el ámbar de "todavía no" pasa a gris — no está mal, solo no está
   hecho — y queda el naranja para lo único que hay que ir a arreglar.

   Todo va colgado de `.ficha-sep` a propósito: el resto de la aplicación
   (tránsito, equipo, catálogo) NO se toca, que no era lo que se pidió. ---- */
/* Títulos: minúscula, un solo tamaño, un solo peso. */
.ficha-sep .rotulo{text-transform:none;letter-spacing:0;font-size:var(--t3);
  font-weight:600;color:var(--tinta)}
/* Los rótulos de ADENTRO de una tarjeta ("Cajas", "Foto de la entrega") no son
   títulos de paso: quedan chicos y grises para no competir con el del paso. */
.ficha-sep .rotulo.sub{font-size:var(--t1);font-weight:600;color:var(--suave)}
/* La línea tranquila que dice en qué quedó cada paso, a la derecha del título.
   No lleva color: no es una alerta, es información. */
/* La entrega pedida que ya se pasó, en la lista de Provincia. Se distingue
   por el COLOR Y por la palabra "pedida" delante: a pleno sol y para quien no
   distingue bien los colores, el texto es lo que salva (misma regla que el
   semáforo de pagos). */
.td-sub.atrasado{color:var(--nohay);font-weight:650}
/* Reordenar la foto, en su propia fila y separado de las flechas que pasan de
   foto (2026-09-19). Antes compartían sitio y se confundían. */
.fila-ordenar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  padding:8px 0 2px;border-top:1px solid var(--linea);margin-top:8px}
.ordenar-rot{font-size:var(--t1);font-weight:600;color:var(--suave)}
/* Una pastilla que además se toca. Se le nota que es tocable por el cursor y
   por el borde que aparece al pasar por encima — una pastilla igual a las de
   al lado pero que reacciona confundiría menos que un botón de otra forma. */
.pill-boton{cursor:pointer;border:1px solid transparent;font:inherit}
.pill-boton:hover{border-color:currentColor}
/* "+ Entrega pedida" cuando todavía no hay ninguna: tiene que verse como una
   invitación, no como un estado. De ahí el punteado y el gris. */
.pill.est-vacio{background:transparent;color:var(--suave);
  border:1px dashed var(--linea)}
.pill.est-vacio:hover{border-color:var(--acento);color:var(--acento)}
/* La cabecera de cada día en el historial completo. Pegajosa: con veinte
   movimientos hay que seguir sabiendo de qué día es lo que se está leyendo
   sin volver a subir. */
.hist-dia{position:sticky;top:0;z-index:1;background:var(--sup);
  display:flex;align-items:center;gap:8px;font-size:var(--t1);font-weight:650;
  color:var(--tinta2);padding:9px 0 5px;margin-top:6px;
  border-bottom:1px solid var(--linea)}
.hist-dia:first-of-type{margin-top:0}
.hist-dia .suave{font-weight:500;font-size:var(--t1)}
.ficha-sep .estado-paso{font-size:var(--t1);color:var(--suave);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;min-width:0;margin-right:8px}
/* La firma de quién editó: nombre, fecha y hora, sin rótulo delante. */
.ficha-sep .ultima-edicion{display:inline;font-size:var(--t1);color:var(--suave);margin:0}
.ficha-sep .ultima-edicion b{font-weight:600;color:var(--tinta2)}
/* UNA sola forma de pastilla en toda la ficha: mismo alto, mismo radio, mismo
   tamaño de letra. Lo único que cambia es el color. */
.ficha-sep .pill,.ficha-sep .pago-sello{display:inline-flex;align-items:center;
  height:22px;padding:0 10px !important;border-radius:999px;font-size:var(--t1);
  font-weight:600;letter-spacing:0;text-transform:none}
.ficha-sep .pill.est-inv{background:var(--sup2);color:var(--suave)}
/* Todos los botones de la ficha con el mismo peso: contorno fino y texto de
   acento. Antes "Editar" era azul sólido y "Cámara"/"Galería" texto pelado al
   lado — dos pesos distintos discutiendo en la misma fila. */
.ficha-sep .btn-editar,.ficha-sep .btn-chico,.ficha-sep .btn-ico,
.ficha-sep .rotulo .btn-editar,.ficha-sep .rotulo .btn-chico,
.ficha-sep .rotulo .btn-ico{background:var(--sup);border:1px solid var(--linea);
  color:var(--acento);padding:6px 11px;border-radius:8px;font-size:var(--t1);
  font-weight:600}
/* Cámara y Galería sin su nombre: cuadrados y del mismo alto, pegaditos, para
   que los dos entren SIEMPRE en la línea del rótulo (Margarita, 2026-09-20:
   *"deberia estar mas ordenado... dejamos solo los iconos"*). Sin el `gap` del
   texto que ya no está, y con el mismo aire a los dos lados. */
.ficha-sep .btn-ico.solo-ico,
.ficha-sep .rotulo .btn-ico.solo-ico{gap:0;padding:5px 8px;line-height:0}
/* Los dos van dentro de UN solo `.par-ico`: así el `flex-wrap` del rótulo los
   baja juntos o no los baja, pero nunca deja uno arriba y el otro abajo —que
   es justo como se veían en la columna angosta del Paso 4. */
/* EN CELULAR van GRANDES y con su nombre (Margarita, 2026-09-20: *"cuando
   toco en el paso 4 el botón de cámara no se abre nada... el botón se siente
   muy chico en la versión móvil"*). Las dos quejas eran la misma: 33x27 px es
   más chico que un dedo, así que el toque caía fuera y no pasaba nada. Aquí
   ocupan la fila entera, 44 px de alto —el mínimo para tocar sin fallar— y
   uno al lado del otro.
   Solo aparecen mientras NO hay foto: quien ya subió una ve solo "Editar". */
.par-ico{display:flex;flex:1 1 100%;gap:8px;margin-top:7px}
.par-ico .btn-ico.solo-ico{flex:1;justify-content:center;gap:7px;min-height:44px;
  border-radius:9px;padding:10px 12px;line-height:1;font-size:var(--t2)}
.ficha-sep .par-ico .btn-ico.solo-ico{padding:10px 12px}
/* En pantalla ancha vuelven a ser el par compacto de solo iconos, pegado al
   rótulo: ahí se apunta con el ratón y el nombre solo ocupa sitio. */
@media (min-width:700px){
  .ico-txt{display:none}
  .par-ico{flex:none;display:inline-flex;margin-top:0;gap:0}
  .par-ico .btn-ico.solo-ico{flex:none;min-height:0;border-radius:0;font-size:var(--t1)}
  .ficha-sep .par-ico .btn-ico.solo-ico{padding:5px 8px}
  .par-ico .btn-ico.solo-ico:first-child{border-radius:8px 0 0 8px}
  .par-ico .btn-ico.solo-ico:last-child{border-radius:0 8px 8px 0;margin-left:-1px}
}
/* El ÚNICO botón azul sólido de la ficha: el resumen que se le manda al
   cliente. Todo lo demás de aquí es contorno fino a propósito (ver arriba),
   justo para que este destaque solo. */
.ficha-sep .agregar.primario{background:var(--acento);border:1px solid var(--acento);
  color:#fff;font-weight:700}
/* Los papeles que usa bodega: celeste, se notan, pero un escalón por debajo del
   azul sólido de arriba. Mismo tamaño y misma impresora que aquel, así se
   reconocen como "esto imprime algo". */
.ficha-sep .agregar.celeste{background:var(--acento-sup);
  border:1px solid var(--acento-sup);color:var(--acento);font-weight:700}
.ficha-sep .agregar.primario svg,
.ficha-sep .agregar.celeste svg{vertical-align:-3px;margin-right:6px}
.ficha-sep .agregar.lleno{background:var(--sup);border-style:solid;
  border-color:var(--linea);color:var(--acento)}
/* Los datos del envío, separados por líneas finas en vez de un recuadro dentro
   de otro recuadro: ese borde doble era la mitad de la sensación de "armado
   por partes". El formulario de edición (`.env-edita`) sí conserva su caja —
   ahí el recuadro dice "esto se llena", que es otra cosa. */
.ficha-sep .env-guia:not(.env-edita){border:0;border-radius:0;
  background:transparent;column-gap:30px}
.ficha-sep .env-guia:not(.env-edita) > .env-b{border-left:0 !important;padding:11px 0}
/* Los rótulos de adentro del envío ("Remitente", "Facturar flete a") también
   salen de las mayúsculas: eran cuatro más en la misma pantalla. El texto ya
   estaba escrito en minúscula — quien lo gritaba era el CSS. */
.ficha-sep .env-bt{text-transform:none;letter-spacing:0;font-size:var(--t1);
  font-weight:600;color:var(--suave)}
@media screen and (min-width:900px){
  .ficha-sep .env-guia:not(.env-edita) > .env-b:nth-child(2){border-top:0}
}

.ficha-sep .ficha-pie{margin-top:4px;padding:12px 14px;border-top:0;
  background:var(--sup);border:1px solid var(--linea);border-radius:12px}
/* Los avisos de entregado / cancelado / archivado también son tarjetas: si no,
   quedaban pegados a la siguiente y rompían el ritmo de la columna. */
.ficha-sep .det-cuerpo > .viene{border-radius:12px;margin:0 0 10px;
  padding:12px 14px !important;border:1px solid transparent}
/* El ícono del rótulo va en el color de acento y no compite con el texto:
   sirve para encontrar la sección de un vistazo al bajar por la ficha. */
.rotulo > svg{flex:none;color:var(--acento);opacity:.9}

/* ---- el semáforo de pagos ----
   A pedido de Margarita (2026-08-19): lo que importa no es cuánto se pagó
   —la app no guarda montos— sino QUÉ FALTA HACER. Cada forma de pago es su
   propia fila con su propio estado, así que una venta puede tener la
   transferencia confirmada y la retención todavía pendiente al mismo tiempo.
   Verde = listo; ámbar = falta; gris = todavía no hay ninguno. Se distingue
   por el punto Y por la palabra, no solo por el color: a pleno sol, y para
   quien no distingue bien los colores, el texto es lo que salva. */
.pago-fila{display:flex;align-items:flex-start;gap:9px;padding:7px 0;font-size:var(--t2);flex-wrap:wrap}
.pago-fila + .pago-fila{border-top:1px solid var(--linea)}
.pago-punto{flex:none;width:9px;height:9px;border-radius:50%;margin-top:5px}
.pago-ico{flex:none;color:var(--tinta3);margin-top:1px}
/* La acción principal de una sección, como botón de verdad y no como texto
   azul suelto: "+ Agregar" pasaba desapercibido (Margarita, 2026-08-19). */
.btn-chico{flex:none;background:var(--acento);color:var(--sup);
  padding:6px 11px;border-radius:7px;font-size:var(--t1);font-weight:650;
  text-transform:none;letter-spacing:0;white-space:nowrap}
.btn-chico:active{opacity:.85}
.rotulo .btn-chico{color:var(--sup)}
/* Acción secundaria con su dibujo al lado: ocupa poco y sigue diciendo qué es. */
.btn-ico{flex:none;display:inline-flex;align-items:center;gap:5px;
  font-size:var(--t1);font-weight:600;color:var(--acento);
  text-transform:none;letter-spacing:0;white-space:nowrap}
.rotulo .btn-ico{color:var(--acento)}
.pago-punto.ok{background:var(--hay)}
.pago-punto.falta{background:var(--ojo)}
.pago-punto.nada{background:var(--tinta3);opacity:.6}
.pago-texto{flex:1;min-width:0}
.pago-texto b{font-weight:650}
.pago-de{display:block;font-size:var(--t1);color:var(--tinta3);margin-top:1px}

/* ---- la línea de tiempo de movimientos ----
   Cada movimiento era una caja con borde que ocupaba muchísimo alto vertical
   para una línea de texto; con veinte movimientos la ficha se volvía
   interminable. Una línea de tiempo es el patrón de siempre para un historial
   de auditoría: ocupa menos, deja claro el orden y se lee de corrido
   (propuesto por Margarita, 2026-08-19). El hilo vertical se dibuja con un
   pseudo-elemento, no con un borde por fila, para que no quede colgando
   después del último punto. */
/* ⚠️ El selector va con `.secc >` delante A PROPÓSITO: compite con
   `.secc > div{padding:0 !important}` y, entre dos reglas `!important`, gana la
   más específica — `.secc > div` (clase + tipo) le ganaba a `.linea-t` (clase
   sola) aunque las dos llevaran `!important`. Sin este sangrado, los puntos de
   la línea —que se dibujan en negativo respecto al texto— quedaban FUERA de la
   tarjeta (lo vio Margarita, 2026-08-19). */
.linea-t{position:relative;padding-left:22px}
.secc > .linea-t{padding-left:22px !important}
.linea-t::before{content:"";position:absolute;left:5px;top:9px;bottom:9px;
  width:1px;background:var(--linea)}
.lt-fila{position:relative;padding:7px 0;display:flex;gap:9px;align-items:flex-start;
  font-size:var(--t1);line-height:1.45}
.lt-fila::before{content:"";position:absolute;left:-21px;top:12px;
  width:9px;height:9px;border-radius:50%;background:var(--linea);
  box-shadow:0 0 0 3px var(--sup)}
/* Las notas de la gente se distinguen de lo que anotó el servidor: son lo
   único que alguien escribió a mano, y suelen ser lo que se viene a buscar. */
.lt-fila.es-nota::before{background:var(--acento)}
.lt-fila.es-nota .lt-que{color:var(--tinta)}
.lt-que{flex:1;min-width:0;color:var(--tinta2)}
.lt-que b{color:var(--tinta);font-weight:650}
.lt-cuando{flex:none;font-size:var(--t1);color:var(--tinta3);white-space:nowrap;padding-top:1px}
.lt-fila .lt-btns{flex:none;display:flex;gap:9px}
.lt-fila .lt-btns button{font-size:var(--t1)}

/* ---- el pie de la ficha ----
   "Creado por" bajó aquí: hace falta para auditoría, pero no tiene por qué
   competir con la información comercial arriba (Margarita, 2026-08-19). */
.ficha-pie{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin-top:18px;padding-top:12px;border-top:1px solid var(--linea);
  font-size:var(--t1);color:var(--tinta3)}
.ficha-pie svg{flex:none;opacity:.7}
/* Lo que el vendedor todavía no ha llenado deja de ser el gris más claro de
   la paleta. Fue el propio diagnóstico de Margarita (2026-08-20): "como las
   letras siguen en gris como que se pierde la importancia". Sustituye al fondo
   celeste y al sello, que se probaron y se quitaron por ruidosos: esto marca
   lo pendiente sin agregar ni un elemento a la tarjeta, y desaparece solo en
   cuanto se llena. Ojo: "el mismo cliente" NO se pinta — no es algo pendiente,
   es el caso normal. */
.falta{color:var(--acento);font-weight:600}
/* Lo que FALTA y es OBLIGATORIO va en rojo (Margarita, 2026-09-20: *"campos no
   completados y necesarios deberian estar en rojo"*). `.falta` es azul, el
   mismo color de todo lo que se toca en la ficha, así que un campo obligatorio
   vacío se leía como un enlace más y no como algo que frena el envío.
   Azul = opcional sin poner · rojo = sin esto el paso no se cierra. */
.falta-req{display:inline-flex;align-items:center;gap:6px;color:var(--rojo);font-weight:700;background:none;padding:0;border-radius:0}
.falta-req::before{content:"!";flex:none;display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;
  background:var(--rojo);color:#fff;font-size:var(--t1);font-weight:800;line-height:1}
/* Los dos botones de acción de la ficha con el MISMO ancho, para que sus
   bordes queden alineados uno debajo del otro (Margarita, 2026-08-20:
   "que se vea más lindo todo"). Acortar "+ Registrar pago" a "+ Registrar" los
   acercó pero no los igualó — quedaban 88 contra 75 px — así que el ancho se
   fija aquí y el texto se centra. */
.ficha-sep .rotulo .btn-chico,
.ficha-sep .rotulo .btn-editar{min-width:96px;justify-content:center}
.rotulo .sep{flex:1}
.rotulo button{font-size:var(--t1);color:var(--acento);font-weight:650;text-transform:none;letter-spacing:0}
/* Obligatorio y opcional no se distinguen leyendo con calma: se distinguen de un
   vistazo, con el celular en una mano y la caja en la otra. Lo que hace falta va
   en tinta plena con su sello; lo que se puede saltar se queda en gris. */
.rotulo.debe{color:var(--tinta)}
.rotulo .sello{font-size:var(--t1);font-weight:800;letter-spacing:.05em;padding:2px 7px;
  border-radius:20px;background:var(--nohay-sup);color:var(--nohay)}
.rotulo .suave{text-transform:none;letter-spacing:0;font-weight:500;color:var(--suave)}
.ayuda{font-size:var(--t1);color:var(--tinta2);margin:0 0 14px;line-height:1.45}
.ayuda.lista{color:var(--hay);font-weight:600}
/* Cámara y galería, cada una con su botón. En pantallas muy angostas se
   apilan en vez de apretarse hasta no poder leerse. */
.dos-botones{display:flex;gap:8px;flex-wrap:wrap}
.dos-botones .agregar{flex:1 1 110px;min-width:0;margin:0;display:flex;align-items:center;
  justify-content:center;gap:7px}
.tramo{border:1px solid var(--linea);border-radius:8px;padding:10px;margin-bottom:8px}
.tramo-cab{display:flex;align-items:center;margin-bottom:8px;font-size:var(--t1);
  text-transform:uppercase;letter-spacing:.07em;font-weight:650;color:var(--tinta3)}
.tramo-cab .borra{color:var(--tinta3);font-size:var(--t3);padding:0 4px}

.galeria{display:flex;gap:8px;overflow-x:auto;padding-bottom:3px;scrollbar-width:none}
.galeria::-webkit-scrollbar{display:none}
.galeria img{width:74px;height:74px;object-fit:cover;border-radius:5px;
  border:2px solid transparent;flex:none}
.galeria img[aria-current="true"]{border-color:var(--acento)}

.est.hay{color:var(--hay)} .est.nohay{color:var(--nohay)}

.bola{width:11px;height:11px;border-radius:50%;flex:none;display:inline-block}
.bola.hay{background:var(--hay)} .bola.nohay{background:var(--nohay)}

.doc,.enlace{display:flex;align-items:center;gap:11px;width:100%;padding:12px;
  border:1px solid var(--linea);border-radius:7px;text-align:left;margin-bottom:7px}
.doc .ic,.enlace .ic{flex:none;width:32px;height:32px;border-radius:5px;background:var(--nohay-sup);
  color:var(--nohay);display:grid;place-items:center;font-size:var(--t1);font-weight:800}
.doc b,.enlace b{display:block;font-size:var(--t2);font-weight:600;word-break:break-word}
.doc span,.enlace span{font-size:var(--t1);color:var(--tinta3)}
.enlace a{flex:1;min-width:0;text-decoration:none}
.enlace a:hover b{text-decoration:underline}
.agregar{width:100%;padding:11px;border:1px dashed var(--linea);border-radius:var(--r-chico);
  color:var(--acento);font-size:var(--t2);font-weight:650}
/* Relleno (2026-09-18): para la acción principal de una tarjeta, cuando hay
   MÁS de un botón "Imprimir" cerca y hace falta que uno se note más que el
   otro — ver la guía interna de Provincia, donde se confundía con "Imprimir
   etiqueta" (Margarita: "cuando pongo imprimir solo me sale la info del
   envío", que es justo lo que hace el OTRO botón). */
.agregar.lleno{border-style:solid;border-color:var(--acento);background:var(--acento);color:#fff}

.notas-caja{border:1px solid var(--ojo-sup);border-radius:8px;overflow:hidden}
/* Cuando SÍ hay notas la caja se pinta entera. Una nota que nadie ve no sirve
   de nada: es justo lo que el vendedor tiene que leer antes de ofrecer. */
/* La caja ya no se pinta entera: el ámbar es solo la franja de "no se envía al
   cliente". El color lo lleva cada nota, según de qué sea. */
.notas-caja.con-notas{border-color:var(--ojo)}
.notas-tit{background:var(--ojo-sup);color:var(--ojo);padding:8px 12px;font-size:var(--t1);
  font-weight:700;letter-spacing:.04em;display:flex;align-items:center;gap:7px}
.con-notas .notas-tit{background:var(--ojo);color:var(--sup)}
.nota{padding:11px 12px;border-top:1px solid var(--linea)}

.nota:first-of-type{border-top:none}
/* Sobre el fondo crema el texto va en la tinta fuerte, no en la gris. */
.con-notas .nota p{color:var(--tinta)}
.con-notas .nota .quien2{color:var(--tinta2)}
.con-notas .borra{color:var(--tinta2)}
.rotulo .cuantas{background:var(--ojo);color:var(--sup);border-radius:20px;
  padding:1px 7px;font-size:var(--t1);font-weight:700;letter-spacing:.03em}
.nota-cab{display:flex;align-items:center;gap:8px}
.nota-cab .sep{flex:1}
.borra{color:var(--tinta3);padding:3px;border-radius:4px;line-height:0}
.borra:hover{color:var(--nohay);background:var(--nohay-sup)}
.tipo{font-size:var(--t1);font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  padding:2px 6px;border-radius:3px;background:var(--sup2);color:var(--tinta2)}
.tipo.Avería,.tipo.Importación{background:var(--nohay-sup);color:var(--nohay)}
.tipo.Tránsito{background:var(--ojo-sup);color:var(--ojo)}
.tipo.Precio{background:var(--hay-sup);color:var(--hay)}
.nota p{margin:7px 0 5px;font-size:var(--t2);line-height:1.45}
.nota .quien2{font-size:var(--t1);color:var(--tinta3)}
/* Cada tipo con su fondo: se reconoce de qué es la nota sin leerla. Los tonos
   son los mismos que ya usa el resto de la aplicación, así que sirven igual en
   claro y en oscuro. */
.nota.t-Avería{background:var(--nohay-sup);border-left:4px solid var(--nohay)}
.nota.t-Importación{background:var(--acento-sup);border-left:4px solid var(--acento)}
.nota.t-Tránsito{background:var(--ojo-sup);border-left:4px solid var(--ojo)}
.nota.t-Precio{background:var(--hay-sup);border-left:4px solid var(--hay)}
.nota.t-General{background:var(--sup2);border-left:4px solid var(--tinta3)}
.nota.t-Avería .tipo{background:var(--nohay);color:var(--sup)}
.nota.t-Importación .tipo{background:var(--acento);color:var(--sup)}
.nota.t-Tránsito .tipo{background:var(--ojo);color:var(--sup)}
.nota.t-Precio .tipo{background:var(--hay);color:var(--sup)}
.nota.t-General .tipo{background:var(--tinta2);color:var(--sup)}
.nota + .nota{border-top:2px solid var(--sup)}
.sin-notas{padding:2px 0;font-size:var(--t2);color:var(--tinta3)}

/* ---------------- excedentes ----------------

   Los cinco datos de la tabla (medida, quién lo ingresó, estado, quién lo movió
   y las acciones) caben en dos renglones. Una tabla de cinco columnas en un
   celular de 360px obliga a deslizar de lado, y eso ya se sufrió una vez con la
   cabecera: lo que no se ve, no se usa. */
.exc{display:flex;flex-direction:column;gap:3px;padding:9px 0;
  border-top:1px solid var(--linea)}
.exc:first-of-type{border-top:none}
.exc-l1{display:flex;align-items:center;gap:8px}
.exc-l1 .sep{flex:1}
/* Sin prefijo `.exc` a propósito: la cabecera de un grupo NO es un `.exc`, y
   cuando esta regla lo llevaba, la medida del grupo salía sin negrita y la
   lista parecía de dos tipos distintos. */
.medida{font-size:var(--t3);font-weight:650;font-variant-numeric:tabular-nums;
  white-space:nowrap}
/* Lo vendido sigue en la tabla hasta que su dueño lo quite, pero deja de
   competir por la atención de quien busca material para hoy. */
.exc.vendido .medida{color:var(--tinta3);text-decoration:line-through}
.exc .quien2{font-size:var(--t1);color:var(--tinta3)}

/* El estado es un <select> de verdad: en el celular abre la rueda nativa, que
   se maneja con el pulgar mucho mejor que cualquier menú dibujado a mano. */
/* `min-width` fijo: todas las pastillas ocupan la misma caja aunque el texto
   sea "Vendido" o "Disponible" y aunque una lleve flecha y otra no. Sin esto se
   alinean por la derecha y cada una empieza en un sitio distinto — que es
   exactamente lo que se veía descuadrado. */
.exc-est{font:inherit;font-size:var(--t1);font-weight:650;letter-spacing:.02em;
  border:none;border-radius:20px;padding:4px 22px;cursor:pointer;
  -webkit-appearance:none;appearance:none;background-repeat:no-repeat;
  background-position:right 7px center,left 8px center;
  background-size:9px 6px,7px 7px;
  min-width:122px;text-align:left;max-width:100%}
/* Sin flecha cuando no se puede cambiar, pero MISMO ancho: se apaga el dibujo,
   no la caja. `.fijo` es para el <span> de la cabecera de grupo, que no es un
   <select> y por tanto nunca entra por `:disabled`. */
.exc-est:disabled, .exc-est.fijo{cursor:default;background-image:none,
  radial-gradient(circle,currentColor 50%,transparent 55%)}
.exc-est.fijo{display:inline-block}
.exc-est.disponible{color:var(--hay);background-color:var(--hay-sup)}
.exc-est.reservado {color:var(--ojo);background-color:var(--ojo-sup)}
.exc-est.vendido   {color:var(--nohay);background-color:var(--nohay-sup)}
/* El punto de color y la flecha se dibujan con `currentColor`, así que el verde,
   el amarillo y el rojo salen del mismo token que ya usa el resto de la
   aplicación y siguen funcionando en claro y en oscuro sin repetirlos aquí. */
.exc-est{background-image:
  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 7'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23888' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E"),
  radial-gradient(circle,currentColor 50%,transparent 55%)}
.exc-est option{color:var(--tinta);background:var(--sup)}
/* Grupo de medidas iguales. La cabecera se ve como una fila normal para que la
   lista siga leyéndose de corrido; lo único distinto es la cuenta y la flecha. */
.exc-grupo{border-top:1px solid var(--linea)}
.exc-grupo:first-of-type{border-top:none}
.exc-cab{display:flex;align-items:center;gap:8px;width:100%;
  padding:9px 0;text-align:left;flex-wrap:wrap}
.exc-cab .sep{flex:1}
.exc-cab .cuantos{font-size:var(--t1);font-weight:700;letter-spacing:.02em;
  background:var(--sup2);color:var(--tinta2);border-radius:20px;padding:2px 8px;
  white-space:nowrap}
/* Ranura final de ancho fijo. La llevan TODAS las filas: con basurero, con
   flecha o vacía. Sin ella, la fila de alguien que no puede borrar corría la
   pastilla 28px a la derecha respecto a la de al lado. */
.exc-fin{flex:none;width:22px;display:flex;justify-content:flex-end;
  color:var(--tinta3)}
.exc-fin .chevron{transition:transform .16s ease}
.exc-cab[aria-expanded="true"] .chevron{transform:rotate(180deg)}
/* La cabecera del grupo lleva su segunda línea igual que las filas sueltas,
   para que la lista tenga un solo ritmo y no dos alturas distintas. */
.exc-cab .quien2{font-size:var(--t1);color:var(--tinta3);width:100%}
.exc-hijos{padding-left:14px;border-left:2px solid var(--linea);margin-bottom:4px}
.exc-hijos .exc:first-of-type{border-top:none}
/* El selector de unidad, al lado del número. 16px en el <input> y aquí para que
   iOS no haga zoom al tocarlo, que descoloca la hoja entera. */
.exc-uni{font:inherit;font-size:var(--t3);color:var(--tinta);background:var(--sup2);
  border:1px solid transparent;border-radius:8px;padding:13px 10px;flex:none;
  max-width:46%}
.exc-uni:focus{outline:none;border-color:var(--acento);background:var(--sup)}
/* El aviso de "te lo vendieron" trae sus dos acciones encima, para que se
   resuelva desde ahí y no haya que ir a buscar el producto. */
.aviso-btns{display:flex;gap:8px;margin-top:7px;flex-wrap:wrap}
.aviso-btns button{font-size:var(--t1);font-weight:650;padding:7px 12px;border-radius:7px;
  background:var(--sup2);color:var(--tinta2)}
.aviso-btns button.quitar{background:var(--nohay-sup);color:var(--nohay)}

.datos{border-top:1px solid var(--linea)}
.dato{display:flex;justify-content:space-between;gap:14px;padding:10px 0;
  border-bottom:1px solid var(--linea);font-size:var(--t2)}
.dato dt{color:var(--tinta3);flex:none}
/* El ícono al lado de la etiqueta: se reconoce la fila antes de leerla. */
.dato dt .dt-ico{display:inline-flex;vertical-align:-3px;margin-right:6px;color:var(--tinta3)}
.dato dd{margin:0;text-align:right;color:var(--tinta2)}
.dato dd.mono{font-family:var(--mono);font-size:var(--t1)}

.acciones{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:100%;
  background:var(--sup);border-top:1px solid var(--linea);
  padding:11px 14px calc(11px + env(safe-area-inset-bottom));display:flex;gap:9px;z-index:10}
.bwa{flex:1;min-width:0;background:var(--acento);color:#fff;padding:14px;border-radius:8px;font-size:var(--t3);
  font-weight:650;display:flex;align-items:center;justify-content:center;gap:8px}
.bico{flex:none;padding:14px;border-radius:8px;border:1px solid var(--linea);
  display:flex;align-items:center;gap:6px;font-size:var(--t2);font-weight:600}

/* `screen and` es lo que de verdad arregla la impresión (Margarita,
   2026-08-23, segunda ronda sobre el mismo PDF: "se ve mejor pero aun
   presenta sus problemas" — Pagos y Contacto seguían flotando a la
   izquierda con Ubicación y Notas apretadas a la derecha, calcado del
   layout de escritorio). La causa real NO era el `, print` que se había
   sacado la vuelta anterior — ya estaba afuera. Era que `@page{size:A4
   landscape}` hace que la hoja impresa mida unos 1122px de ancho (297mm a
   96dpi), y **1122 ES mayor que 900**: `@media (min-width:900px)` a secas
   no distingue pantalla de papel, solo mide anchos, así que este bloque
   entero — con sus `float` de 380px, pensados para una pantalla, no para
   una hoja — se seguía prendiendo solo por lo ancha que quedó la hoja
   horizontal. Cuanto más "ancha" la hacía para que se viera bien en A4
   apaisada, más aseguraba que este bloque se activara. Con `screen and`
   delante, la condición pregunta DOS cosas a la vez —¿es pantalla? ¿mide
   900px o más?— y el papel nunca es pantalla, sin importar cuánto mida. */
@media screen and (min-width:900px){
  /* Dos columnas de alto fijo: la foto a la izquierda, la información a la
     derecha. Cada columna se desliza por su cuenta y los botones de abajo
     —WhatsApp y Foto— quedan siempre a la vista, sin tener que bajar. */
  .hoja-llena{max-width:var(--ancho-app, min(1720px, 96vw));top:24px;height:calc(100dvh - 48px);border-radius:10px}
  /* Solo el producto va en dos columnas; el panel de Equipo sigue siendo una
     sola tira que se desliza dentro del recuadro. */
  /* ⚠️ La columna de la foto ya no es de 440 px fijos: era un ancho pensado
     para una laptop, y con la app ocupando toda la pantalla quedaba una tira
     angosta al lado de una columna enorme ("no se ve uniforme", Margarita
     2026-08-19). Ahora es un PORCENTAJE y, sobre todo, se puede arrastrar el
     divisor para dejarla como cada quien la quiera — mismo criterio que el
     ancho de la app: quien mira la pantalla decide, no yo desde aquí. */
  /* Tres filas: la cabecera arriba de todo, el código en la columna de la
     derecha, y debajo el contenido. La foto abarca las dos filas de abajo. */
  .det-producto{display:grid;
    grid-template-columns:var(--col-foto, 46%) 6px minmax(0,1fr);
    grid-template-rows:auto auto minmax(0,1fr);overflow:hidden}
  .det-producto .det-cab{grid-column:1 / -1;grid-row:1}
  /* La columna de la foto también respira por los bordes: iba pegada al filo
     de la ficha mientras la de al lado sí tenía su margen, y se veía
     descuadrada (Margarita, 2026-08-19). La franja de la marca, la foto y el
     pie de "subida por…" quedan apilados sin hueco entre ellos, así que se
     redondean solo las esquinas de AFUERA y el conjunto se lee como una
     tarjeta, igual que todo lo demás. */
  .det-producto .col-foto{display:block;grid-column:1;grid-row:2 / 4;overflow-y:auto;
    padding:14px 16px}
  .det-producto .col-foto > .franja{border-radius:10px 10px 0 0;
    border:1px solid var(--linea);border-bottom:0}
  .det-producto .col-foto > .foto-caja > .det-foto,
  .det-producto .col-foto > .det-sinfoto{border-inline:1px solid var(--linea)}
  .det-producto .col-foto > .det-sinfoto{border-radius:10px;border:1px solid var(--linea)}
  .det-producto .col-foto > .credito{border-radius:0 0 10px 10px;
    border:1px solid var(--linea);border-top:0}
  /* Sin franja arriba (un código sin marcas), la foto redondea ella misma. */
  .det-producto .col-foto > .foto-caja:first-child > .det-foto{border-radius:10px 10px 0 0;
    border-top:1px solid var(--linea)}
  /* El tirador: fino, con la manito al pasar por encima, y una zona de agarre
     más ancha que la raya para no tener que acertarle al píxel. */
  .divisor{display:block;grid-column:2;grid-row:2 / 4;position:relative;cursor:col-resize;
    background:var(--linea);border:0;padding:0;touch-action:none}
  .divisor::before{content:"";position:absolute;top:0;bottom:0;left:-5px;right:-5px}
  .divisor:hover,.divisor.agarrado{background:var(--acento)}
  .divisor::after{content:"";position:absolute;top:50%;left:50%;
    transform:translate(-50%,-50%);width:2px;height:26px;border-radius:2px;
    background:var(--sup);opacity:.7}
  .det-producto .col-info{display:flex;flex-direction:column;min-height:0;
    grid-column:3;grid-row:3;border-left:1px solid var(--linea)}
  /* En la computadora el código vuelve a su sitio de siempre —arriba de la
     columna de la derecha— y sin anclar: ahí la ficha no es una tira larga y
     nunca se pierde de vista. */
  .det-producto .ident-prod{grid-column:3;grid-row:2;
    position:static;background:transparent;border-bottom:0;
    border-left:1px solid var(--linea);padding:15px 16px 4px}
  .det-producto .ident-prod .det-nom{white-space:normal;overflow:visible}
  .det-producto .col-info .det-cuerpo{padding-top:6px}
  .det-producto .det-cuerpo{flex:1;min-height:0;overflow-y:auto;padding-bottom:20px}
  /* ⚠️ El ancho de lectura se limita en la FICHA, no en su contenido. Antes
     iba en `.det-cuerpo` (820 px) dentro de una ficha de 1080: eso dejaba
     130 px muertos a cada lado DENTRO de la tarjeta blanca — un margen dentro
     de otro margen, y el texto terminaba empezando a 421 px del borde de la
     pantalla (lo vio Margarita, 2026-08-19: "mucho espacio a los costados").
     Achicando la ficha, las tarjetas la llenan de borde a borde y no queda
     hueco por dentro. El producto se queda fuera de la regla: ese usa dos
     columnas y necesita todo el ancho. */
  /* ⚠️ Antes eran 940 px FIJOS y era el mismo tipo de tope escondido que los
     460 px del celular: por más que se subiera el ancho de la app, las fichas
     de pedido y de equipo se quedaban clavadas ahí. Ahora obedecen el mismo
     control que todo lo demás (2026-08-20). */
  .hoja-llena:not(.det-producto){max-width:var(--ancho-app, min(1720px, 96vw))}
  /* En pantalla ancha la ficha de separado usa DOS columnas: con una sola
     columna quedaba una tira estrecha en medio de la pantalla y muchísimo aire
     a los lados (Margarita, 2026-08-19). Las tarjetas cortas —vendedor,
     contacto, ubicación, fotos— se emparejan de a dos; las que llevan
     contenido largo o son el encabezado ocupan el ancho entero, así el orden
     de lectura que ella definió no se altera: se sigue bajando de arriba
     abajo, solo que dos cosas cortas caben en la misma línea. */
  /* `.hoja-llena.ficha-sep` y no `.ficha-sep` a secas: compite con
     `.hoja-llena:not(.det-producto)` de arriba, que pesa igual que dos clases;
     con una sola clase perdía y la ficha se quedaba en 940. */
  .hoja-llena.ficha-sep,
  /* La ficha de transporte usa el mismo ancho de escritorio. Sin esto se
     quedaba en la columna angosta del celular y las dos columnas no entraban. */
  .hoja-llena.ficha-trans{max-width:var(--ancho-app, min(1720px, 96vw))}
  /* ---- la ficha de separado en pantalla ancha: PANEL LATERAL ----
     Con la app ocupando todo el monitor, las tarjetas de dos columnas se
     estiraban sin contenido que las llenara: "Asignado a … Miriam" con medio
     metro de vacío en medio, el botón de pago perdido en una esquina y las
     horas del historial a un extremo de la pantalla. Margarita: "se volvió un
     desastre, se ve bien fea" (2026-08-20), y eligió este reparto:
       · IZQUIERDA, ancha  → donde se trabaja: Pagos y Notas.
       · DERECHA, angosta  → de consulta: Vendedor, Contacto, Ubicación, Fotos.
     La cabecera, los botones y el pie siguen cruzando de lado a lado. */
  /* ⚠️ FLOTANTES Y NO UNA REJA, y no por nostalgia (2026-08-20). Con
     `display:grid` las tarjetas se colocan FILA POR FILA: la primera de la
     derecha (Vendedor) tomaba la fila 1 columna 2, y Pagos ya no podía
     retroceder a la fila 1 columna 1 — de ahí el hueco enorme arriba a la
     izquierda que reclamó Margarita. `grid-auto-flow:dense` tapa ese hueco
     pero abre otro más abajo, porque la reja obliga a las dos columnas a
     compartir filas: una tarjeta alta de un lado estira la fila del otro.

     Con flotantes cada columna fluye sola y nada comparte filas. Y sobre todo:
     esto es SOLO CSS dentro del bloque de escritorio, sin envolver nada en el
     HTML. La vez anterior se intentó con contenedores `.col-izq`/`.col-der` y
     `order` para el celular, y le movió la ficha en el móvil — porque entre
     las tarjetas hay otros hijos (`.solo-papel`, los inputs ocultos) y después
     van el pie, los botones y la zona de peligro, todos con `order:0`, que al
     ordenar las tarjetas se saltan al frente. Sin tocar el DOM, el móvil no
     puede cambiar. */
  /* ⚠️ Esto SE PROBÓ extendido a `print` (2026-08-23, versión `.5`) para que
     el layout de dos columnas de escritorio saliera igual en el papel, y
     salió catastrófico: en una hoja de verdad (no en esta pantalla ancha de
     prueba) el `float` de la columna izquierda dejó SIN DEFINIR dónde
     terminaba el contenido normal, y el salto de página de `.solo-papel`
     (más abajo) se cortó en cualquier parte — texto y fotos mezclados en la
     misma hoja, dos páginas después de donde debían estar. Lo vio Margarita
     en un PDF real: "no es nada de lo que te pedi". Los `float` y los saltos
     de página forzados (`break-before`/`break-after`) NO se llevan bien —es
     una limitación conocida de cómo los navegadores paginan, no un error de
     escribir la regla mal— así que el layout de columnas se queda SOLO para
     pantalla otra vez, y el papel usa su propio layout, más simple y sin
     `float`, más abajo en `@media print`. */
  .ficha-sep .det-cuerpo{display:block}
  /* IZQUIERDA, angosta y fija → lo que el VENDEDOR tiene que llenar al abrir:
     Pagos y Contacto y retiro. DERECHA, la ancha → todo lo demás: Ubicación,
     Fotos del producto y Notas y movimientos, que es la que más ancho pide
     (línea de tiempo y campo de nota). El reparto lo pidió Margarita el
     2026-08-20; antes era al revés. */
  /* Sin `>` (descendiente, no solo hijo directo): desde que `.papel-izq`/
     `.papel-der` envuelven estas tarjetas para el papel (más abajo, ver
     `@media print`), Pagos/Contacto/Ubicación/Notas ya NO son hijos
     DIRECTOS de `.det-cuerpo` en el DOM — aunque en PANTALLA sigan
     comportándose como si lo fueran, porque esos envoltorios son
     `display:contents` (invisibles para la caja, pero el DOM sigue siendo
     el DOM: los selectores no "ven a través" de `display:contents`, así que
     el `>` de antes había dejado de calzar). */
  .ficha-sep .det-cuerpo .izq{
    float:left;clear:left;width:380px;margin-right:14px}
  /* El canal que le deja libre la columna izquierda: 380 de ancho + 14 de aire. */
  .ficha-sep .det-cuerpo .der{margin-left:394px}
  /* Factura / Ubicación / Foto de retiro, una junto a otra (Margarita,
     2026-08-23). Cada `.secc` ya trae su propia tarjeta — acá solo se ponen
     en fila y se les quita el margen inferior individual, que en fila ya no
     hace falta (lo pone el `gap`). En celular NO entra este bloque: se
     quedan apiladas, cada una con su margen de siempre. */
  /* `align-items:stretch` (no `flex-start`) para que las tres cajas midan lo
     mismo de alto —Margarita, 2026-08-23: "deberian ser del mismo tamano"—
     y `.rotulo` con `flex-wrap` para que "Cámara"/"Galería" bajen a su propia
     línea en vez de desbordarse hacia la caja de al lado cuando la columna
     queda angosta (eran tres en vez de dos, así que hay menos ancho cada
     una). */
  .fotos-tres{display:flex;align-items:stretch;gap:14px}
  .fotos-tres > .secc{flex:1;min-width:0;margin-bottom:0}
  .fotos-tres .rotulo{flex-wrap:wrap;row-gap:4px}
  /* --- El tablero de provincia, en escritorio: UNA sola columna --- */
  /* ⚠️ Se probaron dos versiones de "Factura/Vendedor/Pago en una fila"
     (una rejilla de 3 columnas, después un `flex-wrap`) y ninguna era lo
     que Margarita pedía: "la primera fila no debería tener 3 columnas...
     es una sola fila con una sola columna que indica la factura, el
     vendedor, y si ya fue pagado o no" (2026-09-18). Es decir: NO tres
     tarjetas — el encabezado YA mostraba el vendedor (`.vend-cab`) y el
     sello Pagado/Sin pagar (`pillsEstado`) en su propia fila, desde mucho
     antes de esta sesión. El problema era que esta sesión agregó una
     tarjeta de Vendedor SUELTA, visible también en escritorio para
     Provincia — compitiendo con lo que el encabezado ya resolvía. Se
     vuelve a la regla de siempre: en escritorio, Vendedor se esconde
     (su dato ya está en la cabecera) iguial que en cualquier separado. Pago
     se queda como su propia tarjeta — ahí sí hace falta un lugar para
     registrar o listar pagos, algo que un sello no puede hacer — pero sola,
     a lo ancho, sin compartir fila con nada. */
  /* ⚠️ El `width:100%` NO sobra (2026-09-18, Margarita: *"cuando abro factura
     tiene un tamaño y cuando abro embalaje tiene otro"*). El padre (`#det`) es
     una COLUMNA FLEXIBLE, y un `margin:0 auto` sobre un hijo de una columna
     flexible ANULA el estirado y lo deja del ancho de su contenido: la ficha
     medía 615px con Embalaje cerrado y 1040px con Embalaje abierto, porque la
     rejilla de cajas es lo más ancho que hay adentro. Medido en el navegador,
     no deducido del CSS. Con `width:100%` el ancho lo manda la pantalla —
     siempre 1040 — y el contenido ya no lo mueve. */
  .ficha-sep .det-cuerpo.tablero{display:flex;flex-direction:column;gap:12px;
    width:100%;max-width:1040px;margin:0 auto}
  /* Los `float` de `.izq`/`.der` son de la ficha de siempre y aquí sobran. */
  .ficha-sep .det-cuerpo.tablero .izq{float:none;width:auto;margin-right:0}
  .ficha-sep .det-cuerpo.tablero .der{margin-left:0}
  /* El aire entre tarjetas lo pone el `gap`; el margen de cada una sobra. */
  .ficha-sep .det-cuerpo.tablero .secc,
  .ficha-sep .det-cuerpo.tablero > .sep-cab,
  .ficha-sep .det-cuerpo.tablero > .viene,
  .ficha-sep .det-cuerpo.tablero .prov-pasos{margin-bottom:0}
  .tablero .papel-der .historial-caja{max-height:560px;overflow-y:auto;padding-right:4px}
  /* Cajas dejadas · Foto de la entrega · Guía, una junto a otra: la tarjeta
     ocupa el ancho entero al fondo y apiladas quedaban con más aire que
     contenido. La raya entre columnas es lo que las separa de verdad. */
  .tablero .ent-cols{flex-direction:row;align-items:flex-start;gap:22px}
  .tablero .ent-col{flex:1;min-width:0}
  .tablero .ent-col + .ent-col{border-left:1px solid var(--linea);padding-left:22px}
  /* En una columna de un tercio, el número del documento y la fecha ya no
     entran uno al lado del otro. */
  .tablero > .sep-cab{flex-wrap:wrap}
  .tablero > .sep-cab .fecha-doc{text-align:left}

  /* El vendedor sube a la cabecera y su tarjeta sobra: era una tarjeta entera
     para un solo dato. Sigue en el HTML porque en celular sí se usa. Igual
     en Provincia (2026-09-18: se probó mostrarla suelta también en
     escritorio ahí, y no era lo que Margarita pedía — el vendedor ya está
     en la cabecera, mostrarlo dos veces era el problema, no la solución). */
  .ficha-sep .secc-vendedor{display:none}
  .sep-cab .vend-cab{display:block;font-size:var(--t2);color:var(--tinta2);margin-top:1px}
  .sep-cab .vend-cab::before{content:"Vendedor: ";color:var(--tinta3)}
  /* Las píldoras de estado se van al filo derecho, debajo de la fecha. */
  .sep-cab .pills-abajo{display:none}
  .sep-cab .pills-lado{display:block;margin-top:9px}
  /* Las píldoras en UNA fila, pegadas a la derecha (2026-09-19, Margarita:
     *"la fecha sale abajo, debería salir en la misma línea de la
     transferencia"*). Se apilaban porque la columna de la derecha estaba
     tope en un tercio del encabezado y dos píldoras no entran ahí: el ancho
     era la causa, no la alineación. El tope sube al 62% SOLO en la ficha de
     Provincia, que es la que tiene varias; el resto se queda como estaba. */
  .ficha-sep .tablero > .sep-cab .fecha-doc{max-width:62%}
  .ficha-sep .sep-cab .pills-lado{display:flex;flex-wrap:wrap;gap:6px;
    justify-content:flex-end;align-items:center}
  /* El celeste de fondo y el sello "por llenar" se PROBARON y se quitaron
     (Margarita, 2026-08-20): "el celeste no… se acumula mucho ruido visual".
     Lo que queda marcando que ahí hay algo que hacer es el botón sólido, igual
     que "+ Registrar pago" — que es lo que ella pidió en su lugar. */
  /* Lo que cruza de lado a lado tiene que bajar por debajo de los flotantes,
     o se le mete debajo la columna derecha. */
  .ficha-sep .det-cuerpo > .sep-cab,
  .ficha-sep .det-cuerpo > .hoja-btns,
  .ficha-sep .det-cuerpo > .peligro,
  .ficha-sep .det-cuerpo > .no-imprimir{clear:both}
  /* ⚠️ El valor pegado a su etiqueta, no al otro extremo de la tarjeta. Con
     `justify-content:space-between` (que es lo que trae `.dato`) en una
     pantalla ancha quedaba "Asignado a" a un lado y "Miriam" al otro, con un
     abismo en medio que obliga a barrer con la vista para juntar las dos
     mitades. Lo eligió Margarita el 2026-08-20. */
  .ficha-sep .dato{justify-content:flex-start;gap:8px}
  .ficha-sep .dato dt::after{content:":"}
  .ficha-sep .dato dd{text-align:left}
  /* En la línea de tiempo, la hora deja de irse al filo derecho de una tarjeta
     ancha: se queda a una distancia fija del texto, que es donde la vista la
     busca. */
  .ficha-sep .lt-que{flex:0 1 auto}
  .ficha-sep .lt-cuando{margin-left:14px;order:3}
  .ficha-sep .lt-btns{margin-left:14px;order:2}
  /* Y "Anular"/"Confirmar" se quedan junto al pago, no en el filo derecho de
     una tarjeta de metro y medio. */
  .ficha-sep .pago-texto{flex:0 1 auto}
  .ficha-sep .pago-fila > .no-imprimir{margin-left:14px}
  .det-producto .acciones{position:static;transform:none;max-width:none;width:auto;flex:none}
  .fila{padding-left:18px;padding-right:18px}
  .miniatura,.sinfoto{width:64px;height:64px}

  /* --------------------- panel de escritorio de Separado --------------------- */
  .panel-sep{display:block}

}

/* ---------------- hojas ---------------- */
.velo{position:fixed;inset:0;background:rgba(10,18,23,.45);z-index:95;display:grid;
  align-items:end;justify-items:center}
.hoja{width:100%;max-width:min(560px, 100%);background:var(--sup);
  border-radius:var(--r-grande) var(--r-grande) 0 0;
  padding:19px 17px calc(19px + env(safe-area-inset-bottom));
  max-height:88vh;overflow-y:auto}
/* Hojas con muchos campos (ej. crear un separado): más aire que la hoja
   angosta de siempre, tanto en el celular (más padding) como en la web (más
   ancho, para que no se sienta apretada al lado de tanto campo). */
.hoja{padding:23px 21px calc(23px + env(safe-area-inset-bottom))}
@media screen and (min-width:640px){.hoja{max-width:min(640px, 100%);padding:28px 32px calc(28px + env(safe-area-inset-bottom))}}
/* EN ESCRITORIO la hoja va CENTRADA, no pegada al borde de abajo (2026-09-19,
   Margarita: *"sale muy abajo que no puedo escoger ni la fecha bien"*). La
   hoja pegada abajo es el patrón correcto en el celular —el pulgar llega— pero
   en una pantalla grande deja el campo a dos centímetros del borde inferior, y
   el calendario que abre el navegador para un `<input type="date">` se despliega
   hacia abajo y queda fuera de la pantalla, sin forma de elegir el día.
   Le pasa a TODA hoja con fecha, no solo a la del envío: "Día del retiro" en
   Contacto y retiro tenía el mismo problema. Por eso se arregla aquí, en la
   hoja, y no en una pantalla suelta. El celular no se toca. */
@media screen and (min-width:900px){
  .velo{align-items:center}
  .hoja{border-radius:var(--r-grande);max-height:86vh}
}
.hoja h3{margin:0 0 4px;font-size:var(--t3)}
.hoja>p{margin:0 0 15px;font-size:var(--t2);color:var(--tinta2)}
.hoja .prev{display:flex;gap:12px;align-items:center;margin-bottom:16px;padding:11px;
  background:var(--sup2);border-radius:8px}
.hoja .prev img{width:56px;height:56px;object-fit:cover;border-radius:5px;flex:none}
.hoja-btns{display:flex;gap:9px;margin-top:4px}
.hoja-btns button{flex:1;min-width:0;padding:13px;border-radius:var(--r-chico);font-size:var(--t2);font-weight:600}
.b1{background:var(--acento);color:#fff}
.b2{border:1px solid var(--linea)}
.hoja textarea{width:100%;min-height:88px;border:1px solid var(--linea);border-radius:8px;
  padding:11px;font:inherit;font-size:var(--t3);background:var(--sup2);color:var(--tinta);resize:vertical}
.tipos{display:flex;gap:6px;flex-wrap:wrap;margin:11px 0 14px}
.tipos button{border:1px solid var(--linea);border-radius:var(--r-pildora);padding:6px 11px;font-size:var(--t1)}
.tipos button[aria-pressed="true"]{background:var(--acento);border-color:var(--acento);
  color:#fff;font-weight:600}
.opciones{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.opcion{border:1px solid var(--linea);border-radius:8px;padding:13px;text-align:left;
  display:flex;align-items:center;gap:11px}
.opcion[aria-pressed="true"]{border-color:var(--acento);background:var(--acento-sup)}
.opcion b{font-size:var(--t2)}
.reparto{border:1px solid var(--linea);border-radius:8px;overflow:hidden;margin-bottom:14px}
.reparto div{display:flex;gap:9px;padding:9px 11px;font-size:var(--t1);align-items:flex-start}
.reparto div+div{border-top:1px solid var(--linea)}
.reparto .si{color:var(--hay)} .reparto .no{color:var(--nohay)}

/* --- fichas de transporte (2026-08-26) --- */
.prov-secciones{display:flex;gap:6px;padding:10px 14px 0}
.prov-secc{padding:7px 13px;border:1px solid var(--linea);background:none;border-radius:99px;
  font-size:var(--t1);color:var(--tinta2);cursor:pointer}
.prov-secc.puesta{background:var(--acento-sup);border-color:var(--acento-sup);
  color:var(--acento);font-weight:650}
.mini{padding:3px 8px;font-size:var(--t1);border:1px solid var(--linea);border-radius:5px;
  background:none;color:var(--tinta2);cursor:pointer}
.mini:hover{border-color:var(--tinta3);color:var(--tinta)}
.ofi{border:1px solid var(--linea);border-radius:8px;padding:10px 12px;margin-bottom:9px}
.ofi-tit{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-bottom:5px;font-size:var(--t2)}
.ofi-tit .sep{flex:1}
.ofi-dato{font-size:var(--t1);margin-top:2px}
.enlace-mapa{color:var(--acento);font-size:var(--t1);text-decoration:none}
.enlace-mapa:hover{text-decoration:underline}
.ofi-tels{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
/* El teléfono es un botón para marcar, no un dato para leer: el vendedor lo
   toca parado frente al cliente. El ✅ del documento de Margarita —el número
   que de verdad contesta— es el que se pinta lleno. */
.tel{display:inline-flex;gap:6px;align-items:center;padding:6px 10px;border-radius:6px;
  border:1px solid var(--linea);font-size:var(--t1);text-decoration:none;color:var(--tinta);
  font-variant-numeric:tabular-nums}
/* El que contesta: verde, lleno y en negrita. Los demás, apagados — antes
   todos pesaban igual y había que adivinar (2026-09-20). */
.tel.pref{border-color:var(--hay);background:var(--hay-sup);font-weight:700}
.ofi-tels .tel:not(.pref){color:var(--tinta2);border-style:dashed}
.tel:hover{border-color:var(--tinta3)}
/* `min-width:0` es obligatorio: un <input> dentro de un flex no se encoge por
   debajo de su ancho de contenido y se come la fila entera (ya pasó con el
   campo de ubicación). */
.tel-fila{display:flex;gap:6px;align-items:center;margin-bottom:6px}
.tel-fila .tel-num{flex:0 1 140px;min-width:0}
.tel-fila .tel-etq{flex:1 1 100px;min-width:0}
.tel-fila input[type=text],.tel-fila input:not([type]){padding:7px 9px;font-size:var(--t1)}
.tel-pref{flex:none;display:flex;gap:4px;align-items:center;font-size:var(--t1);
  color:var(--tinta2);white-space:nowrap}

/* --- la ficha de transporte a pantalla completa (2026-08-28) ---
   Nació como ventanita modal y Margarita la cortó: "todo está muy comprimido y
   no me sirve". Una empresa con 17 oficinas no cabe en un modal. Ahora usa el
   mismo molde que la ficha de producto: tarjetas sobre el fondo gris. */
.ficha-trans{background:var(--fondo)}
.ficha-trans .det-cab{background:var(--fondo)}
.ficha-trans .det-cab .cab-fecha{font-size:var(--t1)}
/* `tsecc` y NO `secc` (2026-08-28). Reusar `.secc` metía la ficha debajo de la
   regla global `.secc > div{padding:0 !important}` —pensada para las secciones
   de la ficha de separado—, que le borraba el relleno a CADA hijo directo. El
   resultado: la foto, el ícono y el botón Editar pegados al borde de su caja,
   sin un milímetro de aire. Se ve como algo mal terminado y lo era.
   Es la MISMA trampa que ya había pasado con `.reparto` unas horas antes:
   reusar una clase por su nombre sin leer su CSS. */
.ficha-trans .tsecc{background:var(--sup);border:1px solid var(--linea);
  border-radius:12px;padding:14px 16px;margin-bottom:12px}
.ficha-trans .tsecc textarea{width:100%;min-width:0}
/* --- Editor de direcciones a página completa (2026-08-30) ---
   Clases propias (`de-*`) y no `.campo` ni `.reparto`: aquí los campos van en
   REJILLA para aprovechar el ancho, y `.campo` está pensada para una tira de
   uno debajo de otro. Reusarla habría dado justo la tira apretada que
   Margarita vino a quitar. */
.de-rejilla{display:grid;gap:15px 18px;
  grid-template-columns:repeat(auto-fit, minmax(235px, 1fr))}
.de-campo{display:flex;flex-direction:column;gap:5px;min-width:0}
.de-campo > span{font-size:var(--t1);font-weight:650;letter-spacing:.04em;
  text-transform:uppercase;color:var(--tinta2)}
.de-campo > em{font-size:var(--t1);font-style:normal;color:var(--tinta3);line-height:1.35}
.de-campo input, .de-campo select{width:100%;min-width:0;font:inherit;font-size:var(--t3);
  padding:10px 12px;border:1px solid var(--linea);border-radius:8px;
  background:var(--fondo);color:var(--tinta)}
.de-campo input:focus, .de-campo select:focus{outline:2px solid var(--acento);
  outline-offset:-1px;border-color:var(--acento)}
/* Los botones se quedan a la vista: el formulario es largo y tener que bajar
   hasta el final para guardar es la mitad del problema de "no puedo editarlo
   en grande". */
/* Casilla del flete. Clase propia (`de-casilla`) y no un `.campo` con un input
   adentro: aquí el control y su texto van EN LÍNEA, y `.de-campo` apila. */
.de-casilla{display:flex;gap:9px;align-items:center;cursor:pointer;
  margin-bottom:12px;font-size:var(--t2)}
.de-casilla input{width:17px;height:17px;flex:none;accent-color:var(--acento);margin:0}
.de-casilla span{user-select:none}
.de-btns{position:sticky;bottom:0;display:flex;gap:10px;justify-content:flex-end;
  flex-wrap:wrap;padding:13px 0 calc(13px + env(safe-area-inset-bottom));
  margin-top:4px;background:var(--fondo);border-top:1px solid var(--linea)}
.dest-edit .det-cuerpo{padding-bottom:0}
.trans-cab{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap;
  margin-bottom:12px}
.trans-tit{flex:1;min-width:220px}
.trans-tit h2{font-size:var(--t4);font-weight:750;display:flex;gap:9px;
  align-items:center;flex-wrap:wrap;margin:0 0 3px}
.trans-acc{flex:none;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
/* El aviso de lo que falta: se ve, no se esconde. Es una lista de tareas. */
.aviso-falta{display:flex;gap:12px;align-items:center;flex-wrap:wrap;
  background:var(--sup);border:1px solid var(--linea);border-left:3px solid var(--acento);
  border-radius:10px;padding:12px 14px;margin-bottom:12px;font-size:var(--t2)}
.aviso-falta > div{flex:1;min-width:200px}

/* Una sola columna en celular; dos en cuanto hay sitio, con la angosta a la
   derecha tal como el diseño que mandó Margarita. `grid` y no `float`: aquí no
   hay que imprimir nada, así que no arrastra los problemas de paginación que
   sí tuvo la ficha de separado. */
.trans-cols{display:grid;gap:0 18px;grid-template-columns:1fr}
@media screen and (min-width:900px){
  .trans-cols{grid-template-columns:minmax(0,1fr) 340px}
}
.trans-izq,.trans-der{min-width:0}

/* Cada oficina, una tarjeta de verdad dentro de su sección (Margarita,
   2026-08-28: "es como una caja incompleta, que no tiene buenos bordes o
   márgenes y se ve un poco mal hecha").

   Lo que estaba mal era concreto: el borde de 1px del mismo color que el de la
   sección que la contiene hacía que las dos líneas se confundieran y pareciera
   una caja sin cerrar; el relleno de 11px no alcanzaba para separar la foto del
   borde; y el título quedaba pegado al contenido sin ninguna separación.

   Ahora la oficina tiene FONDO PROPIO (un tono por encima de la tarjeta madre),
   sin borde: el contraste de fondos separa mejor que una línea, y no compite
   con el borde de la sección. */
.ficha-trans .ofi{background:var(--sup2);border-radius:11px;
  padding:13px 14px;margin-bottom:10px}
.ficha-trans .ofi:last-child{margin-bottom:0}
/* La cabecera con su propia línea de separación, tenue y solo por dentro.
   `nowrap`: con `wrap` el botón Editar se caía a su propia línea en celular y
   la cabecera ocupaba el doble. El nombre largo se corta con puntos suspensivos
   en vez de empujar al botón. */
.ficha-trans .ofi-tit{padding-bottom:9px;margin-bottom:11px;
  border-bottom:1px solid var(--linea);flex-wrap:nowrap}
.ficha-trans .ofi-tit b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.ficha-trans .ofi-tit .pill{flex:none}
/* Un poco de aire entre datos: iban pegados uno debajo del otro. */
.ficha-trans .ofi-dato + .ofi-dato{margin-top:5px}
/* Tres columnas: foto · datos · teléfonos. Los teléfonos a la derecha porque
   son lo que más se toca, y abajo de la dirección quedaban perdidos. */
.ofi-cuerpo{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap}
.ofi-izq{flex:1 1 240px;min-width:0}
.ficha-trans .ofi-tels{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;
  align-items:stretch;margin-top:0;margin-left:auto}
/* En celular no hay tres columnas que valgan: los teléfonos pasan a una fila
   ancha debajo, que sigue siendo cómoda para el pulgar. */
@media screen and (max-width:620px){
  .ficha-trans .ofi-tels{flex-direction:row;flex-wrap:wrap;width:100%;margin-left:0}
}
.ruta-chip.mas{border-style:dashed;color:var(--acento)}

/* "Información adicional": etiqueta a la izquierda, valor a la derecha, y el
   lápiz que abre la edición de ese dato. */
.dato-fila{display:flex;gap:10px;align-items:center;padding:9px 0;font-size:var(--t2)}
.dato-fila + .dato-fila{border-top:1px solid var(--linea)}
.dato-etq{flex:1;min-width:0;color:var(--tinta2)}
.dato-val{flex:none;text-align:right;max-width:60%;font-weight:600}
.dato-val .si{color:var(--hay)} .dato-val .no{color:var(--nohay)}
.lapiz{flex:none;background:none;border:0;color:var(--tinta3);cursor:pointer;
  font-size:var(--t2);padding:2px 4px;border-radius:5px}
.lapiz:hover{color:var(--acento);background:var(--acento-sup)}
.quien{display:flex;gap:10px;align-items:center;font-size:var(--t2)}

/* El aviso de arrastrar y soltar. Cubre todo porque soltar vale en cualquier
   parte: la app decide sola a qué pantalla va la foto. */
#capa-soltar{position:fixed;inset:0;z-index:120;display:none;
  align-items:center;justify-content:center;background:rgba(8,13,16,.72);
  backdrop-filter:blur(2px);pointer-events:none}
#capa-soltar.puesta{display:flex}
.soltar-caja{display:grid;place-items:center;gap:7px;padding:30px 42px;
  border:2px dashed var(--acento);border-radius:16px;background:var(--sup);
  color:var(--tinta);text-align:center}
.soltar-caja b{font-size:var(--t3)}
.soltar-caja span{font-size:var(--t1);color:var(--tinta3)}
.soltar-caja .ico{color:var(--acento);opacity:1}

/* Las provincias del panel de rutas: nombre y cuántos destinos tiene. Contesta
   "¿hasta dónde llega este transporte?" con cinco palabras en vez de con 57
   pueblos sueltos, que era lo que confundía. */
.provs{display:flex;flex-direction:column;gap:5px}
.prov{display:flex;align-items:center;gap:9px;width:100%;padding:8px 10px;
  border:1px solid var(--linea);border-radius:8px;background:none;
  color:var(--tinta);font-size:var(--t2);cursor:pointer;text-align:left}
.prov:hover{border-color:var(--acento);color:var(--acento)}
.prov-n{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.prov-c{flex:none;min-width:24px;padding:1px 7px;border-radius:99px;
  background:var(--sup2);color:var(--tinta2);font-size:var(--t1);font-weight:650;
  font-variant-numeric:tabular-nums;text-align:center}
.prov:hover .prov-c{background:var(--acento-sup);color:var(--acento)}

/* Las sugerencias de transporte por ciudad, dentro del formulario de envío. */
.sugerencias{margin-bottom:10px}
.sug-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
.sug{display:grid;gap:1px;text-align:left;padding:7px 11px;border-radius:8px;
  border:1px solid var(--linea);background:none;color:var(--tinta);
  font-size:var(--t1);cursor:pointer}
.sug:hover{border-color:var(--acento)}
.sug[aria-pressed=true]{border-color:var(--acento);background:var(--acento-sup);
  color:var(--acento)}
.sug-sub{font-size:var(--t1);color:var(--tinta3)}
.sug[aria-pressed=true] .sug-sub{color:var(--acento)}

/* Las direcciones sugeridas dentro del formulario de envío. */
.dest-sug{margin-bottom:12px}
.dest-op{display:grid;gap:1px;width:100%;text-align:left;padding:8px 11px;margin-bottom:5px;
  border:1px solid var(--linea);border-radius:8px;background:none;color:var(--tinta);
  font-size:var(--t2);cursor:pointer}
.dest-op:hover{border-color:var(--acento)}
.dest-op span{font-size:var(--t1);color:var(--tinta3)}

/* --- la ficha de una dirección (2026-08-29) ---
   Margarita: "está todo muy agrupado". Cada dato va en su PROPIA línea, con el
   rótulo arriba en chico y el valor abajo en grande, y con aire entre uno y
   otro. Para repasar 700 direcciones hay que poder LEERLAS de un vistazo, no
   descifrar un formulario comprimido. */
.dfila{padding:13px 0}
.dfila + .dfila{border-top:1px solid var(--linea)}
.dfila:first-of-type{padding-top:4px}
.dfila:last-child{padding-bottom:2px}
.dfila-etq{display:flex;align-items:center;gap:6px;font-size:var(--t1);
  text-transform:uppercase;letter-spacing:.07em;color:var(--tinta3);margin-bottom:5px}
.dfila-etq .ico{color:var(--tinta3);opacity:.8}
/* El valor, grande y cómodo de leer. `word-break` porque hay direcciones y
   correos largos que si no desbordan la tarjeta. */
.dfila-val{font-size:var(--t3);line-height:1.5;color:var(--tinta);
  overflow-wrap:anywhere}
.dfila-val .tel{margin:2px 4px 2px 0}
.dnota{font-size:var(--t2);line-height:1.55;margin:0}
/* El aviso cuando NO falta nada: tan importante como el de cuando falta, para
   que al repasar se sepa cuál ya está lista sin tener que leerla entera. */
.aviso-ok{display:flex;gap:12px;align-items:center;
  background:var(--hay-sup);border-radius:10px;padding:12px 14px;margin-bottom:12px;
  font-size:var(--t2);color:var(--hay)}
.aviso-ok .ico{color:var(--hay);opacity:1}
/* Más aire entre las tarjetas de esta ficha que en la de transporte: aquí se
   está leyendo, no operando. */
.ficha-trans .tsecc{margin-bottom:14px}

/* Los dibujos: mismo color que el texto que acompañan, un pelo más apagados
   para que guíen sin competir. En los rótulos toman el color de acento, que es
   lo que hace que la sección se encuentre de un vistazo al bajar. */
.ico{flex:none;opacity:.85;vertical-align:-2px}
.rotulo > .ico{color:var(--acento);opacity:1;margin-right:5px}
.dato-etq{display:flex;align-items:center;gap:7px}
.dato-etq .ico{color:var(--tinta3)}
.ofi-tit > .ico{color:var(--acento)}
.ofi-dato{display:flex;gap:7px;align-items:flex-start}
.ofi-dato .ico{margin-top:2px;color:var(--tinta3)}
.aviso-falta > .ico{color:var(--acento);opacity:1;margin-top:1px}
.tel .ico{color:currentColor;opacity:.7}

/* La fotito de la lista, del mismo tamaño que la del producto para que las dos
   listas se lean igual. Sin foto va el camioncito, no un hueco. */
.trans-lista{border:1px solid var(--linea);border-radius:8px;overflow:hidden}
.trans-fila{display:flex;gap:11px;align-items:center;padding:10px 12px;cursor:pointer}
.trans-fila + .trans-fila{border-top:1px solid var(--linea)}
.trans-fila:hover{background:var(--sup2)}
/* El texto apilado: nombre (con sus píldoras al lado) arriba, el resumen
   abajo. `min-width:0` para que el nombre largo se corte en vez de empujar. */
.trans-txt{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.trans-txt b{font-size:var(--t2);font-weight:650}
/* La casilla de "seleccionar para viaje": el cuadrito sigue midiendo 20 px
   pero su zona de toque ocupa la celda entera, 44 px de alto (2026-09-21).
   Los márgenes negativos hacen que crezca hacia fuera sin estirar la fila. */
/* El nombre del viaje es un botón, pero se lee como el título que era: sin
   recuadro, con subrayado punteado que dice "esto se puede cambiar". */
/* Los tres selectores de hora, en fila y con aire de dedo (2026-09-21). */
.hora-sel{display:flex;align-items:center;gap:7px;margin:2px 0 6px}
.hora-sel select{flex:1;min-width:0;min-height:44px;padding:10px 12px;font:inherit;
  font-size:var(--t3);font-weight:600;border:1px solid var(--linea);border-radius:9px;
  background:var(--sup);color:var(--tinta);cursor:pointer}
.hora-sel > span{font-size:var(--t3);font-weight:700;color:var(--tinta3)}
.viaje-nombre{background:none;border:0;padding:0;font:inherit;font-weight:600;
  color:var(--tinta);cursor:pointer;text-decoration:underline dotted;
  text-underline-offset:3px}
.viaje-nombre:hover{color:var(--acento)}
.sel-td{padding:0 !important}
.sel-caja{display:flex;align-items:center;justify-content:center;
  min-width:46px;min-height:44px;cursor:pointer;margin:0}
.sel-caja input{width:20px;height:20px;accent-color:var(--acento);cursor:pointer}
.trans-sub{flex-basis:100%;font-size:var(--t1);color:var(--tinta3)}
/* Las provincias a las que llega, en la lista (2026-09-20). Pastillas chicas y
   apagadas: son muchas y tienen que leerse de un barrido sin taparle el sitio
   al nombre del transporte. */
.trans-prov{flex-basis:100%;display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.prov-chip{font-size:var(--t1);line-height:1;padding:4px 8px;border-radius:999px;
  background:var(--sup2);color:var(--tinta2);white-space:nowrap}
.prov-mas{color:var(--tinta3)}
/* EL MAPA DE OFICINAS (2026-09-20). Dos columnas en escritorio —el dibujo y la
   lista de ciudades— y apilado en celular; ver el bloque en @media de abajo. */
.mapa-caja{background:var(--sup);border:1px solid var(--linea);border-radius:12px;
  padding:14px 16px;margin-bottom:12px}
.mapa-cab{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-bottom:8px}
.mapa-cab b{font-size:var(--t2)}
.mapa-sub{font-size:var(--t1);color:var(--tinta3)}
/* Ancho TOPE además del alto: el Ecuador es más alto que ancho, así que a
   pantalla completa quedaba un dibujo chiquito perdido en medio de una franja
   vacía. Con el tope, el mapa y la lista de ciudades se ponen lado a lado. */
.mapa-ec{display:block;width:100%;max-width:400px;max-height:430px;margin:0 auto}
.mapa-cuerpo{display:flex;flex-wrap:wrap;gap:6px 22px;align-items:center}
.mapa-cuerpo > .mapa-ec{flex:0 0 auto}
.mapa-ciudades{flex:1;min-width:190px;display:flex;flex-wrap:wrap;gap:5px;align-content:center}
.mapa-prov{fill:var(--sup2);stroke:var(--sup);stroke-width:1.6}
/* El nombre de la provincia: chico y apagado, tiene que leerse sin competirle
   al punto de la ciudad, que es lo que uno viene a buscar. `pointer-events` en
   none para que el nombre no se coma el toque del pin que tenga encima. */
.mapa-prov-n{fill:var(--tinta3);font-size:var(--t1);text-anchor:middle;
  pointer-events:none;font-weight:600}
.mapa-pin circle{fill:var(--acento);fill-opacity:.85;stroke:var(--sup);stroke-width:2.5;
  cursor:pointer;transition:fill-opacity .12s}
.mapa-pin text{fill:#fff;font-size:var(--t2);font-weight:700;text-anchor:middle;
  pointer-events:none;font-variant-numeric:tabular-nums}
.mapa-pin:hover circle,.mapa-pin:focus circle{fill-opacity:1}
.mapa-pin:focus{outline:none}
.mapa-pin:focus circle{stroke:var(--acento);stroke-width:3}
.mapa-pie{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin-top:10px}
.mapa-chip{border:0;cursor:pointer;font:inherit;font-size:var(--t1);padding:5px 9px}
.mapa-chip:hover{background:var(--acento-sup);color:var(--acento)}
.mapa-falta{font-size:var(--t1);color:var(--tinta3);margin-left:2px}
/* LA HOJA DE RUTA. Se lee en el celular dentro del carro: tarjetas grandes,
   número de parada bien visible y un solo botón que importa por parada. */
.ruta-lista-caja{margin:10px 0 4px}
.ruta-parada{border:1px solid var(--linea);border-radius:10px;padding:11px 13px;margin-bottom:9px}
.ruta-parada.ruta-lista{opacity:.55}
.ruta-cab{display:flex;align-items:center;gap:10px}
.ruta-n{flex:none;width:26px;height:26px;border-radius:50%;background:var(--acento);color:#fff;
  font-size:var(--t2);font-weight:700;display:flex;align-items:center;justify-content:center}
.ruta-quien{flex:1;min-width:0;display:flex;flex-direction:column}
.ruta-quien b{font-size:var(--t2)}
.ruta-cajas{flex:none;font-size:var(--t2);font-weight:700;color:var(--acento)}
/* La columna del orden: flecha, número, flecha — apiladas a la izquierda de
   la tarjeta (2026-09-21). Así el número queda ENTRE las dos flechas y se lee
   solo: esto sube o baja la parada. */
.ruta-orden{flex:none;display:flex;flex-direction:column;align-items:center;gap:2px}
.ruta-orden button{width:30px;height:26px;border:1px solid var(--linea);background:var(--sup);
  color:var(--tinta2);border-radius:7px;font-size:var(--t2);line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center}
.ruta-orden button:disabled{opacity:.25;cursor:default}
.ruta-orden button:not(:disabled):hover{border-color:var(--acento);color:var(--acento);
  background:var(--acento-sup)}
.ruta-dir{font-size:var(--t1);margin-top:5px;color:var(--tinta2)}
/* Cada oficina de origen, en su bloque. Con una sola no se nota; con dos o
   tres, la raya al costado deja claro dónde empieza cada una (2026-09-21). */
.ruta-ofi{margin-top:7px}
.ruta-ofi-n{font-size:var(--t1);font-weight:700;color:var(--tinta)}
.ruta-ofi .ruta-btns{margin-top:7px}
/* Las otras oficinas, plegadas: el resumen se lee como un enlace discreto y
   lo de dentro va apagado, para que la elegida siga siendo la que manda. */
.ruta-otras{margin-top:8px}
.ruta-otras > summary{cursor:pointer;font-size:var(--t1);color:var(--acento);
  font-weight:600;padding:6px 0;list-style:none}
.ruta-otras > summary::-webkit-details-marker{display:none}
.ruta-otras > summary::before{content:"▸ ";font-size:var(--t1)}
.ruta-otras[open] > summary::before{content:"▾ "}
.ruta-ofi.otra{border-top:1px solid var(--linea);padding-top:8px;margin-top:4px}
.ruta-btns .ruta-usar{background:var(--sup2);border-color:var(--linea);
  color:var(--tinta2);cursor:pointer}
.ruta-btns .ruta-usar:hover{border-color:var(--acento);color:var(--acento)}
/* Una fila por factura: el texto a la izquierda y SU botón a la derecha
   (2026-09-21). Deja de ser una <ul> con viñetas — cada factura es ahora una
   fila con una acción propia, no un punto de una lista. */
.ruta-docs{margin:9px 0 0;display:flex;flex-direction:column;gap:7px}
.ruta-doc{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.ruta-doc-txt{flex:1;min-width:190px;font-size:var(--t1)}
.ruta-doc-linea{display:flex;flex-wrap:wrap;align-items:center;gap:0 6px}
.ruta-doc-sub{display:flex;flex-wrap:wrap;align-items:center;gap:0 10px;margin-top:1px}
/* El botón NO se encoge: es la acción y siempre se lee entera. */
.ruta-doc .ruta-dejar{flex:none}
.ruta-btns{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px}
/* La hoja de ruta, más ancha que las demás: con 640 px los tres botones de
   cada parada caían en dos filas (Margarita, 2026-09-21: *"haz este panel un
   poco más ancho como para que entren los tres botones en la misma fila"*).
   En celular manda el ancho de la pantalla, así que esto solo cambia en
   escritorio. */
@media screen and (min-width:640px){
  /* 980, no 820 (Margarita, 2026-09-21: *"podría hacer la ventana de la hoja de
     ruta más ancha para que entren todos sin problema"*). Con 820 los tres
     botones entraban pero pegados, y una dirección larga partía en dos líneas.
     El `92vw` es el tope de verdad: en una ventana angosta la hoja nunca llega
     a tocar los bordes, que es lo que la hace sentirse una ventana y no la
     pantalla entera. */
  .hoja.ruta-hoja{max-width:min(980px, 92vw)}
  /* En escritorio los tres van SIEMPRE en una fila, pase lo que pase con el
     largo de los textos (Margarita, 2026-09-21: *"todo —cómo llegar, teléfono
     y registrar entrega— deben estar en una sola fila"*). Antes dependía de
     que cupieran: un transporte con nombre largo o un número de nueve cifras
     los empujaba a una segunda fila.
     `nowrap` + `flex:1` + `min-width:0` reparte el ancho entre los tres y, si
     hiciera falta, recorta el texto con puntos suspensivos en vez de bajar
     uno. En celular NO entra: ahí apilarse es lo correcto. */
  /* Ya no hace falta forzar la fila: abajo solo quedan DOS botones —cómo
     llegar y el teléfono— y entran de sobra. El apaño de repartir el ancho
     entre tres fue lo que aplastó los textos (2026-09-21). */
}
/* Cada botón con su dibujo: ubicación, teléfono y el visto de entregado. El
   número va solo, sin la palabra "Llamar": el dibujo ya lo dice. */
.ruta-btns .btn-ico svg{flex:none;margin-right:7px}
/* Todos los de la fila con alto de dedo (2026-09-21). */
/* El molde de botón de la hoja, ATADO A LA CLASE y no al sitio donde está
   (2026-09-21): "Registrar entrega" se mudó junto a su factura y, como el
   estilo colgaba de `.ruta-btns`, se quedó sin forma y parecía un enlace. */
.ruta-btns .btn-ico,
.ruta-doc .btn-ico{display:inline-flex;align-items:center;justify-content:center;
  min-height:44px;background:var(--sup);border:1px solid var(--linea);color:var(--acento);
  padding:10px 14px;border-radius:9px;text-decoration:none;font-weight:600;font-size:var(--t2)}
/* Verde, porque completa algo. Ya entregada: apagado, solo sirve para mirar. */
/* Con la misma especificidad que el molde de arriba, o el blanco le gana al
   verde por venir después (2026-09-21). */
.ruta-btns .ruta-dejar,
.ruta-doc .ruta-dejar{background:var(--hay-sup);border-color:var(--hay);
  color:var(--hay);cursor:pointer}
.ruta-btns .ruta-dejar.hecho,
.ruta-doc .ruta-dejar.hecho{background:var(--sup);border-color:var(--linea);
  color:var(--tinta3);font-weight:600}
/* El de "Cómo llegar" es el que se toca: el único lleno de la tarjeta. */
.ruta-btns .ruta-ir{background:var(--acento-sup);border-color:var(--acento-sup)}
/* "Quitar" va chiquito y apagado al final de su línea: es una salida de
   emergencia, no algo que se toque todos los días. */
.ruta-quitar{background:none;border:0;color:var(--tinta3);font-size:var(--t1);
  padding:1px 5px;text-decoration:underline;cursor:pointer}
.ruta-quitar:hover{color:var(--nohay)}
/* El número de cajas manda en su línea: es lo que se cuenta en el mostrador. */
/* Ya no abre la línea, así que no necesita ancho fijo para alinear: va
   después de la factura y el cliente (2026-09-21). */
.ruta-ncajas{font-weight:800;font-size:var(--t2);color:var(--acento);
  font-variant-numeric:tabular-nums;margin-left:4px}
.ruta-sincajas{color:var(--nohay);font-size:var(--t1);font-weight:700;min-width:0;margin-right:5px}
/* El botón que abre el Paso 4 de esa factura. */
/* "Ya tiene viaje": una pastilla CON TEXTO, no una casilla apagada. Una casilla
   gris se lee como "libre, aún sin marcar"; el nombre del viaje no deja duda
   (2026-09-20). */
.pill.viaje-ya{background:var(--acento-sup);color:var(--acento);border:1px solid var(--acento-sup);
  font-weight:650;white-space:nowrap}
.no-aplica{color:var(--tinta3)}
/* El motivo por el que una fila no se puede elegir para un viaje. Rojo, del
   mismo tono que su pastilla de pago, para que se lean como lo mismo. */
.pill.sin-pago{background:var(--nohay-sup);color:var(--nohay);
  border:1px solid var(--nohay-sup);font-weight:700;white-space:nowrap}
/* "Pedir que cambien esta foto": ocupa el mismo rincón que la × de borrar,
   porque nunca salen las dos —quien puede borrar no pide, pide quien no puede
   borrar— (2026-09-21). */
.queja-foto{position:absolute;top:5px;right:5px;width:26px;height:26px;border-radius:50%;
  border:0;background:rgba(10,18,23,.72);color:#fff;font-size:var(--t2);font-weight:800;
  line-height:1;cursor:pointer;display:grid;place-items:center}
.queja-foto:hover{background:var(--nohay)}
.cel.pedida img{outline:2px solid var(--ojo);outline-offset:-2px}
.foto-pedida{display:block;font-size:var(--t1);line-height:1.25;color:var(--ojo);
  font-weight:650;margin-top:3px}
.trans-flecha{flex:none;color:var(--tinta3);font-size:var(--t3)}
.trans-mini{flex:none;width:44px;height:44px;border-radius:7px;object-fit:cover;
  background:var(--sup2)}
.trans-mini.sinfoto{display:grid;place-items:center;color:var(--tinta3)}
.trans-mini.sinfoto svg{width:22px;height:22px}
/* La foto vive DENTRO de la oficina, en su propia columna a la izquierda de la
   dirección (Margarita, 2026-08-28). Se toca y se abre en grande, con el mismo
   visor de las fotos de producto: ahí se acerca, se gira y se borra. */
.ofi-fotos{flex:none;display:flex;flex-direction:column;gap:6px}
.ofi-foto{width:104px;height:78px;object-fit:cover;border-radius:9px;
  border:1px solid var(--linea);display:block;cursor:pointer;background:var(--sup)}
.ofi-foto:hover{border-color:var(--acento)}
/* Más bajo que una foto de verdad (44 y no 72): con una oficina por caja, seis
   recuadros del tamaño de una foto llenaban la pantalla de huecos y parecía que
   faltaba todo. Así se lee como "agregar", no como "aquí falta una foto". */
.agregar-foto{width:104px;height:46px;display:flex;align-items:center;justify-content:center;
  gap:5px;border-style:dashed;color:var(--tinta3);font-size:var(--t1);background:none}
.agregar-foto:hover{color:var(--acento);border-color:var(--acento)}
/* En celular la foto se pone arriba, ancha: una columna de 104px al lado del
   texto dejaba la dirección en una rendija. */
@media screen and (max-width:560px){
  .ofi-fotos{flex-direction:row;flex-wrap:wrap;width:100%}
}
/* El "+ Foto" de la cabecera lleva su dibujo pegado al texto. */
.ofi-tit .mini{display:inline-flex;align-items:center;gap:4px;flex:none}

/* Rutas: fichitas y no renglones. Rio Guayas llega a 56 pueblos y 56 renglones
   obligaban a bajar media pantalla para ver si estaba el que uno busca. */
.rutas-grupo{margin-bottom:10px}
.rutas-prov{font-size:var(--t1);text-transform:uppercase;letter-spacing:.07em;
  color:var(--tinta3);margin-bottom:5px}
.rutas-chips{display:flex;flex-wrap:wrap;gap:5px}
.ruta-chip{padding:4px 9px;border-radius:99px;border:1px solid var(--linea);
  background:none;color:var(--tinta2);font-size:var(--t1);cursor:pointer}
.ruta-chip:hover{border-color:var(--tinta3);color:var(--tinta)}
/* Verde = hay una oficina donde retirar; gris = se lo llevan a domicilio. */
.ruta-chip.retiro{border-color:var(--hay);color:var(--hay);background:var(--hay-sup)}

/* La respuesta a "¿quién llega a Manta?", encima de la lista de nombres. */
.dest-caja{border:1px solid var(--acento-sup);border-radius:8px;overflow:hidden;
  margin-bottom:10px}
.dest-tit{background:var(--acento-sup);color:var(--acento);padding:7px 11px;font-size:var(--t1)}
.dest-fila{display:flex;gap:10px;align-items:center;padding:9px 11px;cursor:pointer}
.dest-fila+.dest-fila{border-top:1px solid var(--linea)}
.dest-fila:hover{background:var(--sup2)}
.dest-acc{flex:none;display:flex;gap:6px;align-items:center}
.candado{background:var(--sup2);border-radius:7px;padding:10px 12px;font-size:var(--t1);
  color:var(--tinta2);display:flex;gap:8px;align-items:flex-start}
.avatar{flex:none;width:40px;height:40px;border-radius:50%;background:var(--acento-sup);
  color:var(--acento);display:grid;place-items:center;font-size:var(--t2);font-weight:700}
.avatar.apagado{background:var(--sup2);color:var(--tinta3)}
.pill.est-ok{background:var(--hay-sup);color:var(--hay)}
.pill.est-inv{background:var(--ojo-sup);color:var(--ojo)}
.pill.est-off{background:var(--nohay-sup);color:var(--nohay)}
.permisos{border:1px solid var(--linea);border-radius:8px;overflow:hidden}
.perm{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 12px;
  font-size:var(--t2);cursor:pointer}
.perm+.perm{border-top:1px solid var(--linea)}
.perm input{width:19px;height:19px;accent-color:var(--acento);flex:none}
.enlace-inv{background:var(--sup2);border-radius:7px;padding:11px;font-size:var(--t1);
  font-family:var(--mono);word-break:break-all;margin-bottom:12px;color:var(--tinta2)}

.grupo-marca{margin-bottom:12px}
.gm-cab{display:flex;align-items:center;gap:8px;padding:5px 0 7px}
.gm-cab b{font-size:var(--t2);font-weight:700;letter-spacing:.01em}
.gm-cab .sep{flex:1}
.gm-n{font-size:var(--t1);color:var(--tinta3)}
.gm-sin{font-size:var(--t1);color:var(--tinta3);padding:2px 0 4px}
/* Marca sin existencias: la galería se pliega. Las fotos no se borran ni se
   esconden a escondidas —el contador sigue diciendo cuántas hay y sirve de
   tirador para abrirla—. Así lo primero que se ve es lo que sí se puede vender. */
.grupo-marca.plegado{opacity:.85}
.grupo-marca.plegado > .galeria{display:none}
.grupo-marca.plegado.abierto > .galeria{display:flex}
.gm-n.abre{display:inline-flex;align-items:center;gap:4px;color:var(--acento);
  font-weight:650;padding:3px 7px;border-radius:20px;background:var(--acento-sup)}
.grupo-marca.abierto .gm-n.abre svg{transform:rotate(180deg)}
/* El asa para arrastrar la marca. Discreta hasta que se toca: son seis puntos
   grises que no compiten con el nombre. `touch-action:none` para que el dedo
   arrastre la marca y no deslice la página. */
.asa{flex:none;display:grid;place-items:center;width:24px;height:26px;
  color:var(--tinta3);cursor:grab;touch-action:none;margin-left:-4px}
.asa:active{cursor:grabbing;color:var(--acento)}
/* La pieza que va en la mano se levanta del papel. */
.cogido{opacity:.92;transform:scale(1.02);box-shadow:var(--sombra);
  border-radius:8px;position:relative;z-index:5}
.grupo-marca.cogido{background:var(--sup);outline:1px solid var(--acento)}
.galeria .cel.cogido img{outline:2px solid var(--acento)}
/* Mientras se arrastra, nada de seleccionar texto ni de menús largos. */
body.arrastrando{user-select:none;-webkit-user-select:none;
  -webkit-touch-callout:none;cursor:grabbing}
.gm-pista{font-size:var(--t1);color:var(--tinta3);margin:5px 0 0}
.galeria .cel{position:relative;flex:none}
/* La evidencia de bodega (embalaje, entrega en transporte, guía) dice quién y
   cuándo, para que a Ventas le baste mirar la foto para confiar en ella —
   mismo patrón que ya usa `.cel-ubic-nombre` debajo. */
/* Dos renglones (quién / cuándo) en vez de una línea recortada con puntos
   suspensivos: con `nowrap` + ellipsis a 74px nunca se llegaba a leer la
   fecha, que es justo el dato por el que está esto (2026-09-19). */
.foto-credito{display:block;max-width:74px;font-size:var(--t1);color:var(--tinta3);
  margin-top:3px;line-height:1.25;white-space:normal;overflow-wrap:anywhere}
/* Dice para qué sirve cada tarjeta de evidencia, sin competir con su título
   — mismo tono apagado que ya usa `.suave`, pero sin mayúsculas ni el peso
   del rótulo. `flex-wrap` en `.rotulo` (regla de más arriba) es lo que deja
   que esto baje a su propia línea cuando no cabe junto a los botones. */
.ayuda-rotulo{font-size:var(--t1);font-weight:500;text-transform:none;
  letter-spacing:normal;color:var(--tinta3)}
/* Cada foto de producto lleva su ubicación debajo, desde que "una foto = una
   ubicación" (Margarita, 2026-08-22) — en el formulario de crear y en la
   ficha, mismo componente en los dos. */
.cel-ubic{display:flex;flex-direction:column;align-items:center;gap:3px;flex:none;width:74px}
.cel-ubic-nombre{font-size:var(--t1);color:var(--tinta2);text-align:center;
  max-width:74px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Para las fotos de antes del 2026-08-22, sin ubicación: un texto celeste
   chiquito en vez del nombre — es la acción, no un dato. */
.cel-ubic-asignar{font-size:var(--t1);color:var(--acento);font-weight:600;
  text-align:center;max-width:74px}
.cel-ubic-asignar:hover{text-decoration:underline}
.quita-foto{position:absolute;top:2px;right:2px;width:20px;height:20px;border-radius:50%;
  background:rgba(10,18,23,.72);color:#fff;font-size:var(--t2);line-height:1;display:grid;
  place-items:center;padding:0}
.quita-foto:hover{background:var(--nohay)}
/* No hay pulgar arriba: una foto que sirve no necesita que nadie la aplauda.
   Esto es un pedido de reemplazo dirigido a quien la subió. */
.mala{position:absolute;bottom:2px;right:2px;min-width:20px;height:20px;border-radius:10px;
  background:rgba(10,18,23,.72);color:#fff;display:flex;align-items:center;gap:3px;
  padding:0 5px;font-size:var(--t1);font-weight:700;line-height:1}
.mala:hover{background:var(--nohay)}
.mala[aria-pressed="true"]{background:var(--nohay)}
.cel.con-queja img{border-color:var(--nohay)}
.aviso-fila{display:flex;align-items:center;gap:11px;width:100%;padding:11px 12px;
  border:1px solid var(--linea);border-radius:8px;margin-bottom:7px;text-align:left}
.aviso-fila.nuevo{border-color:var(--nohay);background:var(--nohay-sup)}
.aviso-fila img{width:44px;height:44px;object-fit:cover;border-radius:5px;flex:none}
.aviso-fila .txt{flex:1;min-width:0}
.aviso-fila b{display:block;font-size:var(--t2);color:var(--tinta)}
.aviso-fila span{font-size:var(--t1);color:var(--tinta3)}
/* El aviso del excedente lleva sus dos acciones dentro, así que deja de ser un
   botón y pasa a ser una caja: un <button> no puede contener otros botones. */
.aviso-fila.caja{display:block}
/* Control segmentado: una sola pieza hundida y la pestaña activa como pastilla
   elevada encima. Dos botones sueltos no se leían como un interruptor. */
/* El margen lateral es el mismo 14px que llevan el buscador, los filtros y la
   cabecera: alineadas, se leen como una sola columna. */
.pestanas{display:flex;gap:3px;margin:2px 14px 11px;padding:3px;border-radius:var(--r-medio);
  background:var(--sup2);border:1px solid var(--linea)}
/* En los celulares angostos (iPhone 13 mini y parecidos) esos 14 px por lado
   eran 28 px de los 375 que hay — a pedido de Margarita (2026-08-19) se
   recortan a 9 para que el contenido gane ancho. Solo aquí abajo: en pantallas
   grandes el aire hace falta para que no se lea pegado al borde. */
@media (max-width:400px){
  .cab-fila{padding-left:9px;padding-right:9px}
  .quien,.buscar,.filtros,#lista{padding-left:9px;padding-right:9px}
  .pestanas{margin-left:9px;margin-right:9px}
  .det-cuerpo{padding-left:6px;padding-right:6px}
}
/* `min-width:0` es lo que de verdad arregla el desborde: sin él, un botón
   flex nunca se achica más allá del ancho de su contenido ("Separado" +
   el numerito), así que con las tres pestañas juntas en un celular angosto
   la fila se salía de su propia caja redondeada — y de la pantalla — y
   obligaba a hacer zoom para navegar (reportado por Margarita, 2026-08-19).
   `.etq` es la que de verdad se recorta con "…" cuando no cabe; el ícono y
   el numerito (`flex:none`) nunca se achican, para que sigan viéndose bien. */
.pestanas button{flex:1;min-width:0;padding:8px 6px;border-radius:8px;border:0;background:transparent;
  font-size:var(--t2);font-weight:600;color:var(--tinta2);display:flex;align-items:center;
  justify-content:center;gap:5px;transition:background .16s ease,color .16s ease,
  box-shadow .16s ease}
.pestanas button svg{flex:none;opacity:.8}
.pestanas .etq{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.pestanas button[aria-selected="true"]{background:var(--sup);color:var(--tinta);
  font-weight:700;box-shadow:0 1px 2px rgba(17,26,32,.1),0 1px 6px rgba(17,26,32,.07)}
.pestanas button[aria-selected="true"] svg{color:var(--acento);opacity:1}
.pestanas button:not([aria-selected="true"]):hover{color:var(--tinta)}
/* En el celular el ícono va ENCIMA de la palabra: en fila, ícono + palabra + numerito no caben
   en la cuarta parte del ancho y salía "Tr…" y "S…". El numerito pasa a la esquina del botón. */
@media (max-width:520px){
  .pestanas button{flex-direction:column;gap:3px;padding:7px 2px 6px;position:relative;min-height:52px;
    font-size:var(--t1)}
  .pestanas .etq{overflow:visible;text-overflow:clip;max-width:100%}
  .pestanas .cuantas,.pestanas .punto-nuevo{position:absolute;top:2px;right:2px}
}
@media (prefers-color-scheme:dark){
  .pestanas button[aria-selected="true"]{box-shadow:0 1px 2px rgba(0,0,0,.45)}}
:root[data-theme="dark"] .pestanas button[aria-selected="true"]{
  box-shadow:0 1px 2px rgba(0,0,0,.45)}
:root[data-theme="light"] .pestanas button[aria-selected="true"]{
  box-shadow:0 1px 2px rgba(17,26,32,.1),0 1px 6px rgba(17,26,32,.07)}
/* El número cuenta, no alarma: va en el color del acento y no en el de avería.
   Pero pesa MÁS cuando la pestaña está apagada: ahí es donde tiene que recordar
   que viene algo. Estando dentro ya se está viendo, y puede bajar la voz. */
.pestanas .cuantas{flex:none;min-width:18px;height:20px;padding:0 5px;border-radius:10px;
  font-size:var(--t1);font-weight:700;display:grid;place-items:center;
  font-variant-numeric:tabular-nums;
  background:var(--acento);color:var(--sup);box-shadow:0 0 0 3px var(--acento-sup)}
.pestanas button[aria-selected="true"] .cuantas{background:var(--acento-sup);
  color:var(--acento);box-shadow:none}
/* La pestaña entera se despierta: texto en tinta plena y el camión en acento. */
.pestanas button.tiene:not([aria-selected="true"]){color:var(--tinta);font-weight:700}
.pestanas button.tiene:not([aria-selected="true"]) svg{color:var(--acento);opacity:1}
/* El puntito de "hay algo nuevo de otra persona" — distinto del numerito de
   `.cuantas`, que cuenta cuántos separados activos hay en total. Este no
   cuenta nada: solo dice "alguien creó uno y todavía no lo viste". Se apaga
   solo al entrar a la lista (ver `cargarListaSep`). */
.pestanas button{position:relative}
/* El halo es del mismo color que el fondo de la barra de pestañas
   (`--sup2`), que ya resuelve solo para claro y oscuro: no hace falta
   redefinirlo aparte. */
.punto-nuevo{position:absolute;top:6px;right:calc(50% - 20px);width:9px;height:9px;
  border-radius:50%;background:var(--acento);box-shadow:0 0 0 2px var(--sup2)}
@media (prefers-reduced-motion:reduce){.pestanas button{transition:none}}

.pedido{display:block;width:100%;text-align:left;border:1px solid var(--linea);
  border-radius:9px;padding:12px 13px;margin-bottom:8px}
/* Antes la tarjeta recibida iba entera a `opacity:.72`, y como la letra chica ya
   era del gris más flojo, quién recibió y a qué hora no se leía desde fuera:
   había que entrar a la ficha. Ahora se apaga solo el fondo, no el texto. */
.pedido.recibido{background:var(--sup2);border-color:transparent}
/* La línea que contesta "¿quién lo recibió y a qué hora?", en tinta plena. */
.ped-recibido{display:flex;align-items:flex-start;gap:6px;margin-top:7px;
  font-size:var(--t1);color:var(--tinta);font-weight:600;line-height:1.4}
.ped-recibido svg{flex:none;color:var(--hay);margin-top:2px}
.ped-recibido.parcial svg{color:var(--ojo)}
/* NO se llama `.quien`: ya existe una clase con ese nombre para la línea de
   "Entraste como…", con su gris y su padding, y se colaba aquí. */
.ped-recibido .recibio{font-weight:800}
.ped-cab{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ped-cab b{font-size:var(--t2)}
.ped-cab .sep{flex:1}
.ped-cab .fact{font-size:var(--t1);color:var(--tinta3);font-family:var(--mono)}
.ped-meta{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:5px;font-size:var(--t1);
  color:var(--tinta3)}
/* Los dos accesos a las fotos DESDE LA LISTA de Separado, para poder ver la
   factura y el producto sin abrir la ficha (Margarita, 2026-08-21). Es un
   <span> y no un <button> porque va DENTRO del botón de la tarjeta, y un botón
   dentro de otro botón no es HTML válido: el navegador lo saca de su sitio. El
   clic corta la propagación, si no abriría además la ficha. */
.ped-fotos{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}
.chip-foto{display:inline-flex;align-items:center;gap:5px;font-size:var(--t1);
  font-weight:650;color:var(--acento);border:1px solid var(--acento);
  border-radius:999px;padding:3px 9px;line-height:1.45}
.chip-foto b{font-weight:650;opacity:.7;font-variant-numeric:tabular-nums}
.chip-foto:active{background:var(--sup2)}
/* Sin foto: se sigue viendo, pero SIN borde — lo que se puede tocar tiene que
   verse distinto de lo que no. Al tocarlo el clic sube a la tarjeta y abre la
   ficha, que es justo donde se agrega la foto que falta. */
.chip-foto.sin-foto{color:var(--nohay);border-color:transparent;font-weight:600;padding:3px 2px}
/* Entregar es LA acción de la tarjeta, no un enlace más: relleno, no con borde. */
.chip-foto.chip-entregar{background:var(--acento);border-color:var(--acento);
  color:var(--sup);font-weight:700}
/* Mismo tono que la pill "Sin pagar" de la tarjeta — el color ya dice de qué
   se trata antes de leer el texto. */
.chip-foto.chip-pagar{color:var(--nohay);border-color:var(--nohay)}
/* El mismo botón, arriba en la ficha, donde antes decía "Activa". Va pegado a
   las píldoras de estado y se pinta en las dos copias (celular y escritorio). */
.btn-entregar{display:inline-flex;align-items:center;gap:5px;vertical-align:middle;
  background:var(--acento);color:var(--sup);padding:5px 12px;border-radius:999px;
  font-size:var(--t1);font-weight:700;white-space:nowrap}
.btn-entregar:active{opacity:.85}
/* Despachar = ROJO, entregar = VERDE (Margarita, 2026-10-01): es el mismo chip en el panel, en las
   tarjetas del celular y en la ficha, y el color dice en qué paso va. Los dos miden lo mismo
   (el texto "Por despachar" es más largo que "Por entregar"), así que llevan el mismo ancho mínimo. */
.chip-despachar,.chip-por-entregar{min-width:128px;justify-content:center;text-align:center}
.chip-estado.chip-despachar{color:var(--rojo);border-color:var(--rojo)}
.chip-estado.chip-por-entregar{color:var(--hay);border-color:var(--hay)}
.chip-estado.chip-despachar[role="button"]:hover{background:var(--rojo);border-color:var(--rojo);color:#fff}
.chip-estado.chip-por-entregar[role="button"]:hover{background:var(--hay);border-color:var(--hay);color:#fff}
.chip-estado.chip-despachar[role="button"]:active{background:var(--sup2);color:var(--rojo);border-color:var(--rojo)}
.chip-estado.chip-por-entregar[role="button"]:active{background:var(--sup2);color:var(--hay);border-color:var(--hay)}
.chip-foto.chip-entregar.chip-despachar,.btn-entregar.chip-despachar{background:var(--rojo);border-color:var(--rojo);color:#fff}
.chip-foto.chip-entregar.chip-por-entregar,.btn-entregar.chip-por-entregar{background:var(--hay);border-color:var(--hay);color:#fff}
.chip-avisar{margin-left:8px;white-space:nowrap}
/* Cuánto lleva sin moverse; desde 7 días es "atrasado". */
.dias-parado{font-size:var(--t1);color:var(--tinta3);margin-left:8px;white-space:nowrap}
.dias-parado.atrasado{color:var(--rojo);font-weight:700}
/* Los meses con pendientes, en UNA línea de fichitas (Margarita: ocupaba mucho de la hoja). */
.panel-meses{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:2px 0 8px}
.mes-fila{display:inline-flex;align-items:center;gap:7px;min-height:40px;padding:4px 12px;
  border:1px solid var(--linea);border-radius:999px;background:var(--sup);font-size:var(--t2)}
.mes-fila b{font-weight:750;text-transform:capitalize}
.mes-fila .pt{display:inline-flex;align-items:center;gap:4px;font-size:var(--t1);color:var(--tinta2)}
.mes-fila .pt::before,.mes-leyenda .pt::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--rojo)}
.mes-fila .pt.ent::before,.mes-leyenda .pt.ent::before{background:var(--hay)}
.mes-fila:hover{border-color:var(--acento)}
.mes-fila.activa{border-color:var(--acento);background:var(--sup2)}
.mes-fila.mes-atr b{color:var(--rojo)}
.mes-fila.mes-atr.activa{border-color:var(--rojo)}
.mes-leyenda{margin-left:auto;display:inline-flex;gap:12px;font-size:var(--t1);color:var(--tinta3)}
.mes-leyenda .pt{display:inline-flex;align-items:center;gap:4px}
/* Despachados y entregados por persona y mes: plegado, se abre cuando hace falta. */
.panel-personas{margin:0 0 12px;border:1px solid var(--linea);border-radius:10px;background:var(--sup)}
.panel-personas summary{min-height:44px;display:flex;align-items:center;padding:0 12px;cursor:pointer;
  font-size:var(--t2);font-weight:700;list-style:none}
.panel-personas summary::-webkit-details-marker{display:none}
.panel-personas summary::after{content:"";margin-left:auto;width:8px;height:8px;border-right:2px solid var(--tinta3);
  border-bottom:2px solid var(--tinta3);transform:rotate(45deg)}
.panel-personas[open] summary::after{transform:rotate(-135deg)}
#panel-personas-cuerpo{padding:0 12px 12px}
.pp-cab{margin-bottom:8px}
.pp-cab select{min-height:40px;padding:0 10px;border:1px solid var(--linea);border-radius:8px;background:var(--sup);font-size:var(--t2)}
.pp-tabla{width:100%;border-collapse:collapse;font-size:var(--t2)}
.pp-tabla th,.pp-tabla td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--linea)}
.pp-tabla th{font-size:var(--t1);color:var(--tinta3);font-weight:650}
.pp-tabla td:not(:first-child),.pp-tabla th:not(:first-child){text-align:right;font-variant-numeric:tabular-nums}
/* Ahora es un botón: lleva a la ficha del código. `width:100%` y `text-align`
   porque un <button> no se estira ni alinea a la izquierda por su cuenta. */
.ped-linea{display:flex;align-items:center;gap:10px;padding:8px 0;width:100%;
  text-align:left;border-bottom:1px solid var(--linea)}
button.ped-linea:active{background:var(--sup2)}
.ped-linea .chev{flex:none;color:var(--tinta3)}
.ped-linea img,.ped-linea .sinfoto{width:38px;height:38px;border-radius:5px;flex:none;
  object-fit:cover;background:var(--sup2)}
.ped-linea .txt{flex:1;min-width:0}
.ped-linea b{display:block;font-size:var(--t2);font-family:var(--mono)}
.ped-linea .txt span{font-size:var(--t1);color:var(--tinta3);display:block;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.ped-linea .cant{font-size:var(--t2);font-weight:700;flex:none;font-variant-numeric:tabular-nums}
.linea-ped{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-bottom:7px}
.linea-ped .buscar-caja{margin:0}
.linea-nom{width:100%;font-size:var(--t1);color:var(--tinta3);padding-left:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.linea-nom.mal{color:var(--nohay)}
.recep{border:1px solid var(--linea);border-radius:8px;padding:11px 12px;margin-bottom:8px}
.recep.parcial{border-color:var(--ojo)}
.recep-cab{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.recep-cab .sep{flex:1}
.recep .deshacer{font-size:var(--t1);font-weight:650;color:var(--nohay);padding:4px 8px;
  border:1px solid var(--linea);border-radius:6px}
.recep-quien{font-size:var(--t1);color:var(--tinta2);line-height:1.45}
.recep-quien .mono{font-family:var(--mono);font-size:var(--t1);color:var(--tinta3)}
.recep-nota{font-size:var(--t2);margin:7px 0 0;padding:8px 10px;background:var(--sup2);
  border-radius:6px}
.recep img{width:100%;border-radius:6px;border:1px solid var(--linea);margin-top:9px}
.datos .mono{font-family:var(--mono);font-size:var(--t1);color:var(--tinta3)}

/* ═══ Conteo de la mercadería (Tránsito) ═══════════════════════════════════
   Todo lleva el prefijo cn- a propósito: .ped-linea, .recep y .ent-caja traen
   reglas propias que romperían esto si se reusaran por el nombre. Todo lo que
   se toca mide 44 px o más: es para un dedo sobre un celular de bodega. */
.det-cab.cn-cab{flex-wrap:wrap;row-gap:6px;padding-bottom:12px}
.cn-cab-txt{margin-left:auto;font-size:var(--t2);font-weight:800;text-align:right;display:flex;align-items:baseline;gap:6px;
  font-variant-numeric:tabular-nums;line-height:1.25}
.cn-cab-txt small{display:block;font-weight:500;color:var(--tinta3);font-size:var(--t1)}
.cn-cab-txt small{display:inline;font-size:var(--t2);font-weight:600;color:var(--tinta2)}
.cn-pct{font-size:var(--t5);line-height:1;font-weight:800;font-variant-numeric:tabular-nums;color:var(--tinta)}
.cn-pct span{font-size:var(--t3);margin-left:1px}
.cn-prog{width:100%}
.cn-barra{height:14px;border-radius:999px;background:var(--linea);overflow:hidden}
.cn-barra i{display:block;height:100%;width:0;background:var(--hay);border-radius:999px;transition:width .3s}
.cn-leyenda{display:flex;justify-content:space-between;gap:8px;margin-top:4px;font-size:var(--t1);color:var(--tinta2)}
.cn-leyenda b{color:var(--tinta)}
.cn-mini-top{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.cn-mini-top b{font-size:var(--t5);line-height:1;font-weight:800;font-variant-numeric:tabular-nums}
.cn-mini-top span{font-size:var(--t2);color:var(--tinta2)}
.cn-buscar{display:flex;gap:8px;width:100%;align-items:center}
.cn-buscar .buscar-caja{flex:1;min-width:0;margin:0}
.cn-tog{flex:none;min-height:44px;padding:0 13px;border:1px solid var(--linea);
  border-radius:var(--r-pildora);font-size:var(--t2);font-weight:650}
.cn-tog[aria-pressed="true"]{background:var(--acento);border-color:var(--acento);color:#fff}
.det-cuerpo.cn-cuerpo > div{padding:8px 0;border-top:0}
.det-cuerpo.cn-cuerpo > div + div{border-top:0}
.cn-filtros{display:flex;gap:6px;flex-wrap:wrap}
.cn-filtros .cn-tog b{margin-left:4px;font-variant-numeric:tabular-nums}
.cn-pest{display:flex;gap:8px}
.cn-pest button{flex:1;min-height:44px;border:1px solid var(--linea);border-radius:9px;
  font-size:var(--t2);font-weight:700}
.cn-pest button[aria-pressed="true"]{background:var(--acento);border-color:var(--acento);color:#fff}
.cn-pest .cn-act{flex:none;padding:0 14px;color:var(--acento)}
.cn-grupo{border:2px dashed var(--linea);border-radius:12px;padding:8px 8px 1px;margin-bottom:11px}
.cn-grupo-t{font-size:var(--t1);font-weight:800;color:var(--tinta2);margin:0 2px 8px;line-height:1.4}
.cn-linea{border:1px solid var(--linea);border-left:7px solid var(--cn-color,var(--linea));
  border-radius:10px;padding:10px 11px;margin-bottom:9px;background:var(--sup)}
.cn-linea.ok{background:var(--hay-sup)}
.cn-linea.mal{background:var(--nohay-sup)}
.cn-cerrada{padding:0}
.cn-cerr-b{display:flex;align-items:center;gap:10px;width:100%;min-height:52px;padding:6px 11px;
  text-align:left}
.cn-cerr-t{flex:1;min-width:0;font-size:var(--t2);line-height:1.3}
.cn-cerr-t b{font-family:var(--mono);font-size:var(--t2)}
.cn-cerr-t small{display:block;font-size:var(--t1);color:var(--tinta3);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.cn-cerr-n{flex:none;font-size:var(--t2);font-weight:800;color:var(--hay);font-variant-numeric:tabular-nums;
  text-align:right;line-height:1.3}
.cn-cerr-f{display:block;font-style:normal;font-size:var(--t1);font-weight:700;color:var(--nohay)}
.cn-cerr-s{display:block;font-style:normal;font-size:var(--t1);font-weight:700;color:var(--ojo)}
.cn-cerr-g{display:block;font-style:normal;font-size:var(--t1);font-weight:700;color:var(--nohay)}
.cn-cerr-ojo{flex:none;color:var(--tinta3);display:grid;place-items:center;width:28px}
.cn-cerr-ojo svg{width:19px;height:19px}
.cn-estado .cn-ojo{margin-left:auto;color:var(--tinta2)}
.cn-linea.terminada:not(.cn-cerrada) .cn-fila1{cursor:pointer}
.cn-fila1{display:flex;gap:10px;align-items:center}
.cn-fila1 img,.cn-sf{width:44px;height:44px;border-radius:6px;object-fit:cover;
  background:var(--sup2);flex:none}
.cn-fb{flex:none;width:44px;height:44px;padding:0;border-radius:6px;overflow:hidden;display:block}
.cn-fb img,.cn-fb .cn-sf{width:44px;height:44px;display:block}
.cn-fb:active{opacity:.7}
.cn-cod.cn-link{color:var(--acento);text-decoration:underline;text-underline-offset:3px;text-align:left;
  padding:2px 0;font-weight:700}
/* El enlace del código es bajito; su zona táctil se estira a 44 px sin mover el diseño. */
.cn-cod.cn-link{position:relative}
.cn-cod.cn-link::after{content:"";position:absolute;left:-6px;right:-14px;top:50%;height:44px;transform:translateY(-50%)}
.cn-txt{flex:1;min-width:0}
.cn-cod{display:block;font-family:var(--mono);font-size:var(--t3)}
.cn-nom{display:block;font-size:var(--t1);color:var(--tinta3);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.cn-prov{display:flex;flex-wrap:wrap;gap:2px 9px;align-items:center;margin-top:3px;font-size:var(--t1)}
.cn-pt{font-style:normal;font-weight:800;color:var(--tinta)}
.cn-pt::before{content:"";display:inline-block;width:10px;height:10px;border-radius:50%;
  background:var(--cn-color,var(--linea));margin-right:5px;vertical-align:-1px}
.cn-cp{font-family:var(--mono);color:var(--tinta2)}
.cn-ped{flex:none;text-align:right;font-variant-numeric:tabular-nums}
.cn-ped small{display:block;font-size:var(--t1);color:var(--tinta3);text-transform:uppercase;
  letter-spacing:.05em}
.cn-ped b{font-size:var(--t4)}
.cn-ctl{display:flex;gap:6px;margin-top:9px;align-items:center}
.cn-mm{flex:none;width:48px;height:48px;border:1px solid var(--linea);border-radius:9px;
  font-size:var(--t4);font-weight:700;line-height:1;background:var(--sup)}
.cn-num{flex:1;min-width:0;height:48px;text-align:center;font-size:var(--t4);font-weight:800;
  border:1px solid var(--linea);border-radius:9px;background:var(--sup);color:var(--tinta);
  font-variant-numeric:tabular-nums}
.cn-guardar{flex:none;height:48px;padding:0 16px;border-radius:9px;background:var(--acento);
  color:#fff;font-weight:700;font-size:var(--t2)}
.cn-guardar:disabled{opacity:.35}
.cn-acc{display:flex;gap:6px;margin-top:7px;flex-wrap:wrap}
.cn-acc button{min-height:44px;padding:0 12px;border:1px solid var(--linea);border-radius:9px;
  font-size:var(--t2);font-weight:650;color:var(--acento);background:var(--sup)}
.cn-acc .cn-quita{color:var(--nohay)}
.cn-estado{display:flex;flex-wrap:wrap;gap:5px 8px;align-items:center;margin-top:8px;
  font-size:var(--t1);color:var(--tinta3)}
/* El conteo de una línea se lee como un historial de movimientos: un renglón por
   persona, con su nombre y su hora a la izquierda, y los NÚMEROS siempre en una
   columna a la derecha. Lo golpeado va en su propio renglón, debajo. */
.cn-hist{margin-top:8px;border-top:1px solid var(--linea)}
.cn-mov{position:relative;padding:7px 0 7px 12px;border-bottom:1px solid var(--linea);
  font-size:var(--t2);line-height:1.35}
.cn-mov::before{content:"";position:absolute;left:1px;top:26px;width:7px;height:7px;
  border-radius:50%;background:var(--tinta3)}
.cn-mov.mia::before{background:var(--acento)}
.cn-fl{display:flex;align-items:center;gap:4px;min-height:32px}
.cn-fl .cn-t{flex:1;min-width:0}
.cn-fl .cn-n{flex:none;min-width:3.2em;text-align:right;font-weight:800;font-size:var(--t3);
  font-variant-numeric:tabular-nums}
.cn-fl.sub{padding-top:2px;color:var(--tinta2);font-size:var(--t1)}
.cn-fl.sub .cn-n{font-size:var(--t2)}
.cn-fl.gol .cn-n{color:var(--nohay)}
.cn-fl.cn-total{padding:8px 0 2px;font-weight:800}
.cn-fl.cn-total .cn-n{font-size:var(--t3)}
.cn-h{margin-left:4px;font-size:var(--t1);font-weight:400;color:var(--tinta3);white-space:nowrap}
/* Lápiz y tacho: solo el dibujo, con el área táctil de 44 px, pegados a la hora.
   El número de cada renglón va aparte, siempre en el borde derecho. */
.cn-t{display:flex;align-items:center;flex-wrap:nowrap;column-gap:0}
.cn-tx{flex:0 1 auto;min-width:0}
.cn-ic{flex:none;display:flex}
.cn-ib{flex:none;width:44px;height:44px;display:grid;place-items:center;color:var(--acento);
  border-radius:10px}
.cn-ib svg{width:20px;height:20px}
.cn-ib.quita{color:var(--nohay)}
.cn-ib:active{background:var(--sup2)}
.cn-acc-ic{justify-content:flex-end}
.cn-acc .cn-ib{padding:0;border:0;background:none;width:44px;min-height:44px}
.cn-fl.previo{color:var(--tinta3)}
.cn-fl.previo .cn-n{font-weight:500}
.cn-fl.previo s{text-decoration-thickness:1.5px}
.cn-fl.sub{min-height:0}
.cn-cierre{font-size:var(--t1);margin:8px 0 0;padding:7px 10px;border-radius:6px;background:var(--hay-sup);color:var(--tinta)}
.cn-nota{font-size:var(--t2);margin:8px 0 0;padding:8px 10px;background:var(--sup2);border-radius:6px}
.cn-fotos{display:flex;gap:7px;flex-wrap:wrap;margin-top:8px}
.cn-fotos a img{width:48px;height:48px;object-fit:cover;border-radius:6px;
  border:1px solid var(--linea);display:block}
.cn-ft{position:relative;width:76px;height:76px;border-radius:8px;overflow:hidden;
  border:2px solid var(--linea);padding:0;background:var(--sup2)}
.cn-ft img{width:100%;height:100%;object-fit:cover;display:block}
.cn-ft span{position:absolute;left:0;right:0;bottom:0;font-size:var(--t1);font-weight:800;
  background:rgba(10,18,23,.7);color:#fff;text-align:center;line-height:1.5}
.cn-ft span:empty{display:none}
.cn-ft.quita{border-color:var(--nohay)}
.cn-ft.quita img{opacity:.35}
.cn-picker{display:flex;gap:8px;margin:10px 0 14px}
.cn-picker button{flex:1;min-height:46px;border:1px solid var(--acento);border-radius:9px;
  color:var(--acento);font-size:var(--t2);font-weight:700}
.cn-fuera{border:1px solid var(--linea);border-radius:10px;padding:10px 11px;margin-bottom:9px}
.cn-sec-t{font-size:var(--t1);text-transform:uppercase;letter-spacing:.07em;color:var(--tinta3);
  font-weight:700;margin:6px 0 8px;display:flex;align-items:center;gap:8px}
.cn-sec-t .sep{flex:1}
.cn-vacio{padding:26px 10px;text-align:center;color:var(--tinta3);font-size:var(--t2)}
.linea-prov{display:flex;align-items:baseline;gap:12px;width:100%;min-height:44px;padding:0 4px 4px;
  text-align:left;font-size:var(--t1);color:var(--tinta2)}
.linea-cp{font-family:var(--mono);font-size:var(--t2);color:var(--tinta)}
.linea-prov i{margin-left:auto;font-style:normal;font-weight:650;color:var(--acento)}
.linea-prov-h{display:flex;gap:7px;width:100%;font-size:var(--t1);letter-spacing:.06em;text-transform:uppercase;color:var(--tinta3)}
.linea-prov-h span{flex:1}
.cn-masprov{min-height:44px;padding:0 6px;color:var(--acento);font-size:var(--t1);font-weight:650}

/* El informe: se lee en pantalla y sale en papel. En papel la jerarquía va con
   bordes y negritas, nunca con un fondo de color: "imprimir fondos" viene
   apagado y la letra clara sobre color desaparece. */
.cn-inf-cab{border:2px solid var(--tinta);border-radius:8px;padding:11px 13px;margin-bottom:12px;
  font-size:var(--t2);line-height:1.55}
.cn-inf-t{font-size:var(--t1);letter-spacing:.1em;font-weight:800;text-transform:uppercase}
.cn-inf-av{font-size:var(--t3);margin-top:2px}
.cn-inf-num{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:6px;font-size:var(--t1)}
.cn-rec-hecha{display:flex;gap:12px;align-items:center;margin-bottom:12px}
.cn-rec-hecha img{width:68px;height:68px;border-radius:8px;object-fit:cover;border:1px solid var(--linea);display:block}
.cn-rec-hecha p{margin:0;font-size:var(--t2);line-height:1.5}
.cn-botones{display:flex;gap:8px;flex-wrap:wrap}
.cn-botones .agregar{flex:1 1 140px;width:auto}
.cn-botones{flex-direction:column}
.cn-botones .agregar{flex:none;width:100%;min-height:48px}
/* Los botones de acción de las dos secciones (Recepción y Conteo) son gemelos: mismo alto,
   letra e icono. "sec" es la versión con borde, para la acción que ya no es la principal. */
.btn-paso{width:100%;min-height:56px;display:flex;align-items:center;justify-content:center;gap:10px;
  background:var(--acento);border:1px solid var(--acento);color:#fff;font-size:var(--t3);font-weight:700;border-radius:12px;
  padding:0 14px;text-align:center;line-height:1.25}
.btn-paso.sec{background:transparent;color:var(--acento)}
.btn-paso:disabled{opacity:.45;cursor:not-allowed}
.btn-paso svg{flex:none}
.ped-acc{margin-left:auto;display:flex;gap:2px}
.ped-acc button{width:44px;height:44px;display:grid;place-items:center;border-radius:50%;color:var(--tinta2)}
.ped-acc .acc-borrar{color:var(--nohay)}
.ret-sel{min-height:44px;width:100%;max-width:220px;padding:0 10px;font-size:var(--t2);font-weight:600;color:var(--tinta);
  background:var(--sup);border:1px solid var(--linea);border-radius:8px}
.ped-cuenta{display:flex;align-items:baseline;gap:8px;margin-top:8px;font-size:var(--t1);color:var(--tinta2)}
.ped-cuenta .pct{font-size:var(--t4);line-height:1;color:var(--tinta);font-variant-numeric:tabular-nums}
.ped-cuenta.ok{color:var(--hay);font-weight:650}
.ped-cuenta.sin{color:var(--nohay);font-weight:650}
.ped-barra{height:8px;margin-top:5px}
.cn-rec-estado{font-size:var(--t2);margin:0 0 10px;color:var(--tinta2)}
.cn-rec-estado.ok{color:var(--hay);font-weight:700}
/* ═══ Ficha del pedido (Tránsito): barra fija, datos compactos, lista plegable ═══
   Todo con prefijo propio (ped-, rec-, chip-) para no heredar reglas de .datos, .dato, .recep
   ni .doc-fila, que traen márgenes y anchos pensados para otras pantallas. */
.det-cab.ped-cab2{flex-wrap:wrap;row-gap:6px;padding-bottom:10px}
.ped-pasos{display:flex;gap:4px;width:100%}
.ped-pasos .paso{flex:1;min-width:0;min-height:44px;padding:5px 7px;border:1px solid var(--linea);
  border-radius:9px;background:var(--sup2);color:var(--tinta3);font-size:var(--t1);font-weight:700;line-height:1.25}
.ped-pasos .paso small{display:block;font-size:var(--t1);font-weight:500;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.ped-pasos .paso.ok{background:var(--hay-sup);border-color:transparent;color:var(--hay)}
.ped-pasos .paso.act{border-color:var(--acento);background:var(--sup);color:var(--tinta)}
.ped-pasos .paso.llen{background:linear-gradient(90deg,var(--hay-sup) var(--fill,0%),var(--sup) var(--fill,0%))}
.det-cuerpo.ped-cuerpo > div{padding:12px 0}
.det-cuerpo.ped-cuerpo > div:first-child{padding-top:0}
.ped-datos{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}
.ped-datos .pd{min-width:0}
.ped-datos .pd.ancho{grid-column:1 / -1}
.ped-datos .et{display:block;font-size:var(--t1);font-weight:700;letter-spacing:.07em;text-transform:uppercase;
  color:var(--tinta3);margin-bottom:2px}
.ped-datos .et em{font-style:normal;text-transform:none;letter-spacing:0;font-weight:500}
.ped-datos .pd b{display:block;font-size:var(--t2);font-weight:600;color:var(--tinta);overflow-wrap:anywhere}
.ped-datos .pd small{display:block;font-size:var(--t1);color:var(--tinta3);margin-top:1px}
.ped-datos .pd-nota{font-weight:500}
/* Solo para el papel: en pantalla la retención ya se ve en los dos botones. */
.ped-datos .pd .solo-papel{display:none}
@media print{.ped-datos .pd .solo-papel{display:block !important}}
.ped-adj .rotulo{margin-bottom:0}
.ped-adj .rotulo button{min-height:44px;padding:0 4px}
.chips-adj{margin-top:4px}
.chips-adj{display:flex;flex-wrap:wrap;gap:8px}
.chip-adj{display:inline-flex;align-items:center;max-width:100%;border:1px solid var(--linea);
  border-radius:999px;background:var(--sup)}
.chip-adj a{display:flex;align-items:center;gap:7px;min-height:44px;padding:0 6px 0 12px;min-width:0}
.chip-adj .ic{flex:none;font-size:var(--t1);font-weight:800;color:var(--acento)}
.chip-adj .nom{font-size:var(--t2);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:190px}
.chip-x{flex:none;width:44px;height:44px;display:grid;place-items:center;color:var(--nohay);border-radius:999px}
.ped-lista summary{display:flex;align-items:center;gap:8px;min-height:48px;cursor:pointer;list-style:none;
  font-size:var(--t2);font-weight:800}
.ped-lista summary::-webkit-details-marker{display:none}
.ped-lista summary .res{font-weight:500;color:var(--tinta2)}
.ped-lista summary::after{content:"";margin-left:auto;width:9px;height:9px;flex:none;
  border-right:2px solid var(--tinta3);border-bottom:2px solid var(--tinta3);transform:rotate(45deg);
  transition:transform .15s}
.ped-lista[open] summary::after{transform:rotate(-135deg)}
.rec-fila{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.rec-fotos{display:flex;gap:8px;flex-wrap:wrap}
.rec-fila img{width:56px;height:56px;border-radius:8px;object-fit:cover;border:1px solid var(--linea);display:block}
.rec-fila p{margin:0;font-size:var(--t2);line-height:1.5}
.rec-fila .mono{font-family:var(--mono);font-size:var(--t1);color:var(--tinta3)}
.rec-nota{display:inline-block;margin-top:3px;font-size:var(--t1);color:var(--tinta2)}
.rec-botones{display:flex;flex-direction:column;gap:8px}
.rec-botones .agregar{width:100%;min-height:48px}
.rec-botones .btn-paso,.cn-botones .btn-paso{min-height:56px}
.rec-deshacer{color:var(--nohay);border-color:var(--linea)}
.det-cuerpo.ped-cuerpo .peligro button{min-height:44px}
.ped-ant{margin-top:10px}
.ped-ant summary{min-height:44px;display:flex;align-items:center;font-size:var(--t2);font-weight:650;color:var(--acento);cursor:pointer}
@media print{.ped-datos,.ped-lista .ped-linea,.rec-fila{break-inside:avoid}.rec-fila img{max-width:90px}}
.cn-indice{margin-bottom:14px}
.cn-hoja{scroll-margin-top:150px;margin-bottom:26px;padding-bottom:10px;border-bottom:3px double var(--linea)}
.cn-inf-prov{font-size:var(--t4);font-weight:800;margin:2px 0 4px}
.cn-hoja-v .cn-inf-t::after{content:" · hoja vertical";font-weight:500;letter-spacing:0;text-transform:none;color:var(--tinta3)}
/* Los nombres de las personas van como nombres (no en mayúsculas) y sin partirse a media palabra. */
.cn-tabla th.cn-pers{white-space:normal;min-width:52px;overflow-wrap:normal;text-transform:none;letter-spacing:0;
  font-size:var(--t1);font-weight:700;color:var(--tinta)}
.cn-nw{white-space:nowrap}
.cn-tabla tr.cn-pie .cn-ttl{font-family:var(--ui);font-weight:800}
.cn-tabla tr.cn-pie td{border-top:2px solid var(--tinta);border-bottom:0;padding-top:5px}
.cn-pies{margin-top:4px}
.cn-codigos{font-size:var(--t1);line-height:1.7;margin:0}
.cn-codigos small{color:var(--tinta3);font-size:var(--t1)}
/* El general va más apretado: letra y espacios chicos, fotos chicas. */
.cn-compacto .cn-tabla{font-size:var(--t1)}
.cn-compacto .cn-tabla td,.cn-compacto .cn-tabla th{padding:3px 5px}
.cn-compacto .cn-tabla img{width:34px;height:34px;margin:0 2px 2px 0}
.cn-compacto .cn-sec{margin-bottom:10px}
.cn-compacto .cn-sec h4{font-size:var(--t2)}
.cn-compacto .cn-nota-sec{margin-bottom:3px;font-size:var(--t1)}
.cn-sec{margin-bottom:16px}
.cn-sec h4{font-size:var(--t2);margin:0 0 4px;padding-bottom:3px;border-bottom:2px solid var(--tinta)}
.cn-sec .cn-nota-sec{font-size:var(--t1);color:var(--tinta3);margin:0 0 5px}
/* En pantalla la tabla se desliza dentro de su caja; en papel se abre entera. */
.cn-tw{overflow-x:auto;-webkit-overflow-scrolling:touch}
.cn-tabla{width:100%;border-collapse:collapse;font-size:var(--t1)}
.cn-tabla th{text-align:left;font-size:var(--t1);text-transform:uppercase;letter-spacing:.05em;
  color:var(--tinta3);padding:4px 6px;border-bottom:1px solid var(--tinta);white-space:nowrap}
.cn-tabla td{padding:5px 6px;border-bottom:1px solid var(--linea);vertical-align:top}
.cn-tabla td.n,.cn-tabla th.n{text-align:right;font-variant-numeric:tabular-nums}
.cn-tabla td b{font-family:var(--mono)}
.cn-tabla .cn-hora{font-size:var(--t1);color:var(--tinta3)}
.cn-tabla img{width:56px;height:56px;object-fit:cover;border-radius:4px;border:1px solid var(--linea);
  margin:0 3px 3px 0}
.cn-tabla tr{break-inside:avoid;page-break-inside:avoid}
@page cn-vertical{size:A4 portrait;margin:12mm}
@media print{
  .cn-cuerpo{display:block !important}
  .cn-cuerpo > div{padding:0 0 10px !important}
  /* Una hoja VERTICAL por proveedor y el informe general en HORIZONTAL: cada una en su
     propia página con nombre (el resto de la app imprime en horizontal). */
  .cn-hoja-v{page:cn-vertical}
  .cn-compacto .cn-inf-t::after{content:none}
  .cn-hoja{border-bottom:0;margin-bottom:0;padding-bottom:0}
  .cn-hoja + .cn-hoja{break-before:page;page-break-before:always}
  .cn-hoja-v .cn-inf-t::after,.cn-hoja-h .cn-inf-t::after{content:none}
  .cn-inf-cab{break-inside:avoid}
  /* El título, su nota y el arranque de la tabla no se separan entre hojas. */
  .cn-sec h4,.cn-sec .cn-nota-sec{break-after:avoid;page-break-after:avoid}
  .cn-tabla thead{display:table-header-group}
  .cn-tw{overflow:visible !important}
  .cn-tabla img{width:46px;height:46px}
}

.campana{position:relative}
[hidden]{display:none !important}
.campana .bolita{position:absolute;top:-3px;right:-3px;min-width:16px;height:16px;
  border-radius:8px;background:var(--nohay);color:#fff;font-size:var(--t1);font-weight:700;
  display:grid;place-items:center;padding:0 4px}
.foto-tools{display:flex;align-items:center;gap:6px;margin-top:9px;flex-wrap:wrap}
.foto-tools .cual{font-size:var(--t1);color:var(--tinta3);text-transform:uppercase;
  letter-spacing:.06em;font-weight:650}
.foto-tools button{border:1px solid var(--linea);border-radius:6px;padding:5px 10px;
  font-size:var(--t1);font-weight:600;line-height:1.2}
.foto-tools button:disabled{opacity:.35}
.foto-tools [data-marcafoto]{color:var(--acento);max-width:52%;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.escover{position:absolute;bottom:2px;left:2px;background:rgba(10,18,23,.72);color:#fff;
  font-size:var(--t1);font-weight:700;letter-spacing:.04em;padding:2px 5px;border-radius:4px}
.portada-b{font-size:var(--t1);color:var(--acento);font-weight:650;padding:3px 0;
  white-space:nowrap}
.portada-ya{font-size:var(--t1);color:var(--tinta3)}
/* Los botones de mover la foto. 32px y no 20px como la ✕ de la miniatura:
   estos se tocan con el dedo en un celular, no con el puntero. */
.mueve-foto{display:inline-flex;align-items:center;gap:6px}
.mueve{width:32px;height:32px;border-radius:7px;border:1px solid var(--linea);
  background:var(--sup);color:var(--tinta);display:inline-flex;align-items:center;
  justify-content:center;flex:none}
.mueve[disabled]{opacity:.32}
.mueve-n{font-size:var(--t1);color:var(--tinta2);font-variant-numeric:tabular-nums;
  min-width:42px;text-align:center;white-space:nowrap}
/* Ni la miniatura ni la foto grande se arrastran como archivo: ese gesto es
   para cambiarlas de sitio, no para subir una nueva. */
.galeria img,img.det-foto{-webkit-user-drag:none;user-drag:none}
.doc-fila{display:flex;align-items:center;gap:6px;margin-bottom:7px}
.doc-fila .doc{margin-bottom:0;min-width:0}
.doc-fila .doc span:not(.ic){min-width:0}
.bola.sinmarcar{background:var(--linea);border:2px solid var(--tinta3);box-sizing:border-box}
.elegir{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:8px;margin-bottom:6px}
.elegible{position:relative;cursor:pointer;display:block}
.elegible img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:7px;
  border:2px solid var(--linea);display:block}
.elegible input{position:absolute;opacity:0;pointer-events:none}
.elegible .tilde{position:absolute;top:5px;right:5px;width:22px;height:22px;border-radius:50%;
  background:var(--sup);border:2px solid var(--linea);color:transparent;display:grid;
  place-items:center;font-size:var(--t2);font-weight:800}
.elegible input:checked ~ .tilde{background:var(--acento);border-color:var(--acento);color:#fff}
.elegible input:checked + .tilde,.elegible:has(input:checked) img{border-color:var(--acento)}
.elegible .etiq{position:absolute;left:5px;bottom:5px;background:rgba(10,18,23,.72);color:#fff;
  font-size:var(--t1);font-weight:700;padding:2px 5px;border-radius:3px;letter-spacing:.03em}
.brindis{position:fixed;left:50%;transform:translateX(-50%);top:max(14px,env(safe-area-inset-top));bottom:auto;z-index:9999;
  background:var(--tinta);color:var(--fondo);padding:11px 17px;border-radius:22px;
  font-size:var(--t2);font-weight:550;box-shadow:var(--sombra);max-width:88%;text-align:center}
/* Los input de archivo NO se esconden con `hidden`. Un input en display:none
   está fuera de la página para el navegador, y varios navegadores de celular
   —el de MIUI en los Redmi, Safari viejo— ignoran el .click() que le mandamos:
   no abre ni la cámara ni la galería, no pasa nada. Aquí se queda dentro de la
   página, con su tamaño y su sitio, pero invisible y sin estorbar al dedo. */
.archivo-oculto{position:fixed;top:0;left:0;width:1px;height:1px;opacity:0;
  border:0;padding:0;margin:0;pointer-events:none}

/* ---------------- imprimir ----------------
   Con Cmd+P solo salía un pedazo, y la culpa era del propio diseño: la hoja del
   pedido es `position:fixed` con `height:100dvh` y su propio scroll, así que
   para el navegador la página entera mide lo que mide la PANTALLA y todo lo
   demás está fuera del papel.

   Al imprimir se deshace eso: la hoja vuelve a ser un bloque normal, de alto
   automático, y se esconde todo lo que no es el pedido —cabecera, listas,
   botones—. Con `print-color-adjust` los fondos claros salen impresos; sin él
   Chrome los quita y las etiquetas quedan en blanco sobre blanco. */
/* A4 apaisada para la ficha de Separado (Margarita, 2026-08-23: "todo eso lo
   metemos en una hoja a4 horizontal"): el ancho de sobra es justo lo que
   necesita el layout de dos columnas + tres fotos en fila, que en una hoja
   vertical se hubiera visto apretado. */
/* `.papel-izq`/`.papel-der` solo existen para reagrupar la ficha de Separado
   EN PAPEL (ver `@media print` más abajo). En pantalla se vuelven invisibles
   como cajas —`display:contents` saca el elemento del árbol de RENDERIZADO
   pero no del DOM— así que sus hijos (Pagos, Contacto, Ubicación...) siguen
   siendo, para el CSS de escritorio, exactamente lo que siempre fueron:
   hijos DIRECTOS de `.det-cuerpo`, con su `float` de siempre intacto. */
.papel-izq,.papel-der{display:contents}
@page{size:A4 landscape;margin:12mm}
@media print {
  /* El tope de ancho de la ficha (`--ancho-app`, pensado para no dejar una
     línea de texto larguísima en un monitor gigante) no aplica en PAPEL: la
     hoja mide lo que mide la hoja. Sin este reinicio, en algunos navegadores
     el ancho de pantalla del momento de imprimir se filtraba al PDF. */
  .hoja-llena.ficha-sep{max-width:none !important}
  /* El papel es blanco siempre, tenga la persona el tema claro o el oscuro.
     Van también los fondos de las etiquetas: si se quedan en su versión oscura,
     salen manchones negros que gastan tinta y no se leen. */
  :root,:root[data-theme="dark"],:root[data-theme="light"]{
    --sup:#fff;--sup2:#f4f6f7;--fondo:#fff;--tinta:#000;--tinta2:#333;
    --tinta3:#555;--suave:#555;--linea:#bbb;
    --hay:#1d5c3b;--hay-sup:#e6f2ea;--nohay:#8f3d12;--nohay-sup:#fbeadf;
    --ojo:#6d4c00;--ojo-sup:#fbf3d9;--acento:#0b5a74;--acento-sup:#e6f1f5}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  html,body{background:#fff;height:auto;overflow:visible !important}
  /* Fuera del papel todo lo que es un botón: no se puede tocar una hoja, y una
     hoja que dice "Borrar este pedido" solo asusta a quien la lea. */
  .cab,.acciones,.velo,.brindis,.filtros-caja,.buscar,.pestanas,
  .det-cab,.hoja-btns,.no-imprimir,.peligro,.deshacer,.agregar,
  .rotulo button{display:none !important}
  /* En pantalla, `.marco` es una caja de alto fijo que se desliza por dentro;
     en papel eso recortaría todo a una sola hoja. Aquí vuelve a crecer con su
     contenido. */
  html,body{height:auto;overflow:visible}
  /* El papel sale siempre en tamaño normal: quien puso la letra grande en su
     celular lo hizo para leer en la mano, no para gastar el doble de hojas. */
  .marco > *,.hoja-llena > *,.hoja > *{zoom:1 !important}
  .marco{max-width:none;box-shadow:none;border:0;
    height:auto !important;overflow:visible !important}
  /* Con una ficha abierta se imprime SOLO la ficha. Sin esto salía también la
     lista de pedidos que quedaba debajo, y la hoja del pedido empezaba en la
     página 2. */
  .marco:has(.hoja-llena) > *:not(.hoja-llena){display:none !important}
  /* La hoja deja de estar clavada a la pantalla y se estira por el papel. */
  .hoja-llena{position:static !important;height:auto !important;max-width:none;
    overflow:visible !important;display:block !important}
  .det-cuerpo{padding:0 !important;display:block !important}
  .det-cuerpo > *{margin-bottom:14px}
  /* La ficha de Separado en papel vuelve a ser DOS COLUMNAS (Margarita,
     2026-08-23, tercera vuelta sobre el mismo PDF: "vendedor pago y
     contactos de un lado (izquierdo), notas y movimientos del otro
     (derecho)") — pero YA NO con el `float` de escritorio que reventó dos
     rondas atrás. `.papel-izq`/`.papel-der` son cajas NUEVAS, que en
     pantalla no existen (`display:contents`, ver más abajo fuera de
     `@media print`) y acá se vuelven columnas de un `flex` normal — un
     `flex` no dejó fantasmas de `float` colgando cuando `.solo-papel` corta
     a la hoja siguiente, que era justo el problema del `float`. */
  /* `flex-direction:row` explícito: `.det-cuerpo` en PANTALLA ya es
     `display:flex;flex-direction:column` (la regla de siempre, para apilar
     las tarjetas verticales) — sin pisar esa segunda propiedad, el `column`
     de esa regla base se colaba aquí también, y las dos columnas de papel
     se apilaban una sobre otra en vez de ponerse lado a lado (verificado con
     un PDF real: exactamente eso pasó). */
  .ficha-sep .det-cuerpo{display:flex !important;flex-direction:row;flex-wrap:wrap;column-gap:20px}
  .ficha-sep .det-cuerpo > .sep-cab,
  .ficha-sep .det-cuerpo > .viene,
  .ficha-sep .det-cuerpo > .solo-papel{flex:1 1 100%}
  .ficha-sep .papel-izq{flex:0 0 300px;max-width:300px}
  .ficha-sep .papel-der{flex:1 1 0;min-width:0}
  /* Dentro de cada columna, las tarjetas ocupan TODO el ancho de su columna
     (no los 620px de antes, pensados para una sola columna centrada). */
  .ficha-sep .papel-izq,.ficha-sep .papel-der{display:block !important}
  .ficha-sep .papel-izq > *,.ficha-sep .papel-der > *{max-width:none}
  /* Que ninguna tarjeta se parta a la mitad entre dos hojas — sin esto,
     Ubicación (la última del lado izquierdo) se cortaba justo en el medio y
     dejaba una segunda hoja casi vacía con solo el resto de esa tarjeta. */
  .ficha-sep .papel-izq > *,.ficha-sep .papel-der .secc{break-inside:avoid;page-break-inside:avoid}
  /* Factura y Retiro ya salen grandes en `.solo-papel`, más abajo — repetir
     esas dos tarjetas aquí (ahora vacías, sin sus fotos chiquitas) era una
     caja con un título y nada adentro. Ubicación se queda: además de sus
     fotos (ya escondidas por la regla de `.galeria` de arriba) puede traer
     una lista de texto —ubicaciones sin foto, de antes del 2026-08-22— que
     no está en ningún otro lado del papel. */
  .ficha-sep .secc-factura,.ficha-sep .secc-retiro{display:none !important}
  /* La foto del papel dentro del Paso 1 tampoco: en papel todas las fotos
     salen en grande al final, y una miniatura repetida arriba solo estorba.
     Es la misma razón por la que `.secc-factura` estaba escondida. */
  .ficha-sep .sep-cab-fotos{display:none !important}
  /* Que una recepción o una tabla no se parta a la mitad entre dos hojas. */
  .recep,.ped-linea,.doc-fila,.datos,.nota{break-inside:avoid;page-break-inside:avoid}
  .ped-linea img,.recep img{max-width:120px}
  /* Las fotos de Separado van en una tira que se desliza de lado
     (`overflow-x:auto`) — en papel eso recortaría las que no entraron en la
     pantalla. Se abre para que se vean todas, en varias filas si hace falta. */
  .galeria{overflow:visible !important;flex-wrap:wrap !important}
  /* En la ficha de Separado las miniaturas de la galería se apagan del todo
     en papel (Margarita, 2026-08-23): ya salen grandes y con título propio
     más abajo, en `.solo-papel` — repetirlas chiquitas arriba era ruido, y
     era justo lo que hacía que "todo salga medio raro". Solo en Separado:
     Productos sigue mostrando su galería en papel como siempre. */
  .ficha-sep .galeria{display:none !important}
  a[href]::after{content:""}          /* sin la URL detrás de cada enlace */
  .ped-linea .chev{display:none}      /* la flecha de "tócame" no sirve en papel */
  #imprimir-pie{display:block !important}
  /* Todo lo que NO es la tira de fotos grandes se queda junto en la primera
     hoja (Margarita, 2026-08-23: "todo lo que esta en la ficha deberia
     salirme en una sola pagina"); `.solo-papel` arranca una hoja nueva y de
     ahí en adelante son solo fotos. */
  .ficha-sep .solo-papel{break-before:page;page-break-before:always}
  /* Tres fotos por hoja, EN FILA (Margarita, 2026-08-23: "la siguiente
     pagina seria de imagenes en grande... 3 imagenes por pagina", y después:
     "ahora como esta aun se ve fatal" — la primera versión las apilaba una
     sobre otra, que en una hoja horizontal (corta de alto) las dejaba
     chiquitas. De lado a lado se aprovecha el ancho de la A4 apaisada y cada
     una sale más grande). El ancho de cada una descuenta los dos espacios de
     `gap` entre las tres. El `:nth-of-type(3n)` corta hoja nueva cada tres —
     cuenta EN PAPEL, no en pantalla, ahí `.foto-papel-wrap` no existe en
     ningún otro lado. */
  /* `!important` obligatorio: `.solo-papel{display:none}` vive MÁS ABAJO en
     la hoja de estilos, fuera de cualquier `@media` (corre siempre, así
     esconde la tira de fotos en pantalla). Entre dos reglas con la misma
     especificidad —esta y esa—, gana la que está más abajo EN EL ARCHIVO, y
     esa es la de `none`; sin `!important` aquí, esta regla pierde esa pelea
     y las fotos se apilan una encima de otra en vez de ponerse en fila
     (exactamente lo que vio Margarita en el PDF real, 2026-08-23, pese a que
     esta regla ya decía `display:flex`). */
  .solo-papel{display:flex !important;flex-wrap:wrap;gap:14px}
  .foto-papel-wrap{flex:0 0 calc((100% - 28px) / 3);max-width:calc((100% - 28px) / 3);
    break-inside:avoid;page-break-inside:avoid}
  /* `:not(:last-child)`: sin él, cuando el total de fotos es múltiplo exacto
     de tres (3, 6, 9...) la tercera TAMBIÉN corta hoja nueva aunque no venga
     nada después — una página en blanco al final del PDF. Verificado
     armando un separado de prueba con exactamente 3 fotos: sin este filtro
     salía una cuarta página vacía. */
  .foto-papel-wrap:nth-of-type(3n):not(:last-child){break-after:page;page-break-after:always}
  .foto-papel-cap{font-size:var(--t1);font-weight:650;color:#333;margin-bottom:4px}
  /* `contain` para que no se recorte ningún borde del documento. Con las tres
     en fila y no apiladas, cada una puede ser más alta: solo compite por
     altura con su propio título, no con las otras dos. */
  .foto-papel{display:block;width:100%;max-height:65vh;object-fit:contain;margin:0 auto}
}
#imprimir-pie,.solo-papel{display:none}

/* Facturas del mismo cliente juntas: una barra de color a la izquierda las une y una línea marca dónde empieza cada grupo. */
.panel-tabla tr.en-grupo td:first-child{box-shadow:inset 4px 0 0 var(--acento)}
.panel-tabla tr.grupo-ini td{border-top:2px solid var(--linea)}

/* Hoja "Nueva factura / proforma separada": tres bloques con título bien visible; lo que falta se marca en
   rojo con un "!" (sin la palabra "obligatorio"); y todas las entradas —de texto o lista— son idénticas. */
.nsep .ns-sec{padding:6px 0 2px}
.nsep .ns-sec + .ns-sec{margin-top:10px}
.nsep .ns-tit{display:flex;align-items:center;gap:10px;margin:0 0 14px;padding:9px 12px;border-radius:10px;
  background:var(--acento-sup);color:var(--acento);font-size:var(--t3);font-weight:800}
.nsep .ns-n{flex:none;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  background:var(--acento);color:var(--sup);font-size:var(--t2);font-weight:800}
.nsep .ns-campo{margin-bottom:16px}
.nsep .rotulo{display:flex;align-items:center;gap:8px;margin:0 0 6px;min-height:22px}
.nsep .ns-ic{display:none;width:20px;height:20px;border-radius:50%;place-items:center;background:var(--rojo);color:#fff;
  font-size:var(--t1);font-weight:800;line-height:1}
.nsep .ns-campo.falta .ns-ic{display:grid}
.nsep .buscar-caja,.nsep .campo-sel{box-sizing:border-box;display:flex;align-items:center;width:100%;min-height:48px;margin:0 !important;
  padding:0 14px;background:var(--sup2);border:1px solid var(--linea);border-radius:10px;font-size:var(--t3);color:var(--tinta)}
.nsep .buscar-caja input{width:100%;min-width:0;background:transparent;border:0;outline:0;font-size:var(--t3);color:var(--tinta)}
.nsep .campo-sel{appearance:none;-webkit-appearance:none;padding-right:38px;
  background-image:linear-gradient(45deg,transparent 50%,var(--tinta3) 50%),linear-gradient(135deg,var(--tinta3) 50%,transparent 50%);
  background-position:calc(100% - 20px) 21px,calc(100% - 14px) 21px;background-size:6px 6px;background-repeat:no-repeat}
.nsep .ns-campo.falta .buscar-caja,.nsep .ns-campo.falta .campo-sel,.nsep .ns-campo.falta .cn-picker button,
.nsep .ns-campo.falta .dos-botones .agregar{border-color:var(--rojo)}
.nsep #sclientesug{margin-top:6px}
.nsep #sayudaprov{margin:0 0 16px}

/* Mismas entradas en todas las hojas: texto, fecha y lista miden y se ven igual. */
.hoja .buscar-caja,.hoja .campo-sel{box-sizing:border-box;display:flex;align-items:center;width:100%;min-height:48px;
  padding:0 14px;background:var(--sup2);border:1px solid var(--linea);border-radius:10px;font-size:var(--t3);color:var(--tinta)}
.hoja .buscar-caja input{width:100%;min-width:0;background:transparent;border:0;outline:0;font-size:var(--t3);color:var(--tinta)}
.hoja .campo-sel{appearance:none;-webkit-appearance:none;padding-right:38px;
  background-image:linear-gradient(45deg,transparent 50%,var(--tinta3) 50%),linear-gradient(135deg,var(--tinta3) 50%,transparent 50%);
  background-position:calc(100% - 20px) 21px,calc(100% - 14px) 21px;background-size:6px 6px;background-repeat:no-repeat}
.hoja .ns-ic{display:none;width:20px;height:20px;border-radius:50%;place-items:center;background:var(--rojo);color:#fff;
  font-size:var(--t1);font-weight:800;line-height:1}
.hoja .ns-campo.falta .ns-ic{display:grid}
.hoja .ns-campo.falta .buscar-caja,.hoja .ns-campo.falta .campo-sel{border-color:var(--rojo)}
.hoja .ns-campo{margin-bottom:14px}
.hoja .rotulo .ns-ic{margin-left:auto}

/* Ficha del pedido: títulos de sección en franja, acciones junto al nombre, ancho de lectura en pantalla grande. */
.sec-tit{display:flex;align-items:center;gap:10px;margin:0 0 12px;padding:9px 12px;border-radius:10px;
  background:var(--acento-sup);color:var(--acento);font-size:var(--t3);font-weight:800}
.sec-tit .ns-n{flex:none;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  background:var(--acento);color:var(--sup);font-size:var(--t2);font-weight:800}
.ped-titulo{display:flex;align-items:flex-start;gap:8px}
.ped-tit-txt{flex:1;min-width:0}
.ped-titulo .ped-acc{margin-left:auto;flex:none}
/* Dos campos lado a lado dentro de una hoja (se apilan en el celular angosto). */
.hoja .ns-fila2{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
@media (max-width:420px){.hoja .ns-fila2{grid-template-columns:1fr}}
/* Las dos columnas de la ficha: izquierda lo que ES el pedido (datos, archivos, qué viene) y derecha lo que se HACE
   (recepción y conteo). En el celular se apilan, en el mismo orden de siempre. */
.ped-izq,.ped-der{display:flex;flex-direction:column;min-width:0}
.ped-izq > div,.ped-der > div{padding:12px 0}
.ped-izq > div:first-child,.ped-der > div:first-child{padding-top:0}
.ped-izq > div + div,.ped-der > div + div{border-top:1px solid var(--linea)}
/* Sin tope de ancho: la barra de pasos y el cuerpo ocupan lo mismo y quedan alineados. */

@media screen and (min-width:1000px){
  .det-cuerpo.ped-cuerpo{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);column-gap:40px;align-items:start}
  .det-cuerpo.ped-cuerpo > :not(.ped-izq):not(.ped-der){grid-column:1 / -1}
  .det-cuerpo.ped-cuerpo > .ped-der{border-top:0;padding:0}
}

/* ═══ Ficha del pedido, versión tarjetas (parecida a la imagen de Margarita, 2026-10-01) ═══ */
.ped-pasos .paso small{white-space:nowrap}
.ped-titulo{align-items:center;gap:12px;flex-wrap:wrap}
.ped-ico{display:none;flex:none;width:56px;height:56px;border-radius:14px;background:var(--acento);color:#fff;place-items:center}
.ped-kicker{font-size:var(--t1);font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--tinta3)}
.ped-stepper{display:none}
.stp{display:flex;align-items:center;gap:10px}
.stp-n{flex:none;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-weight:800;
  background:var(--sup2);color:var(--tinta3);border:1px solid var(--linea)}
.stp.act .stp-n{background:var(--acento);border-color:var(--acento);color:#fff}
.stp.ok .stp-n{background:var(--hay);border-color:var(--hay);color:#fff}
.stp-t{display:flex;flex-direction:column;line-height:1.25}
.stp-t b{font-size:var(--t2)}
.stp-t small{font-size:var(--t1);color:var(--tinta3)}
.stp.act .stp-t b{color:var(--acento)} .stp.ok .stp-t small{color:var(--hay)}
.stp-l{flex:none;width:64px;height:2px;background:var(--linea)}
/* Tarjeta izquierda */
.ped-izq{background:var(--sup);border:1px solid var(--linea);border-radius:14px;padding:0 0 4px}
.ped-izq > div{padding:14px 18px !important}
.ped-izq > .ped-card-cab{display:flex;align-items:center;gap:10px;margin:14px 14px 4px;padding:10px 12px !important;border:0 !important;
  border-radius:10px;background:var(--acento-sup);color:var(--tinta)}
.ped-card-cab b{font-size:var(--t3)}
.ped-card-cab .pill-estado{margin-left:auto;padding:3px 10px;border-radius:999px;background:var(--sup);color:var(--acento);
  font-size:var(--t1);font-weight:700;white-space:nowrap}
.pd-ic{flex:none;display:inline-grid;place-items:center;width:22px;color:var(--tinta2)}
.ped-datos .pd{display:flex;gap:10px;align-items:flex-start}
.ped-datos .pd > div{min-width:0}
.ped-adj .rotulo,.ped-lista summary{gap:10px}
.ped-adj .rotulo{display:flex;align-items:center}
/* Tarjetas de la derecha: cada una es su propia tarjeta, con la franja de título */
.ped-der{display:flex;flex-direction:column;gap:16px}
.ped-der > div{background:var(--sup);border:1px solid var(--linea);border-radius:14px;padding:14px 16px !important}
.ped-der > div + div{border-top:1px solid var(--linea)}
.sec-tit .sec-ic{display:inline-grid;place-items:center}
.btn-paso{justify-content:center}
.btn-paso > svg:last-child:not(:first-child){margin-left:6px}
/* Tarjeta de abajo: el informe general */
.ped-detalle{background:var(--sup);border:1px solid var(--linea);border-radius:14px;padding:14px 18px 18px}
.det-cab-card{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:12px}
.det-cab-card b{font-size:var(--t3)}
.det-cab-card .sep{flex:1}
.det-chip{padding:3px 10px;border-radius:999px;background:var(--sup2);font-size:var(--t1);color:var(--tinta2)}
.det-btn{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 14px;border:1px solid var(--linea);
  border-radius:10px;background:var(--sup);color:var(--acento);font-size:var(--t2);font-weight:650}
.det-tabla-caja{overflow:auto;max-height:520px;border:1px solid var(--linea);border-radius:10px}
.det-tabla th{position:sticky;top:0;background:var(--sup2)}
.det-tabla td,.det-tabla th{padding:8px 10px}
.det-vacio{display:flex;flex-direction:column;align-items:center;gap:4px;padding:34px 12px;color:var(--tinta3);text-align:center}
.det-vacio p{margin:6px 0 0;font-size:var(--t2);color:var(--tinta2)}
.det-vacio small{font-size:var(--t1)}
@media screen and (min-width:1000px){
  .ped-pasos{display:none}
  .det-cab.ped-cab2{padding-bottom:0}
  .ped-ico{display:grid}
  .ped-kicker{font-size:var(--t5);font-weight:800;letter-spacing:0;text-transform:none;color:var(--tinta)}
  .ped-prov{font-size:var(--t3) !important;color:var(--acento);font-weight:700}
  .ped-stepper{display:flex;align-items:center;gap:14px;margin-left:auto}
  .ped-titulo{flex-wrap:nowrap}
  .ped-titulo .ped-acc{margin-left:0}
  .ped-datos{grid-template-columns:repeat(3,minmax(0,1fr)) !important}
}
@media (max-width:999px){.ped-kicker{margin-bottom:2px}}

/* Vuelta 2 del loop */
.det-cuerpo.ped-cuerpo > .ped-detalle{padding:14px 18px 18px;border-top:1px solid var(--linea)}
.det-cuerpo.ped-cuerpo > .ped-titulo{border-top:0;padding-top:4px}
.ped-der .sec-tit{background:var(--hay-sup);color:var(--hay)}
.ped-der .sec-tit .ns-n{background:var(--hay);color:#fff}
.ped-der .sec-tit .sec-ic{color:var(--hay)}

@media screen and (min-width:1000px){
  .ped-datos{grid-template-columns:repeat(3,minmax(0,1fr)) !important;gap:18px 24px !important}
  .ped-datos .p-llega{grid-area:1 / 1}
  .ped-datos .p-dest{grid-area:2 / 1}
  .ped-datos .p-pago{grid-area:1 / 2}
  .ped-datos .p-armo{grid-area:2 / 2}
  .ped-datos .pd.p-ret{grid-area:1 / 3 / 3 / 4}
  .ped-datos .pd-nota{display:block}
  .ped-datos .pd.ancho:not(.p-ret){grid-column:1 / -1}
}

/* El porcentaje contado siempre a la vista: en la barra fija (escritorio) y grande dentro de la tarjeta de conteo. */
.cab-pct{display:none}
.cn-prog2{display:flex;align-items:center;gap:14px;margin:2px 0 10px}
.cn-prog-n{font-size:var(--t5);font-weight:800;color:var(--hay);font-variant-numeric:tabular-nums;white-space:nowrap}
.cn-prog-bar{flex:1;height:10px;border-radius:999px;background:var(--sup2);overflow:hidden}
.cn-prog-bar i{display:block;height:100%;background:var(--hay);border-radius:999px}
.det-chip-ok{background:var(--hay-sup);color:var(--hay);font-weight:700}
@media screen and (min-width:1000px){
  .cab-pct{display:inline-flex;align-items:center;gap:8px;margin-left:auto;padding:5px 12px;border-radius:999px;
    background:var(--hay-sup);color:var(--hay);font-size:var(--t2);font-weight:600}
  .cab-pct b{font-size:var(--t3)}
  .cab-pct-barra{width:70px;height:6px;border-radius:999px;background:var(--sup);overflow:hidden;display:inline-block}
  .cab-pct-barra i{display:block;height:100%;background:var(--hay)}
}

/* Arreglos de la vuelta 4: la franja de la tarjeta queda centrada (aire igual arriba y abajo) y las tarjetas no se tocan. */
.ped-izq > .ped-card-cab{margin:14px !important}
.ped-izq > .ped-card-cab + div{border-top:0 !important;padding-top:4px !important}
@media screen and (min-width:1000px){
  .det-cuerpo.ped-cuerpo{row-gap:20px}
}
.ped-detalle{margin-top:4px}

/* Los campos de las hojas de transportes (label.campo > span + input/select) con la misma forma que el resto de las hojas. */
.hoja label.campo{display:block;margin-bottom:14px}
.hoja label.campo > span{display:flex;align-items:center;gap:8px;min-height:22px;margin:0 0 6px;font-size:var(--t1);
  font-weight:650;text-transform:uppercase;letter-spacing:.07em;color:var(--tinta)}
.hoja label.campo input:not([type=checkbox]),.hoja label.campo select,.hoja label.campo textarea{box-sizing:border-box;display:block;
  width:100%;min-height:48px;padding:0 14px;background:var(--sup2);border:1px solid var(--linea);border-radius:10px;
  font:inherit;font-size:var(--t3);color:var(--tinta)}
.hoja label.campo textarea{padding:12px 14px;min-height:84px}
.hoja label.campo select{appearance:none;-webkit-appearance:none;padding-right:38px;
  background-image:linear-gradient(45deg,transparent 50%,var(--tinta3) 50%),linear-gradient(135deg,var(--tinta3) 50%,transparent 50%);
  background-position:calc(100% - 20px) 21px,calc(100% - 14px) 21px;background-size:6px 6px;background-repeat:no-repeat}
.hoja label.campo .ns-ic{margin-left:auto}
.hoja label.campo.falta .ns-ic{display:grid}
.hoja label.campo.falta input,.hoja label.campo.falta select{border-color:var(--rojo)}

/* Un paso al que le falta algo se pinta ENTERO en rojo (contenedor + texto con el icono de alerta), no solo un chip. */
.secc.con-falta{border-color:var(--rojo) !important}
.secc.con-falta > summary{background:var(--rojo-sup);border-radius:8px}
.secc.paso-hecho{border-color:var(--hay) !important;background:var(--hay-sup)}
.secc.paso-hecho > summary{color:var(--tinta)}
/* Dentro de un paso abierto: solo lo incompleto en rojo y negrita. */
.env-bc:has(.falta-req),.env-bn:has(.falta-req){color:var(--rojo);font-weight:700}
.env-bc:has(.falta-req) i{color:var(--rojo);font-weight:700}
.rotulo.xass-falta{color:var(--rojo);font-weight:800}
.rotulo.xass-falta + input + input + .zona-subir,.rotulo.xass-falta ~ .zona-subir{border-color:var(--rojo)}
.acc-paso > summary .falta-req{margin-left:auto}
.ruta-cajas-papel{display:none;font-weight:800}
@media print{.ruta-cajas-papel{display:inline}}
/* Editar / cancelar / borrar: iconos junto al número del documento. */
.sep-num-fila{display:flex;align-items:center;gap:10px}
.sep-num-fila .ped-acc{margin-left:6px}
.ped-acc .acc-cancelar{color:var(--nohay)}

/* Aviso al seleccionar para un viaje: qué se puede elegir y por qué lo demás no. */
.prov-selaviso{margin:8px 0 12px;padding:10px 14px;border-radius:10px;background:var(--acento-sup);color:var(--tinta);font-size:var(--t2);line-height:1.5}
.prov-selaviso.sin{background:var(--ojo-sup)}
.prov-selaviso .suave{display:block;color:var(--tinta2);font-size:var(--t1)}
.sel-caja{min-height:44px;min-width:44px}

/* Hoja de ruta: todos los botones de entrega miden lo mismo y el número de cajas es lo que más se ve. */
.ruta-doc .ruta-dejar{width:210px;min-height:56px;justify-content:center;gap:10px}
.ruta-doc .ruta-dejar .rd-txt{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15;text-align:left}
.ruta-doc .ruta-dejar .rd-txt span{font-size:var(--t1);font-weight:600}
.ruta-doc .ruta-dejar .rd-txt b{font-size:var(--t4);font-weight:800}

/* Libreta de direcciones: provincia y ciudad obligatorias (rojo + "!" mientras están vacías). */
.de-obl .ns-ic{display:none;width:18px;height:18px;border-radius:50%;place-items:center;margin-left:6px;vertical-align:middle;
  background:var(--rojo);color:#fff;font-size:var(--t1);font-weight:800;font-style:normal;line-height:1}
.de-obl.falta .ns-ic{display:inline-grid}
.de-obl.falta input{border-color:var(--rojo)}
.env-guardalib{display:flex;align-items:center;gap:10px;margin:12px 0 4px;min-height:44px;font-size:var(--t2);font-weight:600;color:var(--tinta2)}
.env-guardalib input{width:20px;height:20px;accent-color:var(--acento);flex:none}

/* ═══ Libreta de direcciones: ficha en tarjetas (parecida a la imagen de Margarita, 2026-10-01) ═══ */
.dd-cuerpo{display:flex;flex-direction:column;gap:14px}
.dd-cab{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.dd-tit{flex:1;min-width:0}
.dd-tit h2{margin:0;font-size:var(--t5);text-transform:uppercase;letter-spacing:-.01em}
.dd-acc{display:flex;gap:8px}
.dd-acc button{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;border-radius:10px;
  font-size:var(--t2);font-weight:700;border:1px solid var(--acento);color:var(--acento);background:var(--sup)}
.dd-acc .dd-editar{background:var(--acento);color:#fff}
.dd-estado{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:10px;font-size:var(--t2)}
.dd-estado.ok{background:var(--hay-sup);color:var(--hay);font-weight:600}
.dd-estado.mal{background:var(--rojo-sup);color:var(--rojo);font-weight:700}
.dd-estado.aviso{background:var(--ojo-sup);color:var(--tinta)}
.ns-ic-dd{flex:none;display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--rojo);color:#fff;font-size:var(--t1);font-weight:800}
.d-tabs{display:flex;gap:4px;overflow-x:auto;border-bottom:1px solid var(--linea)}
.d-tab{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 16px;white-space:nowrap;font-size:var(--t2);
  font-weight:600;color:var(--tinta2);border-bottom:3px solid transparent;margin-bottom:-1px}
.d-tab.activa{color:var(--acento);border-bottom-color:var(--acento);font-weight:750}
.d-tab-mas{color:var(--acento)}
.dd-cols{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-items:start}
@media screen and (min-width:1000px){.dd-cols{grid-template-columns:minmax(0,1.9fr) minmax(0,1fr)}}
.dd-izq,.dd-der{display:flex;flex-direction:column;gap:16px;min-width:0}
.dd-card{background:var(--sup);border:1px solid var(--linea);border-radius:14px;padding:16px 18px}
.dd-card-tit{display:flex;align-items:center;gap:10px;margin-bottom:14px;font-size:var(--t3);font-weight:800}
.dd-rejilla{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 24px;margin-bottom:16px}
@media (max-width:640px){.dd-rejilla{grid-template-columns:1fr}}
.dd-dato{display:flex;gap:12px;align-items:flex-start;min-width:0}
.dd-ic{flex:none;color:var(--tinta2);display:inline-grid;place-items:center;width:24px}
.dd-et{display:block;font-size:var(--t1);font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--tinta3);margin-bottom:2px}
.dd-dato b{display:block;font-size:var(--t3);font-weight:600;overflow-wrap:anywhere}
.dd-falta .dd-et,.dd-falta b{color:var(--rojo);font-weight:800}
.dd-trans{border:1px solid var(--linea);border-radius:12px;padding:10px 12px;margin-bottom:10px;background:var(--sup)}
.dd-trans-cab{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;background:var(--acento-sup)}
.dd-trans-cab b{flex:1;font-size:var(--t3)}
.dd-modo{padding:3px 12px;border-radius:999px;font-size:var(--t1);font-weight:700;background:var(--sup);color:var(--acento)}
.dd-modo.agencia{background:var(--sup2);color:var(--tinta2)}
.dd-trans-ins{margin-top:10px;font-size:var(--t2)}
.dd-nota{border:1px solid var(--linea);border-radius:12px;padding:12px;margin-bottom:12px;font-size:var(--t2)}
.dd-nota.naranja{background:var(--ojo-sup);border-color:var(--ojo)}
.dd-nota b{display:block;font-size:var(--t3);text-transform:uppercase}
.dd-nota-cab{display:flex;align-items:center;gap:10px;margin-bottom:10px;padding:6px 8px;border-radius:8px;background:var(--sup2)}
.dd-nota.naranja .dd-nota-cab{background:var(--sup)}
.dd-nota-cab .n{flex:none;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--tinta2);color:#fff;font-weight:800}
.dd-nota.naranja .dd-nota-cab .n{background:var(--ojo)}
.dd-nota-cab .t{display:inline-flex;align-items:center;gap:8px;font-weight:700}
.dd-pie{display:flex;flex-direction:column;gap:10px;background:transparent}
/* Editor: filas de transportes (transporte · tipo · instrucción · quitar) */
.de-tr-fila{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr) minmax(0,2fr) auto;gap:8px;margin-bottom:8px;align-items:center}
@media (max-width:760px){.de-tr-fila{grid-template-columns:1fr}}
.de-tr-fila select,.de-tr-fila input{box-sizing:border-box;min-height:44px;width:100%;padding:0 12px;background:var(--sup2);border:1px solid var(--linea);border-radius:10px;font:inherit;font-size:var(--t2);color:var(--tinta)}

/* Vuelta 2: sin rayas dobles ni margen extra, y los teléfonos como texto (no como botones). */
.det-cuerpo.dd-cuerpo > div{border-top:0 !important}
.det-cuerpo.dd-cuerpo > .dd-cab,.det-cuerpo.dd-cuerpo > .d-tabs,.det-cuerpo.dd-cuerpo > .dd-cols{padding:0 !important}
.dd-dato a.tel{border:0;background:none;padding:0;color:var(--tinta);font-weight:600;text-decoration:none}
.dd-dato a.tel:hover{text-decoration:underline}

.dd-dato a.tel{font-size:var(--t3);font-family:var(--ui)}
@media (max-width:640px){
  .dd-tit h2{font-size:var(--t4)}
  .dd-tit{flex:1 1 100%}
  .dd-acc{width:100%}.dd-acc button{flex:1;justify-content:center}
}

/* Mapa de oficinas plegado: solo la franja hasta que se pide. */
details.mapa-caja > summary.mapa-cab{cursor:pointer;margin-bottom:0;list-style:none}
details.mapa-caja > summary.mapa-cab::-webkit-details-marker{display:none}
details.mapa-caja > summary.mapa-cab::after{content:"▾";margin-left:auto;color:var(--tinta3)}
details.mapa-caja[open] > summary.mapa-cab{margin-bottom:8px}
details.mapa-caja[open] > summary.mapa-cab::after{content:"▴"}

/* Botones de la tarjeta de Separado: todos del mismo tamaño (2 por fila en el celular, 4 en pantalla ancha). */
.ped-fotos{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ped-fotos > .chip-foto,.ped-fotos > .chip-estado{justify-content:center;min-width:0;width:100%;min-height:36px;white-space:nowrap}
.ped-fotos > :nth-child(n+5){grid-column:1/-1}
@media (min-width:560px){.ped-fotos{grid-template-columns:repeat(4,1fr)}}

/* 2026-10-02: guardar en la libreta, dentro del bloque Destinatario, bien visible */
.env-guardalib-dest{margin-top:12px}
.env-guardalib-dest .agregar{margin:0;min-height:48px;font-weight:700}
.ficha-sep .env-guardalib-dest .agregar.hecho{background:var(--hay-sup);color:var(--hay);border-color:var(--hay)}
.env-libreta-msg{margin-top:6px;font-size:var(--t1);font-weight:700;color:var(--rojo)}

/* 2026-10-02 · Paso 3 más limpio (diseño que mandó Margarita): cuatro recuadros sueltos en 2x2,
   Instrucciones en una banda y los dos botones de imprimir lado a lado. Solo la VISTA (#envver);
   el formulario de editar conserva su caja de una pieza. */
.ficha-sep #envver .env-guia{border:0;background:transparent;gap:10px;overflow:visible}
.ficha-sep #envver .env-guia > .env-b{border:1px solid var(--linea);border-radius:10px;background:var(--sup);padding:10px 12px}
.ficha-sep #envver .env-guia > .env-b-ancho{border:0;background:transparent;padding:2px 0 0}
/* El aviso es un resumen de lo editado: normal en pantalla (rojo solo en la etiqueta impresa). */
.ficha-sep #envver .env-aviso-edit,.ficha-sep #envver .env-aviso{background:var(--sup);color:var(--tinta);font-weight:400;border:1px solid var(--linea);border-radius:8px;padding:8px 10px}
.ficha-sep #envver .env-aviso{display:inline-block;border-left-width:1px}
.ficha-sep #envver .env-aviso-edit::placeholder{color:var(--tinta3);opacity:1}
.ficha-sep #envver .env-aviso-fila{margin-top:8px}
.env-botones{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
.env-botones .agregar{margin:0;min-height:48px}
.env-botones .agregar:only-child{grid-column:1 / -1}

/* Pago: la tarjeta grande se esconde y el candado de la cabecera la abre (2026-10-02). */
.ficha-sep .det-cuerpo .secc-pago.pago-oculto{display:none !important}
.btn-candado{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:10px;
  border:1.5px solid;cursor:pointer;font:inherit;padding:0}
.btn-candado.no{background:var(--rojo-sup);color:var(--rojo);border-color:var(--rojo)}
.btn-candado.ok{background:var(--hay-sup);color:var(--hay);border-color:var(--hay)}

/* 2026-10-02 · Embalaje compacto: cajas como tarjetas verticales en fila, con la foto grande dentro. */
.secc-embalaje .cajas-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}
.caja-comp{display:flex;flex-direction:column;gap:4px;min-width:0}
.caja-comp .caja-cab{margin-bottom:0}
.caja-comp .galeria.galeria-caja{grid-template-columns:1fr}
.caja-comp .caja-mas{font-size:var(--t1);color:var(--tinta3)}
.caja-acc{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto;padding-top:4px}
.caja-acc .btn-ico{flex:1 1 auto;min-height:44px}

.ent-pago{display:flex;align-items:center;gap:12px;margin:2px 0 10px;padding:8px 12px;border-radius:10px;
  background:var(--rojo-sup);color:var(--rojo);font-size:var(--t2)}
.ent-pago span{display:block;font-size:var(--t1)}

/* 2026-10-02 · Formulario de editar el envío más ordenado: libreta arriba a todo el ancho, dos columnas de
   tarjetas apiladas (sin huecos), botones de guardar siempre a la vista. */
.env-edita{display:grid;grid-template-columns:1fr;gap:12px;border:0;background:transparent;overflow:visible}
@media screen and (min-width:900px){.env-edita{grid-template-columns:1fr 1fr}}
.env-edita > .env-col{display:flex;flex-direction:column;gap:12px;min-width:0}
.env-edita .env-b{border:1px solid var(--linea) !important;border-radius:10px;background:var(--sup);padding:12px 14px}
.env-edita > .env-libreta,.env-edita > .env-b-ancho{grid-column:1 / -1}
.env-form .hoja-btns{position:sticky;bottom:0;z-index:2;padding:10px 0;background:var(--sup)}
.env-edita > .env-col > .env-b:last-child{flex:1}

/* 2026-10-02 · Provincia: tira de 4 pasos en la lista (verde hecho, rojo el que toca, gris los que vienen) */
.tira-pasos{display:flex;flex-wrap:wrap;gap:4px}
.tp{display:inline-flex;align-items:center;min-height:24px;padding:2px 9px;border-radius:999px;font-size:var(--t1);font-weight:700;white-space:nowrap}
.tp-ok{background:var(--hay-sup);color:var(--hay)}
.tp-ahora{background:var(--rojo-sup);color:var(--rojo);box-shadow:inset 0 0 0 1.5px var(--rojo)}
.tp-pend{background:var(--sup2);color:var(--tinta3)}
.tp-frase{display:block;margin-top:4px}
.td-vend{font-size:var(--t2);font-weight:600}
.th-vend{width:110px}

/* 2026-10-02 · Etiqueta propia del transporte: una tarjeta por caja dentro del Paso 4 */
.etiq-trans-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,330px),1fr));gap:12px;margin-top:8px}
.etiq-trans-caja{border:1px solid var(--linea);border-radius:10px;padding:10px 12px;background:var(--sup);display:flex;flex-direction:column;gap:6px;min-width:0}
.etiq-trans-caja.hecha{border-color:var(--hay)}
.etiq-trans-caja > b{font-size:var(--t2)}

/* 2026-10-02 · Formulario Editar datos de la guía: todos los controles del mismo tamaño (48 px, --t2) y obligatorios en rojo */
.env-edita .env-in,.env-edita .env-in-n,.env-edita select.env-in,.env-edita textarea.env-in{
  box-sizing:border-box;width:100%;min-height:48px;height:48px;padding:0 14px;background:var(--sup2);color:var(--tinta);
  border:1px solid var(--linea);border-radius:10px;font:inherit;font-size:var(--t2);font-weight:400;margin:0}
.env-edita select.env-in{appearance:none;-webkit-appearance:none;padding-right:38px;
  background-image:linear-gradient(45deg,transparent 50%,var(--tinta3) 50%),linear-gradient(135deg,var(--tinta3) 50%,transparent 50%);
  background-position:calc(100% - 20px) 21px,calc(100% - 14px) 21px;background-size:6px 6px,6px 6px;background-repeat:no-repeat}
.env-edita .env-f{margin-top:10px}
.env-edita .env-f > i{display:flex;align-items:center;gap:6px;font-size:var(--t1);margin-bottom:4px}
.env-edita .env-par{gap:0 12px}
.env-edita .de-casilla{min-height:44px;font-size:var(--t2)}
.env-ic{display:none;width:18px;height:18px;border-radius:50%;place-items:center;background:var(--rojo);color:#fff;font-size:var(--t1);font-weight:800;line-height:1;font-style:normal}
.env-edita .env-obl.falta .env-ic{display:grid}
.env-edita .env-obl.falta .env-in{border:2px solid var(--rojo);background:var(--rojo-sup)}
.env-edita .env-obl.falta > i{color:var(--rojo);font-weight:700}
.de-tr-fila{grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr) minmax(0,1fr) minmax(0,1.6fr) auto}
@media (max-width:760px){.de-tr-fila{grid-template-columns:1fr}}

/* Etiqueta del transporte: la zona de subida ocupa el ancho de su tarjeta y los dos botones caben sin salirse */
.etiq-trans-caja .zona-subir{width:100%;box-sizing:border-box;padding:12px;gap:8px}
.etiq-trans-caja .zona-subir > span{font-size:var(--t1);text-align:center}
.etiq-trans-caja .zona-btns{max-width:none;width:100%;margin-top:2px}
.etiq-trans-caja .zona-b{min-width:0;min-height:44px;padding:0 8px}
.etiq-trans-caja:not(.hecha) .zona-subir{border-color:var(--rojo)}

.brindis.mal{background:var(--nohay-sup);color:var(--nohay);border:1.5px solid var(--nohay);font-weight:700}

/* Entregados (Provincia, 2026-10-03): dos secciones, por vendedor, con íconos de resumen y archivar (44 px). */
#prov-entregados .ent-sec{margin:0 0 18px}
.ent-tit{font-size:var(--t3);font-weight:750;margin:6px 0 8px;display:flex;gap:8px;align-items:center}
.ent-n{font-size:var(--t1);font-weight:700;color:var(--tinta2);background:var(--sup2);border-radius:99px;padding:1px 9px}
.ent-vend{font-size:var(--t1);font-weight:750;color:var(--tinta2);text-transform:uppercase;letter-spacing:.04em;margin:12px 0 5px}
.ent-fila{display:flex;align-items:center;gap:8px;padding:9px 10px;border:1px solid var(--linea);border-radius:10px;margin-bottom:6px;background:var(--sup);cursor:pointer}
.ent-info{flex:1;min-width:0}
.ent-info .td-sub{display:block}
.ent-ico{flex:none;width:44px;height:44px;border-radius:10px;border:1px solid var(--linea);background:var(--sup2);color:var(--tinta);display:grid;place-items:center;cursor:pointer}
.ent-ico[disabled]{opacity:.4;cursor:not-allowed}
.ent-ico.listo{background:var(--acento);color:#fff;border-color:var(--acento)}

/* Provincia: filtros por vendedor y pago, resumen de lo filtrado y tarjeta activa bien visible (2026-10-03). */
.prov-filtros{display:flex;gap:8px;margin:10px 0 8px;flex-wrap:wrap}
.prov-filtros .campo-sel{flex:1;min-width:150px;height:44px;margin:0}
.prov-activos{display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;margin:0 0 10px;padding:9px 12px;
  border:1.5px solid var(--acento);border-radius:10px;background:var(--acento-sup);font-size:var(--t2)}
.prov-activos[hidden]{display:none}
.prov-activos button{min-height:44px;padding:0 14px;border-radius:10px;border:1.5px solid var(--nohay);background:var(--nohay-sup);color:var(--nohay);font-weight:700;cursor:pointer}
.panel-tiles .tile{position:relative}
.panel-tiles .tile-activa{border-width:2.5px;box-shadow:0 3px 10px rgba(0,0,0,.14)}
.panel-tiles .tile-activa::after{content:"\2713 FILTRO";position:absolute;top:6px;right:8px;font-size:var(--t1);font-weight:800;letter-spacing:.04em;opacity:.85}
.tile-activa[data-tile="enProceso"]{border-color:var(--acento);background:var(--acento-sup)}
.tile-activa[data-tile="enProceso"] .tile-lbl{color:var(--acento)}
.tile-activa[data-tile="faltanDatos"],.tile-activa[data-tile="faltaImprimir"]{border-color:var(--ojo);background:var(--ojo-sup)}
.tile-activa[data-tile="faltanDatos"] .tile-lbl,.tile-activa[data-tile="faltaImprimir"] .tile-lbl{color:var(--ojo)}

/* Provincia: tarjetas de filtro COMPACTAS (2026-10-03). Una fila de píldoras (nombre + número) que se acomoda sola en celular y escritorio. */
.prov-tiles{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 8px}
.prov-tiles .tile{width:auto;display:inline-flex;align-items:center;gap:9px;min-height:44px;padding:0 13px;border-radius:99px}
.prov-tiles .tile-lbl{display:inline;margin:0;letter-spacing:.02em;text-transform:none;font-size:var(--t2);font-weight:650;white-space:nowrap}
.prov-tiles .tile b,.prov-tiles .tile-principal b{font-size:var(--t3)}
.prov-tiles .tile-activa{border-width:2px;box-shadow:none}
.prov-tiles .tile-activa::after{content:none}
.prov-tiles .tile-activa .tile-lbl::before{content:"\2713  ";font-weight:800}
.prov-filtros{margin:6px 0}
.prov-filtros .campo-sel{min-width:130px;height:44px}
@media (min-width:900px){.prov-filtros .campo-sel{flex:0 1 240px}}

/* Celular: UNA sola fila de píldoras que se desliza de lado, en vez de varias filas (2026-10-03). */
@media (max-width:700px){
  .prov-tiles{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;margin-right:-4px;scrollbar-width:none}
  .prov-tiles::-webkit-scrollbar{display:none}
  .prov-tiles .tile{flex:none}
  .prov-filtros .campo-sel{min-width:0;flex:1 1 0}
}
.prov-filtros .campo-sel{line-height:1.2;padding-top:0;padding-bottom:0}

/* Hoja de ruta: etiqueta roja de pago por confirmar y WhatsApp al vendedor (2026-10-03). */
.ruta-pagorojo{display:inline-block;margin-left:6px;padding:2px 9px;border-radius:99px;border:1.5px solid var(--nohay);background:var(--nohay-sup);color:var(--nohay);font-size:var(--t1);font-weight:750}
.ruta-vend{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:4px 0}
.ruta-wa{min-height:44px;color:var(--hay);border-color:var(--hay)}
.tile-activa[data-tile="archivadas"]{border-color:var(--acento);background:var(--acento-sup)}
.tile-activa[data-tile="archivadas"] .tile-lbl{color:var(--acento)}

/* Botones de la hoja del resumen: azul = acción lista, verde = WhatsApp, gris con borde punteado = apagado hasta imprimir (2026-10-03). */
.res-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:48px;border-radius:10px;border:0;font:inherit;font-weight:700;cursor:pointer;text-decoration:none}
.res-azul{background:var(--acento);color:#fff}
.res-verde{background:var(--hay);color:#fff}
.res-gris{background:var(--sup2);color:var(--tinta3);border:1.5px dashed var(--linea);cursor:not-allowed}
.ent-estado{display:block;font-size:var(--t1);font-weight:700;color:var(--ojo);margin-top:2px}
.ent-estado.listo{color:var(--acento)}
.ent-ico[disabled]{opacity:1;background:var(--sup2);color:var(--tinta3);border-style:dashed}
.ent-ico.listo{background:var(--acento);color:#fff;border-color:var(--acento)}
.ent-ico.ent-imp{background:var(--acento);color:#fff;border-color:var(--acento)}

/* Formulario "Editar datos de la guía" COMPACTO (Margarita, 2026-10-03): campos de 40 px en escritorio (44 en celular), menos aire
   entre campos, tres campos por fila donde caben, RUC + dirección de "Facturar flete a" lado a lado. */
.env-edita{gap:10px}
.env-edita > .env-col{gap:10px}
.env-edita .env-b{padding:9px 12px}
.env-edita .env-f{margin-top:6px}
.env-edita .env-f > i{margin-bottom:2px}
.env-edita .env-in,.env-edita .env-in-n,.env-edita select.env-in,.env-edita textarea.env-in{min-height:44px;height:44px}
.env-edita select.env-in{background-position:calc(100% - 20px) 19px,calc(100% - 14px) 19px}
.env-edita .de-casilla{min-height:34px;margin-bottom:2px}
.env-edita .env-par{gap:0 10px}
.env-edita #vremmatriz .env-bc{display:inline-block;margin-right:14px;font-size:var(--t1)}
.env-edita #vremmatriz .env-ayuda{display:none}
@media screen and (min-width:900px){
  .env-edita .env-in,.env-edita .env-in-n,.env-edita select.env-in,.env-edita textarea.env-in{min-height:40px;height:40px;padding:0 12px}
  .env-edita select.env-in{background-position:calc(100% - 18px) 17px,calc(100% - 12px) 17px}
  /* El ancho mínimo va en em: crece con el tamaño de letra (A+) y los campos no cortan lo que se escribe. */
  .env-edita .env-par3{grid-template-columns:repeat(auto-fit,minmax(13em,1fr))}
  .env-edita .env-par3b{grid-template-columns:repeat(auto-fit,minmax(11em,1fr))}
  .env-edita #vclifiscal{display:grid;grid-template-columns:1fr 2fr;gap:0 10px}
  .env-edita .env-guardalib-dest button{min-height:40px;height:40px}
}
@media screen and (max-width:899px) and (min-width:521px){.env-edita .env-par3,.env-edita .env-par3b{grid-template-columns:1fr 1fr}}

/* Formulario de la guía: cuatro cuadros en dos columnas Y filas parejas (2026-10-03).
   Izquierda: Remitente y Destinatario. Derecha: Facturar flete a y Transporte. Cada fila mide lo mismo en las dos columnas. */
.env-edita > .env-col{display:contents}
.env-edita > .env-libreta{order:0}
.env-edita .env-b-rem{order:1}.env-edita .env-b-des{order:2}.env-edita .env-b-fle{order:3}.env-edita .env-b-tra{order:4}
.env-edita > .env-b-ancho{order:5}
@media screen and (min-width:900px){
  .env-edita{grid-template-columns:1fr 1fr;align-items:stretch}
  .env-edita .env-b-rem{order:1;grid-column:1}.env-edita .env-b-fle{order:2;grid-column:2}
  .env-edita .env-b-des{order:3;grid-column:1}.env-edita .env-b-tra{order:4;grid-column:2}
}

/* Instrucciones vacías (campo editable de la ficha): borde rojo y "!" hasta que se escriba algo (2026-10-03). */
.env-aviso-edit:placeholder-shown{border:2px solid var(--rojo);background:var(--rojo-sup)}
.env-b-ancho:has(#envnotas:placeholder-shown) .env-bt::after{content:"!";display:inline-grid;place-items:center;width:18px;height:18px;margin-left:8px;border-radius:50%;background:var(--rojo);color:#fff;font-size:12px;font-weight:800;text-transform:none;letter-spacing:0;vertical-align:middle}

/* Botón chico "Papel: A5 horizontal · cambiar" junto a los de imprimir (2026-10-03). */
.papel-link{display:block;margin:6px 0 0;padding:6px 2px;background:none;border:0;color:var(--tinta2);font:inherit;font-size:var(--t1);cursor:pointer;text-decoration:underline;text-underline-offset:3px;text-align:left}
.papel-link b{color:var(--acento)}

/* Cédula / teléfonos / correos más grandes y legibles para detectar errores (2026-10-03). */
.env-edita .env-dato .env-in{font-size:var(--t3);letter-spacing:.02em;font-variant-numeric:tabular-nums;height:46px;min-height:46px}
/* Transporte habitual destacado + los demás plegados. */
.hab-box{margin:4px 0 8px;padding:9px 11px;border:2px solid var(--acento);border-radius:10px;background:var(--acento-sup)}
.hab-t{font-size:var(--t1);font-weight:800;color:var(--acento);margin-bottom:5px}
.hab-fila{display:flex;align-items:center;gap:10px;padding:5px 0}
.hab-fila + .hab-fila{border-top:1px solid var(--linea)}
.hab-info{flex:1;min-width:0}
.hab-info b{font-size:var(--t3)}
.hab-det{display:block;font-size:var(--t1);color:var(--tinta2)}
.hab-usar{flex:none;min-height:40px;padding:0 14px;border-radius:10px;border:0;background:var(--acento);color:#fff;font-weight:700;cursor:pointer}
.hab-ok{flex:none;color:var(--hay);font-weight:800}
.hab-fila.elegido .hab-info b{color:var(--hay)}
.sug-mas{margin:2px 0 6px}
.sug-mas > summary{cursor:pointer;font-size:var(--t1);color:var(--tinta2);padding:4px 0;list-style:none}
.sug-mas > summary::-webkit-details-marker{display:none}
.sug-ver{color:var(--acento);font-weight:700;text-decoration:underline}
.sug-chips .sug{display:inline-flex;align-items:baseline;gap:6px;padding:6px 11px;min-height:40px}
.sug-chips .sug .sug-sub{margin:0;font-size:var(--t1)}
.sug-chips .sug.hab{border-color:var(--acento);background:var(--acento-sup)}
.sug-estrella{color:var(--acento);font-weight:800}

/* Formulario de la guía EN SECUENCIA (2026-10-03): pasos numerados en una columna, en el orden de la etiqueta. */
.env-edita.env-seq{display:flex !important;flex-direction:column;gap:12px;max-width:860px;margin:0 auto}
.env-paso{border:1px solid var(--linea);border-radius:12px;background:var(--sup);padding:12px 14px}
.env-pt{display:flex;align-items:center;gap:9px;font-weight:750;font-size:var(--t3);margin-bottom:6px}
.env-n{flex:none;width:26px;height:26px;border-radius:50%;background:var(--acento);color:#fff;display:grid;place-items:center;font-size:var(--t1);font-weight:800}
.env-paso.env-forma{background:transparent;border-style:dashed}
.env-tog{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:2px 0 4px}
.env-tog button{min-height:56px;border-radius:12px;border:2px solid var(--linea);background:var(--sup2);color:var(--tinta);font:inherit;font-size:var(--t3);font-weight:750;cursor:pointer}
.env-tog button[aria-pressed="true"]{border-color:var(--acento);background:var(--acento-sup);color:var(--acento)}
.env-modo.falta .env-tog button{border-color:var(--rojo)}
.env-modo.falta > i{color:var(--rojo);font-weight:700}
.env-tog button small{display:block;font-size:var(--t1);font-weight:500;color:var(--tinta2);margin-top:2px}
.env-tog button[aria-pressed="true"] small{color:var(--acento)}
.env-bt:has(.env-n){display:flex;align-items:center;gap:8px;text-transform:none;letter-spacing:0;font-size:var(--t2);color:var(--tinta)}
.env-bt .env-n{width:22px;height:22px;font-size:var(--t1)}

/* Direcciones: tabla (2026-10-04) */
.dir-tabla{background:var(--papel,#fff);border-radius:6px;overflow:hidden}
@media(max-width:700px){.dir-tabla{background:transparent}}
.dir-fila{display:grid;grid-template-columns:minmax(0,64fr) minmax(0,92fr) minmax(0,470fr) minmax(0,120fr) minmax(0,190fr) minmax(0,96fr);gap:12px;align-items:center;padding:12px 14px;border-bottom:1px solid var(--linea);cursor:pointer;font-size:13px}
.dir-fila:not(.dir-cab):hover{background:rgba(0,0,0,.03)}
.dir-cab{cursor:default;color:var(--tenue,#6b7280);font-size:12px;padding:10px 14px}
.dir-dir{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere}
.dir-dir i{font-style:italic}
.dir-mail{overflow-wrap:anywhere}
.dir-est b{display:inline-block;padding:4px 9px;border-radius:4px;font-size:12px}
.dir-ok{background:var(--hay-sup);color:var(--hay)}
.dir-falta{background:var(--rojo-sup);color:var(--rojo)}
.dir-edit{border:1px solid var(--linea);background:var(--sup);color:var(--acento);border-radius:5px;padding:6px 12px;font-weight:600;cursor:pointer}
.dir-trans{display:flex;flex-wrap:wrap;gap:5px;margin-top:3px}
.dir-chip{display:inline-block;padding:2px 8px;border-radius:999px;background:var(--sup2);color:var(--tinta2);font-size:12px;line-height:1.5}
.dir-chip.fav{background:var(--acento-sup);color:var(--acento);font-weight:700}
/* Mide la caja y no la pantalla: Safari del celular no activaba el @media (2026-10-06) */
#dest-lista{container-type:inline-size}
@container (max-width:900px){
  .dir-cab{display:none}
  .dir-fila{grid-template-columns:auto auto 1fr;grid-template-areas:"id est acc" "dir dir dir" "tel tel tel" "mail mail mail";gap:8px 10px;margin:0 0 10px;padding:12px 12px 10px;
    border:1px solid var(--linea);border-radius:12px;background:var(--sup)}
  .dir-id{grid-area:id;font-weight:700;color:var(--tinta2)}
  .dir-est{grid-area:est}
  .dir-acc{grid-area:acc;justify-self:end}
  .dir-dir{grid-area:dir;gap:3px;border-top:1px solid var(--linea);padding-top:8px}
  .dir-dir > i:first-child{font-style:normal;font-weight:800;font-size:15px;color:var(--tinta)}
  .dir-tel{grid-area:tel}.dir-mail{grid-area:mail}
  .dir-tel::before{content:"Tel. ";color:var(--tinta3)}
  .dir-mail::before{content:"Correo ";color:var(--tinta3)}
}
.de-ubic{position:relative;grid-column:1/-1}
.ubic-sel{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;text-align:left;padding:12px 14px;border:1.5px solid var(--acento);border-radius:6px;background:var(--sup);font:inherit;font-size:16px;font-weight:400;color:var(--tinta);cursor:pointer}
.ubic-sel i{font-style:normal;color:var(--acento)}
.ubic-sel .ubic-pend{font-weight:500;color:var(--rojo)}
.de-ubic:not(.falta) .ubic-sel .ubic-pend{color:var(--tinta2)}
.ubic-panel{border:1px solid var(--linea);border-radius:6px;background:var(--sup);margin-top:4px;padding:8px;box-shadow:0 4px 14px rgba(0,0,0,.12)}
.ubic-panel input{width:100%;box-sizing:border-box;margin-bottom:6px}
.ubic-lista{max-height:260px;overflow:auto}
.ubic-lista button{display:block;width:100%;text-align:left;padding:10px 12px;border:0;border-bottom:1px solid var(--linea);background:none;font:inherit;cursor:pointer}
.ubic-lista button:hover{background:var(--acento-sup)}
.ubic-lista button.puesta{background:var(--sup2);font-weight:600}
.dir-trans{font-size:12px;color:var(--tinta2)}
.de-obl.falta .ubic-sel{border-color:var(--rojo)}
.de-obl.falta .ubic-sel .ubic-pend,.de-obl.falta .ubic-sel i{color:var(--rojo)}
.de-env{border:2px solid var(--acento);border-radius:10px;padding:0 12px 12px;margin:0 0 22px;display:flex;flex-direction:column;gap:10px;background:var(--sup);box-shadow:0 2px 8px rgba(0,0,0,.10);overflow:hidden}
.de-env-n{display:flex;align-items:center;gap:10px;margin:0 -12px;padding:10px 14px;background:var(--acento);color:#fff}
.de-env-n b{font-size:16px;font-weight:700;flex:1;min-width:0;overflow-wrap:anywhere}
.de-env-n small{font-size:12px;opacity:.85;text-transform:uppercase;letter-spacing:.05em}
.de-env-num{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--sup);color:var(--acento);font-weight:800;font-size:14px}
.de-env-dom{display:flex;flex-direction:column;gap:8px}
.de-env-dom em{font-style:normal;font-size:12px;color:var(--tinta2)}
.de-ag-info{background:var(--acento-sup);border-left:4px solid var(--acento);border-radius:5px;padding:10px 12px;font-size:15px;color:var(--tinta);line-height:1.4}
.de-ag-info span{font-size:14px;color:var(--tinta)}
.de-usarcli{align-self:flex-start;background:var(--acento);color:#fff;border:0;border-radius:6px;padding:10px 14px;font:inherit;font-weight:600;cursor:pointer}
.de-env-dom .de-campo>span{font-size:13px;font-weight:600;color:var(--tinta)}
.de-env-par{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:600px){.de-env-par{grid-template-columns:1fr}}
/* Ficha de la dirección: una sola columna (datos del cliente y, debajo, sus direcciones de envío). */
@media screen and (min-width:1000px){.dd-cols{grid-template-columns:minmax(0,1fr)}}
.dd-card .de-env{margin-top:12px}
.de-env-bt{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.de-env-bt button{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.7);border-radius:5px;padding:4px 9px;font:inherit;font-size:12px;font-weight:600;cursor:pointer}
.de-env-bt button:hover{background:rgba(255,255,255,.18)}
.de-fav{background:var(--sup);color:var(--acento);border-radius:5px;padding:4px 9px;font-size:12px;font-weight:800}
.de-env-n{flex-wrap:wrap}
.env-sub{margin:14px 0 6px;font-weight:800;font-size:15px;color:var(--acento);text-transform:uppercase;letter-spacing:.04em}
/* Guía de envío, paso 1 y 2 (2026-10-05) */
.env-pt-cli{margin-left:10px;font-weight:700;color:var(--acento)}
.dest-sug{margin:12px 0}
.dir-guardadas{display:flex;flex-direction:column;gap:8px;margin-top:12px}
.dir-guardadas .hab-t{font-weight:800;font-size:13px;color:var(--acento);text-transform:uppercase;letter-spacing:.04em}
.hab-dir{display:flex;flex-direction:column;gap:3px;text-align:left;width:100%;padding:10px 12px;border:1.5px solid var(--linea);border-radius:8px;background:var(--sup);font:inherit;cursor:pointer}
.hab-dir:hover{border-color:var(--acento)}
.hab-dir.elegido{border-color:var(--acento);background:var(--acento-sup)}
.hab-dir .hab-tr{color:var(--tinta2);font-size:13px}
.hab-dir i{font-style:normal;font-weight:700;color:var(--acento);font-size:13px;align-self:flex-end}
.hab-dir-fila{display:flex;gap:8px;align-items:stretch}
.hab-dir-fila .hab-dir{flex:1;min-width:0}
.hab-ed{flex:none;border:1.5px solid var(--acento);background:var(--sup);color:var(--acento);border-radius:8px;padding:0 14px;font:inherit;font-weight:700;cursor:pointer}
.hab-ed:hover{background:var(--acento-sup)}
/* Recuadro de la dirección de envío (paso 2 de la guía) */
.env-editor{margin-top:14px;padding:12px;border:2px solid var(--linea);border-radius:10px;background:var(--sup);display:flex;flex-direction:column;gap:10px}
.env-editor.editando{border-color:var(--acento);background:var(--sup)}
.env-editor.falta-ed{border-color:var(--rojo);background:var(--rojo-sup)}
.env-editor > .env-sub{margin:0}
.dir-agregar{display:block;width:100%;padding:13px 14px;border:2px dashed var(--acento);border-radius:10px;background:var(--acento-sup);color:var(--acento);font:inherit;font-size:16px;font-weight:800;cursor:pointer}
.dir-agregar:hover{background:var(--acento-sup)}
.dir-guardadas .hab-ed{font-size:14px}
.hab-actual{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--linea);border-radius:8px;background:var(--sup);color:var(--tinta2)}
.env-edita .env-paso.paso-falta{border:2px solid var(--rojo);background:var(--rojo-sup)}
.env-edita .env-paso.paso-falta > .env-pt{color:var(--rojo)}
.dir-prompt{margin:0;padding:10px 0;font-weight:700;color:var(--tinta2)}

.dir-guardar{display:block;width:100%;padding:13px 14px;border:0;border-radius:10px;background:var(--acento);color:#fff;font:inherit;font-size:16px;font-weight:800;cursor:pointer}
.dir-guardar:disabled{opacity:.6}
.dir-cerrar{display:block;width:100%;padding:10px 14px;border:1.5px solid var(--linea);border-radius:10px;background:var(--sup);color:var(--tinta2);font:inherit;font-weight:700;cursor:pointer}
#vactcli{margin-top:18px}
/* Cámara y Galería de una caja sin foto (2026-10-05): se partían fuera de la tarjeta en pantallas angostas. Ocupan toda la fila de la tarjeta,
   se reparten el ancho y, si aun así no caben, pasan una debajo de la otra. */
.caja-acc .par-ico{display:flex;flex-wrap:wrap;gap:6px;flex:1 1 100%;min-width:0;max-width:100%}
.caja-acc .par-ico .btn-ico{flex:1 1 90px;min-width:0;justify-content:center;box-sizing:border-box}
/* Cámara y Galería de las cajas: solo el icono (2026-10-05); el nombre queda en el aria-label y en el tooltip. */
.caja-acc .par-ico .ico-txt{display:none}
.caja-acc .par-ico{flex-wrap:nowrap}
.caja-acc .par-ico .btn-ico{flex:1 1 0;gap:0}
/* Zona donde se puede soltar una foto arrastrada (cajas de embalaje) */
.soltar-aqui{outline:2px dashed var(--acento);outline-offset:2px;background:var(--acento-sup)}
.secc-embalaje .cel img[draggable="true"]{cursor:grab}
/* Cámara y Galería: SOLO el icono en todas las pantallas (Margarita, 2026-10-05) */
.par-ico .ico-txt{display:none}
.par-ico .btn-ico.solo-ico{gap:0}
/* Botón "pasar a otra caja" sobre cada foto de embalaje (para el celular) */
.mover-foto{position:absolute;left:2px;bottom:2px;min-width:30px;height:30px;border-radius:50%;border:0;background:rgba(0,0,0,.62);color:#fff;font-size:16px;line-height:1;cursor:pointer;display:grid;place-items:center;padding:0}
/* Direcciones guardadas en la guía: el "Editar" va sobre la esquina de la tarjeta (en celular no roba una columna entera) */
.hab-dir-fila{position:relative;display:block}
.hab-dir-fila .hab-dir{padding-right:84px}
.hab-dir-fila .hab-ed{position:absolute;top:8px;right:8px;padding:6px 14px;border-radius:8px;font-size:13px}
/* Editar una dirección en celular: botones de guardar a todo el ancho */
@media(max-width:700px){
  .dest-edit .de-btns{display:flex;gap:8px}
  .dest-edit .de-btns .b1,.dest-edit .de-btns .b2{flex:1}
}
/* Número de documento largo + botones en celular: que se acomoden en vez de salirse de la pantalla */
.sep-num-fila{flex-wrap:wrap}
.sep-num-fila .det-cod{min-width:0;flex:1 1 140px;overflow-wrap:anywhere}
/* Título de cada oficina de un transporte en celular: el nombre no se aplasta a cero ni los botones se salen */
.ofi-tit{flex-wrap:wrap;row-gap:6px}
.ofi-tit > b{flex:1 1 120px;min-width:0;overflow-wrap:anywhere}
.ficha-trans .ofi-tit{flex-wrap:wrap}
.ficha-trans .ofi-tit b{white-space:normal;overflow:visible;text-overflow:clip;flex:1 1 120px}

/* Provincia > Envíos en celular: menos aire para que la lista suba (2026-10-06) */
@media (max-width:520px){
  .panel-envios > div{padding:6px 0;margin-bottom:0}
  .panel-envios > .rotulo{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;padding:4px 0}
  .panel-envios > .rotulo #provconteo{flex:1 1 100%}
  .panel-envios > .rotulo .sep{display:none}
  .panel-envios > .rotulo button{flex:none;white-space:nowrap;padding:6px 8px;font-size:var(--t1);min-height:0}
  #prov-selaviso:empty,#prov-viajes:empty{display:none}
  #prov-viajes .rotulo{margin:0 0 4px !important}
  #prov-viajes .reparto{margin-bottom:6px}
  .prov-tiles{gap:6px}
  .prov-tiles .tile{min-height:36px;padding:0 10px;gap:6px}
  .prov-tiles .tile-lbl{font-size:var(--t1)}
  .prov-filtros{margin:0;gap:6px;flex-wrap:nowrap}
  .prov-filtros .campo-sel{min-width:0;height:38px;font-size:var(--t2)}
}

/* Secciones de Provincia > Envíos: transporte primero, matriz después (2026-10-06) */
.fila-seccion td{padding:12px 14px 6px;font-size:var(--t1);font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--tinta3);background:var(--sup2);cursor:default}
.prov-seccion{margin:10px 0 6px}
.tp[data-paso]{cursor:pointer}

/* Tarjeta de Tránsito en orden fijo: estado, proveedor y datos en columnas (2026-10-06) */
.pedido .pt-estado{margin-bottom:8px}
.pedido .pt-prov{display:flex;flex-direction:column;gap:2px;margin-bottom:8px}
.pedido .pt-prov b{font-size:var(--t3);line-height:1.3}
.pedido .pt-prov .fact{font-size:var(--t1);color:var(--tinta3);font-family:var(--mono)}
.pt-datos{display:grid;grid-template-columns:5.6em 1fr;gap:3px 14px;margin:0 0 6px;font-size:var(--t2)}
.pt-datos dt{color:var(--tinta3);font-size:var(--t1);align-self:center}
.pt-datos dd{margin:0;color:var(--tinta);min-width:0;overflow-wrap:anywhere}

/* Conteo con cuenta: botón × y vista previa "3 × 4 = 12" (2026-10-06) */
.cn-ctl .cn-por{font-weight:700}
.cn-calc{margin:8px 0 12px;padding-left:54px;font-size:var(--t2);color:var(--tinta2)}
.cn-calc:empty{display:none}
.cn-calc b{color:var(--acento)}
.cn-form{font-family:var(--mono);color:var(--tinta3);margin-left:4px}
.cn-cuenta{display:block;font-size:var(--t1);font-weight:400;color:var(--tinta3);font-family:var(--mono);white-space:nowrap}

/* Papel siempre blanco, también el fondo de la página y sus márgenes: en el PDF de Safari salía el gris (o el oscuro) de la app alrededor de la hoja (2026-10-06) */
@media print{
  :root,:root[data-theme="dark"],:root[data-theme="light"]{color-scheme:light;background:#fff !important}
  html,body,.marco,.hoja-llena,.ficha-sep,.ficha-trans,.det-cuerpo,.cn-cuerpo{background:#fff !important}
}

/* Actualizar desde XASS (2026-10-07) */
#bxass.con-aviso{position:relative}
#bxass.con-aviso::after{content:"";position:absolute;top:3px;right:3px;width:9px;height:9px;border-radius:50%;background:var(--acento);border:2px solid var(--sup)}
.xs-estado{font-size:var(--t2);color:var(--tinta2);margin:0 0 8px}
.xs-ayuda{font-size:var(--t1);color:var(--tinta3);margin:0 0 8px}
.xs-lista{max-height:38vh;overflow:auto;border:1px solid var(--linea);border-radius:var(--r-chico);margin-bottom:12px}
.xs-fila{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-bottom:1px solid var(--linea);cursor:pointer}
.xs-fila:last-child{border-bottom:0}
.xs-fila input{margin-top:3px;flex:none;width:20px;height:20px}
.xs-fila.sosp{background:var(--rojo-sup)}
.xs-txt{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:var(--t2);overflow-wrap:anywhere}
.xs-ant{color:var(--tinta3);font-size:var(--t1)}
.xs-nvo{color:var(--tinta)}
.xs-pedir{margin-bottom:12px}
.xs-hist{margin:4px 0 12px;font-size:var(--t2)}
.xs-ap{display:flex;gap:8px;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid var(--linea)}
.xs-ap small{display:block;color:var(--tinta3)}
.xs-reloj{margin:0 0 10px;padding:9px 12px;border-radius:var(--r-chico);background:var(--acento-sup);color:var(--tinta);font-size:var(--t2)}
.xs-reloj.pasado{background:var(--ojo-sup)}
.xs-reloj .xs-t{font-family:var(--mono);font-weight:700}
