:root{--bg:#0c0f14;--panel:#141a22;--line:#232c38;--fg:#e8eef4;--dim:#7d8b99;--acc:#7ee2a8;--gem:#ffd15c;--bad:#ff6b6b;--ins:#7cc4ff;--win1:#2b3fa8;--win2:#121a55;--t:32px;--pixel:"Press Start 2P", ui-monospace, monospace;--mono:ui-monospace, SFMono-Regular, Menlo, monospace}*{box-sizing:border-box}body{background:var(--bg);color:var(--fg);font:15px/1.5 var(--mono);min-height:100vh;margin:0}header{background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:18px;padding:10px 64px 10px 18px;display:flex}.help-btn{z-index:70;border:2px solid var(--acc);background:var(--panel);width:36px;height:36px;color:var(--acc);font:14px var(--pixel);cursor:pointer;border-radius:50%;position:fixed;top:8px;right:14px}.help-btn:hover,.help-btn:focus-visible{background:var(--acc);color:var(--panel)}.drawer{z-index:80;border-radius:0;width:min(380px,100vw);margin:0;transition:translate .25s;position:fixed;top:0;bottom:0;right:0;overflow:auto;translate:100%}.drawer.open{translate:0}.drawer-head{justify-content:space-between;align-items:center;display:flex}.drawer-head h3{font:13px var(--pixel);margin:0}.drawer-head button{color:inherit;cursor:pointer;background:0 0;border:0;font-size:26px}.drawer h4{font:11px var(--pixel);color:var(--acc);margin:18px 0 6px}.drawer p{margin:0;line-height:1.5}header h1{font:14px var(--pixel);color:var(--acc);margin:0}#chap{font:11px var(--pixel);color:var(--gem)}.hud{align-items:center;gap:16px;margin-left:auto;display:flex}.hud button,.btn{background:var(--line);color:var(--fg);font:inherit;cursor:pointer;border:1px solid #344152;border-radius:6px;padding:5px 12px}.hud button:hover,.btn:hover{border-color:var(--acc)}#layout{padding:12px 16px 0}#view{height:min(calc(var(--t) * var(--rows)), calc(100vh - 150px));outline:2px solid var(--line);background:#000;border:4px solid #000;border-radius:8px;overflow:hidden}.dev #view{overflow:auto}.dev #view .t{cursor:pointer}.dev:after{content:"DEV MODE · not playing";z-index:90;border:2px solid var(--bad);background:var(--panel);color:var(--bad);font:10px var(--pixel);pointer-events:none;border-radius:6px;padding:6px 10px;position:fixed;bottom:12px;right:12px}#map{background-color:var(--floor);--p:calc(var(--t) / 16);width:max-content;margin:0 auto;display:grid}.viewport{--cols:25;--rows:15;width:min(100%, calc(var(--t) * var(--cols) + 48px));margin:0 auto;position:relative}.viewport:after{content:"";pointer-events:none;border-radius:6px;position:absolute;inset:4px;box-shadow:inset 0 0 70px 10px #000b}#map .g{color:#fff5;text-align:right;font-size:10px;line-height:var(--t);z-index:2;background:#0008;padding:0 6px;position:sticky;left:0}.t{width:var(--t);height:var(--t);font-size:calc(var(--t) * .72);place-items:center;line-height:1;display:grid;position:relative}.spr{width:var(--t);height:var(--t);image-rendering:pixelated;vertical-align:middle;background-size:100% 100%;display:inline-block}.t{background-size:var(--t) var(--t);image-rendering:pixelated}#map .t>.spr,.hero .spr,.roam .spr{filter:drop-shadow(var(--p) calc(var(--p) * 2) 0 #0006)}.talk{top:calc(var(--t) * -.45);font:calc(var(--t) * .45) var(--pixel);color:#ffd23f;text-shadow:0 2px #000,0 -1px #000,1px 0 #000,-1px 0 #000;z-index:1;pointer-events:none;animation:.5s steps(2,end) infinite alternate bob;position:absolute}.pillar{font:bold calc(var(--t) * .7) var(--mono);color:#ffe9b0;text-shadow:0 2px #3b2a14,0 0 6px #ffb84d88}.isle{font:calc(var(--t) * .4) var(--pixel);color:#6b4a24;text-shadow:0 1px #f5e8c0}.t.water{animation:2s steps(2,end) infinite wave}.portal .spr{animation:3s steps(8,end) infinite spin}.spr.flip{scale:-1 1}.spr.empty{filter:grayscale()brightness(.45)}.hero{z-index:1;filter:drop-shadow(0 2px #0008);line-height:0;animation:.5s ease-in-out infinite alternate bob;display:inline-block}.roam,.foe-tile .spr{line-height:0}.roam{animation:.4s steps(2,end) infinite wiggle}.loot{line-height:0;display:inline-block;position:relative}.loot .carry{width:calc(var(--t) * .6);height:calc(var(--t) * .6);position:absolute;bottom:-10%;right:-15%}.foe-tile{animation:.8s steps(2,end) infinite wiggle}@keyframes bob{to{translate:0 -3px}}@keyframes wiggle{50%{rotate:-8deg}}@keyframes wave{50%{background-position:3px 1px}}@keyframes spin{to{rotate:1turn}}.status{background:var(--panel);color:var(--dim);border-radius:6px;flex-wrap:wrap;gap:18px;min-height:34px;margin-top:8px;padding:6px 12px;display:flex}.mode{color:var(--acc);font-weight:700}.mode.insert{color:var(--ins)}.pending{color:var(--gem)}#note{color:var(--fg)}kbd{background:var(--line);color:var(--acc);font:inherit;border:1px solid #344152;border-bottom-width:3px;border-radius:5px;padding:0 5px}.help{color:var(--dim);font-size:13px}.help p{margin:4px 0}.win{background:linear-gradient(var(--win1), var(--win2));color:#fff;border:3px solid #e8e8f0;border-radius:8px;box-shadow:0 0 0 3px #000,0 8px 24px #000a}#dialog{z-index:20;width:min(760px,100vw - 32px);padding:16px 20px 24px;position:fixed;bottom:44px;left:50%;translate:-50%}#dialog[hidden],#battle[hidden]{display:none}#who{font:11px var(--pixel);color:var(--gem);margin-bottom:10px}#say{font:13px/1.9 var(--pixel);min-height:3.8em;margin:0}.more{font:10px var(--pixel);animation:.4s infinite alternate bob;position:absolute;bottom:8px;right:14px}#flash{background:var(--bad);opacity:0;pointer-events:none;z-index:30;transition:opacity .4s;position:fixed;inset:0}#battle{z-index:10;background:radial-gradient(at 50% 30%,#3b2a5c,#0c0f14 70%);padding:16px;position:fixed;inset:0;overflow:auto}.bwrap{flex-direction:column;gap:12px;max-width:1100px;margin:0 auto;display:flex}.arena{justify-content:space-between;align-items:flex-end;gap:16px;min-height:170px;padding:8px 24px 0;display:flex}.fighter{flex-direction:column;align-items:center;gap:8px;display:flex}.sprite{--t:112px;filter:drop-shadow(0 8px #0006);line-height:0}#foeIcon{animation:1s ease-in-out infinite alternate bob}.sprite.hit{filter:brightness(3)drop-shadow(0 8px #0006);animation:.3s shake!important}.sprite.dead{opacity:0;transition:opacity .6s,scale .6s;scale:.3}@keyframes blink{50%{opacity:0}}@keyframes shake{25%{translate:-8px}75%{translate:8px}}.stat{min-width:240px;font:10px/1.8 var(--pixel);padding:8px 14px}.bar{background:#0008;border:2px solid #fff;border-radius:3px;height:10px;margin-top:4px;overflow:hidden}.bar i{background:var(--bad);height:100%;transition:width .25s;display:block}.bar.me i{background:var(--acc)}.clock{font:10px var(--pixel);color:var(--gem);align-items:center;gap:12px;display:flex}.clock .bar{flex:1;margin:0}.bar.time i{background:var(--gem);transition:none}.bar.time.low i{background:var(--bad);animation:.5s step-end infinite blink}.lesson{padding:12px 16px}.lesson .keys{color:#c9d3ff;flex-wrap:wrap;gap:6px 18px;margin-bottom:6px;display:flex}.lesson p{color:#dfe6ff;margin:0}.panes{grid-template-columns:1fr 1fr;gap:12px;display:grid}.pane{background:var(--panel);border:1px solid var(--line);border-radius:8px;overflow:hidden}.pane h4{font:9px var(--pixel);color:var(--dim);border-bottom:1px solid var(--line);margin:0;padding:6px 12px}.pane[hidden]{display:none}.buf{white-space:pre;padding:10px 0;font-size:17px;overflow-x:auto}.ln{min-height:1.5em;padding-right:12px}.ln i{text-align:right;width:3.2em;color:var(--dim);border-left:3px solid #0000;padding-right:1em;font-style:normal;display:inline-block}.ln.bad i{border-left-color:var(--bad)}.ln.ok{color:var(--acc)}.miss{color:var(--bg);background:var(--gem);font-weight:700}.extra{color:var(--bad);text-decoration:line-through}.cur{background:var(--acc);color:var(--bg)}.cur.ins{color:inherit;box-shadow:inset 2px 0 var(--ins);background:0 0}.actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}#bHint{color:var(--gem)}body{padding-bottom:30px}#cmd{height:28px;color:var(--fg);font:15px var(--mono);white-space:pre;z-index:40;border-top:1px solid var(--line);background:#000;padding:4px 12px;position:fixed;bottom:0;left:0;right:0}#cmd.err{color:var(--bad)}@media (width<=900px){.panes{grid-template-columns:1fr}.sprite{font-size:64px}}.screen{z-index:50;background:radial-gradient(at 50% 25%,#2b1f4a,#0c0f14 70%);flex-direction:column;justify-content:safe center;align-items:center;gap:18px;padding:16px;display:flex;position:fixed;inset:0;overflow:auto}.screen[hidden],.bigkey[hidden]{display:none}#wizard,#dojo,#index,#booth{z-index:55}.booth .preview{--t:72px;justify-content:center;margin-bottom:8px;display:flex}.booth .item{--t:28px;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;display:grid}.booth .item small{display:inline}.booth .chests{--t:64px;justify-content:center;gap:24px;padding:12px 0;display:flex}.booth .chests>div{border:2px solid #0000;border-radius:8px;justify-items:center;padding:8px;display:grid}.booth .chests>.sel{border-color:var(--gem);animation:.4s steps(2,end) infinite alternate bob}.booth .chests b{font:12px var(--pixel);color:var(--gem)}.balloon .spr{animation:1.2s ease-in-out infinite alternate bob}.fountain .spr{animation:.6s steps(2,end) infinite alternate bob}.fest:before{content:"";pointer-events:none;z-index:3;opacity:.85;background-image:radial-gradient(circle,#ff77a8 2px,#0000 3px),radial-gradient(circle,#ffec27 2px,#0000 3px),radial-gradient(circle,#29adff 2px,#0000 3px),radial-gradient(circle,#00e436 2px,#0000 3px);background-position:0 0,40px 60px,20px 30px,60px 10px;background-size:90px 110px,130px 90px,70px 130px,110px 70px;animation:7s linear infinite confetti;position:absolute;inset:0}@keyframes confetti{to{background-position:0 110px,40px 150px,20px 160px,60px 80px}}@media (prefers-reduced-motion:reduce){.fest:before,.balloon .spr,.fountain .spr{animation:none}}.idx{grid-template-columns:minmax(200px,280px) 1fr;width:min(980px,100%);max-height:calc(100vh - 80px);display:grid;overflow:hidden}.idx-list{font:10px/2 var(--pixel);border-right:2px solid #fff3;padding:12px 8px;overflow:auto}.idx-list h4{font:9px/1.6 var(--pixel);color:#aab4e8;margin:12px 8px 4px}.idx-list .opt.sel:before{content:none}.idx-list .opt{justify-content:space-between;gap:8px;display:flex}.idx-list .opt.dim{color:#c9d3ffaa}.mk{color:var(--gem)}.idx-page{font:14px/1.6 var(--mono);padding:16px 20px;overflow:auto}.idx-page h3{font:14px var(--pixel);color:var(--gem);margin:0 0 12px}.idx-page .keys{border-collapse:collapse;margin:12px 0}.idx-page .keys td{padding:4px 12px 4px 0}.idx-page kbd{font:13px var(--mono);color:var(--acc);background:#0006;border:1px solid #fff5;border-bottom-width:3px;border-radius:4px;padding:1px 8px}.idx-page .ex{grid-template-columns:1fr 1fr;gap:10px;display:grid}.idx-page .ex h4{font:9px var(--pixel);color:#aab4e8;margin:6px 0}.idx-page .buf{background:#0008;border-radius:4px;padding:6px 0;font-size:12px;overflow:auto}.idx-page .foe{--t:48px;color:var(--acc);align-items:center;gap:12px;display:flex}@media (width<=700px){.idx{grid-template-columns:1fr}.idx-list{border-bottom:2px solid #fff3;border-right:0;max-height:30vh}.idx-page .ex{grid-template-columns:1fr}}.title{text-align:center;max-width:720px}.title h1{font:clamp(20px, 6vw, 46px) var(--pixel);color:var(--acc);text-shadow:0 0 14px #7ee2a877,4px 4px #000;margin:14px 0 18px;animation:4s infinite flicker}.vs{--t:96px;justify-content:center;align-items:center;gap:28px;display:flex}.vs .spr:first-child{animation:.6s ease-in-out infinite alternate bob}.vs b{font:18px var(--pixel);color:var(--bad);animation:.5s ease-in-out infinite alternate bob}.villain{filter:drop-shadow(0 0 14px var(--bad));animation:.6s steps(2,end) infinite wiggle}.credit{color:var(--dim);font-size:12px}.credit a{color:var(--acc)}.tag{font:11px/2 var(--pixel);color:#c9d3ff;margin:6px 0}.tag b{color:var(--gem);font-weight:400}.menu-box{width:min(520px,100%);font:12px/2 var(--pixel);padding:16px 20px}.menu-box h3{font:11px var(--pixel);color:var(--gem);margin:0 0 12px}.opt{border-radius:4px;padding:4px 10px}.opt.sel{color:var(--gem);background:#fff2}.opt.sel:before{content:"▶ "}.opt small{font:9px/1.8 var(--pixel);color:#aab4e8;display:block}.name-in{color:var(--acc);font:18px/2 var(--mono);--t:32px}.wiz{text-align:center;width:min(580px,100%);padding:20px 24px}#wStep,#dStat{font:10px var(--pixel);color:var(--gem)}.bigkey{min-width:76px;font:28px var(--pixel);color:var(--acc);border:2px solid var(--acc);background:#050805;border-bottom-width:6px;border-radius:8px;margin:24px 0 6px;padding:10px 18px;display:inline-block;box-shadow:0 0 18px #7ee2a855}#wText,#dText{font:12px/2 var(--pixel);min-height:2em;margin:12px 0}#wHint{color:var(--dim);margin:0}.wiz .bar{margin-top:10px}.wiz .bar i{background:var(--gem);transition:none}.mouse{--t:64px;margin-top:16px;line-height:0;transition:translate .15s}.mouse.hit{animation:.3s shake}@keyframes flicker{0%,92%,to{opacity:1}94%{opacity:.35}96%{opacity:.9}}.hud{--t:20px}.hud span{align-items:center;gap:4px;display:flex}#who{--t:48px;align-items:center;gap:10px;display:flex}#who:empty{display:none}.lesson .keys,.status{font-family:var(--mono)}.hands{width:min(300px,100%);margin:10px auto 0;display:block}.hands rect{fill:#1c2530;stroke:var(--dim);stroke-width:2px;transition:fill .12s}.hands .palm{stroke:none;fill:#1c2530}.hands .on{fill:var(--acc);stroke:#fff;filter:drop-shadow(0 0 6px var(--acc))}.hands .sh{fill:var(--gem);stroke:#fff}.finger{color:var(--gem);font:13px var(--mono);min-height:1.3em;margin:4px 0 0}
