/* ============================================================
   RETOZ SaaS — Sistema de diseño (look Centro: blanco + ámbar)
   Claro/oscuro · Poppins (UI) + Playfair (titulares)
   ============================================================ */
:root,[data-theme="light"]{
  --bg-0:#ffffff; --bg-1:#ffffff; --bg-2:#fafafa; --bg-3:#f3f4f6;
  --sidebar-bg:#ffffff;
  --border:#e9eaee; --border-2:#d6d8de;
  --text-1:#0a0a0a; --text-2:#374151; --text-3:#6b7280; --text-4:#9ca3af;
  --accent:#f59e0b; --accent-2:#d97706; --accent-bg:rgba(245,158,11,.14);
  --green:#10b981; --green-bg:#ecfdf5; --green-tx:#047857;
  --red:#ef4444;   --red-bg:#fef2f2;  --red-tx:#b91c1c;
  --blue:#3b82f6;  --blue-bg:#eff6ff;  --blue-tx:#1d4ed8;
  --purple:#8b5cf6;--purple-bg:#f5f3ff;--purple-tx:#6d28d9;
  --amber-bg:#fff7ed; --amber-tx:#b45309;
  --sh-sm:0 1px 2px rgba(16,18,27,.05);
  --sh-md:0 2px 10px rgba(16,18,27,.07);
  --sh-lg:0 12px 32px rgba(16,18,27,.10);
}
[data-theme="dark"]{
  /* Negro CÁLIDO (un toque amarronado) — como la Ezer Cuentas oficial. */
  --bg-0:#17110d; --bg-1:#211a14; --bg-2:#2a2018; --bg-3:#352920;
  --sidebar-bg:#130e0a;
  --border:#332820; --border-2:#443628;
  --text-1:#ededed; --text-2:#a8acb3; --text-3:#7b8089; --text-4:#5f646c;
  --accent:#f59e0b; --accent-2:#fbbf24; --accent-bg:rgba(245,158,11,.18);
  --green-bg:rgba(16,185,129,.14); --red-bg:rgba(239,68,68,.14);
  --blue-bg:rgba(59,130,246,.14); --purple-bg:rgba(139,92,246,.16);
  --amber-bg:rgba(245,158,11,.14);
  --sh-sm:0 1px 2px rgba(0,0,0,.4); --sh-md:0 2px 10px rgba(0,0,0,.5); --sh-lg:0 12px 32px rgba(0,0,0,.6);
}

:root{
  --black:#0a0a0a;
  --font-ui:'Poppins',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  --font-display:'Playfair Display',Georgia,'Times New Roman',serif;
  --r-xs:6px; --r-sm:8px; --r-md:12px; --r-lg:16px; --r-xl:22px; --r-full:999px;
  --ease:200ms cubic-bezier(.4,0,.2,1);
}

*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
html{max-width:100%;overflow-x:clip}
/* Cambio de página suave (crossfade nativo del navegador): mata el parpadeo
   blanco al navegar entre pantallas. Navegadores viejos lo ignoran sin drama. */
@view-transition{navigation:auto}
::view-transition-old(root),::view-transition-new(root){animation-duration:.14s}
body{font-family:var(--font-ui);background:var(--bg-0);color:var(--text-1);
  line-height:1.55;-webkit-font-smoothing:antialiased;font-size:14px;
  max-width:100%;overflow-x:clip;
  transition:background .25s,color .25s}
img,svg{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer}
::selection{background:var(--accent);color:#fff}
.serif{font-family:var(--font-display)}

/* ---- Botones ---- */
.btn{display:inline-flex;align-items:center;gap:8px;font:600 13.5px/1 var(--font-ui);
  padding:10px 16px;border-radius:var(--r-sm);border:1px solid transparent;
  transition:var(--ease);white-space:nowrap}
.btn--primary{background:var(--accent);color:#1a1205}
.btn--primary:hover{background:var(--accent-2);transform:translateY(-1px);box-shadow:var(--sh-md)}
.btn--ghost{background:var(--bg-1);color:var(--text-2);border-color:var(--border)}
.btn--ghost:hover{background:var(--bg-2);color:var(--text-1)}
.btn--sm{padding:7px 12px;font-size:12.5px}
/* Un botón apagado tiene que VERSE apagado. Sin esto un `disabled` seguía
   pintado como si estuviera vivo —color de acento, y hasta el efecto de pasar
   el dedo por encima— y el dueño lo apretaba esperando que hiciera algo. */
.btn[disabled]{opacity:.42;cursor:default;pointer-events:none}
.btn[disabled]:hover{transform:none;box-shadow:none}

/* Un <input> trae de fábrica un ancho mínimo propio (unos 20 caracteres) y,
   dentro de una caja flex o de una rejilla se niega a bajar de ahí: por eso en
   pantallas angostas el buscador de Proveedores y el campo de escribir del
   probador del bot se salían por el borde derecho. `min-width:0` los deja
   encogerse; el ancho lo siguen mandando el `width` o el `flex` de cada uno,
   así que esto no cambia nada donde ya entraba bien. */
input,select,textarea{min-width:0}

/* ---- Tarjeta ---- */
.card{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-lg);
  box-shadow:var(--sh-sm)}
.card-pad{padding:18px}
.card-h{display:flex;align-items:center;justify-content:space-between;
  padding:15px 18px;border-bottom:1px solid var(--border)}
.card-title{font-size:14.5px;font-weight:650}
.card-sub{font-size:12.5px;color:var(--text-3)}

/* ---- Chip de icono (cuadrito de color suave) ---- */
.ico{width:38px;height:38px;border-radius:10px;display:grid;place-items:center;flex:0 0 auto}
.ico svg{width:19px;height:19px;stroke-width:2}
.ico--amber{background:var(--amber-bg);color:var(--accent-2)}
.ico--green{background:var(--green-bg);color:var(--green-tx)}
.ico--blue{background:var(--blue-bg);color:var(--blue-tx)}
.ico--purple{background:var(--purple-bg);color:var(--purple-tx)}
.ico--red{background:var(--red-bg);color:var(--red-tx)}

/* ---- Pills de estado ---- */
.pill{display:inline-flex;align-items:center;gap:5px;font:600 11.5px/1 var(--font-ui);
  padding:5px 10px;border-radius:var(--r-full)}
.pill--amber{background:var(--amber-bg);color:var(--amber-tx)}
.pill--green{background:var(--green-bg);color:var(--green-tx)}
.pill--blue{background:var(--blue-bg);color:var(--blue-tx)}
.pill--purple{background:var(--purple-bg);color:var(--purple-tx)}
.pill--gray{background:var(--bg-3);color:var(--text-3)}
.pill--red{background:var(--red-bg);color:var(--red-tx)}

/* ---- Colores de las etiquetas del catálogo ----
   Una etiqueta del catálogo («Oferta», «Angelus») guarda SU color en
   producto_lista.color. Estas clases no pintan nada por su cuenta: solo dejan
   servidas cuatro variables. Viven acá —y no dentro de cada pantalla— para que
   la misma etiqueta se vea igual en la ficha del producto, en la lista y en la
   ventanita del ⋯ donde se crea; cada pantalla decide si el color va de fondo,
   de borde o de puntito.
     --c-sol = el color puro (el puntito)   --c-bg = fondo suave
     --c-tx  = el texto encima de ese fondo --c-bd = el borde  */
.rzc{--c-sol:#9ca3af;--c-bg:var(--bg-3);--c-tx:var(--text-2);--c-bd:var(--border-2)}
.rzc--gris    {--c-sol:#9ca3af;--c-bg:#f3f4f6;--c-tx:#4b5563;--c-bd:#d1d5db}
.rzc--naranja {--c-sol:#f97316;--c-bg:#fff7ed;--c-tx:#c2410c;--c-bd:#fdba74}
.rzc--amarillo{--c-sol:#eab308;--c-bg:#fefce8;--c-tx:#a16207;--c-bd:#fde047}
.rzc--verde   {--c-sol:#10b981;--c-bg:#ecfdf5;--c-tx:#047857;--c-bd:#6ee7b7}
.rzc--azul    {--c-sol:#3b82f6;--c-bg:#eff6ff;--c-tx:#1d4ed8;--c-bd:#93c5fd}
.rzc--morado  {--c-sol:#8b5cf6;--c-bg:#f5f3ff;--c-tx:#6d28d9;--c-bd:#c4b5fd}
.rzc--rojo    {--c-sol:#ef4444;--c-bg:#fef2f2;--c-tx:#b91c1c;--c-bd:#fca5a5}
[data-theme="dark"] .rzc--gris    {--c-bg:rgba(156,163,175,.16);--c-tx:#cbd5e1;--c-bd:rgba(156,163,175,.42)}
[data-theme="dark"] .rzc--naranja {--c-bg:rgba(249,115,22,.16); --c-tx:#fdba74;--c-bd:rgba(249,115,22,.45)}
[data-theme="dark"] .rzc--amarillo{--c-bg:rgba(234,179,8,.16);  --c-tx:#fde047;--c-bd:rgba(234,179,8,.45)}
[data-theme="dark"] .rzc--verde   {--c-bg:rgba(16,185,129,.16); --c-tx:#6ee7b7;--c-bd:rgba(16,185,129,.45)}
[data-theme="dark"] .rzc--azul    {--c-bg:rgba(59,130,246,.16); --c-tx:#93c5fd;--c-bd:rgba(59,130,246,.45)}
[data-theme="dark"] .rzc--morado  {--c-bg:rgba(139,92,246,.18); --c-tx:#c4b5fd;--c-bd:rgba(139,92,246,.45)}
[data-theme="dark"] .rzc--rojo    {--c-bg:rgba(239,68,68,.16);  --c-tx:#fca5a5;--c-bd:rgba(239,68,68,.45)}
/* El puntito del color. Sirve donde el chip no se puede pintar entero —una
   etiqueta APAGADA, una opción de un menú—: sin él, apagadas se ven todas
   iguales y el color deja de servir para reconocerlas. */
.rzc-dot{width:9px;height:9px;flex:0 0 auto;border-radius:50%;background:var(--c-sol);
  display:inline-block;box-shadow:0 0 0 1px rgba(0,0,0,.06) inset}

/* ---- Avatar iniciales ---- */
.av{width:34px;height:34px;border-radius:var(--r-full);display:grid;place-items:center;
  font-size:12px;font-weight:700;color:#fff;background:var(--text-2);flex:0 0 auto}

/* ---- Barra de progreso ---- */
.bar{height:6px;border-radius:var(--r-full);background:var(--bg-3);overflow:hidden}
.bar > span{display:block;height:100%;border-radius:var(--r-full);background:var(--green)}

/* ---- Delta (↑12% vs ayer) ---- */
.delta{font-size:11.5px;font-weight:600}
.delta--up{color:var(--green-tx)} .delta--down{color:var(--red-tx)}

/* ============ APP SHELL (cockpit) ============ */
.app{display:flex;min-height:100vh}
.sidebar{width:236px;flex:0 0 auto;background:linear-gradient(168deg,#232020 0%,#151313 42%,#0A0A0A 100%);
  border-right:1px solid #000;display:flex;flex-direction:column;
  padding:0;position:sticky;top:0;height:100vh;
  overflow:hidden}
.sidebar::-webkit-scrollbar{width:5px}
.sidebar::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:99px}
.sidebar::-webkit-scrollbar-track{background:transparent}
.sb-section{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--text-4);margin:14px 10px 6px}
.sb-link{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:var(--r-sm);
  color:var(--text-2);font-weight:550;font-size:13.5px;transition:var(--ease);margin-bottom:1px}
.sb-link svg{width:18px;height:18px;stroke-width:2;flex:0 0 auto}
.sb-link:hover{background:var(--bg-2);color:var(--text-1)}
.sb-link.active{background:var(--accent-bg);color:var(--accent-2)}
.sb-link{position:relative}
/* Contador rojo de no leídos (Grupo Retoz) */
.sb-badge{margin-left:auto;min-width:19px;height:19px;padding:0 5px;border-radius:10px;
  background:var(--red);color:#fff;font-size:11px;font-weight:750;line-height:19px;text-align:center;
  flex:0 0 auto;box-shadow:0 0 0 2px var(--bg-1);animation:sbBadgePop .55s cubic-bezier(.2,1.4,.4,1)}
@keyframes sbBadgePop{0%{transform:scale(.3);opacity:0}60%{transform:scale(1.18)}100%{transform:scale(1);opacity:1}}
.sb-foot{margin-top:auto;display:flex;align-items:center;gap:10px;padding:10px;
  border-radius:var(--r-md);border:1px solid var(--border)}
.sb-foot small{color:var(--text-3);font-size:11px}

/* ---- Barra lateral plegable a iconos (escritorio) ---- */
/* El aspecto fino del menú (iconos, rótulos, plegado) lo manda shell.js, que inyecta su
   hoja al final del <head>. Aquí queda SOLO el ancho, para que el primer cuadro ya salga
   con la medida correcta: la clase .sb-collapsed la pone el <head> de cada pantalla
   leyendo localStorage, antes de pintar. Sin transición: el ancho solo se anima cuando
   el usuario toca la flecha (shell.js agrega .sb-anim). */
@media(min-width:821px){
  .sb-collapsed .sidebar{width:64px}
}

.main{flex:1;min-width:0;background:var(--bg-2);display:flex;flex-direction:column}
/* La barra de la pantalla se pega debajo de la miga de pan (--rz-ruta-h la mide
   shell.js). Sin miga el valor es 0 y todo queda como antes. */
.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:9px 28px;background:var(--bg-2);position:sticky;top:var(--rz-ruta-h,0px);z-index:20}
.content{padding:6px 28px 36px;display:flex;flex-direction:column;gap:18px}

/* Grids */
.grid{display:grid;gap:16px}
.grid > *{min-width:0}
.grid-4{grid-template-columns:repeat(4,1fr)}
.grid-2-1{grid-template-columns:2fr 1fr}

/* Stat card */
.stat{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-lg);
  padding:16px;box-shadow:var(--sh-sm);transition:var(--ease)}
.stat:hover{box-shadow:var(--sh-md);transform:translateY(-2px)}
.stat-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.stat-label{font-size:12.5px;color:var(--text-3);font-weight:550}
.stat-num{font-size:26px;font-weight:750;letter-spacing:-.02em;line-height:1.1}

/* Tabla */
.tbl{width:100%;min-width:520px;border-collapse:collapse;font-size:13px}
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.tbl th{text-align:left;font-size:11px;font-weight:650;text-transform:uppercase;
  letter-spacing:.05em;color:var(--text-4);padding:10px 14px;border-bottom:1px solid var(--border)}
.tbl td{padding:12px 14px;border-bottom:1px solid var(--border);color:var(--text-2)}
.tbl tr:last-child td{border-bottom:none}
.tbl tr:hover td{background:var(--bg-2)}
.tbl .mono{font-weight:650;color:var(--text-1)}

/* Toggle tema */
.theme-btn{width:32px;height:32px;border-radius:var(--r-md);border:1px solid var(--border);
  background:var(--bg-1);display:grid;place-items:center;color:var(--text-2)}
.theme-btn:hover{background:var(--bg-2);color:var(--text-1)}
.theme-btn svg{width:18px;height:18px}

/* ── EL MARCO DE LOS BOTONES DE ARRIBA ──────────────────────────────────────
   🔔 · 📦 · 🅢 · SH · 👀 · (R) · ☀ los monta cada uno su archivo, y sueltos quedaban de
   distinto tamaño y desparejos al lado del botón naranja. Van todos en esta
   caja (la arma shell.js: rzAgruparAcciones) y acá se igualan: mismo alto,
   mismo radio, un solo borde para el conjunto. */
.rz-acts{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;
  padding:4px 7px;border:1px solid var(--border);border-radius:13px;background:var(--bg-1)}
.rz-acts > *{flex:0 0 auto}
/* Adentro, cada botón pierde su borde: el marco es uno solo. */
.rz-acts .theme-btn,.rz-acts .rzav-b,.rz-acts .rz-stk-b,.rz-acts .rz-shl-b,.rz-acts .rz-gpo-btn{
  width:30px;height:30px;border:0;background:none;box-shadow:none;border-radius:9px}
.rz-acts .theme-btn:hover,.rz-acts .rzav-b:hover,.rz-acts .rz-stk-b:hover,
.rz-acts .rz-shl-b:hover,.rz-acts .rz-gpo-btn:hover{background:var(--bg-2);transform:none}
/* El (R) del Grupo conserva su aro: es la marca, no un icono más. */
.rz-acts .rz-gpo-btn{border:2px solid var(--accent);border-radius:50%}
.rz-acts .rz-gpo-btn img{width:20px;height:20px}
/* Los contadores: más chicos y con un filo del color del marco, para que tres
   números seguidos (59 · 2 · 78) no se monten unos sobre otros. */
.rz-acts .rzav-n,.rz-acts .rz-stk-n,.rz-acts .rz-shl-n,.rz-acts .rz-gpo-badge{
  min-width:17px;height:17px;font-size:10px;padding:0 4px;top:-5px;right:-4px;
  border:2px solid var(--bg-1);box-sizing:border-box}
@media(max-width:560px){
  /* Con la caja ya dentro de la pantalla hay sitio para que sean tocables:
     29 px era una moneda para un dedo. 34 px es lo mínimo cómodo. */
  .rz-acts{gap:4px;padding:3px 5px;border-radius:12px}
  .rz-acts .theme-btn,.rz-acts .rzav-b,.rz-acts .rz-stk-b,.rz-acts .rz-shl-b,
  .rz-acts .rz-gpo-btn{width:34px;height:34px}
  .rz-acts .rz-gpo-btn img{width:23px;height:23px}
}

/* Browser frame (presentación tipo imagen) */
.frame{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-xl);
  box-shadow:var(--sh-lg);overflow:hidden}
.frame-bar{display:flex;align-items:center;gap:8px;padding:11px 16px;border-bottom:1px solid var(--border);background:var(--bg-2)}
.frame-dots{display:flex;gap:6px}
.frame-dots i{width:11px;height:11px;border-radius:50%;display:block}
.frame-url{flex:1;text-align:center;font-size:12px;color:var(--text-4);
  background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-full);padding:5px 14px;max-width:340px;margin:0 auto}

/* Aparición al scroll — SOLO en páginas con clase .anim (web pública).
   Sin .anim el contenido es visible siempre (jamás en blanco). */
.anim .reveal{opacity:0;transform:translateY(20px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1)}
.anim .reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.anim .reveal{opacity:1;transform:none}}

/* Responsive */
@media(max-width:1080px){.grid-4{grid-template-columns:repeat(2,1fr)}.grid-2-1{grid-template-columns:1fr}}
@media(max-width:820px){
  .sidebar{position:fixed;left:-260px;z-index:60;transition:left .25s;box-shadow:var(--sh-lg)}
  .sidebar.open{left:0}
  .topbar,.content{padding-left:18px;padding-right:18px}
}

/* Telón detrás del menú lateral (celular). Antes el menú se abría encima de la
   pantalla iluminada: se veía "pegado" y, peor, se podía tocar por error un
   botón de atrás. Ahora el fondo se oscurece y tocarlo cierra el menú.
   Lo enciende y apaga shell.js mirando la clase .open del menú. */
.rz-scrim{position:fixed;inset:0;background:rgba(10,10,10,.5);z-index:55;
  opacity:0;visibility:hidden;transition:opacity .22s ease,visibility .22s;
  -webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}
.rz-scrim.on{opacity:1;visibility:visible}
@media(min-width:821px){.rz-scrim{display:none}}
@media(max-width:820px){body.rz-menu-abierto{overflow:hidden}}
@media(max-width:560px){
  .grid-4{grid-template-columns:1fr}
  .topbar{padding-left:16px;padding-right:16px;gap:10px}
  .topbar h1{font-size:18px}
  .topbar .btn-txt{display:none}
  .topbar .btn--primary,.topbar .btn--ghost{padding:10px 12px}
}

/* ══════════════════════════════════════════════════════════════════════════
   LA BARRA DE ARRIBA EN EL CELULAR — que NADA se salga ni se aplaste
   --------------------------------------------------------------------------
   Antes cada pantalla resolvía esto por su cuenta (o no lo resolvía): la barra
   era UNA sola fila y, como el título y los botones no caben en 390 px, lo que
   sobraba se iba fuera de la pantalla. Y como `html` recorta lo que se sale
   (overflow-x:clip), esos botones no quedaban "para el costado": desaparecían.
   Se comió la campanita, la 🅢 de Shopify, el SH de Shalom y hasta el ☰ (que
   se aplastaba a 6 px de ancho porque nadie le prohibía encogerse).

   Ahora la barra tiene un ORDEN fijo, igual en todas las pantallas:
     fila 1 ->  [☰]  Título ……………………………………  [🔔 🅢 SH (R) ☀]
     fila 2 ->  [ buscador / pestañas / botones de la pantalla ]
   Las clases (.rz-tb-izq, .rz-tb-mas, .rz-tb-fila) las reparte shell.js
   (rzOrdenarTopbar), y la caja de iconos la muda a la fila 1. Se usa `.app`
   delante para ganarle a los <style> de cada pantalla, que cargan después.
   ══════════════════════════════════════════════════════════════════════════ */
@media(max-width:820px){
  .app .topbar{flex-wrap:wrap;row-gap:9px;align-items:center}
  .app .topbar > *{min-width:0;max-width:100%}

  /* El ☰ es un objetivo de dedo: no se encoge nunca. */
  .app .topbar .menu-btn{flex:0 0 auto;width:40px;height:40px}

  /* Fila 1 — izquierda: ☰ + título. El título se recorta con "…" si es largo.
     `flex:1 1 0` (y no `auto`) es la clave: con base 0 el bloque NO exige el
     ancho de su texto, así que la caja de iconos se queda en la MISMA fila y el
     título cede lo que haga falta. Con `auto` la barra se partía en tres filas
     por un título largo como «Configuración». */
  /* `overflow:clip` y NO `hidden`: con `hidden` la caja se vuelve deslizable por
     dentro y el navegador la corría sola al enfocar un botón — en WhatsApp,
     abrir el selector de cuentas empujaba el ☰ FUERA de la pantalla. `clip`
     recorta igual pero no se puede correr. (`hidden` queda de repuesto para
     navegadores viejos que no entiendan `clip`.) */
  .app .topbar > .rz-tb-izq{order:1;flex:1 1 0;min-width:0;overflow:hidden;overflow:clip}
  .app .topbar > .rz-tb-izq > *{min-width:0}
  .app .topbar > .rz-tb-izq h1,.app .topbar > .rz-tb-izq .page-title{
    min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* EL TÍTULO DE LA PANTALLA EN EL CELULAR.
     Se midió: en 360 px la caja de iconos ocupa 234, el ☰ 40 y los espacios 22.
     Al <h1> le quedaban 32 px: no cabe, y forzarlo partía la barra en tres
     filas. Así que el nombre de la pantalla lo dice la línea de ubicación de
     arriba («Inicio › Órdenes»), que shell.js pinta en TODAS las pantallas y
     acá se agranda para que se lea como un título. Antes esto lo hacía cada
     pantalla por su cuenta y tres se habían quedado sin la regla (Compras,
     Armar y Proveedores), que por eso salían con la barra de tres filas. */
  .app .main .topbar .page-title{display:none}

  /* Fila 1 — derecha: la caja de iconos, SIEMPRE pegada al borde y adentro. */
  .app .topbar > .rz-acts{order:2;flex:0 0 auto;margin-left:auto}

  /* Fila 2 en adelante — buscador, pestañas y botones de la pantalla. */
  .app .topbar > .rz-tb-mas{order:3;flex:1 1 100%;min-width:0;margin-left:0}
  /* Si ese bloque ya era una fila de botones, se le deja envolver: los botones
     bajan de renglón en vez de salirse. Nada de overflow oculto acá, que los
     menús desplegables (Descargar, ⋯) cuelgan de estos botones y se cortarían. */
  .app .topbar > .rz-tb-fila{display:flex;align-items:center;flex-wrap:wrap;
    row-gap:8px;justify-content:flex-start;overflow:visible}
  .app .topbar > .rz-tb-fila > *{flex:0 0 auto;max-width:100%}
  /* Ahora que la fila de botones tiene el ancho entero, el texto SÍ entra: un
     botón naranja con solo un «+» no dice qué hace. (La ficha de la orden se
     queda como está: tiene su propia lógica que va compactando los rótulos.) */
  .app .topbar > .rz-tb-fila:not(.actbar) .btn-txt{display:inline}
}

/* Pantallas angostas de verdad (≤400 px): el título cede primero. */
@media(max-width:400px){
  .app .topbar > .rz-tb-izq h1,.app .topbar > .rz-tb-izq .page-title{font-size:16.5px}
}

/* Nada, en ninguna pantalla, puede pintar fuera del ancho del celular.
   (Es el cinturón de seguridad: si mañana alguien mete una tabla ancha o un
   texto sin cortes, empuja el scroll horizontal en vez de tapar la pantalla.) */
@media(max-width:820px){
  .app .content > *{max-width:100%}
}
