:root{--panel:#1c1a24d1;--panel-solid:#1c1a24;--line:#ffffff1a;--text:#f1ede6;--dim:#f1ede68c;--gold:#ffcf7a;--red:#e84a4a;--green:#47c46a;--serif:"Cormorant Garamond", "EB Garamond", Georgia, serif;--sans:"Inter", system-ui, -apple-system, "Segoe UI", sans-serif}*{box-sizing:border-box}html,body{background:#101018;height:100%;margin:0;overflow:hidden}body{font-family:var(--sans);color:var(--text);-webkit-font-smoothing:antialiased;-webkit-user-select:none;user-select:none;touch-action:none}#app{position:fixed;inset:0}canvas{display:block}.atmos,.atmos-grain{pointer-events:none;position:fixed;inset:0}.atmos-grain{opacity:.05;mix-blend-mode:overlay}.ui{pointer-events:none;position:fixed;inset:0}.ui *{pointer-events:none}.ui .interactive,.ui .interactive *{pointer-events:auto}.hud{transition:opacity .4s;position:absolute;inset:0}.hud.hidden{opacity:0}.hud-tl{gap:12px;display:flex;position:absolute;top:16px;left:18px}.stamina{background:#14141ab3;border:1px solid #00000059;border-radius:6px;width:9px;height:74px;position:relative;overflow:hidden;box-shadow:inset 0 1px #ffffff14}.stamina>div{background:linear-gradient(#5fdc7a,#2fae52);border-radius:4px;transition:height 80ms linear;position:absolute;bottom:1px;left:1px;right:1px}.stamina.low>div{background:linear-gradient(#e9c95a,#c9a03a)}.hud-stack{flex-direction:column;gap:5px;display:flex}.hearts{flex-wrap:wrap;gap:4px;max-width:280px;display:flex}.heart{filter:drop-shadow(0 1px 1px #00000059);width:30px;height:27px}.heart.shake{animation:.3s hshake}@keyframes hshake{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}.floor-label{letter-spacing:2.6px;color:#f5f2ebb8;text-transform:uppercase;text-shadow:0 1px 2px #00000059;align-items:center;gap:8px;font-size:11px;display:flex}.tones{gap:3px;display:inline-flex}.tone-pip{border:1px solid #fff0c8b3;width:8px;height:8px;transform:rotate(45deg)}.tone-pip.on{background:#fff0c8;box-shadow:0 0 8px #ffd98a}.floor-label.near .tone-pip:not(.on){animation:1.6s ease-in-out infinite hum}@keyframes hum{0%,to{border-color:#fff0c8b3;box-shadow:0 0 #ffd98a00}50%{border-color:#fff0c8;box-shadow:0 0 10px #ffd98ae6}}.resonance{background:#14141a8c;border-radius:3px;width:120px;height:4px;overflow:hidden}.resonance>div{background:linear-gradient(90deg,#e9d6a8,#fff4d6);height:100%;transition:width .1s}.resonance.full>div{background:#fff4d6;box-shadow:0 0 10px #fff0c8}.resonance.flash{animation:.4s rflash}@keyframes rflash{0%,to{opacity:1}50%{opacity:.2}}.purse{color:#f5f2ebd9;text-shadow:0 1px 2px #0006;letter-spacing:.5px;gap:12px;font-size:12px;display:flex}.purse .ember{color:#ffc070}.purse .echo{color:#dfe8ff}.hud-tr{flex-direction:column;align-items:flex-end;gap:10px;display:flex;position:absolute;top:16px;right:16px}.slots{gap:8px;display:flex}.slot{color:#e8e2d6;background:#1c1a22db;border:1px solid #0006;border-radius:9px;justify-content:center;align-items:center;width:50px;height:50px;font-size:20px;display:flex;position:relative;box-shadow:inset 0 1px #ffffff12,0 2px 6px #0003}.slot .key{color:#ffffff59;font-size:9px;position:absolute;top:2px;left:4px}.slot .count{color:#ffffffbf;font-size:10px;position:absolute;bottom:3px;right:5px}.slot svg{width:26px;height:26px}.pause-btn{cursor:pointer;background:#1c1a22db;border:1px solid #0006;border-radius:8px;justify-content:center;align-items:center;gap:4px;width:40px;height:36px;display:flex}.pause-btn i{background:#e8e2d6;border-radius:1px;width:4px;height:13px}.relic-row{flex-wrap:wrap;justify-content:flex-end;gap:4px;max-width:230px;display:flex}.relic-pip{background:#fff0c8bf;border-radius:2px;width:10px;height:10px;transform:rotate(45deg);box-shadow:0 0 6px #ffdc9699}.relic-pip.r2{background:#b8d0ff;box-shadow:0 0 6px #9fb8ff}.relic-pip.r3{background:#ffd070;box-shadow:0 0 8px #ffc040}.prompt{background:var(--panel);letter-spacing:.4px;opacity:0;white-space:nowrap;border-radius:20px;align-items:center;gap:10px;padding:8px 16px;font-size:13px;transition:opacity .15s;display:flex;position:absolute;bottom:13%;left:50%;transform:translate(-50%)}.prompt.show{opacity:1}.prompt kbd{font-family:var(--sans);background:#ffffff24;border:1px solid #ffffff2e;border-radius:5px;padding:2px 7px;font-size:11px}.toasts{flex-direction:column-reverse;align-items:center;gap:6px;width:min(92vw,720px);display:flex;position:absolute;bottom:20%;left:50%;transform:translate(-50%)}.toast{font-family:var(--serif);color:#fbf7ef;text-shadow:0 1px 3px #0000008c,0 0 18px #00000040;text-align:center;opacity:0;background:radial-gradient(#14121e52 0%,#14121e2e 55%,#14121e00 80%);border-radius:18px;padding:4px 18px;font-size:20px;font-style:italic;transition:opacity .5s,transform .5s;transform:translateY(6px)}.toast.show{opacity:1;transform:none}.floor-title{text-align:center;opacity:0;text-shadow:0 2px 12px #0000004d;transition:opacity 1.2s;position:absolute;top:30%;left:0;right:0}.floor-title.show{opacity:1}.floor-title h1{font-family:var(--serif);color:#fffaf2;letter-spacing:1px;margin:0;font-size:clamp(40px,7vw,72px);font-style:italic;font-weight:400}.floor-title p{letter-spacing:4px;text-transform:uppercase;color:#fffaf2d9;margin:6px 0 0;font-size:12px}.boss{text-align:center;opacity:0;width:min(560px,80vw);transition:opacity .6s;position:absolute;bottom:5.5%;left:50%;transform:translate(-50%)}.boss.show{opacity:1}.boss .name{font-family:var(--serif);color:#fbf7ef;text-shadow:0 1px 3px #00000080;margin-bottom:6px;font-size:20px;font-style:italic}.boss .bar{background:#14121cb3;border:1px solid #0000004d;border-radius:3px;height:6px;overflow:hidden}.boss .bar>div{background:linear-gradient(90deg,#b9a8ff,#efeaff);height:100%;transition:width .2s}.elite{font-family:var(--serif);color:#ffe0a0;text-shadow:0 1px 3px #00000080;opacity:0;font-size:17px;font-style:italic;transition:opacity .4s;position:absolute;top:13%;left:50%;transform:translate(-50%)}.elite.show{opacity:1}.edge-arrow{filter:drop-shadow(0 0 6px #ffdc96cc);opacity:0;border-bottom:16px solid #fff0c8d9;border-left:9px solid #0000;border-right:9px solid #0000;width:0;height:0;transition:opacity .4s;position:absolute}.edge-arrow.show{opacity:1}.hurt{opacity:0;background:radial-gradient(#0000 50%,#c8283c59 100%);transition:opacity .4s;position:absolute;inset:0}.hurt.show{opacity:1;transition:opacity 50ms}.lowhp{opacity:0;background:radial-gradient(#0000 60%,#a01e3238 100%);animation:1.4s infinite pulse;position:absolute;inset:0}@keyframes pulse{0%,to{opacity:.4}50%{opacity:1}}.fade{opacity:0;transition-property:opacity;position:absolute;inset:0}.dialogue{background:var(--panel);-webkit-backdrop-filter:blur(6px);border:1px solid var(--line);opacity:0;border-radius:14px;width:min(760px,92vw);padding:18px 24px 20px;transition:opacity .2s,transform .2s;position:absolute;bottom:6%;left:50%;transform:translate(-50%)translateY(10px)}.dialogue.show{opacity:1;transform:translate(-50%)}.dialogue .who{letter-spacing:2.4px;text-transform:uppercase;color:var(--gold);min-height:12px;margin-bottom:8px;font-size:11px}.dialogue .text{font-family:var(--serif);color:#f7f3ec;min-height:30px;font-size:22px;line-height:1.38}.dialogue .more{color:var(--dim);font-size:12px;animation:1.2s infinite bob;position:absolute;bottom:10px;right:18px}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}.choices{flex-direction:column;gap:4px;margin-top:12px;display:flex}.choice{color:var(--dim);cursor:pointer;border:1px solid #0000;border-radius:8px;padding:8px 12px;font-size:15px;transition:background .12s,color .12s}.choice:before{content:"◇";opacity:.6;margin-right:10px;font-size:10px}.choice.sel{color:var(--text);background:#ffffff14;border-color:#ffffff14}.choice.sel:before{content:"◆";color:var(--gold);opacity:1}.overlay{-webkit-backdrop-filter:blur(3px);opacity:0;background:#0c0b128c;justify-content:center;align-items:center;transition:opacity .2s;display:flex;position:absolute;inset:0}.overlay.show{opacity:1}.panel{background:var(--panel);border:1px solid var(--line);border-radius:16px;width:min(640px,94vw);max-height:86vh;padding:26px 28px;overflow:auto;box-shadow:0 20px 60px #00000059}.panel.wide{width:min(900px,96vw)}.panel h2{font-family:var(--serif);color:#fbf7ef;margin:0 0 4px;font-size:34px;font-style:italic;font-weight:400}.panel .sub{letter-spacing:2.4px;text-transform:uppercase;color:var(--dim);margin-bottom:18px;font-size:11px}.panel p{font-family:var(--serif);color:#ece6dc;margin:8px 0;font-size:18px;line-height:1.45}.menu-items{flex-direction:column;gap:4px;display:flex}.mi{cursor:pointer;color:var(--dim);border:1px solid #0000;border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;transition:background .1s;display:flex}.mi .l{font-size:15px}.mi .d{color:#f1ede673;margin-top:3px;font-size:12px;line-height:1.35}.mi .r{color:var(--gold);white-space:nowrap;font-size:13px}.mi.sel{color:var(--text);background:#ffffff14;border-color:#ffffff14}.mi.dis{opacity:.38}.mi.done .r{color:var(--green)}.tabs{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.tab{letter-spacing:1px;color:var(--dim);border:1px solid var(--line);cursor:pointer;border-radius:16px;padding:6px 12px;font-size:12px}.tab.on{color:#1c1a24;background:#f1ede6}.hint{color:#f1ede666;letter-spacing:.6px;margin-top:16px;font-size:11px}.grid2{grid-template-columns:1fr 1fr;gap:6px 18px;display:grid}.name-entry{font-family:var(--serif);color:#ece6dc;padding:2px 0;font-size:17px}.name-entry small{font-family:var(--sans);color:#f1ede666;margin-left:6px;font-size:11px}.lore-entry{border-bottom:1px solid var(--line);padding:10px 0}.lore-entry h4{letter-spacing:2px;text-transform:uppercase;color:var(--gold);margin:0 0 4px;font-size:11px;font-weight:500}.lore-entry p{margin:2px 0;font-size:16px}.stat-row{border-bottom:1px solid var(--line);color:var(--dim);justify-content:space-between;padding:6px 0;font-size:14px;display:flex}.stat-row b{color:var(--text);font-weight:500}.cards{flex-wrap:wrap;justify-content:center;gap:14px;display:flex}.card{border:1px solid var(--line);cursor:pointer;background:#ffffff0d;border-radius:14px;flex-direction:column;gap:10px;width:200px;min-height:200px;padding:18px;transition:transform .12s,background .12s;display:flex}.card .glyph{background:#fff0c8;width:22px;height:22px;margin:6px auto 8px;transform:rotate(45deg);box-shadow:0 0 16px #ffd98a}.card.r2 .glyph{background:#b8d0ff;box-shadow:0 0 16px #9fb8ff}.card.r3 .glyph{background:#ffd070;box-shadow:0 0 20px #ffc040}.card h3{font-family:var(--serif);text-align:center;margin:0;font-size:21px;font-style:italic;font-weight:400}.card p{font-family:var(--sans);color:var(--dim);text-align:center;margin:0;font-size:13px}.card.sel{background:#ffffff1f;border-color:#fff0c866;transform:translateY(-4px)}.map-wrap{justify-content:center;display:flex}.map-wrap canvas{image-rendering:auto;border-radius:10px;max-width:100%;max-height:64vh}.legend{color:var(--dim);flex-wrap:wrap;justify-content:center;gap:14px;margin-top:10px;font-size:11px;display:flex}.slider{align-items:center;gap:12px;display:flex}.slider .bar{background:#ffffff1f;border-radius:3px;width:140px;height:5px;overflow:hidden}.slider .bar>div{background:var(--gold);height:100%}.title{opacity:0;background:radial-gradient(#0a0a121a,#0a0a128c);flex-direction:column;justify-content:center;align-items:center;transition:opacity .8s;display:flex;position:absolute;inset:0}.title.show{opacity:1}.title h1{font-family:var(--serif);letter-spacing:clamp(14px,3vw,34px);color:#fffaf2;text-shadow:0 4px 30px #00000059;margin:0 0 0 clamp(14px,3vw,34px);font-size:clamp(64px,13vw,140px);font-weight:300}.title .tag{font-family:var(--serif);color:#fffaf2d9;text-shadow:0 1px 6px #0006;margin:6px 0 38px;font-size:20px;font-style:italic}.title .menu-items{min-width:280px}.title .mi{color:#fffaf2b3;text-shadow:0 1px 4px #0006;justify-content:center}.title .mi.sel{color:#fffaf2;background:#14121c73}.title .foot{letter-spacing:1.6px;color:#fffaf28c;text-align:center;font-size:11px;line-height:1.7;position:absolute;bottom:18px}.whitescreen{opacity:0;text-align:center;background:#fbf9f5;flex-direction:column;justify-content:center;align-items:center;padding:0 8vw;transition:opacity 1.2s;display:flex;position:absolute;inset:0}.whitescreen.show{opacity:1}.whitescreen .ml{font-family:var(--serif);color:#4a4452;opacity:0;max-width:900px;margin:8px 0;font-size:clamp(20px,2.6vw,30px);font-style:italic;line-height:1.4;transition:opacity 1.4s}.whitescreen .ml.show{opacity:1}.whitescreen .ml.head{letter-spacing:4px;text-transform:uppercase;color:#8a8494;margin-bottom:26px;font-size:12px;font-style:normal}.whitescreen .ml.big{color:#2f2a36;font-size:clamp(34px,5vw,60px)}.whitescreen .cont{letter-spacing:2px;color:#a09aa8;opacity:0;font-size:11px;transition:opacity 1s;position:absolute;bottom:30px}.whitescreen .cont.show{opacity:1}.touch{display:none;position:absolute;inset:0}.touch.on{display:block}.joy{width:45vw;height:55vh;position:absolute;bottom:0;left:0}.joy-base{background:#14121c33;border:2px solid #ffffff40;border-radius:50%;width:120px;height:120px;margin:-60px 0 0 -60px;display:none;position:absolute}.joy-knob{background:#ffffff59;border-radius:50%;width:52px;height:52px;margin:-26px 0 0 -26px;display:none;position:absolute}.tbtns{width:190px;height:190px;position:absolute;bottom:22px;right:18px}.tbtn{color:#f1ede6;letter-spacing:1px;text-transform:uppercase;background:#1c1a2299;border:1px solid #fff3;border-radius:50%;justify-content:center;align-items:center;width:66px;height:66px;font-size:11px;display:flex;position:absolute}.tbtn.big{width:84px;height:84px}.tbtn:active,.tbtn.down{background:#ffffff40}@media (max-width:640px){.heart{width:22px;height:20px}.slot{width:40px;height:40px;font-size:16px}.slot svg{width:20px;height:20px}.dialogue .text{font-size:18px}.toast{font-size:16px}.panel{padding:18px}.grid2{grid-template-columns:1fr}.card{width:150px;min-height:160px}}
