/* ════════════════════════════════════════════════════════════════════════
   Guía de estilo compartida (misma que otros Hubs de Widitrade — CopyHub).
   Adoptada aquí el 21-sep-2026 en sustitución del sistema anterior (teal +
   glassmorphism). Idea central: claro, denso pero aireado, monocromático.
   El color es información, no decoración — solo aparece en chips de estado
   y en el acento. Los bordes son casi invisibles: la jerarquía viene del
   peso y del espacio, no de líneas. Dos materiales: "interfaz" (grises
   fríos, sin color, 13px sans) y "manuscrito" (texto para LEER: serif,
   16.5px, medida de 65 caracteres) — este Hub es sobre todo interfaz de
   datos, así que el manuscrito se reserva para notas/briefs largos.
   ════════════════════════════════════════════════════════════════════════ */
:root{
  /* Superficies — frías, nunca crema */
  --bg:#ffffff; --sidebar:#fafafb; --raised:#f6f6f8; --hover-bg:#f3f3f5; --sunken:#eeeef1;
  --surface:var(--raised); --surface-2:var(--sunken);
  --glass:var(--raised); --glass-2:var(--raised);
  /* Líneas — un pixel, y ya */
  --line:#eaeaee; --line-2:#d8d8de;
  /* Tinta — cuatro niveles */
  --ink:#15151a; --ink-2:#4e4e58; --muted:#7c7c88; --muted-2:#a6a6b0;
  --navy:#15151a;
  /* Acento — iris frío, elegido para no competir con verde/rojo (que valen dinero) */
  --accent:#4a4fd4; --accent-2:#cdcef6; --accent-soft:#eeeefc;
  /* Estado — cuatro roles, y nada más */
  --green:#12704a; --green-soft:#e6f4ed;
  --red:#b3261e; --red-soft:#fceceb;
  --gold:#8a5a00; --gold-soft:#fdf2e0;
  --info:#2a4fc4; --info-soft:#ecefff;
  --grey-i:#7c7c88;
  /* Eje de lectura — marcan secciones por tema, no son estados. Un fio de
     2-3px a la izquierda, nunca fondo de bloque. */
  --teal:#0a6070; --teal-soft:#e2f0f3;
  --purple:#5b34ab; --purple-soft:#f0eafc;
  --orange:#96490a; --orange-soft:#fcede0;
  --pink:#991f60; --pink-soft:#fce9f1;
  /* Tipografía */
  --display:"Geist",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --sans:"Geist",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --mono:"Geist Mono","JetBrains Mono",ui-monospace,monospace;
  --serif:"Literata","Charter","Iowan Old Style",Georgia,serif;
  /* Profundidad — tres, y no más. La tabla y la página no llevan sombra,
     llevan línea. Una tarjeta es un objeto posado y lleva la sombra corta. */
  --shadow-card:0 1px 2px rgba(20,20,28,.05),0 1px 1px rgba(20,20,28,.03);
  --shadow-pop:0 6px 16px -6px rgba(20,20,28,.14),0 2px 5px -2px rgba(20,20,28,.10);
  --shadow-dialog:0 24px 64px -24px rgba(20,20,28,.30),0 4px 12px -4px rgba(20,20,28,.12);
  --shadow:var(--shadow-pop);
  /* Radios */
  --radius-sm:4px; --radius-md:6px; --radius-lg:8px;
  --r:var(--radius-md); --r-lg:var(--radius-lg);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:var(--sans);color:var(--ink);overflow:hidden;
  background:var(--bg);
  -webkit-font-smoothing:antialiased;font-size:13px;line-height:1.45;letter-spacing:-.006em;height:100vh}
::selection{background:var(--accent-2);color:var(--ink)}
button{font-family:inherit;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:3px}

/* barras de scroll finas */
*{scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}
*::-webkit-scrollbar{width:9px;height:9px}
*::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:99px;border:3px solid transparent;background-clip:padding-box}
*::-webkit-scrollbar-track{background:transparent}

/* manuscrito — texto para leer (notas, briefs, ángulos largos) */
.manuscript{font-family:var(--serif);font-size:16.5px;line-height:1.62;letter-spacing:0;max-width:65ch;color:var(--ink)}
.manuscript p{margin-block:.72em}
.manuscript h1,.manuscript h2,.manuscript h3{font-family:var(--sans);letter-spacing:-.015em;line-height:1.25}
.num,[data-num]{font-variant-numeric:tabular-nums}

/* 3D background canvas */
#bg3d{position:fixed;inset:0;z-index:0;display:block;transition:opacity .45s,filter .45s;opacity:.35}
body.scene-dim #bg3d{opacity:.12;filter:blur(4px)}

/* ---------- login / intro ---------- */
.login{position:fixed;inset:0;z-index:300;display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:var(--bg);transition:opacity .7s ease,transform .8s cubic-bezier(.5,0,.3,1)}
.login.gone{opacity:0;transform:translateY(-14px) scale(1.03);pointer-events:none}
.login-inner{position:relative;display:flex;flex-direction:column;align-items:center}
.login-ring,.login-ring2{position:absolute;top:14px;left:50%;border-radius:50%;border:1px solid var(--accent);
  transform:translate(-50%,-50%);opacity:0;width:0;height:0}
.login.show .login-ring{animation:loginRing 1.5s .15s ease-out forwards}
.login.show .login-ring2{animation:loginRing 1.5s .45s ease-out forwards;border-color:var(--accent-2)}
@keyframes loginRing{0%{width:10px;height:10px;opacity:.7}100%{width:300px;height:300px;opacity:0}}
.login-logo{height:44px;width:auto;opacity:0;transform:scale(.86)}
.login.show .login-logo{animation:loginLogo .85s cubic-bezier(.34,1.45,.5,1) forwards}
@keyframes loginLogo{0%{opacity:0;transform:scale(.84)}60%{transform:scale(1.03)}100%{opacity:1;transform:scale(1)}}
.login-sub{font:500 9px var(--mono);letter-spacing:.1em;color:var(--muted);margin-top:20px;opacity:0}
.login.show .login-sub{animation:fadeUp .6s .55s forwards}
.login-bar{width:210px;height:2px;background:var(--line);border-radius:2px;margin-top:28px;overflow:hidden;opacity:0}
.login.show .login-bar{animation:fadeUp .5s .75s forwards}
.login-bar i{display:block;height:100%;width:0;background:var(--accent);border-radius:2px;transition:width .35s cubic-bezier(.2,.8,.2,1)}
.login-status{font:500 10px var(--mono);letter-spacing:.05em;color:var(--muted-2);margin-top:15px;height:14px;opacity:0}
.login.show .login-status{animation:fadeUp .5s .85s forwards}
.login-tag{position:absolute;bottom:36px;font:500 11px var(--mono);letter-spacing:.02em;color:var(--muted-2);opacity:0}
.login.show .login-tag{animation:fadeUp .6s 1.1s forwards}
.login-tag b{color:var(--accent);font-weight:600}
@keyframes fadeUp{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* login auth form */
.login-auth{margin-top:32px;width:320px;opacity:0}
.login.show .login-auth{animation:fadeUp .5s .4s forwards}
.login-auth label{font:500 10px var(--sans);letter-spacing:0;color:var(--muted);display:block;margin-bottom:6px}
.login-auth input{width:100%;background:var(--bg);border:1px solid var(--line-2);border-radius:var(--radius-md);padding:10px 13px;
  color:var(--ink);font:13px var(--mono);outline:0;margin-bottom:14px;transition:.15s}
.login-auth input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
/* Botón primario. Nació dentro del login; ahora también "Crear acceso" y
   "Cambiar contraseña", así que la base vive aquí y el login mantiene su
   override de ancho completo debajo. */
.conn-btn{border:0;border-radius:var(--radius-md);padding:9px 16px;font:600 12px var(--sans);
  background:var(--ink);color:#fff;cursor:pointer;transition:.15s}
.conn-btn:hover{background:#000}
.conn-btn:disabled{opacity:.4;cursor:default}
.login-auth .conn-btn{width:100%;border:0;border-radius:var(--radius-md);padding:11px;font:600 13px var(--sans);
  background:var(--ink);color:#fff;transition:.16s}
.login-auth .conn-btn:hover{background:#000}
.login-auth .conn-btn:disabled{opacity:.4}
.login-err{color:var(--red);font-size:12px;margin-top:8px;display:none;text-align:center}

.viewport{position:relative;z-index:1;height:100vh;width:100vw;overflow:hidden}

/* ---------- left rail ---------- */
.rail{position:fixed;left:22px;top:68px;bottom:16px;width:236px;z-index:65;
  background:var(--sidebar);
  border:1px solid var(--line);border-radius:var(--radius-lg);
  padding:22px 16px;display:flex;flex-direction:column}
.rail-brand{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:4px 8px 22px}
.wlogo{height:26px;width:auto;display:block}
.rail-sub{font:500 9px var(--mono);color:var(--muted);letter-spacing:.06em;padding-left:2px}
.rail-nav{flex:1;overflow-y:auto}
.rail-grp{margin-bottom:16px}
.rail-grp .lbl{font:500 10px var(--sans);letter-spacing:0;color:var(--muted-2);padding:0 10px 9px}
.rail-nav a{display:flex;align-items:center;gap:12px;padding:7px 10px;border-radius:var(--radius-md);text-decoration:none;
  color:var(--ink-2);font-weight:500;font-size:13px;transition:.15s;position:relative;cursor:pointer}
.rail-nav a .gl{width:6px;height:6px;border-radius:50%;border:1.5px solid var(--muted-2);flex-shrink:0;transition:.15s}
.rail-nav a:hover{color:var(--ink);background:var(--hover-bg)}
.rail-nav a.on{color:var(--ink);font-weight:600;background:var(--accent-soft)}
.rail-nav a.on .gl{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-2)}
.rail-nav a .tag{margin-left:auto;font:500 9px var(--mono);color:var(--muted)}
.rail-foot{padding:16px 10px 0;border-top:1px solid var(--line);margin-top:6px}
.rail-sync-dates{display:flex;gap:4px;margin-bottom:6px}
.rail-sync-dates input[type=date]{flex:1;min-width:0;box-sizing:border-box;font:500 10px var(--mono);color:var(--ink-2);background:var(--sunken);border:1px solid var(--line);border-radius:var(--radius-sm);padding:4px 4px}
.sline{display:flex;align-items:center;gap:9px;font:500 10px var(--mono);color:var(--muted);margin-bottom:8px}
.sline:last-child{margin-bottom:0}
.sdot{width:6px;height:6px;border-radius:50%}.sdot.g{background:var(--green)}.sdot.a{background:var(--accent)}
.live .sdot{animation:bk 2.4s ease-in-out infinite}
@keyframes bk{0%,100%{opacity:1}50%{opacity:.3}}

/* ---------- center overlay ---------- */
.core-overlay{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:65;
  display:flex;flex-direction:column;align-items:center;text-align:center;
  max-height:calc(100vh - 96px);overflow:visible;justify-content:center;
  transition:opacity .45s,filter .45s;pointer-events:none}
body.scene-dim .core-overlay{opacity:0;pointer-events:none;transition:opacity .3s ease}
.core-eyebrow{font:500 10px var(--mono);letter-spacing:.06em;color:var(--accent);
  display:flex;align-items:center;gap:10px;margin-bottom:18px}
.core-eyebrow::before,.core-eyebrow::after{content:'';width:22px;height:1px;background:var(--accent);opacity:.5}
.core-num{font:500 76px var(--display);letter-spacing:-.04em;line-height:.9}
.core-of{font:500 13px var(--mono);color:var(--muted-2);margin-top:6px}
.core-lab{font:500 9px var(--mono);letter-spacing:.06em;color:var(--muted);margin-top:8px}
.core-stats{display:flex;gap:38px;margin-top:34px}
.cstat{text-align:center}
.cstat b{display:block;font:500 24px var(--display);letter-spacing:-.03em}
.cstat b.acc{color:var(--accent)}
.cstat span{font:500 9px var(--mono);letter-spacing:.05em;color:var(--muted);margin-top:5px;display:block}

/* ---------- ventanas ---------- */
.win-overlay{position:fixed;inset:0;z-index:60;display:none;background:rgba(21,21,26,.24)}
.win-overlay.open{display:block}
.win{position:fixed;left:280px;top:68px;bottom:16px;width:calc(100vw - 640px);display:flex;flex-direction:column;
  background:var(--bg);
  border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-dialog);overflow:hidden;resize:horizontal;min-width:480px;max-width:calc(100vw - 300px);
  transform:translateX(-110%);transition:transform .32s cubic-bezier(.22,1,.36,1)}
.win-overlay.open .win{transform:translateX(0)}
.win-overlay.closing .win{transform:translateX(-110%);transition:transform .35s cubic-bezier(.4,0,.2,1)}
.win-head{display:flex;align-items:center;gap:14px;padding:20px 24px;border-bottom:1px solid var(--line)}
.win-head .eyebrow{font:500 10px var(--mono);letter-spacing:.05em;color:var(--accent)}
.win-head h2{font:600 21px var(--display);letter-spacing:-.015em;margin-top:5px}
.win-x{margin-left:auto;width:30px;height:30px;border-radius:50%;border:1px solid var(--line-2);
  background:var(--bg);color:var(--muted);font-size:16px;line-height:1;display:grid;place-items:center;transition:.15s;align-self:flex-start}
.win-x:hover{color:var(--ink);border-color:var(--muted-2)}
.win-body{padding:24px;overflow-y:auto}
.win-refresh{background:0;border:1px solid var(--line-2);border-radius:var(--radius-md);padding:7px 14px;font:500 12px var(--sans);color:var(--muted);transition:.15s}
.win-refresh:hover{border-color:var(--muted-2);color:var(--ink)}

/* lists */
.list{border-top:1px solid var(--line)}
.row{display:grid;grid-template-columns:1fr auto;gap:20px;align-items:center;padding:14px 4px;border-bottom:1px solid var(--line);cursor:pointer;transition:.15s}
.row:hover{background:var(--hover-bg)}
.row .lead b{font-weight:600;font-size:14px;letter-spacing:-.005em}
.row .lead .sub{font:500 11.5px var(--mono);color:var(--muted);margin-top:5px;display:block}
.row .trail{display:flex;align-items:center;gap:22px}
.score{font:500 20px var(--display);letter-spacing:-.02em;min-width:42px;text-align:right}
.score.gold{color:var(--accent)}.score.high{color:var(--green)}.score.reg{color:var(--ink-2)}
.tagx{font:500 9.5px var(--mono);letter-spacing:.04em;color:var(--muted);min-width:62px;text-align:right}

/* barras de puntuación */
.sbars{display:flex;flex-direction:column;gap:18px}
.sbar{display:grid;grid-template-columns:220px 1fr 40px;gap:16px;align-items:center}
.sbar .nm{font-size:13px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sbar .track{height:4px;background:var(--line);border-radius:999px;overflow:hidden}
.sbar .track i{display:block;height:100%;border-radius:999px;width:0;background:var(--accent);transition:width 1s cubic-bezier(.2,.8,.2,1)}
.sbar .vl{font:500 12px var(--mono);color:var(--muted);text-align:right}

/* filtros */
.filters{display:flex;gap:24px;margin-bottom:24px;border-bottom:1px solid var(--line)}
.flt{background:0;border:0;padding:0 0 13px;font:500 13px var(--sans);color:var(--muted);position:relative;transition:.15s;cursor:pointer}
.flt:hover{color:var(--ink-2)}.flt.on{color:var(--ink);font-weight:600}
.flt.on::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--accent);border-radius:2px}

/* tarjetas — un objeto posado, sombra corta */
.cards{display:grid;gap:14px}.cards.two{grid-template-columns:1fr 1fr}
.card{background:var(--raised);border:1px solid var(--line);border-radius:var(--r);padding:18px;transition:.15s;box-shadow:var(--shadow-card)}
.card:hover{border-color:var(--line-2)}
.card-head{display:flex;align-items:center;gap:10px;margin-bottom:13px}
.card-head b{font:600 14px var(--display);letter-spacing:-.005em}
.tier{margin-left:auto;font:500 9px var(--mono);letter-spacing:.04em;padding:3px 8px;border-radius:var(--radius-sm)}
.tier.t1{background:var(--accent-soft);color:var(--accent)}.tier.t2{background:var(--sunken);color:var(--ink-2)}.tier.t3{background:var(--sunken);color:var(--muted);border:1px solid var(--line)}
.skel{font-size:13px;color:var(--ink-2);background:var(--sunken);border:1px solid var(--line);border-radius:var(--radius-md);padding:11px 14px;line-height:1.55;margin-bottom:13px}
.skel em{color:var(--accent);font-style:normal}
.metrline{display:flex;gap:22px;font:500 11px var(--mono);color:var(--muted)}.metrline b{color:var(--ink-2)}
.card p.desc{color:var(--muted);font-size:13px;line-height:1.6;margin-bottom:15px}

/* chips — fondo *-soft con texto en el color lleno. El neutro es el único
   con anillo, porque no tiene fondo que lo distinga. Un punto de 6px antes
   del texto vale más que la caja entera para marcar estado. */
.pill{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:var(--radius-sm);font:500 10px var(--mono);letter-spacing:.02em}
.pill.g{background:var(--green-soft);color:var(--green)}
.pill.y{background:var(--gold-soft);color:var(--gold)}
.pill.r{background:var(--red-soft);color:var(--red)}
.pill.gr{background:var(--sunken);color:var(--muted);border:1px solid var(--line-2)}
.pill.v{background:var(--purple-soft);color:var(--purple)} /* Testing — violeta, para no leerse como el ámbar de "Nuevo" */
.pill.b{background:var(--info-soft);color:var(--info)}
.pill.p{background:var(--purple-soft);color:var(--purple)}

/* generador */
.gen-wrap{display:grid;grid-template-columns:1fr 1fr;gap:28px;align-items:start}
.fld{margin-bottom:14px}
.fld label{font:500 10px var(--sans);letter-spacing:0;color:var(--muted);display:block;margin-bottom:6px}
.fld select,.fld textarea,.fld input[type="text"],.fld input[type="password"]{width:100%;background:var(--bg);border:1px solid var(--line-2);border-radius:var(--radius-md);padding:9px 12px;color:var(--ink);font:13px var(--sans);outline:0;transition:.15s;box-sizing:border-box}
.fld select:focus,.fld textarea:focus,.fld input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.fld textarea{resize:vertical;min-height:80px;line-height:1.5}
.gbtn{border:0;border-radius:var(--radius-md);padding:10px 20px;font:600 13px var(--sans);background:var(--ink);color:#fff;transition:.16s}
.gbtn:hover{background:#000}.gbtn:disabled{opacity:.4}
.gen-out{display:none}.gen-out.show{display:block}
#gen-result{margin-top:20px}
.outb{margin-bottom:16px}
.outb .ol{font:500 10px var(--sans);letter-spacing:0;color:var(--accent);margin-bottom:8px}
.outb textarea,.outb input{width:100%;background:var(--bg);border:1px solid var(--line-2);border-radius:var(--radius-md);padding:10px 12px;font:14px var(--sans);line-height:1.5;color:var(--ink);outline:0;resize:vertical}
.outb textarea:focus,.outb input:focus{border-color:var(--accent)}
.empty-hint{color:var(--muted-2);font:500 12px var(--mono);border:1px dashed var(--line-2);border-radius:var(--radius-lg);padding:32px;text-align:center}
.act{border:1px solid var(--line-2);border-radius:var(--radius-md);padding:8px 14px;font:600 12px var(--sans);background:var(--bg);color:var(--ink-2);transition:.15s}
.act:hover{border-color:var(--muted-2);color:var(--ink)}
.act.pro{background:var(--ink);color:#fff;border-color:var(--ink)}.act.pro:hover{background:#000}
.act.ap{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-2)}
.act.rj{background:var(--red-soft);color:var(--red);border-color:var(--red-soft)}
.act.pm{background:var(--purple-soft);color:var(--purple);border-color:var(--purple-soft)}

/* edición */
.edit-input{width:100%;border:1px solid var(--line-2);border-radius:var(--radius-md);padding:8px 12px;font:13px var(--sans);outline:0;background:var(--bg);color:var(--ink);transition:.15s;resize:vertical}
.edit-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.edit-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.edit-field label{font:500 10px var(--sans);letter-spacing:0;color:var(--muted);display:block;margin-bottom:5px}

/* tabla — sin sombra, con línea */
.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.tbl th{text-align:left;font:500 10px var(--sans);letter-spacing:0;color:var(--muted);padding:0 12px 10px;font-weight:500}
.tbl td{padding:11px 12px;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums}
.tbl tbody tr{transition:.1s;cursor:pointer}.tbl tbody tr:hover td{background:var(--hover-bg)}
.tbl td:first-child{font-weight:600}

/* expandible */
.expand{background:var(--sunken);border:1px solid var(--line);border-radius:var(--radius-md);padding:16px;margin-top:8px;display:none;font-size:13px;line-height:1.55;white-space:pre-wrap;max-height:400px;overflow:auto}

/* acordeón de productos */
.pcard{background:var(--raised);border:1px solid var(--line);border-radius:var(--r);margin-bottom:12px;overflow:hidden;transition:.15s}
.pcard:hover{border-color:var(--line-2)}
.pcard-head{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;cursor:pointer;transition:.1s}
.pcard-head:hover{background:var(--hover-bg)}
.pcard-name{font:600 14px var(--display);letter-spacing:-.005em}
.pcard-stats{display:flex;gap:8px;align-items:center}
.pcard-body{display:none;padding:0 18px 16px;border-top:1px solid var(--line)}.pcard-body.open{display:block}
.type-pill{display:inline-block;padding:3px 7px;border-radius:var(--radius-sm);font:500 9px var(--mono);color:#fff;white-space:nowrap;letter-spacing:.02em}
.type-punchy{background:var(--red)}.type-story{background:var(--purple)}.type-actor-s{background:var(--info)}.type-actor-ns{background:var(--ink-2)}.type-hybrid{background:var(--gold)}.type-avatar{background:var(--green)}.type-other{background:var(--muted)}.type-researcher{background:var(--teal)}

/* tarjetas de borrador */
.drow{display:flex;align-items:center;gap:16px;padding:16px 0;border-bottom:1px solid var(--line)}
.drow .info{flex:1;min-width:0}.drow .info b{font-weight:600;font-size:14px}.drow .info span{display:block;font:500 11.5px var(--mono);color:var(--muted);margin-top:4px}
.dcard{background:var(--raised);border:1px solid var(--line);border-radius:var(--r);padding:16px;margin-bottom:12px;transition:.15s}
.dcard:hover{border-color:var(--line-2)}
.dcard-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px}
.dcard-title{font-weight:600;font-size:14px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dcard-meta{font-size:12px;color:var(--muted);margin-bottom:10px;display:flex;gap:8px;align-items:center}
.dcard-expand{background:var(--sunken);border:1px solid var(--line);border-radius:var(--radius-md);padding:16px;margin-top:10px;display:none}
.dcard-section{margin-bottom:12px}.dcard-section:last-child{margin-bottom:0}
.dcard-section-label{font:500 10px var(--sans);letter-spacing:0;color:var(--muted);margin-bottom:5px}
.dcard-section-text{font-size:13px;line-height:1.55;white-space:pre-wrap}
.dcard-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}

/* interruptor */
.switch-row{display:flex;gap:10px;align-items:center;margin-bottom:14px}
.switch-row label{font:500 10px var(--sans);letter-spacing:0;color:var(--muted)}
.toggle{display:flex;border:1px solid var(--line-2);border-radius:var(--radius-md);overflow:hidden}
.toggle button{padding:7px 14px;font:500 12px var(--sans);background:var(--bg);color:var(--muted);border:0;transition:.15s}
.toggle button.on{background:var(--ink);color:#fff}

/* búsqueda */
.search-input{border:1px solid var(--line-2);border-radius:var(--radius-md);padding:9px 12px;font:13px var(--sans);background:var(--bg);color:var(--ink);outline:0;width:260px;transition:.15s}
.search-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}

/* modal de detalle de script */
.modal-overlay{position:fixed;inset:0;background:rgba(21,21,26,.4);z-index:90;display:none;align-items:center;justify-content:center;padding:24px}
.modal-overlay.open{display:flex;animation:fadein .2s ease}
@keyframes fadein{from{opacity:0}to{opacity:1}}
.modal{width:min(560px,100%);max-height:88vh;overflow-y:auto;background:var(--bg);border:1px solid var(--line-2);border-radius:var(--radius-lg);padding:28px;position:relative;box-shadow:var(--shadow-dialog);animation:winIn .34s cubic-bezier(.34,1.4,.5,1)}
.modal .x{position:absolute;top:18px;right:18px;width:30px;height:30px;border-radius:50%;border:1px solid var(--line-2);background:var(--bg);color:var(--muted);font-size:16px;line-height:1;display:grid;place-items:center;transition:.15s}
.modal .x:hover{color:var(--ink);border-color:var(--muted-2)}
.modal .eyebrow{font:500 10px var(--mono);letter-spacing:.05em;color:var(--accent);margin-bottom:11px}
.modal h2{font:600 22px var(--display);letter-spacing:-.015em;padding-right:36px}
.modal .msub{font:500 11.5px var(--mono);color:var(--muted);margin-top:9px;margin-bottom:24px}
.dim{display:flex;align-items:center;gap:14px;margin-bottom:13px}
.dim .dn{width:94px;font-size:13px;color:var(--ink-2);font-weight:500}.dim .dw{font:500 10px var(--mono);color:var(--muted-2);width:34px}
.dim .db{flex:1;height:4px;background:var(--line);border-radius:999px;overflow:hidden}
.dim .db i{display:block;height:100%;border-radius:999px;background:var(--accent)}
.dim .dv{font:500 13px var(--mono);width:30px;text-align:right}
.dim.total{margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.dim.total .dn{font-weight:700;color:var(--ink)}
.script-body{background:var(--sunken);border:1px solid var(--line);border-radius:var(--radius-md);padding:16px;font-size:13.5px;line-height:1.65;color:var(--ink-2);margin-top:20px;white-space:pre-wrap}

/* ---------- chat flotante ---------- */
.chat-fab{position:fixed;bottom:24px;right:24px;z-index:70;border:1px solid var(--line-2);border-radius:var(--radius-lg);
  padding:12px 16px;font:600 13px var(--sans);background:var(--bg);color:var(--ink);
  box-shadow:var(--shadow-pop);display:flex;align-items:center;gap:10px;transition:.18s}
.chat-fab:hover{border-color:var(--muted-2)}
.chat-fab::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--accent);animation:bk 2s infinite}
.chat-win{position:fixed;bottom:24px;right:24px;z-index:75;width:420px;height:580px;display:none;flex-direction:column;
  background:var(--bg);
  border:1px solid var(--line-2);border-radius:var(--radius-lg);box-shadow:var(--shadow-dialog);overflow:hidden;
  min-width:320px;min-height:300px;max-width:90vw;max-height:90vh}
.chat-win.open{display:flex;animation:chatIn .34s cubic-bezier(.34,1.4,.5,1)}
.chat-win.docked{bottom:0;right:0;width:520px;height:100vh;border-radius:0;border-right:0;resize:none;max-width:none;max-height:none}
/* asas de resize */
.chat-resize-l{position:absolute;left:0;top:0;width:5px;height:100%;cursor:ew-resize;z-index:2}
.chat-resize-t{position:absolute;top:0;left:5px;right:0;height:5px;cursor:ns-resize;z-index:2}
.chat-resize-c{position:absolute;top:0;left:0;width:12px;height:12px;cursor:nwse-resize;z-index:3}
.chat-win.docked .chat-resize-t,.chat-win.docked .chat-resize-c{display:none}
.chat-resize-l:hover,.chat-resize-t:hover,.chat-resize-c:hover{background:var(--accent-soft)}
.chat-resize-l:active,.chat-resize-t:active,.chat-resize-c:active{background:var(--accent-2)}
@keyframes chatIn{0%{opacity:0;transform:scale(.92) translateY(20px)}70%{transform:scale(1.01)}100%{opacity:1;transform:scale(1)}}
.chat-head{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)}
.chat-head .ci{width:26px;height:26px;border-radius:var(--radius-md);background:var(--accent-soft);display:grid;place-items:center;color:var(--accent);font-size:13px}
.chat-head b{font:600 14px var(--display)}
.chat-head .agent-badge{font:500 9px var(--mono);letter-spacing:.03em;padding:3px 8px;border-radius:var(--radius-sm);margin-left:4px}
.chat-head .agent-badge.analyst{background:var(--info-soft);color:var(--info)}
.chat-head .agent-badge.generator{background:var(--purple-soft);color:var(--purple)}
.chat-head-right{margin-left:auto;display:flex;gap:6px;align-items:center}
.chat-dock-btn{background:0;border:1px solid var(--line-2);border-radius:var(--radius-sm);padding:4px 10px;font:500 10px var(--mono);color:var(--muted);transition:.15s}
.chat-dock-btn:hover{color:var(--ink);border-color:var(--muted-2)}
.chat-close{background:0;border:0;color:var(--muted);font-size:20px;line-height:1;padding:0 2px}
.chat-msgs{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}
.msg{max-width:84%;padding:9px 13px;border-radius:var(--radius-lg);font-size:13px;line-height:1.5;word-wrap:break-word}
.msg.ai{align-self:flex-start;background:var(--raised);border:1px solid var(--line)}
.msg.me{align-self:flex-end;background:var(--ink);color:#fff;white-space:pre-wrap}
.msg.thinking{color:var(--muted);font-style:italic;font-size:12px}
.msg.ai h2,.msg.ai h3{font:600 14px/1.3 var(--display);margin:8px 0 4px}.msg.ai hr{border:0;border-top:1px solid var(--line);margin:8px 0}
.msg.ai table{width:100%;border-collapse:collapse;font-size:12px;margin:6px 0}.msg.ai th{text-align:left;font-weight:600;font-size:10px;color:var(--muted);padding:3px 6px;border-bottom:2px solid var(--line)}.msg.ai td{padding:3px 6px;border-bottom:1px solid var(--line)}
.msg.ai ul,.msg.ai ol{margin:4px 0;padding-left:16px}.msg.ai li{margin-bottom:2px}.msg.ai p{margin:4px 0}.msg.ai strong{font-weight:700}.msg.ai code{background:var(--sunken);padding:1px 4px;border-radius:var(--radius-sm);font:12px var(--mono)}
.chat-in{display:flex;gap:9px;padding:12px;border-top:1px solid var(--line)}
.chat-in textarea{flex:1;background:var(--bg);border:1px solid var(--line-2);border-radius:var(--radius-md);padding:9px 12px;font:13px var(--sans);outline:0;resize:none;min-height:40px;max-height:80px}
.chat-in textarea:focus{border-color:var(--accent)}
.chat-in button{border:0;border-radius:var(--radius-md);padding:0 16px;background:var(--ink);color:#fff;font:600 13px var(--sans);align-self:flex-end;height:40px}
.chat-in button:disabled{opacity:.4}

/* resultado del chat + tarjeta de confirmación */
.chat-gen-result{align-self:flex-start;background:var(--raised);border:1px solid var(--line);border-radius:var(--r);padding:14px;max-width:95%}
.chat-gen-result .outb .ol{font:500 9px var(--sans);margin-bottom:4px}
.confirm-card{align-self:flex-start;background:var(--bg);border:1px solid var(--accent-2);border-radius:var(--r);padding:14px;max-width:95%;margin-top:4px}
.cc-title{font:500 10px var(--sans);color:var(--accent);margin-bottom:10px;display:flex;align-items:center;gap:6px}
.cc-title::before{content:'\25C8';font-size:12px}
.cc-row{display:flex;justify-content:space-between;padding:4px 0;font-size:12.5px;border-bottom:1px solid var(--line)}.cc-row:last-child{border:0}
.cc-label{color:var(--muted);font-weight:600;font-size:11px}.cc-val{font-weight:600;text-align:right;max-width:65%;overflow:hidden;text-overflow:ellipsis}
.cc-long{padding:6px 0;font-size:12px;line-height:1.5;white-space:pre-wrap;max-height:120px;overflow:auto;background:var(--sunken);border-radius:var(--radius-sm);padding:8px;margin-top:4px}
.cc-actions{display:flex;gap:8px;margin-top:10px}
.cc-confirm{border:0;border-radius:var(--radius-md);padding:8px 16px;font:600 12px var(--sans);background:var(--accent);color:#fff;transition:.15s}
.cc-confirm:disabled{opacity:.4}
.cc-cancel{border:1px solid var(--line-2);border-radius:var(--radius-md);padding:8px 16px;font:600 12px var(--sans);background:var(--bg);color:var(--muted);transition:.15s}
.cc-cancel:hover{color:var(--ink)}
.cc-done{font-size:12px;font-weight:600;color:var(--accent);padding:8px 0;display:flex;align-items:center;gap:6px}
.cc-done::before{content:'\2713'}

/* carga */
.loading{text-align:center;padding:30px;color:var(--muted);font:500 12px var(--mono)}

/* toast */
.toast{position:fixed;bottom:24px;left:calc(50% + 90px);transform:translateX(-50%) translateY(8px);background:var(--ink);color:#fff;
  padding:11px 18px;border-radius:var(--radius-md);font-size:13px;font-weight:500;z-index:200;box-shadow:var(--shadow-pop);
  display:flex;align-items:center;gap:10px;opacity:0;pointer-events:none;transition:.25s}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast .sdot{background:var(--accent)}

/* analizador en modal/expand */
.ana-score{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.ana-score .big{font:600 26px var(--display);letter-spacing:-.02em}
.ana-dims{display:grid;grid-template-columns:90px 1fr 34px;gap:3px 10px;align-items:center;margin-bottom:14px;font-size:12px}
.ana-dims .lbl{font-weight:600;color:var(--muted)}.ana-dims .wt{font:500 9px var(--mono);color:var(--muted-2)}
.ana-dims .bar{height:5px;background:var(--line);border-radius:999px;overflow:hidden}
.ana-dims .bar i{display:block;height:100%;border-radius:999px}
.ana-dims .val{font:600 12px var(--mono);text-align:right}
.ana-hook{background:var(--accent-soft);border:1px solid var(--accent-2);border-radius:var(--radius-md);padding:10px 14px;margin-bottom:10px}
.ana-hook .type{font:500 9px var(--sans);color:var(--accent);margin-bottom:4px}
.ana-hook .text{font-size:13px;line-height:1.5;font-weight:600}
.ana-quote{border-left:3px solid;border-radius:0 var(--radius-md) var(--radius-md) 0;padding:8px 12px;margin-bottom:8px}
.ana-quote .qlbl{font:500 9px var(--sans);margin-bottom:3px}
.ana-quote .qtxt{font-size:12px;line-height:1.5;font-style:italic}
.copy-btn{background:0;border:1px solid var(--line-2);border-radius:var(--radius-sm);padding:4px 10px;font:500 11px var(--mono);color:var(--muted);transition:.15s}
.copy-btn:hover{color:var(--ink);border-color:var(--muted-2)}

/* COPY HUB — panel superior colapsable */
.copyhub-panel{position:fixed;top:12px;left:280px;width:calc(100vw - 640px);min-width:360px;z-index:90;background:var(--bg);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-dialog);transition:all .25s ease;overflow:hidden}
.copyhub-panel.open{resize:both;overflow:hidden;max-height:calc(100vh - 24px);display:flex;flex-direction:column}
.copyhub-bar{display:flex;align-items:center;gap:12px;padding:0 20px;height:44px;cursor:pointer;user-select:none;flex-shrink:0}
.copyhub-title{font:600 13px var(--display);color:var(--ink);letter-spacing:0}
.copyhub-tabs{display:flex;gap:4px;margin-left:12px}
.copyhub-tab{background:0;border:1px solid var(--line-2);border-radius:var(--radius-sm);padding:4px 12px;font:500 11px var(--body);color:var(--muted);cursor:pointer;transition:.15s}
.copyhub-tab:hover{color:var(--ink);border-color:var(--muted-2)}
.copyhub-tab.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.copyhub-arrow{background:0;border:0;color:var(--muted);font-size:12px;cursor:pointer;transition:transform .25s;flex-shrink:0}
.pill-btn{background:var(--sunken);border:1px solid var(--line);border-radius:var(--radius-sm);padding:4px 10px;font:500 11.5px var(--sans);color:var(--muted);cursor:pointer;transition:.15s}
.pill-btn:hover{color:var(--ink);border-color:var(--muted-2)}
.pill-btn.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}

/* Performance: hero de 3 métricas + jerarquía real entre paneles */
.perf-hero{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;margin-bottom:16px}
.perf-stat{background:var(--bg);padding:16px 18px}
.perf-stat .lbl{font:500 10.5px var(--sans);color:var(--muted);margin-bottom:7px}
.perf-stat .val{font:600 26px var(--display);letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.perf-stat .val.pos{color:var(--green)}
.perf-stat .val.neg{color:var(--red)}
.perf-stat .sub{font:500 11px var(--sans);color:var(--muted-2);margin-top:4px}
.perf-chip{cursor:pointer;font:500 11.5px var(--sans);padding:5px 12px;border-radius:var(--radius-lg);border:1px solid var(--line-2);background:var(--bg);color:var(--ink-2);transition:.12s}
.perf-chip:hover{border-color:var(--muted-2)}
.perf-chip.on{background:var(--accent);border-color:var(--accent);color:#fff}
.perf-panel{margin-bottom:14px}
.perf-panel.primary{background:var(--raised);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px;box-shadow:var(--shadow-card)}
.perf-panel.secondary .perf-title{color:var(--ink-2)}
.perf-title{font:600 13px var(--sans);color:var(--ink);margin-bottom:4px}
.perf-note{font-size:11px;color:var(--muted);margin-bottom:10px}
.perf-share{position:relative;height:4px;background:var(--accent-soft);border-radius:2px;width:90px;overflow:hidden;margin-top:5px}
.perf-share i{position:absolute;inset:0 auto 0 0;background:var(--accent);border-radius:2px}
.perf-trend-row td:first-child{position:relative;padding-left:14px!important}
.perf-trend-row td:first-child::before{content:'';position:absolute;left:0;top:6px;bottom:6px;width:3px;background:var(--teal)}
@media (max-width:720px){.perf-hero{grid-template-columns:1fr}}
.copyhub-panel.open .copyhub-arrow{transform:rotate(180deg)}
.copyhub-body{max-height:0;overflow:hidden;transition:max-height .3s ease}
.copyhub-panel.open .copyhub-body{max-height:none;overflow-y:auto;flex:1;min-height:0}
.copyhub-content{padding:0 20px 20px}

/* filas expandibles */
.xrow{cursor:pointer;transition:background .15s}.xrow:hover{background:var(--hover-bg)}
.xchev{font-size:10px;color:var(--muted);margin-left:8px;width:14px;text-align:center;transition:transform .2s}
.xbody{padding:12px 16px 16px;background:var(--sunken);border:1px solid var(--line);border-top:0;border-radius:0 0 var(--radius-md) var(--radius-md);margin:-1px 0 8px}

/* Reality Framework */
.rf-label{font:600 10px var(--sans);color:var(--muted);margin-bottom:6px}
.rf-thesis{background:var(--accent-soft);border:1px solid var(--accent-2);border-radius:var(--radius-md);padding:14px;margin-bottom:12px}
.rf-thesis-text{font:600 15px/1.4 var(--display);color:var(--ink);margin-bottom:10px}
.rf-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px;margin-bottom:8px}
.rf-card{background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);padding:8px 10px}
.rf-card-label{font:600 9px var(--sans);color:var(--muted);margin-bottom:2px}
.rf-card-text{font-size:12px;line-height:1.4;color:var(--ink)}
.rf-evidence{margin-top:4px;display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.rf-realities{margin-bottom:12px}
.rf-reality{background:var(--sunken);border:1px solid var(--line);border-radius:var(--radius-md);padding:10px 12px;margin-bottom:8px}
.rf-perscript{margin-bottom:12px}
.rf-script-row{display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;border-radius:var(--radius-sm);transition:background .15s}
.rf-script-row:hover{background:var(--hover-bg)}
.rf-script-tags{background:var(--accent-soft);border:1px solid var(--accent-2);border-radius:var(--radius-md);padding:10px 12px;margin-bottom:8px}
.rf-strategy-section{margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--line)}

/* master-detail de productos */
.prod-md{display:grid;grid-template-columns:340px 1fr;gap:16px;min-height:400px}
.prod-md-list{overflow-y:auto;max-height:calc(100vh - 200px);border-right:1px solid var(--line);padding-right:12px}
.prod-md-detail{overflow-y:auto;max-height:calc(100vh - 200px);padding-left:4px}
.prod-row{cursor:pointer;transition:background .15s,border-color .15s;border-left:3px solid transparent;padding-left:8px}
.prod-row:hover{background:var(--hover-bg)}
.prod-selected{background:var(--accent-soft) !important;border-left-color:var(--accent)}

@media(max-width:1080px){.core-overlay{left:50%}}
@media(max-width:880px){
  body{overflow:auto;height:auto}
  .viewport{height:auto;min-height:100vh;overflow:visible}
  .rail{position:sticky;left:0;top:0;transform:none;width:auto;margin:14px;max-height:none;flex-direction:row;flex-wrap:wrap;align-items:center}
  .rail-brand{padding:0 12px 0 4px}.rail-nav{display:flex;gap:6px;overflow-x:auto}.rail-grp{margin:0;display:flex;gap:4px}.rail-grp .lbl{display:none}.rail-foot{display:none}
  .core-overlay{position:relative;left:auto;top:auto;transform:none;margin:60px auto 40px;padding:0 16px}
  #bg3d{opacity:.5}
  .win-overlay{padding:0}.win{left:0;top:0;bottom:0;width:100%;min-width:0;max-width:100vw;resize:none;border-radius:0}.core-num{font-size:58px}
  .core-stats{flex-wrap:wrap;gap:24px;justify-content:center}
  .chat-win{width:calc(100vw - 32px);height:70vh}.gen-wrap{grid-template-columns:1fr}.cards.two{grid-template-columns:1fr}
  .prod-md{grid-template-columns:1fr;gap:12px}.prod-md-list{max-height:300px;border-right:0;border-bottom:1px solid var(--line);padding-right:0;padding-bottom:12px}.prod-md-detail{max-height:none}
  .copyhub-panel{left:0;position:relative}
  .search-input{width:100%}
}
@media(prefers-reduced-motion:reduce){*{animation:none !important;transition:none !important}}

/* Performance cards + tables (30-sep-2026): one table per row, numbers in the
   UI face with tabular figures (not mono), same column grid in every card. */
.pvcard{background:var(--raised);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-card);margin-bottom:16px;overflow:hidden}
.pvcard header{padding:14px 18px 10px}
.pvcard h3{font:600 14px var(--sans);color:var(--ink);letter-spacing:-.005em}
.pvcard header p{font:400 12px var(--sans);color:var(--muted);margin-top:3px;line-height:1.45}
.pvcard-body{overflow-x:auto;padding:0 6px 6px}
.ptbl{width:100%;border-collapse:collapse;table-layout:fixed;font:400 13px var(--sans);font-variant-numeric:tabular-nums}
.ptbl th{font:500 11px var(--sans);color:var(--muted);text-align:left;padding:8px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
.ptbl td{padding:10px 12px;border-bottom:1px solid var(--line);color:var(--ink-2);vertical-align:middle}
.ptbl tbody tr:last-child td{border-bottom:0}
.ptbl tbody tr:hover td{background:var(--hover-bg)}
.ptbl .n{text-align:right;white-space:nowrap;width:8.5%}
.ptbl .nm{width:auto;color:var(--ink);font-weight:500}
.ptbl .nm-t{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.3}
.ptbl .k2{width:52px;color:var(--ink-2);white-space:nowrap}
.ptbl .rk{width:28px;text-align:right;color:var(--muted-2);font-size:12px;padding-right:4px}
.ptbl .mut{color:var(--muted)}
.ptbl .strong{font-weight:600}
.ptbl .pos{color:var(--green)}
.ptbl .neg{color:var(--red)}
.ptbl .cmp-warn{color:#d9a400}
.ptbl .empty{color:var(--muted);padding:18px 12px;text-align:left}
.ptbl .perf-share{width:120px;height:3px;margin-top:6px}
@media (max-width:900px){.ptbl{table-layout:auto}.ptbl .n{width:auto}}

/* Seguimiento (30-sep-2026) */
.seg-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px;margin-bottom:16px}
.seg-card{background:var(--raised);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-card);padding:14px 16px}
.seg-name{font:600 14px var(--sans);color:var(--ink);margin-bottom:10px}
.seg-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:10px}
.seg-kpis b{display:block;font:600 20px var(--sans);font-variant-numeric:tabular-nums;color:var(--ink)}
.seg-kpis span{font:400 11px var(--sans);color:var(--muted)}
.seg-money{display:flex;justify-content:space-between;font:500 12px var(--sans);font-variant-numeric:tabular-nums;color:var(--ink-2);border-top:1px solid var(--line);padding-top:8px}
.seg-money .pos{color:var(--green)}.seg-money .neg{color:var(--red)}
.seg-heat{display:inline-block;min-width:26px;padding:2px 6px;border-radius:4px;text-align:center;background:rgba(74,79,212,var(--a));color:var(--ink)}
.seg-inp{font:500 12px var(--sans);padding:4px 7px;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--ink);width:110px}
.seg-badge{display:inline-block;margin-left:8px;padding:2px 8px;border-radius:10px;font:500 11px var(--sans);background:#fdf3d8;color:#8a6200;vertical-align:middle}
.seg-badge.ok{background:var(--accent-soft);color:var(--accent)}
.seg-assign .pvcard{box-shadow:none;margin:8px 6px}
.ptbl th.sortable{cursor:pointer;user-select:none}
.ptbl th.sortable:hover{color:var(--ink)}
.ptbl th.sorted{color:var(--accent)}
.ptbl .w96{width:96px}.ptbl .w70{width:70px}.ptbl .w62{width:62px}
.seg-camps .n{width:7.5%}
.seg-pager{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 16px 14px;font:500 12px var(--sans);color:var(--muted);flex-wrap:wrap}
.seg-pager .pill-btn[disabled]{opacity:.4;cursor:default}
.ptbl tfoot .seg-total td{border-top:2px solid var(--border,#d0d0d0);font-weight:700;background:var(--bg2,rgba(0,0,0,.03))}
.seg-est{color:var(--muted);font-weight:500}
.perf-attr-note{font:500 12px var(--sans);color:var(--ink-2,var(--muted));background:var(--surface-2,rgba(74,79,212,.06));border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin-bottom:12px}

/* ════════════════════════════════════════════════════════════════════════
   Look & feel v2 (1-oct-2026, Rodrigo): inspirado en un panel de reportes
   que le gustó — fondo cálido casi blanco, menú lateral de altura completa
   con buscador ⌘K y usuario abajo, contenido a todo el ancho (sin ventana
   flotante), tarjetas blancas de borde suave, acento verde oscuro.
   Va al final a propósito: reescribe tokens y layout de arriba.
   ════════════════════════════════════════════════════════════════════════ */
:root{
  --bg:#fbfaf7; --sidebar:#f5f4ef; --raised:#ffffff; --hover-bg:#f1f0ea; --sunken:#f0efe9;
  --surface:#ffffff; --surface-2:#f3f2ec;
  --line:#e9e7df; --line-2:#d9d7ce;
  --ink:#1d1d1b; --ink-2:#4a4a45; --muted:#86857d; --muted-2:#adaca4;
  --accent:#2f5d3f; --accent-2:#cfe0d3; --accent-soft:#e9f1eb;
  --green:#2f7a4c; --green-soft:#e7f2ea; --red:#b2332b; --red-soft:#fbeceb;
  --shadow-card:0 1px 2px rgba(40,38,30,.04);
  --radius-md:8px; --radius-lg:12px; --r:10px; --r-lg:12px;
}
body{background:var(--bg)}
#bg3d,.core-overlay{display:none!important}

/* menú lateral: altura completa, pegado a la izquierda */
.rail{left:0;top:0;bottom:0;width:248px;border:0;border-right:1px solid var(--line);border-radius:0;
  background:var(--sidebar);padding:12px 10px 10px}
.sb-brand{display:flex;align-items:center;gap:10px;padding:9px 10px;background:#fff;border:1px solid var(--line);
  border-radius:10px;box-shadow:var(--shadow-card);margin-bottom:10px}
.sb-brand b{display:block;font:600 13px var(--sans);color:var(--ink)}
.sb-brand span{display:block;font:500 11px var(--sans);color:var(--muted)}
.sb-search{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;margin-bottom:16px;
  background:#fff;border:1px solid var(--line);border-radius:9px;font:500 12.5px var(--sans);color:var(--muted);cursor:pointer;transition:.15s}
.sb-search:hover{border-color:var(--line-2);color:var(--ink-2)}
.sb-search kbd{margin-left:auto;font:500 10.5px var(--sans);color:var(--muted);border:1px solid var(--line);border-radius:5px;padding:1px 5px;background:var(--sidebar)}
.rail-grp{margin-bottom:14px}
.rail-grp .lbl{font:600 10.5px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--muted-2);padding:0 10px 7px}
.rail-nav a{gap:11px;padding:8px 10px;border-radius:9px;font-size:13.5px;color:var(--ink-2)}
.rail-nav a svg{width:17px;height:17px;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;color:var(--muted)}
.rail-nav a .gl{display:none}
.rail-nav a:hover{background:var(--hover-bg)}
.rail-nav a.on{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 1px 3px rgba(40,38,30,.08),0 0 0 1px var(--line)}
.rail-nav a.on svg{color:var(--accent)}
.rail-foot{border-top:1px solid var(--line);padding:10px 4px 0}
.sb-sync summary{list-style:none;cursor:pointer;font:500 12px var(--sans);color:var(--muted);padding:6px 6px;border-radius:8px;display:flex;align-items:center;gap:8px}
.sb-sync summary::-webkit-details-marker{display:none}
.sb-sync summary:hover{background:var(--hover-bg);color:var(--ink-2)}
.sb-sync[open] summary{color:var(--ink)}
.sb-sync .sb-sync-body{padding:6px 4px 8px}
.sb-user{display:flex;align-items:center;gap:10px;padding:8px 6px;border-radius:9px;cursor:pointer;margin-top:4px}
.sb-user:hover{background:var(--hover-bg)}
.sb-avatar{width:32px;height:32px;border-radius:50%;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font:700 11.5px var(--sans);flex-shrink:0}
.sb-user b{display:block;font:600 12.5px var(--sans);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-user span{display:block;font:500 11px var(--sans);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-user .sb-meta{min-width:0;flex:1}
.sb-build{font:500 10px var(--sans);color:var(--muted-2);padding:4px 8px 0}

/* contenido: a todo el ancho, sin ventana flotante */
.win-overlay{left:248px!important;top:0;right:0;bottom:0;background:var(--bg)!important}
.win{position:absolute!important;inset:0!important;width:auto!important;height:auto!important;transform:none!important;
  border:0!important;border-radius:0!important;box-shadow:none!important;background:transparent!important;animation:none!important}
.win-body{height:100%;overflow-y:auto;padding:26px 28px 48px!important}
.win-body>div{max-width:none}   /* Mejora #34: was 1500px, so wide screens / low zoom never gave tables more room */
.win-refresh{background:#fff;border-color:var(--line);border-radius:9px}

/* tarjetas y tablas */
.pvcard{background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-card)}
.pvcard header{padding:16px 20px 10px}
.pvcard h3{font:600 14px var(--sans)}
.ptbl th{font:500 11.5px var(--sans);color:var(--muted)}
.ptbl tbody tr:hover td{background:#faf9f5}
.pill-btn{background:#fff;border:1px solid var(--line);border-radius:8px;padding:5px 11px;font:500 12px var(--sans);color:var(--ink-2)}
.pill-btn:hover{border-color:var(--line-2);color:var(--ink)}
.pill-btn.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.cmp-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
.cmp-fld{display:inline-flex;align-items:center;gap:8px;font:500 12px var(--sans);color:var(--muted)}
.cmp-ctl{box-sizing:border-box;height:30px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:0 11px;font:500 12px var(--sans);color:var(--ink-2);transition:.15s;outline:0}
.cmp-ctl:hover{border-color:var(--line-2);color:var(--ink)}
.cmp-ctl:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);color:var(--ink)}
select.cmp-ctl{appearance:none;-webkit-appearance:none;cursor:pointer;padding-right:28px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%239a9aa5' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat right 11px center}
input.cmp-ctl[type=number]{width:72px;font-variant-numeric:tabular-nums;-moz-appearance:textfield}
input.cmp-ctl[type=number]::-webkit-inner-spin-button,input.cmp-ctl[type=number]::-webkit-outer-spin-button{opacity:0;margin:0}
input.cmp-ctl[type=number]:hover::-webkit-inner-spin-button,input.cmp-ctl[type=number]:focus::-webkit-inner-spin-button{opacity:1}
.modal{background:#fff;border-radius:14px}
.toast{left:calc(50% + 124px)}

/* ── Performance v2 ── */
.pg-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px}
.pg-head h1{font:600 22px var(--sans);letter-spacing:-.015em;color:var(--ink)}
.pg-head .pg-upd{font:500 11.5px var(--sans);color:var(--muted)}
.flt-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:18px}
.flt{position:relative}
.flt-btn{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:7px;padding:7px 13px;background:#fff;border:1px solid var(--line);
  border-radius:99px;font:500 12.5px var(--sans);color:var(--ink-2);cursor:pointer;transition:.15s;white-space:nowrap}
.flt-btn:hover{border-color:var(--line-2);color:var(--ink)}
.flt-btn.act{border-color:var(--ink-2);color:var(--ink)}
.flt-btn svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8;color:var(--muted)}
.flt-btn .car{font-size:9px;color:var(--muted);margin-left:1px}
.flt-btn .flb{color:var(--muted)}
.flt-pop{position:absolute;top:calc(100% + 6px);left:0;z-index:30;min-width:240px;background:#fff;border:1px solid var(--line);border-radius:12px;
  box-shadow:0 12px 32px -12px rgba(40,38,30,.22),0 2px 6px rgba(40,38,30,.06);padding:8px}
.flt-opt{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:8px;font:500 12.5px var(--sans);color:var(--ink-2);cursor:pointer}
.flt-opt:hover{background:var(--hover-bg);color:var(--ink)}
.flt-opt.on{color:var(--ink);font-weight:600}
.flt-opt.on::after{content:'✓';margin-left:auto;color:var(--accent)}
.flt-opt.dis{opacity:.4;cursor:not-allowed}
.flt-sep{height:1px;background:var(--line);margin:6px 2px}
.flt-pop input[type=date],.flt-pop input[type=text]{font:500 12px var(--sans);padding:6px 8px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink)}
.pv-kpis{display:grid;grid-template-columns:repeat(4,1fr);background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-card);margin-bottom:16px;overflow:hidden}
.pv-kpi{padding:18px 20px;border-left:1px solid var(--line)}
.pv-kpi:first-child{border-left:0}
.pv-kpi .lbl{font:500 12px var(--sans);color:var(--muted)}
.pv-kpi .val{font:600 27px var(--sans);letter-spacing:-.02em;margin:8px 0 6px;font-variant-numeric:tabular-nums;color:var(--ink)}
.pv-kpi .val.pos{color:var(--green)} .pv-kpi .val.neg{color:var(--red)}
.pv-kpi .dlt{font:500 11.5px var(--sans);color:var(--muted)}

/* ── buscador ⌘K ── */
.cmdk-overlay{position:fixed;inset:0;z-index:200;background:rgba(40,38,30,.28);display:none;align-items:flex-start;justify-content:center;padding-top:9vh}
.cmdk-overlay.open{display:flex}
.cmdk{width:min(640px,92vw);background:#fff;border-radius:16px;box-shadow:0 30px 80px -20px rgba(40,38,30,.4);overflow:hidden;border:1px solid var(--line)}
.cmdk-top{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--line)}
.cmdk-top svg{width:20px;height:20px;stroke:var(--muted);fill:none;stroke-width:1.8}
.cmdk-top input{flex:1;border:1px solid var(--line);border-radius:10px;padding:11px 14px;font:500 15px var(--sans);color:var(--ink);outline:0}
.cmdk-top input:focus{border-color:var(--accent-2);box-shadow:0 0 0 3px var(--accent-soft)}
.cmdk-chips{display:flex;gap:8px;padding:10px 16px;border-bottom:1px solid var(--line)}
.cmdk-chips button{all:unset;cursor:pointer;padding:5px 13px;border:1px solid var(--line);border-radius:99px;font:500 12.5px var(--sans);color:var(--ink-2)}
.cmdk-chips button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.cmdk-list{max-height:min(52vh,440px);overflow-y:auto;padding:6px 8px}
.cmdk-sec{font:600 10.5px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--muted-2);padding:10px 10px 6px}
.cmdk-item{display:flex;align-items:center;gap:12px;padding:9px 10px;border-radius:9px;font:500 14px var(--sans);color:var(--ink);cursor:pointer}
.cmdk-item svg{width:18px;height:18px;stroke:var(--muted);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.cmdk-item small{margin-left:auto;font:500 11.5px var(--sans);color:var(--muted)}
.cmdk-item.sel{background:var(--hover-bg)}
.cmdk-foot{display:flex;gap:18px;padding:10px 16px;border-top:1px solid var(--line);font:500 11.5px var(--sans);color:var(--muted)}
.cmdk-empty{padding:18px 12px;color:var(--muted);font:500 13px var(--sans)}
.win{resize:none!important;min-width:0!important;max-width:none!important}
.sb-brand{flex-direction:column;align-items:flex-start;gap:6px;padding:12px 12px 10px}
.sb-wlogo{height:24px;width:auto;display:block}
.sb-hub{font:500 10px var(--sans)!important;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)!important}
.seg-st{display:inline-flex;align-items:center;gap:5px;font:500 11.5px var(--sans);color:var(--muted)}.seg-st::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--muted-2)}.seg-st.on{color:var(--green)}.seg-st.on::before{background:var(--green)}
.ptbl.seg-camps{table-layout:auto}.ptbl.seg-camps .nm{min-width:230px}.ptbl.seg-camps .n,.ptbl.seg-camps .k2{width:auto}
.ptbl.seg-camps th,.ptbl.seg-camps td{padding-left:7px;padding-right:7px}.ptbl.seg-camps .nm{min-width:200px}
/* 1-oct-2026 (Rodrigo): tablas más anchas — contenido a todo el ancho, márgenes laterales más cortos */
.win-body{padding:22px 26px 40px!important}
.win-body>div{max-width:none!important}
.pvcard-body{padding:0 4px 4px}
.sb-logout{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:100%;padding:7px 8px;margin-top:2px;border-radius:8px;font:500 12.5px var(--sans);color:var(--muted);cursor:pointer}
.sb-logout svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sb-logout:hover{background:var(--red-soft);color:var(--red)}
.sb-bell:hover{background:var(--hover-bg)!important;color:var(--ink)!important}
.sb-badge{margin-left:auto;min-width:18px;height:18px;padding:0 5px;border-radius:99px;background:var(--accent);color:#fff;font:700 10.5px var(--sans);display:inline-flex;align-items:center;justify-content:center}
/* Pestañas de página (Comparadores: General / Optimizaciones) */
.pg-tabs{display:flex;gap:22px;border-bottom:1px solid var(--line);margin-bottom:16px}
.pg-tabs a{padding:8px 1px 11px;font:500 13.5px var(--sans);color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.pg-tabs a:hover{color:var(--ink-2)}
.pg-tabs a.on{color:var(--ink);font-weight:600;border-bottom-color:var(--ink)}
/* Marca del menú lateral centrada (1-oct-2026, Rodrigo) */
.sb-brand{align-items:center;text-align:center}

/* Column titles stay visible while scrolling a long table (Rodrigo, 1-oct-2026):
   each table card scrolls inside, at most one screen high, with a sticky header. */
.pvcard-body{max-height:calc(100vh - 110px);overflow:auto}
.ptbl thead th{position:sticky;top:0;z-index:2;background:var(--raised);box-shadow:inset 0 -1px 0 var(--line)}

/* ── Mobile (Mejora #3, David, 2-oct-2026) ──
   Top bar with a menu button; the left menu is a drawer; content full width;
   card grids stack; wide tables scroll sideways inside their card. */
.mtop,.nav-scrim{display:none}
@media (max-width:860px){
  body{overflow:hidden;height:100vh}
  .viewport{height:100vh;overflow:hidden}
  .mtop{display:flex;align-items:center;gap:10px;position:fixed;top:0;left:0;right:0;height:52px;z-index:150;
    padding:0 12px;background:var(--sidebar);border-bottom:1px solid var(--line)}
  .mtop button{all:unset;cursor:pointer;width:38px;height:38px;display:grid;place-items:center;border-radius:9px;background:#fff;border:1px solid var(--line)}
  .mtop svg{width:20px;height:20px;stroke:var(--ink);fill:none;stroke-width:1.8;stroke-linecap:round}
  .mtop b{font:600 15px var(--sans);color:var(--ink)}
  .rail{position:fixed!important;top:0!important;bottom:0!important;left:0!important;margin:0!important;width:min(280px,84vw)!important;
    max-height:none!important;flex-direction:column!important;flex-wrap:nowrap!important;align-items:stretch!important;
    transform:translateX(-105%)!important;transition:transform .22s ease;z-index:300;overflow-y:auto;display:flex!important}
  body.nav-open .rail{transform:none!important;box-shadow:0 0 40px rgba(0,0,0,.18)}
  .rail-nav{display:block!important;overflow:visible!important}.rail-grp{display:block!important;margin-bottom:14px!important}
  .rail-grp .lbl{display:block!important}.rail-foot{display:block!important}
  body.nav-open .nav-scrim{display:block;position:fixed;inset:0;z-index:250;background:rgba(40,38,30,.32)}
  .win-overlay{left:0!important;top:52px!important;padding:0!important}
  .win-body{padding:16px 12px 40px!important}
  .pg-head{flex-wrap:wrap;gap:8px}.pg-head h1{font-size:19px}
  .flt-row{gap:6px}.flt{position:static}
  /* compact filter chips on a phone (Rodrigo, 5-oct-2026: they took 4 lines): icon + value, no grey label */
  .flt-row{margin-bottom:12px}
  .flt-btn{padding:5px 9px!important;gap:5px!important;font-size:12px!important;white-space:nowrap}
  .flt-btn .flb{display:none}
  .flt-btn.is-def .flb{display:inline}.flt-btn.is-def .fval{display:none}   /* at its default value: show the filter's name instead ("Comparar", not "No") */
  .flt-btn svg{width:13px;height:13px}
  .flt-btn .car{margin-left:0}
  /* Mejora #31 (David, 5-oct-2026): on a phone the filter menus opened below the screen
     (with .flt static, top:100% pointed far down the page). Now they are a sheet fixed
     at the bottom of the screen, always visible, scrolling when long. */
  .flt-pop{position:fixed!important;top:auto!important;bottom:12px!important;left:12px!important;right:12px!important;width:auto!important;min-width:0!important;max-width:none!important;max-height:70vh;overflow-y:auto;z-index:400!important;box-shadow:0 -6px 30px rgba(0,0,0,.18)}
  .pv-kpis{grid-template-columns:1fr!important}.pv-kpi{border-left:0;border-top:1px solid var(--line)}.pv-kpi:first-child{border-top:0}
  .pv-kpi .val{font-size:23px}
  /* inline grids (cards, Mejoras columns, Seguimiento…) stack */
  .win-body [style*="grid-template-columns:repeat"],.win-body [style*="grid-template-columns: repeat"]{grid-template-columns:1fr!important}
  .pvcard header{padding-left:14px;padding-right:14px}
  .ptbl{table-layout:auto;min-width:620px}.ptbl .n{width:auto}
  .ptbl th,.ptbl td{padding:8px 9px}
  .pvcard-body{max-height:75vh}
  .seg-inp{max-width:100%}
  .modal{padding:20px}
  .cmdk-overlay{padding-top:60px}
}

/* Column views picker (Mejora #4) */
.pv-sec{font:600 10.5px var(--sans);letter-spacing:.05em;text-transform:uppercase;color:var(--muted-2);padding:6px 9px 4px}
.pv-mv{all:unset;cursor:pointer;width:22px;height:22px;display:grid;place-items:center;border-radius:5px;border:1px solid var(--line);font-size:11px;color:var(--ink-2);background:#fff}
.pv-mv:disabled{opacity:.3;cursor:default}

/* Period comparison lines under each figure (Mejora #5) */
.cmpv{font:500 10.5px var(--sans);color:var(--muted);white-space:nowrap;margin-top:2px;line-height:1.35}
.cmpv .cl{opacity:.75;margin-right:2px}
.cmpv span:last-child{font-weight:600}
.cmp-legend{font:500 11.5px var(--sans);color:var(--muted);margin:-8px 0 12px}
.cmp-legend b{color:var(--ink-2)}

/* Click-to-sort column titles (Mejora #6) */
.ptbl thead th:not([onclick]):not(.rk){cursor:pointer;user-select:none}
.ptbl thead th:not([onclick]):not(.rk):hover{color:var(--ink)}
.ptbl thead th.srt-desc,.ptbl thead th.srt-asc{color:var(--ink)}
.ptbl thead th.srt-desc::after{content:' ▼';font-size:9px}
.ptbl thead th.srt-asc::after{content:' ▲';font-size:9px}

/* Data moment line on the Optimizer (Mejora #9) */
.opt-stamp{display:inline-block;margin:6px 0 4px;padding:5px 10px;border-radius:8px;background:var(--accent-soft,#eef6f1);font:500 12px var(--sans);color:var(--ink-2)}
.opt-stamp b{color:var(--ink)}

/* Clickable rows (drill-down) and breadcrumb — Reimpacto, 2-oct-2026 */
.ptbl tbody tr.row-go{cursor:pointer}
.ptbl tbody tr.row-go:hover td{background:var(--accent-soft,#eef6f1)}
.ri-crumbs{font:500 13px var(--sans);color:var(--muted);margin:2px 0 10px}
.ri-crumbs a{cursor:pointer;color:var(--ink-2);text-decoration:underline;text-underline-offset:3px}
.ri-crumbs a.on{color:var(--ink);font-weight:600;text-decoration:none;cursor:default}

/* Experimentos (2-oct-2026) */
.exp-warn{font:500 12px var(--sans);color:#8a5a00;background:#fdf3d0;border:1px solid #f1dc9a;border-radius:9px;padding:8px 12px;margin-bottom:14px}
.exp-st{font:600 11px var(--sans);color:var(--muted);margin-left:8px}
.exp-st.on{color:var(--green)}
.exp-ctl{font:600 10px var(--sans);color:var(--muted);border:1px solid var(--line);border-radius:99px;padding:0 6px;margin-left:4px}
.exp-v{display:inline-block;font:700 12px var(--sans);border-radius:7px;padding:2px 8px}
.exp-concl{padding:10px 20px 16px;font:500 13px var(--sans);color:var(--ink-2);line-height:1.5}

.exp-card{margin-bottom:10px}
.exp-sum{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:14px 18px;cursor:pointer;font:500 13px var(--sans)}
.exp-sum:hover{background:var(--hover-bg)}
.exp-car{color:var(--muted);width:12px}
.exp-meta{font:500 12px var(--sans);color:var(--muted);padding:0 20px 4px;margin:0}
.exp-card .ptbl .nm{width:190px}.exp-card .ptbl .nm .nm-t{white-space:normal}
.pt-form{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.pt-form label{display:flex;flex-direction:column;gap:4px;font:600 11.5px var(--sans);color:var(--muted)}
.pt-form .seg-inp{width:100%;max-width:none;box-sizing:border-box}
.task-error{margin:-6px 0 14px;padding:12px 16px;border:2px solid var(--red);border-radius:10px;background:var(--red-soft);color:var(--red);font:600 15px/1.45 var(--sans)}
.task-error ul{margin:6px 0 0 18px;padding:0;font-weight:500;font-size:14px}
.task-bad{outline:2px solid var(--red);outline-offset:1px;border-radius:8px}
.task-sec{font:600 10px var(--sans);color:var(--accent);background:var(--accent-soft,#eef6f1);border-radius:99px;padding:1px 7px}

/* Mejora #34 (Juan Camilo, 5-oct-2026): tables that fit on screen.
   1) hide the left menu (desktop; remembered per browser), 2) wide tables (.seg-camps) wrap their
   titles on two lines and use tighter cells, 3) drag the right edge of a column title to resize it. */
.nav-toggle{display:none}
@media (min-width:861px){
  .nav-toggle{all:unset;box-sizing:border-box;display:grid;place-items:center;position:fixed;top:22px;left:235px;z-index:70;
    width:26px;height:26px;border-radius:50%;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow-card);cursor:pointer;transition:left .18s}
  .nav-toggle:hover{border-color:var(--line-2)}
  .nav-toggle svg{width:14px;height:14px;stroke:var(--ink-2);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .18s}
  .rail{transition:transform .18s}
  .win-overlay{transition:left .18s}
  body.nav-hide .rail{transform:translateX(-100%)}
  body.nav-hide .win-overlay{left:0!important}
  body.nav-hide .nav-toggle{left:8px}
  body.nav-hide .nav-toggle svg{transform:rotate(180deg)}
  body.nav-hide .win-body{padding-left:44px!important}
}
.ptbl.seg-camps th{white-space:normal;line-height:1.25;vertical-align:bottom}
.ptbl.seg-camps th,.ptbl.seg-camps td{padding-left:5px;padding-right:5px}
.ptbl.seg-camps .nm{min-width:170px}
.ptbl .acts{width:98px}.ptbl .xc{width:104px}   /* «Acciones» (📅 Por día) no longer cut in fixed-width tables */
.ptbl thead th{background-clip:padding-box}
.ptbl thead th:not(.rk)::after{content:'';position:absolute;top:0;right:0;bottom:0;width:6px;cursor:col-resize}
.ptbl thead th:not(.rk):hover::after{background:linear-gradient(90deg,transparent 2px,var(--line-2) 2px,var(--line-2) 4px,transparent 4px)}
.ptbl.tw{table-layout:fixed!important}
.ptbl.tw td,.ptbl.tw th{overflow:hidden;text-overflow:ellipsis}
.ptbl.tw td.acts,.ptbl.tw td.xc{white-space:nowrap}   /* Mejora #55: the buttons of Acciones / Desglose stay on one line */
body.col-resizing,body.col-resizing *{cursor:col-resize!important;user-select:none!important}
@media (max-width:860px){.ptbl thead th::after{display:none}}
/* Attribution on (admins): 5 more columns, so the table sizes by content and the name keeps its room */
.ptbl.attr{table-layout:auto}.ptbl.attr .n{width:auto}.ptbl.attr .nm{min-width:160px}
.ptbl.attr th,.ptbl.attr td{padding-left:7px;padding-right:7px}.ptbl.attr th{white-space:normal;vertical-align:bottom;line-height:1.25}

/* Performance › Comparar (Mejora #5, David, PRD of 5-oct-2026): every compared period is a block of the same
   columns to the right of the current period, with a slightly different background (same tone for all of them). */
.ptbl.cmpw{table-layout:fixed!important}
.ptbl.cmpw th.n,.ptbl.cmpw td.n{width:auto}
.ptbl .cmpb{background:var(--raised)}
.ptbl .cmpb.bl{border-left:1px solid var(--line)}
.ptbl tbody tr:hover td.cmpb{background:var(--hover-bg)}
.ptbl thead tr.cmp-grp th{top:0;height:44px;box-sizing:border-box;text-align:left;white-space:nowrap;color:var(--ink-2);font-weight:600;line-height:1.25}
.ptbl thead tr.cmp-grp th.cg:not(.cmpb){background:var(--bg)}
.ptbl thead tr.cmp-grp small{display:block;font-weight:500;font-size:10.5px;color:var(--muted)}
.ptbl.cmpw thead tr:not(.cmp-grp) th{top:44px}
.ptbl .cmpd{font-size:10.5px;margin-left:3px}

/* Operaciones › Adyen (6-oct-2026): the fixed column widths of .ptbl cut these cells; let the table size itself */
.ptbl.ops-tbl{table-layout:auto}
.ptbl.ops-tbl .n,.ptbl.ops-tbl .k2{width:auto}
.ptbl.ops-tbl th,.ptbl.ops-tbl td{padding-left:10px;padding-right:10px}
.ptbl.ops-tbl .ops-c{text-align:left;white-space:normal;min-width:150px;line-height:1.35}
.ptbl.ops-tbl .ops-c .ops-main{white-space:nowrap}
.ptbl.ops-tbl .ops-c .ops-notes{display:block;font-size:10.5px;color:var(--muted)}
.ptbl.ops-tbl .nm{min-width:170px}
.ptbl.src-tbl .nm{min-width:0;width:150px;max-width:150px}   /* Oportunidades de coste: narrower offer column (15-oct-2026) */
.ops-how{margin-top:6px;font:400 12px/1.5 var(--sans);color:var(--muted)}
.ops-how summary{cursor:pointer;color:var(--ink-2);font-weight:500}
.ops-how ul{margin:6px 0 0 18px;padding:0}

/* Equipo › Cuadro de accesos (6-oct-2026) */
.acc-tbl{border-collapse:separate;border-spacing:0;min-width:900px}
.acc-tbl th,.acc-tbl td{padding:7px 8px;text-align:center}
.acc-tbl .acc-who{text-align:left;position:sticky;left:0;background:var(--raised);z-index:1;min-width:190px}
.acc-tbl .acc-grp{font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line)}
.acc-tbl .acc-col{font-size:10.5px;font-weight:500;white-space:normal;line-height:1.2;min-width:64px}
.acc-tbl .acc-c{font-size:15px}
.acc-r{color:var(--green);font-weight:700}
.acc-l{color:var(--accent);font-weight:700}
.acc-n{color:var(--muted-2,#bbb)}

/* Mover y quitar columnas (Mejora #50, 6-oct-2026) */
.ptbl th .col-grip,.ptbl th .col-x{opacity:0;font-size:10px;line-height:1;color:var(--muted);padding:0 2px;user-select:none;transition:opacity .12s}
.ptbl th .col-grip{cursor:grab;margin-right:2px}
.ptbl th .col-x{cursor:pointer;margin-left:3px}
.ptbl th:hover .col-grip,.ptbl th:hover .col-x{opacity:.85}
.ptbl th .col-x:hover{color:var(--red)}
.ptbl th.col-over{outline:2px dashed var(--accent);outline-offset:-2px}
.col-bar{display:flex;align-items:center;gap:10px;padding:6px 12px;font:500 11.5px var(--sans);color:var(--muted)}
.col-bar .pill-btn{padding:2px 10px;font-size:11.5px}
@media (hover:none){.ptbl th .col-grip,.ptbl th .col-x{opacity:.6}}

/* Mover y quitar filas (Mejora #50, corrección de Abraham, 6-oct-2026) */
.ptbl td.row-cell{position:relative}
.ptbl .row-grip,.ptbl .row-x{opacity:0;font-size:10px;line-height:1;color:var(--muted);user-select:none;z-index:1;transition:opacity .12s}
.ptbl .row-grip{position:absolute;top:50%;transform:translateY(-50%);left:1px;cursor:grab}
.ptbl .row-x{display:inline-block;margin-left:10px;cursor:pointer;border-radius:3px;padding:1px 3px}   /* justo tras el nombre, solo al pasar el ratón */
.ptbl tr:hover .row-grip,.ptbl tr:hover .row-x{opacity:.85}
.ptbl .row-x:hover{color:var(--red)}
.ptbl tr.row-over td{box-shadow:inset 0 2px 0 var(--accent)}
@media (hover:none){.ptbl .row-grip,.ptbl .row-x{opacity:.6}}

/* Operaciones › Cuadro de mando: tarjetas como las de Performance (6-oct-2026) */
.cm-h{font:600 15px var(--sans);margin:6px 0 4px}
.cm-kpis .pv-kpi{min-width:0}
.cm-kpis .pv-kpi:nth-child(4n+1){border-left:0}
.cm-kpis .pv-kpi:nth-child(n+5){border-top:1px solid var(--line)}
.cm-kpis .pv-kpi .val{font-size:25px}
.cm-kpis .pv-kpi .dlt{line-height:1.7}
.cm-chip{display:inline-block;font:600 11px var(--sans);padding:1px 8px;border-radius:99px;margin-left:4px;white-space:nowrap;vertical-align:baseline}
.cm-chip.pos{background:var(--green-soft);color:var(--green)}
.cm-chip.neg{background:var(--red-soft);color:var(--red)}
.cm-chip.flat{background:var(--sunken);color:var(--muted)}
.cm-bars{margin-top:10px;display:flex;flex-direction:column;gap:4px}
.cm-bar{height:5px;border-radius:99px;background:var(--sunken);overflow:hidden}
.cm-bar i{display:block;height:100%;border-radius:99px}
.cm-bar.cur i{background:var(--accent)}
.cm-bar.prev i{background:#c9c5ba}

/* Cuadro de mando: tarjetas de la previsión (6-oct-2026) */
.cm-f .pv-kpi:nth-child(n+4){border-top:0}
.cm-f .pv-kpi:nth-child(3n+1){border-left:0}
.cm-scn{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font:500 12px var(--sans);color:var(--ink-2);padding:4px 0;border-top:1px dashed var(--line);white-space:nowrap}
.cm-scn.main{font-weight:700;color:var(--ink)}
.cm-bar.sc-peor i{background:var(--accent);opacity:.4}
.cm-bar.sc-igual i{background:var(--accent);opacity:.7}
.cm-bar.sc-mejor i{background:var(--accent)}
@media (max-width:860px){.cm-f{grid-template-columns:1fr!important}.cm-f .pv-kpi{border-left:0;border-top:1px solid var(--line)}.cm-f .pv-kpi:first-child{border-top:0}}
