/* one theme: dark */
:root{color-scheme:dark;--bg:#15181c;--card:#1d2126;--fg:#e4e6ea;--muted:#9aa3ae;--line:#2d3339;--accent:#5fb3c2;
--acc:#e6c25e;--edge:100%;--fp:#66d9e8;--hs:#b197fc;--food:#ff985c;--fire:#fac51c;--bag:#91a7ff;--done:#62d184;--do:#6fb0ff;--travel:#9aa8b8;--dng:#be8569;
--lv-bg:#27323d;--lv-fg:#b9c8d8;--note-bg:#232a31;--new:#c49af0;--warn-bg:#401c1f;--warn-fg:#ff7b80;--split-a:#a99bf5;--split-b:#9aa8b8;--split-c:#5fd0bf;--druid:#ff8a2b;--hunter:#5fae4e;--warrior:#c69b6d;--warrior-dark:#b87a45;--paladin:#f48cba;--qtext:#eae6dc;--loc:#bcd9b6;--die:#e58cf5;--nav-w:270px;--bar-h:44px}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}

/* sidebar */
nav{position:fixed;top:0;left:0;bottom:0;width:var(--nav-w);overflow-y:auto;padding:20px 14px;border-right:1px solid var(--line);background:var(--card)}
nav{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--muted) 35%,transparent) transparent}
nav:hover{scrollbar-color:color-mix(in srgb,var(--muted) 65%,transparent) transparent}
nav .title{font-weight:700;margin:0 0 4px;font-size:15px}
nav .docs{margin:0 0 12px;font-size:12px;color:var(--muted)}
nav .docs a{display:inline;padding:0;color:var(--accent)}
nav a{display:block;color:var(--muted);text-decoration:none;font-size:13px;padding:4px 8px;border-radius:6px;border-left:3px solid transparent}
nav a:hover{background:var(--note-bg);color:var(--fg)}
nav a.h1{color:var(--fg);font-weight:700;margin-top:10px}
/* the doc's top-level parts (h1.part): bigger sidebar links */
nav a.part{margin-top:18px;font-size:15px;color:var(--accent)}
nav a.h3{padding-left:20px}
/* phase links: <span class=pn>9</span><span class=pz>STV north, Swamp</span><span class=pl>33.9–36.6</span> (built by app.js from data-nav) */
nav a.phase{display:flex;align-items:baseline;gap:6px}
nav a.phase .pn{flex:none;box-sizing:border-box;min-width:2.2em;padding:0 3px;border-radius:4px;background:color-mix(in srgb,var(--muted) 14%,transparent);color:var(--muted);font-size:11px;line-height:1.6;text-align:center;font-variant-numeric:tabular-nums}
nav a.phase .pz{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
nav a.phase .pl{flex:none;font-size:11px;font-variant-numeric:tabular-nums;color:var(--muted);opacity:.8}
nav a.in{color:var(--accent)}
nav a.active{background:var(--note-bg);color:var(--accent);font-weight:700;border-left-color:var(--accent)}

/* floating section header */
main{margin-left:var(--nav-w);max-width:920px;padding:0 40px 80px}
.bar{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:12px;min-height:var(--bar-h);
margin:0 -40px;padding:8px 40px;background:var(--bg);border-bottom:1px solid transparent;transition:border-color .15s}
.bar.on{border-bottom-color:var(--line)}
.crumb{flex:1;min-width:0;font-size:14px;font-weight:700;color:var(--accent);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.crumb .up{color:var(--muted);font-weight:400}

/* content */
h1{font-size:22px;margin:48px 0 8px;padding-top:16px;border-top:3px solid var(--accent);color:var(--accent)}
/* route parts (Route 11–32, Route 32–60): a little bigger than other h1s */
h1.route{font-size:26px;margin-top:64px;padding-top:18px;border-top-width:4px}
h1.doc-title{font-size:24px;margin:12px 0 20px;padding:0;border:0;color:var(--fg)}
h2{font-size:19px;color:var(--accent);margin:40px 0 10px;padding-top:12px;border-top:1px solid var(--line)}
/* phase headings: <h2 data-nav><span class=ph-k><span class=ph-n>Phase 9</span><span class=ph-sep> · </span><span class=ph-lv>33.9 → 36.6</span></span><span class=ph-sep> · </span><span class=ph-t>…</span></h2>
   The hidden " · " keeps the plain text "Phase 9 · 33.9 → 36.6 · …" for the sidebar, the floating header and pandoc. */
h2[data-nav] .ph-sep{display:none}
h2[data-nav] .ph-k{display:flex;align-items:center;gap:8px;margin-bottom:4px;font-size:13.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
h2[data-nav] .ph-lv{padding:1px 6px;border-radius:4px;background:var(--lv-bg);color:var(--lv-fg);letter-spacing:0;text-transform:none;font-variant-numeric:tabular-nums;white-space:nowrap}
h2[data-nav] .ph-lv::before{content:"Lv "}
h2[data-nav] .ph-t{display:block;font-size:18px;line-height:1.3}
/* zones the phase goes through, right under the phase heading: <p class="ph-route"><span>Duskwood</span> → <span>Westfall</span></p> */
p.ph-route{margin:0 0 4px;color:var(--muted);font-size:13px;line-height:1.5}
p.ph-route span{white-space:nowrap}
h3{font-size:16px;margin:28px 0 8px}
h1,h2,h3,.check.dungeon{scroll-margin-top:calc(var(--bar-h) + 8px)}
p{margin:6px 0}
ul{margin:4px 0 8px;padding-left:22px}
li{margin:2px 0}
li>p{margin:2px 0}
img{max-width:100%;height:auto!important}
del{color:var(--muted)}
table{border-collapse:collapse;width:100%;margin:10px 0;font-size:14px;display:block;overflow-x:auto}
th,td{border:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}
th{background:var(--note-bg)}
p.step{display:grid;grid-template-columns:2.4em 1fr;gap:0 6px;margin:0;padding:5px 8px;border-radius:6px}
p.step:nth-of-type(even){background:color-mix(in srgb,var(--note-bg) 55%,transparent)}
p.step .n{color:var(--muted);font-size:12px;text-align:right;padding-top:2px;font-variant-numeric:tabular-nums}
p.step .body{min-width:0}
/* split steps: <p class="step split-a|split-b|split-c"> + <span class="who">Tyno, Tero</span> */
p.step.split-a{--who:var(--split-a)}
p.step.split-b{--who:var(--split-b)}
p.step.split-c{--who:var(--split-c)}
/* a split step for one player: that player's class colour (set by app.js from the who label) */
p.step.cls-druid{--who:var(--druid)}
p.step.cls-hunter{--who:var(--hunter)}
p.step.cls-warrior{--who:var(--warrior)}
p.step.cls-warrior-dark{--who:var(--warrior-dark)}
p.step.cls-paladin{--who:var(--paladin)}
/* player picker in the bar (built by app.js): All, then one button per player with a dot in their
   class colour; the pressed one is filled with it. Split steps for other players are hidden. */
p.step.not-mine{display:none}
.player-pick{flex:none;display:flex;gap:2px;padding:2px;background:var(--card);border:1px solid var(--line);border-radius:999px}
.player-pick button{--pc:var(--accent);display:inline-flex;align-items:center;gap:5px;border:0;border-radius:999px;background:none;color:var(--muted);
font:inherit;font-size:12px;font-weight:700;line-height:1;padding:5px 10px;cursor:pointer;transition:background-color .12s,color .12s}
.player-pick button.cls-druid{--pc:var(--druid)}
.player-pick button.cls-hunter{--pc:var(--hunter)}
.player-pick button.cls-warrior{--pc:var(--warrior)}
.player-pick button.cls-warrior-dark{--pc:var(--warrior-dark)}
.player-pick button.cls-paladin{--pc:var(--paladin)}
.player-pick button[class]::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--pc)}
.player-pick button:hover{color:var(--fg);background:color-mix(in srgb,var(--pc) 10%,transparent)}
.player-pick button:focus-visible{outline:2px solid var(--pc);outline-offset:1px}
.player-pick button[aria-pressed="true"]{color:var(--pc);background:color-mix(in srgb,var(--pc) 20%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--pc) 45%,transparent)}
p.step[class*="split-"]{border-radius:0 6px 6px 0;box-shadow:inset 3px 0 0 var(--who);background:color-mix(in srgb,var(--who) 8%,transparent)}
.who{color:var(--who);background:color-mix(in srgb,var(--who) 16%,transparent);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:1px 6px;border-radius:4px;white-space:nowrap}
/* sub-note under a step: <span class="sub">text</span> at the end of .body */
p.step .sub{display:block;position:relative;margin-top:2px;padding-left:14px;color:var(--muted);font-size:14px}
p.step .sub::before{content:"";position:absolute;left:3px;top:.3em;width:6px;height:.55em;border-left:1.5px solid currentColor;border-bottom:1.5px solid currentColor;border-bottom-left-radius:2px;opacity:.7}
/* checklist in a compound step: one <span class="li"> per quest after the lead text (hanging indent) */
p.step .li{display:block;margin-top:3px;padding-left:1.6em;text-indent:-1.1em}
p.step .li *{text-indent:0}
/* place name at the start of a step: <strong class="loc">Darkshire:</strong> */
strong.loc{color:var(--loc)}
/* optional step: <p class="step optional"> + <span class="opt">Optional</span> */
.opt{display:inline-block;color:var(--muted);border:1px dashed currentColor;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;line-height:1.3;padding:0 5px;border-radius:4px;vertical-align:.1em}
p.step.optional{border-left:2px dashed color-mix(in srgb,var(--muted) 60%,transparent);padding-left:6px;border-radius:0 6px 6px 0}
/* phase intro under the heading */
p.intro{color:var(--muted);font-size:14px;margin:2px 0 10px}
p.intro strong{color:var(--fg)}
blockquote{margin:12px 0;padding:8px 14px;background:var(--note-bg);border-left:3px solid var(--accent);border-radius:0 6px 6px 0}
blockquote p{margin:4px 0}
/* accept / turn in: the source keeps ☐ and ✔ (for pandoc/Word); the page shows an amber "!" and a green "?" */
.acc,.done{font-size:0;display:inline-block;vertical-align:-.12em;margin:0 1px}
.acc{--q:var(--acc);border:1.5px solid var(--acc);border-radius:5px;padding:0 3px;min-width:18px;text-align:center}  /* gold ! in a rounded gold box */
.done{--q:var(--acc);border:1.5px solid var(--done);border-radius:5px;padding:0 3px;min-width:18px;text-align:center}  /* gold ? in a rounded green box */
.acc::before,.done::before{--o:color-mix(in srgb,color-mix(in srgb,var(--q) 35%,#000) var(--edge),transparent);font:900 18px/1 Georgia,"Times New Roman",serif;color:var(--q);
text-shadow:1px 0 0 var(--o),-1px 0 0 var(--o),0 1px 0 var(--o),0 -1px 0 var(--o),1px 1px 0 var(--o),-1px 1px 0 var(--o),1px -1px 0 var(--o),-1px -1px 0 var(--o)}
.acc::before{content:"!"}
.done::before{content:"?"}
/* quest name: <span class="q">The Night Watch</span>. Bold, light cream. */
.q{color:var(--qtext);font-weight:650}
.do{color:var(--do);font-weight:700}
.travel{color:var(--travel);font-weight:700}
.train{color:var(--accent);font-weight:700}
/* death as travel: a step of its own that starts with <span class="die">Die</span> and respawn at the Spirit Healer; the step number takes its colour */
.die{color:var(--die);font-weight:700;white-space:nowrap}
.die::before{content:"";display:inline-block;width:1.1em;height:1.1em;margin-right:3px;vertical-align:-.18em;background:var(--die);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 .6a5.3 5.3 0 0 0-5.3 5.3c0 1.8.8 3.1 2 3.9v1.7h6.6V9.8c1.2-.8 2-2.1 2-3.9A5.3 5.3 0 0 0 8 .6zM5.9 4.9a1.3 1.3 0 1 1 0 2.6 1.3 1.3 0 0 1 0-2.6zm4.2 0a1.3 1.3 0 1 1 0 2.6 1.3 1.3 0 0 1 0-2.6zM8 7.9l.8 1.4H7.2z'/%3E%3Cpath d='M2.4 12.2l11.2 3.3M13.6 12.2L2.4 15.5' stroke='black' stroke-width='1.7' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 .6a5.3 5.3 0 0 0-5.3 5.3c0 1.8.8 3.1 2 3.9v1.7h6.6V9.8c1.2-.8 2-2.1 2-3.9A5.3 5.3 0 0 0 8 .6zM5.9 4.9a1.3 1.3 0 1 1 0 2.6 1.3 1.3 0 0 1 0-2.6zm4.2 0a1.3 1.3 0 1 1 0 2.6 1.3 1.3 0 0 1 0-2.6zM8 7.9l.8 1.4H7.2z'/%3E%3Cpath d='M2.4 12.2l11.2 3.3M13.6 12.2L2.4 15.5' stroke='black' stroke-width='1.7' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat}
p.step:has(.die) .n{color:var(--die);font-weight:700;white-space:nowrap}
.dng{color:var(--dng);font-weight:700;font-size:12px}
/* NEW: quest new in Forever (not in Classic). Kept in the markup as a record, not shown */
.new{display:none}
/* warning: <span class="warn">text</span>, at the end of a step's body (before a sub note) */
.warn{background:var(--warn-bg);color:var(--warn-fg);font-weight:600;padding:1px 6px 1px 4px;border-radius:4px;-webkit-box-decoration-break:clone;box-decoration-break:clone}
/* in a step or intro the warning is its own line at the end, with the icon hanging on the left */
p.step .warn,p.intro .warn{display:flex;align-items:flex-start;gap:5px;width:fit-content;max-width:100%;margin:4px 0 1px;padding:2px 8px 2px 6px;font-size:14px;border-left:2px solid currentColor;border-radius:0 4px 4px 0}
p.intro .warn{margin:0 0 4px}
p.step .warn::before,p.intro .warn::before{flex:none;margin:.2em 0 0}
p.step:has(.warn) .n{color:var(--warn-fg);font-weight:700}
.warn::before{content:"";display:inline-block;width:1em;height:1em;margin-right:4px;vertical-align:-.14em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 1.2 15.6 14.6H.4zM7.1 5.6h1.8l-.3 4.9H7.4zM7.1 11.6h1.8v1.7H7.1z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 1.2 15.6 14.6H.4zM7.1 5.6h1.8l-.3 4.9H7.4zM7.1 11.6h1.8v1.7H7.1z'/%3E%3C/svg%3E") center/contain no-repeat}
/* level check: <p class="check"><span class="min"><small>Level</small><b>20</b></span><span>text</span></p> */
.check{display:flex;align-items:center;gap:10px;margin:6px 0;padding:5px 10px 5px 6px;background:var(--lv-bg);color:var(--fg);border-radius:7px}
.check:not(.dungeon):not(.camp){font-size:14.5px}
.check .min{flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:3em;padding:3px 5px;border-radius:6px;background:var(--card);color:var(--lv-fg);line-height:1.05}
.check .min small{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.check .min b{font-size:16px;font-variant-numeric:tabular-nums}
/* learn a flight path: <span class="fp">Flight path</span>; the step number takes its colour */
.fp{color:var(--fp);font-weight:700;white-space:nowrap}
.fp::before{content:"";display:inline-block;width:1.1em;height:1.1em;margin-right:3px;vertical-align:-.18em;background:var(--fp);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cdefs%3E%3Cmask id='m'%3E%3Crect width='64' height='64' fill='white'/%3E%3Cg stroke='black' stroke-linecap='round' fill='none'%3E%3Cpath stroke-width='2' d='M50 8Q35 24 22 50'/%3E%3Cpath stroke-width='2.6' d='M25 10l10 14M17 22l12 11M13 35l12 6M57 15l-16 8M55 27l-18 8M49 39l-17 5'/%3E%3C/g%3E%3C/mask%3E%3C/defs%3E%3Cpath mask='url(%23m)' d='M52 5C35 6 19 18 16 38c-1 7 1 11 5 14 9-1 22-7 28-20 3-8 4-17 3-27z'/%3E%3Cg stroke='black' stroke-linecap='round' fill='none'%3E%3Cpath stroke-width='3.2' d='M22 50Q17 56 11 61'/%3E%3Cpath stroke-width='2.2' d='M19 49q-5 0-8-3M20 52q-5 2-8 0M24 52q3 3 3 7M26 50q5 2 7 5'/%3E%3C/g%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cdefs%3E%3Cmask id='m'%3E%3Crect width='64' height='64' fill='white'/%3E%3Cg stroke='black' stroke-linecap='round' fill='none'%3E%3Cpath stroke-width='2' d='M50 8Q35 24 22 50'/%3E%3Cpath stroke-width='2.6' d='M25 10l10 14M17 22l12 11M13 35l12 6M57 15l-16 8M55 27l-18 8M49 39l-17 5'/%3E%3C/g%3E%3C/mask%3E%3C/defs%3E%3Cpath mask='url(%23m)' d='M52 5C35 6 19 18 16 38c-1 7 1 11 5 14 9-1 22-7 28-20 3-8 4-17 3-27z'/%3E%3Cg stroke='black' stroke-linecap='round' fill='none'%3E%3Cpath stroke-width='3.2' d='M22 50Q17 56 11 61'/%3E%3Cpath stroke-width='2.2' d='M19 49q-5 0-8-3M20 52q-5 2-8 0M24 52q3 3 3 7M26 50q5 2 7 5'/%3E%3C/g%3E%3C/svg%3E") center/contain no-repeat}
p.step:has(.fp) .n{color:var(--fp);font-weight:700;white-space:nowrap}
/* bind hearth: <span class="hs">Bind hearth</span>; the step number takes its colour */
.hs{color:var(--hs);font-weight:700;white-space:nowrap}
/* "hearth to Stormwind": the verb in the same violet, plain: <span class="hearth">hearth</span> */
.hearth{color:var(--hs)}
.hs::before{content:"";display:inline-block;width:1.05em;height:1.05em;margin-right:3px;vertical-align:-.16em;background:var(--hs);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 1.2c3.8 0 6.3 2.7 6.3 6.6 0 4-2.8 7-6.5 7S1.7 11.9 1.7 8C1.7 4.1 4.3 1.2 8 1.2zM8 4.6l2.4 3.4L8 11.4 5.6 8z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 1.2c3.8 0 6.3 2.7 6.3 6.6 0 4-2.8 7-6.5 7S1.7 11.9 1.7 8C1.7 4.1 4.3 1.2 8 1.2zM8 4.6l2.4 3.4L8 11.4 5.6 8z'/%3E%3C/svg%3E") center/contain no-repeat}
p.step:has(.hs) .n{color:var(--hs);font-weight:700;white-space:nowrap}
/* eat buff food (+5% kill XP for 15 min): <span class="food">Eat buff food</span>; the step number takes its colour */
.food{color:var(--food);font-weight:700;white-space:nowrap}
.food::before{content:"";display:inline-block;width:1.05em;height:1.05em;margin-right:3px;vertical-align:-.16em;background:var(--food);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cellipse cx='10' cy='6' rx='5.2' ry='4' transform='rotate(-45 10 6)'/%3E%3Cpath d='M6.8 7.8 8.2 9.2 4.2 13.2 2.8 11.8z'/%3E%3Ccircle cx='2.3' cy='12.3' r='1.35'/%3E%3Ccircle cx='3.7' cy='13.7' r='1.35'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cellipse cx='10' cy='6' rx='5.2' ry='4' transform='rotate(-45 10 6)'/%3E%3Cpath d='M6.8 7.8 8.2 9.2 4.2 13.2 2.8 11.8z'/%3E%3Ccircle cx='2.3' cy='12.3' r='1.35'/%3E%3Ccircle cx='3.7' cy='13.7' r='1.35'/%3E%3C/svg%3E") center/contain no-repeat}
p.step:has(.food) .n{color:var(--food);font-weight:700;white-space:nowrap}
/* campfire: <span class="fire">Campfire</span> in text; campfire check box (before each food step):
   <p class="check camp"><span class="min"><small>Campfire</small></span><span><strong>Buff under 20 min?</strong> Campfire now.</span></p> */
.fire{color:var(--fire);font-weight:700;white-space:nowrap}
.fire::before,.check.camp .min::before{content:"";display:inline-block;width:1.1em;height:1.1em;margin-right:3px;vertical-align:-.18em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 .5c.5 2 1.9 3.1 2.9 4.4 1 1.3 1.4 2.4 1.4 3.5 0 2.4-1.9 3.6-4.3 3.6S3.7 10.8 3.7 8.4c0-1.6.8-2.8 1.7-3.7.1 1 .5 1.8 1.3 2.2C6.4 4.9 6.9 2.3 8 .5zM8.1 6.6c-.3 1.1-1.5 1.7-1.5 3.1 0 .9.6 1.5 1.4 1.5s1.4-.6 1.4-1.5c0-1.1-.9-1.8-1.3-3.1z'/%3E%3Cpath stroke='black' stroke-width='1.7' stroke-linecap='round' d='M2.5 15.1 13.5 12.6M2.5 12.6l11 2.5'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 .5c.5 2 1.9 3.1 2.9 4.4 1 1.3 1.4 2.4 1.4 3.5 0 2.4-1.9 3.6-4.3 3.6S3.7 10.8 3.7 8.4c0-1.6.8-2.8 1.7-3.7.1 1 .5 1.8 1.3 2.2C6.4 4.9 6.9 2.3 8 .5zM8.1 6.6c-.3 1.1-1.5 1.7-1.5 3.1 0 .9.6 1.5 1.4 1.5s1.4-.6 1.4-1.5c0-1.1-.9-1.8-1.3-3.1z'/%3E%3Cpath stroke='black' stroke-width='1.7' stroke-linecap='round' d='M2.5 15.1 13.5 12.6M2.5 12.6l11 2.5'/%3E%3C/svg%3E") center/contain no-repeat}
/* the campfire check is drawn like a step line: the fire in the number column, no box */
.check.camp{display:grid;grid-template-columns:2.4em 1fr;gap:0 6px;align-items:start;margin:0;padding:5px 8px;background:none;border-radius:6px}
.check.camp .min{display:block;min-width:0;padding:2px 0 0;background:none;color:var(--fire);text-align:right;line-height:inherit}
.check.camp .min small{display:none}
.check.camp .min::before{margin:0}
.check.camp strong{color:var(--fire)}
/* sleeping bag: <span class="bag">sleeping bag</span> (indigo, with a sleeper) */
.bag{color:var(--bag);font-weight:700;white-space:nowrap}
.bag::before{content:"";display:inline-block;width:1.15em;height:1.15em;margin-right:3px;vertical-align:-.2em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cdefs%3E%3Cmask id='m'%3E%3Crect width='16' height='16' fill='white'/%3E%3Ccircle cx='3.6' cy='8.6' r='2.8' fill='black'/%3E%3Cpath d='M6.2 10.2h8.6' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/mask%3E%3C/defs%3E%3Crect x='.6' y='11' width='4.8' height='2.6' rx='1.2'/%3E%3Ccircle cx='3.6' cy='8.6' r='2.1'/%3E%3Crect mask='url(%23m)' x='4.4' y='7.4' width='11.2' height='6.2' rx='2.8'/%3E%3Cpath d='M9.4 1.4h2.8L9.4 4.4h2.8M13.2 .9h1.8l-1.8 2h1.8' fill='none' stroke='black' stroke-width='1.1' stroke-linejoin='round' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cdefs%3E%3Cmask id='m'%3E%3Crect width='16' height='16' fill='white'/%3E%3Ccircle cx='3.6' cy='8.6' r='2.8' fill='black'/%3E%3Cpath d='M6.2 10.2h8.6' stroke='black' stroke-width='1.1' stroke-linecap='round'/%3E%3C/mask%3E%3C/defs%3E%3Crect x='.6' y='11' width='4.8' height='2.6' rx='1.2'/%3E%3Ccircle cx='3.6' cy='8.6' r='2.1'/%3E%3Crect mask='url(%23m)' x='4.4' y='7.4' width='11.2' height='6.2' rx='2.8'/%3E%3Cpath d='M9.4 1.4h2.8L9.4 4.4h2.8M13.2 .9h1.8l-1.8 2h1.8' fill='none' stroke='black' stroke-width='1.1' stroke-linejoin='round' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat}
/* dungeon run: a card with the banner as its header, then the campfire check, food and the steps inside:
   <section class="dng-run">
   <p class="check dungeon"><span class="min"><small>Dungeon</small></span><span><strong>The Deadmines</strong></span></p>
   <p class="check camp">…</p> <p class="step">…</p>
   </section> */
.dng-run{--dng-edge:color-mix(in srgb,var(--dng) 35%,var(--line));margin:18px 0 14px;padding:0 6px 6px;background:var(--card);border:1px solid var(--dng-edge);border-radius:10px;box-shadow:0 1px 3px color-mix(in srgb,#000 8%,transparent)}
.dng-run>.check.dungeon{margin:0 -6px 4px;border-radius:9px 9px 0 0;border-bottom:1px solid var(--dng-edge)}
.check.dungeon{gap:8px;margin:14px 0 2px;padding:6px 14px 6px 12px;background:var(--note-bg);border-radius:6px}
.check.dungeon .min{flex-direction:row;gap:4px;min-width:0;padding:0;background:none;color:var(--dng);line-height:inherit}
.check.dungeon .min::before,nav a.dng::before{content:"";display:inline-block;width:1.1em;height:1.1em;margin:0;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M.6 15.5 1.6 7.4 3.4 5.9 5.2 6.1 6.1 4 9.9 3.6 12.3 4.3 13.3 7.1 14.9 7.8 15.4 15.5zM4.6 15.5V8.6h6.8v6.9z'/%3E%3Cpath d='M4.9 8.9h6.2v1.4H4.9zM5.5 10.3h1.2v5.2H5.5zM9.3 10.3h1.2v5.2H9.3z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M.6 15.5 1.6 7.4 3.4 5.9 5.2 6.1 6.1 4 9.9 3.6 12.3 4.3 13.3 7.1 14.9 7.8 15.4 15.5zM4.6 15.5V8.6h6.8v6.9z'/%3E%3Cpath d='M4.9 8.9h6.2v1.4H4.9zM5.5 10.3h1.2v5.2H5.5zM9.3 10.3h1.2v5.2H9.3z'/%3E%3C/svg%3E") center/contain no-repeat}
.check.dungeon .min{gap:6px}
.check.dungeon .min::before{width:1.45em;height:1.45em}
.check.dungeon strong{color:var(--fg)}
/* phase start card: <section class="ph-card"> phase heading, zone line, intro, <p class="ph-log"></p> </section>.
   app.js fills .ph-log with the quests still open when the phase starts (from the ☐ / ✔ markers). */
.ph-card{margin:40px -18px 14px;padding:12px 15px 10px;background:var(--note-bg);border-left:3px solid var(--accent);border-radius:0 8px 8px 0}
.ph-card>h2{margin:0 0 6px;padding:0;border:0;scroll-margin-top:calc(var(--bar-h) + 20px)}
.ph-card p.intro{margin:4px 0}
.ph-log{display:flex;gap:10px;align-items:baseline;margin:6px 0 0;padding-top:6px;border-top:1px dashed var(--line);font-size:14px;line-height:1.6}
.ph-log:empty{display:none}
.ph-log .lbl{flex:none;color:var(--accent);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.ph-log .lbl b{display:inline-block;min-width:1.5em;margin-left:3px;padding:0 4px;border-radius:4px;background:color-mix(in srgb,var(--accent) 14%,transparent);text-align:center;font-variant-numeric:tabular-nums}
.ph-log .sep,.ph-log .none,.ph-log .opt-tag{color:var(--muted)}
.ph-log .q{white-space:nowrap}
/* Phase 0 start picker: <p class="start-pick"><button data-start="nelf">…</button>…</p>.
   Each start is <div class="start" data-for="nelf|dwarf">; app.js sets root data-start and hides the other one. */
:root[data-start="nelf"] .start[data-for="dwarf"],:root[data-start="dwarf"] .start[data-for="nelf"]{display:none}
.start-pick{display:inline-flex;margin:8px 0 2px;border:1px solid var(--line);border-radius:7px;overflow:hidden}
.start-pick button{border:0;background:none;color:var(--muted);font:inherit;font-size:13px;font-weight:700;padding:4px 14px;cursor:pointer}
.start-pick button+button{border-left:1px solid var(--line)}
.start-pick button[aria-pressed="true"]{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)}
/* leg label inside a phase: <p class="leg">1–6 · Shadowglen</p> */
p.leg{margin:18px 0 6px;color:var(--muted);font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
/* quest list under the banner: <p class="dng-quests"><span class="lbl">Quests <b>5</b></span><span>names, split by <span class="sep">·</span></span></p> */
.dng-quests{display:flex;gap:10px;align-items:baseline;margin:0 0 4px;padding:4px 8px 8px;border-bottom:1px dashed var(--line);font-size:14px;line-height:1.6}
.dng-quests .lbl{flex:none;color:var(--dng);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}
.dng-quests .lbl b{display:inline-block;min-width:1.5em;margin-left:3px;padding:0 4px;border-radius:4px;background:color-mix(in srgb,var(--dng) 14%,transparent);text-align:center;font-variant-numeric:tabular-nums}
.dng-quests .sep{color:var(--muted);margin:0 2px}
.dng-quests .q{white-space:nowrap}
.check.dungeon .note{color:var(--muted);font-size:14px;margin-left:6px}
nav a.dng{padding-left:38px;font-size:12px;font-weight:400;color:var(--muted)}
nav a.dng:hover{color:var(--fg)}
nav a.dng::before{width:1.1em;height:1.1em;margin:0 4px 0 0;vertical-align:-.18em;background:var(--dng)}
.lv{background:var(--lv-bg);color:var(--lv-fg);font-weight:700;font-size:12px;padding:1px 6px;border-radius:4px;white-space:nowrap}

@media (max-width:900px){
nav{position:static;width:auto;max-height:40vh;border-right:0;border-bottom:1px solid var(--line)}
main{margin-left:0;padding:0 16px 60px}
.bar{margin:0 -16px;padding:8px 16px;flex-wrap:wrap;row-gap:6px}
.crumb{flex-basis:100%}
.player-pick{flex:1 1 100%;justify-content:space-between}
.player-pick button{flex:1;justify-content:center;padding:6px 4px}
.ph-card{margin-left:-10px;margin-right:-10px}
.ph-log{flex-direction:column;gap:2px}}
