@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap');

:root{
  --pri:#185FA5; --pri-d:#0f4d87; --pri-l:#E6F1FB; --pri-50:#F2F8FD;
  --s50:#F5F7FA; --s100:#EEF3F9; --s200:#E2E8F0; --s300:#CBD5E1; --s400:#94A3B8;
  --s500:#64748B; --s600:#475569; --s700:#334155; --s800:#1E293B; --s900:#0F172A;
  --ok:#1D9E75; --okl:#E1F5EE; --er:#A32D2D; --erl:#FCEBEB; --wn:#BA7517; --wnl:#FAEEDA;
  --ft:'IBM Plex Sans',-apple-system,sans-serif; --mn:'IBM Plex Mono',monospace;
  --r:12px; --rs:8px;
  --sh:0 1px 3px rgba(0,0,0,.05),0 4px 16px rgba(0,0,0,.03);
  --shh:0 2px 8px rgba(0,0,0,.06),0 8px 24px rgba(0,0,0,.05);
  --bg:var(--s50); --card-bg:#fff; --card-border:var(--s200);
  --hdr-bg:rgba(255,255,255,.85); --hdr-border:var(--s200);
}
[data-theme="dark"]{
  --pri:#5a93e8; --pri-d:#74a8f0; --pri-l:rgba(90,147,232,.14); --pri-50:rgba(90,147,232,.08);
  --s50:#0A0F1A; --s100:#111827; --s200:#1E293B; --s300:#334155; --s400:#475569;
  --s500:#7A93B5; --s600:#9FB4D0; --s700:#C4D4E8; --s800:#E3EEFB; --s900:#F2F7FC;
  --okl:rgba(29,158,117,.14); --erl:rgba(224,85,85,.14); --wnl:rgba(245,166,35,.14);
  --ok:#3dd68c; --er:#e05555; --wn:#f5a623;
  --bg:#0A0F1A; --card-bg:#111827; --card-border:rgba(96,144,224,.14);
  --hdr-bg:rgba(17,24,39,.85); --hdr-border:rgba(96,144,224,.14);
  --sh:0 1px 3px rgba(0,0,0,.3),0 4px 16px rgba(0,0,0,.2);
  --shh:0 2px 8px rgba(0,0,0,.35),0 8px 24px rgba(0,0,0,.25);
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--ft);background:var(--bg);color:var(--s800);min-height:100vh;line-height:1.5;-webkit-font-smoothing:antialiased;transition:background .3s,color .3s}

/* HEADER */
.hdr{background:var(--hdr-bg);backdrop-filter:blur(12px);border-bottom:1px solid var(--hdr-border);padding:0 1.5rem;height:56px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;transition:background .3s,border-color .3s}
.hdr-logo{display:flex;align-items:center;gap:.6rem;text-decoration:none;color:var(--s900)}
.hdr-logo img{height:26px}
.hdr-badge{font-size:.62rem;font-weight:600;color:var(--pri);background:var(--pri-l);padding:.18rem .6rem;border-radius:99px;letter-spacing:.06em}
.hdr-right{display:flex;align-items:center;gap:.5rem}
.theme-toggle{background:none;border:1px solid var(--s200);width:34px;height:34px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--s500);transition:all .2s}
.theme-toggle:hover{background:var(--s100);color:var(--s700)}

/* UPLOAD */
.upload{padding:3.5rem 1.5rem 3rem;text-align:center;background:linear-gradient(180deg,var(--card-bg) 0%,var(--pri-50) 100%)}
.upload h1{font-size:1.9rem;font-weight:700;color:var(--s900);letter-spacing:-.03em;margin-bottom:.4rem}
.upload h1 em{font-style:normal;color:var(--pri)}
.upload>p{font-size:.92rem;color:var(--s500);max-width:480px;margin:0 auto}
.upload-feats{display:flex;justify-content:center;gap:1.6rem;margin-top:1.1rem;flex-wrap:wrap}
.upload-feats span{display:flex;align-items:center;gap:.35rem;font-size:.76rem;color:var(--s400)}
.dz{max-width:520px;margin:1.6rem auto 0;border:2px dashed var(--s300);border-radius:var(--r);padding:2.2rem 1.5rem;cursor:pointer;background:var(--card-bg);transition:all .2s}
.dz:hover,.dz.over{border-color:var(--pri);background:var(--pri-50);transform:translateY(-2px);box-shadow:var(--sh)}
.dz.over{border-style:solid;box-shadow:0 0 0 3px var(--pri-l)}
.dz-ic{width:52px;height:52px;border-radius:14px;background:var(--pri-l);display:flex;align-items:center;justify-content:center;margin:0 auto .6rem;color:var(--pri)}
.dz h3{font-size:.92rem;font-weight:600;color:var(--s700)}
.dz p{font-size:.8rem;color:var(--s400);margin-top:.15rem}
.dz-btn{margin-top:.8rem;padding:.5rem 1.3rem;background:var(--pri);color:#fff;border:none;border-radius:var(--rs);font-family:var(--ft);font-size:.82rem;font-weight:600;cursor:pointer;transition:background .2s}
.dz-btn:hover{background:var(--pri-d)}

/* LOADING */
.loading{display:none;position:fixed;inset:0;background:var(--bg);z-index:200;align-items:center;justify-content:center}
.loading.on{display:flex}
.ld-box{text-align:center}
.ld-box p{margin-top:.8rem;font-size:.88rem;color:var(--s600);font-weight:500}
.ld-box .sub{margin-top:.2rem;font-size:.76rem;color:var(--s400);font-weight:400}
.pbar{width:240px;height:4px;background:var(--s100);border-radius:2px;margin:1rem auto 0;overflow:hidden}
.pbar-f{height:100%;background:var(--pri);width:0;transition:width .4s;border-radius:2px}
.spinner{width:34px;height:34px;border:3px solid var(--s200);border-top-color:var(--pri);border-radius:50%;animation:sp .7s linear infinite;margin:0 auto}
@keyframes sp{to{transform:rotate(360deg)}}

/* REJECT */
.reject{display:none;max-width:560px;margin:3rem auto;padding:0 1.5rem;text-align:center}
.reject.on{display:block}
.reject-ic{width:72px;height:72px;border-radius:50%;background:var(--erl);color:var(--er);display:flex;align-items:center;justify-content:center;margin:0 auto 1.2rem}
.reject h2{font-size:1.3rem;font-weight:700;color:var(--s900);margin-bottom:.6rem}
.reject p{font-size:.92rem;color:var(--s500);line-height:1.6}
.reject .btn{margin-top:1.6rem;display:inline-flex;align-items:center;gap:.4rem;padding:.6rem 1.3rem;background:var(--pri);color:#fff;border-radius:var(--rs);text-decoration:none;font-size:.85rem;font-weight:600;border:none;cursor:pointer}

/* RESULTS GRID */
.res{display:none;max-width:1140px;margin:0 auto;padding:1.5rem;gap:1.25rem}
.res.on{display:grid;grid-template-columns:1fr 390px}
.res-l{min-width:0}
.res-r{position:sticky;top:72px;align-self:start;display:flex;flex-direction:column;gap:.6rem}

/* PDF VIEWER */
.pdf-viewer{background:var(--card-bg);border-radius:16px;box-shadow:var(--shh);overflow:hidden;border:1px solid var(--card-border)}
.pdf-top{display:flex;align-items:center;justify-content:space-between;padding:.6rem .9rem;border-bottom:1px solid var(--s100)}
.pdf-badge{display:flex;align-items:center;gap:.4rem;font-size:.78rem;font-weight:600;color:var(--ok);border:1.5px solid var(--ok);border-radius:99px;padding:.28rem .8rem}
.pdf-actions{display:flex;gap:.35rem}
.pdf-act{width:34px;height:34px;border-radius:8px;border:1px solid var(--s200);background:var(--card-bg);display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--s500);transition:all .15s;text-decoration:none}
.pdf-act:hover{background:var(--s50);border-color:var(--s300);color:var(--s700)}
.pdf-canvas-wrap{position:relative;background:var(--s100);max-height:78vh;overflow:auto;display:flex;flex-direction:column;align-items:center;gap:10px;padding:14px 0}
.pdf-canvas-wrap canvas{box-shadow:0 2px 12px rgba(0,0,0,.12);max-width:100%}
.pdf-footer{display:flex;align-items:center;gap:.5rem;padding:.6rem .95rem;border-top:1px solid var(--s100);background:var(--s50);font-size:.72rem;color:var(--s500)}
.pdf-footer .sep{color:var(--s300)}
.pdf-nav{display:flex;align-items:center;gap:.4rem;margin-left:auto}
.pdf-nav button{width:26px;height:26px;border:1px solid var(--s200);background:var(--card-bg);border-radius:6px;cursor:pointer;color:var(--s600);display:flex;align-items:center;justify-content:center}
.pdf-nav button:disabled{opacity:.4;cursor:default}

/* RIGHT: panel label */
.panel-label{font-size:.72rem;font-weight:600;color:var(--s500);text-transform:uppercase;letter-spacing:.06em;margin:.3rem 0 .1rem}

/* DOC INFO + FEDATADA banner */
.fed-banner{background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:var(--r);padding:.9rem 1rem;box-shadow:var(--sh)}
.fed-banner .t{display:flex;align-items:center;gap:.5rem;font-size:.86rem;font-weight:600}
.fed-banner .d{font-size:.76rem;opacity:.9;margin-top:.35rem;line-height:1.45}
.fed-banner .d b{font-weight:600}

/* ACCORDION */
.acc{background:var(--card-bg);border-radius:var(--r);box-shadow:var(--sh);overflow:hidden;border:1px solid var(--card-border);transition:border-color .2s}
.acc:hover{border-color:var(--s300)}
.acc-hd{display:flex;align-items:center;gap:.6rem;padding:.7rem .95rem;cursor:pointer;user-select:none;transition:background .15s}
.acc-hd:hover{background:var(--s50)}
.acc-ic{width:26px;height:26px;border-radius:7px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.acc-ic.ok{background:var(--okl);color:var(--ok)}
.acc-ic.er{background:var(--erl);color:var(--er)}
.acc-ic.wn{background:var(--wnl);color:var(--wn)}
.acc-lb{flex:1;font-size:.85rem;font-weight:600;color:var(--s800)}
.acc-chv{color:var(--s400);transition:transform .25s}
.acc.open .acc-chv{transform:rotate(180deg)}
.acc-bd{max-height:0;overflow:hidden;transition:max-height .3s ease}
.acc.open .acc-bd{max-height:1200px}
.acc-inner{padding:.2rem .95rem .8rem}

/* rows k/v */
.row{display:flex;justify-content:space-between;align-items:flex-start;gap:.6rem;padding:.4rem 0;border-bottom:1px solid var(--s100)}
.row:last-child{border-bottom:none}
.row .k{color:var(--s600);font-size:.72rem;font-weight:500;white-space:nowrap;min-width:90px;display:flex;flex-direction:column;gap:1px}
.row .k .raw{font-family:var(--mn);font-size:.56rem;color:var(--pri);opacity:.75}
.row .v{font-size:.76rem;color:var(--s700);text-align:right;word-break:break-word;max-width:230px}
.row .v.mono{font-family:var(--mn);font-size:.64rem}

/* TRAZA (firmas timeline) */
.traza{position:relative;padding-left:6px}
.traza-line{position:absolute;left:16px;top:14px;bottom:14px;width:2px;background:var(--s200);border-radius:2px}
.tz{position:relative;display:flex;gap:12px;align-items:flex-start;padding:.45rem 0}
.tz-dot{flex-shrink:0;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;z-index:1;border:3px solid var(--card-bg)}
.tz-dot.r-ORIGINADOR{background:var(--s500)}
.tz-dot.r-ATESTADOR{background:var(--pri)}
.tz-dot.r-FEDATARIO{background:var(--ok)}
.tz-dot.r-FIRMANTE{background:var(--wn)}
.tz-body{flex:1;min-width:0}
.tz-rol{font-size:.7rem;font-weight:600;color:var(--s500);text-transform:uppercase;letter-spacing:.04em}
.tz-nom{font-size:.82rem;font-weight:600;color:var(--s800);line-height:1.3}
.tz-meta{font-size:.7rem;color:var(--s500);margin-top:.1rem}
.tz-motivo{display:inline-flex;align-items:center;gap:.35rem;margin-top:.3rem;font-size:.72rem;color:var(--s700);background:var(--s50);border-radius:6px;padding:.2rem .5rem}
.tz-motivo .raw{font-family:var(--mn);font-size:.56rem;color:var(--pri);background:var(--pri-l);padding:0 .3rem;border-radius:3px}

/* checks autenticidad */
.chk{display:flex;align-items:flex-start;gap:.55rem;padding:.45rem 0;border-bottom:1px solid var(--s100)}
.chk:last-child{border-bottom:none}
.chk-ic{width:20px;height:20px;border-radius:5px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px}
.chk-ic.ok{background:var(--okl);color:var(--ok)}
.chk-ic.er{background:var(--erl);color:var(--er)}
.chk-ic.wn{background:var(--wnl);color:var(--wn)}
.chk-body{flex:1;min-width:0}
.chk-lb{font-size:.78rem;font-weight:600;color:var(--s800)}
.chk-desc{font-size:.68rem;color:var(--s500);line-height:1.4;margin-top:.1rem}

/* validate button + modal */
.validate-btn{width:100%;padding:.7rem;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border:none;border-radius:var(--rs);font-family:var(--ft);font-size:.84rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.4rem;transition:opacity .2s}
.validate-btn:hover{opacity:.92}
.mo{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:300;align-items:center;justify-content:center;padding:1rem}
.mo.on{display:flex}
.mo-box{background:var(--card-bg);border-radius:16px;width:100%;max-width:500px;max-height:85vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.25)}
.mo-hd{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1.2rem;border-bottom:1px solid var(--s100)}
.mo-hd h3{font-size:.94rem;font-weight:700;color:var(--s800)}
.mo-hd button{width:28px;height:28px;border:none;background:var(--s100);border-radius:7px;font-size:1.1rem;cursor:pointer;color:var(--s500)}
.mo-bd{padding:.8rem 1.2rem 1.2rem}
.mstep{padding:.65rem .7rem;border-radius:var(--r);margin-bottom:.5rem;border:1px solid var(--s100);opacity:0;transform:translateY(8px);transition:all .3s ease}
.mstep.in{opacity:1;transform:none}
.mstep.ok{border-color:var(--okl);background:var(--pri-50)}
.mstep.er{border-color:var(--erl)}
.mstep.wn{border-color:var(--wnl)}
.mstep-hd{display:flex;align-items:center;gap:.5rem}
.mstep-ic{width:24px;height:24px;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.mstep-ic.ok{background:var(--okl);color:var(--ok)}.mstep-ic.er{background:var(--erl);color:var(--er)}.mstep-ic.wn{background:var(--wnl);color:var(--wn)}.mstep-ic.ld{background:var(--s100);color:var(--s400)}
.mstep-ic.ld svg{animation:sp .7s linear infinite}
.mstep-title{font-size:.82rem;font-weight:600;color:var(--s800)}
.mstep-desc{font-size:.7rem;color:var(--s500);margin:.15rem 0 0 2rem;line-height:1.4}

/* FOOTER */
.ftr{text-align:center;padding:1.5rem;color:var(--s400);font-size:.72rem;border-top:1px solid var(--s200);margin-top:2rem}
.ftr a{color:var(--pri);text-decoration:none;font-weight:600}

@media(max-width:860px){
  .res.on{grid-template-columns:1fr}
  .res-r{position:static}
  .upload h1{font-size:1.5rem}
}
