:root{--ink:#2b1d12;--parch:#e8dcc0;--parch2:#d9c9a5;--red:#8b1a1a;--gold:#c9a84c;--blue:#4b5d6e;--cover:#4b5d6e;--cover2:#b8a88a}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--cover);color:var(--ink);font-family:Georgia,'Palatino Linotype',Palatino,'Book Antiqua',serif;overscroll-behavior:none}
body{background:var(--cover) repeating-linear-gradient(45deg,rgba(0,0,0,.08) 0 2px,transparent 2px 7px)}
#app{max-width:560px;margin:0 auto;min-height:100%;height:100dvh;background:var(--parch);display:flex;flex-direction:column;padding:8px 10px calc(8px + env(safe-area-inset-bottom));overflow-y:auto;border-left:3px solid var(--ink);border-right:3px solid var(--ink);
 background-image:radial-gradient(rgba(110,91,58,.10) 1px,transparent 1px);background-size:5px 5px;box-shadow:0 0 0 6px var(--cover2)}
h1,.vh1,h2,h3{font-variant:small-caps;letter-spacing:.06em;margin:.3em 0}
.vh1{display:block;font-weight:bold}
h1,.vh1{font-size:2.6rem;text-align:center;margin:.2em 0 0;letter-spacing:.14em;text-shadow:2px 2px 0 var(--parch2)}
h3{font-size:1.05rem;border-bottom:1.5px solid var(--ink);padding-bottom:2px}
small{display:block;font-size:.78rem;opacity:.85}
.small{font-size:.8rem}.center{text-align:center}
.flav{font-style:italic;opacity:.9;margin:.4em 0}
.btn{font-family:inherit;font-size:1rem;background:var(--parch);color:var(--ink);border:2px solid var(--ink);padding:.55em 1em;margin:4px;cursor:pointer;box-shadow:3px 3px 0 var(--ink);transition:transform .06s,box-shadow .06s;font-variant:small-caps;letter-spacing:.05em;min-height:44px}
.btn:hover{background:#f1e7cf}.btn:active{transform:translate(3px,3px);box-shadow:0 0 0 var(--ink)}
.btn.primary{background:var(--ink);color:var(--parch)}.btn.primary:hover{background:#4a3524}
.btn.small{font-size:.85rem;padding:.3em .7em;min-height:36px;box-shadow:2px 2px 0 var(--ink)}
.btn.big{font-size:1.25rem;width:100%}
.btn.danger{border-color:var(--red);color:var(--red);box-shadow:3px 3px 0 var(--red)}
.btn.dis,.btn:disabled{opacity:.45}
.icon-btn{font-family:inherit;background:none;border:1.5px solid var(--ink);padding:4px 8px;cursor:pointer;font-size:.8rem;color:var(--ink);min-height:32px}
.title-wrap{display:flex;flex-direction:column;align-items:center;gap:4px;padding-top:6px}
.title-art{width:100%;border:3px solid var(--ink);box-shadow:4px 4px 0 var(--ink)}
.subtitle{font-style:italic;font-size:1.1rem;margin-top:-4px}
.title-btns{display:flex;flex-direction:column;width:100%;max-width:340px;margin-top:8px}
.title-foot{display:flex;justify-content:space-between;align-items:center;width:100%;margin-top:12px;gap:6px;flex-wrap:wrap}
.cur{display:flex;gap:8px;align-items:center;font-size:.85rem;flex-wrap:wrap}
.cur span{border:1.5px solid var(--ink);padding:2px 6px;background:var(--parch2)}
.cur .ink{background:#d8cfe0}.cur .vg{background:#cfdbe6}.cur .gold{background:#ecd9a0}
.hub-top{display:flex;align-items:center;justify-content:space-between;gap:6px;flex-wrap:wrap}
.tabs{display:flex;flex-wrap:wrap;gap:3px;margin:6px 0;border-bottom:2px solid var(--ink)}
.tab{font-family:inherit;font-variant:small-caps;background:var(--parch2);border:1.5px solid var(--ink);border-bottom:none;padding:6px 9px;cursor:pointer;font-size:.88rem;color:var(--ink);min-height:38px}
.tab.on{background:var(--ink);color:var(--parch)}
.card{border:2px solid var(--ink);padding:8px 10px;margin:8px 0;background:rgba(255,250,235,.35);box-shadow:3px 3px 0 rgba(43,29,18,.35)}
.card.red{border-color:var(--red)}.card.red h3{color:var(--red);border-color:var(--red)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px}
.unl{border:1.5px solid var(--ink);padding:6px;display:flex;flex-direction:column;gap:3px;background:var(--parch)}
.unl.own{background:#efe6cf}.unl.sil{opacity:.75;background:var(--parch2)}
.unl .btn{align-self:flex-start}.tag{font-size:.75rem;border:1px solid var(--ink);padding:1px 5px;align-self:flex-start}
.list .row{padding:4px 0;border-bottom:1px dashed rgba(43,29,18,.35);font-size:.88rem}
.row.done{}.row:not(.done){opacity:.8}
.hall .tier{font-size:.7rem;border:1px solid;padding:0 4px;margin-right:5px;font-variant:small-caps}
.tier-Legendary .tier{background:var(--gold)}.tier-Epic .tier{background:#cfdbe6}.blunder{color:var(--red)}
.sigil{display:inline-flex;border:2px solid;border-radius:50%;padding:3px;vertical-align:middle;flex:none}
.wall-art,.pool-art{width:100%;border:2px solid var(--ink);touch-action:manipulation}
.pool-msg{min-height:2.6em}
.rar{font-variant:small-caps;font-weight:bold}.rar.r2{color:var(--blue)}.rar.r3{color:var(--red)}
.calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cal{aspect-ratio:1;border:1px solid rgba(43,29,18,.4);position:relative;font-size:.75rem;padding:2px}
.cal.head{border:none;text-align:center;font-weight:bold;aspect-ratio:auto}.cal.empty{border:none}
.cal.today{border:2px solid var(--ink)}
.cal .stamp{position:absolute;inset:18% 14%;border:2.5px solid var(--red);border-radius:50%;transform:rotate(-14deg);opacity:.8}
.cal .stamp::after{content:'';position:absolute;inset:25%;border:1.5px solid var(--red);border-radius:50%}
textarea.code{width:100%;font-family:monospace;font-size:.75rem;background:var(--parch2);border:1.5px solid var(--ink)}
.cover-btn{font-family:inherit;display:flex;align-items:center;gap:6px;border:1.5px solid var(--ink);background:var(--parch);padding:5px;cursor:pointer;color:var(--ink)}
.cover-btn.on{outline:3px solid var(--gold)}
/* setup */
.houses{display:flex;flex-wrap:wrap;gap:5px}
.house{font-family:inherit;display:flex;align-items:center;gap:5px;border:2px solid var(--ink);background:var(--parch);padding:4px 8px 4px 4px;cursor:pointer;color:var(--ink);min-height:44px}
.house.on{background:var(--hc2);color:#f4ead0;box-shadow:3px 3px 0 var(--ink)}
.house-rule{font-size:.9rem}
.offers{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:6px 0}
.offer{font-family:inherit;color:var(--ink);display:flex;gap:6px;align-items:flex-start;text-align:left;border:2px solid var(--ink);background:var(--parch);padding:5px;cursor:pointer;min-height:64px}
.offer.on{background:#efe0b8;box-shadow:inset 0 0 0 3px var(--gold)}
.oinfo{display:flex;flex-direction:column;min-width:0}.oinfo .trait{font-style:italic}
.portrait{border:1.5px solid var(--ink);flex:none;background:var(--parch)}
.depths{display:flex;flex-wrap:wrap;gap:4px}
.depth{font-family:inherit;border:1.5px solid var(--ink);background:var(--parch);padding:5px 8px;cursor:pointer;min-height:38px;color:var(--ink)}
.depth.on{background:var(--ink);color:var(--parch)}
.rules{font-size:.82rem;margin:4px 0;padding-left:18px}
.blackkey{display:block;margin-top:6px;padding:6px;border:2px dashed #1c1a1a;font-variant:small-caps;cursor:pointer}
.blackkey.on{background:#1c1a1a;color:var(--parch)}
.go{margin:6px 0 10px}
/* map */
.mapscreen .mtitle{text-align:center;flex:1;min-width:0}
.mapwrap{flex:1;min-height:300px;display:flex;justify-content:center;border:2px solid var(--ink);background:var(--parch2) repeating-linear-gradient(0deg,transparent 0 23px,rgba(43,29,18,.07) 23px 24px);margin:6px 0}
.mapsvg{width:100%;height:100%;max-height:62vh}
.mnode{cursor:default}.mnode.done{opacity:.55}
.mnode.can{cursor:pointer}.mnode.can circle:first-child{stroke:var(--red);stroke-width:3.5;animation:pulse 1.2s ease-in-out infinite}
.mnode.can:hover circle:first-child{fill:#fff6dc}
.mnode.cur circle:first-child{fill:var(--gold)}
@keyframes pulse{50%{stroke-width:1.5}}
.info{min-height:2.6em;font-size:.86rem;padding:4px 6px;border-left:3px solid var(--ink);background:rgba(255,250,235,.4);margin:4px 0}
.relics{display:flex;flex-wrap:wrap;gap:4px;margin:3px 0}
.relic,.setc,.tagchip{font-size:.74rem;border:1.5px solid var(--ink);padding:1px 6px;cursor:pointer;display:inline-block}
.t-Thorn{background:#c9cfb0}.t-Veil{background:#cfd6e0}.t-Ember{background:#ecc6a8}.cursed{border-color:var(--red)!important;color:var(--red)}
.mheroes{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.hchip{display:flex;gap:5px;border:1.5px solid var(--ink);padding:4px;background:var(--parch);cursor:pointer;min-width:0}
.hchip.dead{opacity:.45;filter:grayscale(1)}
.hpbar{height:6px;border:1px solid var(--ink);background:var(--parch);margin:2px 0;width:100%}
.hpbar i{display:block;height:100%;background:#3f6b3a}.hpbar.gold i{background:var(--gold)}
/* combat */
.combat{gap:4px}
.ctop{display:flex;justify-content:space-between;align-items:center;gap:4px;flex-wrap:wrap}
#cstatus{display:flex;gap:6px;align-items:center;flex-wrap:wrap;font-size:.92rem;flex:1}
.ephase{color:var(--red);font-weight:bold}
.bossbar{position:relative;display:inline-block;width:150px;height:16px;border:1.5px solid var(--ink);background:var(--parch)}
.bossbar i{display:block;height:100%;background:var(--red)}.bossbar em{position:absolute;inset:0;font-size:.66rem;line-height:15px;text-align:center;color:var(--parch);mix-blend-mode:difference;font-style:normal;white-space:nowrap;overflow:hidden}
#boardWrap{flex:1 1 auto;min-height:240px;display:flex;justify-content:center;align-items:center}
#board{touch-action:none;display:block;cursor:pointer}
#cheroes{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}
.hcard{font-family:inherit;color:var(--ink);display:flex;gap:4px;text-align:left;border:2px solid var(--ink);background:var(--parch);padding:3px;cursor:pointer;min-width:0;min-height:48px}
.hcard>div{min-width:0}.hcard b{font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.hcard.on{background:#efe0b8;box-shadow:inset 0 0 0 3px var(--gold)}.hcard.spent{opacity:.65}.hcard.dead{opacity:.35;filter:grayscale(1)}
#cactions{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.skill{font-family:inherit;color:var(--ink);text-align:left;border:2px solid var(--ink);background:var(--parch);padding:5px;cursor:pointer;min-height:54px;box-shadow:2px 2px 0 var(--ink)}
.skill:hover{background:#f1e7cf}.skill.on{background:var(--ink);color:var(--parch)}.skill.dis{opacity:.45;box-shadow:none}
.ctls{grid-column:1/-1;display:grid;grid-template-columns:1fr 2fr;gap:4px}
.ctl{font-family:inherit;font-variant:small-caps;font-size:1rem;border:2px solid var(--ink);background:var(--parch);cursor:pointer;min-height:46px;color:var(--ink);box-shadow:2px 2px 0 var(--ink)}
.ctl.end{background:var(--red);color:var(--parch)}.ctl.dis{opacity:.45}
.ctl.pulse{animation:endp 1s infinite}@keyframes endp{50%{box-shadow:0 0 0 4px var(--gold)}}
.hint{grid-column:1/-1;padding:6px}
#coach:empty{display:none}
.coachbox{border:2.5px solid var(--ink);background:#f4ead0;padding:6px 8px;box-shadow:3px 3px 0 var(--ink);font-size:.9rem}
.coachbox p{margin:.2em 0}
/* modal */
.modal-bg{position:fixed;inset:0;background:rgba(43,29,18,.55);display:flex;align-items:center;justify-content:center;z-index:50;padding:10px;animation:fade .15s}
@keyframes fade{from{opacity:0}}
.modal{background:var(--parch);border:3px solid var(--ink);box-shadow:6px 6px 0 var(--ink);max-width:520px;width:100%;max-height:92dvh;overflow:auto;padding:12px;animation:rise .18s ease-out}
@keyframes rise{from{transform:translateY(14px) rotate(-.6deg)}}
.modal .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:4px;margin-top:8px}
.modal.event .actions{flex-direction:column;align-items:stretch}
.btn.choice{text-align:left;text-transform:none;font-variant:normal}
.picks{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:6px}
.pickc{font-family:inherit;color:var(--ink);text-align:left;border:2px solid var(--ink);background:var(--parch);padding:8px;cursor:pointer;box-shadow:3px 3px 0 var(--ink);min-height:96px;display:flex;flex-direction:column;justify-content:space-between}
.pickc:hover{background:#f6edd5;transform:translate(-1px,-1px)}.pickc.cursed{border-color:var(--red);box-shadow:3px 3px 0 var(--red)}.pickc.sold,.pickc:disabled{opacity:.4;cursor:default;pointer-events:none;transform:none;filter:grayscale(.6)}
.pickc b{display:block;margin:4px 0 2px}
.price{font-weight:bold;margin-top:4px}
.gain{font-weight:bold;color:#3f6b3a}
.curse{color:var(--red);font-weight:bold}
.veil-dot{display:inline-block;width:10px;height:10px;border:1px solid var(--ink);border-radius:50%;margin-right:4px}
.veilart{height:90px;margin:4px auto;width:70px;border-radius:50%;background:var(--vc);border:4px solid var(--vi);box-shadow:inset 0 0 0 8px rgba(232,220,192,.25),inset 0 0 0 16px rgba(43,29,18,.15),inset 0 0 0 24px rgba(232,220,192,.18);animation:vb 2s ease-in-out infinite}
@keyframes vb{50%{transform:scale(1.05)}}
.sheet{display:flex;flex-direction:column;align-items:flex-start}
.endwrap h1,.endwrap .vh1{font-size:2rem}.endwrap h1.red,.endwrap .vh1.red{color:var(--red)}
.goal{display:grid;grid-template-columns:1fr 90px auto;gap:6px;align-items:center;font-size:.86rem;margin:3px 0}
.share{background:var(--parch2);padding:6px;border:1px solid var(--ink);white-space:pre-wrap;font-size:.85rem}
#toasts{position:fixed;left:50%;top:10px;transform:translateX(-50%);z-index:80;display:flex;flex-direction:column;gap:4px;align-items:center;pointer-events:none;width:min(92vw,480px)}
.toast{background:var(--parch);border:2px solid var(--ink);padding:6px 10px;box-shadow:3px 3px 0 var(--ink);font-size:.88rem;transition:opacity .4s,transform .4s;animation:rise .2s}
.toast.red{border-color:var(--red);color:var(--red)}.toast.gold{background:#efe0b8}.toast.out{opacity:0;transform:translateY(-8px)}
/* desktop: wider layout for combat */
@media (min-width:900px) and (min-height:600px){
 #app{max-width:1000px}
 #app.combat{display:grid;grid-template-columns:minmax(0,1fr) 340px;grid-template-rows:auto 1fr auto auto auto;column-gap:12px}
 .combat .ctop{grid-column:1/-1}
 .combat #boardWrap{grid-row:2/6;grid-column:1}
 .combat #cinfo{grid-column:2;grid-row:2;align-self:start}
 .combat #cheroes{grid-column:2;grid-row:3;grid-template-columns:1fr}
 .combat #cactions{grid-column:2;grid-row:4;grid-template-columns:1fr}
 .combat #coach{grid-column:2;grid-row:5}
 #app.title,#app.hub,#app.setup,#app.runend,#app.mapscreen{max-width:760px}
}
/* ---------- v2 ---------- */
html,body{touch-action:manipulation;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}
#app{padding-top:calc(8px + env(safe-area-inset-top));padding-left:calc(10px + env(safe-area-inset-left));padding-right:calc(10px + env(safe-area-inset-right))}
#board{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
button{touch-action:manipulation;min-height:40px}
#app.enter>*:not(#banner):not(#tip):not(.hintbox){animation:vmIn .28s cubic-bezier(.2,.8,.2,1) both}
@keyframes vmIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.modal{animation:vmPop .22s cubic-bezier(.2,.9,.3,1.2) both}
@keyframes vmPop{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}
.phasepill{display:inline-block;font-size:.72rem;letter-spacing:.08em;padding:2px 7px;margin-right:6px;border:2px solid var(--ink);font-weight:bold}
.phasepill.you{background:#3f6b3a;color:#f3ead2}.phasepill.foe{background:var(--red,#8b1a1a);color:#f3ead2}
body.cb .phasepill.foe{background:#d97a00;color:#1b1208}body.cb .phasepill.you{background:#2f5d8a}
#banner{position:fixed;left:50%;top:38%;transform:translate(-50%,-50%) scale(.8);pointer-events:none;opacity:0;z-index:40;font:bold 2rem Georgia,serif;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);background:var(--parch);border:3px solid var(--ink);box-shadow:5px 5px 0 var(--ink);padding:10px 26px;transition:opacity .25s,transform .35s cubic-bezier(.2,.9,.3,1.3)}
#banner.show{opacity:1;transform:translate(-50%,-50%) scale(1)}#banner.foe{color:#8b1a1a}#banner.boss{color:#8b1a1a;font-size:2.3rem}
body.cb #banner.foe{color:#a65400}
.threat{display:block;font-size:.7rem;color:#8b1a1a;font-weight:bold}body.cb .threat{color:#a65400}
.ctl.end.arm{background:#8b1a1a;color:#f3ead2}
.tip{position:fixed;z-index:45;width:220px;background:var(--parch);border:2px solid var(--ink);box-shadow:4px 4px 0 var(--ink);padding:8px 10px;font-size:.82rem;line-height:1.3}
.tip b{display:block;font-size:.95rem;margin-bottom:2px}.tip .tl-w{color:#8b1a1a}.tip .tl-s{margin-top:2px}.tip .tl-t{margin-top:4px;font-style:italic}.tip .tl-x{display:block;margin-top:6px;opacity:.6}
body.cb .tip .tl-w{color:#a65400}
.hintbox{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(12px + env(safe-area-inset-bottom));z-index:50;width:min(92vw,480px);background:#efe0b8;border:2px solid var(--ink);box-shadow:4px 4px 0 var(--ink);padding:8px 10px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:.88rem;animation:vmIn .3s both;transition:opacity .8s}
.hintbox b{font-variant:small-caps;width:100%}.hintbox span{flex:1}.hintbox.fade{opacity:0}
.hint-x{border:2px solid var(--ink);background:var(--parch);font:inherit;padding:4px 10px;cursor:pointer}
.tab.new{position:relative}.tab.new::after{content:'';position:absolute;top:4px;right:4px;width:8px;height:8px;border-radius:50%;background:#8b1a1a}
.toggles{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.toggle{display:flex;align-items:center;gap:8px;border:2px solid var(--ink);background:var(--parch);font:inherit;padding:6px 8px;text-align:left;cursor:pointer}
.toggle .knob{width:28px;height:14px;border:2px solid var(--ink);position:relative;flex:none}.toggle .knob::after{content:'';position:absolute;top:1px;left:1px;width:10px;height:10px;background:var(--ink);transition:left .15s}
.toggle.on .knob{background:#3f6b3a}.toggle.on .knob::after{left:15px;background:#f3ead2}
.mods{display:grid;grid-template-columns:1fr 1fr;gap:6px}.modchip{border:2px solid var(--ink);background:var(--parch);font:inherit;padding:6px;text-align:left;cursor:pointer;display:flex;flex-direction:column}.modchip small{font-size:.72rem}.modchip.on{background:#2b1d12;color:#f3ead2}
.row.locked{opacity:.6}
#cactions{grid-template-columns:repeat(auto-fit,minmax(130px,1fr))}
#cactions .ctls{grid-column:1/-1}
body.large{font-size:118%}body.large .small,body.large small{font-size:.9rem}
body.reduced *,body.reduced *::before,body.reduced *::after{animation:none!important;transition:none!important}
@media (prefers-reduced-motion:reduce){#app.enter>*{animation:none}}
:focus-visible{outline:3px solid #c9a84c;outline-offset:2px}
/* thumb reach: actions pinned at the bottom of the combat column on phones */
@media (max-width:700px){.combat #cactions{position:sticky;bottom:0;background:var(--parch);padding-bottom:4px;z-index:5}.combat #cheroes button{min-height:48px}}
/* phone landscape fallback */
@media (orientation:landscape) and (max-height:520px){
 #app{max-width:none}
 #app.combat{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto 1fr auto auto;column-gap:10px}
 .combat .ctop{grid-column:1/-1}.combat #boardWrap{grid-row:2/5;grid-column:1;height:calc(100dvh - 60px);aspect-ratio:1}
 .combat #cinfo,.combat #cheroes,.combat #cactions,.combat #coach{grid-column:2}
 .combat #cheroes{grid-template-columns:repeat(3,1fr)}
 .title-art{max-height:40vh}
}
body:has(#app.combat) .hintbox{bottom:auto;top:calc(44px + env(safe-area-inset-top))}
#banner{white-space:nowrap}@media (max-width:600px){#banner{font-size:1.5rem;padding:8px 18px}#banner.boss{font-size:1.25rem}}
/* ================= v3 visual identity ================= */
@font-face{font-family:'IM Fell English';src:url(fonts/im-fell-english-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'IM Fell English';font-style:italic;src:url(fonts/im-fell-english-latin-400-italic.woff2) format('woff2');font-display:swap}
@font-face{font-family:'IM Fell English SC';src:url(fonts/im-fell-english-sc-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'EB Garamond';src:url(fonts/eb-garamond-latin-400-normal.woff2) format('woff2');font-display:swap}
@font-face{font-family:'EB Garamond';font-style:italic;src:url(fonts/eb-garamond-latin-400-italic.woff2) format('woff2');font-display:swap}
@font-face{font-family:'EB Garamond';font-weight:600;src:url(fonts/eb-garamond-latin-600-normal.woff2) format('woff2');font-display:swap}
:root{--parch:#ecdfc2;--parch2:#dccaa2;--wash:rgba(176,113,78,.12)}
html,body{font-family:'EB Garamond',Georgia,serif;font-size:17px}
h1,.vh1,h2,h3,.btn,.tab,.subtab,.tier,.phasepill,#banner,.goalribbon .gk,.stampd{font-family:'IM Fell English SC','IM Fell English',Georgia,serif;font-variant:normal}
.flav,i,em{font-family:'IM Fell English',Georgia,serif}
body{background:var(--cover2) radial-gradient(ellipse at 50% 0,rgba(255,255,255,.12),transparent 60%),var(--cover);}
#app{background:var(--parch) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .42 0 0 0 0 .3 0 0 0 0 .17 0 0 0 .13 0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23n)'/%3E%3C/svg%3E");box-shadow:inset 0 0 60px rgba(110,80,40,.28);border-left:4px double var(--ink);border-right:4px double var(--ink)}
/* illuminated cards */
.card{position:relative;background:linear-gradient(rgba(255,250,235,.45),rgba(255,250,235,.25));border:1.5px solid var(--ink);outline:1px solid var(--ink);outline-offset:3px;margin:12px 4px;padding:10px 12px;box-shadow:none}
.card::before,.card::after{content:'';position:absolute;width:14px;height:14px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M7 0L14 7L7 14L0 7Z' fill='%238b1a1a' stroke='%232b1d12'/%3E%3Ccircle cx='7' cy='7' r='2' fill='%23e0b03a'/%3E%3C/svg%3E");}
.card::before{top:-9px;left:-9px}.card::after{bottom:-9px;right:-9px}
.card.illum{background:linear-gradient(rgba(255,250,235,.55),rgba(255,250,235,.3));border-color:var(--ink);outline-color:#8b6914}
h3{font-size:1.18rem;letter-spacing:.04em;border-bottom:none;background:linear-gradient(90deg,var(--ink),var(--ink)) bottom/100% 1px no-repeat,linear-gradient(90deg,var(--ink),var(--ink)) bottom 3px left/100% .5px no-repeat;padding-bottom:6px}
h1,.vh1{font-family:'IM Fell English SC',Georgia,serif;font-variant:normal;letter-spacing:.08em}
.title-h{font-size:3.1rem;margin:.1em 0 0;color:var(--ink);text-shadow:2px 2px 0 rgba(139,26,26,.25)}
.title-h::first-letter{color:#8b1a1a;font-size:1.25em}
.subtitle{font-family:'IM Fell English',Georgia,serif;font-style:italic;font-size:1.1rem}
.title-frame{width:100%;padding:6px;border:2px solid var(--ink);outline:1px solid var(--ink);outline-offset:3px;background:#2b1d12}
.title-art{display:block;border:none;box-shadow:none;aspect-ratio:16/9;height:auto}
.dropcap::first-letter{float:left;font-family:'IM Fell English SC',Georgia,serif;font-size:3.1em;line-height:.85;padding:4px 6px 0 0;margin:2px 6px 0 0;color:#8b1a1a;border:1.5px solid var(--ink);background:#efe0b8;padding:4px 6px 2px}
.btn{box-shadow:3px 3px 0 var(--ink);letter-spacing:.03em}
.btn.primary{background:linear-gradient(#3a281a,#2b1d12);color:#f3e6c6;border-color:#2b1d12;outline:1px solid #8b6914;outline-offset:-4px}
.portrait.medal{border:none;image-rendering:auto}
/* goal ribbon */
.goalribbon{display:grid;grid-template-columns:1fr auto;grid-template-areas:'k k' 'b s' 'g g';gap:1px 8px;width:100%;max-width:460px;margin:8px auto;padding:7px 12px 8px;background:#efe0b8;border:1.5px solid var(--ink);box-shadow:3px 3px 0 var(--ink);cursor:pointer;text-align:left;font:inherit;color:var(--ink);position:relative;clip-path:polygon(0 0,100% 0,97% 50%,100% 100%,0 100%,3% 50%)}
.goalribbon .gk{grid-area:k;font-size:.75rem;letter-spacing:.08em;color:#8b1a1a}.goalribbon b{grid-area:b;font-weight:600}.goalribbon small{grid-area:s;align-self:center}
.goalribbon .gbar{grid-area:g}
.goalribbon.ready{background:#e0b03a;animation:glow 1.6s ease-in-out infinite}
@keyframes glow{50%{filter:brightness(1.12)}}
.gbar{display:block;height:7px;border:1px solid var(--ink);background:var(--parch);margin:3px 0}.gbar i{display:block;height:100%;background:linear-gradient(90deg,#8b6914,#c9a84c)}
/* hub */
.tabs{gap:3px;flex-wrap:wrap}.tab{font-size:.95rem}
.subtabs{display:flex;gap:4px;margin:6px 0}.subtab{flex:1;border:1.5px solid var(--ink);background:var(--parch);padding:6px;cursor:pointer;font-size:.95rem}.subtab.on{background:var(--ink);color:var(--parch)}
.atlas{width:100%;height:auto;aspect-ratio:1;display:block;cursor:pointer;margin:6px 0}
.chapters{display:grid;gap:6px}.chap{display:flex;flex-direction:column;align-items:flex-start;text-align:left;border:1.5px solid var(--ink);background:var(--parch);padding:7px 10px;font:inherit;cursor:pointer}
.chap.locked{opacity:.6;border-style:dashed}.chap.unread{background:#efe0b8;border-color:#8b1a1a}.chap.unread b::after{content:' • new';color:#8b1a1a}
.chapter p{font-size:1.08rem;line-height:1.45}
.contract{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;border-bottom:1px dotted var(--ink);padding:6px 0}.contract.ready b{color:#8b1a1a}.contract.claimed{opacity:.55}
.stampd{border:2px solid #8b1a1a;color:#8b1a1a;padding:2px 8px;transform:rotate(-8deg);font-size:.9rem}
.reprow,.vetrow{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:center;margin:6px 0}
.roster{display:grid;gap:8px}.vet{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;border-bottom:1px dotted var(--ink);padding-bottom:6px}.vet small{display:block}
.offer.vet{border-color:#8b6914;background:#efe0b8}
.reptrack{margin-top:6px}.reptrack small{display:block}
.bannered{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}
.swatches,.charges{display:flex;flex-wrap:wrap;gap:4px;margin:3px 0 8px}
.sw{width:30px;height:30px;min-height:30px;border:2px solid var(--parch);outline:1.5px solid var(--ink);cursor:pointer}.sw.on{outline:3px solid #e0b03a}
.chg{min-width:36px;min-height:36px;border:1.5px solid var(--ink);background:var(--parch);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:2px}.chg.on{background:#efe0b8;outline:2px solid #8b1a1a}.chg.sil{opacity:.45;border-style:dashed}.chg.txt{font:inherit;font-size:.8rem;padding:2px 6px}
.cliff{display:flex;gap:10px;justify-content:center;margin:8px 0}.cliffn{display:flex;flex-direction:column;align-items:center;font-size:.8rem}
.sharecard{width:100%;max-width:360px;display:block;margin:0 auto;border:2px solid var(--ink)}
.modal{background:var(--parch) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3'/%3E%3CfeColorMatrix values='0 0 0 0 .42 0 0 0 0 .3 0 0 0 0 .17 0 0 0 .12 0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E");outline:1px solid var(--ink);outline-offset:-7px}
.modal h2{text-align:center}.modal h2::after{content:'❦';display:block;font-size:1rem;color:#8b1a1a}
/* ink-bleed screen transition */
#app.enter{animation:inkIn .5s cubic-bezier(.2,.8,.2,1) both}
@keyframes inkIn{from{clip-path:circle(8% at 50% 45%);filter:contrast(1.6) sepia(.4)}to{clip-path:circle(120% at 50% 45%);filter:none}}
body.reduced #app.enter{animation:none}
@media (prefers-reduced-motion:reduce){#app.enter{animation:none}}
#board{border:none}
#board{outline:4px solid #2b1d12;box-shadow:6px 6px 0 rgba(43,29,18,.35)}
.hcard{background:linear-gradient(rgba(255,250,235,.5),rgba(255,250,235,.2))}
.skill{font-family:inherit}.skill b{font-family:'IM Fell English SC',Georgia,serif;font-weight:normal;font-size:1rem}
@media (max-width:420px){.title-h{font-size:2.5rem}html,body{font-size:16px}}

/* ===== v4 bespoke hand-inked pass: no clean vector frames ===== */
:root{--inkframe:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20viewBox%3D%270%200%20100%20100%27%20preserveAspectRatio%3D%27none%27%3E%3Cpath%20d%3D%27M3.5%2C3.0%20L12.1%2C2.7%20L19.4%2C3.6%20L25.7%2C4.0%20L33.3%2C3.8%20L41.1%2C2.8%20L49.8%2C5.0%20L56.6%2C3.2%20L65.7%2C5.3%20L73.2%2C3.7%20L82.1%2C2.7%20L89.4%2C3.4%20L95.0%2C2.9%20L95.4%2C12.6%20L95.1%2C19.6%20L96.4%2C26.6%20L96.1%2C33.4%20L94.7%2C41.5%20L96.5%2C49.8%20L95.5%2C57.9%20L95.9%2C64.7%20L96.9%2C73.6%20L95.2%2C80.9%20L96.1%2C89.4%20L96.7%2C95.4%20L89.7%2C94.9%20L80.4%2C96.8%20L72.0%2C96.0%20L64.0%2C96.5%20L58.4%2C96.2%20L51.1%2C95.5%20L42.9%2C96.3%20L34.9%2C95.9%20L28.0%2C97.3%20L19.3%2C96.5%20L10.4%2C96.6%20L4.4%2C97.5%20L4.9%2C87.7%20L3.7%2C81.2%20L2.6%2C72.9%20L3.0%2C64.2%20L2.7%2C58.5%20L2.9%2C49.3%20L3.7%2C43.4%20L2.8%2C34.5%20L4.1%2C28.1%20L4.9%2C20.4%20L3.3%2C11.4Z%27%20fill%3D%27none%27%20stroke%3D%27%232b1d12%27%20stroke-width%3D%272.4%27%20stroke-linejoin%3D%27round%27%20vector-effect%3D%27non-scaling-stroke%27/%3E%3Cpath%20d%3D%27M3.5%2C3.0%20L12.1%2C2.7%20L19.4%2C3.6%20L25.7%2C4.0%20L33.3%2C3.8%20L41.1%2C2.8%20L49.8%2C5.0%20L56.6%2C3.2%20L65.7%2C5.3%20L73.2%2C3.7%20L82.1%2C2.7%20L89.4%2C3.4%20L95.0%2C2.9%20L95.4%2C12.6%20L95.1%2C19.6%20L96.4%2C26.6%20L96.1%2C33.4%20L94.7%2C41.5%20L96.5%2C49.8%20L95.5%2C57.9%20L95.9%2C64.7%20L96.9%2C73.6%20L95.2%2C80.9%20L96.1%2C89.4%20L96.7%2C95.4%20L89.7%2C94.9%20L80.4%2C96.8%20L72.0%2C96.0%20L64.0%2C96.5%20L58.4%2C96.2%20L51.1%2C95.5%20L42.9%2C96.3%20L34.9%2C95.9%20L28.0%2C97.3%20L19.3%2C96.5%20L10.4%2C96.6%20L4.4%2C97.5%20L4.9%2C87.7%20L3.7%2C81.2%20L2.6%2C72.9%20L3.0%2C64.2%20L2.7%2C58.5%20L2.9%2C49.3%20L3.7%2C43.4%20L2.8%2C34.5%20L4.1%2C28.1%20L4.9%2C20.4%20L3.3%2C11.4Z%27%20fill%3D%27none%27%20stroke%3D%27%232b1d12%27%20stroke-opacity%3D%27.35%27%20stroke-width%3D%271%27%20transform%3D%27translate%281.2%20.8%29%27%20vector-effect%3D%27non-scaling-stroke%27/%3E%3C/svg%3E");--inkframe2:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20viewBox%3D%270%200%20100%20100%27%20preserveAspectRatio%3D%27none%27%3E%3Cpath%20d%3D%27M3.4%2C5.7%20L13.7%2C2.5%20L17.9%2C2.8%20L25.8%2C3.9%20L35.1%2C3.0%20L40.1%2C3.6%20L49.4%2C4.3%20L59.7%2C4.8%20L65.4%2C4.5%20L73.8%2C2.0%20L82.4%2C5.2%20L90.0%2C5.3%20L95.5%2C3.6%20L94.2%2C12.3%20L94.1%2C17.4%20L94.7%2C25.5%20L95.3%2C32.7%20L93.8%2C40.8%20L94.2%2C49.4%20L93.9%2C59.3%20L96.5%2C63.8%20L94.9%2C72.3%20L95.4%2C79.0%20L97.5%2C90.5%20L95.8%2C95.9%20L86.5%2C94.2%20L80.0%2C95.0%20L74.5%2C94.5%20L63.2%2C98.0%20L57.8%2C94.4%20L50.2%2C93.9%20L42.5%2C98.1%20L36.3%2C96.9%20L25.9%2C95.4%20L17.9%2C97.2%20L11.8%2C97.2%20L3.2%2C94.8%20L5.4%2C90.5%20L5.6%2C82.0%20L5.4%2C74.1%20L2.8%2C65.4%20L3.4%2C55.6%20L1.9%2C49.0%20L2.9%2C43.2%20L6.0%2C34.4%20L5.9%2C29.2%20L6.0%2C18.7%20L2.8%2C10.5Z%27%20fill%3D%27none%27%20stroke%3D%27%232b1d12%27%20stroke-width%3D%273%27%20stroke-linejoin%3D%27round%27%20vector-effect%3D%27non-scaling-stroke%27/%3E%3Cpath%20d%3D%27M3.4%2C5.7%20L13.7%2C2.5%20L17.9%2C2.8%20L25.8%2C3.9%20L35.1%2C3.0%20L40.1%2C3.6%20L49.4%2C4.3%20L59.7%2C4.8%20L65.4%2C4.5%20L73.8%2C2.0%20L82.4%2C5.2%20L90.0%2C5.3%20L95.5%2C3.6%20L94.2%2C12.3%20L94.1%2C17.4%20L94.7%2C25.5%20L95.3%2C32.7%20L93.8%2C40.8%20L94.2%2C49.4%20L93.9%2C59.3%20L96.5%2C63.8%20L94.9%2C72.3%20L95.4%2C79.0%20L97.5%2C90.5%20L95.8%2C95.9%20L86.5%2C94.2%20L80.0%2C95.0%20L74.5%2C94.5%20L63.2%2C98.0%20L57.8%2C94.4%20L50.2%2C93.9%20L42.5%2C98.1%20L36.3%2C96.9%20L25.9%2C95.4%20L17.9%2C97.2%20L11.8%2C97.2%20L3.2%2C94.8%20L5.4%2C90.5%20L5.6%2C82.0%20L5.4%2C74.1%20L2.8%2C65.4%20L3.4%2C55.6%20L1.9%2C49.0%20L2.9%2C43.2%20L6.0%2C34.4%20L5.9%2C29.2%20L6.0%2C18.7%20L2.8%2C10.5Z%27%20fill%3D%27none%27%20stroke%3D%27%232b1d12%27%20stroke-opacity%3D%27.35%27%20stroke-width%3D%271%27%20transform%3D%27translate%281.2%20.8%29%27%20vector-effect%3D%27non-scaling-stroke%27/%3E%3C/svg%3E");--inkline:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20viewBox%3D%270%200%20100%20100%27%20preserveAspectRatio%3D%27none%27%3E%3Cpath%20d%3D%27M3.4%2C3.5%20L11.9%2C4.7%20L20.0%2C4.0%20L27.3%2C4.6%20L33.9%2C4.3%20L43.1%2C4.5%20L50.5%2C4.0%20L57.1%2C4.5%20L65.0%2C4.6%20L73.9%2C3.8%20L80.5%2C4.8%20L88.7%2C3.4%20L95.3%2C3.4%20L96.7%2C12.2%20L95.3%2C19.9%20L96.9%2C27.3%20L95.7%2C34.8%20L95.3%2C41.4%20L96.9%2C50.3%20L96.0%2C58.5%20L95.9%2C66.0%20L96.6%2C72.5%20L95.5%2C80.3%20L95.5%2C88.5%20L95.6%2C95.9%20L87.7%2C96.8%20L80.4%2C95.9%20L73.2%2C96.7%20L65.2%2C96.8%20L57.7%2C96.1%20L50.0%2C95.1%20L42.2%2C95.4%20L33.8%2C96.6%20L26.4%2C96.0%20L19.7%2C96.1%20L11.3%2C96.0%20L4.1%2C96.5%20L3.3%2C88.4%20L3.5%2C80.3%20L4.5%2C73.0%20L4.1%2C65.8%20L4.8%2C57.6%20L4.2%2C50.0%20L4.0%2C42.7%20L3.9%2C34.7%20L4.0%2C27.8%20L4.4%2C20.0%20L4.8%2C11.2Z%27%20fill%3D%27none%27%20stroke%3D%27%232b1d12%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%20vector-effect%3D%27non-scaling-stroke%27/%3E%3Cpath%20d%3D%27M3.4%2C3.5%20L11.9%2C4.7%20L20.0%2C4.0%20L27.3%2C4.6%20L33.9%2C4.3%20L43.1%2C4.5%20L50.5%2C4.0%20L57.1%2C4.5%20L65.0%2C4.6%20L73.9%2C3.8%20L80.5%2C4.8%20L88.7%2C3.4%20L95.3%2C3.4%20L96.7%2C12.2%20L95.3%2C19.9%20L96.9%2C27.3%20L95.7%2C34.8%20L95.3%2C41.4%20L96.9%2C50.3%20L96.0%2C58.5%20L95.9%2C66.0%20L96.6%2C72.5%20L95.5%2C80.3%20L95.5%2C88.5%20L95.6%2C95.9%20L87.7%2C96.8%20L80.4%2C95.9%20L73.2%2C96.7%20L65.2%2C96.8%20L57.7%2C96.1%20L50.0%2C95.1%20L42.2%2C95.4%20L33.8%2C96.6%20L26.4%2C96.0%20L19.7%2C96.1%20L11.3%2C96.0%20L4.1%2C96.5%20L3.3%2C88.4%20L3.5%2C80.3%20L4.5%2C73.0%20L4.1%2C65.8%20L4.8%2C57.6%20L4.2%2C50.0%20L4.0%2C42.7%20L3.9%2C34.7%20L4.0%2C27.8%20L4.4%2C20.0%20L4.8%2C11.2Z%27%20fill%3D%27none%27%20stroke%3D%27%232b1d12%27%20stroke-opacity%3D%27.35%27%20stroke-width%3D%271%27%20transform%3D%27translate%281.2%20.8%29%27%20vector-effect%3D%27non-scaling-stroke%27/%3E%3C/svg%3E");--vine:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 240 16'%3E%3Cpath d='M2 9 C30 3,50 14,80 8 S130 3,160 9 S210 14,238 7' fill='none' stroke='%232b1d12' stroke-width='1.8' stroke-linecap='round'/%3E%3Cpath d='M14 6 l4 5 l2 -4' fill='%232b1d12'/%3E%3Cpath d='M36 10 l4 -5 l2 4' fill='%232b1d12'/%3E%3Cpath d='M58 6 l4 5 l2 -4' fill='%232b1d12'/%3E%3Cpath d='M80 10 l4 -5 l2 4' fill='%232b1d12'/%3E%3Cpath d='M102 6 l4 5 l2 -4' fill='%232b1d12'/%3E%3Cpath d='M124 10 l4 -5 l2 4' fill='%232b1d12'/%3E%3Cpath d='M146 6 l4 5 l2 -4' fill='%232b1d12'/%3E%3Cpath d='M168 10 l4 -5 l2 4' fill='%232b1d12'/%3E%3Cpath d='M190 6 l4 5 l2 -4' fill='%232b1d12'/%3E%3Cpath d='M212 10 l4 -5 l2 4' fill='%232b1d12'/%3E%3Cellipse cx='26' cy='11' rx='4' ry='2' fill='%233f6b3a' transform='rotate(30 26 11)'/%3E%3Cellipse cx='70' cy='5' rx='4' ry='2' fill='%233f6b3a' transform='rotate(-30 70 5)'/%3E%3Cellipse cx='114' cy='11' rx='4' ry='2' fill='%233f6b3a' transform='rotate(30 114 11)'/%3E%3Cellipse cx='158' cy='5' rx='4' ry='2' fill='%233f6b3a' transform='rotate(-30 158 5)'/%3E%3Cellipse cx='202' cy='11' rx='4' ry='2' fill='%233f6b3a' transform='rotate(30 202 11)'/%3E%3C/svg%3E");--seal:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'%3E%3Cpath d='M20 2 C27 3,31 4,34 9 C39 13,37 20,38 25 C36 32,30 36,24 38 C17 39,10 37,6 32 C2 27,3 20,2 14 C5 8,12 3,20 2Z' fill='%238b1a1a'/%3E%3Ccircle cx='20' cy='20' r='10' fill='none' stroke='%235a0f0f' stroke-width='2'/%3E%3Cpath d='M14 26 L20 12 L26 26 M16 21 H24' stroke='%23e8c9a0' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3Cellipse cx='14' cy='13' rx='4' ry='2' fill='%23ffffff' fill-opacity='.25'/%3E%3C/svg%3E")}

.modal::after,.card.illum::after,.chapterm .modal::after{content:'';position:absolute;right:-10px;top:-12px;width:38px;height:38px;background:var(--seal) center/contain no-repeat;transform:rotate(12deg);filter:drop-shadow(1px 2px 1px rgba(0,0,0,.35));pointer-events:none}
button.btn,.btn{border-radius:3px 6px 4px 7px/6px 3px 7px 4px;box-shadow:2px 3px 0 rgba(43,29,18,.28)}
button.btn:active,.btn:active{transform:translate(1px,2px) rotate(-.3deg);box-shadow:0 1px 0 rgba(43,29,18,.28)}
.card:nth-child(odd){transform:rotate(-.25deg)}.card:nth-child(even){transform:rotate(.2deg)}
h3{position:relative;padding-bottom:12px}
h3::after{content:'';position:absolute;left:0;right:0;bottom:-2px;height:12px;background:var(--vine) left center/auto 100% repeat-x;opacity:.85}
hr,.divider{border:0;height:14px;background:var(--vine) center/auto 100% repeat-x}
.mapwrap.inked{border:0;background:none;flex-direction:column;align-items:center;padding:0}
.mapwrap.inked canvas.routemap{width:100%;max-width:560px;height:auto;cursor:pointer;filter:drop-shadow(2px 4px 6px rgba(43,29,18,.35))}
.roads{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin:6px 0}
.roads b{width:100%;text-align:center;font-family:var(--disp,serif);letter-spacing:.06em}
/* ceremonies */
.ceremony{position:fixed;inset:0;z-index:9000;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle,rgba(20,14,8,.55),rgba(10,6,3,.88));animation:cerIn .3s ease-out}
.ceremony.out{opacity:0;transition:opacity .25s}
.cer-burst{position:absolute;width:min(92vw,600px);height:min(92vw,600px)}
.cer-card{position:relative;max-width:min(86vw,360px);text-align:center;background:var(--parch,#efe3c6);padding:18px 18px 12px;border:9px solid transparent;animation:cerPop .55s cubic-bezier(.2,1.6,.4,1)}
.cer-card h2{margin:6px 0;font-family:var(--disp,serif)}.cer-card p{margin:4px 0 8px}
.cer-kind{font-variant:small-caps;letter-spacing:.12em;color:#8b1a1a}.cer-card small{opacity:.6}
.cer-card canvas,.cer-card img{display:block;margin:6px auto}
.ceremony.chapter .cer-card{animation-delay:.45s;animation-fill-mode:both}
@keyframes cerIn{from{opacity:0}}@keyframes cerPop{from{transform:scale(.4) rotate(-6deg);opacity:0}}
.picks.flip .pickc{animation:flipIn .5s cubic-bezier(.2,1.3,.4,1) both;transform-origin:center;backface-visibility:hidden}
@keyframes flipIn{from{transform:perspective(600px) rotateY(90deg);opacity:0}}
.tomorrow{font-style:italic;opacity:.85}
@media (prefers-reduced-motion:reduce){.ceremony,.cer-card,.picks.flip .pickc{animation:none}}
.mapwrap.inked{flex:1 1 auto;min-height:0;overflow:hidden}
.mapwrap.inked canvas.routemap{width:auto;max-width:100%;max-height:calc(100dvh - 330px);min-height:260px;flex:1 1 auto;object-fit:contain}

/* v5: ink frames drawn per element size (see inkFrames in art2.js) */
.inkf{position:relative;border-color:transparent!important;box-shadow:none}
.inkf>.inkfr{position:absolute;inset:-3px;background:center/100% 100% no-repeat;pointer-events:none;z-index:1;display:block}
.inkf{border-style:solid}
button.btn.inkf{box-shadow:2px 3px 0 rgba(43,29,18,.22)}
.cliffv{width:56px;height:56px}
.roads .btn,.btn{min-height:44px}
@media (pointer:coarse){.btn{min-height:48px}}

#toasts{top:auto;bottom:calc(14px + env(safe-area-inset-bottom))}

/* v5.1 */
.inkf{outline:none!important}
#board,.ctl,.btn,.skill,.offer,button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.ffrow{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%}
.ffbtn{min-width:150px}.ffbtn.on{background:var(--ink);color:var(--parch,#efe3c6)}
.syntag{display:inline-block;margin-top:3px;padding:1px 6px;border:1px dashed var(--ink);border-radius:9px;font-size:.72rem}
.syntag.on{background:#e0b03a33;border-style:solid;font-weight:bold}
.syns{display:flex;flex-wrap:wrap;gap:6px}.syn{border-left:4px solid var(--sc);padding:3px 8px;margin:4px 0;background:rgba(255,250,235,.4)}
.syn.on{background:linear-gradient(90deg,color-mix(in srgb,var(--sc) 22%,transparent),transparent);animation:cerPop .4s}
.syn.off{opacity:.45}.syn b{display:block}
.buildcard details summary{cursor:pointer;margin-top:6px;font-variant:small-caps}
.coachbtns{display:flex;gap:6px;flex-wrap:wrap}

/* v5.1 designer-playtest fixes */
@keyframes vmInC{from{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%,0)}}
.hintbox{animation:vmInC .3s both!important;max-height:min(60vh,420px);overflow:auto;width:min(94vw,480px)!important;box-sizing:border-box}
.hintbox button{flex:0 0 auto}
#banner{animation:none}
.pickc.poor{opacity:.55;filter:grayscale(.7)}.pickc.poor .price{color:#8b1a1a}
.threats{font-size:.8rem;display:none}
@media (min-width:900px){.threats{display:block;margin:6px 0;padding:6px 8px;border-left:3px solid #8b1a1a;background:rgba(255,250,235,.35)}.threats b{display:block;font-variant:small-caps}}
.threats div{margin:2px 0}
.objline{border:2px dashed #8b6914;padding:4px 8px;margin:4px 0;font-size:.85rem;background:rgba(224,176,58,.14)}
.objline.ok{border-style:solid;border-color:#3f6b3a}.objline.bad{border-color:#8b1a1a}
.partyrow{display:flex;gap:8px;flex-wrap:wrap;align-items:center;justify-content:center;margin:6px 0}.partyrow .pm{display:flex;align-items:center;gap:4px;font-size:.8rem}
.offer.on .oinfo b::before{content:'✓ ';color:#3f6b3a}
.legend{text-align:center;opacity:.8;margin:2px 0}
.nextunlock{border:2px solid #8b6914;padding:8px}.nextunlock .gbar{display:block;height:8px;border:1px solid var(--ink);margin:4px 0}.nextunlock .gbar i{display:block;height:100%;background:#c9a84c}
@media (max-width:600px){
 #cactions{position:sticky;bottom:0;z-index:30;background:var(--parch,#efe3c6);padding:6px 4px calc(6px + env(safe-area-inset-bottom));box-shadow:0 -3px 8px rgba(43,29,18,.25)}
 .coachbox p{max-height:3.3em;overflow:hidden;margin:4px 0}.coachbox.open p{max-height:none}
 .coachbox::after{content:'tap for more';font-size:.7rem;opacity:.6}.coachbox.open::after{content:''}
 #cstatus{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .info{font-size:.8rem}
}

/* v5.2 */
@media (min-width:900px) and (min-height:600px){
 #app.combat{grid-template-rows:auto auto auto auto auto auto 1fr}
 .combat #boardWrap{grid-row:2/8}
 .combat #coach{grid-column:2;grid-row:2}
 .combat #cinfo{grid-column:2;grid-row:3}
 .combat #cthreats{grid-column:2;grid-row:4}
 .combat #cheroes{grid-column:2;grid-row:5}
 .combat #cactions{grid-column:2;grid-row:6}
}
body:has(#modal) #cactions,body:has(#ceremony) #cactions,body:has(#modal) #banner,body:has(#ceremony) #banner{visibility:hidden}
body:has(#modal) #board,body:has(#ceremony) #board{pointer-events:none}
.btn.dis,.btn[aria-disabled="true"]{opacity:.5;filter:grayscale(.8);cursor:not-allowed;box-shadow:none}
.pickc.poor{cursor:not-allowed}
.phasepill.done{background:#5a4a3a;color:#efe3c6}
@media (max-width:600px){body:has(#app.combat) .hintbox{top:auto!important;bottom:calc(150px + env(safe-area-inset-bottom))}}

/* v5.3: phone combat field note flows below the action bar instead of floating over the board */
.hintbox.inflow{position:static!important;transform:none!important;left:auto;bottom:auto!important;top:auto!important;width:auto!important;max-width:none;margin:6px 4px;max-height:none}
/* v5.3: on phones the board keeps its full drawn size in the flow, so the info strip and field note never sit on the bottom-row HP bars */
@media (max-width:600px){.combat #boardWrap{flex:0 0 auto;min-height:240px;height:min(calc(100vw - 16px),calc(100dvh - 330px))}}
