:root{
  --ink:#172038; --wool:#F4F2EC; --paper:#fff; --madder:#C5352B; --madder-d:#A3271F; --amber:#E39A0C; --moss:#2F6B4F;
  --line:#D8D4C8; --mute:#586078; --soft:#E9E6DC;
  --head:"Bricolage Grotesque", "Avenir Next", "Segoe UI", system-ui, sans-serif;
  --body:"Instrument Sans", "Avenir Next", "Segoe UI", system-ui, sans-serif;
  --mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --r:8px; --hard:4px 4px 0 var(--ink);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--wool);color:var(--ink);font:16px/1.6 var(--body);-webkit-font-smoothing:antialiased}
img,canvas{max-width:100%}
a{color:var(--ink);text-underline-offset:3px;text-decoration-thickness:1.5px}
a:hover{color:var(--madder-d)}
h1,h2,h3{font-family:var(--head);line-height:1.08;letter-spacing:-.02em;margin:0;text-wrap:balance}
h1{font-size:clamp(32px,4.6vw,56px);font-weight:700}
h2{font-size:clamp(25px,2.6vw,34px);font-weight:650;margin-top:64px}
h3{font-size:20px;font-weight:650;letter-spacing:-.01em;margin-top:32px}
p{margin:14px 0}
.wrap{max-width:1240px;margin:0 auto;padding:0 20px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
:focus-visible{outline:3px solid var(--madder);outline-offset:2px;border-radius:3px}

/* header */
.top{display:flex;align-items:center;gap:24px;padding:14px 0}
.logo{display:flex;align-items:center;gap:9px;font:700 22px/1 var(--head);letter-spacing:-.03em;text-decoration:none;color:var(--ink)}
.logo svg{width:30px;height:30px}
.nav{display:flex;gap:4px;margin-left:auto;flex-wrap:wrap}
.nav a{font-size:14.5px;font-weight:500;text-decoration:none;padding:7px 11px;border-radius:6px}
.nav a:hover,.nav a[aria-current]{background:var(--ink);color:var(--wool)}
.navbtn{display:none;margin-left:auto;background:none;border:1.5px solid var(--ink);border-radius:6px;padding:7px 12px;font:600 14px var(--body);color:var(--ink)}
.band{height:20px;background:var(--ink) url("band.svg") repeat-x left center/auto 20px}

/* hero */
.hero{padding:34px 0 22px;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:40px;align-items:end}
.hero p.lede{font-size:18.5px;line-height:1.5;max-width:56ch;margin:14px 0 0;color:#2a3350}
.hero ul{list-style:none;margin:0;padding:0;display:grid;gap:8px;font-size:15px}
.hero li{display:flex;gap:10px;align-items:flex-start}
.hero li::before{content:"";flex:none;width:14px;height:12px;margin-top:6px;background:var(--madder);clip-path:polygon(0 0,28% 0,50% 62%,72% 0,100% 0,62% 100%,38% 100%)}
.crumb{font-size:13.5px;color:var(--mute);margin:0 0 10px}
.crumb a{color:var(--mute)}

/* tool */
.tool{display:grid;grid-template-columns:330px minmax(0,1fr);gap:20px;align-items:start;margin:10px 0 0}
.side{display:grid;gap:14px}
.card{background:var(--paper);border:1.5px solid var(--ink);border-radius:var(--r);box-shadow:var(--hard)}
.step{padding:16px 16px 18px}
.step h2{font-size:17px;margin:0 0 12px;display:flex;align-items:center;gap:9px;letter-spacing:-.01em}
.step h2 span{flex:none;width:24px;height:24px;border-radius:50%;background:var(--ink);color:var(--wool);font:600 13px/24px var(--mono);text-align:center}
.drop{display:block;border:1.5px dashed var(--ink);border-radius:6px;padding:18px 14px;text-align:center;font-size:14.5px;cursor:pointer;background:var(--wool);transition:background .15s}
.drop:hover,.drop.over{background:#fff7e6}
.drop strong{display:block;font:650 17px var(--head)}
.drop input{position:absolute;opacity:0;width:1px;height:1px}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.chip,.btn{font:600 13.5px var(--body);border:1.5px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:999px;padding:6px 12px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.chip:hover,.btn:hover{background:var(--ink);color:var(--wool)}
.btn{border-radius:6px;padding:8px 13px}
.btn.pri{background:var(--madder);border-color:var(--madder-d);color:#fff}
.btn.pri:hover{background:var(--madder-d)}
.btn[aria-pressed=true]{background:var(--ink);color:var(--wool)}
.textbox{display:flex;gap:6px;margin-top:10px}
.textbox[hidden]{display:none}
input[type=text],input[type=number],input[type=email],select{font:500 15px var(--body);color:var(--ink);background:var(--paper);border:1.5px solid var(--ink);border-radius:6px;padding:8px 10px;min-width:0;width:100%}
.f{display:grid;gap:5px;margin-top:12px}
.f:first-of-type{margin-top:0}
.f label,.f .lab{font-size:13.5px;font-weight:600;display:flex;justify-content:space-between;gap:8px}
.f label output,.f .lab output{font-family:var(--mono);font-weight:500}
.f small{font-size:12.5px;color:var(--mute);line-height:1.4}
.two{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.check{display:flex;gap:8px;align-items:flex-start;font-size:13.5px;font-weight:500;margin-top:12px;line-height:1.35}
.check input{margin-top:2px;accent-color:var(--ink);width:16px;height:16px;flex:none}
input[type=range]{width:100%;accent-color:var(--ink);margin:2px 0}
.note{font-size:12.5px;color:var(--mute);margin:8px 0 0}
#palette{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:6px}
#palette li{display:grid;grid-template-columns:34px 1fr 30px;gap:9px;align-items:center;padding:4px;border-radius:6px;border:1.5px solid transparent}
#palette li.on{border-color:var(--ink);background:var(--wool)}
.sw{width:34px;height:34px;border-radius:5px;border:1.5px solid var(--ink);font:600 14px var(--mono);cursor:pointer}
.pn{display:grid;line-height:1.25;font-size:14px;min-width:0}
.pn small{color:var(--mute);font-size:12px}
#palette input[type=color]{width:30px;height:30px;padding:0;border:1.5px solid var(--line);border-radius:5px;background:none;cursor:pointer}

.main{min-width:0;display:grid;gap:10px}
.bar{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;padding:10px 12px}
.tabs{display:flex;border:1.5px solid var(--ink);border-radius:6px;overflow:hidden}
.tabs button{font:600 13.5px var(--body);border:0;background:var(--paper);color:var(--ink);padding:8px 12px;cursor:pointer;border-right:1.5px solid var(--ink)}
.tabs button:last-child{border-right:0}
.tabs button[aria-selected=true]{background:var(--ink);color:var(--wool)}
.tools{display:flex;gap:4px;align-items:center}
.tools .btn{padding:7px 10px}
.zoom{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--mute);min-width:120px}
.bar .grow{flex:1}
.stagewrap{position:relative;overflow:hidden}
.stage{overflow:auto;max-height:min(74vh,820px);min-height:320px;background:
  linear-gradient(var(--soft) 1px,transparent 1px) 0 0/16px 16px,linear-gradient(90deg,var(--soft) 1px,transparent 1px) 0 0/16px 16px,#FBFAF6;padding:14px;border-radius:0 0 6px 6px;text-align:center}
.stage canvas{display:inline-block;max-width:none;box-shadow:0 1px 0 rgba(23,32,56,.25),0 10px 30px -18px rgba(23,32,56,.6);touch-action:none}
.stage canvas.paint{cursor:crosshair}
#rowsPanel{max-height:min(74vh,820px);overflow:auto;padding:14px 16px;text-align:left}
#rowsPanel[hidden],.stage[hidden]{display:none}
.rk{font-size:13.5px;margin:0 0 6px;color:#2a3350}
.rl{display:grid;grid-template-columns:104px 1fr;gap:10px;padding:5px 6px;border-top:1px solid var(--soft);font-size:13.5px;border-radius:4px}
.rl span{font-weight:600;white-space:nowrap}
.rl code{font:13px/1.5 var(--mono);overflow-wrap:anywhere}
.rl.cur{background:#FFF3D6;outline:1.5px solid var(--amber)}
.status{display:flex;flex-wrap:wrap;gap:6px 18px;padding:10px 14px;font-size:14px;align-items:center}
.status .warn{color:#8a5200;font-weight:600;flex-basis:100%}
.status .warn::before{content:"";display:inline-block;width:14px;height:14px;margin-right:7px;vertical-align:-2px;background:repeating-linear-gradient(135deg,var(--amber) 0 2px,transparent 2px 5px);border:1.5px solid var(--amber)}
.status .ok{color:var(--moss);font-weight:600}
.actions{display:flex;flex-wrap:wrap;gap:8px;padding:0 2px}
#track{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:10px 12px;background:var(--ink);color:var(--wool);border-radius:var(--r)}
#track[hidden]{display:none}
#track b{font:600 14px var(--mono);display:block;color:#F2C97A}
#track code{font:15px/1.45 var(--mono);overflow-wrap:anywhere}
#track .btn{background:var(--wool)}
#track .btn:hover{background:#fff;color:var(--ink)}
#toast{position:fixed;left:50%;bottom:22px;transform:translate(-50%,20px);background:var(--ink);color:var(--wool);padding:10px 16px;border-radius:6px;font-size:14.5px;opacity:0;pointer-events:none;transition:.25s;z-index:50;max-width:min(92vw,520px);text-align:center}
#toast.show{opacity:1;transform:translate(-50%,0)}
#printArea{display:none}

/* article */
.prose{max-width:760px;margin:0 auto;padding:10px 0 40px;font-size:17px;line-height:1.68}
.prose h2:first-child{margin-top:48px}
.prose ul,.prose ol{padding-left:22px;margin:14px 0}
.prose li{margin:7px 0}
.prose figure{margin:28px 0}
.prose figure img{display:block;width:100%;height:auto;border:1.5px solid var(--ink);border-radius:var(--r);box-shadow:var(--hard);background:#fff}
.prose figcaption{font-size:13.5px;color:var(--mute);margin-top:12px}
.prose table{width:100%;border-collapse:collapse;font-size:15px;margin:20px 0;background:var(--paper);border:1.5px solid var(--ink);border-radius:var(--r);overflow:hidden;display:table}
.tablewrap{overflow-x:auto}
.prose th{font:600 13.5px var(--body);text-align:left;background:var(--ink);color:var(--wool);padding:9px 12px}
.prose td{padding:9px 12px;border-top:1px solid var(--line);vertical-align:top}
.fact{border-left:6px solid var(--madder);background:var(--paper);padding:14px 18px;margin:24px 0;border-radius:0 var(--r) var(--r) 0;font-size:16.5px}
.fact b{font-family:var(--head)}
.faq details{background:var(--paper);border:1.5px solid var(--ink);border-radius:var(--r);margin:10px 0;padding:0 16px}
.faq summary{font:650 17px/1.3 var(--head);padding:14px 0;cursor:pointer}
.faq summary::marker{color:var(--madder)}
.faq details p{margin:0 0 14px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:22px 0}
.tile{display:block;padding:16px;text-decoration:none}
.tile b{font:650 18px/1.2 var(--head);display:block;margin-bottom:6px}
.tile span{font-size:14.5px;color:#2a3350;line-height:1.45;display:block}
.tile:hover{background:#FFF7E6;color:var(--ink)}

/* calculators */
.calc{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:20px;align-items:start;margin-top:10px}
.calc .out{padding:18px 20px;min-height:200px;min-width:0;overflow-x:auto}
.calc .out svg{max-width:100%;height:auto}
.calc>*{min-width:0}
.big{font:700 clamp(30px,4vw,46px)/1.05 var(--head);letter-spacing:-.02em;margin:0}
.out code,.inst{font:15px/1.6 var(--mono);background:var(--wool);border:1.5px solid var(--line);border-radius:6px;padding:10px 12px;display:block;margin:10px 0;overflow-wrap:anywhere}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;font-size:15px;margin:14px 0}
.kv dt{color:var(--mute)}.kv dd{margin:0;font-weight:600}
.seg{display:flex;border:1.5px solid var(--ink);border-radius:6px;overflow:hidden}
.seg label{flex:1;text-align:center;font:600 13.5px var(--body);padding:8px;cursor:pointer;border-right:1.5px solid var(--ink)}
.seg label:last-child{border-right:0}
.seg input{position:absolute;opacity:0}
.seg label:has(input:checked){background:var(--ink);color:var(--wool)}

/* footer */
footer{background:var(--ink);color:#CFD3DE;margin-top:70px}
.foot{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:36px;padding:44px 0 30px;font-size:14.5px}
footer a{color:#fff}
footer h2{font-size:16px;color:#fff;margin:0 0 10px}
footer ul{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.sub{display:flex;gap:6px;margin-top:10px;max-width:380px}
.sub input{border-color:#fff}
.sub .btn{background:var(--madder);border-color:var(--madder);color:#fff}
.legal{border-top:1px solid #33405f;padding:16px 0 26px;font-size:13px;color:#9aa2b6}

@media (max-width:980px){
  .hero{grid-template-columns:1fr;gap:16px;padding-top:22px}
  .tool,.calc{grid-template-columns:minmax(0,1fr)}
  .tool .side{display:contents}
  .tool .side>.step:first-child{order:1}
  .tool .main{order:2}
  .tool .side>.step:nth-child(n+2){order:3}
  .grid3{grid-template-columns:1fr}
  .foot{grid-template-columns:1fr}
  .nav{display:none;width:100%;margin:0}
  .nav.open{display:flex}
  .navbtn{display:block}
  .top{flex-wrap:wrap;gap:10px}
  .stage{max-height:70vh}
  .rl{grid-template-columns:1fr}
  #track{grid-template-columns:1fr}
}
@media print{
  body>*:not(#printArea){display:none!important}
  body{background:#fff}
  #printArea{display:block;font:12px/1.4 var(--body);color:#000}
  #printArea h1{font-size:22px;margin:0 0 4px}
  #printArea h2{font-size:16px;margin:0 0 8px;break-before:page}
  #printArea table{border-collapse:collapse;margin:8px 0 4px}
  #printArea td,#printArea th{border:1px solid #999;padding:3px 8px;text-align:left;font-size:11px}
  #printArea td span{display:block;width:18px;height:18px;border:1px solid #000;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  #printArea .tile{display:block;max-width:100%;max-height:8.6in;break-inside:avoid;margin:0 auto 6px}
  #printArea .cap{font-size:10px;color:#444;margin:10px 0 3px;break-after:avoid}
  #printArea .prow p{margin:2px 0;font:10.5px/1.35 var(--mono)}
}
