/* gav-app.css — GAVIONES · FASE 6 · CALCADO DE GAVCONTROL
   spec: specs/2026-09-03-gaviones-fase6-calcado.md, sección 2.2

   El dueño, literal: «que no noten el cambio». A diferencia del Calculador (fase 4, que se
   REPINTÓ con los tokens de Cargas), aquí se hace lo contrario a propósito: los colores, la
   tipografía y las medidas de GavControl se copian TAL CUAL — son su identidad, la nave y la
   oficina llevan meses viéndolos así. Por eso viven en un fichero APARTE que test-diseno.js no
   vigila (mira solo app.js/app.css): ni un hex de aquí cuenta para el trinquete de colores, y
   ni un hex de GavControl se cuela en app.js/app.css (regla dura del encargo).

   TODO bajo el ámbito .gvx (mismo truco que .gvc-scope del Calculador, fase 4): las vistas del
   mundo Gaviones que se trasplantan llevan class="gvx" en su raíz, así que cada seletor de aquí
   es ".gvx .algo" — nunca ".algo" a secas — y no le pisa la pinta a ninguna pantalla de Cargas
   que por casualidad use el mismo nombre de clase (.card, .btn, .tbl…). Las variables --* de
   abajo también viven DENTRO de .gvx (no en :root): fuera de una vista del mundo Gaviones, la
   app no sabe que existen. */

/* Colores de PRODUCTO de los gaviones — gav_fichas.color («GRIS», «ROJO», «FORNA», «BLANCO»…),
   NO un estado (27-sep-2026, spec 2026-09-27-gaviones-muelle-de-carga.md). Viven en :root, no
   dentro de .gvx: el muelle de carga (public/js/muelle.js, público/css/app.css) los pinta FUERA
   del mundo trasplantado de GavControl — en las piezas de la tarjeta, en el camión de lado y en
   el plano del modo carga. Un color de ficha que no está aquí cae al neutro de la casa
   (--c-neu-bg): las unidades no se inventan, y un color tampoco. */
:root{
  --gv-gris:#8C939C; --gv-rojo:#B4533E; --gv-forna:#C9A46A; --gv-blanco:#E8E6DF;
  --gv-borde:rgba(0,0,0,.28);
}
[data-theme="dark"]{
  --gv-gris:#7d848d; --gv-rojo:#a24b38; --gv-forna:#b8955f; --gv-blanco:#cfcdc6;
  --gv-borde:rgba(0,0,0,.45);
}

.gvx {
  --bg:#f0f2f5; --surface:#fff; --surface2:#f8f9fb; --surface3:#f0f2f5;
  --border:rgba(0,0,0,0.08); --border2:rgba(0,0,0,0.14);
  --text:#1a1a2e; --text2:#5b6472; --text3:#9ca3af;   /* text2 oscurecido un punto el 20-sep: con #6b7280 el gris secundario daba 4,29 sobre --surface2 y no llegaba al mínimo */
  --blue:#1d6fa4; --blue-l:#e8f3fb; --blue-d:#0d4f7a;
  --green:#2d7a3a; --green-l:#e6f5ea;
  --amber:#8a5200; --amber-l:#fff3e0;
  --red:#b91c1c; --red-l:#fef2f2;
  --purple:#5b21b6; --purple-l:#ede9fe;
  --steel:#334155; --steel-l:#f1f5f9;
  /* 20-sep-2026 · el mismo color hacía dos trabajos distintos: RELLENO con letra blanca encima
     (botones, cabecera del modal, banda de contadores) y TINTA sobre un fondo suave (chapas,
     enlaces). En claro coinciden y por eso nunca se notó; al hacer el tema oscuro dejan de
     coincidir — la tinta hay que aclararla para que se lea, y el relleno NO, o la letra blanca
     se queda sin fondo donde apoyarse. Estos son los rellenos; valen lo mismo que hoy. */
  --gv-azul-btn:#1d6fa4; --gv-verde-btn:#2d7a3a; --gv-ambar-btn:#8a5200; --gv-rojo-btn:#b91c1c;
  --gv-pizarra-bg:#334155; --gv-banda-bg:#0d4f7a;
  /* Las cinco fases de producción vivían a mano en dos sitios (el conmutador de Fábrica, aquí
     abajo, y la lista de secciones del Informe, en gav-app.js): un color, un sitio. */
  --gv-montaje:#3b82f6; --gv-premontado:#16a34a; --gv-vibrado:#ca8a04;
  --gv-carado:#ea580c; --gv-cortado:#7c3aed;
  /* Despiece visual (15-sep-2026, spec 2026-09-15-gaviones-despiece-visual.md, 3.2, regla b):
     colores del motor trasplantado (gav-despiece.js) — iban escritos a mano dentro de cada
     <line>/<text>/<rect> del SVG; viven aquí para que un cambio de tono no obligue a tocar el
     JS. Los valores son los del original (lib/drawing.ts del dueño); donde el original repetía
     el MISMO concepto con dos tonos casi iguales en vistas distintas (el diafragma, los avisos,
     las rejillas de las miniaturas de la ficha técnica) se deja un tono único para ese concepto
     — la diferencia es de un par de valores de azul/naranja que nadie nota, y así el color de
     verdad vive en un solo sitio. El estado de stock de cada pieza (D6 de la spec) NO usa estos
     tokens: pinta con los --c-ok-bg/--c-esp-bg/--c-neu-bg de siempre (los mismos de toda Cargas,
     ya visibles aquí porque .gvx no los redefine). */
  --gvp-desp-linea:#778692; --gvp-desp-panel:#667986; --gvp-desp-diafragma:#2883ba;
  --gvp-desp-cota:#1377bf; --gvp-desp-activo:#0569ad; --gvp-desp-activo-bg:#e3f3ff;
  --gvp-desp-caja:#cbd6de; --gvp-desp-texto:#092b6d; --gvp-desp-marco:#73a4d0;
  --gvp-desp-marco-bg:#d5e8fa; --gvp-desp-aviso:#aa571c;
  --gvp-desp-tabla-linea:#adc9e0; --gvp-desp-tabla-sel:#dcefff; --gvp-desp-tabla-alt:#f0f6fc;
  --gvp-desp-mini-linea:#54616a; --gvp-desp-mini-marco:#61788b; --gvp-desp-mini-bg:#eff5f8;
  --radius:10px; --radius-sm:6px;
  font-family:'DM Sans',sans-serif; color:var(--text); font-size:14px;
}
/* ── El tema oscuro (20-sep-2026; spec 2026-09-20-gaviones-reglas-de-la-casa.md) ───────────
   Hasta hoy este fichero solo tenía valores de tema claro y no había ningún bloque oscuro: al
   cambiar de tema, el armazón de la app se oscurecía y el interior de Gaviones se quedaba con
   tinta oscura sobre fondo oscuro. Medido antes de arreglarlo: 46 contrastes flojos en
   Despieces, el peor 1,09 — los rótulos de los filtros y los nombres de los gaviones NO se
   leían, y los desplegables se quedaban blancos.
   Las tonalidades son las suyas, no las de Cargas: su azul sigue siendo su azul, aclarado lo
   justo para leerse en oscuro. Los rellenos (--gv-*-btn) NO se aclaran, por lo de arriba. */
[data-theme="dark"] .gvx{
  --bg:#0c1322; --surface:#141d30; --surface2:#1b2740; --surface3:#22304c;
  --border:rgba(255,255,255,0.10); --border2:rgba(255,255,255,0.20);
  --text:#e6ecf6; --text2:#b2bed0; --text3:#8d9ab4;
  --blue:#5aa5dc; --blue-l:#15283c; --blue-d:#93c8ee;
  --green:#6cb377; --green-l:#17291b;
  --amber:#d6a45c; --amber-l:#2c2414;
  --red:#e58079; --red-l:#321a1c;
  --purple:#b49df7; --purple-l:#241a3d;
  --steel:#a3b3c8; --steel-l:#1b2740;
  /* Los rellenos NO cambian de tema: valen lo MISMO que en claro. Es lo más fiel a «mismos
     colores» y ademas es lo que funciona — aclararlos deja a la letra blanca sin fondo donde
     apoyarse (medido: con un azul aclarado a #2b7fb8 el boton se quedaba en 4,35). */
  --gv-azul-btn:#1d6fa4; --gv-verde-btn:#2d7a3a; --gv-ambar-btn:#8a5200; --gv-rojo-btn:#b91c1c;
  --gv-pizarra-bg:#26334d; --gv-banda-bg:#123a5c;
  /* el dibujo del despiece vive sobre la superficie, así que también cambia de tema */
  --gvp-desp-linea:#93a3b0; --gvp-desp-panel:#8497a4; --gvp-desp-diafragma:#4ea3d8;
  --gvp-desp-cota:#4fa6e0; --gvp-desp-activo:#5cb5f0; --gvp-desp-activo-bg:#12314a;
  --gvp-desp-caja:#3a4a5a; --gvp-desp-texto:#bcd0f0; --gvp-desp-marco:#5f8bb5;
  --gvp-desp-marco-bg:#182c40; --gvp-desp-aviso:#d08a4e;
  --gvp-desp-tabla-linea:#3d556d; --gvp-desp-tabla-sel:#1b3350; --gvp-desp-tabla-alt:#172338;
  --gvp-desp-mini-linea:#8d9aa4; --gvp-desp-mini-marco:#93a8bb; --gvp-desp-mini-bg:#1a2536;
}
/* el gavión BLANCO se queda blanco también en oscuro: no es decoración, es el color de la piedra */

.gvx .view{display:none}
.gvx.view.active{display:block}

/* ── Estructura genérica: contenedor, tarjetas, cabeceras, grids, KPI ── */
.gvx .container{max-width:1280px;margin:0 auto;padding:16px 20px}
.gvx .card{background:var(--surface);border-radius:var(--radius);border:1px solid var(--border);overflow:hidden;margin-bottom:12px}
.gvx .card-hdr{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px}
.gvx .card-title{font-size:var(--fs-xs);font-weight:500;color:var(--text2);text-transform:uppercase;letter-spacing:.05em;display:flex;align-items:center;gap:5px}
.gvx .card-body{padding:14px 16px}
.gvx .grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.gvx .grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.gvx .grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.gvx .kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px}
.gvx .kpi-label{font-size:var(--fs-xs);font-weight:500;text-transform:uppercase;letter-spacing:.06em;color:var(--text2);margin-bottom:6px}
.gvx .kpi-value{font-size:26px;font-weight:300;font-family:'DM Mono',monospace;line-height:1}
.gvx .kpi-sub{font-size:var(--fs-xs);color:var(--text2);margin-top:4px}
@media(max-width:700px){.gvx .grid2,.gvx .grid3,.gvx .grid4{grid-template-columns:1fr}.gvx .frow,.gvx .frow3{grid-template-columns:1fr}}

/* ── Banda de contadores del Panel (GavControl la llama .statrow; aquí .gv-statrow — Cargas
   tuvo su PROPIA tira de KPIs con ese nombre hace tiempo y P1, más arriba en esta batería,
   vigila que no vuelva; esta es otra cosa, así que no comparte nombre) — en GavControl vive
   FUERA de cualquier pestaña, pegada a la topbar entera; aquí no hay sitio para eso (la topbar
   es de Cargas) así que se pinta dentro de la propia vista del Panel, arriba del todo. ── */
.gvx .gv-statrow{background:var(--gv-banda-bg);padding:7px 20px;display:flex;gap:20px;align-items:center;flex-wrap:wrap;border-radius:var(--radius);margin-bottom:14px}
.gvx .st{display:flex;align-items:baseline;gap:4px}
.gvx .st-v{font-size:15px;font-weight:500;color:#fff;font-family:'DM Mono',monospace}
.gvx .st-l{font-size:var(--fs-xs);color:#93c5fd}
.gvx .st-sep{width:1px;height:16px;background:rgba(255,255,255,.2)}

/* ── Tabla genérica ── */
.gvx .tbl{width:100%;border-collapse:collapse;font-size:13px}
.gvx .tbl th{padding:9px 12px;text-align:left;font-size:var(--fs-xs);font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--text2);border-bottom:1px solid var(--border);background:var(--surface2);white-space:nowrap}
.gvx .tbl td{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:middle}
.gvx .tbl tr:last-child td{border-bottom:none}
.gvx .tbl tr:hover td{background:var(--surface2)}
.gvx .tbl th.r,.gvx .tbl td.r{text-align:right}
.gvx .tbl th.c,.gvx .tbl td.c{text-align:center}
.gvx .tbl th.th-sort{cursor:pointer;user-select:none;transition:color .1s,background .1s}
.gvx .tbl th.th-sort:hover{color:var(--text);background:var(--border)}
.gvx .tbl th.th-sort.active{color:var(--blue)}

/* ── Chapas, botones, campos (vocabulario de GavControl: badge/btn/field, no el de Cargas) ── */
.gvx .badge{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:10px;font-size:var(--fs-xs);font-weight:500;white-space:nowrap}
.gvx .b-blue{background:var(--blue-l);color:var(--blue-d)}
.gvx .b-green{background:var(--green-l);color:var(--green)}
.gvx .b-amber{background:var(--amber-l);color:var(--amber)}
.gvx .b-red{background:var(--red-l);color:var(--red)}
.gvx .b-purple{background:var(--purple-l);color:var(--purple)}
.gvx .b-steel{background:var(--steel-l);color:var(--steel)}
.gvx .b-gray{background:var(--surface3);color:var(--text2)}
.gvx .btn{border:none;border-radius:var(--radius-sm);padding:7px 14px;font-size:var(--fs-xs);font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:5px;font-family:'DM Sans',sans-serif;transition:all .12s}
.gvx .btn-primary{background:var(--gv-azul-btn);color:#fff}.gvx .btn-primary:hover{filter:brightness(.9)}
.gvx .btn-green{background:var(--gv-verde-btn);color:#fff}.gvx .btn-green:hover{opacity:.88}
.gvx .btn-amber{background:var(--gv-ambar-btn);color:#fff}.gvx .btn-amber:hover{opacity:.88}
.gvx .btn-outline{background:none;border:1px solid var(--border2);color:var(--text2)}.gvx .btn-outline:hover{background:var(--surface2);color:var(--text)}
.gvx .btn-sm{padding:4px 9px;font-size:var(--fs-xs)}
.gvx .btn-danger{background:var(--gv-rojo-btn);color:#fff}.gvx .btn-danger:hover{opacity:.88}
.gvx .btn-icon{background:none;border:none;cursor:pointer;padding:4px 6px;border-radius:4px;font-size:13px;color:var(--text2)}
.gvx .btn-icon:hover{background:var(--surface2);color:var(--text)}
.gvx .btn-icon.danger:hover{background:var(--red-l);color:var(--red)}
.gvx .field{display:flex;flex-direction:column;gap:3px;margin-bottom:10px}
.gvx .field label{font-size:var(--fs-xs);font-weight:500;color:var(--text2);text-transform:uppercase;letter-spacing:.04em}
.gvx .field input,.gvx .field select,.gvx .field textarea{font-size:13px;width:100%;padding:7px 10px;border:1px solid var(--border2);border-radius:var(--radius-sm);background:var(--surface2);color:var(--text);font-family:'DM Sans',sans-serif;outline:none}
.gvx .field input:focus,.gvx .field select:focus{border-color:var(--blue)}
.gvx .field textarea{min-height:60px;resize:vertical}
.gvx .frow{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.gvx .stock-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:8px;font-size:var(--fs-xs);font-weight:500;font-family:'DM Mono',monospace}
.gvx .sc-ok{background:var(--green-l);color:var(--green)}
.gvx .sc-warn{background:var(--amber-l);color:var(--amber)}
.gvx .sc-bad{background:var(--red-l);color:var(--red)}
.gvx .empty{text-align:center;padding:40px 20px;color:var(--text2)}
.gvx .empty i{font-size:38px;display:block;margin-bottom:10px;opacity:.25}
.gvx .dim{color:var(--text2);font-size:var(--fs-xs)}
.gvx .mono{font-family:'DM Mono',monospace}
.gvx .info-box{background:var(--blue-l);border:1px solid var(--blue);border-radius:var(--radius-sm);padding:10px 14px;font-size:var(--fs-xs);color:var(--blue-d);margin-bottom:12px;display:flex;align-items:flex-start;gap:8px}
.gvx .sort-btns{display:flex;gap:4px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.gvx .sort-btn{background:none;border:1px solid var(--border2);border-radius:20px;padding:3px 10px;font-size:var(--fs-xs);cursor:pointer;color:var(--text2);font-family:'DM Sans',sans-serif;display:flex;align-items:center;gap:3px;transition:all .12s}
.gvx .sort-btn:hover{border-color:var(--blue);color:var(--blue)}
.gvx .sort-btn.active{background:var(--blue-l);border-color:var(--blue);color:var(--blue-d);font-weight:500}

/* ── Modal genérico (solo lo usa la ficha del Catálogo/Stock: verProductoStock) — mismos ids
   de siempre de GavControl (overlay/modal-title/modal-body/modal-foot) chocan con el modal de
   Cargas (index.html los usa para sus propios pedidos/productos), así que aquí viven prefijados
   gvx-* (spec 2.2, «los ids que choquen se prefijan»); la clase SÍ es la de GavControl tal
   cual, ya escapada bajo .gvx. */
/* .overlay va SIEMPRE junto con .gvx en el MISMO elemento (class="gvx overlay") — selector
   COMPUESTO, sin espacio: ".gvx .overlay" (descendiente) no lo vería nunca. */
.gvx.overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.4);align-items:flex-start;justify-content:center;z-index:10097;padding-top:50px;overflow-y:auto}
.gvx.overlay.open{display:flex}
.gvx .modal{background:var(--surface);border-radius:var(--radius);border:1px solid var(--border);width:560px;max-width:95vw;overflow:hidden;margin-bottom:30px}
.gvx .modal.wide{width:760px}
.gvx .modal-hdr{background:var(--gv-pizarra-bg);padding:12px 16px;display:flex;align-items:center;justify-content:space-between}
.gvx .modal-title{font-size:13px;font-weight:500;color:#fff;display:flex;align-items:center;gap:6px}
.gvx .modal-x{background:none;border:none;color:#94a3b8;cursor:pointer;font-size:16px;padding:2px}
.gvx .modal-x:hover{color:#fff}
.gvx .modal-body{padding:16px;max-height:72vh;overflow-y:auto}
.gvx .modal-foot{padding:12px 16px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;background:var(--surface2)}

/* ── Conmutador Montaje/Vibrado/Carado (fabrica-toggle) ── */
.gvx .fabrica-toggle{display:flex;gap:10px;max-width:760px;margin:0 auto 16px;padding:0 4px}
.gvx .ft-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:16px;font-size:16px;font-weight:700;font-family:inherit;color:var(--text2);background:var(--surface);border:2px solid var(--border);border-radius:14px;cursor:pointer;transition:all .12s}
.gvx .ft-btn:hover{border-color:var(--border2);color:var(--text)}
.gvx .ft-btn.active{background:#facc15;color:#1a1a1a;border-color:#eab308}
.gvx .ft-btn.ft-carado.active{background:#f97316;color:#fff;border-color:var(--gv-carado)}
.gvx .ft-btn.ft-montaje.active{background:var(--gv-montaje);color:#fff;border-color:#2563eb}
/* Corte (15-sep-2026, spec …-gaviones-corte-en-fabrica.md): cuarto botón, primero del
   conmutador — morado para no repetir ninguno de los otros tres (azul/amarillo/naranja). */
.gvx .ft-btn.ft-corte.active{background:var(--gv-cortado);color:#fff;border-color:#6d28d9}
.gvx .ft-badge{background:rgba(0,0,0,.18);border-radius:999px;padding:2px 10px;font-size:14px;min-width:24px;text-align:center;color:var(--text)}
.gvx .ft-btn.active .ft-badge{color:inherit}   /* activo: el color del propio botón (blanco o negro), que ahí sí contrasta */

/* ── Montaje: asistente de tres pasos ── */
.gvx .mesa-wrap{max-width:1000px;margin:0 auto;padding:18px}
.gvx .mesa-wrap.full{max-width:none}
.gvx .mesa-grid.arts{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}
.gvx .mesa-bc{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:18px;font-size:15px;font-weight:600;color:var(--text2)}
.gvx .mesa-bc .crumb{cursor:pointer;color:var(--blue)}
.gvx .mesa-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
.gvx .mesa-grid.cols1{grid-template-columns:1fr}
.gvx .mesa-grid.cols3{grid-template-columns:repeat(3,1fr)}
.gvx .mesa-grid.cols4{grid-template-columns:repeat(4,1fr)}
.gvx .mesa-btn{border:none;border-radius:16px;padding:34px 18px;font-size:24px;font-weight:800;letter-spacing:.02em;cursor:pointer;color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:120px;text-align:center;line-height:1.15;box-shadow:0 2px 8px rgba(0,0,0,.12);transition:transform .08s,filter .12s}
.gvx .mesa-btn:hover{filter:brightness(1.06)}
.gvx .mesa-btn:active{transform:scale(.97)}
.gvx .mesa-btn i{font-size:40px}
.gvx .mesa-btn small{font-size:14px;font-weight:700}
.gvx .mesa-btn.b-nuevo{background:linear-gradient(135deg,#2563eb,#1d4ed8)}
.gvx .mesa-btn.b-repetir{background:linear-gradient(135deg,#f59e0b,#d97706)}
.gvx .mesa-btn.b-cat{background:linear-gradient(135deg,#475569,#334155);font-size:20px;min-height:110px}
.gvx .mesa-btn.cat-rojo{background:linear-gradient(135deg,#ef4444,#b91c1c)}
.gvx .mesa-btn.cat-gris{background:linear-gradient(135deg,#9ca3af,#4b5563)}
.gvx .mesa-btn.cat-blanco{background:#ffffff;color:#1f2937;border:2px solid #cbd5e1;box-shadow:0 2px 8px rgba(0,0,0,.1)}
.gvx .mesa-btn.cat-forna{background:linear-gradient(135deg,#bb9a6a,#8a6d3f)}
/* «Sin clasificar» (2.2, no existe en GavControl): mismo estilo de tarjeta que el resto del
   asistente, superficie neutra con borde a rayas — como el drawer de la fase 2 al que sustituye. */
.gvx .mesa-btn.b-drawer{background:var(--surface);color:var(--text2);border:2px dashed var(--border2);box-shadow:none;min-height:76px;font-size:16px}
.gvx .mesa-btn.b-drawer:hover{border-color:var(--text3);color:var(--text)}
.gvx .mesa-btn.b-ancho{background:linear-gradient(135deg,#0891b2,#0e7490);font-size:30px}
.gvx .mesa-btn.b-art{background:var(--surface);color:var(--text);border:2px solid var(--border2);box-shadow:none;font-size:18px;align-items:flex-start;text-align:left;min-height:96px;padding:20px}
.gvx .mesa-btn.b-art:hover{border-color:var(--blue);filter:none;background:var(--surface2)}
.gvx .mesa-btn.b-art .desc{font-size:19px;font-weight:700;color:var(--text);line-height:1.2}
.gvx .mesa-btn.b-art .ref{font-family:monospace;font-weight:600;font-size:13px;color:var(--text2)}
.gvx .mesa-back{background:var(--surface2);border:1px solid var(--border2);color:var(--text);border-radius:12px;padding:12px 20px;font-size:16px;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;gap:8px;margin-bottom:14px}
.gvx .mesa-empty{text-align:center;padding:40px;color:var(--text2);font-size:16px}
/* B3 (spec 2026-09-29-gaviones-informe-diario-y-borrados.md, D2): papelera del corte — AL LADO
   del mesa-btn (no encima, como carado-del: aquí la fila es ancha y de texto, y una papelera
   superpuesta taparía la descripción). 44×44 fijo (toque de guante, la tablet de Corte es
   siempre táctil, no solo bajo pointer:coarse como el resto de botones pequeños de más abajo). */
.gvx .corte-fila{display:flex;align-items:stretch;gap:8px}
.gvx .corte-fila .mesa-btn{flex:1;min-width:0}
.gvx .corte-del{flex:0 0 44px;width:44px;min-height:44px;border-radius:12px;border:1px solid var(--border2);background:var(--surface2);color:#dc2626;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px;opacity:.6;transition:opacity .12s,background .12s}
.gvx .corte-del:hover{opacity:1;background:var(--red-l);border-color:var(--red)}
@media(max-width:640px){.gvx .mesa-grid.cols4{grid-template-columns:repeat(2,1fr)}.gvx .mesa-grid.cols3{grid-template-columns:repeat(2,1fr)}.gvx .mesa-btn{font-size:20px;padding:26px 14px}}

/* ── Vibrado / Carado: rejilla de tarjetas con el dibujo del gavión ── */
.gvx .carado-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:16px;padding:6px 2px}
.gvx .carado-card{position:relative;background:var(--surface);border:2px solid var(--border2);border-radius:16px;padding:18px 16px 14px;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:8px;transition:transform .12s,box-shadow .12s,border-color .12s;text-align:center;font-family:inherit}
.gvx .carado-card:hover{border-color:#ea580c;box-shadow:0 8px 22px rgba(234,88,12,.18);transform:translateY(-3px)}
.gvx .carado-card:active{transform:translateY(-1px)}
.gvx .carado-del{position:absolute;top:8px;left:8px;width:32px;height:32px;border-radius:9px;border:1px solid var(--border2);background:var(--surface2);color:#dc2626;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:15px;z-index:2;opacity:.5;transition:opacity .12s,background .12s}
.gvx .carado-del:hover{opacity:1;background:var(--red-l);border-color:var(--red)}
/* «Devolver a montaje» (decisión 2 de la fase 2, recuperada en la fase 6): mismo hueco que la
   papelera, un paso a la derecha (8+32+6=46) y en azul en vez de rojo — no es un borrado. */
.gvx .carado-back{position:absolute;top:8px;left:46px;width:32px;height:32px;border-radius:9px;border:1px solid var(--border2);background:var(--surface2);color:var(--blue);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:15px;z-index:2;opacity:.5;transition:opacity .12s,background .12s}
.gvx .carado-back:hover{opacity:1;background:var(--blue-l);border-color:var(--blue)}
.gvx .carado-draw{width:100%;display:flex;justify-content:center;align-items:flex-end;min-height:158px}
.gvx .carado-draw svg{width:auto;height:158px;max-width:100%}
.gvx .carado-desc{font-size:14px;font-weight:700;color:var(--text);line-height:1.25}
.gvx .carado-meta{font-size:var(--fs-xs);color:var(--text2);margin-top:2px}
.gvx .carado-meta .carado-ref{font-family:monospace;font-weight:600;color:var(--text)}
.gvx .carado-count{margin-top:4px;font-size:30px;font-weight:900;color:#ea580c;font-family:monospace;line-height:1;display:flex;flex-direction:column;align-items:center}
.gvx .carado-count small{font-size:var(--fs-xs);font-weight:600;color:var(--text2);letter-spacing:.04em;text-transform:uppercase;margin-top:3px;font-family:inherit}
.gvx .carado-head{font-size:13px;font-weight:600;color:var(--text2);padding:4px 4px 12px;display:flex;align-items:center;gap:8px}

/* ── Teclado numérico (kp-, overlay ESTÁTICO #gvx-kp-overlay — id prefijado, spec 2.2). El
   overlay lleva class="gvx" en el MISMO div que el id (no es descendiente de otro .gvx): por
   eso el selector es compuesto, ".gvx#id", sin espacio. ── */
.gvx#gvx-kp-overlay{position:fixed;inset:0;background:rgba(15,23,42,.55);display:none;align-items:center;justify-content:center;z-index:10099;padding:16px}
.gvx#gvx-kp-overlay.open{display:flex}
/* A1 (spec 2026-09-25-gaviones-fluido-reparto-vivo.md): la tarjeta mide como mucho el alto del
   velo y, si aun así no cabe, hace scroll con los botones de abajo pegados — antes no tenía altura
   máxima y el velo la centraba: con dos mallas por cortar medía 757 px en 700 y «Montar» quedaba
   fuera, sin forma de llegar. Si no cabe ni así, gav-app.js la compacta (.kp-compacto, abajo). */
.gvx .kp-card{background:var(--surface);border-radius:20px;padding:22px 22px 16px;width:100%;max-width:380px;box-shadow:0 20px 50px rgba(0,0,0,.3);max-height:100%;display:flex;flex-direction:column;overflow-y:auto;overscroll-behavior:contain}
.gvx .kp-card>*{flex-shrink:0}
.gvx .kp-prod{text-align:center;margin-bottom:8px}
.gvx .kp-prod .ref{font-family:monospace;font-weight:800;font-size:22px;color:var(--blue)}
.gvx .kp-prod .desc{font-size:13px;color:var(--text2)}
.gvx .kp-prod .max{font-size:13px;color:var(--amber);font-weight:700;margin-top:2px}
.gvx .kp-display{font-family:monospace;font-size:46px;font-weight:800;text-align:center;background:var(--surface2);border-radius:14px;padding:14px;margin:12px 0;color:var(--text);min-height:74px}
.gvx .kp-keys{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.gvx .kp-key{border:none;background:var(--surface2);border:1px solid var(--border2);border-radius:14px;font-size:28px;font-weight:700;padding:18px 0;cursor:pointer;color:var(--text);transition:background .1s}
.gvx .kp-key:active{background:var(--blue-l)}
.gvx .kp-key.kp-clear{color:var(--red)}
.gvx .kp-actions{display:grid;grid-template-columns:1fr 1.6fr;gap:10px;margin-top:12px;position:sticky;bottom:0;background:var(--surface);padding-top:2px}
/* A2: la franja del aviso de corte tiene ALTO FIJO (tres renglones) y su propio scroll: diga lo
   que diga, la tarjeta mide lo mismo y las teclas no se mueven bajo el dedo. Es lo primero que
   encoge si falta sitio. Mientras llega el aviso nuevo, el viejo se queda atenuado. */
.gvx .kp-card .kp-hint{flex:0 1 auto;height:4.6em;min-height:0;overflow-y:auto;font-size:var(--fs-xs);font-weight:600;line-height:1.35;text-align:center;margin:-4px 0 8px;transition:opacity .15s}
.gvx .kp-hint.kp-hint-viejo{opacity:.45}
.gvx .kp-hint-fila{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gvx .kp-preview{text-align:center;margin:-6px 0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* R5 (spec 2026-09-26-gaviones-reservar-y-preparar-por-unidades.md): «¿Para qué pedido?» bajo la
   cifra de Premontado/Carado. ALTO FIJO como el aviso de corte (A2): llega la lista y no se mueve
   nada. El desplegable, de 52 px: se toca con guantes. */
.gvx .kp-dest{margin:-4px 0 10px;display:flex;flex-direction:column;gap:4px}
.gvx .kp-dest-tit{font-size:13px;font-weight:700;color:var(--text2);text-align:center}
.gvx .kp-dest-sel{width:100%;min-height:var(--tap-planta,52px);font-size:16px;font-weight:600;padding:0 12px;border-radius:12px;border:1px solid var(--border2);background:var(--surface2);color:var(--text)}
.gvx .kp-dest-sel[disabled]{opacity:.7}
/* M3 (spec 2026-09-27-gaviones-pedido-desde-montaje.md): en Carado la caja no se elige, se lee — lo
   decidió Montaje; misma caja y mismo alto que el selector, para que las teclas no se muevan */
.gvx .kp-dest-info{display:flex;align-items:center;justify-content:center;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gvx .kp-dest-nota{height:1.4em;font-size:var(--fs-xs,12px);font-weight:600;color:var(--text2);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gvx .kp-card.kp-compacto .kp-dest{margin:0 0 6px;gap:2px}
/* A3: una cifra PROPUESTA (REPETIR, correcciones) va en gris: el primer dígito la sustituye */
.gvx .kp-display.kp-propuesto{color:var(--text2)}
/* A1: compacto — solo cuando no cabe (letra XL en tablet apaisada). Las teclas se quedan en 52 px
   (--tap-planta: se tocan con guantes). */
.gvx .kp-card.kp-compacto{padding:14px 16px 10px}
.gvx .kp-card.kp-compacto .kp-prod{margin-bottom:2px}
.gvx .kp-card.kp-compacto .kp-prod .ref{font-size:18px}
.gvx .kp-card.kp-compacto .kp-prod .desc{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gvx .kp-card.kp-compacto .kp-display{font-size:34px;padding:4px;margin:6px 0;min-height:0}
.gvx .kp-card.kp-compacto .kp-motivo-tit{margin:4px 0 6px}
.gvx .kp-card.kp-compacto .kp-keys{gap:8px}
.gvx .kp-card.kp-compacto .kp-key{padding:0;height:var(--tap-planta,52px);font-size:24px}
.gvx .kp-card.kp-compacto .kp-actions{margin-top:8px}
.gvx .kp-card.kp-compacto .kp-cancel,.gvx .kp-card.kp-compacto .kp-ok{padding:10px 12px;min-height:var(--tap-planta,52px);font-size:17px}
.gvx .kp-cancel{background:var(--surface2);border:1px solid var(--border2);color:var(--text);border-radius:14px;font-size:18px;font-weight:700;padding:16px;cursor:pointer}
.gvx .kp-ok{background:linear-gradient(135deg,#16a34a,#15803d);border:none;color:#fff;border-radius:14px;font-size:20px;font-weight:800;padding:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px}
.gvx .kp-ok[disabled]{opacity:.6;cursor:default;filter:grayscale(.35)}
/* Motivo (2.3, «la papelera pide motivo»): NO existe en GavControl — misma pinta del teclado,
   chips + texto libre, sobre el mismo kp-card de siempre. */
.gvx .kp-motivo-tit{font-size:14px;font-weight:700;color:var(--text2);margin:10px 0 8px;text-align:center}
.gvx .kp-chips{display:flex;gap:7px;flex-wrap:wrap;justify-content:center;margin-bottom:10px}
.gvx .kp-chip{border:1px solid var(--border2);background:var(--surface);color:var(--text2);border-radius:999px;padding:8px 13px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit}
.gvx .kp-chip:hover{border-color:var(--blue);color:var(--text)}
.gvx .kp-motivo-txt{width:100%;min-height:72px;border:1px solid var(--border2);border-radius:10px;padding:10px 12px;font-size:14px;background:var(--surface);color:var(--text);font-family:inherit;resize:vertical;outline:none}
.gvx .kp-motivo-txt:focus{border-color:var(--blue)}

/* ── Aviso de resultado (pa-, overlay ESTÁTICO #gvx-pa-overlay — id prefijado, spec 2.2);
   mismo selector compuesto que el teclado, por la misma razón. ── */
.gvx#gvx-pa-overlay{position:fixed;inset:0;background:rgba(15,23,42,.72);display:none;align-items:center;justify-content:center;z-index:10400;padding:16px}
.gvx#gvx-pa-overlay.open{display:flex}
.gvx .pa-card{background:var(--surface);border-radius:22px;padding:26px 24px 20px;width:100%;max-width:460px;text-align:center;box-shadow:0 24px 60px rgba(0,0,0,.45);border-top:10px solid var(--green);position:relative;overflow:hidden}
.gvx .pa-card.err{border-top-color:var(--red)}
.gvx .pa-card.warn{border-top-color:var(--amber)}
/* azul = en la cola de la tablet (2.3, «sin cobertura se encola»): NO existe en GavControl. */
.gvx .pa-card.azul{border-top-color:var(--blue)}
.gvx .pa-icon{font-size:64px;line-height:1;color:var(--green);margin-bottom:6px}
.gvx .pa-card.err .pa-icon{color:var(--red)}
.gvx .pa-card.warn .pa-icon{color:var(--amber)}
.gvx .pa-card.azul .pa-icon{color:var(--blue)}
.gvx .pa-title{font-size:30px;font-weight:800;letter-spacing:.02em;color:var(--green);margin-bottom:10px}
.gvx .pa-card.err .pa-title{color:var(--red)}
.gvx .pa-card.warn .pa-title{color:var(--amber)}
.gvx .pa-card.azul .pa-title{color:var(--blue)}
.gvx .pa-what{font-size:26px;font-weight:800;color:var(--text);line-height:1.25}
.gvx .pa-what .ref{font-family:monospace;color:var(--blue)}
.gvx .pa-flow{font-size:16px;font-weight:600;color:var(--text2);margin-top:8px}
.gvx .pa-proof{margin-top:14px;background:var(--surface2);border:1px solid var(--border2);border-radius:12px;padding:10px 12px;font-size:15px;color:var(--text)}
.gvx .pa-proof b{font-family:monospace;font-size:19px}
.gvx .pa-actions{display:grid;gap:10px;margin-top:16px}
.gvx .pa-actions.dos{grid-template-columns:1fr 1fr}
.gvx .pa-btn{border:none;border-radius:14px;font-size:19px;font-weight:800;padding:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px}
.gvx .pa-btn.ok{background:linear-gradient(135deg,#16a34a,#15803d);color:#fff}
.gvx .pa-btn.re{background:linear-gradient(135deg,#dc2626,#b91c1c);color:#fff}
.gvx .pa-btn.gris{background:var(--surface2);border:1px solid var(--border2);color:var(--text)}
.gvx .pa-bar{height:5px;background:var(--border2);border-radius:3px;margin-top:14px;overflow:hidden;display:none}
.gvx .pa-bar.on{display:block}
.gvx .pa-bar i{display:block;height:100%;background:var(--green);width:100%;transform-origin:left center;animation:gvPaTick linear forwards}
@keyframes gvPaTick{from{transform:scaleX(1)}to{transform:scaleX(0)}}

/* ── Despiece visual (15-sep-2026, spec 2026-09-15-gaviones-despiece-visual.md, 3.2): lo mínimo
   para el overlay del despiece (controles en fila, tabla de «otras piezas» con .tbl de siempre)
   y para la pantalla nueva «Despieces» (D9 añadido sobre la marcha) — el resto se apoya en clases
   YA existentes de este fichero (mesa-grid.arts/mesa-btn.b-art para las tarjetas de malla, card/
   card-hdr/card-body para la malla seleccionada, tbl para listados, field/frow para los filtros,
   sort-btn para el conmutador de vista): «sigue sus patrones», no se inventa un segundo idioma. ── */
.gvx .desp-controles{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin:10px 0 14px;padding:10px 12px;background:var(--surface2);border-radius:var(--radius-sm)}
.gvx .desp-cantidad{display:flex;align-items:center;gap:8px}
.gvx .desp-cantidad strong{min-width:26px;text-align:center;font-size:16px}
.gvx .desp-rango{display:flex;align-items:center;gap:8px;flex:1;min-width:160px;font-size:var(--fs-xs);color:var(--text2)}
.gvx .desp-rango input[type="range"]{flex:1}
/* aviso ámbar dentro del propio dibujo (D del encargo, 15-sep tarde: el origen ya no se pinta —
   siempre sería «deducido»; solo los avisos, si los hay) — mismo tono que ya usa el teclado de
   Montaje para «hay que cortar» (_gvKpCorteHintHTML), no uno nuevo de gaviones. */
.gvx .desp-aviso{color:var(--c-esp-fg);font-weight:600;font-size:12.5px;margin:4px 0;padding:2px 0}
.gvx .desp-pie{color:var(--text2);font-size:var(--fs-xs);margin-top:8px}
.gvx .desp-svg-wrap{width:100%;flex:0 0 auto}   /* sin overflow propio: dentro del cuerpo del modal (columna flex) un contenedor con overflow encoge a 224px y recorta la ficha; el que hace scroll es el cuerpo del modal */
.gvx .desp-svg-wrap svg{display:block}
/* pantalla «Despieces» (D9): dos columnas — buscador+lista a la izquierda, ficha técnica a la
   derecha — apiladas en tablet vertical/móvil (mismo corte que el resto de la app, 700-900px). */
.gvx .desp-layout{display:grid;grid-template-columns:320px 1fr;gap:16px;align-items:start}
@media(max-width:900px){.gvx .desp-layout{grid-template-columns:1fr}}
.gvx .desp-lista{max-height:74vh;overflow-y:auto}
.gvx .desp-filtro-resumen{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:var(--fs-xs);color:var(--text2);margin:8px 2px}
/* Despiece interactivo + pantalla completa (spec 2026-09-15-gaviones-despiece-interactivo-pantalla-
   completa.md): la malla seleccionada tiene su tarjeta (D1) y la capa fija .desp-full tapa TODA
   la ventana (D2) — capa CSS, no el Fullscreen API: el iPad no lo deja para cualquier elemento.
   Va entre el modal (10097) y el teclado (10099), así el teclado de «¿cuántas mallas?» sale por
   encima; el aviso (10400) también queda encima. Desde la v488 (spec …-despiece-pantalla-completa-
   y-mallas.md) el despiece se abre SIEMPRE así: la ventana pequeña ya no se usa para él. */
.gvx .desp-pista{font-size:12.5px;color:var(--text2);margin:6px 0 8px}
/* «¿Cuántas mallas vas a cortar?» (D2 de …-pantalla-completa-y-mallas.md): −/+ de 44 px y el
   número grande, que se toca para teclearlo — se maneja con guantes. */
.gvx .desp-mallas{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.gvx .desp-mallas-tit{font-weight:600;font-size:14px;color:var(--text);flex:1 1 100%}
.gvx .desp-mallas .btn{min-height:44px;min-width:44px;justify-content:center;font-size:18px}
.gvx .desp-mallas-num{min-height:44px;min-width:76px;padding:0 12px;border:2px solid var(--blue);border-radius:var(--radius-sm);background:var(--blue-l);color:var(--blue-d);font-size:22px;font-weight:700;cursor:pointer;font-family:'DM Mono',monospace}
.gvx .desp-tarjeta-eq{align-self:center;font-size:13px}
.gvx .desp-tarjeta{border:2px solid var(--blue);border-radius:var(--radius);background:var(--surface);padding:12px 14px;margin-top:12px;display:flex;gap:14px;flex-wrap:wrap;align-items:flex-start}
.gvx .desp-tarjeta .desp-svg-wrap{flex:0 1 300px;max-width:300px}
.gvx .desp-tarjeta-txt{flex:1 1 220px;min-width:0;font-size:13px}
.gvx .desp-tarjeta-tit{font-size:var(--fs-xs);font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px}
.gvx .desp-tarjeta h3{margin:0 0 6px;font-size:17px;line-height:1.2}
.gvx .desp-tarjeta-acciones{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.gvx .desp-tarjeta-acciones .btn{min-height:44px;padding:8px 16px;font-size:14px}
.gvx .mesa-btn.b-art[aria-pressed="true"]{border-color:var(--blue);background:var(--blue-l)}
.gvx.desp-full{position:fixed;inset:0;z-index:10098;background:var(--surface);display:flex;flex-direction:column;padding:10px 14px;gap:8px}
.gvx.desp-full .desp-full-hdr{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.gvx.desp-full .desp-full-hdr .btn{min-height:44px;padding:8px 16px;font-size:14px}
.gvx.desp-full .desp-full-cuerpo{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:12px}
.gvx.desp-full .desp-full-dibujo{min-height:0;min-width:0;display:flex;align-items:center;justify-content:center}
.gvx.desp-full .desp-full-dibujo .desp-svg-wrap{width:100%;height:100%;flex:1 1 auto}
.gvx.desp-full .desp-full-dibujo .desp-svg-wrap svg{width:100%!important;height:100%!important}
.gvx.desp-full .desp-full-lado{min-height:0;overflow-y:auto;padding-right:4px}
.gvx.desp-full .desp-full-lado .desp-controles{margin:0 0 10px;flex-direction:column;align-items:stretch;gap:10px}
.gvx.desp-full .desp-full-lado .desp-tarjeta{margin-top:8px}
@media(max-width:900px){.gvx.desp-full .desp-full-cuerpo{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto}.gvx.desp-full .desp-full-lado{max-height:45vh}}

/* ── Toque de 44 px, y solo en pantalla táctil (20-sep-2026; spec 2026-09-20-gaviones-reglas-
   de-la-casa.md, decisión 4). Medido: .sort-btn daba 22 px de alto y .btn-sm/.btn-icon 24-25,
   contra los 44 que manda la casa. Pero estas son pantallas de tabla que en la oficina se usan
   sentado y con ratón: subirlas a 44 px en el escritorio destrozaría su densidad. Así que se
   crece donde el dedo es el que manda, igual que ya hace app.css con .ico/.pc-acarga. ── */
@media (pointer:coarse){
  .gvx .btn{min-height:44px;padding:10px 16px}
  .gvx .btn-sm{min-height:44px;padding:8px 14px}
  .gvx .btn-icon{min-height:44px;min-width:44px;display:inline-flex;align-items:center;justify-content:center}
  .gvx .sort-btn{min-height:44px;padding:8px 16px}
  .gvx .carado-del,.gvx .carado-back{width:44px;height:44px}
  .gvx .carado-back{left:58px}   /* 8+44+6: el mismo hueco de siempre a la derecha de la papelera */
}

/* pantalla completa (⛶, la misma de siempre): los overlays del teclado/aviso van por encima igual */
html[data-chrome="oculto"] #gvx-kp-overlay,html[data-chrome="oculto"] #gvx-pa-overlay{z-index:10500}
/* D6 (spec 2026-09-29-gaviones-informe-diario-y-borrados.md): el Informe ya no se imprime con
   window.print() a pelo (gvInformeImprimir usa la vista previa de siempre, #print-preview, que
   app.css ya oculta todo lo que no sea ella) — la regla de .gv-informe-noprint sobra y se retira.
   Los overlays del teclado/aviso se quedan: pueden estar abiertos mientras se imprime OTRA cosa. */
@media print{
  #gvx-kp-overlay,#gvx-pa-overlay{display:none!important}
}

/* Recuento de mallas en una hoja (28-sep-2026, spec 2026-09-28-gaviones-recuento-mallas.md): casillas
   de 44 px y cifras en DM Mono alineadas, para contar de corrido en la tablet con la lista en la mano */
.gvx .gvx-rm-nota{font-size:var(--fs-sm);color:var(--text2);margin-bottom:10px}
.gvx .gvx-rm-todos{display:flex;align-items:center;gap:8px;margin:0 0 6px;font-size:var(--fs-sm);color:var(--text2);min-height:44px;cursor:pointer}
.gvx .gvx-rm-grupo{border-top:1px solid var(--border);padding:4px 0}
.gvx .gvx-rm-fila{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:6px 4px;border-radius:var(--radius-sm)}
.gvx .gvx-rm-fila.pieza{padding-left:28px}
.gvx .gvx-rm-fila.error{background:var(--red-l)}
.gvx .gvx-rm-que{flex:1 1 240px;min-width:0;font-size:var(--fs-sm);line-height:1.35}
.gvx .gvx-rm-err{color:var(--red)}
.gvx .gvx-rm-in{width:112px;min-height:44px;padding:6px 10px;font-size:var(--fs-md);text-align:right;font-variant-numeric:tabular-nums;border:1px solid var(--border2);border-radius:var(--radius-sm);background:var(--surface2);color:var(--text);outline:none}
.gvx .gvx-rm-in:focus{border-color:var(--blue)}
.gvx .gvx-rm-dif{flex:0 0 150px;font-size:var(--fs-sm);color:var(--text2);font-variant-numeric:tabular-nums}
.gvx .gvx-rm-pie{flex-wrap:wrap;align-items:flex-end}
.gvx .gvx-rm-motivo{flex:1 1 260px;margin:0}
.gvx .gvx-rm-acciones{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.gvx .gvx-rm-estado{font-size:var(--fs-sm);color:var(--text2)}
