/* Fuentes IBM Plex (SIL Open Font License 1.1) servidas desde este servidor: no se llama a Google. */
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:400;font-display:swap;src:url(fuentes/ibm-plex-sans-400.3b646991d3.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:500;font-display:swap;src:url(fuentes/ibm-plex-sans-500.0717336fb3.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:600;font-display:swap;src:url(fuentes/ibm-plex-sans-600.8960851d69.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Serif";font-style:normal;font-weight:500;font-display:swap;src:url(fuentes/ibm-plex-serif-500.677082fc2e.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Serif";font-style:normal;font-weight:600;font-display:swap;src:url(fuentes/ibm-plex-serif-600.e279e4f8ba.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url(fuentes/ibm-plex-mono-400.08949f728d.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url(fuentes/ibm-plex-mono-500.01d2854474.woff2) format("woff2")}
/* Una columna de formulario tipo documento legal. Tokens de color con modo claro/oscuro. */
:root{
  --bg:#f3f5f4; --surface:#ffffff; --sunk:#e9edeb; --line:#d3dad7;
  --fg:#16211e; --muted:#5a6863; --accent:#1f6b5c; --accent-fg:#ffffff; --accent-soft:#dcebe6;
  --ok:#1f7a4a; --ok-soft:#dff1e6; --warn:#8a5a00; --warn-soft:#fbefd6; --bad:#a3322a; --bad-soft:#f8e1de;
  --ink:#1b2a4a;
  --f-display:"IBM Plex Serif",Georgia,"Times New Roman",serif;
  --f-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
  --r:6px;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){:root{
  --bg:#111816; --surface:#18211f; --sunk:#0d1312; --line:#2c3a36;
  --fg:#e5ece9; --muted:#9aaba5; --accent:#5fb8a3; --accent-fg:#08201b; --accent-soft:#1d3530;
  --ok:#6fcf97; --ok-soft:#173226; --warn:#f0c060; --warn-soft:#352a12; --bad:#f08a80; --bad-soft:#3a1c19;
  --ink:#dfe8ff; color-scheme:dark}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.55 var(--f-body);padding-inline:16px;padding-block:0 48px}
a{color:var(--accent)}
.wrap{max-width:860px;margin:0 auto}
.wrap.narrow{max-width:620px}
header.top{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;padding-block:22px 14px;border-bottom:1px solid var(--line)}
.brand small{display:block;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.brand h1{font:600 24px/1.2 var(--f-display);margin:2px 0 0;text-wrap:balance}
.view{padding-block:22px}
.lead{font-size:16px;max-width:62ch;margin:0 0 22px}
.banner{border-radius:var(--r);padding:12px 14px;font-size:14px;margin:0 0 18px}
.banner.warn{background:var(--warn-soft);color:var(--warn)}
.banner.bad{background:var(--bad-soft);color:var(--bad)}
.banner.info{background:var(--accent-soft);color:var(--fg)}
.banner b{font-weight:600}
fieldset{border:0;padding:0;margin:0 0 26px;min-width:0}
legend{font:600 17px var(--f-display);margin-bottom:12px;padding:0}
.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px}
.grid .full{grid-column:1/-1}
@media (max-width:620px){.grid{grid-template-columns:minmax(0,1fr)}}
label.f{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:500;min-width:0}
label.f .opt{font-weight:400;color:var(--muted);display:contents}
label.f.code{max-width:220px;margin-bottom:14px}
input[type=text],input[type=email],input[type=tel],input[type=search],input[type=password],select{font:15px var(--f-body);color:var(--fg);background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px 11px;width:100%}
input.mono{font-family:var(--f-mono);letter-spacing:.02em}
#f-codigo,#r-codigo{font-size:22px;letter-spacing:.3em;text-align:center}
.err{color:var(--bad);font-size:12.5px;font-weight:400}
.err:empty{display:none}
input[aria-invalid="true"]{border-color:var(--bad)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.hint{font-size:12.5px;color:var(--muted)}
fieldset > .hint{margin:-4px 0 12px}
.hp{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.consent{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:start;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px;cursor:pointer;margin-bottom:10px}
.consent input{width:22px;height:22px;margin:1px 0 0;accent-color:var(--accent);cursor:pointer}
.consent .tag{display:inline-block;font:500 11px var(--f-body);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:3px}
.consent.ack{background:transparent;border-style:dashed}
.layer1{background:var(--sunk);border-radius:var(--r);padding:14px 16px;font-size:13.5px;margin:14px 0}
.layer1 h3{font:600 14px var(--f-display);margin:0 0 8px}
.layer1 dl{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 14px;margin:0}
.layer1 dt{font-weight:600}
.layer1 dd{margin:0;overflow-wrap:anywhere}
@media (max-width:520px){.layer1 dl{grid-template-columns:minmax(0,1fr)}.layer1 dd{margin-bottom:6px}}
details.layer2{margin-top:10px}
details.layer2 summary{cursor:pointer;font-weight:500;color:var(--accent)}
.layer2 .body{font-size:13.5px;max-width:68ch;padding-top:8px}
.layer2 .body h4{font:600 13.5px var(--f-body);margin:14px 0 4px}
.layer2 .body p{margin:0 0 6px;overflow-wrap:anywhere}
.sig{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:10px}
.sig canvas{display:block;width:100%;height:170px;touch-action:none;background:repeating-linear-gradient(to bottom,transparent 0 129px,var(--line) 129px 130px,transparent 130px 170px);border-radius:4px;cursor:crosshair}
.sig .row{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:6px;font-size:12.5px;color:var(--muted);flex-wrap:wrap}
.actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.btn{font:600 15px var(--f-body);border-radius:var(--r);padding:11px 18px;border:1px solid var(--line);background:var(--surface);color:var(--fg);cursor:pointer;text-decoration:none;display:inline-block}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}
.btn.danger{background:var(--bad);border-color:var(--bad);color:var(--surface)}
.btn.small{font-size:13px;padding:6px 11px;font-weight:500}
.btn:disabled{opacity:.5;cursor:not-allowed}
button.link{background:none;border:0;color:var(--accent);font:inherit;cursor:pointer;padding:0;text-decoration:underline}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:20px;margin-bottom:18px}
.card h2{font:600 20px var(--f-display);margin:0 0 8px}
.ref{font:500 20px var(--f-mono);color:var(--ink);letter-spacing:.03em}
.kv{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 16px;font-size:14px;margin:14px 0}
.kv dt{color:var(--muted)}
.kv dd{margin:0;overflow-wrap:anywhere}
.mono{font-family:var(--f-mono)}
.foot{margin-top:30px;padding-top:14px;border-top:1px solid var(--line);font-size:13.5px;color:var(--muted)}
/* admin */
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.toolbar input[type=search]{flex:1 1 220px;width:auto}
.toolbar select{width:auto}
.stats{display:flex;gap:18px;flex-wrap:wrap;font-size:13px;color:var(--muted);margin-bottom:12px}
.stats b{color:var(--fg);font-variant-numeric:tabular-nums}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
table{border-collapse:collapse;width:100%;font-size:13.5px;min-width:680px}
th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-weight:600;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);background:var(--sunk)}
tr:last-child td{border-bottom:0}
td.num{font-variant-numeric:tabular-nums;white-space:nowrap}
.pill{display:inline-block;font-size:12px;font-weight:600;padding:2px 9px;border-radius:99px;white-space:nowrap}
.pill.ok{background:var(--ok-soft);color:var(--ok)}
.pill.bad{background:var(--bad-soft);color:var(--bad)}
.pill.mute{background:var(--sunk);color:var(--muted)}
.empty{padding:28px;text-align:center;color:var(--muted)}
.quote{border-left:3px solid var(--line);padding:2px 0 2px 12px;margin:6px 0;font-size:13.5px}
.firma{background:#fff;border:1px solid var(--line);border-radius:4px;max-width:360px;width:100%}
.confirm{background:var(--bad-soft);border-radius:var(--r);padding:12px 14px;margin-top:12px}
nav.admin{display:flex;gap:14px;flex-wrap:wrap;font-size:14px}

/* panel */
nav.admin a,nav.admin button.link{font-size:14px}
nav.admin form{display:inline}
.qr{background:#fff;padding:12px;border:1px solid var(--line);border-radius:var(--r);display:inline-block;margin:6px 0 10px}
.qr canvas{display:block;width:220px;height:220px;image-rendering:pixelated}
textarea.linea{width:100%;font:13px/1.4 var(--f-mono);padding:10px;border:1px solid var(--line);border-radius:var(--r);background:var(--sunk);color:var(--fg);min-height:80px}
.medidor{font-variant-numeric:tabular-nums}
.badge-ok{color:var(--ok);font-weight:600}
.badge-bad{color:var(--bad);font-weight:600}
.copia{border:2px solid var(--warn);background:var(--warn-soft);color:var(--warn);padding:8px 12px;border-radius:var(--r);font-weight:600;margin-bottom:12px}
@media print{body{background:#fff;color:#000;padding:0}.noprint,header.top nav{display:none!important}.card{border:0;padding:0}}
.mt10{margin-top:10px}.mt12{margin-top:12px}.mb14{margin-bottom:14px}input.w160{max-width:160px}input.w200{max-width:200px}
