:root{
  --canvas:#FFFFFF; --surface:#F6F7F5; --text:#101112; --grey:#6B6F6B;
  --hairline:rgba(16,17,18,0.14); --hairline-soft:rgba(16,17,18,0.07);
  --acc-text:#067647; --acc-fill:#05DF72; --hl-bg:#05DF72; --hl-text:#101112;
  --dot-off:#E1E4E1; --chrome-bg:rgba(255,255,255,0.88); --grain:0.03;
  --sans:'Geist',-apple-system,'Helvetica Neue',Arial,sans-serif;
  --mono:'Geist Mono','SF Mono',ui-monospace,Menlo,monospace;
  --f-d1:clamp(30px,4.4vw,49px); --f-h1:31px; --f-n1:25px; --f-h2:20px;
  --f-b1:16px; --lh-b1:24px; --f-m1:13px; --f-l1:10px;
  --e-1:8px; --e-2:16px; --e-3:24px; --e-4:32px; --e-5:48px; --e-6:64px; --e-7:96px;
  --grid:1120px; --prosa:720px; --chrome-alto:48px;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --canvas:#0C0C0E; --surface:#131316; --text:#E8E4DC; --grey:#9A9690;
    --hairline:rgba(232,228,220,0.14); --hairline-soft:rgba(232,228,220,0.08);
    --acc-text:#05DF72; --acc-fill:#05DF72; --hl-bg:transparent; --hl-text:#05DF72;
    --dot-off:#222228; --chrome-bg:rgba(12,12,14,0.9); --grain:0.04;
  }
}
:root[data-theme="dark"]{
  --canvas:#0C0C0E; --surface:#131316; --text:#E8E4DC; --grey:#9A9690;
  --hairline:rgba(232,228,220,0.14); --hairline-soft:rgba(232,228,220,0.08);
  --acc-text:#05DF72; --acc-fill:#05DF72; --hl-bg:transparent; --hl-text:#05DF72;
  --dot-off:#222228; --chrome-bg:rgba(12,12,14,0.9); --grain:0.04;
}
*{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;}
body{margin:0;background:var(--canvas);color:var(--text);font-family:var(--sans);
  font-size:var(--f-b1);line-height:var(--lh-b1);-webkit-font-smoothing:antialiased;}
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:60;opacity:var(--grain);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");}

.l1{font-family:var(--mono);font-weight:500;font-size:var(--f-l1);line-height:16px;
  text-transform:uppercase;letter-spacing:.15em;color:var(--grey);margin:0;}
.m1{font-family:var(--mono);font-weight:400;font-size:var(--f-m1);line-height:24px;font-variant-numeric:tabular-nums;}
h1,h2,h3{margin:0;text-wrap:balance;}
.d1{font-weight:600;font-size:var(--f-d1);line-height:1.08;letter-spacing:-.03em;}
.h1{font-weight:600;font-size:var(--f-h1);line-height:40px;letter-spacing:-.03em;}
.h2{font-weight:600;font-size:var(--f-h2);line-height:32px;letter-spacing:-.02em;}
p{margin:0;}
.cita{font-family:var(--mono);font-size:var(--f-m1);color:var(--acc-text);white-space:nowrap;
  border-bottom:1px solid color-mix(in srgb,var(--acc-text) 32%,transparent);}
.hl{background:var(--hl-bg);color:var(--hl-text);padding:0 .16em;}
.scanline{width:60px;height:2px;background:var(--acc-fill);border:0;margin:0;}

.expediente{position:sticky;top:0;z-index:40;height:var(--chrome-alto);background:var(--chrome-bg);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--hairline);display:flex;align-items:center;}
.expediente-in{width:100%;max-width:var(--grid);margin:0 auto;padding:0 var(--e-3);
  display:flex;align-items:center;gap:var(--e-3);}
.sep{flex:1;}
.ctrl{font-family:var(--mono);font-weight:500;font-size:var(--f-l1);text-transform:uppercase;
  letter-spacing:.15em;color:var(--grey);background:transparent;border:1px solid var(--hairline);
  border-radius:0;height:24px;padding:0 var(--e-1);cursor:pointer;}
.ctrl:hover{color:var(--text);border-color:var(--text);}
.ctrl:focus-visible{outline:2px solid var(--acc-text);outline-offset:2px;}

.wrap{max-width:var(--grid);margin:0 auto;padding:0 var(--e-3);}
.prosa{max-width:var(--prosa);}
section{padding-block:var(--e-7);border-top:1px solid var(--hairline);}
.sec-head{display:flex;gap:var(--e-3);align-items:baseline;margin-bottom:var(--e-4);flex-wrap:wrap;}
.sec-num{font-family:var(--mono);font-weight:500;font-size:var(--f-m1);color:var(--grey);font-variant-numeric:tabular-nums;}
.stack{display:flex;flex-direction:column;gap:var(--e-3);}
.stack-2{display:flex;flex-direction:column;gap:var(--e-2);}
.stack-5{display:flex;flex-direction:column;gap:var(--e-5);}

/* ---------- hero ---------- */
.hero{padding-block:var(--e-6) var(--e-5);border-top:0;}
.hero-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--e-6);align-items:center;}
@media (max-width:900px){.hero-grid{grid-template-columns:1fr;gap:var(--e-5);}}
.hero .d1{margin-block:var(--e-3);max-width:14ch;}

.figura{position:relative;width:100%;aspect-ratio:1/1;max-height:560px;}
.figura canvas{position:absolute;inset:0;width:100%;height:100%;display:block;}
.vlabel{position:absolute;transform:translate(-50%,-50%);pointer-events:none;text-align:center;
  white-space:nowrap;transition:opacity .12s linear;}
.vlabel .sym{font-family:var(--mono);font-weight:500;font-size:14px;line-height:18px;color:var(--text);}
.vlabel .nom{font-family:var(--mono);font-weight:400;font-size:9px;line-height:13px;text-transform:uppercase;
  letter-spacing:.13em;color:var(--grey);margin-top:2px;}
.vlabel[data-polo="si"] .sym{font-size:15px;color:var(--acc-text);}
.fig-ctrls{position:absolute;left:0;bottom:0;display:flex;gap:var(--e-1);z-index:5;}

.leyenda{border:1px solid var(--hairline);margin-top:var(--e-4);}
.ley-fila{display:grid;grid-template-columns:84px 1fr;gap:var(--e-2);padding:var(--e-2);
  border-bottom:1px solid var(--hairline-soft);align-items:baseline;}
.ley-fila:last-child{border-bottom:0;}
.ley-fila .k{font-family:var(--mono);font-size:var(--f-m1);color:var(--acc-text);}
.ley-fila .v{font-size:14px;line-height:21px;color:var(--grey);}

/* ---------- tablas y cajas ---------- */
.tabla-wrap{overflow-x:auto;border:1px solid var(--hairline);}
table.reg-t{width:100%;border-collapse:collapse;font-family:var(--mono);font-size:var(--f-m1);
  font-variant-numeric:tabular-nums;min-width:560px;}
table.reg-t th{text-align:left;font-weight:500;font-size:var(--f-l1);text-transform:uppercase;
  letter-spacing:.15em;color:var(--grey);padding:var(--e-2);border-bottom:1px solid var(--hairline);white-space:nowrap;}
table.reg-t td{padding:var(--e-2);border-bottom:1px solid var(--hairline-soft);line-height:20px;vertical-align:top;}
table.reg-t tr:last-child td{border-bottom:0;}

.form{background:var(--surface);border:1px solid var(--hairline);padding:var(--e-3);
  font-family:var(--mono);font-size:var(--f-m1);line-height:22px;overflow-x:auto;white-space:pre;}
.nota{border-left:2px solid var(--text);padding-left:var(--e-3);max-width:var(--prosa);}

.reg{border-top:1px solid var(--hairline);}
.fila{display:grid;grid-template-columns:60px 1fr 108px;gap:var(--e-3);min-height:56px;
  padding:var(--e-2) 0;border-bottom:1px solid var(--hairline-soft);align-items:start;}
.fila-idx{font-family:var(--mono);font-size:var(--f-m1);color:var(--acc-text);padding-top:2px;}
.fila .tit{font-weight:600;line-height:24px;}
.fila .sub{color:var(--grey);font-size:15px;line-height:23px;margin-top:2px;max-width:64ch;}
.fila .est{font-family:var(--mono);font-size:var(--f-l1);text-transform:uppercase;letter-spacing:.14em;color:var(--grey);}
@media (max-width:760px){.fila{grid-template-columns:52px 1fr;}.fila .est{grid-column:2;}}

.emision{border-top:1px solid var(--hairline);padding-block:var(--e-4) var(--e-6);
  display:flex;gap:var(--e-3);flex-wrap:wrap;align-items:baseline;}
@media (prefers-reduced-motion:reduce){*{transition:none!important;}}

/* ---------- navegación del sitio ---------- */
.nav{display:flex;gap:var(--e-2);align-items:center;}
.nav a{font-family:var(--mono);font-weight:500;font-size:var(--f-l1);text-transform:uppercase;
  letter-spacing:.15em;color:var(--grey);text-decoration:none;padding-bottom:2px;
  border-bottom:1px solid transparent;}
.nav a:hover{color:var(--text);}
.nav a[aria-current="page"]{color:var(--text);border-bottom-color:var(--acc-fill);}
.nav a:focus-visible{outline:2px solid var(--acc-text);outline-offset:3px;}
@media (max-width:640px){.expediente-in .l1.oculta-movil{display:none;}}

/* ---------- índice lateral ---------- */
.doc{display:grid;grid-template-columns:200px 1fr;gap:var(--e-6);align-items:start;}
@media (max-width:900px){.doc{grid-template-columns:1fr;gap:var(--e-3);}}
.toc{position:sticky;top:calc(var(--chrome-alto) + var(--e-3));display:flex;flex-direction:column;gap:2px;}
@media (max-width:900px){.toc{position:static;flex-direction:row;flex-wrap:wrap;gap:var(--e-2);
  padding-bottom:var(--e-3);border-bottom:1px solid var(--hairline);}}
.toc a{font-family:var(--mono);font-size:var(--f-m1);color:var(--grey);text-decoration:none;
  padding:3px 0;border-left:1px solid transparent;padding-left:var(--e-2);margin-left:-1px;}
@media (max-width:900px){.toc a{border-left:0;padding-left:0;}}
.toc a:hover{color:var(--text);}
.toc a.on{color:var(--text);border-left-color:var(--acc-fill);}
section[id]{scroll-margin-top:calc(var(--chrome-alto) + var(--e-2));}

/* ---------- módulos ---------- */
.mods{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--hairline);}
@media (max-width:820px){.mods{grid-template-columns:1fr;}}
.mod{padding:var(--e-3);border-right:1px solid var(--hairline);display:flex;flex-direction:column;gap:var(--e-2);}
.mod:last-child{border-right:0;}
@media (max-width:820px){.mod{border-right:0;border-bottom:1px solid var(--hairline);}
  .mod:last-child{border-bottom:0;}}
.mod .num{font-family:var(--mono);font-size:var(--f-m1);color:var(--acc-text);}
.mod .tit{font-weight:600;font-size:18px;line-height:26px;letter-spacing:-.02em;}
.mod .estado{font-family:var(--mono);font-size:var(--f-m1);line-height:20px;color:var(--grey);
  padding-left:var(--e-2);border-left:1px solid var(--hairline);}
.mod .estado b{color:var(--text);font-weight:400;}
.mod .cuerpo{font-size:15px;line-height:23px;}

/* ---------- pasos ---------- */
.pasos{border-top:1px solid var(--hairline);}
.paso{display:grid;grid-template-columns:52px 1fr 128px;gap:var(--e-2);padding:var(--e-2) 0;
  border-bottom:1px solid var(--hairline-soft);align-items:baseline;}
.paso .n{font-family:var(--mono);font-size:var(--f-m1);color:var(--acc-text);font-variant-numeric:tabular-nums;}
.paso .nom{font-weight:600;line-height:24px;}
.paso .prop{color:var(--grey);font-size:14px;line-height:21px;margin-top:1px;}
.paso .fn{font-family:var(--mono);font-size:var(--f-l1);text-transform:uppercase;letter-spacing:.13em;color:var(--grey);}
.paso[data-opc="si"] .n::after{content:" opc";font-size:8px;letter-spacing:.1em;color:var(--grey);}
@media (max-width:700px){.paso{grid-template-columns:46px 1fr;}.paso .fn{grid-column:2;}}

/* ---------- invariantes ---------- */
.inv{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));border:1px solid var(--hairline);}
.inv-i{padding:var(--e-3);border-right:1px solid var(--hairline-soft);border-bottom:1px solid var(--hairline-soft);
  display:flex;flex-direction:column;gap:var(--e-1);}
.inv-i .k{font-family:var(--mono);font-size:var(--f-m1);color:var(--acc-text);}
.inv-i .t{font-weight:600;line-height:23px;}
.inv-i .d{color:var(--grey);font-size:14px;line-height:21px;}

/* ---------- cita de bloque ---------- */
.premisa{border:1px solid var(--hairline);background:var(--surface);padding:var(--e-5) var(--e-4);}
.premisa .frase{font-weight:600;font-size:clamp(22px,3vw,31px);line-height:1.25;letter-spacing:-.02em;max-width:20ch;}
.premisa .fuente{margin-top:var(--e-3);}

/* ---------- afirmación de escaneo ---------- */
.afirm{font-weight:600;font-size:18px;line-height:27px;letter-spacing:-.01em;max-width:60ch;
  padding-left:var(--e-2);border-left:2px solid var(--acc-fill);margin-bottom:var(--e-3);}
.antagonista{border:1px solid var(--hairline);padding:var(--e-3);margin-top:var(--e-4);max-width:var(--prosa);}
.antagonista .l1{margin-bottom:var(--e-2);}

/* ---------- grafo interactivo ---------- */
.grafo-wrap{border:1px solid var(--hairline);}
.grafo-svg{overflow-x:auto;}
.g-svg{display:block;width:100%;min-width:760px;height:auto;}
.g-band{stroke:var(--hairline);stroke-width:1;stroke-dasharray:2 5;}
.g-modlabel{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  fill:var(--grey);}
.g-edge{fill:none;stroke:var(--text);stroke-width:1;opacity:.28;transition:opacity .14s,stroke .14s;}
.g-cond{stroke-dasharray:3 4;opacity:.2;}
.g-feed{stroke:var(--acc-text);stroke-dasharray:5 4;opacity:.5;}
.g-edge.on{opacity:1;stroke:var(--acc-text);stroke-width:1.6;}
.g-edge.off{opacity:.07;}
.g-node{cursor:pointer;}
.g-node:focus{outline:none;}
.g-halo{fill:none;stroke:none;}
.g-node:focus-visible .g-halo{stroke:var(--acc-text);stroke-width:2;r:24;}
.g-circ{fill:var(--canvas);stroke:var(--text);stroke-width:1;transition:fill .14s,stroke .14s;}
.g-opc{stroke-dasharray:3 3;}
.g-num{font-family:var(--mono);font-weight:500;font-size:11px;text-anchor:middle;
  fill:var(--text);pointer-events:none;transition:fill .14s;}
.g-hitl{fill:var(--acc-fill);}
.g-node:hover .g-circ{stroke:var(--acc-text);}
.g-node.on .g-circ{fill:var(--acc-fill);stroke:var(--acc-fill);}
.g-node.on .g-num{fill:#101112;}
.g-node.rel .g-circ{stroke:var(--acc-text);stroke-width:1.6;}
.g-node.off{opacity:.22;}
.g-leyenda{display:flex;flex-wrap:wrap;gap:var(--e-3);padding:var(--e-2) var(--e-3);
  border-top:1px solid var(--hairline);}
.g-leyenda span{font-family:var(--mono);font-size:var(--f-l1);text-transform:uppercase;
  letter-spacing:.13em;color:var(--grey);display:flex;align-items:center;gap:6px;}
.g-key{width:18px;height:1px;background:var(--text);opacity:.4;display:inline-block;}
.g-key.c{background:repeating-linear-gradient(90deg,var(--text) 0 3px,transparent 3px 7px);opacity:.4;}
.g-key.f{background:repeating-linear-gradient(90deg,var(--acc-text) 0 5px,transparent 5px 9px);opacity:1;}
.g-key.h{width:7px;height:7px;border-radius:50%;background:var(--acc-fill);}

#g-panel{border-top:1px solid var(--hairline);padding:var(--e-3);min-height:200px;}
.g-vacio{color:var(--grey);max-width:56ch;font-size:15px;line-height:23px;}
.g-head{display:flex;gap:var(--e-2);align-items:baseline;}
.g-pid{font-family:var(--mono);font-weight:500;font-size:25px;color:var(--acc-text);
  font-variant-numeric:tabular-nums;min-width:46px;}
.g-nom{font-weight:600;font-size:20px;line-height:28px;letter-spacing:-.02em;}
.g-badges{display:flex;gap:var(--e-1);margin-top:var(--e-2);}
.g-badge{font-family:var(--mono);font-size:var(--f-l1);text-transform:uppercase;letter-spacing:.13em;
  color:var(--grey);border:1px solid var(--hairline);padding:2px 6px;}
.g-obj{margin-top:var(--e-2);max-width:62ch;}
.g-f{margin-top:var(--e-2);}
.g-f .l1{margin-bottom:2px;}
.g-v{font-family:var(--mono);font-size:var(--f-m1);line-height:21px;max-width:70ch;}
.g-ul{margin:0;padding-left:16px;font-size:14px;line-height:22px;color:var(--grey);}
.g-cerrar{margin-top:var(--e-3);}
