/* ============================================================
   SALTIA · Sistema de diseño
   saltia.css — hoja de estilo compartida para todas las apps
   ------------------------------------------------------------
   Uso: <link rel="stylesheet" href="saltia.css">
   Documentación viva: estilo.html
   ============================================================ */

/* ---- 1. TOKENS (variables de marca) ---- */
:root{
  /* Color — modo claro */
  --s-ink:        #111111;   /* texto y trazo principal */
  --s-ink-soft:   #3a3a3a;   /* texto secundario */
  --s-muted:      #8a8a8a;   /* etiquetas, metadatos */
  --s-paper:      #ffffff;   /* fondo principal */
  --s-paper-2:    #f6f6f4;   /* fondo alterno / hover */
  --s-line:       #e4e4e0;   /* bordes y separadores */

  /* Estado (uso discreto) */
  --s-ok:         #2c6e3f;
  --s-err:        #a8442a;

  /* Tipografía */
  --s-font-display: 'Spectral', Georgia, serif;     /* títulos, editorial */
  --s-font-body:    'Jost', system-ui, sans-serif;  /* texto, interfaz */

  /* Escala tipográfica */
  --s-text-xs:   12px;
  --s-text-sm:   14px;
  --s-text-base: 16px;
  --s-text-lg:   20px;
  --s-text-xl:   clamp(26px, 3vw, 34px);
  --s-text-2xl:  clamp(30px, 4.5vw, 48px);
  --s-text-3xl:  clamp(36px, 6vw, 72px);

  /* Espaciado (múltiplos de 4) */
  --s-space-1: 4px;  --s-space-2: 8px;  --s-space-3: 12px;
  --s-space-4: 16px; --s-space-6: 24px; --s-space-8: 32px;
  --s-space-12: 48px; --s-space-16: 64px; --s-space-20: 80px;

  /* Otros */
  --s-radius: 2px;
  --s-maxw:   1180px;
  --s-track:  .08em;   /* letter-spacing base interfaz */
  --s-track-wide: .3em;
  --s-transition: .3s ease;
}

/* ---- 2. RESET LIGERO ---- */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  font-family:var(--s-font-body);
  font-weight:300;
  color:var(--s-ink);
  background:var(--s-paper);
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
}

/* ---- 3. LOGO ---- */
/* Uso: <span class="s-logo"><svg height="38" width="154" viewBox="0 0 336 83">…</svg></span>
   Importante: el <svg> debe llevar height (y width) explícitos.
   Para fondo oscuro: <span class="s-logo s-logo--light">…</span>  */
.s-logo{display:inline-block;line-height:0}
.s-logo svg{display:block}
.s-logo path{fill:var(--s-ink);transition:fill var(--s-transition)}
.s-logo--light path{fill:var(--s-paper)}

/* ---- 4. TIPOGRAFÍA ---- */
.s-display{font-family:var(--s-font-display);font-weight:300;letter-spacing:-.01em;line-height:1.1}
.s-display em{font-style:italic}
.s-kicker{
  font-size:var(--s-text-xs);letter-spacing:var(--s-track-wide);
  text-transform:uppercase;color:var(--s-muted);font-weight:400;
}
.s-h1{font-family:var(--s-font-display);font-weight:300;font-size:var(--s-text-3xl);line-height:1.04;letter-spacing:-.015em}
.s-h2{font-family:var(--s-font-display);font-weight:300;font-size:var(--s-text-2xl);line-height:1.12}
.s-h3{font-family:var(--s-font-body);font-weight:400;font-size:var(--s-text-lg);letter-spacing:.01em}
.s-lead{font-size:var(--s-text-lg);color:var(--s-ink-soft);font-weight:300}
.s-muted{color:var(--s-muted)}

/* ---- 5. LAYOUT ---- */
.s-wrap{max-width:var(--s-maxw);margin:0 auto;padding:0 var(--s-space-8)}
.s-section{padding:var(--s-space-20) 0}
@media(max-width:860px){.s-wrap{padding:0 var(--s-space-6)}}

/* ---- 6. CABECERA DE APP ---- */
.s-appbar{
  display:flex;align-items:center;justify-content:space-between;
  padding:var(--s-space-6) var(--s-space-8);
  border-bottom:1px solid var(--s-line);
}
.s-appbar__left{display:flex;align-items:center;gap:var(--s-space-6)}
.s-appbar__sep{width:1px;height:22px;background:var(--s-line)}
.s-appbar__ctx{font-size:var(--s-text-xs);letter-spacing:.22em;text-transform:uppercase;color:var(--s-muted)}
.s-appbar__right{display:flex;align-items:center;gap:var(--s-space-6)}
.s-appbar__user{font-size:var(--s-text-sm);color:var(--s-ink-soft)}
.s-appbar__user strong{font-weight:500;color:var(--s-ink)}
@media(max-width:600px){
  .s-appbar{padding:var(--s-space-4) var(--s-space-6);flex-wrap:wrap;gap:var(--s-space-3)}
  .s-appbar__user{display:none}
}

/* ---- 7. BOTONES ---- */
.s-btn{
  display:inline-flex;align-items:center;gap:var(--s-space-2);
  font-family:var(--s-font-body);font-size:var(--s-text-xs);font-weight:400;
  letter-spacing:.12em;text-transform:uppercase;
  padding:var(--s-space-4) var(--s-space-8);
  border:1px solid var(--s-ink);background:var(--s-ink);color:var(--s-paper);
  cursor:pointer;text-decoration:none;transition:var(--s-transition);
  border-radius:var(--s-radius);white-space:nowrap;
}
.s-btn:hover{background:transparent;color:var(--s-ink)}
.s-btn--ghost{background:transparent;color:var(--s-ink);border-color:var(--s-line)}
.s-btn--ghost:hover{border-color:var(--s-ink);background:transparent}
.s-btn--small{padding:var(--s-space-2) var(--s-space-4);font-size:11px;letter-spacing:.1em}
.s-btn:disabled{opacity:.5;cursor:not-allowed}

/* ---- 8. CAMPOS DE FORMULARIO ---- */
.s-field{margin-bottom:var(--s-space-6)}
.s-field__label{
  display:block;font-size:var(--s-text-xs);letter-spacing:.16em;
  text-transform:uppercase;color:var(--s-muted);margin-bottom:var(--s-space-2);
}
.s-field__input,.s-field__textarea,.s-field__select{
  width:100%;background:transparent;border:none;border-bottom:1px solid var(--s-line);
  color:var(--s-ink);font-family:inherit;font-size:var(--s-text-base);
  padding:var(--s-space-2) 0;font-weight:300;transition:border-color var(--s-transition);
}
.s-field__input:focus,.s-field__textarea:focus,.s-field__select:focus{
  outline:none;border-bottom-color:var(--s-ink);
}
.s-field__textarea{resize:vertical;min-height:80px}
.s-field__input[readonly]{color:var(--s-muted);cursor:not-allowed}

/* ---- 9. TARJETAS ---- */
.s-card{
  background:var(--s-paper);border:1px solid var(--s-line);
  padding:var(--s-space-8);transition:background var(--s-transition);
  text-decoration:none;color:var(--s-ink);display:block;
}
.s-card--link:hover{background:var(--s-paper-2)}
.s-card__tag{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--s-muted)}
.s-card__title{font-family:var(--s-font-display);font-weight:400;font-size:var(--s-text-xl);letter-spacing:.04em;margin:var(--s-space-6) 0 var(--s-space-2)}
.s-card__desc{font-size:var(--s-text-sm);color:var(--s-ink-soft);line-height:1.55}

/* Rejilla de tarjetas (intranet, listados) */
.s-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  gap:1px;background:var(--s-line);border:1px solid var(--s-line);
}
.s-grid .s-card{border:none}

/* ---- 10. UTILIDADES ---- */
.s-note{margin-top:var(--s-space-4);font-size:var(--s-text-sm);min-height:20px}
.s-note--ok{color:var(--s-ok)}
.s-note--err{color:var(--s-err)}
.s-divider{width:40px;height:1px;background:var(--s-line);margin:var(--s-space-12) auto}
.s-footer{border-top:1px solid var(--s-line);padding:var(--s-space-12) 0;text-align:center;color:var(--s-muted);font-size:var(--s-text-sm)}

/* ---- 11. FUENTES (importación) ---- */
/* Añade en el <head> de cada página:
   <link rel="preconnect" href="https://fonts.googleapis.com">
   <link href="https://fonts.googleapis.com/css2?family=Jost:wght@300;400;500&family=Spectral:ital,wght@0,300;0,400;1,300&display=swap" rel="stylesheet">
*/

/* ============================================================
   12. MÓDULO DEMANDIA  (namespace .dem-*  ·  scope #demRoot)
   Estilos del módulo de demanda. Aislados del monolito STOCKIA.
   ============================================================ */
/* overflow:auto en AMBOS ejes: la tabla de pedidos (columnas de ancho fijo) puede ser más ancha
   que el hueco que deja el rail derecho en ventanas estrechas; así scrollea horizontalmente el
   contenedor de la vista (no la tabla), sin colarse bajo el rail ni romper el <thead> sticky
   (que se sigue fijando respecto a #demRoot). En pantallas anchas el contenido cabe y no hay barra. */
/* SIN padding-top: el espacio superior va en .dem-wrap (scrollea con el contenido) para que el
   <thead> sticky se fije a ras del borde de #demRoot. Con padding-top aquí, el sticky quedaba ese
   hueco por debajo y se veían pasar filas por encima de la cabecera. */
#demRoot{flex:1;min-height:0;overflow:auto;padding:0 var(--s-space-8) var(--s-space-16)}
@media(max-width:860px){#demRoot{padding:0 var(--s-space-4) var(--s-space-12)}}
.dem-wrap{max-width:1320px;margin:0 auto;padding-top:var(--s-space-8)}
@media(max-width:860px){.dem-wrap{padding-top:var(--s-space-6)}}

/* Cabecera de vista */
.dem-h{font-family:var(--s-font-display);font-weight:300;font-size:var(--s-text-xl);letter-spacing:.01em;margin-bottom:var(--s-space-6);display:flex;align-items:baseline;gap:var(--s-space-3)}
.dem-h__sub{font-family:var(--s-font-body);font-size:var(--s-text-xs);letter-spacing:.16em;text-transform:uppercase;color:var(--s-muted)}

/* Helpers genéricos (scope para no colisionar con STOCKIA) */
#demRoot .r{text-align:right;font-variant-numeric:tabular-nums}
#demRoot .mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px}
#demRoot a{color:var(--s-ink);text-decoration:none;border-bottom:1px solid var(--s-line)}
#demRoot a:hover{border-bottom-color:var(--s-ink)}
.dem-muted{color:var(--s-muted)}
.dem-strong{font-weight:500}
.dem-desc{color:var(--s-ink-soft);font-size:12px}

/* KPIs */
.dem-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1px;background:var(--s-line);border:1px solid var(--s-line);margin-bottom:var(--s-space-8)}
.dem-kpi{background:var(--s-paper);padding:var(--s-space-4) var(--s-space-6)}
.dem-kpi__v{font-family:var(--s-font-display);font-size:var(--s-text-2xl);font-weight:300;line-height:1.05;font-variant-numeric:tabular-nums}
.dem-kpi__l{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--s-muted);margin-top:var(--s-space-1)}
.dem-kpi__s{font-size:11px;color:var(--s-muted)}

/* Columnas / tarjetas */
.dem-cols{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-space-6)}
@media(max-width:980px){.dem-cols{grid-template-columns:1fr}}
.dem-card{border:1px solid transparent;background:var(--s-paper)}
.dem-card__h{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--s-muted);padding:var(--s-space-3) var(--s-space-4);border-bottom:1px solid transparent}

/* Pedidos: tarjetas-KPI clicables (filtros rápidos marcables y acumulables).
   Mismo look que las tarjetas de la app de Gastos (.stat-c): barra superior al activarse.
   auto-fit (no auto-fill) + minmax: las tarjetas se reparten flexibles todo el ancho del frame
   (llegan al borde derecho, ~5 por fila a ancho completo) sin poder crecer más allá del máximo,
   así en monitores muy anchos no se pierde la separación visual. */
.dem-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:15px;margin:var(--s-space-4) 0;background:none;border:0}
.dem-kpi{position:relative;overflow:hidden;display:flex;flex-direction:column;background:var(--s-paper);border:1px solid transparent;padding:19px 19px 17px;cursor:pointer;text-align:left;font-family:var(--s-font-body);transition:background .15s;min-height:133px}
.dem-kpi:hover{background:var(--s-paper-2)}
.dem-kpi::after{content:'';position:absolute;top:0;left:0;bottom:0;width:3px;background:var(--s-ink);opacity:0;transition:opacity .15s}
.dem-kpi.is-active::after{opacity:1}
.dem-kpi__l{font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--s-ink);font-weight:500;margin-bottom:7px}
.dem-kpi__n{font-family:var(--s-font-display);font-size:30px;font-weight:300;line-height:1;letter-spacing:-.5px;color:var(--s-ink)}
.dem-kpi__s{font-size:11px;color:var(--s-muted);font-weight:300;margin-top:7px}
.dem-kpi__s + .dem-kpi__s{margin-top:2px}
/* No servidos / Con retraso / No cumple: valor y litros en rojo cuando hay >0 (alerta real) */
.dem-kpi__v--warn{color:var(--s-err) !important}
.dem-kpis--warn{gap:1px;background:var(--s-line);border:1px solid var(--s-line);margin-top:var(--s-space-4)}
.dem-kpis--warn .dem-kpi{min-height:auto;cursor:default;padding:12px 16px}
.dem-kpis--warn .dem-kpi:hover{background:var(--s-paper)}
.dem-kpis--warn .dem-kpi::after{display:none}
.dem-kpis--warn .dem-kpi__n{font-size:20px;color:var(--s-muted)}
.dem-kpis--warn .dem-kpi__l{color:var(--s-muted);font-weight:400}
/* Tarjetas «periodo vs periodo» (Hoy, Ayer, Esta semana…): nº de pedidos grande con su
   comparativa EN LÍNEA, la de litros en su propia fila (misma tipografía, muy ligera), y el
   subtítulo del periodo al pie en un renglón truncado (no ajusta a 2 líneas). Todas las
   tarjetas (periodo o no) comparten min-height en .dem-kpi, así quedan siempre a la misma altura. */
.dem-kpi__n .dem-vs,.dem-kpi__n .dem-vs__ref{margin-left:2px}
.dem-kpi__foot{display:block;font-weight:300;letter-spacing:normal;text-transform:none;font-size:10px;color:var(--s-muted);opacity:.8;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Insignia «vs»: los valores y el "vs" en gris claro neutro; el color (verde/rojo) va SOLO en
   la flecha+porcentaje (.dem-vs__tail). Flecha grande pero fina — diagonal si sube/baja. */
.dem-vs{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:3px;font-size:11px;font-weight:300;color:var(--s-muted)}
.dem-vs__ref{font-size:11px;font-weight:300;color:var(--s-muted) !important;opacity:.8}
.dem-vs__tail{display:inline-flex;align-items:baseline;gap:3px}
.dem-vs__arrow{font-size:16px;font-weight:200;line-height:1}
.dem-vs--up{color:#2c6e3f}
.dem-vs--down{color:#a8442a}
.dem-vs--flat{color:var(--s-muted)}
/* Cuota ("20 vs 100 20%", sin flecha): el "vs base" siempre en gris; el % pasa a rojo cuando el
   valor principal también lo está (dem-vs__pct--warn). La unidad de litros (mil L / mill L)
   NUNCA se colorea, aquí ni en ningún otro sitio. */
.dem-vs__pct{font-size:11px;font-weight:300;color:var(--s-muted) !important;opacity:.8}
.dem-vs__pct--warn{color:var(--s-err) !important;opacity:1}
.dem-kpi__unit{font-size:11px;font-weight:300;color:var(--s-muted) !important}

/* Tablas */
.dem-tablewrap{border:1px solid var(--s-line)}
.dem-table{width:100%;border-collapse:collapse;font-size:13px}
.dem-table th{position:sticky;top:0;background:var(--s-paper-2);font-weight:400;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--s-muted);text-align:left;padding:var(--s-space-2) var(--s-space-3);border-bottom:1px solid var(--s-line);white-space:nowrap;z-index:2}
.dem-table td{padding:var(--s-space-2) var(--s-space-3);border-bottom:1px solid var(--s-line);vertical-align:top}
.dem-table tbody tr:hover{background:var(--s-paper-2)}
.dem-card .dem-table th{position:static}

/* Rejilla semana×artículo (Previsiones / Compensado) */
.dem-grid td,.dem-grid th{white-space:nowrap}
.dem-grid .sticky{position:sticky;left:0;background:var(--s-paper);z-index:1;min-width:240px;max-width:240px;overflow:hidden;text-overflow:ellipsis;border-right:1px solid var(--s-line)}
.dem-grid th.sticky{z-index:3;background:var(--s-paper-2)}
.dem-grid tbody tr:hover .sticky{background:var(--s-paper-2)}

/* Barra de progreso en celdas */
.dem-bar{height:3px;background:var(--s-paper-2);margin-top:3px;border-radius:2px;overflow:hidden}
.dem-bar span{display:block;height:100%;background:var(--s-ink-soft)}

/* Toolbar / controles */
.dem-toolbar{display:flex;align-items:center;gap:var(--s-space-3);flex-wrap:wrap;margin-bottom:var(--s-space-4)}
/* Ocultado de los toolbars de vista (buscador/filtro/contador/selector de fecha) UNIFICADO
   en operaciones: la clase .dem-offstage va en el propio .dem-toolbar (y en #demPedDateSel);
   al mover un control al panel (reparent) escapa del .dem-offstage y recupera visibilidad.
   El marcador #demPedTipoSel es un <span hidden> vacío (no necesita regla propia). */
/* Los chips (#demPedChips) NO se ocultan: index.php los reloca a la ranura fija del menú
   derecho (navRightChips). El trigger de ayuda solo abre desde el menú derecho. */
#demRoot .dem-clhelp-trigger{display:none}
.dem-input{flex:0 1 320px;background:transparent;border:1px solid var(--s-line);border-radius:var(--s-radius);padding:var(--s-space-2) var(--s-space-3);font-family:inherit;font-size:13px;color:var(--s-ink)}
.dem-input:focus{outline:none;border-color:var(--s-ink)}
/* Aspa de borrar dentro de los buscadores (type=search): solo aparece cuando hay texto.
   Sustituimos el control nativo por un aspa propia, coloreada con las variables del tema. */
input[type=search].dem-input,
.dem-menu__field input[type=search]{-webkit-appearance:none;appearance:none}
input[type=search].dem-input::-webkit-search-cancel-button,
.dem-menu__field input[type=search]::-webkit-search-cancel-button{
  -webkit-appearance:none;appearance:none;width:13px;height:13px;margin-left:6px;cursor:pointer;
  background-color:var(--s-muted);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 6l12 12M18 6L6 18' stroke='black' stroke-width='2.5' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 6l12 12M18 6L6 18' stroke='black' stroke-width='2.5' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat;
}
input[type=search].dem-input::-webkit-search-cancel-button:hover,
.dem-menu__field input[type=search]::-webkit-search-cancel-button:hover{background-color:var(--s-ink)}
.dem-btn{display:inline-flex;align-items:center;gap:6px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:var(--s-space-2) var(--s-space-4);border:1px solid var(--s-line);background:transparent;color:var(--s-ink);cursor:pointer;border-radius:var(--s-radius);transition:var(--s-transition)}
.dem-btn:hover{border-color:var(--s-ink)}
.dem-btn--primary{background:var(--s-ink);color:var(--s-paper);border-color:var(--s-ink)}
.dem-btn--primary:hover{background:transparent;color:var(--s-ink)}

/* Etiquetas / tags */
.dem-tag{display:inline-block;font-size:10px;letter-spacing:.08em;text-transform:uppercase;padding:1px 6px;border:1px solid var(--s-line);border-radius:10px;color:var(--s-muted)}
.dem-tag--ok{color:var(--s-ok);border-color:var(--s-ok)}
.dem-tag--late{color:var(--s-err);border-color:var(--s-err)}
/* Fecha centinela 01/01/2900 (sin fecha real) resaltada en rojo */
.dem-date-warn{color:var(--s-err);font-weight:500}
/* KPI de aviso (p.ej. pedidos sin fecha real) */
.dem-kpi--warn .dem-kpi__v{color:var(--s-err)}
.dem-kpi--link{cursor:pointer;transition:background .12s}
.dem-kpi--link:hover{background:var(--s-paper-2)}
/* Clasificación ABC · XYZ */
.dem-clsec>.dem-card__h{margin-bottom:var(--s-space-3)}
.dem-cl-matrix{display:inline-block;margin-bottom:var(--s-space-4)}
.dem-clmatrix{width:auto}
.dem-clmatrix th{position:static;background:transparent;font-weight:500;color:var(--s-muted);text-align:center}
.dem-clmatrix td,.dem-clmatrix th{padding:4px 12px}
.dem-cls{display:inline-block;min-width:18px;text-align:center;font-weight:600;border-radius:4px;padding:0 6px;border:1px solid var(--s-line)}
.dem-abc--A{color:var(--s-ok);border-color:var(--s-ok)}
.dem-abc--B{color:#9a6a00;border-color:#d8b259}
.dem-abc--C{color:var(--s-muted)}
.dem-xyz--X{color:var(--s-ok);border-color:var(--s-ok)}
.dem-xyz--Y{color:#9a6a00;border-color:#d8b259}
.dem-xyz--Z{color:var(--s-err);border-color:var(--s-err)}
/* Clasificación: estandarizada con Pedidos — la vista NO scrollea por dentro; el scroll es
   el de #demRoot (borde derecho de la ventana). Las matrices scrollean con el contenido y la
   cabecera de la tabla (thead) se queda pegada arriba (sticky top:0, igual que .dem-table th). */
.dem-clsec-head{background:var(--s-paper);padding-bottom:var(--s-space-2);border-bottom:1px solid var(--s-line);margin-bottom:var(--s-space-4)}
/* Toolbar (buscador + Filtrar) oculto en central vía .dem-offstage en el propio .dem-toolbar */
/* Sin toolbar visible (solo chips), no dejar hueco muerto encima de las matrices */
.dem-clas>.dem-toolbar:empty,.dem-clas>.dem-toolbar{margin-bottom:0}
.dem-clcell.is-click{cursor:pointer}
.dem-clmatrix th.dem-clhead{cursor:pointer}
.dem-clmatrix th.dem-clhead:hover{color:var(--s-ink)}
/* La matriz NO usa el hover de fila genérico (.dem-table tbody tr:hover): el resaltado
   es por celda/fila/columna y lo controla el JS con .dem-clhl */
.dem-clmatrix tbody tr:hover{background:transparent}
/* Resaltado al pasar el ratón: celda, fila o columna (lo añade/quita el JS) */
.dem-clhl{background:var(--s-paper-2)}
/* Selección activa (clic): celdas + cabecera de la fila/columna elegida */
.dem-clcell.is-active,.dem-clmatrix th.is-active{background:var(--s-ink);color:var(--s-paper)}
/* Columnas Política y Plazo carga: select con raya inferior neutra (misma estética en ambas) */
.dem-clgest{width:96px;font-family:inherit;font-size:13px;font-weight:300;padding:2px 0;border:none;border-bottom:1px solid var(--s-line);border-radius:0;background:transparent;color:var(--s-ink);cursor:pointer}
.dem-clgest:focus{outline:none;border-bottom-color:var(--s-ink)}
/* Filas de Clasificación expandibles (mismo patrón que Pedidos) + detalle */
.dem-cl-cab{cursor:pointer}
.dem-cl-detbox{display:flex;gap:var(--s-space-8);flex-wrap:wrap;align-items:flex-start;padding:var(--s-space-3) var(--s-space-4) var(--s-space-3) 32px}
.dem-cl-info{padding:0!important;flex:0 0 auto;min-width:240px}
.dem-cl-chart{flex:0 0 auto}
.dem-cl-bell{display:block}
.dem-cl-area{opacity:.12}
.dem-cl-bar{opacity:.4}
.dem-cl-hit{fill:transparent;cursor:default}
.dem-cl-bar+.dem-cl-hit:hover{cursor:default}
.dem-cl-ref{stroke-width:1;opacity:.55;fill:none}
.dem-cl-refx{stroke:var(--s-ok);stroke-dasharray:3 2}
.dem-cl-refy{stroke:#9a6a00;stroke-dasharray:3 2}
.dem-cl-reflbl{font-weight:700}
.dem-cl-reflbl--x{color:var(--s-ok)}
.dem-cl-reflbl--y{color:#9a6a00}
.dem-cl-curve{stroke-width:2;stroke-linejoin:round}
.dem-cl-axis{stroke:var(--s-line);stroke-width:1}
.dem-cl-mean{stroke:var(--s-line);stroke-width:1;stroke-dasharray:2 3}
.dem-cl-chartcap{font-size:11px;color:var(--s-muted);margin-top:2px;text-align:center;max-width:260px}
/* Fila de matrices (ABC·XYZ · Reglas · Contra stock · Contra pedido) */
.dem-clmx-row{display:flex;gap:var(--s-space-6);flex-wrap:wrap;align-items:flex-start}
.dem-clmx-title{font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--s-muted);text-align:center;margin-bottom:6px}
/* Color de las celdas de política (no aplica cuando la celda está activa/seleccionada) */
.dem-clcell.dem-pol-cs:not(.is-active){color:var(--s-ok)}
.dem-clcell.dem-pol-cp:not(.is-active){color:var(--s-err)}
.dem-clclear{font-size:11px;color:var(--s-err);text-decoration:none;border-bottom:1px solid currentColor}
/* Conmutador Envasado / Granel (solo una sección visible a la vez) */
.dem-cltoggle{display:inline-flex;border:1px solid var(--s-line);border-radius:var(--s-radius);overflow:hidden}
.dem-cltoggle__btn{font-family:inherit;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--s-muted);background:transparent;border:none;padding:var(--s-space-2) var(--s-space-4);cursor:pointer;transition:var(--s-transition)}
.dem-cltoggle__btn+.dem-cltoggle__btn{border-left:1px solid var(--s-line)}
.dem-cltoggle__btn:hover{color:var(--s-ink-soft)}
.dem-cltoggle__btn.is-active{background:var(--s-ink);color:var(--s-paper)}
/* Panel de ayuda colapsable (cerrado por defecto) — sin recuadro ni separadores */
.dem-clhelp{margin-bottom:var(--s-space-4)}
.dem-clhelp>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:var(--s-space-2);padding:var(--s-space-2) 0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--s-muted);user-select:none;transition:color var(--s-transition)}
.dem-clhelp>summary::-webkit-details-marker{display:none}
.dem-clhelp>summary:hover{color:var(--s-ink)}
.dem-clhelp>summary i{font-size:14px}
.dem-clhelp__hint{text-transform:none;letter-spacing:.02em;color:var(--s-muted)}
.dem-clhelp__body{padding:var(--s-space-1) 0 var(--s-space-2);font-size:13px;color:var(--s-ink-soft);line-height:1.7}
.dem-clhelp__body p{margin:0 0 var(--s-space-3)}
.dem-clhelp__body p:last-child{margin-bottom:0}
.dem-clhelp__body b{font-weight:500;color:var(--s-ink)}
.dem-clhelp__body b.dem-pol-cs{color:var(--s-ok)}
.dem-clhelp__body b.dem-pol-cp{color:var(--s-err)}
/* Disparador de "¿Cómo funciona Pedidos?": mismo look que el <summary> de antes, pero abre un
   overlay (como "Ver Datos") en vez de desplegar inline. */
.dem-clhelp-trigger{display:inline-flex;align-items:center;margin-bottom:var(--s-space-4);border:none;background:none;padding:var(--s-space-2) 0;font:inherit;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--s-muted);cursor:pointer;transition:color var(--s-transition)}
.dem-clhelp-trigger:hover{color:var(--s-ink)}
/* Overlay de ayuda: caja centrada en escritorio, a pantalla completa en móvil (≤768px).
   Cruz de cerrar siempre arriba a la derecha. */
.dem-help-overlay{position:fixed;inset:0;background:rgba(0,0,0,.25);z-index:200;display:flex;align-items:center;justify-content:center}
.dem-help-overlay[hidden]{display:none}
.dem-help-modal{background:var(--s-paper);border:1px solid var(--s-line);width:640px;max-width:92vw;max-height:88vh;display:flex;flex-direction:column;overflow:hidden}
.dem-help-modal__head{display:flex;align-items:center;justify-content:space-between;gap:var(--s-space-4);padding:var(--s-space-5) var(--s-space-6);border-bottom:1px solid var(--s-line);flex-shrink:0}
.dem-help-modal__head h2{margin:0;font-family:var(--s-font-body);font-weight:400;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--s-ink)}
.dem-help-modal__close{border:none;background:none;cursor:pointer;font-size:18px;line-height:1;padding:0;color:var(--s-muted);transition:color var(--s-transition)}
.dem-help-modal__close:hover{color:var(--s-ink)}
.dem-help-modal__body{flex:1;overflow-y:auto;padding:var(--s-space-5) var(--s-space-6);font-size:13px;color:var(--s-ink-soft);line-height:1.7}
.dem-help-modal__body p{margin:0 0 var(--s-space-3)}
.dem-help-modal__body p:last-child{margin-bottom:0}
.dem-help-modal__body b{font-weight:500;color:var(--s-ink)}
.dem-help-modal__body b.dem-pol-cs{color:var(--s-ok)}
.dem-help-modal__body b.dem-pol-cp{color:var(--s-err)}
/* Móvil: a pantalla completa, sin bordes ni margen — 768px es el corte usado en toda la app. */
@media(max-width:768px){
  .dem-help-modal{width:100vw;max-width:100vw;height:100vh;max-height:100vh;border:none}
}
/* Fila de cabecera seleccionada (Pedidos/Clasificación/Previsiones): marca de borde izquierdo
   persistente aunque esté colapsada + snap bajo la cabecera sticky al seleccionarla. */
.dem-ped-cab,.dem-prev-cab,.dem-cl-cab{scroll-margin-top:42px}
tr.dem-row-sel>td:first-child{box-shadow:inset 3px 0 0 0 var(--s-ink)}
tr.dem-row-sel>td{background:var(--s-paper-2)}
/* Previsiones: filas desplegables con gráfico */
.dem-prev-cab{cursor:pointer}
.dem-prev-cab:hover{background:var(--s-paper-2)}
.dem-prev-chev{font-size:13px;color:var(--s-muted);transition:transform .15s;vertical-align:-2px}
.dem-prev-open .dem-prev-chev{transform:rotate(90deg)}
.dem-prev-open>td{background:var(--s-paper-2)}
.dem-prev-detcell{padding:0!important;background:var(--s-paper-2)}
.dem-prev-grp>td{background:var(--s-paper-2);border-top:2px solid var(--s-line);padding:6px 10px;font-size:12px}
.dem-prev-grp td.sticky{background:var(--s-paper-2)}
.dem-prev-grp__n{font-weight:600;color:var(--s-ink)}
.dem-prev-grp__m{margin-left:8px;color:var(--s-muted)}
/* Fila de total general (arriba de la tabla de previsiones) */
.dem-prev-total>td{background:var(--s-paper-2);border-bottom:2px solid var(--s-line);padding:7px 10px;font-weight:600;color:var(--s-ink)}
.dem-prev-total td.sticky{background:var(--s-paper-2)}
.dem-prev-panel{padding:var(--s-space-4) var(--s-space-6)}
.dem-prev-ctrls{display:flex;align-items:center;gap:var(--s-space-4);flex-wrap:wrap;margin-bottom:var(--s-space-3)}
.dem-algo-sel{text-transform:none;letter-spacing:0;font-size:12px;max-width:none;width:auto;color:var(--s-ink);background:var(--s-paper);border:1px solid var(--s-line);border-radius:var(--s-radius);padding:4px 30px 4px 8px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center}
.dem-chart-wrap{width:100%}
.dem-chart{display:block;width:100%;height:auto}
.dem-chart-axis{stroke:var(--s-line);stroke-width:1}
.dem-chart-hist{fill:none;stroke:var(--s-ink-soft);stroke-width:1.5}
.dem-chart-proj{fill:none;stroke:var(--s-err);stroke-width:1.5;stroke-dasharray:4 3}
.dem-chart-bridge{fill:var(--s-ink)}
.dem-chart-hit{fill:transparent;cursor:pointer}
.dem-chart-cursor{stroke:var(--s-ink);stroke-width:1;stroke-dasharray:3 2;pointer-events:none}
.dem-chart-lbl{fill:var(--s-muted);font-size:11px}
/* Fila sintética CP en Previsiones (agregado Contra Pedido) */
.dem-prev-cp{background:var(--s-paper-2);cursor:default}
.dem-prev-cp td{font-style:italic}
/* Vista Error: KPIs + tablas de precisión */
.dem-err-kpis{display:flex;flex-wrap:wrap;gap:var(--s-space-3);margin:var(--s-space-4) 0}
.dem-err-kpi{flex:1 1 150px;border:1px solid transparent;border-radius:var(--s-radius);padding:var(--s-space-3) var(--s-space-4);background:var(--s-paper)}
.dem-err-kpi__v{font-size:22px;font-weight:600;line-height:1.1}
.dem-err-kpi__l{font-size:12px;color:var(--s-ink);margin-top:4px}
.dem-err-kpi__s{font-size:11px;color:var(--s-muted)}
.dem-err-sec{margin:var(--s-space-5) 0 var(--s-space-2);font-size:13px;font-weight:600;color:var(--s-ink);border-top:1px solid var(--s-line);padding-top:var(--s-space-3)}
.dem-err-tbl td,.dem-err-tbl th{padding:6px 10px}
.dem-ok{color:var(--s-ok)}
.dem-warn{color:#9a6a00}
.dem-bad{color:var(--s-err)}
.dem-chart-legend{margin-top:var(--s-space-2);font-size:12px;color:var(--s-muted);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.dem-chart-key{display:inline-block;width:14px;height:0;border-top-width:2px;border-top-style:solid;margin-right:2px}
.dem-chart-key--hist{border-top-color:var(--s-ink-soft)}
.dem-chart-key--proj{border-top-color:var(--s-err);border-top-style:dashed}
.dem-chart-key--bridge{width:8px;height:8px;border:none;border-radius:50%;background:var(--s-ink)}
/* SERVICIO · tarjetas Evolución mensual / Por cliente (gráfico de líneas OTIF) */
.dem-srvc-card{border:1px solid var(--s-line);background:var(--s-paper);padding:14px 18px 12px;margin-top:var(--s-space-8)}
.dem-srvc-card__h{font-family:var(--s-font-display);font-size:16px;font-weight:400;color:var(--s-ink);margin-bottom:var(--s-space-3)}
.dem-srvc-grid{stroke:var(--s-line);stroke-width:1}
.dem-srvc-ylbl{fill:var(--s-muted);font-size:10px}
.dem-srvc-ot{fill:none;stroke:var(--s-ok);stroke-width:1.3}
.dem-srvc-if{fill:none;stroke:var(--s-ink-soft);stroke-width:1.2;stroke-dasharray:5 3}
.dem-srvc-otif{fill:none;stroke:var(--s-ink);stroke-width:1.8}
.dem-srvc-dot--ot{fill:var(--s-ok)}
.dem-srvc-dot--if{fill:var(--s-ink-soft)}
.dem-srvc-dot--otif{fill:var(--s-ink)}
.dem-chart-key--srv-ot{border-top-color:var(--s-ok)}
.dem-chart-key--srv-if{border-top-color:var(--s-ink-soft);border-top-style:dashed}
.dem-chart-key--srv-otif{border-top-color:var(--s-ink)}
/* SERVICIO · línea de período bajo el toolbar */
.dem-srv-period{font-size:12px;color:var(--s-muted);margin:2px 0 var(--s-space-3)}
/* SERVICIO · detalle expandible de incumplimientos */
.dem-srv-row{cursor:pointer}
.dem-srv-chev{font-size:12px;color:var(--s-muted);margin-right:2px}
.dem-srv-det>td{background:var(--s-paper-2);padding:var(--s-space-4) var(--s-space-6)}
.dem-srv-detwrap{display:flex;gap:var(--s-space-8);flex-wrap:wrap;align-items:flex-start}
.dem-srv-detcol{flex:1 1 320px;min-width:280px}
.dem-srv-dett{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--s-muted);margin-bottom:var(--s-space-2)}
.dem-srv-dtbl{border-collapse:collapse;font-size:12.5px;width:100%}
.dem-srv-dtbl td,.dem-srv-dtbl th{padding:3px 10px 3px 0;border-bottom:1px dotted var(--s-line);vertical-align:top}
.dem-srv-dtbl th{font-weight:400;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--s-muted);text-align:left}
.dem-srv-dtbl .r{text-align:right;font-variant-numeric:tabular-nums}
.dem-srv-dl{color:var(--s-muted);white-space:nowrap;width:1%;padding-right:16px !important}
.dem-srv-falta td{background:rgba(168,68,42,.05)}
/* Previsiones: marca de aplicada, pie con botón y tabla de promociones */
.dem-prev-applied{color:var(--s-ok);font-size:10px;vertical-align:1px}
.dem-prev-foot{display:flex;justify-content:flex-end;margin-top:var(--s-space-4)}
.dem-promo{margin-top:var(--s-space-6);border-top:2px solid var(--s-line);padding-top:var(--s-space-5)}
.dem-promo__h{display:flex;align-items:center;justify-content:space-between;gap:var(--s-space-4);font-size:12px;color:var(--s-muted);margin-bottom:var(--s-space-2)}
.dem-promo-wrap{overflow-x:auto}
.dem-promo-tbl input.dem-promo-cell{width:56px;font:inherit;font-size:12px;text-align:right;padding:3px 4px;border:1px solid var(--s-line);border-radius:4px;background:var(--s-paper);color:var(--s-ink)}
.dem-promo-tbl input.dem-promo-name{width:120px;font-size:12px;padding:3px 6px}
.dem-promo-tbl td,.dem-promo-tbl th{padding:3px 5px}
.dem-x{border:none;background:transparent;color:var(--s-muted);cursor:pointer;font-size:16px;line-height:1}
.dem-x:hover{color:var(--s-err)}
.dem-btn--small{padding:3px 8px;font-size:12px}

/* PROMOCIONES · lista + editor con rejilla semanal (base → promoción → final) */
.dem-prev-promo{display:inline-block;font-size:9px;font-weight:700;color:var(--s-paper);background:var(--s-ink);border-radius:8px;padding:0 5px;line-height:14px;vertical-align:1px}
.dem-pro-row{cursor:pointer}
.dem-pro-row:hover td{background:var(--s-paper-2)}
.dem-pro-row--off td{color:var(--s-muted)}
.dem-pro-mode{display:inline-block;font-size:10px;letter-spacing:.05em;padding:2px 8px;border:1px solid var(--s-line);border-radius:10px;color:var(--s-ink-soft);white-space:nowrap}
.dem-pro-mode--abs{border-color:var(--s-ink);color:var(--s-ink)}
.dem-pro-mode--cli{border-style:dashed}
.dem-pro-editor{border:1px solid var(--s-line);background:var(--s-paper);padding:14px 18px 16px;margin-bottom:var(--s-space-6)}
.dem-pro-editor__head{display:flex;align-items:center;gap:10px;margin-bottom:var(--s-space-4);font-family:var(--s-font-display);font-size:16px}
.dem-pro-active{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--s-ink-soft);cursor:pointer}
.dem-pro-fields{display:flex;flex-wrap:wrap;gap:14px 18px;align-items:flex-end}
.dem-pro-field{display:flex;flex-direction:column;gap:4px;min-width:150px}
.dem-pro-field>span:first-child{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--s-muted)}
.dem-pro-pills{display:inline-flex;gap:0;border:1px solid var(--s-line);border-radius:4px;overflow:hidden;width:max-content}
.dem-pro-pill{border:none;background:transparent;font:inherit;font-size:12px;padding:5px 12px;cursor:pointer;color:var(--s-muted);border-right:1px solid var(--s-line)}
.dem-pro-pill:last-child{border-right:none}
.dem-pro-pill:hover{color:var(--s-ink)}
.dem-pro-pill.is-on{background:var(--s-ink);color:var(--s-paper)}
.dem-pro-hint{font-size:12px;color:var(--s-muted);margin:10px 0 0;font-style:italic}
.dem-pro-cliinfo{font-size:12px;color:var(--s-ink-soft);margin-top:8px;display:flex;align-items:center;gap:6px}
.dem-pro-wrap{overflow-x:auto;margin-top:var(--s-space-4)}
.dem-pro-grid td.sticky,.dem-pro-grid th.sticky{position:sticky;left:0;background:var(--s-paper);z-index:1}
.dem-pro-grid input.dem-promo-cell{width:58px}
.dem-pro-past{color:var(--s-muted);background:var(--s-paper-2)}
.dem-pro-finrow td{border-top:1px solid var(--s-line)}
.dem-pro-delta{font-size:10px;color:var(--s-ok);font-weight:400}
.dem-pro-gridfoot{display:flex;align-items:center;gap:10px;margin-top:var(--s-space-3)}
.dem-pro-gridfoot .dem-btn.is-on{background:var(--s-paper-2)}
.dem-pro-link{cursor:pointer}
.dem-pro-link:hover td{background:var(--s-paper-2)}

/* Banners */
.dem-banner{display:flex;align-items:center;gap:8px;padding:var(--s-space-3) var(--s-space-4);border:1px solid var(--s-line);border-radius:var(--s-radius);font-size:13px;margin-bottom:var(--s-space-4)}
.dem-banner--info{background:var(--s-paper-2);color:var(--s-ink-soft)}
.dem-banner--warn{background:#fbf3ef;border-color:var(--s-err);color:var(--s-err)}
.dem-banner--ok{background:#eef6f0;border-color:var(--s-ok);color:var(--s-ok)}

/* Estados vacíos / carga */
.dem-empty,.dem-loading{text-align:center;color:var(--s-muted);padding:var(--s-space-16) var(--s-space-6)}
.dem-empty i{font-size:34px;display:block;margin-bottom:var(--s-space-3);opacity:.6}
.dem-empty p{font-size:var(--s-text-sm);line-height:1.6}
.dem-loading{display:flex;align-items:center;justify-content:center;gap:8px;font-size:var(--s-text-sm)}
.dem-spin{display:inline-block;animation:demspin 1s linear infinite}
@keyframes demspin{to{transform:rotate(360deg)}}

/* Compensado: colores por fila (pedido / previsión / compensado) */
.dem-rl{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--s-muted);padding-right:var(--s-space-3)!important;white-space:nowrap}
.dem-c-ped{color:var(--s-ink-soft)}
.dem-c-prev{color:#6a5acd}
.dem-c-comp{color:var(--s-ok);font-weight:500}
.dem-grid tr.dem-grp-end td{border-bottom:2px solid var(--s-line)}
.dem-legend{font-size:11px;color:var(--s-muted);display:inline-flex;align-items:center;gap:6px}
.dem-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-left:10px;margin-right:2px;vertical-align:-1px}
.dem-dot--ped{background:var(--s-ink-soft)}
.dem-dot--prev{background:#6a5acd}
.dem-dot--comp{background:var(--s-ok)}

/* Pedidos: filas cabecera colapsables → líneas */
.dem-ped-cab{cursor:pointer}
.dem-ped-cab td{vertical-align:middle}
.dem-ped-chev{color:var(--s-muted);text-align:center;padding-left:0!important;padding-right:0!important}
.dem-ped-chev i{display:inline-block;transition:transform .15s ease}
.dem-ped-cab.dem-ped-open{background:var(--s-paper-2)}
.dem-ped-cab.dem-ped-open td{font-weight:500}
/* Barra de selección continua en el borde izquierdo del pedido abierto (cabecera + sus líneas).
   border-left (no box-shadow): queda fuera del área de contenido, así no lo tapan los fondos
   de las filas de la subtabla y se ve continuo por encima de las separaciones horizontales. */
.dem-ped-cab.dem-ped-open td:first-child,
.dem-ped-det:not([hidden])>td{border-left:3px solid var(--s-ink)}
.dem-ped-cab.dem-ped-open .dem-ped-chev{color:var(--s-ink)}
.dem-ped-cab.dem-ped-open .dem-ped-chev i{transform:rotate(90deg)}
/* Rejilla fija COMPARTIDA: cabeceras y líneas alinean Cant./Pendiente/Servido */
.dem-ped,.dem-ped-sub{table-layout:fixed}
.dem-ped-cab td,.dem-ped-sub td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Espacio bajo la última línea para separar visualmente del siguiente pedido.
   Sin border-left para que la sub-tabla tenga el MISMO ancho que la cabecera. */
.dem-ped-det>td{padding:0 0 var(--s-space-4) 0!important;background:var(--s-paper-2);border-bottom:2px solid var(--s-line)}
/* Tabla anidada de líneas: sin margen alrededor (flush con la celda de detalle) */
.dem-ped-sub{background:var(--s-paper);border:none;border-top:1px solid var(--s-line);width:100%}
.dem-ped-sub th{position:static;background:var(--s-paper-2);z-index:auto}
.dem-ped-sub tbody tr:hover{background:var(--s-paper-2)}
.dem-ped-sub tbody tr:last-child td{border-bottom:none}
/* Icono genérico (fechas / observaciones) con tooltip on-hover */
.dem-icn{color:var(--s-muted);cursor:help;font-size:13px;margin-left:4px;vertical-align:-1px}
.dem-icn:hover{color:var(--s-ink)}
.dem-icn--warn{color:var(--s-err)}
.dem-icn--warn:hover{color:var(--s-err)}
.dem-ped-datec{white-space:nowrap}
.dem-ped-obs{width:30px;text-align:center}
/* Servido de línea: etiqueta a la izquierda, icono de obs pegado a la derecha (alineado con la cabecera) */
.dem-ped-serv{display:flex;align-items:center;gap:6px}
.dem-ped-serv .dem-icn{margin-left:auto;margin-right:0}
/* Política (CS/CP) en líneas y recuento de CP en la cabecera del pedido */
#demRoot .dem-polcol{text-align:center}
.dem-pol{font-size:11px;letter-spacing:.06em;font-weight:500}
.dem-pol--cs{color:var(--s-ok)}
.dem-pol--cp{color:var(--s-err)}
/* ── Pedidos · vista tarjetas (alterna con la tabla mediante el toggle ☰/▦) ──
   Rejilla fluida auto-fill: en móvil cae a 1 columna sola. La tarjeta abierta se
   expande in situ a todo el ancho de la fila (grid-column:1/-1) y reutiliza el
   mismo detalle (info + fechas + líneas) que el modo tabla. */
.dem-viewtoggle{display:flex;justify-content:flex-end;gap:6px;margin-bottom:var(--s-space-3)}
.dem-viewtoggle .dem-tool-btn.is-active{background:var(--s-ink);color:var(--s-paper);border-color:var(--s-ink)}
.dem-pedgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:12px;align-items:start}
@media(max-width:640px){.dem-pedgrid{grid-template-columns:1fr}}
/* Cabecera de grupo (tarjetas): se ancla arriba (sticky) mientras sus tarjetas pasan por debajo. */
.dem-pedgrid__grp{grid-column:1/-1;position:sticky;top:0;z-index:2;background:var(--s-paper);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--s-muted);padding:10px 2px 6px;border-bottom:1px solid var(--s-line)}
.dem-pedcard{position:relative;background:var(--s-paper);border:1px solid var(--s-line);border-radius:var(--s-radius);padding:14px 16px;cursor:pointer;transition:background .15s;scroll-margin-top:42px}
.dem-pedcard:hover{background:var(--s-paper-2)}
.dem-pedcard::before{content:'';position:absolute;top:0;left:0;bottom:0;width:3px;background:var(--s-ink);opacity:0;transition:opacity .15s}
.dem-pedcard.dem-ped-open{grid-column:1/-1;background:var(--s-paper-2)}
.dem-pedcard.dem-ped-open::before{opacity:1}
.dem-pedcard__top{display:flex;align-items:center;gap:8px}
.dem-pedcard__chev{color:var(--s-muted);font-size:13px;transition:transform .15s ease}
.dem-pedcard.dem-ped-open .dem-pedcard__chev{color:var(--s-ink);transform:rotate(90deg)}
.dem-pedcard__id{font-size:14px;font-weight:500;color:var(--s-ink)}
.dem-pedcard__serv{margin-left:auto}
.dem-pedcard__cli{font-size:13px;color:var(--s-ink);margin-top:7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dem-pedcard__date{font-size:12px;color:var(--s-muted);margin-top:2px;white-space:nowrap}
.dem-pedcard__kpis{display:flex;gap:16px;flex-wrap:wrap;margin-top:10px;font-size:11px;color:var(--s-muted)}
.dem-pedcard__kpi b{font-weight:500;color:var(--s-ink);font-variant-numeric:tabular-nums}
.dem-pedcard__det{margin:12px -16px -14px;border-top:1px solid var(--s-line);cursor:default;overflow-x:auto;background:var(--s-paper)}
.dem-pedcard__det .dem-ped-sub{border-top:none}
/* En móvil el listado es siempre tarjetas: el toggle tabla/tarjetas desaparece */
@media(max-width:960px){.dem-viewtoggle{display:none}}

/* ── Pedidos · detalle móvil: overlay a pantalla completa con flecha atrás ──
   Sustituye a la expansión in situ en pantallas pequeñas: cabecera fija (volver +
   nº de pedido + servido), cuerpo con scroll propio, cronología en VERTICAL y las
   líneas del pedido como tarjetas apiladas en vez de tabla. */
.dem-pedovl{position:fixed;inset:0;z-index:1000;background:var(--s-paper);display:flex;flex-direction:column}
.dem-pedovl[hidden]{display:none}
body.dem-pedovl-open{overflow:hidden}
.dem-pedovl__head{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--s-line);flex:0 0 auto}
.dem-pedovl__back{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--s-line);border-radius:var(--s-radius);background:var(--s-paper);color:var(--s-ink);font-size:18px;cursor:pointer}
.dem-pedovl__back:active{background:var(--s-paper-2)}
.dem-pedovl__title{font-size:14px;color:var(--s-muted)}
.dem-pedovl__title .mono{font-weight:500;color:var(--s-ink)}
.dem-pedovl__head .dem-tag{margin-left:auto}
.dem-pedovl__body{flex:1 1 auto;overflow-y:auto;padding:14px;-webkit-overflow-scrolling:touch}
.dem-pedovl__body .dem-ped-info{padding:0 0 var(--s-space-3)}
.dem-pedovl__body .dem-ped-info__row{flex-wrap:wrap;gap:4px 16px}
.dem-pedovl__body .dem-fch{padding:var(--s-space-3) 0}
.dem-pedovl__lines-h{font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--s-muted);border-top:1px solid var(--s-line);padding:var(--s-space-3) 0 var(--s-space-2)}
/* Cronología en vertical: cada nodo/tramo es una fila [punto|texto] alineada a la izquierda,
   con el hilo conductor dibujado como borde bajo la columna del punto. */
.dem-pedovl .dem-fch__line{flex-direction:column;align-items:stretch;overflow:visible;padding-bottom:0}
.dem-pedovl .dem-fch__node{flex-direction:row;align-items:baseline;text-align:left;min-width:0;gap:8px;flex-wrap:wrap}
.dem-pedovl .dem-fch__dot{align-self:center;margin-bottom:0;flex:0 0 auto}
.dem-pedovl .dem-fch__k{flex:0 0 76px}
.dem-pedovl .dem-fch__teo{width:100%;padding-left:19px;margin-top:-2px}
.dem-pedovl .dem-fch__seg{flex-direction:row;align-items:center;text-align:left;min-width:0;gap:8px;margin:2px 0 2px 4px;padding:2px 0 2px 13px;border-left:2px solid var(--s-line)}
.dem-pedovl .dem-fch__arrow{display:none}
.dem-pedovl .dem-fch__seg.is-ok{border-left-color:var(--s-ok)}
.dem-pedovl .dem-fch__seg.is-late{border-left-color:var(--s-err)}
.dem-pedovl .dem-fch__seglbl{flex:0 0 72px}
.dem-pedovl .dem-fch__flag{margin-top:0}
.dem-pedovl .dem-fch__foot{font-size:10px}
/* Líneas del pedido como tarjetas apiladas */
.dem-linecards{display:flex;flex-direction:column;gap:8px}
.dem-linecard{border:1px solid var(--s-line);border-radius:var(--s-radius);background:var(--s-paper);padding:10px 12px}
.dem-linecard__top{display:flex;align-items:center;gap:8px}
.dem-linecard__cod{font-weight:500;color:var(--s-ink)}
.dem-linecard__serv{margin-left:auto;display:inline-flex;align-items:center;gap:6px}
.dem-linecard__desc{font-size:12px;color:var(--s-ink-soft);margin-top:4px}
.dem-linecard__kpis{display:flex;gap:14px;flex-wrap:wrap;margin-top:8px;font-size:11px;color:var(--s-muted)}
.dem-linecard__kpis b{font-weight:500;color:var(--s-ink);font-variant-numeric:tabular-nums}

/* Chips de filtros aplicados (fuera del menú) */
.dem-chips{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center}
.dem-chip{display:inline-flex;align-items:center;gap:2px;font-size:12px;padding:2px 4px 2px 9px;border:1px solid var(--s-line);border-radius:12px;background:var(--s-paper-2);color:var(--s-ink-soft);white-space:nowrap}
.dem-chip__t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}
.dem-chip button{border:none;background:none;cursor:pointer;font-size:15px;line-height:1;color:var(--s-muted);padding:0 3px}
.dem-chip button:hover{color:var(--s-ink)}
/* Bloque de información del cliente dentro del pedido desplegado */
.dem-ped-info{display:flex;flex-direction:column;gap:4px;padding:var(--s-space-3) var(--s-space-4) var(--s-space-3) 32px;font-size:12px}
.dem-ped-info__row{display:flex;gap:24px;align-items:baseline}
.dem-ped-info__k{flex:0 0 84px;color:var(--s-muted);text-transform:uppercase;font-size:10px;letter-spacing:.06em}
.dem-ped-info__v{flex:1;color:var(--s-ink-soft);line-height:1.4}
.dem-ped-info__obs{flex:0 0 auto;margin-left:auto;padding-left:12px}
.dem-ped-info__obs .dem-icn{margin-left:0}
/* ── Sección «Fechas»: cronología FECHA→ALTA→CARGA→ENTREGA (real vs teórico) ── */
.dem-fch{padding:var(--s-space-2) var(--s-space-4) var(--s-space-3) 32px;border-top:1px solid var(--s-line);font-size:12px}
.dem-fch__title{display:flex;align-items:center;gap:8px;color:var(--s-muted);text-transform:uppercase;font-size:10px;letter-spacing:.06em;margin-bottom:var(--s-space-3)}
.dem-fch__line{display:flex;align-items:flex-start;gap:0;overflow-x:auto;padding-bottom:4px}
.dem-fch__node{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;text-align:center;min-width:96px;gap:2px}
.dem-fch__dot{width:11px;height:11px;border-radius:50%;background:var(--s-ink);border:2px solid var(--s-paper);box-shadow:0 0 0 1px var(--s-ink);margin-bottom:3px}
.dem-fch__dot.is-empty{background:var(--s-paper);box-shadow:0 0 0 1px var(--s-line)}
.dem-fch__k{color:var(--s-muted);text-transform:uppercase;font-size:9px;letter-spacing:.06em}
.dem-fch__v{color:var(--s-ink);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px}
.dem-fch__teo{color:var(--s-muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:10px}
.dem-fch__seg{flex:1 1 0;min-width:96px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:2px;padding-top:1px}
.dem-fch__arrow{width:100%;height:2px;background:var(--s-line);position:relative;margin-bottom:5px}
.dem-fch__arrow::after{content:'';position:absolute;right:0;top:-3px;border-left:6px solid var(--s-line);border-top:4px solid transparent;border-bottom:4px solid transparent}
.dem-fch__seg.is-ok .dem-fch__arrow{background:var(--s-ok)}
.dem-fch__seg.is-ok .dem-fch__arrow::after{border-left-color:var(--s-ok)}
.dem-fch__seg.is-late .dem-fch__arrow{background:var(--s-err)}
.dem-fch__seg.is-late .dem-fch__arrow::after{border-left-color:var(--s-err)}
.dem-fch__seglbl{color:var(--s-muted);text-transform:uppercase;font-size:9px;letter-spacing:.06em}
.dem-fch__segval{color:var(--s-ink);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px}
.dem-fch__seg.is-late .dem-fch__segval{color:var(--s-err);font-weight:500}
.dem-fch__segteo{color:var(--s-muted);font-weight:300;margin-left:4px;font-size:10px}
.dem-fch__flag{font-size:14px;line-height:1;margin-top:1px}
.dem-fch__flag--ok{color:var(--s-ok)}
.dem-fch__flag--late{color:var(--s-err)}
.dem-fch__foot{margin-top:var(--s-space-3);color:var(--s-ink-soft);font-size:11px;display:flex;flex-wrap:wrap;align-items:center;gap:2px}
.dem-fch__zona{display:inline-flex;align-items:center;gap:4px}
.dem-fch__zona b{font-weight:500}
/* Icono de calendario de la cabecera cuando hay incumplimiento */
.dem-cal-late{color:var(--s-err)}
/* Tooltip de cronología (icono de calendario de la cabecera) */
.stk-obs-tip.dem-tip-plz{width:auto;min-width:220px;max-width:300px}
.dem-tipplz{display:flex;flex-direction:column;gap:8px;padding:2px}
.dem-tipplz__h{display:flex;align-items:center;gap:8px;font-weight:500;color:var(--s-ink)}
.dem-tipplz__dates{display:grid;grid-template-columns:auto 1fr;gap:2px 12px}
.dem-tipplz__dk{color:var(--s-muted);text-transform:uppercase;font-size:10px;letter-spacing:.06em}
.dem-tipplz__dv{color:var(--s-ink);font-variant-numeric:tabular-nums;white-space:nowrap;text-align:left}
.dem-tipplz__rows{display:flex;flex-direction:column;gap:3px;border-top:1px solid var(--s-line);padding-top:6px}
.dem-tipplz__row{display:flex;align-items:center;gap:6px}
.dem-tipplz__row .dem-ok{color:var(--s-ok)}
.dem-tipplz__row .dem-late{color:var(--s-err)}
.dem-tipplz__row.is-late .dem-tipplz__r{color:var(--s-err);font-weight:500}
.dem-tipplz__l{flex:1;color:var(--s-ink-soft)}
.dem-tipplz__r{font-variant-numeric:tabular-nums;white-space:nowrap}
.dem-tipplz__foot{border-top:1px solid var(--s-line);padding-top:6px;color:var(--s-ink-soft);font-size:11px}
/* Selector de fecha en la cabecera de la columna */
.dem-ped-dsel{font:inherit;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--s-muted);background:transparent;border:none;cursor:pointer;padding:0;max-width:120px}
.dem-ped-dsel:hover{color:var(--s-ink)}
.dem-ped-dsel option{text-transform:none;letter-spacing:0;color:var(--s-ink)}
/* Selector de fecha por hover: texto ("POR FECHA CARGA") que al pasar el ratón despliega las
   OTRAS 3 fechas hacia la derecha (sin cajas ni bordes, solo espacio en blanco entre ellas),
   con un ligero deslizamiento hacia la derecha. Va ANTES de las tarjetas. */
.dem-datesel{position:relative;display:inline-flex;align-items:center;gap:6px;margin-bottom:var(--s-space-3);font-size:11px;letter-spacing:.06em;color:var(--s-muted);cursor:default}
.dem-datesel::after{content:'';width:0;height:0;border:3px solid transparent;border-left-color:var(--s-muted);margin-left:1px}
.dem-datesel:hover{color:var(--s-ink)}
.dem-datesel:hover::after{border-left-color:var(--s-ink)}
.dem-datesel__opts{position:absolute;top:0;left:100%;display:flex;align-items:center;gap:16px;padding-left:16px;height:100%;opacity:0;pointer-events:none;transform:translateX(-8px);transition:opacity .18s,transform .18s;white-space:nowrap}
.dem-datesel:hover .dem-datesel__opts{opacity:1;pointer-events:auto;transform:translateX(0)}
.dem-datesel__opt{font:inherit;font-size:10px;letter-spacing:.04em;padding:0;border:none;background:none;color:var(--s-ink-soft);cursor:pointer;white-space:nowrap}
.dem-datesel__opt:hover{color:var(--s-ink)}
/* Popup de las cuatro fechas: rejilla etiqueta→valor, ancho ajustado al contenido */
.stk-obs-tip.dem-tip-dates{width:auto;min-width:0}
.dem-tipd{display:grid;grid-template-columns:auto auto;gap:3px 16px;padding:2px 4px}
.dem-tipd__k{color:var(--s-muted);text-transform:uppercase;font-size:10px;letter-spacing:.06em}
.dem-tipd__v{color:var(--s-ink);font-variant-numeric:tabular-nums;text-align:left;white-space:nowrap}
/* Barra de herramientas: botón + popover de filtro/orden */
.dem-menu-wrap{position:relative;display:inline-flex}
.dem-tool-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid var(--s-line);background:var(--s-paper);color:var(--s-ink-soft);border-radius:var(--s-radius);cursor:pointer;font-size:16px}
.dem-tool-btn:hover{background:var(--s-paper-2);color:var(--s-ink)}
.dem-menu{position:absolute;top:calc(100% + 6px);left:0;right:auto;z-index:9000;background:var(--s-paper);border:1px solid var(--s-line);border-radius:6px;box-shadow:0 8px 28px rgba(0,0,0,.18);padding:0;overflow:hidden}
.dem-menu[hidden]{display:none}
.dem-menu__sec{padding:4px 0}
.dem-menu__sec+.dem-menu__sec{border-top:1px solid var(--s-line)}
/* Maestro-detalle: lista de filtros (izq) + configuración (der) */
.dem-m2{display:flex;align-items:stretch}
.dem-m2__list{min-width:210px;padding:4px;border-right:1px solid var(--s-line)}
.dem-m2__cfg{min-width:170px;max-width:260px;padding:4px}
.dem-m2__row{display:flex;align-items:center;gap:8px;padding:6px 8px 6px 10px;border-radius:4px;cursor:pointer;font-size:13px;color:var(--s-ink)}
.dem-m2__row:hover,.dem-m2__row.is-active{background:var(--s-paper-2)}
.dem-m2__lbl{flex:0 0 auto}
.dem-m2__sum{flex:1;text-align:right;color:var(--s-muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dem-m2__row .ti{font-size:14px;color:var(--s-muted)}
.dem-m2__sep{height:1px;background:var(--s-line);margin:4px 0}
.dem-menu__field{display:flex;align-items:center;gap:8px;padding:5px 8px;font-size:12px}
.dem-menu__field label{flex:0 0 42px;color:var(--s-muted);text-transform:uppercase;font-size:10px;letter-spacing:.06em}
.dem-menu__field input{flex:1;min-width:0;font:inherit;font-size:12px;padding:4px 6px;border:1px solid var(--s-line);border-radius:4px;background:var(--s-paper);color:var(--s-ink)}
.dem-menu__opts{max-height:min(300px,calc(100vh - 230px));overflow-y:auto;border-top:1px solid var(--s-line);margin-top:2px;padding-top:2px}
.dem-menu__quick{display:flex;flex-wrap:wrap;gap:4px;padding:6px 8px 2px}
.dem-quick{font:inherit;font-size:11px;padding:3px 8px;border:1px solid var(--s-line);border-radius:12px;background:var(--s-paper);color:var(--s-ink-soft);cursor:pointer;white-space:nowrap}
.dem-quick:hover{background:var(--s-paper-2);color:var(--s-ink);border-color:var(--s-muted)}
.dem-menu__h{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--s-muted);padding:4px 10px}
/* Pie "Aplicar" de los filtros de rango/selección múltiple: cierra el menú al terminar */
.dem-menu__apply{padding:8px;border-top:1px solid var(--s-line);margin-top:4px}
.dem-apply-btn{display:block;width:100%;font:inherit;font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:6px 10px;border:1px solid var(--s-ink);background:var(--s-ink);color:var(--s-paper);cursor:pointer}
.dem-apply-btn:hover{background:var(--s-ink-soft);border-color:var(--s-ink-soft)}
.dem-menu__h a{color:var(--s-muted)}
.dem-menu__opt{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 10px;border-radius:4px;cursor:pointer;font-size:13px;color:var(--s-ink);text-align:left}
.dem-menu__opt:hover{background:var(--s-paper-2)}
.dem-menu__opt.is-sel{color:var(--s-ink);font-weight:500}
.dem-menu__opt .ti{flex:0 0 auto;font-size:15px;color:var(--s-ink-soft)}
/* Nombres largos (marcas/artículos): una sola línea con elipsis, nunca ajuste de texto */
.dem-menu__optlbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dem-menu__r{display:inline-flex;align-items:center;gap:6px}
.dem-menu__prio{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--s-ink);color:var(--s-paper);font-size:10px;font-weight:600}
/* Fila cabecera de grupo (Agrupar por) */
/* Cabecera de grupo (tabla): sticky bajo el <thead> (≈35px) — se queda fija mientras sus filas
   pasan por debajo, en vez de irse con el scroll. z-index 1 = por debajo del thead (z-index 2). */
.dem-ped-grp>td{position:sticky;top:34px;z-index:1;background:var(--s-paper-2);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--s-ink-soft);font-weight:600;padding:7px 10px;border-top:2px solid var(--s-line);border-bottom:1px solid var(--s-line)}
/* Al abrir una fila con grupos activos, dejarla bajo thead + cabecera de grupo pegados (~64px). */
#demPedTable.dem-grouped .dem-ped-cab{scroll-margin-top:66px}
.dem-ped-grp__n{color:var(--s-muted);font-weight:400}
