@font-face{font-family:Cinzel;font-style:normal;font-weight:400 700;font-display:swap;src:url(fonts/cinzel.e3007b72.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400 600;font-display:swap;src:url(fonts/ibm-plex-sans.d8b4e62d.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url(fonts/ibm-plex-mono-400.bb87500e.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url(fonts/ibm-plex-mono-500.d32f0e07.woff2) format('woff2')}
*,*::before,*::after{box-sizing:border-box}
/* The design is square throughout: no radius anywhere, borders are hairlines. */
:root{
  --bg:#08080a;          /* page */
  --bg2:#0d0d10;         /* rows */
  --card:#101013;        /* panels and cards */
  --row-hover:#131318;
  --line:rgba(233,228,218,.10);
  --line2:rgba(233,228,218,.06);
  --fg:#e9e4da;
  --dim:#9c958a;         /* secondary text */
  --dim2:#8d867a;        /* labels and meta */
  --faint:#7b756c;       /* notes, qualifiers */
  --off:#5f5a52;         /* counters, inactive */
  --accent:#c9a24a;      /* gold: brand, filled, links */
  --accent2:#e3c477;     /* link and button hover */
  --on-accent:#12100c;   /* text on a gold fill */
  --daily:#7d8f6a;
  --danger:#c96a4a;--danger-fg:#d98b6f;
  /* Overridden per patch from index.md. They tint the few remaining
     patch-specific accents; the shell itself no longer uses them. */
  --key:#c9a24a;--key2:#8d867a}
body{margin:0;background:var(--bg);color:var(--fg);
  font:400 14px/1.6 'IBM Plex Sans',system-ui,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}
/* A link inside running text has to be findable without seeing the colour. */
.lede a,.sub a,.note a,.wk-n a,.wk-imp-h a,.wk-imp-k a,.sec-s a,.blurb a,p a,li a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;text-decoration-color:color-mix(in oklab,var(--accent) 55%,transparent)}
.lede a:hover,.sub a:hover,.note a:hover,.wk-n a:hover,p a:hover,li a:hover{text-decoration-color:currentColor}
a:hover{color:var(--accent2)}
h1,h2,h3,h4{font-family:Cinzel,Georgia,serif;font-weight:400;letter-spacing:.02em;text-wrap:balance}
h1{font-size:clamp(28px,4.4vw,40px);line-height:1.1;margin:0 0 8px}
.h1-xl{font-size:clamp(34px,6vw,60px);line-height:1.02;margin:0 0 14px;letter-spacing:-.025em;max-width:18ch}
.mono,input,select,button{font-family:'IBM Plex Mono',ui-monospace,monospace}
input,select,button{font-size:13px;color:inherit}
.main{min-width:0;padding:44px 56px 90px;display:flex;flex-direction:column;gap:46px}
/* Page sections were separated by their own margins; the shell owns that gap
   now, so a stray bottom margin would double it. */
.main>*{margin-bottom:0}
.wrap{max-width:100%;margin:0;padding:0}
.dim{color:var(--dim)}.dim2{color:var(--dim2)}.accent{color:var(--accent)}.sm{font-size:13.5px}.strong{font-weight:500}
.kicker{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim2)}
.sub{color:var(--dim);max-width:62ch;margin:0 0 26px}
.lede{color:var(--dim);font-size:18px;max-width:62ch;text-wrap:pretty}
.lede.sm{font-size:15px;margin-bottom:4px}
.lede p{margin:0 0 14px}
/* ---- shell: a sticky rail, and a top bar once the rail no longer fits ----- */
.shell{max-width:1320px;margin:0 auto;display:grid;grid-template-columns:236px minmax(0,1fr);align-items:start}
.rail{display:flex;flex-direction:column;gap:34px;position:sticky;top:0;height:100vh;
  padding:30px 26px;border-right:1px solid var(--line);overflow-y:auto}
.rail{scrollbar-width:thin;scrollbar-color:rgba(233,228,218,.14) transparent}
.rail::-webkit-scrollbar{width:6px}
.rail::-webkit-scrollbar-thumb{background:rgba(233,228,218,.14)}
.rail::-webkit-scrollbar-track{background:transparent}
.rail-foot{margin-top:auto;display:flex;flex-direction:column;gap:12px}
.rail-foot p{margin:0;font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--off)}
.brand{display:flex;align-items:center;gap:11px;color:var(--fg)}
.wm{font-family:Cinzel,Georgia,serif;font-size:17px;letter-spacing:.04em}
.wm b{font-weight:700;color:var(--accent)}
.mark{flex:none;display:block}
.nav{display:flex;flex-direction:column;gap:2px;font-size:14px}
.navlink{color:var(--dim);padding:8px 10px;white-space:nowrap}
.navlink:hover{color:var(--fg);background:rgba(233,228,218,.04)}
.navlink.on{color:var(--fg);background:rgba(201,162,74,.10);box-shadow:inset 2px 0 0 var(--accent)}
/* The class jump list, colour-coded, reachable from every page. */
.rcls-list{display:flex;flex-direction:column;gap:1px;font-size:12px}
.rcls{padding:6px 10px;color:var(--cc);opacity:.75}
.rcls:hover{opacity:1;color:var(--cc);background:rgba(233,228,218,.05)}
/* Below the rail breakpoint: a sticky bar and a panel it opens. */
.topbar{display:none;align-items:center;justify-content:space-between;gap:16px;
  padding:14px 16px;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:30;
  background:rgba(8,8,10,.94);backdrop-filter:blur(8px)}
.burger{display:flex;flex-direction:column;gap:4px;align-items:center;justify-content:center;
  width:44px;height:44px;margin:-11px -10px -11px 0;background:none;border:0;cursor:pointer}
.burger i{width:20px;height:2px;background:var(--fg)}
.mobmenu{display:none;flex-direction:column;gap:14px;padding:10px 8px 20px;
  background:#0b0b0e;border-bottom:1px solid var(--line);position:sticky;top:57px;z-index:29}
.mobmenu .navlink{font-size:15px;padding:12px}
.mob-cls-h{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--off);padding:0 12px}
.mob-cls{display:flex;flex-wrap:wrap;gap:6px;padding:0 12px}
.mob-cls .rcls{padding:8px 10px;background:rgba(233,228,218,.05);opacity:1}
/* One breakpoint decides the whole shell: the rail goes, the bar arrives. */
@media (max-width:980px){
  .shell{grid-template-columns:minmax(0,1fr)}
  .rail{display:none}
  .topbar{display:flex}
  .mobmenu:not([hidden]){display:flex}
  .main{padding:22px 16px 70px;gap:34px}
  .cls{scroll-margin-top:70px}
}
/* An admin-only entry is labelled where it is used, so nobody has to remember
   which of these the public can actually see. */
.navlink.adm{display:inline-flex;align-items:center;gap:7px}
.navlink.adm::after{content:"admin";font-family:'IBM Plex Mono',monospace;font-size:8.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--key);border:1px solid color-mix(in oklab,var(--key) 42%,transparent);background:color-mix(in oklab,var(--key) 12%,transparent);padding:1px 4px}
.adm-note{display:flex;align-items:center;gap:9px;margin:0 0 18px;padding:9px 13px;font-size:13px;color:var(--dim);border:1px solid color-mix(in oklab,var(--key) 34%,transparent);background:color-mix(in oklab,var(--key) 9%,transparent)}
.adm-note b{color:var(--key);font-weight:600}
.tools{display:flex;align-items:center;gap:8px;margin-left:auto}
.tools input{width:190px}
.tools input,.tools select{background:var(--bg2);border:1px solid var(--line);padding:7px 10px;outline:none}
.tools input:focus,.tools select:focus{border-color:var(--accent)}
.card{display:block;background:var(--card);border:1px solid var(--line);color:inherit}
.card.tbl,.card.pad{box-shadow:inset 0 1px 0 color-mix(in oklab,var(--accent) 8%,transparent)}
.card.pad{padding:20px}
.card.soft{background:var(--bg2)}
.grid{display:grid;gap:14px}
.grid.cards{grid-template-columns:repeat(auto-fit,minmax(250px,1fr));margin-bottom:26px}
.grid.two{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grid.three{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.grid.cls-grid{grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:12px}
.stack{display:flex;flex-direction:column;gap:10px}
.stack.lg{gap:22px}
.stack.sm{gap:7px}
.meta{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.feat{padding:18px}
.feat h3{margin:9px 0 7px;font-size:19px;font-weight:600}
.feat p{margin:0;color:var(--dim);font-size:14.5px}
.feat:hover{border-color:var(--accent);color:inherit}
.ch{margin:0 0 14px;font-size:15px;font-weight:600}
.ch.lg{margin:9px 0 4px;font-size:19px}
.note{color:var(--dim);font-size:14px;margin:0 0 16px}
/* ---- vault hero ---------------------------------------------------------- */
.vhero{display:flex;flex-wrap:wrap;gap:28px;align-items:stretch}
/* A wrapping flex row, not a two-column grid: a hard second column squeezes the
   panel instead of letting the side cards drop beneath it. */
.vpanel{flex:1 1 420px;min-width:0;background:linear-gradient(150deg,#15141a,#0e0d10);
  border:1px solid var(--line);padding:30px;display:flex;flex-direction:column;gap:24px}
.vp-h{display:flex;align-items:baseline;justify-content:space-between;gap:16px}
.lbl{font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--dim2)}
.vp-reset{font-size:11px;color:var(--dim2)}
.vp-reset b{font-weight:400;color:var(--fg)}
.vp-b{display:flex;flex-wrap:wrap;gap:28px;align-items:center}
.vslots{flex:none;display:grid;grid-template-columns:repeat(3,46px);grid-auto-rows:46px;gap:7px}
.vslots i{background:rgba(233,228,218,.07);box-shadow:inset 0 0 0 1px var(--line);transition:background .18s}
.vslots i.on{background:linear-gradient(180deg,#f0d081,var(--accent));box-shadow:none}
.vp-n{flex:1 1 190px;min-width:0;display:flex;flex-direction:column;gap:14px}
.vp-big{display:flex;align-items:baseline;gap:8px;margin:0}
.vp-big #st-slots{font-size:46px;line-height:1;color:var(--accent)}
.vp-of{font-size:16px;color:var(--off)}
.vp-cap{font-size:12px;color:var(--dim);margin-left:4px}
.vp-note{margin:0;font-size:12px;line-height:1.7;color:var(--dim)}
.vp-note b{font-weight:400;color:var(--fg)}
.vp-note .dimmer{color:var(--faint)}
/* One row per vault source. The 1px gaps are the background showing through. */
.vp-rows{display:flex;flex-direction:column;gap:1px;background:rgba(233,228,218,.09)}
.vpr{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;
  background:#0e0d10;padding:11px 2px 11px 0}
.vpr-b{width:3px;height:22px;background:rgba(233,228,218,.16)}
.vpr.on .vpr-b{background:var(--accent)}
.vpr-t{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vpr-n{font-size:11px;color:var(--dim2);white-space:nowrap}
.vpr-n i{font-style:normal;color:#4e4a44}
.vside{flex:1 1 260px;max-width:320px;min-width:0;display:flex;flex-direction:column;gap:28px}
.scard{background:var(--card);border:1px solid var(--line);padding:22px;display:flex;flex-direction:column;gap:14px}
.scard.grow{flex:1}
.sbars{display:flex;flex-direction:column;gap:12px}
.sbar{display:flex;flex-direction:column;gap:7px}
.sb-h{display:flex;justify-content:space-between;font-size:12px;color:var(--dim)}
.sb-n{color:var(--fg)}
.sb-t{height:4px;background:rgba(233,228,218,.09)}
.sb-t i{display:block;height:100%;width:0;background:var(--accent);transition:width .25s ease}
.sb-t.d i{background:var(--daily)}
.s-p{margin:0;font-size:12px;line-height:1.6;color:var(--dim)}
.s-p code{font-family:'IBM Plex Mono',monospace;color:var(--fg)}
.s-in{display:flex;gap:8px}
.s-in input{flex:1;min-width:0;background:#0a0a0c;border:1px solid rgba(233,228,218,.14);color:var(--fg);
  font-family:'IBM Plex Mono',monospace;font-size:12px;padding:9px 10px;outline:none}
.s-in input:focus{border-color:var(--accent)}
.btn-gold{background:var(--accent);color:var(--on-accent);border:0;font-family:inherit;font-size:12px;
  font-weight:600;padding:9px 14px;cursor:pointer}
.btn-gold:hover{background:var(--accent2)}
.s-dl{font-size:11px;color:var(--dim2);margin-top:auto}
.s-dl:hover{color:var(--accent)}

.wk-intro{margin:0;font-size:12px;line-height:1.7;color:var(--faint);max-width:74ch}
.wk-btn{background:none;border:1px solid var(--line);padding:4px 10px;font-family:'IBM Plex Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim2);cursor:pointer;transition:border-color .15s,color .15s}
.wk-btn:hover{border-color:var(--accent);color:var(--accent)}
.wk-btn[aria-pressed=true]{border-color:color-mix(in oklab,var(--accent) 45%,var(--line));background:color-mix(in oklab,var(--accent) 14%,transparent);color:var(--accent)}
#wk-notes{margin-left:auto}
.wk-grp{display:flex;flex-direction:column;gap:22px}
.wk-grp+.wk-grp{margin-top:42px}
.wk-h{display:flex;align-items:baseline;justify-content:space-between;gap:14px;flex-wrap:wrap;
  border-bottom:1px solid var(--line);padding-bottom:12px;margin:0}
.wk-hl{margin:0;font-family:Cinzel,Georgia,serif;font-weight:400;font-size:26px;letter-spacing:.02em}
.wk-sum,.wk-cd,.wk-clr{font-family:'IBM Plex Mono',monospace;font-size:11px}
.wk-sum{color:var(--dim2);margin-left:auto}
.wk-cd{letter-spacing:0;text-transform:none;color:#4e4a44}
.wk-clr{background:none;border:0;padding:0;color:var(--dim2);cursor:pointer}
.wk-clr:hover{color:var(--danger-fg)}
.band{display:flex;flex-direction:column;gap:12px}
.band+.band{margin-top:10px}
.wk-sub{display:flex;align-items:baseline;gap:9px;margin:0}
.wk-bsum{margin-left:auto;font-size:10px;letter-spacing:.06em;color:var(--off)}
.wk-bsum.full{color:var(--accent)}
.wk-sub .n,.wk-sub h4{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--off);font-weight:400;margin:0}
.lnk{color:inherit}
.lnk:hover{color:var(--accent)}
.lnk::after{content:"\2197";font-size:.72em;margin-left:3px;color:var(--dim2);vertical-align:super}
.lnk:hover::after{color:var(--accent)}

.wk-ticks{display:flex;gap:3px;width:100%}
.tick{position:relative;flex:1;min-width:0;height:15px;padding:0;border:0;
  background:rgba(233,228,218,.12);cursor:pointer;transition:background .12s}
.tick:hover{background:rgba(233,228,218,.22)}
.tick:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.tick.on{background:var(--accent)}
/* A single-step entry is a checkbox, not a bar: it reads as a thing you tick. */
.wk-ticks.one{justify-content:flex-start}
.wk-ticks.one .tick{flex:none;width:15px;height:15px;background:none;
  box-shadow:inset 0 0 0 1px rgba(233,228,218,.28)}
.wk-ticks.one .tick:hover{box-shadow:inset 0 0 0 1px var(--accent)}
.wk-ticks.one .tick.on{background:var(--accent);box-shadow:none}
.wk-ticks.one .tick.on::after{content:"";position:absolute;left:4px;top:4px;width:7px;height:7px;background:var(--on-accent)}
.wk-ticks.pips .tick{height:8px}

.vgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}
.vcard{background:var(--card);border:1px solid var(--line);padding:16px;display:flex;flex-direction:column;gap:12px}
.vc-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
/* Slot state is read by the hero panel and the band summary; drawing it a
   second time inside every card only repeats what the nine squares say. */
.vc-slots{display:none}
.vc-t{display:block;font-size:14px;font-weight:500;line-height:1.3}
.vc-h .wk-c{font-size:11px;color:var(--dim2)}
.vc-m{display:flex;align-items:baseline;justify-content:flex-end;gap:10px}
.vc-next{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:color-mix(in oklab,var(--key) 78%,var(--fg));text-align:right}
.vc-r{border-top:1px solid var(--line);padding-top:7px;margin-top:1px;display:flex;flex-direction:column;gap:1px}
.vslot{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:22px}
.vs-req{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim2);white-space:nowrap}
.vs-pick{max-width:64%;border:0;background:none;padding:2px 0;font-size:12.5px;color:var(--fg);text-align:right;text-align-last:right;cursor:pointer;outline:none;border-bottom:1px dotted transparent}
.vs-pick:hover:not(:disabled){border-bottom-color:var(--accent);color:var(--accent)}
.vs-pick:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.vs-pick:disabled{color:var(--dim2);opacity:.5;cursor:default}
.vslot.locked .vs-req{opacity:.5}
.vs-pick option{background:var(--card);color:var(--fg)}

/* The tick column is a fixed width so a lone checkbox and a group of three or
   five pips all align on the same two edges. That is the difference between
   this reading as a list and reading as noise. */
.wk{display:grid;grid-template-columns:58px minmax(0,1fr) auto auto;gap:14px;align-items:center;
  background:var(--bg2);padding:13px 16px;cursor:pointer}
.wk:hover{background:var(--row-hover)}
.rows{display:flex;flex-direction:column;gap:1px;background:rgba(233,228,218,.08)}
.wk-t{font-size:13px;font-weight:400;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wk-c{font-size:11px;color:var(--off);text-align:right}
.wk-tag{font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim2);
  background:rgba(233,228,218,.06);padding:3px 7px;justify-self:end;white-space:nowrap}
.wk-tag.paid{color:var(--fg);letter-spacing:.04em}
.wk-tag.paid b{font-weight:600}
.wk-w,.wk-n{display:none}
.wk-w{align-items:center;gap:6px;font-size:12px;color:var(--dim2);padding-top:2px}
.wk .wk-w,.wk .wk-n{grid-column:2/-1}
.wk-n{font-size:13px;line-height:1.5;color:var(--dim);padding:1px 0 6px;max-width:74ch}
.pin{flex:none;color:var(--accent);opacity:.8}
#checklist.notes .wk-w{display:flex}
#checklist.notes .wk-n{display:block}
#checklist.notes .wk-t{white-space:normal}
#checklist.notes .vcard .wk-n{padding-bottom:0}
.wk.synced .wk-t::before,.vcard.synced .vc-t::before,.wk.manual .wk-t::before,.vcard.manual .vc-t::before{content:"";display:inline-block;width:5px;height:5px;margin-right:7px;vertical-align:middle}
.wk.synced .wk-t::before,.vcard.synced .vc-t::before{background:var(--accent);opacity:.85}
.wk.manual .wk-t::before,.vcard.manual .vc-t::before{box-shadow:inset 0 0 0 1px var(--dim2)}
.wk.done .wk-t{color:var(--dim2);text-decoration:line-through;text-decoration-color:color-mix(in oklab,var(--dim2) 55%,transparent)}
.wk.done .wk-tag{opacity:.5}

.wk-imp{margin-top:28px;padding-top:18px;border-top:1px solid var(--line)}
.wk-imp summary{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim2);gap:8px}
.wk-imp summary:hover{color:var(--accent)}
.wk-imp-h{margin:12px 0 10px;font-size:13.5px;color:var(--dim);max-width:70ch}
.wk-imp-h code,.wk-imp-k code{font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:var(--accent)}
.wk-imp-dl{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 14px}
.wk-imp-dl .btn{margin-top:0}
.wk-imp-dl code{font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--dim)}
.wk-imp-r{display:flex;gap:8px;flex-wrap:wrap}
.wk-imp-r input{flex:1 1 320px;min-width:0;background:var(--bg2);border:1px solid var(--line);padding:8px 10px;outline:none}
.wk-imp-r input:focus{border-color:var(--accent)}
.wk-imp-m{margin:10px 0 0;font-size:11.5px;color:var(--dim2);min-height:1.2em}
.wk-imp-m.bad{color:var(--accent)}
.wk-imp-k{margin:8px 0 0;font-size:11px;color:var(--dim2);max-width:74ch;line-height:1.8}
.key-dot{display:inline-block;width:5px;height:5px;vertical-align:middle}
.key-dot.on{background:var(--accent)}
.key-dot.off{box-shadow:inset 0 0 0 1px var(--dim2)}
.kvs{display:flex;flex-direction:column}
.kv{display:flex;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid var(--line);font-size:14.5px}
/* Inside a delve card the pair is label left, value right, and the value gets
   the room: these are short numbers with long names beside them. */
.dcard .kvs{gap:0}
.dcard .kv{font-size:12px;gap:12px;align-items:baseline;padding:8px 0;color:var(--dim2)}
.dcard .kv:last-child{border-bottom:0;padding-bottom:0}
.dcard .kv>span:first-child{flex:0 1 auto;min-width:0}
.dcard .kv>span:last-child{flex:0 0 auto;text-align:right;color:var(--fg);font-size:11.5px}
.kv span:first-child{color:var(--dim)}
.kv.top{border-bottom:0;border-top:1px solid var(--line);padding:8px 0 0;margin-bottom:8px;align-items:baseline}
.g2,.g4{display:grid;gap:12px;align-items:center}
.g2{grid-template-columns:1fr auto}
.g4{grid-template-columns:1.5fr 1.05fr 1.05fr .95fr}
.g2.head,.g4.head{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim2);padding-bottom:7px;border-bottom:1px solid var(--line)}
.g2.r,.g4.r{font-size:14.5px;padding:9px 0;border-bottom:1px solid var(--line)}
.g2.r>span:first-child,.g4.r>span:first-child{color:var(--dim)}
.g2.r .strong,.g4.r .strong{color:var(--fg)}
.il{display:inline-flex;flex-direction:column;gap:1px;min-width:0}
/* ---- loot and delve tables ----------------------------------------------- */
.page-h{display:flex;flex-direction:column;gap:12px}
.page-s{margin:0;font-size:13px;color:var(--dim2);max-width:60ch;text-wrap:pretty}
.legend{display:flex;gap:10px;flex-wrap:wrap;font-size:10px;letter-spacing:.14em;text-transform:uppercase}
.lg-i{display:flex;align-items:center;gap:7px;color:var(--dim2)}
.lg-i i{width:9px;height:9px;background:currentColor}
.sec-h.col{flex-direction:column;align-items:stretch;gap:7px}
.sec-n{margin:0;font-size:12px;color:var(--dim2);text-wrap:pretty}
/* A wide table scrolls inside its own box; the page never scrolls sideways. */
.tw{overflow-x:auto}
.tbl{border-collapse:collapse;width:100%;min-width:600px;font-size:12px;text-align:left}
.tbl th{font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--dim2);font-weight:400;padding:0 14px 10px 0}
.tbl th:last-child,.tbl td:last-child{padding-right:0}
.tbl td{padding:11px 14px 11px 0;border-top:1px solid rgba(233,228,218,.08);vertical-align:top}
.tbl tr.best{background:rgba(201,162,74,.05)}
.tbl .tier{display:flex;flex-direction:column;gap:2px}
.t-n{font-size:12px}
.t-q{font-size:10px;color:var(--faint)}
/* Track colours, Blizzard's own ladder from Adventurer up to Myth. */
.t-adventurer{color:#6f6a61}
.t-veteran{color:#7d8f6a}
.t-champion{color:#5f86a8}
.t-hero{color:#8a6fb0}
.t-myth{color:var(--accent)}
.t-pvp{color:#6f6a61}
.dgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}
.dcard{background:var(--card);border:1px solid var(--line);padding:18px;display:flex;flex-direction:column;gap:12px}
.dcard.hi{border-color:rgba(201,162,74,.22)}
.dc-p{margin:0;font-size:12px;line-height:1.6;color:var(--dim)}
.il-n{display:flex;align-items:center;gap:6px;font-size:14.5px;white-space:nowrap}
.il-i{width:13px;height:13px;flex:none;color:var(--dim2)}
.sprite{position:absolute;width:0;height:0;overflow:hidden}
.il-drop .il-i{color:var(--accent)}
.il-vault .il-n{color:var(--dim)}
.il-crest .il-n{color:var(--dim)}
.il-t{font-size:10.5px;line-height:1.35;letter-spacing:.08em;text-transform:uppercase;color:var(--dim2);text-wrap:pretty}
/* Inside a table the cell is one line: the number, then the track beside it in
   the track's colour. The stacked form stays for the cards on Home. */
.tbl .il{display:flex;flex-direction:row;align-items:baseline;gap:7px;flex-wrap:wrap}
.tbl .il-n{font-size:12px;gap:0}
.tbl .il-l{display:none}
.tbl .il-t{font-size:11px;letter-spacing:0;text-transform:none}
.il-none{opacity:.5}
.il-l{display:none;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim2)}
.ilvl-block{margin-top:18px;border-top:1px solid var(--line);padding-top:14px}
.row.three{grid-template-columns:1.5fr 1.1fr 1.1fr}
.btn{display:inline-block;white-space:nowrap;margin-top:16px;border:1px solid var(--line);padding:8px 12px;font-size:14px;font-family:inherit}
.btn:hover{border-color:var(--accent)}
details.card{padding:18px 20px}
summary{display:flex;align-items:center;gap:14px;list-style:none;cursor:pointer}
summary::-webkit-details-marker{display:none}
.sum-kind{min-width:84px}
.sum-t{font-size:19px;font-weight:600;flex:1}
.det{padding-top:14px}
.steps{margin:0;padding-left:18px;display:grid;gap:6px;font-size:14.5px}
h4.kicker{margin:0 0 9px}
.tbl{overflow:hidden}
.tbl-h{padding:15px 20px;border-bottom:1px solid var(--line);display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.tbl-h h2{margin:0;font-size:17px;font-weight:600}
.row{display:grid;gap:8px;padding:12px 20px;border-bottom:1px solid var(--line);font-size:14.5px;align-items:center}
.row.four{grid-template-columns:1.5fr 1.05fr 1.05fr .95fr}
.row.five{grid-template-columns:.75fr 1fr 1fr 1fr .9fr}
.row.bis{grid-template-columns:.8fr 1.9fr 1.1fr}
.panel>*+*{margin-top:14px}
.steps.num{padding-left:20px}
.src a{color:color-mix(in oklab,var(--cc,var(--accent)) 80%,var(--fg))}
.stale{color:var(--accent);font-weight:500}
.row.head{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim2);padding:10px 20px}
.row-card{display:flex;gap:18px;align-items:baseline;flex-wrap:wrap;padding:17px 20px}
.row-card:hover{border-color:var(--accent)}
.pid{font-size:15px;min-width:56px}
.rc-t{font-size:16.5px;font-weight:600;flex:1 1 200px}
.rc-s{flex:1 1 100%;max-width:70ch}
.cc{color:color-mix(in oklab,var(--cc) 88%,var(--fg))}
.back{display:inline-block;color:var(--dim);font-size:14px;margin-bottom:18px}
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:20px}
.tab{background:none;border:1px solid var(--line);padding:8px 14px;font-family:inherit;font-size:14.5px;font-weight:500;color:var(--dim);cursor:pointer}
.tab.on{background:color-mix(in oklab,var(--cc) 18%,transparent);border-color:color-mix(in oklab,var(--cc) 45%,var(--line));color:color-mix(in oklab,var(--cc) 88%,var(--fg))}
.panel{display:none}
.panel.on{display:block}
.src{margin:18px 0 0;padding:0;font-size:11.5px;color:var(--dim2);text-align:right}
.src a{color:var(--dim2);text-decoration:underline;text-decoration-color:color-mix(in oklab,var(--dim2) 45%,transparent)}
.src a:hover{color:var(--accent)}
.ftr{display:flex;flex-wrap:wrap;gap:10px 20px;justify-content:space-between;align-items:center;
  border-top:1px solid var(--line);padding-top:20px;margin-top:auto;font-size:11px;color:var(--off)}
.ftr-l{color:var(--off);margin-right:auto}
.ftr-l:hover{color:var(--accent)}
.ftr-bsky{display:inline-flex;align-items:center;gap:7px;color:var(--off);text-decoration:none}
.ftr-bsky:hover{color:var(--accent)}
/* A finger is not a mouse pointer. On a touch screen the tick boxes and the
   small controls grow to a real hit area; the dense look stays on desktop. */
@media (pointer:coarse){
  .wk-ticks{gap:6px}
  .tick{width:24px;height:24px}
  .tick.on::after{left:8px;top:4px;width:6px;height:12px;border-width:0 2.5px 2.5px 0}
  .wk-btn{min-height:34px;padding:8px 12px}
  .vs-pick{min-height:34px}
  .navlink{padding:10px 12px}
  .wk{min-height:44px}
}
@media (max-width:720px){
  .tools{margin-left:0;width:100%}
  .tools input{flex:1;width:auto}
  .row.four,.row.five{grid-template-columns:1fr 1fr}
  .row.head{display:none}
  .il-l{display:inline}
  .g4{grid-template-columns:1fr 1fr;row-gap:10px}
  .g4.head{display:none}
  .g4.r>span:first-child{grid-column:1/-1}
  .vgrid{grid-template-columns:1fr}
  .wk{grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;padding:9px 0}
  .wk-t{grid-row:1;grid-column:1;white-space:normal}
  .wk-tag{grid-row:1;grid-column:2}
  .wk-ticks{grid-row:2;grid-column:1}
  .wk-c{grid-row:2;grid-column:2}
  .wk .wk-n,.wk .wk-w{grid-column:1/-1}
  .g2,.g2.head{grid-template-columns:1fr auto}
  .g2 .il-l{display:none}
}

/* ---- class anchors ------------------------------------------------------- */
/* Nothing sticky covers the top of the content column on desktop, so the
   anchor only has to clear the mobile bar. */
.cls{scroll-margin-top:24px}

/* ---- classes directory --------------------------------------------------- */
/* One section per class: a colour bar, the name in the class colour, and a
   hairline that fades out of that colour into the ordinary rule. */
.cls{display:flex;flex-direction:column;gap:14px}
.cls+.cls{margin-top:32px}
.cls-h{display:flex;align-items:center;gap:14px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.cls-bar{width:4px;height:20px;background:var(--cc);flex:none}
.cls-n{margin:0;font-size:22px;color:var(--cc)}
.cls-rule{flex:1;height:1px;background:linear-gradient(90deg,var(--cc),var(--line) 40%)}
.cls-c{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--off);white-space:nowrap}
.cgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}
.scell{background:var(--card);box-shadow:inset 0 0 0 1px var(--line);padding:16px;
  display:flex;flex-direction:column;gap:14px}
.scell-h{display:flex;align-items:center;gap:11px}
.crow-i{width:32px;height:32px;flex:none;background:#0d0c0b;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.6),0 0 0 1px var(--cc)}
.scell-n{display:flex;flex-direction:column;gap:3px;min-width:0}
.scell-n b{font-size:14px;font-weight:500}
.scell-n .mono{font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim2)}
.scell-l{display:flex;flex-direction:column;gap:8px}
.gset{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gsrc{font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--off);width:52px;flex:none}
.glink{font-size:12px;color:var(--accent)}
.glink:hover{color:var(--accent2)}
@media (pointer:coarse){.glink{padding:4px 0}}

/* ---- class pages -------------------------------------------------------- */
/* Item quality colours are Blizzard's own scale. They are the fastest way to
   read a gear list, with or without the tooltip script attached. */
.itm{font-weight:500}
.q0{color:#9d9d9d}.q1{color:#ffffff}.q2{color:#1eff00}.q3{color:#0070dd}.q4{color:#a335ee}.q5{color:#ff8000}
a.itm{text-decoration:none;border-bottom:1px solid color-mix(in oklab,currentColor 32%,transparent)}
a.itm:hover{border-bottom-color:currentColor}
/* No item id yet, so this is a name search rather than the item itself. */
a.itm.noid{border-bottom-style:dotted;border-bottom-color:color-mix(in oklab,currentColor 40%,transparent)}
.row.bis{grid-template-columns:104px minmax(0,1.1fr) minmax(0,.8fr) minmax(0,1.2fr);align-items:start}
.row.bis .kicker{padding-top:2px}
.alts{display:flex;flex-direction:column;gap:5px;min-width:0}
.alt{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;font-size:13px}
.alt-src{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--dim2)}
.alt-note{font-size:12px;color:var(--dim2)}
.ld-top{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:12px}
.ld-top .kicker{margin:0}
.ld-when{font-size:10px;letter-spacing:.08em;color:var(--dim2)}
.ld{border:1px solid var(--line);padding:13px 15px;background:var(--bg2)}
.ld+.ld{margin-top:10px}
.ld-h{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}
.ld-n{font-size:15px;font-weight:600}
.ld-calc{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase}
.ld-note{margin:7px 0 0;font-size:13.5px;color:var(--dim)}
.ld-copy{display:flex;align-items:center;gap:9px;margin-top:10px}
.ld-str{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  background:var(--bg);border:1px solid var(--line);padding:7px 9px;
  font-family:'IBM Plex Mono',monospace;font-size:11.5px;color:var(--dim)}
.ld-btn{flex:none}
.ld-btn.done{border-color:color-mix(in oklab,var(--key) 55%,var(--line));color:var(--key)}
.kvs.items .kv{display:block;padding:11px 0}
.kvs.items .kv:first-child{padding-top:2px}
.kvs.items .kv:last-child{border-bottom:0;padding-bottom:2px}
.kv-k{display:block;font-family:'IBM Plex Mono',monospace;font-size:9.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--dim2);margin-bottom:5px}
.kv-v{display:block;line-height:1.5}
.kvs.items .kv-v a{margin-right:2px}
.kv-or{color:var(--dim2);font-size:12px}
.fine-note{margin:12px 0 0;font-size:12.5px;color:var(--dim2)}
@media (max-width:720px){
  .row.bis{grid-template-columns:1fr 1fr}
  .row.bis>span:first-child{grid-column:1/-1}
  .alts{grid-column:1/-1}
}

/* ---- settings ---------------------------------------------------------- */
/* ---- signed-out notice ---------------------------------------------------- */
/* Hidden by default and revealed only for a visitor with no account cookie, so
   the wrong state is never shown even for one frame. */
.anonbar{display:none}
html.anon .anonbar{display:flex;align-items:center;justify-content:space-between;gap:14px;
  flex-wrap:wrap;padding:11px 14px;background:rgba(201,162,74,.07);
  box-shadow:inset 2px 0 0 var(--accent);font-size:12px;color:var(--dim)}
.anonbar-t{min-width:0}
.anonbar-a{font-size:12px;color:var(--accent);white-space:nowrap}
.anonbar-a:hover{color:var(--accent2)}

/* ---- prose pages ---------------------------------------------------------- */
.prose{max-width:68ch;display:flex;flex-direction:column;gap:0}
.prose h2{font-size:22px;margin:34px 0 0;padding-bottom:10px;border-bottom:1px solid var(--line)}
.prose h2:first-child{margin-top:0}
.prose h3{font-size:15px;font-weight:500;font-family:'IBM Plex Sans',system-ui,sans-serif;
  letter-spacing:0;margin:22px 0 0}
.prose p{margin:14px 0 0;font-size:13px;line-height:1.75;color:var(--dim);text-wrap:pretty}
.prose ul,.prose ol{margin:12px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:8px}
.prose li{font-size:13px;line-height:1.7;color:var(--dim);text-wrap:pretty}
.prose li b,.prose p b{color:var(--fg);font-weight:500}
.prose code{font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--fg)}

/* ---- account -------------------------------------------------------------- */
.acc-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:46px}
.acc-pane{display:flex;flex-direction:column;gap:46px}
/* A flex display beats the hidden attribute, so say it again explicitly. */
.acc-pane[hidden]{display:none}
.acc-f{display:flex;flex-direction:column;gap:14px;max-width:44ch}
.acc-f label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--dim)}
.acc-f input{background:#0a0a0c;border:1px solid var(--line);color:var(--fg);
  font-family:inherit;font-size:13px;padding:10px 11px;outline:none}
.acc-f input:focus{border-color:var(--accent)}
.acc-f input:disabled{opacity:.5}
.acc-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:4px}
.lnk-btn{background:none;border:0;padding:0;font-family:inherit;font-size:12px;
  color:var(--dim2);cursor:pointer;text-decoration:underline;text-underline-offset:2px}
.lnk-btn:hover{color:var(--accent)}
a.obtn{display:inline-block}
/* The status line holds its height so an answer never shifts the form. */
.acc-msg{min-height:1.4em;font-size:11.5px;color:var(--dim2)}
.acc-msg.on{border-left:2px solid var(--accent);padding-left:10px}
.acc-msg.bad{color:var(--danger-fg);border-left-color:var(--danger)}
#account{display:flex;flex-direction:column;gap:24px}

/* ---- settings ------------------------------------------------------------ */
.set-stack{display:flex;flex-direction:column;gap:46px}
/* The region is a choice between two things, so it reads as two cards with a
   radio dot rather than as a pair of buttons. */
.seg{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}
.seg-b{display:flex;align-items:center;gap:12px;text-align:left;background:var(--card);
  border:1px solid var(--line);padding:16px;cursor:pointer;font-family:inherit;color:var(--dim)}
.seg-b i{width:13px;height:13px;flex:none;box-shadow:inset 0 0 0 1px rgba(233,228,218,.28)}
.seg-b span{display:flex;flex-direction:column;gap:3px;font-size:11px;
  font-family:'IBM Plex Mono',monospace;letter-spacing:.06em;color:var(--dim2)}
.seg-b b{font-family:'IBM Plex Sans',system-ui,sans-serif;font-size:13px;font-weight:500;
  letter-spacing:0;color:var(--fg)}
.seg-b:hover{border-color:color-mix(in oklab,var(--accent) 40%,var(--line))}
.seg-b[aria-pressed=true]{border-color:rgba(201,162,74,.45);background:rgba(201,162,74,.07)}
.seg-b[aria-pressed=true] i{background:var(--accent);box-shadow:inset 0 0 0 1px var(--accent),inset 0 0 0 4px #12100c}
/* An outline button: used for the two bulk actions and for clearing data. */
.obtn{background:none;border:1px solid var(--line);padding:6px 12px;
  font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--dim2);cursor:pointer;transition:border-color .15s,color .15s}
.obtn:hover{border-color:var(--accent);color:var(--accent)}
.obtn.danger:hover{border-color:var(--danger);color:var(--danger-fg)}
.chips{display:flex;gap:4px;flex-wrap:wrap}
.chip{background:none;border:1px solid var(--line);padding:4px 8px;font-family:inherit;font-size:10px;
  letter-spacing:.06em;color:var(--off);cursor:pointer;white-space:nowrap;transition:border-color .15s,color .15s}
.chip:hover{border-color:var(--accent);color:var(--accent)}
.chip[aria-pressed=true]{border-color:rgba(201,162,74,.45);background:rgba(201,162,74,.10);color:var(--accent)}
.set-warn{margin:0;font-size:12px;color:var(--faint);max-width:70ch}
.set-grp{display:flex;flex-direction:column;gap:0}
.set-grp+.set-grp{margin-top:22px}
.set-grp .wk-sub{margin:0 0 8px}
.set-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto 40px;gap:14px;align-items:center;
  padding:10px 0;border-bottom:1px solid color-mix(in oklab,var(--line) 50%,transparent);cursor:pointer;
  position:relative;min-height:44px}
.set-row:last-child{border-bottom:0}
.set-one{border-bottom:0;padding-top:2px}
.set-t{font-size:13px}
/* A row switched off says so by going quiet, not by disappearing. */
.set-row:has(.set-x:not(:checked)) .set-t{color:var(--off)}
.set-b{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim2);white-space:nowrap}
.set-x{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.sw{justify-self:end;width:38px;height:20px;background:rgba(233,228,218,.09);
  border:1px solid var(--line);position:relative;transition:background .15s,border-color .15s}
.sw::after{content:"";position:absolute;left:3px;top:3px;width:14px;height:14px;background:var(--dim2);transition:left .12s ease,background .12s}
.set-x:checked+.sw{background:color-mix(in oklab,var(--accent) 26%,transparent);
  border-color:color-mix(in oklab,var(--accent) 55%,var(--line))}
.set-x:checked+.sw::after{left:21px;background:var(--accent)}
.set-x:focus-visible+.sw{outline:2px solid var(--accent);outline-offset:2px}
.set-row:hover .sw{border-color:color-mix(in oklab,var(--accent) 45%,var(--line))}
.set-g{min-width:0}
.set-goal{background:var(--bg2);border:1px solid var(--line);padding:5px 8px;
  font-size:11px;color:var(--dim);outline:none;cursor:pointer}
.set-goal:hover,.set-goal:focus{border-color:color-mix(in oklab,var(--accent) 45%,var(--line));color:var(--fg)}
.set-goal option{background:var(--card);color:var(--fg)}
.set-n{margin-left:auto;font-size:10.5px;letter-spacing:.06em;color:var(--dim2)}
.set-btns{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}
.hid{display:none !important}

/* ---- patch art -----------------------------------------------------------
   --key and --key2 come from the patch's index.md theme, so the isle a
   patch is set on colours its own pages. Gold stays gold: it means "reward".
   Everything below no-ops on a patch with no theme and no art. */
/* The stage has no picture in it: an aurora mesh in the patch's two colours,
   a fine diagonal weave for structure, and turbulence grain so nothing is a
   flat fill. All of it follows --key, so each patch gets its own sky. */
.stage{position:relative;overflow:hidden;margin-bottom:-1px;isolation:isolate;padding:24px 0 40px;
  background:
    repeating-linear-gradient(114deg,transparent 0 24px,color-mix(in oklab,var(--key) 8%,transparent) 24px 25px),
    radial-gradient(96% 86% at 6% 88%,color-mix(in oklab,var(--key) 46%,transparent),transparent 64%),
    radial-gradient(74% 82% at 72% 6%,color-mix(in oklab,var(--key2) 44%,transparent),transparent 66%),
    radial-gradient(52% 88% at 40% 102%,color-mix(in oklab,var(--accent) 20%,transparent),transparent 58%),
    radial-gradient(60% 70% at 92% 78%,color-mix(in oklab,var(--key) 26%,transparent),transparent 62%),
    linear-gradient(180deg,#0d121c 0%,#080a10 100%)}
.stage::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;opacity:.5;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.05'/%3E%3C/svg%3E")}

/* Nine arcs, one per vault slot; the ones you have earned burn gold. */
.vring{position:absolute;right:52px;top:50%;transform:translateY(-50%);
  width:148px;height:148px;z-index:1;pointer-events:none}
.vr-o{fill:none;stroke:color-mix(in oklab,var(--key) 20%,transparent);stroke-width:.7}
.vr-s{fill:none;stroke:color-mix(in oklab,var(--key) 30%,transparent);stroke-width:5.5;stroke-linecap:round;
  transition:stroke .3s}
.vr-s.on{stroke:color-mix(in oklab,var(--accent) 78%,transparent);
  filter:drop-shadow(0 0 6px color-mix(in oklab,var(--accent) 45%,transparent))}
.stage>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.stage .scrim{position:absolute;inset:0;background:
  linear-gradient(180deg,color-mix(in oklab,var(--bg) 58%,transparent) 0%,color-mix(in oklab,var(--bg) 6%,transparent) 30%,color-mix(in oklab,var(--bg) 52%,transparent) 66%,var(--bg) 100%),
  radial-gradient(90% 74% at 16% 82%,color-mix(in oklab,var(--bg) 80%,transparent),transparent 72%),
  radial-gradient(70% 90% at 86% 6%,color-mix(in oklab,var(--key) 12%,transparent),transparent 70%)}
.stage-in{position:relative;z-index:2}
.st{display:flex;align-items:flex-end;gap:30px;flex-wrap:wrap}
.st-l{display:flex;flex-direction:column;gap:6px;min-width:0}
.st-n{display:flex;align-items:flex-end;gap:14px}
.st-big{font-size:clamp(48px,6.4vw,72px);line-height:.86;font-weight:700;letter-spacing:-.045em;
  margin:2px 0 0;background:linear-gradient(172deg,#fff6e2 0%,#e9c883 46%,#b98f36 100%);
  -webkit-background-clip:text;background-clip:text;color:#e9c883;-webkit-text-fill-color:transparent}
.st-big i{font-style:normal;font-size:.44em;-webkit-text-fill-color:var(--dim2);color:var(--dim2)}
.st-cap{margin:0 0 9px;font-size:16.5px;color:var(--fg)}
.st-cap b{color:var(--accent);font-weight:600}
.st-c{display:flex;gap:8px;flex-wrap:wrap;padding-bottom:5px}
.st-chip{display:flex;align-items:baseline;gap:7px;border:1px solid color-mix(in oklab,var(--accent) 34%,transparent);
  background:color-mix(in oklab,var(--accent) 10%,transparent);padding:7px 12px;backdrop-filter:blur(6px)}
.st-chip .k{font-family:'IBM Plex Mono',monospace;font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}
.st-chip .v{font-family:'IBM Plex Mono',monospace;font-size:14px;color:var(--accent)}
.st-chip.q{border-color:var(--line);background:color-mix(in oklab,var(--bg2) 72%,transparent)}
.st-chip.q .v{color:var(--fg)}
.stage .hdr-sub{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--dim)}
.has-stage .hdr{transition:background .18s,border-color .18s}
.has-stage .hdr.ontop{background:transparent;backdrop-filter:none;border-bottom-color:transparent}
.has-stage .main{padding-top:30px}

.orn{display:flex;align-items:center;gap:16px;margin:0 0 14px}
.orn span{flex:1 1 auto;height:1px}
.orn .l{background:linear-gradient(90deg,transparent,color-mix(in oklab,var(--key) 46%,transparent))}
.orn .r{background:linear-gradient(270deg,transparent,color-mix(in oklab,var(--key) 46%,transparent))}
.orn svg{flex:none;color:var(--key)}
/* A section on a content page: a Cinzel heading with a mono qualifier beside it,
   then a hairline. Same rhythm as the checklist's own section heads. */
.sec{display:flex;flex-direction:column;gap:18px}
.sec-h{display:flex;align-items:baseline;justify-content:space-between;gap:14px;flex-wrap:wrap;
  border-bottom:1px solid var(--line);padding-bottom:12px}
.sec-h h2{margin:0;font-size:26px}
.sec-h .mono{font-size:11px}
.sec-t{text-align:center;margin:0 0 3px;font-size:22px;font-weight:600;letter-spacing:-.02em}
.sec-s{text-align:center;margin:0 0 20px;color:var(--dim);font-size:14px}

/* A vault card with art behind it: the scrim, not the card, carries the dark. */
.vcard.art{position:relative;border:1px solid var(--line);padding:0;overflow:hidden;min-height:340px;
  justify-content:flex-end;background:var(--bg2);box-shadow:0 18px 40px -26px #000}
.vcard.art>picture{position:absolute;inset:0;z-index:0}
.vcard.art>picture>img{width:100%;height:100%;object-fit:cover;display:block}
.vcard.art::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,
  color-mix(in oklab,var(--bg) 28%,transparent) 0%,color-mix(in oklab,var(--bg) 74%,transparent) 46%,
  color-mix(in oklab,var(--bg) 96%,transparent) 100%)}
.vcard.art.lit{border-color:color-mix(in oklab,var(--accent) 42%,var(--line));
  box-shadow:0 0 0 1px color-mix(in oklab,var(--accent) 10%,transparent),0 20px 44px -24px color-mix(in oklab,var(--accent) 30%,#000)}
.vcard.art>*{position:relative;z-index:2}
.vcard.art .vc-h{position:absolute;left:15px;right:15px;top:14px;z-index:2}
.vcard.art .vc-t{padding:0 15px}
.vcard.art .wk-ticks{padding:0 15px}
.vcard.art .vc-m{padding:0 15px}
.vcard.art .vc-r{margin:0 15px 13px;border-top-color:color-mix(in oklab,var(--fg) 14%,transparent)}
.vcard.art .wk-n,.vcard.art .wk-w{padding-left:15px;padding-right:15px}
.vcard.art .vc-slot{border-color:color-mix(in oklab,var(--fg) 26%,transparent);
  background:color-mix(in oklab,var(--bg) 55%,transparent)}
.vcard.art .vc-slot.on{background:var(--accent);border-color:var(--accent);
  box-shadow:0 0 10px color-mix(in oklab,var(--accent) 80%,transparent)}
@media(max-width:720px){.stage{padding:18px 0 30px}.orn{gap:10px}
  .set-row{grid-template-columns:minmax(0,1fr) auto 40px}.set-b{display:none}
  .vring{width:150px;height:150px;right:-34px;opacity:.75}}
