:root{
  --bg:#F7F4EE; --surface:#FFFFFF; --surface-2:#F0ECE4; --ink:#1B2140; --muted:#656A80; --line:#DDD8CE;
  --accent:#F0552B; --accent-soft:#FDE4DC; --accent-ink:#FFFFFF;
  --good:#1E8E4F; --good-soft:#DDF3E5; --bad:#CF3A2E; --bad-soft:#FBE1DE; --warn:#B7790A; --warn-soft:#FBEFD2;
  --display:'Nunito',"Segoe UI",system-ui,sans-serif; --body:'Source Sans 3',"Segoe UI",system-ui,sans-serif; --mono:ui-monospace,"Cascadia Mono",Consolas,monospace;
  --radius:12px; --shadow:0 1px 2px rgba(27,33,64,.06),0 6px 20px rgba(27,33,64,.06);
}
@media (prefers-color-scheme: dark){ :root{
  --bg:#14172A; --surface:#1D2138; --surface-2:#262B47; --ink:#F1EFE8; --muted:#A3A8BE; --line:#333958;
  --accent:#FF6E45; --accent-soft:#4A2A20; --good:#4CC97A; --good-soft:#1C3A28; --bad:#F26A5E; --bad-soft:#4A2322; --warn:#E8B04A; --warn-soft:#3E3216;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 6px 20px rgba(0,0,0,.25); color-scheme:dark } }
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--ink);font-family:var(--body);font-size:15px;line-height:1.45}
h1,h2,h3{font-family:var(--display);margin:0;text-wrap:balance;line-height:1.2}
h1{font-size:1.15rem;font-weight:800} h2{font-size:1.35rem;font-weight:800} h3{font-size:1.05rem;font-weight:700}
p{margin:0} a{color:var(--accent)}
button{font:inherit;cursor:pointer}
input,select,textarea{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:9px 11px;width:100%;min-width:0}
input:focus,select:focus,textarea:focus,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
label{display:block;font-size:.8rem;font-weight:600;color:var(--muted);letter-spacing:.02em;text-transform:uppercase;margin-bottom:4px}
.topbar{position:sticky;top:0;z-index:9;background:var(--ink);color:#F1EFE8;padding:10px max(16px,env(safe-area-inset-right,0px)) 10px max(16px,env(safe-area-inset-left,0px));display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;color:inherit;text-decoration:none}
.brand .dot{width:28px;height:28px;border-radius:50%;background:var(--accent);display:grid;place-items:center;font-family:var(--display);font-weight:800;color:#fff;font-size:.95rem}
.brand small{display:block;font-size:.72rem;color:#B9BDD0;letter-spacing:.06em;text-transform:uppercase}
.nav{display:flex;gap:4px;margin-left:auto;flex-wrap:wrap}
.nav button,.nav a{background:transparent;border:0;color:#C9CCDC;padding:8px 12px;border-radius:8px;font-weight:600;text-decoration:none}
.nav button[aria-current="page"]{background:rgba(255,255,255,.12);color:#fff}
.who{font-size:.85rem;color:#C9CCDC}
.wrap{padding:20px max(16px,env(safe-area-inset-right,0px)) 48px max(16px,env(safe-area-inset-left,0px));max-width:1180px;margin:0 auto}
.banner{background:var(--warn-soft);color:var(--ink);border:1px solid var(--warn);border-radius:var(--radius);padding:10px 14px;margin-bottom:16px;font-size:.9rem}
.banner.info{background:var(--surface-2);border-color:var(--line)}
.grid{display:grid;grid-template-columns:320px minmax(0,1fr);gap:20px}
@media (max-width:860px){.grid{grid-template-columns:1fr}}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px;min-width:0}
.section{margin-top:18px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.row>*{min-width:0}
.between{justify-content:space-between}
.btn{border:1px solid var(--line);background:var(--surface);color:var(--ink);padding:9px 14px;border-radius:8px;font-weight:600;display:inline-flex;align-items:center;gap:6px;white-space:nowrap;text-decoration:none}
.btn:hover{background:var(--surface-2)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.good{background:var(--good);border-color:var(--good);color:#fff}
.btn.danger{color:var(--bad);border-color:var(--bad)}
.btn.sm{padding:5px 9px;font-size:.85rem}
.btn:disabled{opacity:.5;cursor:not-allowed}
.lote-list{display:flex;flex-direction:column;gap:8px}
.lote-item{text-align:left;width:100%;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:grid;gap:4px;color:var(--ink)}
.lote-item[aria-current="true"]{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.lote-item .name{font-weight:700;font-family:var(--display)}
.lote-item .meta{font-size:.82rem;color:var(--muted)}
.bar{height:8px;border-radius:99px;background:var(--surface-2);overflow:hidden;display:flex}
.bar i{display:block;height:100%}.bar .u{background:var(--good)}.bar .e{background:var(--accent)}.bar .m{background:var(--warn)}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:10px}
.stat{background:var(--surface-2);border-radius:10px;padding:10px 12px}
.stat b{display:block;font-family:var(--display);font-size:1.4rem;font-weight:800;font-variant-numeric:tabular-nums}
.stat span{font-size:.78rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.pill{display:inline-block;padding:2px 9px;border-radius:99px;font-size:.78rem;font-weight:600;white-space:nowrap}
.pill.emitida{background:var(--surface-2);color:var(--muted)}.pill.enviada{background:var(--accent-soft);color:var(--accent)}.pill.usada{background:var(--good-soft);color:var(--good)}
.pill.vencida{background:var(--warn-soft);color:var(--warn)}.pill.anulada,.pill.bloqueado{background:var(--bad-soft);color:var(--bad)}.pill.activo{background:var(--good-soft);color:var(--good)}.pill.borrador,.pill.cerrado{background:var(--surface-2);color:var(--muted)}
.tablewrap{overflow-x:auto;margin-top:10px}
table{border-collapse:collapse;width:100%;font-size:.9rem}
th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:middle;white-space:nowrap}
th{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:600}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
code,.code{font-family:var(--mono);font-size:.9em;letter-spacing:.04em}
.form{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
.form .full{grid-column:1/-1}
.checks{display:flex;flex-wrap:wrap;gap:8px}
.checks label{display:inline-flex;align-items:center;gap:6px;text-transform:none;letter-spacing:0;font-size:.9rem;color:var(--ink);font-weight:500;background:var(--surface-2);padding:6px 10px;border-radius:8px;margin:0}
.checks input{width:auto}
.hint{font-size:.85rem;color:var(--muted)}
textarea{min-height:110px}
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.tabs button{border:1px solid var(--line);background:var(--surface);border-radius:99px;padding:6px 12px;font-weight:600;color:var(--muted)}
.tabs button[aria-pressed="true"]{background:var(--ink);color:#fff;border-color:var(--ink)}
.toast{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);background:var(--ink);color:#F1EFE8;padding:10px 16px;border-radius:10px;box-shadow:var(--shadow);font-size:.92rem;z-index:20;max-width:calc(100% - 32px);text-align:center}
.toast.err{background:var(--bad)}
.modal{position:fixed;inset:0;background:rgba(10,12,25,.55);display:grid;place-items:center;z-index:15;padding:16px}
.modal .card{max-width:620px;width:100%;max-height:92vh;overflow:auto}
.empty{color:var(--muted);padding:24px;text-align:center}
.filelabel{margin:0;text-transform:none;letter-spacing:0;color:var(--ink);font-size:inherit;font-weight:600}
iframe.preview{width:100%;height:640px;border:1px solid var(--line);border-radius:10px;background:#fff}
/* Validador */
.val{max-width:560px;margin:0 auto}
.val .big{font-size:1.5rem;font-family:var(--mono);text-transform:uppercase;text-align:center;padding:14px;letter-spacing:.08em}
.result{border-radius:var(--radius);padding:18px;margin-top:14px;border:2px solid var(--line);background:var(--surface)}
.result.ok{border-color:var(--good);background:var(--good-soft)}.result.no{border-color:var(--bad);background:var(--bad-soft)}
.result .verdict{font-family:var(--display);font-size:1.6rem;font-weight:800}
.result .who{font-size:1.1rem;font-weight:600;margin-top:4px;color:var(--ink)}
.acts{display:flex;gap:4px;flex-wrap:nowrap}
.result dl{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:10px 0 0;font-size:.92rem}.result dt{color:var(--muted)}.result dd{margin:0}
.entrega{display:grid;gap:8px;margin-top:12px;padding:12px;border-radius:10px;background:var(--surface);border:1px solid var(--line)}
.entrega .calc{font-family:var(--display);font-weight:800;font-size:1.15rem;padding:8px 12px;border-radius:8px;text-align:center}
.entrega .calc.si{background:var(--accent);color:var(--accent-ink)}.entrega .calc.no{background:var(--surface-2);color:var(--muted)}
.hist{list-style:none;padding:0;margin:8px 0 0;display:grid;gap:6px;font-size:.9rem}
.hist li{display:flex;gap:10px;align-items:center;padding:6px 0;border-bottom:1px solid var(--line)}
.hist .ok{color:var(--good);font-weight:700}.hist .no{color:var(--bad);font-weight:700}.hist .code{white-space:nowrap}
.hist time{color:var(--muted);font-variant-numeric:tabular-nums;margin-left:auto;font-size:.82rem}
.scanner{position:relative;background:#000;border-radius:12px;overflow:hidden;aspect-ratio:1/1;max-height:60vh;margin-top:10px}
.scanner video{width:100%;height:100%;object-fit:cover}
.scanner .frame{position:absolute;inset:12%;border:3px solid rgba(255,255,255,.85);border-radius:14px;pointer-events:none}
.scanner .close{position:absolute;top:10px;right:10px}
.flash{animation:flash .4s ease-out}
@keyframes flash{from{box-shadow:0 0 0 6px var(--good)}to{box-shadow:0 0 0 0 transparent}}
.landing{max-width:560px;margin:10vh auto;text-align:center;display:grid;gap:18px;padding:0 16px}
.landing .btn{justify-content:center;font-size:1.05rem;padding:14px}
