/* LICITAI portal — estilos portados del diseño de Claude Design «Portal LICITAI.dc.html».
   Autónomo respecto a css/styles.css: el portal y la web pública no comparten CSS. */

*{box-sizing:border-box}
body{margin:0}
.dsroot{
--bg:#EEF1F6;--surface:#FFFFFF;--surface-2:#E6EBF2;--surface-3:#DAE1EC;
--ink:#0D1B2A;--ink-2:#3E4E63;--muted:#6B7C93;--line:#DCE2EC;--line-2:#C4CDDB;
--primary:#1B3A6B;--primary-hover:#152E55;--primary-press:#0F2340;--primary-soft:#E3EAF4;--on-primary:#FFFFFF;--gold:#C9A84C;--gold-strong:#8A6D1F;--accent:#2166B8;
--ok:#1C6B3E;--ok-soft:#E3F0E7;--ok-line:#B9D8C4;
--warn:#8A5200;--warn-vivid:#C6871B;--warn-soft:#F6ECD7;--warn-line:#E4CE9C;
--err:#A31D1D;--err-soft:#F8E4E2;--err-line:#E7BDB9;
--info:#22557E;--info-soft:#E3EDF4;--info-line:#B8CFDF;
--ring:0 0 0 3px rgba(27,58,107,.24);
--r-xs:4px;--r-sm:6px;--r-md:10px;--r-lg:14px;--r-xl:20px;--r-pill:999px;
--sh-1:0 1px 2px rgba(24,28,20,.06),0 1px 1px rgba(24,28,20,.04);
--sh-2:0 4px 14px -6px rgba(24,28,20,.18),0 1px 3px rgba(24,28,20,.06);
--sh-3:0 18px 40px -18px rgba(24,28,20,.34),0 4px 12px -6px rgba(24,28,20,.14);
--ff-display:'Playfair Display',serif;--ff-text:'Inter',sans-serif;--ff-mono:'JetBrains Mono',monospace;
background:var(--bg);color:var(--ink);font-family:var(--ff-text);min-height:100vh;-webkit-font-smoothing:antialiased}
.dsroot.dark{
--bg:#0D1B2A;--surface:#14263B;--surface-2:#1B3352;--surface-3:#244063;
--ink:#F4F7FF;--ink-2:#B8C6DD;--muted:#7E90AC;--line:#24405F;--line-2:#34527A;
--primary:#6FA0DC;--primary-hover:#84B0E6;--primary-press:#97BEEC;--primary-soft:#16273D;--on-primary:#0D1B2A;--gold:#E8C96A;--gold-strong:#E8C96A;--accent:#4E9BE8;
--ok:#4FB07C;--ok-soft:#17251C;--ok-line:#2E4B39;--warn:#DDA043;--warn-vivid:#E7B45E;--warn-soft:#2A2113;--warn-line:#4A3B1C;
--err:#E5766B;--err-soft:#2A1614;--err-line:#4C2723;--info:#6BA6D8;--info-soft:#131F29;--info-line:#26404F;--ring:0 0 0 3px rgba(111,160,220,.30)}
.tnum{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
.mono{font-family:var(--ff-mono)}
.disp{font-family:var(--ff-display)}
a{color:var(--primary);text-decoration:none}a:hover{color:var(--primary-hover)}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--ff-text);font-weight:600;font-size:14.5px;line-height:1;padding:12px 18px;border-radius:var(--r-md);border:1px solid transparent;cursor:pointer;transition:.12s;white-space:nowrap;text-decoration:none}
.btn.sm{padding:9px 13px;font-size:13px}
.btn.lg{padding:15px 24px;font-size:16px}
.btn svg{width:17px;height:17px}
.btn-pri{background:var(--primary);color:var(--on-primary)}.btn-pri:hover{background:var(--primary-hover)}
.btn-sec{background:var(--surface);color:var(--ink);border-color:var(--line-2)}.btn-sec:hover{background:var(--surface-2);border-color:var(--muted)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.spin{width:16px;height:16px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* fields */
.field{display:flex;flex-direction:column;gap:6px}
.flabel{font-size:13px;font-weight:600;color:var(--ink)}
.input{width:100%;font-family:var(--ff-text);font-size:14.5px;color:var(--ink);background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-md);padding:11px 13px;transition:.12s}
.input::placeholder{color:var(--muted)}
.input:hover{border-color:var(--muted)}
.input:focus{outline:none;border-color:var(--primary);box-shadow:var(--ring)}
.input:disabled{background:var(--surface-2);color:var(--muted);cursor:not-allowed}
.fhelp{font-size:12.5px;color:var(--muted)}
.fhelp.err{color:var(--err);display:flex;align-items:center;gap:6px}
.fhelp.err svg{width:14px;height:14px;flex:none}

/* stepper */
.stepper{display:flex;flex-direction:column}
.step{display:grid;grid-template-columns:34px 1fr;gap:16px;padding-bottom:22px}
.step:last-child{padding-bottom:0}
.step-rail{display:flex;flex-direction:column;align-items:center}
.step-ico{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex:none;font-family:var(--ff-mono);font-weight:600;font-size:13px;border:2px solid var(--line-2);background:var(--surface);color:var(--muted);z-index:1}
.step-ico svg{width:17px;height:17px}
.step-conn{width:2px;flex:1;background:var(--line-2);margin:3px 0}
.step.done .step-ico{background:var(--ok);border-color:var(--ok);color:#fff}
.step.done .step-conn{background:var(--ok)}
.step.active .step-ico{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}
.step.error .step-ico{background:var(--err);border-color:var(--err);color:#fff}
.step-body{padding-top:4px}
.step-ph{font-family:var(--ff-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.step-name{font-weight:600;font-size:15px;margin:2px 0 0;color:var(--ink)}
.step.pending .step-ph,.step.pending .step-name{opacity:.5}
.step-pct{font-family:var(--ff-mono);font-size:11px;color:var(--primary);font-weight:600;margin-top:5px}
.step-err{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--err);font-weight:600;margin-top:8px}
.step-err svg{width:14px;height:14px}

/* semáforo */
.via{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:var(--surface);box-shadow:var(--sh-1)}
.via-top{display:flex;align-items:center;gap:16px;padding:20px 22px}
.via-light{width:54px;height:54px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;color:#fff}
.via-light svg{width:28px;height:28px}
.via-rec{font-family:var(--ff-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.via-verdict{font-family:var(--ff-display);font-weight:800;font-size:25px;letter-spacing:-.01em;margin:3px 0 0;line-height:1}
.via-conf{margin-left:auto;text-align:right;flex:none}
.via-conf b{font-family:var(--ff-display);font-size:23px;font-weight:800;font-variant-numeric:tabular-nums;display:block}
.via-conf span{font-size:10.5px;color:var(--muted);font-family:var(--ff-mono);letter-spacing:.04em}
.via-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 22px;background:var(--surface-2);border:none;border-top:1px solid var(--line);font-family:var(--ff-text);font-weight:600;font-size:13px;color:var(--ink);cursor:pointer;text-align:left}
.chev{width:16px;height:16px;transition:transform .25s;flex:none}
.chev.open{transform:rotate(180deg)}
.via-just{max-height:0;overflow:hidden;transition:max-height .35s ease}
.via-just.open{max-height:600px}
.via-just-in{padding:4px 22px 20px;font-size:13.5px;line-height:1.62;color:var(--ink-2)}
.c-ok{color:var(--ok)}.c-warn{color:var(--warn)}.c-err{color:var(--err)}
.bg-ok{background:var(--ok)}.bg-warn{background:var(--warn-vivid)}.bg-err{background:var(--err)}

/* tabla criterios */
.ctab{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;font-size:13.5px}
.ctab-gh{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 18px;background:var(--surface-2);border-bottom:1px solid var(--line)}
.ctab-gh .gt{font-family:var(--ff-display);font-weight:700;font-size:15px}
.ctab-gh .gsub{font-size:12px;color:var(--muted);margin-top:2px}
.ctab-gh .gp{font-family:var(--ff-mono);font-weight:600;font-size:14px;color:var(--primary);font-variant-numeric:tabular-nums;white-space:nowrap}
.crow{display:flex;gap:16px;padding:12px 18px;border-bottom:1px solid var(--line);align-items:flex-start}
.crow .cc{flex:1;line-height:1.45;color:var(--ink-2)}
.crow .cc b{color:var(--ink);font-weight:600}
.crow .cc small{display:block;color:var(--muted);font-size:12px;margin-top:3px}
.crow .cp{font-family:var(--ff-mono);font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ink)}
.ctab-total{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;background:var(--primary-soft)}
.ctab-total .tt{font-family:var(--ff-display);font-weight:800;font-size:15px;color:var(--primary)}
.ctab-total .tp{font-family:var(--ff-mono);font-weight:600;font-size:17px;color:var(--primary);font-variant-numeric:tabular-nums}

/* alertas */
.alert{display:flex;gap:13px;padding:15px 17px;border-radius:var(--r-md);border:1px solid}
.alert svg.ai{width:20px;height:20px;flex:none;margin-top:1px;color:inherit}
.alert .at{font-weight:700;font-size:11.5px;letter-spacing:.09em;text-transform:uppercase;font-family:var(--ff-mono);color:inherit}
.alert .ab{font-size:13.5px;line-height:1.55;margin-top:5px;color:var(--ink-2)}
.alert.crit{background:var(--err-soft);border-color:var(--err-line);color:var(--err)}
.alert.warn{background:var(--warn-soft);border-color:var(--warn-line);color:var(--warn)}
.alert.info{background:var(--info-soft);border-color:var(--info-line);color:var(--info)}

/* kpi */
.kpigrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px}
.kpi{border:1px solid var(--line);border-radius:var(--r-lg);padding:18px;background:var(--surface)}
.kpi-l{font-size:12.5px;color:var(--muted);font-weight:500;line-height:1.35;min-height:34px}
.kpi-v{font-family:var(--ff-display);font-weight:800;font-size:32px;letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin-top:10px;display:flex;align-items:baseline;gap:5px}
.kpi-u{font-size:14px;font-weight:600;color:var(--muted)}

/* dropzone */
.dz{border:2px dashed var(--line-2);border-radius:var(--r-lg);padding:34px;text-align:center;background:var(--surface-2)}
.dz[role="button"]{cursor:pointer}
.dz-ico{width:42px;height:42px;color:var(--muted);margin:0 auto 12px;display:block}
.dz-t{font-weight:700;font-size:15px;font-family:var(--ff-display)}
.dz-s{font-size:13px;color:var(--muted);margin-top:6px;line-height:1.45}
.dz-s b{color:var(--primary);font-weight:600}
.dz.drag{border-color:var(--primary);background:var(--primary-soft)}.dz.drag .dz-ico{color:var(--primary)}
.dz.err{border-color:var(--err);background:var(--err-soft)}.dz.err .dz-ico{color:var(--err)}
.dz.up{border-style:solid;border-color:var(--line);text-align:left;padding:20px;background:var(--surface)}
.dzfile{display:flex;align-items:center;gap:12px;padding:11px 0}
.dzfile+.dzfile{border-top:1px solid var(--line)}
.dzfile-ico{width:32px;height:38px;flex:none;border-radius:5px;background:var(--err-soft);color:var(--err);display:flex;align-items:center;justify-content:center;font-family:var(--ff-mono);font-size:8.5px;font-weight:700}
.dzfile-b{flex:1;min-width:0}
.dzfile-n{font-size:13px;font-weight:600;display:flex;justify-content:space-between;gap:10px}
.dzfile-n .pct{font-family:var(--ff-mono);color:var(--muted);font-weight:500}
.dzfile-n a{color:var(--ink);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dzfile-n a:hover{color:var(--primary);text-decoration:underline}
.dzfile-x{flex:none;width:26px;height:26px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--surface);color:var(--muted);font-size:17px;line-height:1;cursor:pointer}
.dzfile-x:hover{border-color:var(--err);color:var(--err);background:var(--err-soft)}

/* visor */
.viewer{position:relative;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface-2);padding:20px;overflow:hidden}
.vgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.vpage{aspect-ratio:1/1.35;background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:10px;box-shadow:var(--sh-1);overflow:hidden}
/* Página real del visor: el pixelado lo hace el servidor, aquí no hay filtro. */
.vpage-img{display:block;width:100%;height:auto;aspect-ratio:auto;padding:0}
.vsin{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;padding:46px 20px}
.vsin-ico{width:40px;height:40px;color:var(--muted)}
.vsin-t{font-family:var(--ff-display);font-weight:800;font-size:19px}
.vsin-p{font-size:13.5px;line-height:1.55;max-width:400px;margin:0 0 6px}
.voverlay{position:absolute;left:0;right:0;bottom:0;top:30%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;background:linear-gradient(to bottom,transparent,var(--surface-2) 42%);padding:20px}
.vlock{width:40px;height:40px;color:var(--primary)}
.vt{font-family:var(--ff-display);font-weight:800;font-size:19px;margin-top:4px}

/* pricing bits reused */
.plist{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:10px}
.plist li{display:flex;gap:9px;font-size:13.5px;line-height:1.4;color:var(--ink-2)}
.plist li svg{width:17px;height:17px;color:var(--ok);flex:none;margin-top:1px}

/* toast + banner */
.toast{display:flex;align-items:flex-start;gap:11px;padding:13px 15px;border-radius:var(--r-md);background:var(--surface);border:1px solid var(--line);box-shadow:var(--sh-2)}
.toast svg.ti{width:20px;height:20px;flex:none;margin-top:1px}
.toast .tb{flex:1;font-size:13.5px;line-height:1.4;color:var(--ink)}
.toast.ok{border-left:3px solid var(--ok)}.toast.ok svg.ti{color:var(--ok)}
.toast.info{border-left:3px solid var(--info)}.toast.info svg.ti{color:var(--info)}
.pbanner{display:flex;align-items:center;gap:14px;padding:14px 18px;border-radius:var(--r-md);background:var(--primary-soft)}
.pbanner.warn{background:var(--warn-soft)}
.pbanner.warn svg,.pbanner.warn a{color:var(--warn)}
.pbanner svg{width:22px;height:22px;color:var(--primary);flex:none}
.pbanner .pbt{flex:1;font-size:14px;line-height:1.45;color:var(--ink)}
.pbanner .pbt b{color:var(--primary)}
.pbanner a{white-space:nowrap;font-weight:700;font-size:13px;color:var(--primary);cursor:pointer}

/* account menu */
.acct{position:relative}
.acct-btn{display:flex;align-items:center;gap:9px;padding:5px 9px 5px 6px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface);cursor:pointer;font-family:var(--ff-text)}
.acct-av{width:28px;height:28px;border-radius:50%;background:var(--primary);color:var(--on-primary);display:flex;align-items:center;justify-content:center;font-family:var(--ff-display);font-weight:800;font-size:12px;flex:none}
.acct-nm{font-size:13px;font-weight:600;color:var(--ink)}
.acct-menu{position:absolute;right:0;top:calc(100% + 6px);width:230px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--sh-3);padding:6px;opacity:0;visibility:hidden;transform:translateY(-4px);transition:.15s;z-index:40}
.acct-menu.open{opacity:1;visibility:visible;transform:none}
.acct-mh{padding:9px 11px;border-bottom:1px solid var(--line);margin-bottom:5px}
.acct-mh .an{font-weight:700;font-size:13.5px}
.acct-mh .ar{font-size:11.5px;color:var(--muted);font-family:var(--ff-mono);margin-top:2px}
.acct-i{display:flex;align-items:center;gap:10px;padding:8px 11px;border-radius:var(--r-sm);font-size:13px;color:var(--ink-2);cursor:pointer}
.acct-i:hover{background:var(--surface-2);color:var(--ink)}
.acct-i.danger{color:var(--err)}
.acct-i svg{width:15px;height:15px}

/* footer compact */
.footer-compact{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 32px;border-top:1px solid var(--line);background:var(--surface);font-size:12.5px;color:var(--muted);flex-wrap:wrap}
.fc-links{display:flex;gap:16px;flex-wrap:wrap}
.footer-compact a{color:var(--muted);cursor:pointer}
.fc-links .lnk{color:var(--muted);font-size:12.5px}
.fc-links .lnk:hover{color:var(--ink)}

/* ---- portal shell ---- */
.portal-nav{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:22px;padding:12px 32px;background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:9px;font-family:var(--ff-display);font-weight:800;font-size:18px;cursor:pointer;color:var(--ink)}
.pnav-links{display:flex;gap:20px;font-size:14px;font-weight:500;margin-left:6px;flex-wrap:wrap}
.pnav-links a{display:inline-flex;align-items:center;gap:6px;color:var(--ink-2);cursor:pointer}
.pnav-links a:hover{color:var(--ink)}
.pnav-links a.on{color:var(--ink);font-weight:700}
.pnav-dot{width:7px;height:7px;border-radius:99px;background:var(--warn);flex:none}
.pnav-right{margin-left:auto;display:flex;align-items:center;gap:12px}
.themebtn{width:34px;height:34px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;display:flex;align-items:center;justify-content:center}
.themebtn svg{width:16px;height:16px}
.pmain{max-width:1060px;margin:0 auto;padding:34px 32px 72px}
.pg{display:none}
.pg-dashboard{display:block}
/* El dashboard es la pantalla por defecto: cualquier otra ruta lo oculta. Enumerarlas
   una a una obligaba a acordarse de esta línea al añadir una pantalla; olvidarlo dejaba
   la lista de expedientes asomando por debajo. */
.app:not(.rt-dashboard) .pg-dashboard{display:none}
.rt-nuevo .pg-nuevo{display:block}
.rt-estado .pg-estado{display:block}
.rt-diagnostico .pg-diagnostico{display:block}
.rt-visor .pg-visor{display:block}
.rt-checkout .pg-checkout{display:block}
.rt-empresa .pg-empresa{display:block}
.rt-facturacion .pg-facturacion{display:block}
.pg-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:26px;flex-wrap:wrap}
.pg-title{font-family:var(--ff-display);font-weight:800;font-size:29px;letter-spacing:-.02em;margin:0}
.pg-ref{font-family:var(--ff-mono);font-size:13px;color:var(--muted);margin-top:7px}
.pg-back{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--ink-2);cursor:pointer;margin-bottom:16px}
.stack{display:flex;flex-direction:column;gap:22px}
.panel{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);padding:24px}
.panel-h{font-family:var(--ff-display);font-weight:800;font-size:17px;margin:0 0 16px}
.seg{display:inline-flex;background:var(--surface-2);border-radius:var(--r-md);padding:3px;gap:3px}
.seg button{border:none;background:none;font-family:var(--ff-text);font-weight:600;font-size:12.5px;padding:7px 13px;border-radius:var(--r-sm);color:var(--ink-2);cursor:pointer}
.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--sh-1)}

/* dashboard */
.exp-table{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;background:var(--surface)}
.exp-row{display:grid;grid-template-columns:1fr 220px 168px;gap:20px;padding:17px 20px;border-bottom:1px solid var(--line);align-items:center}
.exp-row:last-child{border-bottom:none}
.exp-row.head{background:var(--surface-2);font-family:var(--ff-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:600}
.exp-name{font-weight:600;font-size:14px;line-height:1.35;color:var(--ink)}
.exp-sub{font-size:12px;color:var(--muted);margin-top:5px;font-family:var(--ff-mono)}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:4px 10px;border-radius:var(--r-pill)}
.chip svg{width:12px;height:12px}
.chip-analiz{background:var(--info-soft);color:var(--info)}
.chip-gen{background:var(--primary-soft);color:var(--primary)}
.chip-diag{background:var(--ok-soft);color:var(--ok)}
.chip-unlock{background:var(--warn-soft);color:var(--warn)}
.chip-ready{background:var(--ok-soft);color:var(--ok)}
.chip-err{background:var(--err-soft);color:var(--err)}
.exp-lim{font-size:11.5px;color:var(--ink-2);line-height:1.4;margin-top:7px;max-width:210px}
.exp-act{text-align:right}
.empty{text-align:center;padding:64px 24px;border:1px dashed var(--line-2);border-radius:var(--r-lg);background:var(--surface-2)}
.empty svg{width:44px;height:44px;color:var(--muted)}
.empty h3{font-family:var(--ff-display);font-weight:800;font-size:20px;margin:16px 0 6px}
.empty p{color:var(--ink-2);margin:0 0 20px}
.two-col{display:grid;grid-template-columns:1.4fr 1fr;gap:24px;align-items:start}
.dl-btns{display:flex;gap:10px;flex-wrap:wrap}
.mut{color:var(--ink-2)}
.sum{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);overflow:hidden}
.sum-row{display:flex;justify-content:space-between;gap:14px;padding:13px 18px;border-bottom:1px solid var(--line);font-size:13.5px}
.sum-row:last-child{border-bottom:none}
.sum-row .k{color:var(--muted)}
.sum-row .v{font-weight:600;text-align:right}
.sum-price{background:var(--primary-soft);padding:16px 18px;display:flex;justify-content:space-between;align-items:center}
.sum-price .pl{font-family:var(--ff-display);font-weight:800;color:var(--primary)}
.sum-price .v{font-family:var(--ff-display);font-weight:800;font-size:19px;color:var(--primary)}
.inv{width:100%;border-collapse:collapse;font-size:13.5px}
.inv th,.inv td{padding:12px 14px;border-bottom:1px solid var(--line);text-align:left}
.inv thead th{font-family:var(--ff-mono);font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);background:var(--surface-2)}
.inv tr:last-child td{border-bottom:none}
.badge-est{font-family:var(--ff-mono);font-size:11px;font-weight:600;padding:2px 8px;border-radius:99px}
.badge-est.ok{color:var(--ok);background:var(--ok-soft)}
.badge-est.pend{color:var(--warn);background:var(--warn-soft)}
.ph{color:var(--muted);font-style:italic}

/* ---------- responsive propio (no viene del diseño) ---------- */
@media (max-width: 920px) {
  .portal-nav{padding:10px 16px;gap:12px;flex-wrap:wrap}
  .pnav-links{gap:12px;font-size:13px}
  .acct-nm{display:none}
  .pmain{padding:26px 18px 56px}
  .two-col{grid-template-columns:1fr}
  .exp-row{grid-template-columns:1fr;gap:10px}
  .exp-row.head{display:none}
  .exp-act{text-align:left}
  .vgrid{grid-template-columns:repeat(2,1fr)}
  .footer-compact{padding:16px 18px}
  .inv-wrap{overflow-x:auto}
}
@media (max-width: 520px) {
  .pg-title{font-size:24px}
  .via-top{flex-wrap:wrap}
  .via-conf{margin-left:0;text-align:left}
}

/* ---------- ajustes de accesibilidad (no vienen del diseño) ---------- */
button.pg-back,button.acct-i{background:none;border:none;font-family:var(--ff-text);text-align:left}
button.pg-back{padding:0}
button.acct-i{width:100%}

/* ---------- pantalla de acceso (no viene del diseño) ---------- */
.acceso-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.acceso-card{width:100%;max-width:420px;padding:32px}
.acceso-marca{text-align:center;margin-bottom:24px}
.acceso-titulo{font-family:var(--ff-display);font-weight:800;font-size:29px;letter-spacing:-.02em;margin:8px 0 4px}
.acceso-sub{color:var(--muted);font-size:13.5px;line-height:1.45;margin:0}
.acceso-tabs{display:flex;width:100%;margin-bottom:20px}
.acceso-tabs button{flex:1}
.acceso-form{gap:16px}
.acceso-legal{display:flex;gap:9px;align-items:flex-start;font-size:13px;line-height:1.45;color:var(--ink-2)}
.acceso-legal input{margin-top:2px;flex:none;accent-color:var(--primary)}
.acceso-error{margin-top:16px;padding:11px 13px;border-radius:var(--r-md);background:var(--err-soft);border:1px solid var(--err-line);color:var(--err);font-size:13.5px;line-height:1.45}
.acceso-pie{margin-top:24px;text-align:center;font-size:12.5px;color:var(--muted);line-height:1.9}
.lnk{background:none;border:0;padding:0;color:var(--primary);cursor:pointer;font:inherit;text-decoration:underline}
.lnk:hover{color:var(--primary-hover)}

/* ---------- modal de documentos legales (no viene del diseño) ---------- */
.modal{position:fixed;inset:0;background:rgba(13,27,42,.62);display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}
.modal-caja{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-3);max-width:720px;width:100%;max-height:82vh;display:flex;flex-direction:column}
.modal-head{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:16px 20px;border-bottom:1px solid var(--line)}
.modal-head .panel-h{margin:0}
.modal-cuerpo{overflow:auto;padding:20px;font-size:13.5px;line-height:1.62;color:var(--ink-2)}
.modal-cuerpo h3{font-family:var(--ff-display);font-weight:700;font-size:15.5px;color:var(--ink);margin:22px 0 8px}
.modal-cuerpo h3:first-child{margin-top:0}
.modal-cuerpo p{margin:0 0 12px}

/* ---------- error dentro de la pantalla (no viene del diseño) ----------
   El aviso flotante dura 6 s y deja un esqueleto a medio pintar detrás: cuando
   falla la carga de datos de una pantalla entera, este bloque la sustituye. */
.pantalla-err{max-width:560px;padding:28px 24px;text-align:center;border:1px solid var(--err-line);border-radius:var(--r-lg);background:var(--err-soft)}
.pantalla-err .pe-ico{width:34px;height:34px;color:var(--err);margin:0 auto 14px;display:block}
.pantalla-err .panel-h{margin:0 0 8px}
.pantalla-err .pe-msg{font-size:14px;line-height:1.55;margin:0 0 18px}

/* ---------- aviso flotante del portal (no viene del diseño) ---------- */
.toast-fija{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);max-width:min(560px,92vw);padding:13px 18px;border-radius:var(--r-md);background:var(--ink);color:var(--bg);font-size:13.5px;line-height:1.45;box-shadow:var(--sh-3);z-index:60}

/* ---------- corrección: hidden debe ganar a los display de las clases ---------- */
[hidden]{display:none!important}

/* ---------- tira de pestañas del expediente ---------- */
.exptabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:0 0 24px}
.exptab{display:flex;align-items:center;gap:7px;background:none;border:none;border-bottom:2px solid transparent;padding:10px 16px;font-family:var(--ff-text);font-size:14.5px;color:var(--muted);cursor:pointer;transition:.12s}
.exptab:hover{color:var(--ink)}
.exptab.on{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}
.exptab-lock{width:14px;height:14px}

/* ---------- pantallas de estado de la pestaña económica ---------- */
.eco-estado{display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:56px 24px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md)}
.eco-estado h3{margin:0;font-size:19px;color:var(--ink)}
.eco-estado .mut{max-width:520px;font-size:14.5px;line-height:1.6;margin:0}
.eco-ico{width:40px;height:40px;color:var(--muted)}
.spinner{width:34px;height:34px;border:3px solid var(--line-2);border-top-color:var(--primary);border-radius:50%;animation:girar .9s linear infinite}
@keyframes girar{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spinner{animation-duration:3s}}

.rt-economico .pg-economico{display:block}

/* ---------- modelo de baja económica ---------- */
.eco-formula{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:12px 14px;font-family:var(--ff-mono);font-size:13px;white-space:pre-wrap;overflow-x:auto;margin:0 0 8px}
.eco-ref{font-size:12.5px;color:var(--muted);margin:0 0 14px}
.eco-callout{border-left:3px solid var(--primary);background:var(--primary-soft);padding:10px 14px;border-radius:0 var(--r-sm) var(--r-sm) 0;margin:12px 0;font-size:14.5px}
.eco-p{font-size:14.5px;line-height:1.65;color:var(--ink-2)}
.eco-aviso{background:var(--warn-soft);border:1px solid var(--warn-line);color:var(--warn);border-radius:var(--r-sm);padding:10px 14px;font-size:13.5px;margin:0 0 14px}
.eco-aviso.warn{font-weight:500}
.eco-tabla{width:100%;border-collapse:collapse;font-size:13.5px;margin:12px 0}
.eco-tabla th,.eco-tabla td{border-bottom:1px solid var(--line);padding:8px 10px;text-align:right}
.eco-tabla th:first-child,.eco-tabla td:first-child{text-align:left}
.eco-tabla th{color:var(--muted);font-weight:600;font-size:12.5px}
.eco-tabla tr.eco-propia td{background:var(--primary-soft);font-weight:600}
.eco-tabla .input.xs{width:78px;padding:5px 7px;font-size:13px;text-align:right}
.eco-campos{display:flex;gap:16px;flex-wrap:wrap;margin:12px 0}
.eco-campos .flabel{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--muted)}
.eco-botones{display:flex;gap:10px;margin:10px 0}
.btn-x{background:none;border:none;color:var(--err);cursor:pointer;font-size:14px;padding:2px 6px}
.eco-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:14px 0}
.eco-kpi{background:var(--surface-2);border-radius:var(--r-sm);padding:12px 14px;text-align:center}
.eco-kpi b{display:block;font-family:var(--ff-mono);font-size:19px;color:var(--ink)}
.eco-kpi span{display:block;font-size:11.5px;color:var(--muted);margin-top:4px}
.eco-lista{margin:0;padding-left:20px;font-size:14.5px;line-height:1.65;color:var(--ink-2)}
.eco-lista li{margin:8px 0}
.eco-obs{margin-top:16px;padding:12px 14px;background:var(--surface-2);border-radius:var(--r-sm);font-size:13.5px}
.eco-obs ul{margin:6px 0 0;padding-left:18px}
#eco-curva{width:100%;height:auto;max-width:100%}
#eco-slider{width:100%;accent-color:var(--primary);margin:6px 0 4px}
.eco-scroll{overflow-x:auto}
.eco-heat td{text-align:center;font-family:var(--ff-mono);font-size:12.5px}
.eco-heat td:first-child{text-align:left}
@media(max-width:700px){.eco-tabla{display:block;overflow-x:auto}}
.eco-nota{font-size:13.5px;line-height:1.6;color:var(--ink-2);background:var(--surface-2);border-radius:var(--r-sm);padding:11px 14px;margin:12px 0 0}
.eco-nota:empty{display:none}
.eco-nope{color:var(--muted)}

/* Casilla del pack de obra en el checkout. Se estira sobre el resumen para que
   se lea como una decisión más de la compra, no como un anuncio. */
.pack-op { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px;
  border: 1px solid var(--bd); border-radius: 10px; cursor: pointer; }
.pack-op:hover { border-color: var(--pri); }
.pack-op input { margin-top: 3px; flex: 0 0 auto; }
.pack-txt { display: flex; flex-direction: column; gap: 4px; }
.pack-sub { font-size: 13px; color: var(--muted); line-height: 1.45; }
