:root{--ink:#1c2430;--muted:#5b6675;--line:#dde2e8;--paper:#fff;--bg:#f4f6f8;
--accent:#0b5394;--accent2:#c74634;--ok:#1f7a4d;--warn:#b26a00;--code:#eef1f5}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:4rem}
body{margin:0;background:var(--bg);color:var(--ink);
font:16px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
/* El selector va limitado a los descendientes de body A PROPOSITO: <html>
   lleva tambien data-lang (lo fija el script de arranque para no parpadear), y
   un simple [data-lang]{display:none} ocultaria el documento ENTERO. */
html body [data-lang]{display:none}
html[data-lang="es"] body [data-lang="es"],
html[data-lang="fr"] body [data-lang="fr"],
html[data-lang="en"] body [data-lang="en"]{display:revert}
a{color:var(--accent)}
header.top{background:var(--ink);color:#fff;padding:.5rem 1rem;position:sticky;top:0;
z-index:10;display:flex;flex-wrap:wrap;gap:.3rem .9rem;align-items:center}
.brand{font-weight:700;color:#fff;text-decoration:none;margin-right:auto;line-height:1.15}
.brand small{display:block;font-weight:400;font-size:.72rem;color:#9fb0c4}
.mainnav{display:flex;flex-wrap:wrap;gap:.15rem}
.mainnav a{color:#dfe6ee;text-decoration:none;padding:.3rem .6rem;border-radius:5px;font-size:.93rem}
.mainnav a:hover{background:#2c3a4b}
.mainnav a.on{background:var(--accent);color:#fff}
.langsel{display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:#9fb0c4}
.langsel select{background:#2c3a4b;color:#fff;border:1px solid #46586e;border-radius:5px;
padding:.25rem .4rem;font-size:.88rem}
.wrap{display:grid;grid-template-columns:290px minmax(0,1fr);gap:2rem;
max-width:1400px;margin:0 auto;padding:1.4rem 1rem}
.wrap.solo{display:block;max-width:1180px}
nav.toc{position:sticky;top:3.4rem;align-self:start;max-height:calc(100vh - 4.6rem);
overflow:auto}
.tocwrap{border-right:1px solid var(--line);padding-right:1rem;font-size:.87rem}
.tocwrap h2{font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;
color:var(--muted);margin:.2rem 0 .6rem}
.tocwrap ul{list-style:none;margin:0;padding:0}
.tocwrap li{margin:.2rem 0}
.tocwrap a{color:var(--muted);text-decoration:none;display:block;padding:.15rem 0}
.tocwrap a:hover,.tocwrap a.on{color:var(--accent)}
.un{display:inline-block;min-width:2.6rem;font-weight:700;color:var(--accent2);
font-variant-numeric:tabular-nums}
main{background:var(--paper);padding:1.8rem 2.2rem;border:1px solid var(--line);
border-radius:9px;min-width:0}
h1{font-size:1.65rem;line-height:1.25;margin:0 0 .5rem;border-bottom:3px solid var(--accent2);
padding-bottom:.45rem}
h2{font-size:1.25rem;margin:2rem 0 .7rem;color:var(--accent)}
h3{font-size:1.05rem;margin:0}
h4{font-size:.78rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);
margin:1rem 0 .3rem}
.lead{color:var(--muted);margin:.2rem 0 1.2rem}
.crumb{font-size:.85rem;color:var(--muted);margin:0 0 .4rem}
.pill{display:inline-block;background:var(--code);border:1px solid var(--line);
border-radius:999px;padding:.15rem .6rem;font-size:.8rem;margin:0 .25rem .3rem 0}
.pill.prl{background:#fdf0e6;border-color:#f0c8a0;color:#8a4b00}
.modmeta{margin:.4rem 0 1.2rem}
.card{border:1px solid var(--line);border-radius:8px;padding:.9rem 1.1rem;margin:1rem 0;
background:#fbfcfd}
.card h2{margin-top:0;font-size:1rem}
ol.ra{margin:0;padding-left:1.3rem}
ol.ra li{margin:.3rem 0}
.dash{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.8rem;
margin:1.2rem 0}
.kpi{border:1px solid var(--line);border-radius:8px;padding:.7rem .9rem;background:#fbfcfd}
.kpi b{display:block;font-size:1.5rem;color:var(--accent);line-height:1.1}
.kpi span{font-size:.78rem;color:var(--muted)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(255px,1fr));gap:.9rem}
.mod{display:block;border:1px solid var(--line);border-radius:8px;padding:.8rem 1rem;
background:var(--paper);text-decoration:none;color:var(--ink);position:relative}
.mod:hover{border-color:var(--accent)}
.mod .code{font-size:.72rem;color:var(--muted);font-variant-numeric:tabular-nums}
.mod b.name{display:block;margin:.15rem 0 .3rem;color:var(--accent);font-size:1rem;line-height:1.3}
.mod .meta{display:block;font-size:.78rem;color:var(--muted);margin-bottom:.5rem}
.mod .pct{position:absolute;top:.7rem;right:.9rem;font-size:.8rem;font-weight:700;
color:var(--muted);font-variant-numeric:tabular-nums}
.bar{height:6px;background:var(--code);border-radius:99px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--ok);transition:width .3s}
.unit{border:1px solid var(--line);border-radius:8px;margin:1rem 0;overflow:hidden}
.unit.st-en_curso{border-color:#e0b060;box-shadow:inset 3px 0 0 var(--warn)}
.unit.st-hecho{border-color:#a8d0bb;box-shadow:inset 3px 0 0 var(--ok)}
.uhead{background:#f7f9fb;border-bottom:1px solid var(--line);padding:.7rem 1rem}
.utitle{font-size:1.02rem}
.umeta{font-size:.78rem;color:var(--muted);margin-top:.25rem}
.ubody{padding:.3rem 1rem 1rem}
.ubody ul{margin:.2rem 0;padding-left:1.2rem}
.ubody li{margin:.18rem 0}
.ubody ul.cont li{margin:.28rem 0}
.ubody p{margin:.2rem 0}
.ufich{padding:.5rem 1rem;border-top:1px dashed var(--line);background:#fcfdfe}
.ufich .fich a{font-size:.8rem;padding:.25rem .55rem}
.track{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;padding:.6rem 1rem;
background:#f7f9fb;border-top:1px solid var(--line)}
.tstatus{display:flex;gap:.25rem}
.tstatus button{border:1px solid var(--line);background:var(--paper);border-radius:6px;
padding:.25rem .6rem;font-size:.8rem;cursor:pointer;color:var(--muted)}
.tstatus button:hover{border-color:var(--accent)}
.tstatus button.on{background:var(--accent);border-color:var(--accent);color:#fff}
.tlog{display:flex;gap:.35rem;flex:1;min-width:240px}
.tlog input[type=number]{width:5rem}
.tlog input{border:1px solid var(--line);border-radius:6px;padding:.25rem .5rem;
font:inherit;font-size:.85rem;min-width:0}
.tlog input[type=text]{flex:1}
.tlog button{border:1px solid var(--accent);background:var(--accent);color:#fff;
border-radius:6px;padding:.25rem .8rem;font-size:.82rem;cursor:pointer}
.tinfo{font-size:.78rem;color:var(--muted);font-variant-numeric:tabular-nums}
.curso{border:1px solid var(--line);border-radius:8px;margin:1rem 0;overflow:hidden}
.curso>h2{margin:0;padding:.7rem 1rem;background:#f7f9fb;border-bottom:1px solid var(--line);
font-size:1.05rem}
.cap{border-top:1px solid var(--line);padding:.6rem 1rem}
.cap:first-of-type{border-top:0}
.cap h3{font-size:.95rem;margin:0 0 .4rem;color:var(--ink)}
.fich{display:flex;flex-wrap:wrap;gap:.4rem}
.fich a{display:inline-flex;align-items:center;gap:.4rem;border:1px solid var(--line);
border-radius:6px;padding:.3rem .7rem;text-decoration:none;font-size:.85rem;background:var(--paper)}
.fich a:hover{border-color:var(--accent);background:#f2f7fc}
.fich a .ext{font-weight:700;color:var(--accent);font-size:.72rem;letter-spacing:.03em}
.fich a .kb{color:var(--muted);font-size:.75rem}
.fich a.doc{border-color:#f0c8a0;background:#fdf8f3}
.fich a.doc .ext{color:#8a4b00}
.linea{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}
.linea input,.linea select,.linea textarea{border:1px solid var(--line);border-radius:6px;
padding:.35rem .6rem;font:inherit;font-size:.9rem;min-width:0}
.linea button{border:1px solid var(--accent);background:var(--accent);color:#fff;
border-radius:6px;padding:.35rem .9rem;font:inherit;font-size:.88rem;cursor:pointer}
.linea button.sec{background:var(--paper);color:var(--accent)}
.prueba{border:1px solid var(--line);border-radius:8px;margin:1rem 0}
.prueba>h3{margin:0;padding:.6rem 1rem;background:#f7f9fb;border-bottom:1px solid var(--line);
font-size:1rem;display:flex;justify-content:space-between;gap:1rem;align-items:center}
.prueba .cuerpo{padding:.8rem 1rem}
.vers{list-style:none;margin:.5rem 0 0;padding:0;font-size:.86rem}
.vers li{display:flex;gap:.6rem;align-items:center;padding:.2rem 0;border-top:1px solid var(--line)}
.vers li b{color:var(--accent2);font-variant-numeric:tabular-nums}
.vers li.ultima b{color:var(--ok)}
.nota{display:inline-block;background:var(--code);border-radius:6px;padding:.15rem .6rem;
font-weight:700;font-variant-numeric:tabular-nums}
.nota.pub{background:#e8f5ee;color:var(--ok)}
.nota.nopub{background:#fdf0e6;color:var(--warn)}
.ok{color:var(--ok);font-size:.85rem}
.mal{color:var(--accent2);font-size:.85rem}
.enlace{font-family:ui-monospace,monospace;font-size:.78rem;word-break:break-all;
background:var(--code);padding:.4rem .6rem;border-radius:6px;margin-top:.5rem}
.offline{background:#fdf0e6;border:1px solid #f0c8a0;color:#8a4b00;border-radius:8px;
padding:.6rem .9rem;margin:1rem 0;font-size:.9rem}
table{border-collapse:collapse;width:100%;margin:.8rem 0;font-size:.9rem;display:block;
overflow-x:auto}
th,td{border:1px solid var(--line);padding:.35rem .6rem;text-align:left;vertical-align:top}
thead th{background:var(--code)}
tbody tr:nth-child(even){background:#fafbfc}
table.sum td:nth-child(n+2),table.log td:nth-child(n+3){font-variant-numeric:tabular-nums}
.btn{display:inline-block;border:1px solid var(--accent);color:var(--accent);
border-radius:6px;padding:.3rem .8rem;text-decoration:none;font-size:.85rem}
.btn:hover{background:var(--accent);color:#fff}
.del{border:0;background:none;color:var(--accent2);cursor:pointer;font-size:1rem;line-height:1}
.md h2{border-bottom:1px solid var(--line);padding-bottom:.25rem}
.md table{font-size:.87rem}
.md code{background:var(--code);padding:.1rem .3rem;border-radius:3px;font-size:.9em}
.md pre{background:var(--ink);color:#e6edf3;padding:1rem;border-radius:6px;overflow-x:auto;
font-size:.82rem;line-height:1.4}
.md pre code{background:none;padding:0;color:inherit}
.md blockquote{margin:1rem 0;padding:.6rem 1rem;border-left:4px solid var(--accent2);
background:#fbf3f1}
footer{max-width:1400px;margin:0 auto;padding:1rem;color:var(--muted);font-size:.82rem}
@media(max-width:900px){.wrap{grid-template-columns:1fr;gap:1rem}
nav.toc{position:static;max-height:none}.tocwrap{border:0;padding:0}
main{padding:1.1rem}}
@media print{header.top,nav.toc,.track,footer,.dash{display:none}
.wrap{display:block;padding:0}main{border:0;padding:0}table{display:table}}
