/* ============================================================
   Modulo SERIGRAFIA — configurador de disenos (.srg-*)
   ------------------------------------------------------------
   Estructura calcada de la aplicacion que usa hoy AECO, porque es la que
   el usuario tiene aprendida: tres secciones en una nav lateral (Textil /
   Vinilos / Lonas), y dentro de Textil las tecnicas AGRUPADAS EN BLOQUES
   independientes — cada uno con su selector, sus unidades y su propia
   lista de lineas. NO una lista generica de "aplicaciones".

   El total del diseno vive en una barra inferior fija y NO se reinicia al
   cambiar de seccion: un diseno puede llevar camisetas y lona a la vez.

   Theme-aware: todo color sale de var(--color-*) del ERP. NO hardcodear
   hex salvo como fallback var(--x, #fallback).
   ============================================================ */

/* Tokens del modulo. Se declaran en DOS anclajes a proposito, y es una sola
   declaracion, no una copia: los overlays del ERP cuelgan de <html> (patron
   canonico de modales), donde .srg-root NO es ancestro. Sin el segundo
   selector, todo lo que dentro del panel use --srg-success/warning/danger
   sale sin color — el mismo motivo por el que firmaPad solo se atreve con
   .srg-btn y .srg-btn-primary (serigrafia_views.js:187-190). */
.srg-root, .srg-pp {
  --srg-success: var(--color-success, #10b981);
  --srg-warning: var(--color-warning, #f59e0b);
  --srg-danger:  var(--color-danger, #ef4444);
  --srg-radius:  var(--radius-lg, .75rem);
}

.srg-root {
  height: 100%; width: 100%; box-sizing: border-box;
  display: flex; flex-direction: column;
  background: transparent; color: var(--color-text-primary, #f1f5f9);
  overflow: hidden;
  /* Tamano BASE del modulo. Sin esto cada parrafo suelto hereda lo que
     traiga el shell, que es mas pequeno, y hay que ir persiguiendo el
     tamano regla a regla. Se fija una vez aqui y lo demas parte de esto. */
  font-size: var(--font-size-base, 1rem);
  line-height: 1.5;
}

/* --- armazon: nav lateral + area de trabajo + barra inferior --------- */
.srg-shell { flex: 1 1 auto; display: flex; min-height: 0; }

.srg-nav {
  flex: 0 0 auto; width: 156px; display: flex; flex-direction: column;
  border-right: 1px solid var(--color-border, #334155);
  background: var(--color-bg-secondary, #1e293b);
}
.srg-nav-item {
  display: flex; flex-direction: column; align-items: center; gap: .35rem;
  padding: 1rem .5rem; cursor: pointer; border: none; width: 100%;
  background: transparent; color: var(--color-text-muted, #64748b);
  border-bottom: 1px solid var(--color-border, #334155);
  border-left: 3px solid transparent;
  font-family: inherit; font-size: var(--font-size-sm, .875rem);
  font-weight: 600; letter-spacing: .03em;
  transition: var(--transition, all .18s ease);
}
.srg-nav-item:hover { background: var(--color-bg-hover, #334155);
  color: var(--color-text-primary, #f1f5f9); }
.srg-nav-item.is-on {
  background: var(--color-bg-card, #0f172a);
  color: var(--color-accent, #6366f1);
  border-left-color: var(--color-accent, #6366f1);
}
.srg-nav-ico { font-size: 1.4rem; line-height: 1; width: 1.6rem; text-align: center; }
/* Contador de lineas de la seccion: se ve de un vistazo si hay algo dentro
   aunque estes en otra pestana. */
.srg-nav-badge {
  min-width: 18px; padding: 0 5px; border-radius: 999px;
  background: var(--color-accent, #6366f1); color: #fff;
  font-size: 10px; line-height: 18px; font-weight: 700;
}

/* El scroll NO va aqui: si scrollea .srg-main se lleva por delante la
   cabecera de la seccion ("Textil", "Vinilos"...). Va dentro de cada
   seccion, por debajo de su cabecera. Misma regla que las vistas del ciclo. */
.srg-main { flex: 1 1 auto; min-width: 0; min-height: 0; overflow: hidden;
  padding: var(--space-lg, 1.25rem); display: flex; flex-direction: column; }
.srg-sec { display: none; }
.srg-sec.is-on {
  display: flex; flex-direction: column;
  flex: 1 1 auto; min-height: 0;
}
/* La cabecera de la seccion se queda; lo de debajo se desplaza. */
.srg-sec > .srg-header { flex: 0 0 auto; }
.srg-sec.is-on > *:not(.srg-header) { flex: 0 0 auto; }
.srg-sec-scroll {
  flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden;
  padding-right: .25rem;
}

/* --- barra inferior: el total NO se pierde al cambiar de seccion ----- */
.srg-footer {
  flex: 0 0 auto; display: flex; align-items: center; gap: var(--space-md, 1rem);
  padding: .75rem var(--space-lg, 1.25rem);
  border-top: 1px solid var(--color-border, #334155);
  background: var(--color-bg-secondary, #1e293b);
}
.srg-footer-spacer { flex: 1 1 auto; }
.srg-total-box {
  display: flex; align-items: baseline; gap: .75rem;
  padding: .4rem 1rem; border-radius: var(--srg-radius);
  background: var(--color-bg-card, #0f172a);
  border: 1px solid var(--color-border, #334155);
}
.srg-total-lbl { font-size: var(--font-size-base, 1rem);
  color: var(--color-text-muted, #64748b); font-weight: 500; }
.srg-total-val {
  font-size: var(--font-size-2xl, 1.5rem); font-weight: 700;
  color: var(--color-accent, #6366f1); font-variant-numeric: tabular-nums;
  transition: color .2s ease;
}
.srg-total-val.is-calc { color: var(--color-text-muted, #64748b); }

/* --- tarjetas y bloques --------------------------------------------- */
.srg-card {
  background: var(--color-bg-card, var(--color-bg-secondary, #1e293b));
  border: 1px solid var(--color-border, #334155);
  border-radius: var(--srg-radius);
  margin-bottom: var(--space-md, 1rem);
  overflow: hidden;
}
.srg-card-head {
  display: flex; align-items: center; gap: .6rem;
  padding: .75rem 1.1rem;
  background: var(--color-bg-hover, #334155);
  border-bottom: 1px solid var(--color-border, #334155);
}
.srg-card-title {
  font-size: var(--font-size-lg, 1.125rem); font-weight: 600;
  color: var(--color-text-primary, #f1f5f9);
  letter-spacing: .02em; flex: 1 1 auto;
}
.srg-card-sub { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); font-weight: 400; }
/* Icono de la tarjeta, a la izquierda del titulo. */
.srg-card-ico { flex: 0 0 auto; font-size: 1.15rem; line-height: 1;
  width: 1.5rem; text-align: center; }
.srg-card-body { padding: 1.1rem; }
/* Texto explicativo de una tarjeta: legible, no letra pequena de contrato. */
.srg-card-body p { margin: 0 0 .6rem; font-size: var(--font-size-base, 1rem);
  line-height: 1.55; }
.srg-card-body p:last-child { margin-bottom: 0; }

/* Total del bloque, a la derecha de su cabecera. */
.srg-card-total {
  font-size: var(--font-size-base, 1rem); font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--color-text-primary, #f1f5f9);
  padding: .1rem .5rem; border-radius: var(--radius-sm, .375rem);
  background: var(--color-bg-card, #0f172a);
}
.srg-card-total.is-zero { color: var(--color-text-muted, #64748b);
  background: transparent; }

/* --- layout de la seccion TEXTIL ------------------------------------ */
.srg-textil { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1.15fr);
  gap: var(--space-md, 1rem); align-items: start; }
@media (max-width: 1180px) { .srg-textil { grid-template-columns: minmax(0,1fr); } }

/* --- formulario ------------------------------------------------------ */
.srg-row { display: flex; gap: .6rem; align-items: flex-end; flex-wrap: wrap; }
.srg-field { display: flex; flex-direction: column; gap: .25rem; min-width: 0; flex: 1 1 auto; }
.srg-field.is-narrow { flex: 0 0 108px; }
.srg-field.is-mid { flex: 0 0 160px; }
.srg-label { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); font-weight: 500; }
.srg-input, .srg-select {
  width: 100%; box-sizing: border-box; padding: .55rem .7rem;
  background: var(--color-bg-input, var(--color-bg-secondary, #1e293b));
  border: 1px solid var(--color-border, #334155);
  border-radius: var(--radius-md, .5rem);
  color: var(--color-text-primary, #f1f5f9);
  font-size: var(--font-size-base, 1rem); font-family: inherit; outline: none;
  transition: var(--transition, all .18s ease);
}
.srg-input:focus, .srg-select:focus {
  border-color: var(--color-accent, #6366f1);
  box-shadow: 0 0 0 3px var(--color-accent-subtle, rgba(99,102,241,.15));
}
.srg-input[readonly] { background: var(--color-bg-card, #0f172a);
  color: var(--color-text-muted, #64748b); }
.srg-input.is-num { text-align: right; font-variant-numeric: tabular-nums; }

/* --- botones --------------------------------------------------------- */
.srg-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .4rem;
  padding: .55rem .95rem; border-radius: var(--radius-md, .5rem);
  border: 1px solid var(--color-border, #334155);
  /* Fondo SIEMPRE visible: sobre --color-bg-card un boton transparente
     "se ve poco", y es una queja que no se repite. */
  background: var(--color-bg-hover, #334155);
  color: var(--color-text-primary, #f1f5f9);
  font-size: var(--font-size-base, 1rem); font-family: inherit;
  cursor: pointer; white-space: nowrap;
  transition: var(--transition, all .18s ease);
}
.srg-btn:hover:not(:disabled) { background: var(--color-accent-subtle, rgba(99,102,241,.15));
  border-color: var(--color-accent, #6366f1); }
.srg-btn:disabled { opacity: .4; cursor: not-allowed; }
.srg-btn-primary { background: var(--color-accent, #6366f1);
  border-color: var(--color-accent, #6366f1); color: #fff; font-weight: 600; }
.srg-btn-primary:hover:not(:disabled) { filter: brightness(1.12);
  background: var(--color-accent, #6366f1); }
.srg-btn-ok { background: var(--srg-success); border-color: var(--srg-success);
  color: #fff; font-weight: 600; }
.srg-btn-ok:hover:not(:disabled) { filter: brightness(1.12); background: var(--srg-success); }
.srg-btn-danger { color: var(--srg-danger); }
.srg-btn-danger:hover:not(:disabled) { background: color-mix(in srgb, var(--srg-danger) 15%, transparent);
  border-color: var(--srg-danger); }
/* Boton cuadrado de "anadir", como el + de la app original */
.srg-btn-ico { flex: 0 0 auto; width: 42px; height: 42px; padding: 0;
  font-size: 1.15rem; line-height: 1; }

/* --- lista de lineas de un bloque ------------------------------------ */
.srg-lineas { display: flex; flex-direction: column; gap: .3rem; margin-top: .7rem; }
.srg-linea {
  display: flex; align-items: center; gap: .4rem;
  padding: .35rem .4rem .35rem .75rem;
  border-radius: 999px;
  background: var(--color-bg-secondary, #1e293b);
  border: 1px solid var(--color-border, #334155);
  /* El pico de color de la izquierda identifica la tecnica de un vistazo,
     igual que la marca roja de la aplicacion original. */
  border-left: 4px solid var(--color-accent, #6366f1);
  font-size: var(--font-size-base, 1rem);
  animation: srgIn .16s ease;
}
@keyframes srgIn { from { opacity: 0; transform: translateY(-3px); } }
.srg-linea-txt { flex: 1 1 auto; min-width: 0; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
.srg-linea-num { flex: 0 0 auto; min-width: 46px; text-align: right;
  font-variant-numeric: tabular-nums; color: var(--color-text-muted, #64748b); }
.srg-linea-imp { flex: 0 0 auto; min-width: 74px; text-align: right;
  font-variant-numeric: tabular-nums; font-weight: 600; }
.srg-linea-del {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%;
  border: none; background: transparent; cursor: pointer;
  color: var(--srg-danger); font-size: .95rem; line-height: 1;
  transition: var(--transition, all .15s ease);
}
.srg-linea-del:hover { background: color-mix(in srgb, var(--srg-danger) 18%, transparent); }

.srg-linea.srg-t-SERIGRAFIA { border-left-color: var(--color-accent, #6366f1); }
.srg-linea.srg-t-DIRECTA    { border-left-color: var(--srg-warning); }
.srg-linea.srg-t-DTF        { border-left-color: var(--srg-success); }
.srg-linea.srg-t-BORDADO    { border-left-color: #a855f7; }
.srg-linea.srg-t-PRENDA     { border-left-color: var(--color-text-muted, #64748b); }

/* --- rejilla de superficies (vinilos, lonas) ------------------------- */
.srg-sup-grid { display: grid; gap: var(--space-md, 1rem);
  grid-template-columns: repeat(auto-fit, minmax(330px, 1fr)); }
.srg-sup-row { display: grid; grid-template-columns: repeat(2, minmax(0,1fr));
  gap: .5rem; margin-bottom: .5rem; }
.srg-sup-total { display: flex; align-items: center; justify-content: space-between;
  gap: .5rem; padding-top: .5rem; margin-top: .2rem;
  border-top: 1px dashed var(--color-border, #334155); }

/* --- avisos ---------------------------------------------------------- */
/* No son decorativos: son la diferencia entre que un articulo sin tarifa se
   cobre a PVP en silencio y que el comercial lo vea. */
.srg-avisos { margin-top: .6rem; }
.srg-aviso {
  display: flex; gap: .5rem; align-items: flex-start;
  font-size: var(--font-size-sm, .875rem); line-height: 1.5;
  padding: .5rem .6rem; margin-bottom: .3rem;
  border-radius: var(--radius-md, .5rem);
  background: color-mix(in srgb, var(--srg-warning) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--srg-warning) 35%, transparent);
}
.srg-aviso-ico { flex: 0 0 auto; color: var(--srg-warning); }
/* El texto se come el ancho para que el aspa quede pegada a la derecha. */
.srg-aviso-txt { flex: 1 1 auto; min-width: 0; }
/* Aspa de descartar. Un aviso ya leido y resuelto no debe seguir ocupando
   pantalla: son informativos, no bloqueantes. */
.srg-aviso-x {
  flex: 0 0 auto; background: transparent; border: none; cursor: pointer;
  color: var(--color-text-muted, #64748b); font-family: inherit;
  font-size: var(--font-size-sm, .875rem); line-height: 1;
  padding: .15rem .35rem; border-radius: var(--radius-sm, .25rem);
  transition: var(--transition, all .18s ease);
}
.srg-aviso-x:hover { color: var(--color-text-primary, #f1f5f9);
  background: var(--color-bg-hover, #334155); }
/* Volver a mostrar los descartados: discreto, pero no escondido. */
.srg-avisos-ver {
  background: transparent; border: 1px dashed var(--color-border, #334155);
  color: var(--color-text-muted, #64748b); cursor: pointer;
  font-family: inherit; font-size: var(--font-size-sm, .875rem);
  padding: .3rem .7rem; border-radius: var(--radius-md, .5rem);
}
.srg-avisos-ver:hover { color: var(--color-text-primary, #f1f5f9);
  border-color: var(--color-accent, #6366f1); }

/* --- desglose y comparativa (panel lateral desplegable) -------------- */
.srg-desglose { width: 100%; border-collapse: collapse;
  font-size: var(--font-size-xs, .75rem); }
.srg-desglose th { text-align: left; font-weight: 600; padding: .3rem .35rem;
  color: var(--color-text-muted, #64748b);
  border-bottom: 1px solid var(--color-border, #334155); }
.srg-desglose td { padding: .3rem .35rem;
  border-bottom: 1px solid var(--color-border, #334155); }
.srg-desglose .num { text-align: right; font-variant-numeric: tabular-nums;
  white-space: nowrap; }
.srg-desglose tr:last-child td { border-bottom: none; }
.srg-sec-row td { background: var(--color-bg-hover, #334155);
  font-weight: 700; text-transform: uppercase; letter-spacing: .03em;
  font-size: 10px; color: var(--color-text-muted, #64748b); }

/* De donde salio el precio. Ver "PVP" es informacion: significa que no se
   aplico ninguna escala por volumen. */
.srg-fuente { font-size: 9px; padding: 0 .3rem; border-radius: 999px;
  border: 1px solid var(--color-border, #334155);
  color: var(--color-text-muted, #64748b); white-space: nowrap; }
.srg-fuente-VOLUMEN { color: var(--srg-success); border-color: var(--srg-success); }
.srg-fuente-CLIENTE { color: var(--color-accent, #6366f1); border-color: var(--color-accent, #6366f1); }
.srg-fuente-OFERTA  { color: var(--srg-warning); border-color: var(--srg-warning); }
/* MANUAL es el unico precio que NO sale de una tarifa: lo ha puesto una
   persona. Se pinta relleno, no solo con el borde, porque es la diferencia
   entre "el sistema calculo esto" y "alguien decidio esto", y quien revisa el
   presupuesto tiene que verlo sin buscarlo.
   PVP faltaba: sin regla propia caia al gris de .srg-fuente, que es
   legible pero no distingue "no se aplico ningun tramo" de un badge apagado. */
.srg-fuente-MANUAL {
  color: #fff; font-weight: 700;
  background: var(--srg-warning); border-color: var(--srg-warning);
}
.srg-fuente-PVP { color: var(--color-text-muted, #64748b); }

.srg-comp { width: 100%; border-collapse: collapse; font-size: var(--font-size-sm, .875rem); }
.srg-comp th { text-align: right; font-size: var(--font-size-xs, .75rem);
  color: var(--color-text-muted, #64748b); padding: .3rem .4rem;
  border-bottom: 1px solid var(--color-border, #334155); }
.srg-comp th:first-child, .srg-comp td:first-child { text-align: left; }
.srg-comp td { padding: .35rem .4rem; text-align: right;
  font-variant-numeric: tabular-nums;
  border-bottom: 1px solid var(--color-border, #334155); }
.srg-comp tr.is-actual td { background: var(--color-accent-subtle, rgba(99,102,241,.15));
  font-weight: 600; }
.srg-comp tr:last-child td { border-bottom: none; }
.srg-comp .is-mejor { color: var(--srg-success); font-weight: 700; }

/* --- estados --------------------------------------------------------- */
.srg-empty { text-align: center; padding: 1.6rem 1rem;
  color: var(--color-text-muted, #64748b); font-size: var(--font-size-base, 1rem); }
.srg-loading { opacity: .5; pointer-events: none; transition: opacity .15s ease; }
.srg-muted { color: var(--color-text-muted, #64748b); }

/* --- SmartList (selector-buscador de prenda) -------------------------
   Cuelga de document.body y es <aside>, no <div>: el root del shell tiene
   transform/contain y descolocaria el position:fixed, y la regla
   body > div{width/height:100%!important} del shell lo deformaria.       */
.srg-sl-dd {
  position: fixed; z-index: 2147483647; display: flex; flex-direction: column;
  background: var(--color-bg-card, var(--color-bg-secondary, #1e293b));
  border: 1px solid var(--color-border, #334155);
  border-radius: var(--radius-md, .5rem);
  box-shadow: 0 12px 34px rgba(0,0,0,.4);
  overflow: hidden; box-sizing: border-box;
}
.srg-sl-body { overflow-y: auto; flex: 1 1 auto; min-height: 0; }
.srg-sl-item { padding: .4rem .6rem; cursor: pointer;
  border-bottom: 1px solid var(--color-border, #334155); }
.srg-sl-item:last-child { border-bottom: none; }
.srg-sl-item:hover { background: var(--color-bg-hover, #334155); }
.srg-sl-item.is-sel { background: var(--color-accent-subtle, rgba(99,102,241,.15)); }
.srg-sl-lbl { font-size: var(--font-size-base, 1rem); }
.srg-sl-hint { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); margin-top: 1px; }
.srg-sl-empty { padding: .8rem .6rem; text-align: center;
  font-size: var(--font-size-sm, .875rem); color: var(--color-text-muted, #64748b); }
.srg-sl-actions {
  position: sticky; bottom: 0; display: flex; gap: .25rem; padding: .35rem .5rem;
  border-top: 1px solid var(--color-border, #334155);
  background: var(--color-bg-secondary, #1e293b); flex: 0 0 auto;
}

/* ============================================================
   Vistas del ciclo de vida (panel, presupuestos, produccion, ajustes)
   Comparten tokens con el configurador: mismo lenguaje visual.
   ============================================================ */

/* El configurador NO scrollea (tiene barra fija); estas vistas si. Este es el
   UNICO scroller y el UNICO padding de las vistas del ciclo: el .srg-view de
   dentro va desnudo a proposito (ver mas abajo). */
.srg-scroll { display: block; overflow-y: auto; padding: var(--space-lg, 1.25rem); }

/* --- KPIs del panel -------------------------------------------------- */
.srg-kpis { display: grid; gap: .6rem; margin-bottom: var(--space-md, 1rem);
  grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); }
.srg-kpi {
  background: var(--color-bg-card, var(--color-bg-secondary, #1e293b));
  border: 1px solid var(--color-border, #334155);
  border-left: 3px solid var(--color-accent, #6366f1);
  border-radius: var(--srg-radius, .75rem); padding: .7rem .85rem;
}
.srg-kpi-val { font-size: var(--font-size-2xl, 1.5rem); font-weight: 700;
  font-variant-numeric: tabular-nums; color: var(--color-text-primary, #f1f5f9); }
.srg-kpi-lbl { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); margin-top: .1rem; }
.srg-kpi.is-ok   { border-left-color: var(--srg-success, #10b981); }
.srg-kpi.is-warn { border-left-color: var(--srg-warning, #f59e0b); }
.srg-kpi.is-bad  { border-left-color: var(--srg-danger, #ef4444); }
.srg-kpi.is-bad .srg-kpi-val  { color: var(--srg-danger, #ef4444); }
.srg-kpi.is-warn .srg-kpi-val { color: var(--srg-warning, #f59e0b); }

/* --- tablas ---------------------------------------------------------- */
.srg-toolbar { display: flex; gap: .5rem; align-items: center;
  flex-wrap: wrap; margin-bottom: var(--space-md, 1rem); }
/* relative: el aspa de borrado se posiciona dentro, sobre el input. */
.srg-toolbar .srg-input-wrap { flex: 1 1 240px; max-width: 380px; position: relative; }
.srg-toolbar .srg-input-wrap .srg-input { padding-right: 2rem; }

.srg-tabla { width: 100%; border-collapse: collapse;
  font-size: var(--font-size-base, 1rem); }
/* thead pegajoso: al scrollear las filas, los titulos de columna se quedan.
   El fondo es obligatorio -- sin el, las filas se ven POR DEBAJO del texto
   de la cabecera al pasar. */
.srg-tabla th { text-align: left; font-size: var(--font-size-sm, .875rem);
  font-weight: 600; color: var(--color-text-muted, #64748b); padding: .4rem .45rem;
  border-bottom: 1px solid var(--color-border, #334155); white-space: nowrap;
  position: sticky; top: 0; z-index: 1;
  background: var(--color-bg-card, var(--color-bg-secondary, #1e293b)); }
.srg-tabla td { padding: .45rem; border-bottom: 1px solid var(--color-border, #334155);
  vertical-align: middle; }
.srg-tabla tr:last-child td { border-bottom: none; }
.srg-tabla tbody tr:hover { background: var(--color-bg-hover, #334155); }
.srg-tabla .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.srg-acc { display: flex; gap: .25rem; justify-content: flex-end; flex-wrap: wrap; }
.srg-btn-sm { padding: .3rem .6rem; font-size: var(--font-size-sm, .875rem); }

/* Retrasos: el color es la unica forma de que se vean sin leer. */
.is-tarde  { color: var(--srg-danger, #ef4444); font-weight: 600; }
.is-pronto { color: var(--srg-warning, #f59e0b); font-weight: 600; }

/* =====================================================================
   Panel de precios de una linea (precio pactado)
   ---------------------------------------------------------------------
   Es un OVERLAY y no un desplegable dentro de la tarjeta por una razon
   tecnica, no estetica: render() reescribe el innerHTML de #srg-cuerpo
   entero en cada recalculo, y pactar un precio DISPARA un recalculo. Un
   input dentro del cuerpo perderia el foco justo mientras se teclea. Es
   el mismo motivo por el que la barra de cliente vive fuera.

   Los tokens --srg-* los trae el propio .srg-pp (ver cabecera del fichero):
   colgando de <html> no hereda los de .srg-root.
   ===================================================================== */
.srg-pp {
  background: var(--color-bg-card, #1e293b);
  border: 1px solid var(--color-border, #334155);
  border-radius: 12px;
  width: min(760px, 96vw); max-height: 92vh;
  display: flex; flex-direction: column; overflow: hidden;
  box-shadow: 0 15px 40px rgba(0,0,0,.5);
  color: var(--color-text-primary, #f1f5f9);
  font-size: var(--font-size-base, 1rem); line-height: 1.5;
}
/* flex 0 0 auto en cabecera y pie + min-height 0 en el cuerpo: sin esto el
   cuerpo no encoge y empuja los botones fuera de pantalla. */
.srg-pp-head {
  flex: 0 0 auto; display: flex; align-items: center; gap: .6rem;
  padding: .9rem 1rem; border-bottom: 1px solid var(--color-border, #334155);
}
.srg-pp-tit { flex: 1 1 auto; min-width: 0; font-weight: 700; }
.srg-pp-sub { display: block; font-weight: 400;
  font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.srg-pp-x {
  flex: 0 0 auto; background: transparent; border: none; cursor: pointer;
  color: var(--color-text-muted, #64748b); font-family: inherit;
  font-size: 1.2rem; line-height: 1; padding: .2rem .45rem;
  border-radius: var(--radius-sm, .25rem);
}
.srg-pp-x:hover { color: var(--color-text-primary, #f1f5f9);
  background: var(--color-bg-hover, #334155); }

.srg-pp-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: .5rem 1rem 1rem; }

.srg-pp-fila {
  display: flex; align-items: center; gap: .5rem; flex-wrap: wrap;
  padding: .6rem 0; border-bottom: 1px solid var(--color-border, #334155);
}
.srg-pp-fila:last-child { border-bottom: none; }
.srg-pp-desc { flex: 1 1 240px; min-width: 0; }
.srg-pp-cant { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); }
/* "Valia X": solo se pinta cuando el precio aplicado difiere de la base, asi
   que un tachado en pantalla SIEMPRE significa que algo lo movio. */
.srg-pp-antes { text-decoration: line-through;
  color: var(--color-text-muted, #64748b);
  font-variant-numeric: tabular-nums; }
.srg-pp-inp {
  flex: 0 0 auto; width: 110px; text-align: right;
  font-variant-numeric: tabular-nums;
  padding: .4rem .5rem; border-radius: var(--radius-md, .5rem);
  border: 1px solid var(--color-border, #334155);
  background: var(--color-bg-input, var(--color-bg-secondary, #0f172a));
  color: var(--color-text-primary, #f1f5f9);
  font-family: inherit; font-size: var(--font-size-base, 1rem);
}
.srg-pp-inp:focus { outline: none; border-color: var(--color-accent, #6366f1); }
/* Pactado: el campo se resalta para que se distinga de un vistazo cual de
   los conceptos lleva precio puesto a mano y cual sigue automatico. */
.srg-pp-inp.is-pactado { border-color: var(--srg-warning);
  background: color-mix(in srgb, var(--srg-warning) 14%, transparent); }
.srg-pp-auto {
  flex: 0 0 auto; background: transparent; cursor: pointer;
  border: 1px dashed var(--color-border, #334155);
  color: var(--color-text-muted, #64748b); font-family: inherit;
  font-size: var(--font-size-sm, .875rem);
  padding: .35rem .6rem; border-radius: var(--radius-md, .5rem);
}
.srg-pp-auto:hover:not(:disabled) { color: var(--color-text-primary, #f1f5f9);
  border-color: var(--color-accent, #6366f1); border-style: solid; }
.srg-pp-auto:disabled { opacity: .35; cursor: default; }

.srg-pp-foot {
  flex: 0 0 auto; display: flex; align-items: center; gap: .5rem;
  padding: .75rem 1rem; border-top: 1px solid var(--color-border, #334155);
  background: var(--color-bg-secondary, #0f172a);
}
.srg-pp-foot-spacer { flex: 1 1 auto; }
.srg-pp-nota { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); }

/* Barra de cantidades de la comparativa. Va ARRIBA, entre la cabecera y la
   tabla: es lo que gobierna lo que se ve debajo, y ponerla al pie obligaría a
   bajar la vista para cambiar el dato y volver a subir para leer el
   resultado. `flex: 0 0 auto` para que no se coma el alto de la tabla cuando
   hay muchas filas — el que scrollea es .srg-pp-body. */
.srg-cmp-barra {
  flex: 0 0 auto; display: flex; align-items: flex-end; gap: .6rem;
  padding: .75rem 1rem;
  border-bottom: 1px solid var(--color-border, #334155);
  background: var(--color-bg-secondary, #0f172a);
}
/* min-width:0 sobre el .srg-field: sin él un hijo flex no baja de su ancho de
   contenido y el botón se sale de la tarjeta con listas largas. */
.srg-cmp-barra .srg-field { flex: 1 1 auto; min-width: 0; }
.srg-cmp-barra .srg-btn { flex: 0 0 auto; }

/* En móvil se apila: con el campo y el botón en fila, el input se queda tan
   estrecho que no se lee lo que hay escrito. */
@media (max-width: 640px) {
  .srg-cmp-barra { flex-wrap: wrap; }
  .srg-cmp-barra .srg-field { flex: 1 1 100%; }
  .srg-cmp-barra .srg-btn { width: 100%; }
}

/* Boton que abre el panel desde una linea. Discreto hasta que se pasa por
   encima: la accion habitual sobre una linea es editarla, no tarifarla. */
.srg-linea-pp {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%;
  border: none; background: transparent; cursor: pointer;
  color: var(--color-text-muted, #64748b);
  font-family: inherit; font-size: .9rem; line-height: 1;
  transition: var(--transition, all .15s ease);
}
.srg-linea-pp:hover { color: var(--color-accent, #6366f1);
  background: var(--color-accent-subtle, rgba(99,102,241,.15)); }
/* Con algo pactado deja de ser discreto: es un aviso de que ese importe no
   sale de la tarifa. */
.srg-linea-pp.is-pactado { color: var(--srg-warning); font-weight: 700; }
.srg-dias { font-size: 10px; opacity: .85; }

.srg-badge { display: inline-block; padding: .1rem .45rem; border-radius: 999px;
  font-size: 10px; font-weight: 700; letter-spacing: .02em; white-space: nowrap;
  background: var(--color-bg-hover, #334155); color: var(--color-text-muted, #64748b); }
.srg-e-BORRADOR      { background: var(--color-bg-hover, #334155); }
.srg-e-PRESUPUESTADO { background: color-mix(in srgb, var(--color-accent, #6366f1) 25%, transparent);
  color: var(--color-accent, #6366f1); }
.srg-e-ACEPTADO, .srg-e-PEDIDO { background: color-mix(in srgb, var(--color-accent, #6366f1) 35%, transparent);
  color: #fff; }
.srg-e-EN_PRODUCCION { background: color-mix(in srgb, var(--srg-warning, #f59e0b) 30%, transparent);
  color: var(--srg-warning, #f59e0b); }
.srg-e-PRODUCIDO, .srg-e-ENTREGADO { background: color-mix(in srgb, var(--srg-success, #10b981) 30%, transparent);
  color: var(--srg-success, #10b981); }
.srg-e-RECHAZADO, .srg-e-ANULADO { background: color-mix(in srgb, var(--srg-danger, #ef4444) 25%, transparent);
  color: var(--srg-danger, #ef4444); }

/* --- tablero de produccion ------------------------------------------- */
/* Las columnas las decide la BD (srg_estados_aplicacion), no el front: pueden
   ser 4 o 7. minmax + auto-fit las reparte sin que haya que tocar nada al
   añadir un estado; por debajo de ~220px por columna el grid baja de fila. */
.srg-tablero { display: grid; gap: .7rem; margin-bottom: var(--space-md, 1rem);
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); align-items: start; }
.srg-tablero-ayuda { margin: 0 0 .6rem; font-size: var(--font-size-sm, .875rem); }
.srg-col { background: var(--color-bg-secondary, #1e293b);
  border: 1px solid var(--color-border, #334155);
  border-radius: var(--srg-radius, .75rem); overflow: hidden; }
.srg-col-head { display: flex; align-items: center; justify-content: space-between;
  padding: .5rem .7rem; background: var(--color-bg-hover, #334155);
  font-size: var(--font-size-xs, .75rem); font-weight: 700;
  text-transform: uppercase; letter-spacing: .04em;
  color: var(--color-text-muted, #64748b); }
.srg-col-n { background: var(--color-accent, #6366f1); color: #fff;
  border-radius: 999px; min-width: 18px; padding: 0 5px;
  font-size: 10px; line-height: 18px; text-align: center; }
.srg-col-body { padding: .5rem; display: flex; flex-direction: column; gap: .45rem;
  min-height: 60px; }
.srg-tarjetas { display: grid; gap: .45rem;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }

.srg-tarj { background: var(--color-bg-card, #0f172a);
  border: 1px solid var(--color-border, #334155);
  border-left: 4px solid var(--color-accent, #6366f1);
  border-radius: var(--radius-md, .5rem); padding: .5rem .6rem; }
.srg-tarj-top { display: flex; justify-content: space-between; align-items: baseline;
  gap: .4rem; margin-bottom: .25rem; }
.srg-tarj-tec { font-size: var(--font-size-base, 1rem); font-weight: 600;
  color: var(--color-text-primary, #f1f5f9); }
.srg-tarj-sub { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); margin-top: .1rem; }
/* Botones grandes: se pulsan en tablet, a veces con guantes. */
.srg-tarj-acc { display: flex; gap: .3rem; margin-top: .5rem; flex-wrap: wrap; }
.srg-tarj-acc .srg-btn { flex: 1 1 auto; min-height: 32px; }

.srg-tarj.srg-t-SERIGRAFIA { border-left-color: var(--color-accent, #6366f1); }
.srg-tarj.srg-t-DIRECTA    { border-left-color: var(--srg-warning, #f59e0b); }
.srg-tarj.srg-t-DTF        { border-left-color: var(--srg-success, #10b981); }
.srg-tarj.srg-t-BORDADO    { border-left-color: #a855f7; }
.srg-tarj.srg-t-ROTULACION { border-left-color: #06b6d4; }

/* --- arrastrar y soltar en el tablero -------------------------------- */
/* La tarjeta es agarrable: se dice con el cursor, no solo con el texto de
   ayuda. `user-select:none` evita que al arrastrar se seleccione el texto y
   el navegador arrastre la seleccion en vez de la tarjeta. */
.srg-tarj[draggable="true"] { cursor: grab; user-select: none; }
.srg-tarj[draggable="true"]:active { cursor: grabbing; }
.srg-tarj.is-arrastrando { opacity: .45; }

/* Verde = aqui se puede soltar. Apagado = movimiento ilegal segun
   srg_aplic_transiciones. Se decide en el dragstart, asi que el usuario lo ve
   ANTES de intentarlo en vez de comerse un error al soltar. */
.srg-col.is-destino, .srg-card.is-destino {
  border-color: var(--srg-success);
  box-shadow: inset 0 0 0 1px var(--srg-success);
}
.srg-col.is-vetado, .srg-card.is-vetado { opacity: .38; }
.srg-col.is-encima, .srg-card.is-encima {
  background: color-mix(in srgb, var(--srg-success) 16%, transparent);
  border-color: var(--srg-success);
}
/* El cuerpo de una columna vacia tiene que poder recibir la tarjeta: sin alto
   propio el area de soltar seria de un par de pixeles. */
.srg-col.is-destino .srg-col-body { min-height: 90px; }

/* Menu con el resto de salidas legales de la tarjeta. */
.srg-tarj-mas { flex: 1 1 auto; min-height: 32px; padding: .2rem .4rem;
  font-size: var(--font-size-sm, .875rem); }

/* === CABECERA DE PANTALLA ==============================================
   Patron CANONICO del ERP: identico, regla a regla, a .tal-header de
   Talleres y .cons-header de Construccion. Es una FILA — icono en caja de
   44px, bloque de texto que se come el espacio sobrante, y acciones a la
   derecha — no tres cosas apiladas.

   Estaba en el HTML de las cuatro vistas desde el primer dia, pero el CSS
   no lo definia: el navegador caia al tamano heredado y al flujo en
   bloque, y por eso el titulo se veia pequeno y el boton debajo. Al no
   existir la clase no hay error en ninguna parte, solo se ve mal.
   ---------------------------------------------------------------------- */
.srg-header { display: flex; align-items: center; gap: var(--space-md, 1rem);
  margin-bottom: var(--space-lg, 1.5rem); flex-wrap: wrap; }
.srg-header-icon {
  width: 44px; height: 44px; flex: 0 0 auto; border-radius: var(--radius-md, .5rem);
  display: flex; align-items: center; justify-content: center; font-size: 22px;
  background: var(--color-accent-subtle, rgba(99,102,241,.15));
  color: var(--color-accent, #6366f1);
}
.srg-header-text { flex: 1 1 auto; min-width: 0; }
.srg-header-title { font-size: var(--font-size-2xl, 1.5rem); font-weight: 600;
  color: var(--color-text-primary, #f1f5f9); line-height: 1.2; }
.srg-header-sub { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); margin-top: 2px; }
.srg-header-actions { display: flex; gap: var(--space-sm, .5rem);
  align-items: center; flex-wrap: wrap; }

/* === BARRA DE CLIENTE (configurador) ==================================
   Lo PRIMERO que se elige, y arriba del todo porque condiciona todos los
   precios de abajo: el tercero viaja a ResolvePrice y es quien decide si
   se aplica la tarifa pactada o la general. Por eso la nota de la derecha
   dice siempre cual de las dos se esta usando — un presupuesto a tarifa
   general presentado como "el precio de este cliente" es un error caro.
   ---------------------------------------------------------------------- */
.srg-cliente-bar {
  flex: 0 0 auto; display: flex; align-items: center; gap: var(--space-md, 1rem);
  padding: .8rem 1rem; flex-wrap: wrap;
  background: var(--color-bg-card, #1e293b);
  border-bottom: 1px solid var(--color-border, #334155);
}
.srg-cliente-ico {
  width: 40px; height: 40px; flex: 0 0 auto; border-radius: var(--radius-md, .5rem);
  display: flex; align-items: center; justify-content: center; font-size: 20px;
  background: var(--color-accent-subtle, rgba(99,102,241,.15));
}
.srg-cliente-campo { flex: 1 1 320px; min-width: 240px; max-width: 460px; }
.srg-cliente-campo .srg-label { display: block; margin-bottom: .25rem; }
.srg-cliente-nota { font-size: var(--font-size-sm, .875rem); font-weight: 600;
  padding: .35rem .7rem; border-radius: var(--radius-md, .5rem); }
.srg-cliente-nota.is-ok { color: var(--srg-success, #10b981);
  background: rgba(16,185,129,.12); }
.srg-cliente-nota.is-warn { color: var(--srg-warning, #f59e0b);
  background: rgba(245,158,11,.12); }

/* Indicador de "ya guardado" en el pie del configurador. */
.srg-guardado { display: flex; align-items: center; gap: .5rem; }
.srg-guardado-cod { font-weight: 700; font-family: ui-monospace, Consolas, monospace;
  font-size: var(--font-size-sm, .875rem);
  color: var(--srg-success, #10b981);
  background: rgba(16,185,129,.12);
  padding: .25rem .55rem; border-radius: var(--radius-md, .5rem); }
.srg-guardado-txt { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); }

/* --- linea en edicion ------------------------------------------------
   Al pulsar una linea sus valores suben al formulario de arriba. Hay que
   ver CUAL se esta modificando, o el usuario acepta creyendo que añade. */
.srg-linea { cursor: pointer; }
.srg-linea:hover { background: var(--color-bg-hover, #334155); }
.srg-linea.is-editando {
  background: var(--color-accent-subtle, rgba(99,102,241,.15));
  box-shadow: inset 3px 0 0 var(--color-accent, #6366f1);
}
/* El aspa de borrar no hereda el cursor de la fila: son acciones distintas. */
.srg-linea-del { cursor: pointer; }
/* Aviso en la cabecera del bloque que se esta editando. */
.srg-editando-tag {
  font-size: var(--font-size-xs, .75rem); font-weight: 700;
  text-transform: uppercase; letter-spacing: .04em;
  color: var(--color-accent, #6366f1);
  background: var(--color-accent-subtle, rgba(99,102,241,.15));
  padding: .15rem .5rem; border-radius: var(--radius-sm, .25rem);
  margin-right: .5rem;
}

/* --- configuracion del modulo (Ajustes) ------------------------------ */
.srg-cfg-fila { display: flex; align-items: center; gap: var(--space-md, 1rem);
  padding: .7rem 0; flex-wrap: wrap;
  border-bottom: 1px solid var(--color-border, #334155); }
.srg-cfg-fila:last-child { border-bottom: none; }
.srg-cfg-txt { flex: 1 1 280px; min-width: 0; }
.srg-cfg-clave { font-weight: 600; font-family: ui-monospace, Consolas, monospace;
  font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-primary, #f1f5f9); }
.srg-cfg-desc { font-size: var(--font-size-sm, .875rem);
  color: var(--color-text-muted, #64748b); margin-top: .15rem; }
.srg-cfg-inp { flex: 0 1 220px; }
/* Solo el almacen sin valor se marca: es el unico cuyo hueco tiene efecto
   inmediato -- los pedidos dejan de reservar stock. */
.srg-cfg-aviso { font-family: inherit; font-weight: 700;
  font-size: var(--font-size-xs, .75rem); text-transform: uppercase;
  letter-spacing: .04em; color: var(--srg-warning, #f59e0b);
  background: rgba(245,158,11,.12); padding: .1rem .4rem;
  border-radius: var(--radius-sm, .25rem); margin-left: .4rem; }
.srg-cfg-fila.is-falta .srg-cfg-inp { border-color: var(--srg-warning, #f59e0b); }

/* Cuerpo del configurador: lo unico que se repinta en cada recalculo. */
.srg-cuerpo { flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; }

/* Trabajo sin cliente: se marca, no se deja la celda en blanco -- una
   celda vacia se lee como "no me he fijado", y aqui significa que se
   cotizo a tarifa general. */
.srg-sin-cliente { color: var(--srg-warning, #f59e0b);
  font-size: var(--font-size-sm, .875rem); font-style: italic; }
/* Cliente en la tarjeta del tablero: lo primero que se mira al cogerla. */
.srg-tarj-cli { font-size: var(--font-size-sm, .875rem); font-weight: 600;
  color: var(--color-accent, #6366f1); margin-bottom: .15rem;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Envoltorio interno de las cuatro vistas del ciclo (serigrafia_views.js:560).
   NO lleva padding, ni overflow, ni alto propio: de eso ya se encarga el
   contenedor de montaje .srg-root.srg-scroll (serigrafia_views.js:713), que
   es quien tiene el 100% de alto real dentro de #formarea. Repetirlo aqui
   daba el margen dos veces y anidaba un segundo scroller dentro del primero:
   la rueda movia la vista interior y la barra de fuera nunca llegaba al pie.
   Ademas este nodo se repinta en cada render(), asi que dejar el scroll en el
   de fuera —estable— evita que la lista salte arriba tras cada recarga. */
/* === CABECERA FIJA + SCROLL SOLO DEL CONTENIDO ========================
   Regla del ERP: en toda vista con lista, el scroll vertical es SOLO del
   contenido. La cabecera de pantalla, su boton de Actualizar y la toolbar
   se quedan donde estan. Con muchas filas, si scrollea la vista entera se
   pierden de vista el titulo y las acciones.
   ---------------------------------------------------------------------- */
.srg-view {
  display: flex; flex-direction: column;
  height: 100%; min-width: 0; min-height: 0;
  /* overflow hidden en el contenedor: el que scrollea es el cuerpo. Sin
     esto el scroll sube al padre y se lleva la cabecera con el. */
  overflow: hidden;
  padding: var(--space-lg, 1.5rem); box-sizing: border-box;
}
.srg-view > .srg-header { flex: 0 0 auto; }
/* Lo unico que se desplaza. min-height:0 es imprescindible: sin el, un hijo
   flex no encoge por debajo de su contenido y el scroll nunca aparece. */
.srg-view-body {
  flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden;
  /* Aire a la derecha para que la barra de scroll no pise el contenido. */
  padding-right: .25rem;
}

/* ---------------------------------------------------------------------
   Lista con cabecera y pie fijos — DIRECTIVA: solo ruedan las filas
   ---------------------------------------------------------------------
   En la vista de trabajos el cuerpo NO scrollea: reparte su alto entre la
   toolbar (fija), las filas (con scroll) y la paginacion (fija). Si scrollease
   el cuerpo, al bajar por la lista se perderian los filtros, los nombres de
   columna y los botones de pagina, que es justo lo que hay que mirar mientras
   se busca algo.

   `min-height:0` en cada nivel es imprescindible: sin el, un hijo flex no
   encoge por debajo de su contenido y el scroll no aparece nunca (Chrome). */
.srg-view-body.is-fijo {
  overflow: hidden; padding-right: 0;
  display: flex; flex-direction: column; gap: .6rem;
}
.srg-lista {
  flex: 1 1 auto; min-height: 0;
  display: flex; flex-direction: column;
  background: var(--color-bg-card, var(--color-bg-secondary, #1e293b));
  border: 1px solid var(--color-border, #334155);
  border-radius: var(--srg-radius, .75rem);
  overflow: hidden;
}
.srg-lista-top { flex: 0 0 auto; padding: .7rem .8rem 0; }
/* La toolbar dentro de la lista ya no necesita separacion propia: la da el
   padding del bloque. */
.srg-lista-top .srg-toolbar { margin-bottom: .7rem; }
.srg-lista-body {
  flex: 1 1 auto; min-height: 0;
  overflow-y: auto; overflow-x: auto;   /* x: en pantallas estrechas */
  padding: 0 .8rem;
}
.srg-lista-pie {
  flex: 0 0 auto; padding: .55rem .8rem;
  border-top: 1px solid var(--color-border, #334155);
  background: var(--color-bg-secondary, #1e293b);
}
/* La ficha y el historial se despliegan DEBAJO de la lista. Se les acota el
   alto y se les da scroll propio: sin esto, abrir una ficha larga empujaria la
   lista fuera de la pantalla. */
.srg-view-body.is-fijo > #srg-ficha:not(:empty),
.srg-view-body.is-fijo > #srg-hist:not(:empty) {
  flex: 0 0 auto; max-height: 45%; overflow-y: auto;
}

/* --- paginacion canonica del ERP ------------------------------------- */
/* Modelo del Diario de Contabilidad: prev / «Pág X de Y» / next / tamaño.
   Sin ventana de botones numerados ni primera-ultima. */
.srg-pagination { display: flex; align-items: center; justify-content: center;
  gap: .5rem; flex-wrap: wrap; font-size: var(--font-size-sm, .875rem); }
.srg-pg-btn {
  border: 1px solid var(--color-border, #334155);
  border-radius: var(--radius-md, .5rem);
  background: var(--color-bg-hover, #334155);
  color: var(--color-text-primary, #f1f5f9);
  font-family: inherit; font-size: var(--font-size-sm, .875rem);
  padding: .3rem .75rem; cursor: pointer;
  transition: var(--transition, all .15s ease);
}
.srg-pg-btn:hover:not(:disabled) { border-color: var(--color-accent, #6366f1); }
.srg-pg-btn:disabled { opacity: .35; cursor: not-allowed; }
.srg-pg-info { color: var(--color-text-muted, #64748b); }
.srg-pg-info b { color: var(--color-accent, #6366f1); }
.srg-pg-size {
  border: 1px solid var(--color-border, #334155);
  border-radius: var(--radius-md, .5rem);
  background: var(--color-bg-input, var(--color-bg-secondary, #0f172a));
  color: var(--color-text-primary, #f1f5f9);
  font-family: inherit; font-size: var(--font-size-sm, .875rem);
  padding: .3rem .4rem;
}

/* --- Ajustes: secciones del catalogo por tecnica ---------------------- */
/* Separan «lo que ofreces» (editable) de «como se calcula» (piezas del motor).
   La separacion visual es la mitad del arreglo: antes iban las 33 filas
   juntas con el rol en crudo y parecia todo lo mismo. */
.srg-aj-sec { margin-bottom: var(--space-md, 1rem); }
.srg-aj-sec:last-child { margin-bottom: 0; }
.srg-aj-sec-tit {
  display: flex; align-items: center; gap: .5rem; flex-wrap: wrap;
  margin-bottom: .5rem; padding-bottom: .35rem;
  border-bottom: 1px solid var(--color-border, #334155);
  font-size: var(--font-size-base, 1rem); font-weight: 700;
}
/* El boton de añadir a la derecha del titulo de su seccion. */
.srg-aj-sec-tit .srg-btn { margin-left: auto; }

/* Requisitos numerados de la seccion de pantallas/picajes. */
.srg-reqs { margin: .3rem 0 .7rem; padding-left: 1.2rem;
  color: var(--color-text-muted, #64748b);
  font-size: var(--font-size-sm, .875rem); line-height: 1.6; }
.srg-reqs li { margin-bottom: .3rem; }
.srg-reqs strong { color: var(--color-text-primary, #f1f5f9); }

/* Ancho y alto juntos: son un solo dato (el formato) partido en dos campos. */
.srg-medidas { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: .5rem; }

/* --- interruptor (ajustes booleanos) ---------------------------------- */
/* Un ajuste de si/no se enciende, no se teclea. Antes eran campos de texto
   donde habia que escribir 0 o 1. Mismo patron de track+thumb que el switch
   del CRM, para que el ERP no tenga dos interruptores distintos. */
.srg-switch { position: relative; display: inline-flex; align-items: center;
  flex: 0 0 auto; cursor: pointer; }
.srg-switch input { position: absolute; opacity: 0; width: 0; height: 0; }
.srg-switch-track {
  width: 42px; height: 24px; border-radius: 999px;
  background: var(--color-bg-hover, #334155);
  border: 1px solid var(--color-border, #334155);
  transition: var(--transition, all .18s ease);
  display: inline-block; position: relative;
}
.srg-switch-thumb {
  position: absolute; top: 2px; left: 2px;
  width: 18px; height: 18px; border-radius: 50%;
  background: var(--color-text-muted, #64748b);
  transition: var(--transition, all .18s ease);
}
.srg-switch input:checked + .srg-switch-track {
  background: color-mix(in srgb, var(--srg-success) 35%, transparent);
  border-color: var(--srg-success);
}
.srg-switch input:checked + .srg-switch-track .srg-switch-thumb {
  left: 22px; background: var(--srg-success);
}
.srg-switch input:focus-visible + .srg-switch-track {
  outline: 2px solid var(--color-accent, #6366f1); outline-offset: 2px;
}

/* --- filtro de fechas de la toolbar ---------------------------------- */
.srg-fechas { display: flex; align-items: center; gap: .35rem; flex-wrap: wrap; }
.srg-fechas .srg-label { margin: 0; white-space: nowrap; }
.srg-input-fecha { width: auto; min-width: 140px; }

/* El icono de la nav respira igual que en el resto del ERP. */
.srg-nav-item { gap: .45rem; padding: 1.1rem .5rem; }

/* --- resto de clases que el HTML usaba sin definicion ----------------- */
.srg-mono { font-variant-numeric: tabular-nums;
  font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
  font-size: var(--font-size-sm, .875rem); }
.srg-total { font-weight: 700; font-variant-numeric: tabular-nums;
  color: var(--color-text-primary, #f1f5f9); }
.srg-check { display: flex; align-items: center; gap: .5rem; cursor: pointer;
  font-size: var(--font-size-base, 1rem); color: var(--color-text-secondary, #94a3b8); }
.srg-check input { width: 16px; height: 16px; accent-color: var(--color-accent, #6366f1);
  cursor: pointer; margin: 0; }
/* Cabecera de categoria DENTRO de la lista, no en el pie. Va acotada a
   .srg-sl-body a proposito: en el pie del desplegable (.srg-sl-actions) el
   boton "Gestionar en Almacen" lleva tambien esta clase, pero solo como
   gancho de click (serigrafia_engine.js:181 y :185). Sin acotar, el boton
   heredaba el aspecto de cabecera —mayusculas, gris, fondo del pie— y
   dejaba de parecer pulsable; asi conserva el de .srg-btn/.srg-btn-sm. */
.srg-sl-body .srg-sl-cat { padding: .45rem .75rem; font-size: var(--font-size-xs, .75rem);
  font-weight: 700; text-transform: uppercase; letter-spacing: .05em;
  color: var(--color-text-muted, #64748b);
  background: var(--color-bg-secondary, #1e293b);
  border-top: 1px solid var(--color-border, #334155); }
.srg-sl-body .srg-sl-cat:first-child { border-top: none; }
.srg-reab { display: flex; flex-direction: column; gap: .6rem; }

/* Aspa de borrado del buscador: superpuesta al input, no en el flujo. */
.srg-input-clear { position: absolute; right: .5rem; top: 50%;
  transform: translateY(-50%); background: transparent; border: none;
  color: var(--color-text-muted, #64748b); cursor: pointer; padding: .25rem;
  line-height: 1; border-radius: var(--radius-sm, .25rem); }
.srg-input-clear:hover { color: var(--color-text-primary, #f1f5f9);
  background: var(--color-bg-hover, #334155); }
