:root{--bg:#f5f6f8;--panel:#ffffff;--ink:#16202b;--muted:#5b6776;--line:#dde2e8;--brand:#0b5cad;--brand-ink:#ffffff;--warn:#8a5a00;--bad:#a11d1d;--good:#1b6b3a}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}a{color:var(--brand)}h1{font-size:1.6rem;margin:0 0 .25rem}h2{font-size:1.15rem;margin:1.5rem 0 .5rem}p{margin:.25rem 0 1rem}.muted{color:var(--muted)}.shell{display:grid;grid-template-columns:230px 1fr;min-height:100vh}.side{background:var(--panel);border-right:1px solid var(--line);padding:1rem;display:flex;flex-direction:column;gap:.25rem}.brand{font-weight:700;font-size:1.1rem;margin-bottom:.75rem}.side a.nav{display:block;padding:.45rem .6rem;border-radius:6px;color:var(--ink);text-decoration:none}.side a.nav:hover{background:var(--bg)}.side .who{margin-top:auto;font-size:.85rem;color:var(--muted);border-top:1px solid var(--line);padding-top:.75rem}.main{padding:1.5rem 2rem;max-width:960px}.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:1rem 1.25rem;margin-bottom:1rem}.badge{display:inline-block;padding:.1rem .55rem;border-radius:999px;font-size:.8rem;border:1px solid var(--line)}.badge.good{color:var(--good);border-color:var(--good)}.badge.warn{color:var(--warn);border-color:var(--warn)}.badge.bad{color:var(--bad);border-color:var(--bad)}.login{max-width:380px;margin:10vh auto;padding:0 1rem}form.stack{gap:.75rem}form.stack,label{display:flex;flex-direction:column}label{font-size:.9rem;font-weight:600;gap:.25rem}input[type=email],input[type=password],input[type=text]{font:inherit;padding:.55rem .65rem;border:1px solid var(--line);border-radius:6px}button{font:inherit;padding:.6rem 1rem;border:0;border-radius:6px;background:var(--brand);color:var(--brand-ink);cursor:pointer}button.link{background:none;color:var(--brand);padding:.45rem .6rem;text-align:left}button:disabled{opacity:.6;cursor:default}.error{color:var(--bad);font-size:.9rem}@media (max-width:720px){.shell{grid-template-columns:1fr}.side{flex-direction:row;flex-wrap:wrap;border-right:0;border-bottom:1px solid var(--line)}.side .who{margin-top:0;border-top:0;padding-top:0}.main{padding:1rem}}h3{font-size:1rem;margin:1rem 0 .35rem}hr{border:0;border-top:1px solid var(--line);margin:1rem 0}fieldset{border:0;margin:0 0 1rem;min-width:0}fieldset.card{padding:1rem 1.25rem}legend{font-weight:700;padding:0 .25rem}fieldset:disabled{opacity:.75}label.row{flex-direction:row;align-items:flex-start;gap:.5rem;font-weight:400;padding:.2rem 0}label.row input{margin-top:.3rem}input[type=text],select,textarea{font:inherit;padding:.5rem .6rem;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--ink);width:100%}textarea{resize:vertical}.grid2{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));grid-gap:.75rem}.grid2,.grid3{display:grid;gap:.75rem}.grid3{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));grid-gap:.75rem;margin:.75rem 0}.flash{padding:.6rem .8rem;border-radius:8px;border:1px solid var(--line);background:var(--panel);margin:.5rem 0 1rem}.flash.good{color:var(--good);border-color:var(--good)}.flash.bad{color:var(--bad);border-color:var(--bad)}.flash.warn{color:var(--warn);border-color:var(--warn)}.tbl{width:100%;border-collapse:collapse}.tbl td{padding:.45rem .4rem;border-top:1px solid var(--line);vertical-align:top}.tbl td.chk{width:2rem}.tbl td.lv{width:9rem}.tbl td.conf{width:11rem;text-align:right}.code{font-size:.78rem;font-family:ui-monospace,Consolas,monospace}.module{padding:.25rem 0 .5rem}.inline{display:flex;flex-wrap:wrap;gap:.75rem;align-items:flex-end;margin:.5rem 0}.inline label{flex:1 1 280px}.result{margin-top:.75rem;background:#fafbfc}.prompt{border-top:1px solid var(--line);padding:.6rem 0}.prompt:first-of-type{border-top:0}.fb-row{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}details.fb{border:1px solid var(--line);border-radius:8px;padding:.4rem .7rem;background:#fff}details.fb[open]{flex:1 1 100%}details.fb summary{cursor:pointer;font-weight:600;color:var(--brand)}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));grid-gap:.75rem;gap:.75rem}.photo{border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}.photo .band{padding:.45rem .7rem;font-weight:700}.photo .img{height:90px;background:#d9dee5;display:flex;align-items:center;justify-content:center;color:#4a5563;font-size:.85rem}.photo .cap{padding:.5rem .7rem}.photo .small{padding:0 .7rem .5rem;font-size:.78rem}pre.example{background:#f1f3f6;border:1px solid var(--line);border-radius:6px;padding:.6rem .8rem;white-space:pre-wrap;font-size:.85rem}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,textarea:focus-visible{outline:3px solid #1b73d8;outline-offset:2px}.start{max-width:760px;margin:4vh auto;padding:0 1rem 3rem}.start .lead{font-size:1.1rem;margin:.25rem 0 .5rem}.step h2{font-size:1.05rem;margin:0 0 .5rem;display:flex;align-items:center;gap:.5rem}.step .num{display:inline-flex;width:1.6rem;height:1.6rem;border-radius:50%;align-items:center;justify-content:center;background:var(--brand);color:var(--brand-ink);font-size:.85rem}.step ol{margin:.25rem 0 .25rem 1.1rem;padding:0}.step li{margin:.3rem 0}.step.disabled{opacity:.6}.step fieldset{border:0;padding:0;margin:0;display:flex;flex-direction:column;gap:.75rem}.step .hint{display:block;font-size:.8rem;color:var(--muted);margin-top:.2rem}.step label.check{display:flex;gap:.5rem;align-items:center}.step label.check input{width:auto}.kit{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));grid-gap:.75rem;gap:.75rem}.kit-item{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--line);border-radius:8px;padding:.5rem;color:var(--ink);text-decoration:none}.kit-item img{width:100%;height:140px;object-fit:cover;border-radius:6px;background:var(--bg)}a.button{display:inline-block;padding:.5rem .9rem;border-radius:6px;background:var(--brand);color:var(--brand-ink);text-decoration:none}@media (max-width:640px){.start{margin-top:2vh}}.step .hint.good{color:var(--good)}.small{font-size:.8rem}.prose ul{margin:.25rem 0 1rem 1.1rem;padding:0}.prose li{margin:.3rem 0}