html,body{overscroll-behavior:none;touch-action:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;color:#fff4dc;background:#0b0814;height:100%;margin:0;font-family:system-ui,Segoe UI,sans-serif;overflow:hidden}#app{cursor:crosshair;position:fixed;inset:0}#app canvas{display:block}#hud{pointer-events:none;z-index:2;position:fixed;inset:0;overflow:hidden}.hud-panel{left:calc(16px + env(safe-area-inset-left));top:calc(14px + env(safe-area-inset-top));background:#0e091899;border:1px solid #fff4dc1f;border-radius:10px;min-width:220px;padding:10px 14px;position:absolute}.room-name{letter-spacing:.08em;text-transform:uppercase;opacity:.7;margin-bottom:6px;font-size:13px}.hp{background:linear-gradient(135deg,#781e3c8c,#280e22d9);border:1px solid #ff789699;border-radius:8px;margin-top:4px;padding:5px 8px 7px;position:relative;box-shadow:0 0 10px #ff5f7a40,inset 0 1px #ffffff1a}.hp.low{border-color:#ff3c50f2;animation:.7s infinite alternate hp-alarm}@keyframes hp-alarm{0%{box-shadow:0 0 6px #ff304866,inset 0 1px #ffffff1a}to{box-shadow:0 0 16px #ff3048e6,inset 0 1px #ffffff1a}}.hp-head{letter-spacing:.04em;text-transform:uppercase;color:#ffe3ea;text-shadow:0 1px 2px #0009;align-items:center;gap:6px;margin-bottom:5px;font:800 12px system-ui,sans-serif;display:flex}.hp-heart{color:#ff5f7a;filter:drop-shadow(0 0 4px #ff5f7acc);font-size:16px;line-height:1;animation:1.1s infinite heart-beat}.hp.low .hp-heart{animation-duration:.45s}@keyframes heart-beat{0%,60%,to{transform:scale(1)}15%{transform:scale(1.25)}30%{transform:scale(1.05)}45%{transform:scale(1.18)}}.hp-text{font-variant-numeric:tabular-nums;opacity:.9;margin-left:auto;font-size:11px}.hp-bar{background:#0a040cb3;border:1px solid #ff789673;border-radius:5px;height:10px;position:relative;overflow:hidden}.hp-fill{transform-origin:0;background:linear-gradient(90deg,#e8344f,#ff7a8e 60%,#ffb36b);height:100%;transition:transform .15s;box-shadow:0 0 8px #ff5f7ab3}.hp-ticks{pointer-events:none;background:repeating-linear-gradient(90deg,#0000 0 calc(10% - 1px),#0a040c8c calc(10% - 1px) 10%);position:absolute;inset:0}.hp-fill.low{background:#ff3048;animation:.6s infinite alternate pulse}.ghost-count{color:#bfefff;margin-top:6px;font-size:13px}.ghost-label{text-align:center;will-change:transform;display:none;position:absolute;top:0;left:0}.gl-num{color:#fff;text-shadow:0 0 6px #5fd3ff,0 2px #1b1024,0 0 2px #1b1024;font-variant-numeric:tabular-nums;font-size:30px;font-weight:800;line-height:1;display:block}.gl-bar{background:#0a0614b3;border:1px solid #fff6;border-radius:4px;width:70px;height:7px;margin:4px auto 0;overflow:hidden}.gl-fill{transform-origin:0;background:#7fe6ff;height:100%}.gl-tension{background:#0a0614b3;border-radius:2px;width:70px;height:4px;margin:3px auto 0;overflow:hidden}.gl-tension-fill{transform-origin:0;background:linear-gradient(90deg,#ffd23f,#ff3048);height:100%;transform:scaleX(0)}.gl-status{letter-spacing:.08em;height:16px;margin-top:3px;font-size:13px;font-weight:800}.gl-status.blocked{color:#c9c3d6;text-shadow:0 1px #1b1024}.gl-status.surge{color:#ffb36b;text-shadow:0 0 8px #ff8c28cc,0 1px #1b1024;animation:.12s infinite alternate pulse}.ghost-label.slipping .gl-num{color:#ff8a8a;animation:.15s infinite alternate pulse}.wallet{font-variant-numeric:tabular-nums;background:linear-gradient(135deg,#78561480,#281a0ad9);border:1px solid #ffd2508c;border-radius:8px;align-items:center;gap:6px;margin-top:8px;padding:5px 8px;display:flex;box-shadow:0 0 10px #ffc83c33,inset 0 1px #ffffff1a}.wallet-label{letter-spacing:.04em;text-transform:uppercase;color:#fff0c4;text-shadow:0 1px 2px #0009;font:800 12px system-ui,sans-serif}.wallet-amount{color:#ffe27a;text-shadow:0 0 8px #ffc83c73,0 1px 2px #0009;transform-origin:100%;margin-left:auto;font:800 16px system-ui,sans-serif}.wallet-icon{color:#5a3a00;width:18px;height:18px;text-shadow:none;background:linear-gradient(#ffe27a,#e0a020);border-radius:50%;place-items:center;font-size:12px;display:inline-grid}.hp-fill.chilled{filter:hue-rotate(170deg)saturate(.6)brightness(1.35)}.element-gauge{--el-color:#4fb8ff;color:#fff;border:1px solid color-mix(in srgb, var(--el-color) 75%, transparent);background:linear-gradient(135deg, color-mix(in srgb, var(--el-color) 38%, #140c20e6), color-mix(in srgb, var(--el-color) 14%, #140c20e6));box-shadow:0 0 10px color-mix(in srgb, var(--el-color) 45%, transparent), inset 0 1px 0 #ffffff1f;transform-origin:0;border-radius:8px;margin-top:8px;padding:5px 8px 7px;position:relative;overflow:hidden}.element-gauge:before{content:"";pointer-events:none;opacity:.5;background-size:200% 100%;position:absolute;inset:0}.element-head{letter-spacing:.04em;text-transform:uppercase;text-shadow:0 1px 2px #0009;align-items:center;gap:6px;margin-bottom:5px;font:800 12px system-ui,sans-serif;display:flex;position:relative}.element-pct{opacity:.85;margin-left:auto;font-size:10px}.element-icon svg{width:18px;height:18px;filter:drop-shadow(0 0 5px var(--el-color));display:block}.element-bar{border:1px solid color-mix(in srgb, var(--el-color) 50%, transparent);background:#0a0814a6;border-radius:4px;height:8px;position:relative;overflow:hidden}.element-fill{transform-origin:0;background:var(--el-color);box-shadow:0 0 8px var(--el-color);transition:transform 80ms linear;position:absolute;inset:0}.element-hint{letter-spacing:.03em;color:#ffffffd1;text-shadow:0 1px 2px #0009;justify-content:flex-end;align-items:center;gap:5px;margin-top:5px;font:700 10px system-ui,sans-serif;display:flex;position:relative}.element-hint .key{color:#1b1024;background:#ffd98a;border-radius:4px;place-items:center;width:15px;height:15px;font-size:10px;font-weight:800;display:inline-grid;box-shadow:0 1px #a8823a}.touch-mode .element-hint{display:none}.element-gauge.low .element-fill{animation:.5s infinite alternate pulse}.element-gauge.el-water:before{background-image:linear-gradient(100deg,#0000 30%,#b8e6ff59 45%,#0000 60%);animation:3.2s linear infinite tank-sheen}.element-gauge.el-water .element-fill{background:linear-gradient(90deg,#2a8ae0,#6fd0ff)}.element-gauge.el-ice{background:linear-gradient(135deg,#a0dcf56b,#3c5a82bf);border-color:#dcf5ffd9}.element-gauge.el-ice:before{background-image:linear-gradient(110deg,#0000 40%,#fff9 48%,#0000 56%);animation:2.4s linear infinite tank-sheen}.element-gauge.el-ice .element-fill{background:linear-gradient(90deg,#9fe3ff,#fff)}.element-gauge.el-fire{background:linear-gradient(135deg,#ff6e1e73,#5a140ad9);border-color:#ffa03ce6;animation:.22s infinite alternate tank-flicker}.element-gauge.el-fire:before{background-image:linear-gradient(#0000 30%,#ffd23c59)}.element-gauge.el-fire .element-fill{background:linear-gradient(90deg,#ff3a10,#ffd23a)}@keyframes tank-sheen{0%{background-position:150% 0}to{background-position:-50% 0}}@keyframes tank-flicker{0%{box-shadow:0 0 8px #ff782880,inset 0 1px #ffffff1f}to{box-shadow:0 0 14px #ff9632d9,inset 0 1px #ffffff1f}}.hp-fill.burning{animation:.18s infinite alternate burn-flicker;background:linear-gradient(90deg,#ff4a1a,#ffb02e)!important}@keyframes burn-flicker{0%{filter:brightness()}to{filter:brightness(1.5)}}.items{pointer-events:auto;background:#ffffff0a;border:1px solid #e8c45a47;border-radius:8px;margin-top:8px;padding:6px 7px 5px}.items-head{color:#e8dcc2;letter-spacing:.06em;text-transform:uppercase;align-items:center;gap:6px;margin-bottom:5px;font:700 11px system-ui,sans-serif;display:flex}.items-count{color:#ffe9a8;text-align:center;background:#ffd23f38;border-radius:999px;min-width:16px;padding:0 5px;font-size:10px;line-height:15px}.items-count:empty{display:none}.items-list{flex-direction:column;gap:4px;display:flex}.item-row{transform-origin:0;background:#140c208c;border:1px solid #e8c45a80;border-radius:8px;align-items:center;gap:7px;min-width:0;padding:2px 8px 2px 2px;display:flex;box-shadow:inset 0 1px #ffe9a814}.item-icon{background:radial-gradient(circle at 50% 40%,#ffd23f38,#140c20cc 75%);border:1px solid #ffd23f99;border-radius:6px;flex:none;place-items:center;width:26px;height:26px;display:grid}.item-row.tile{border-color:#7ff3e280}.item-row.tile .item-icon{background:radial-gradient(circle at 50% 40%,#7ff3e238,#140c20cc 75%);border-color:#7ff3e299}.item-icon svg{filter:drop-shadow(0 1px 1px #0009);width:20px;height:20px;display:block}.item-name{white-space:nowrap;text-overflow:ellipsis;color:#ffe9a8;font:600 12px system-ui,sans-serif;overflow:hidden}.items-none{color:#fff4dc66;font:italic 600 11px system-ui,sans-serif}.banner-icon{vertical-align:-.24em;margin-right:.3em;animation:2.4s ease-in-out infinite banner-key;display:inline-block}.banner-icon svg{filter:drop-shadow(0 0 10px #ffd25ab3);width:1.35em;height:1.35em;display:block}@keyframes banner-key{0%,to{transform:rotate(-8deg)translateY(0)}50%{transform:rotate(8deg)translateY(-3px)}}.float-text.loot{font-size:22px;font-style:normal;font-weight:800}.float-text.loot.money{color:#9dff8a;text-shadow:0 1px #1b1024,0 0 8px #78ff6480}.float-text.loot.heart{color:#ff8aa3;text-shadow:0 1px #1b1024,0 0 10px #ff3b5cb3;font-size:24px}.float-text.loot.gem{font-size:26px}.float-text.door-msg{color:#f1e4ff;text-shadow:0 1px #1b1024,0 0 10px #000c;font-size:22px;font-weight:700}.float-text.clogged{color:#ffd27a;text-shadow:0 1px #1b1024,0 0 8px #ffaa3c8c;font-size:20px;font-style:normal;font-weight:800}.cat-tank{--el-color:#4fb8ff;border:1px solid color-mix(in srgb, var(--el-color) 70%, transparent);box-shadow:0 0 8px color-mix(in srgb, var(--el-color) 40%, transparent);pointer-events:none;will-change:transform;z-index:1;background:#0e0918b8;border-radius:999px;align-items:center;gap:4px;padding:2px 5px 2px 3px;transition:opacity .25s;display:none;position:absolute;top:0;left:0}.cat-tank.el-water,.cat-tank.el-ice,.cat-tank.el-fire{display:flex}.cat-tank.el-water{--el-color:#4fb8ff}.cat-tank.el-ice{--el-color:#cdf2ff}.cat-tank.el-fire{--el-color:#ff8a2a}.cat-tank.idle{opacity:.55}.cat-tank.low{animation:.45s infinite alternate cat-tank-low}@keyframes cat-tank-low{0%{border-color:#ff5a46e6}to{border-color:color-mix(in srgb, var(--el-color) 70%, transparent)}}.cat-tank-icon svg{width:14px;height:14px;filter:drop-shadow(0 0 3px var(--el-color));display:block}.cat-tank-bar{background:#0a0814cc;border-radius:4px;width:56px;height:7px;position:relative;overflow:hidden}.cat-tank-fill{transform-origin:0;background:var(--el-color);box-shadow:0 0 6px var(--el-color);transition:transform 80ms linear;position:absolute;inset:0}.cat-tank.el-water .cat-tank-fill{background:linear-gradient(90deg,#2a8ae0,#6fd0ff)}.cat-tank.el-ice .cat-tank-fill{background:linear-gradient(90deg,#9fe3ff,#fff)}.cat-tank.el-fire .cat-tank-fill{background:linear-gradient(90deg,#ff3a10,#ffd23a)}.float-text.clash{color:#ffb08a;text-shadow:0 1px #1b1024,0 0 8px #ff6e4699;font-size:20px;font-style:normal;font-weight:800}.float-text.boo{color:#f4f8ff;letter-spacing:.04em;-webkit-text-stroke:2px #4a2f6e;text-shadow:0 3px #2a1a40,0 0 18px #be96ffe6,0 0 40px #9664ff99;font:italic 900 44px Georgia,Times New Roman,serif}.float-text.ruby{color:#ff6b82;text-shadow:0 1px #1b1024,0 0 10px #ff2a4ab3}.float-text.sapphire{color:#7aa8ff;text-shadow:0 1px #1b1024,0 0 10px #2f73ffb3}.float-text.emerald{color:#5dff9e;text-shadow:0 1px #1b1024,0 0 10px #20d67ab3}.float-text.diamond{color:#f2fdff;text-shadow:0 1px #1b1024,0 0 12px #c8f5ffe6}.interact-prompt{color:#ffe9c4;white-space:nowrap;opacity:0;will-change:transform;background:#0e0918c7;border:1px solid #ffd98a8c;border-radius:999px;align-items:center;gap:6px;padding:4px 10px 4px 5px;font-size:13px;font-weight:700;transition:opacity .12s;display:flex;position:absolute;top:0;left:0}.interact-prompt.shown{opacity:1}.interact-prompt .key{color:#1b1024;background:#ffd98a;border-radius:5px;place-items:center;width:20px;height:20px;font-size:12px;font-weight:800;display:inline-grid;box-shadow:0 2px #a8823a}.float-text{color:#d8ccb8;text-shadow:0 1px #1b1024,0 0 6px #0009;white-space:nowrap;will-change:transform;font-size:14px;font-style:italic;font-weight:600;display:none;position:absolute;top:0;left:0}.room-title{opacity:0;white-space:nowrap;pointer-events:none;align-items:center;gap:18px;display:flex;position:absolute;top:38%;left:50%;transform:translate(-50%,-50%)}.room-title-name{text-transform:uppercase;letter-spacing:.32em;color:#f3e6c8;text-shadow:0 0 18px #c9a8ff73,0 2px #0009;font-family:Georgia,Times New Roman,serif;font-size:clamp(22px,5vw,38px);font-weight:400}.room-title-rule{background:linear-gradient(90deg,#0000,#f3e6c8cc,#0000);width:clamp(28px,8vw,90px);height:1px}.banner{text-align:center;background:#0e0918b8;border-radius:14px;padding:18px 34px;transition:opacity .4s;position:absolute;top:30%;left:50%;transform:translate(-50%,-50%)}.banner.hidden{opacity:0}.banner-title{letter-spacing:.02em;font-size:clamp(26px,6vw,40px);font-weight:800}.banner.good .banner-title{color:#ffd98a;text-shadow:0 0 18px #ffc46bb3}.banner.bad .banner-title{color:#ff8a9a;text-shadow:0 0 18px #ff304899}.banner-sub{opacity:.85;margin-top:6px;font-size:16px}.vignette{background:radial-gradient(75% 70%,#04020a00 45%,#04020a8c 78%,#04020aeb 100%);transition:opacity .2s;position:absolute;inset:0}.fade{opacity:0;z-index:3;background:#000;display:none;position:absolute;inset:0}.scare-flash{opacity:0;background:radial-gradient(#ebe1ff59,#7850dc40 60%,#280a5080 100%);position:absolute;inset:0}.hurt-flash{opacity:0;background:radial-gradient(#ff002800 45%,#ff002873 100%);position:absolute;inset:0}.controls-hint{left:calc(16px + env(safe-area-inset-left));bottom:calc(12px + env(safe-area-inset-bottom));opacity:.55;font-size:12px;position:absolute}.debug-overlay{color:#9dff5f;white-space:pre;pointer-events:none;z-index:10;background:#000000a6;border-radius:6px;padding:8px 10px;font:12px/1.45 ui-monospace,Consolas,monospace;position:fixed;bottom:12px;right:12px}@keyframes pulse{0%{opacity:1}to{opacity:.45}}.hud-buttons{gap:6px;margin-top:8px;display:flex}.hud-btn{pointer-events:auto;cursor:pointer;touch-action:manipulation;background:linear-gradient(#3a2850,#241634);border:1px solid #e8c45a73;border-radius:9px;place-items:center;width:38px;height:34px;padding:0;transition:transform .1s,box-shadow .15s,border-color .15s;display:grid;box-shadow:inset 0 1px #ffffff14,0 2px 6px #0006}.hud-btn svg{filter:drop-shadow(0 1px 1px #00000080);display:block}.hud-btn:hover{border-color:#e8c45ae6;box-shadow:inset 0 1px #ffffff1a,0 0 10px #e8c45a59}.hud-btn:active{transform:scale(.94)}.touch-layer{z-index:1;touch-action:none;position:fixed;inset:0}.touch-zone{touch-action:none;width:50%;position:absolute;top:0;bottom:0}.touch-zone.left{left:0}.touch-zone.right{right:0}.stick-base{pointer-events:none;background:#ffffff12;border:2px solid #fff4dc47;border-radius:50%;width:112px;height:112px;margin:-56px 0 0 -56px;position:absolute}.stick-base.idle.left{left:calc(96px + env(safe-area-inset-left));top:calc(100% - 110px - env(safe-area-inset-bottom));opacity:.45}.stick-base.idle.right{display:none}.stick-knob{background:#fff4dc80;border-radius:50%;width:52px;height:52px;margin:-26px 0 0 -26px;position:absolute;top:50%;left:50%;box-shadow:0 2px 8px #0006}.touch-btn{letter-spacing:.04em;color:#fff4dc;touch-action:none;background:#0e091899;border:2px solid #fff4dc4d;border-radius:50%;place-items:center;font-weight:800;transition:transform 60ms,background .1s,opacity .15s;display:grid;position:absolute}.touch-btn.vac{width:92px;height:92px;right:calc(22px + env(safe-area-inset-right));bottom:calc(22px + env(safe-area-inset-bottom));color:#bfefff;border-color:#7fe6ffb3;font-size:18px}.touch-btn.vac.pressed{background:#7fe6ff59;transform:scale(.94)}.touch-btn.blow{width:64px;height:64px;right:calc(124px + env(safe-area-inset-right));bottom:calc(26px + env(safe-area-inset-bottom));color:#dce8ff;border-color:#c8dcff8c;font-size:12px}.touch-btn.blow.pressed{background:#c8dcff4d;transform:scale(.94)}.touch-btn.blow.element{color:#bfe6ff;background:#4fb8ff38;border-color:#7fc8ffd9}.touch-btn.dump{width:50px;height:50px;right:calc(196px + env(safe-area-inset-right));bottom:calc(32px + env(safe-area-inset-bottom));color:#bfe6ff;border-color:#7fc8ff8c;font-size:9px}.touch-btn.dump.ready{color:#ffe9c4;background:#ffd98a38;border-color:#ffd98a;animation:.9s infinite alternate ready-pulse}.touch-btn.light{width:52px;height:52px;right:calc(122px + env(safe-area-inset-right));bottom:calc(108px + env(safe-area-inset-bottom));color:#fff1c8;background:#ffeca029;border-color:#ffeca0b3;font-size:10px}.touch-btn.light.off{color:#fff4dc66;background:#0e091899;border-color:#fff3}.touch-btn.interact{width:70px;height:70px;right:calc(33px + env(safe-area-inset-right));bottom:calc(128px + env(safe-area-inset-bottom));opacity:.45;font-size:11px}.touch-btn.interact.ready{opacity:1;color:#ffe9c4;background:#ffd98a38;border-color:#ffd98a;animation:.9s infinite alternate ready-pulse}.touch-btn.interact.pressed{transform:scale(.92)}@keyframes ready-pulse{0%{box-shadow:0 0 #ffd98a00}to{box-shadow:0 0 18px #ffd98a99}}.touch-mode .interact-prompt .key{display:none}.touch-mode .interact-prompt{padding:4px 10px}.touch-mode .controls-hint{left:50%;bottom:calc(14px + env(safe-area-inset-bottom));text-align:center;max-width:40%;animation:1s 9s forwards hint-fade;transform:translate(-50%)}@media (max-width:640px),(max-height:500px){.hud-panel{min-width:0;padding:7px 10px}.room-name{margin-bottom:4px;font-size:11px}.hp-bar{flex:none;width:90px}.ghost-count{font-size:12px}.gl-num{font-size:22px}.gl-bar,.gl-tension{width:56px}.banner{max-width:80vw;padding:12px 20px}.banner-sub{font-size:14px}.controls-hint{font-size:11px}.item-icon{width:22px;height:22px}.item-icon svg{width:16px;height:16px}.item-name{font-size:11px}}@media (max-width:640px) and (orientation:portrait){.touch-mode .controls-hint{bottom:auto;top:calc(150px + env(safe-area-inset-top));max-width:88%}}@keyframes hint-fade{to{opacity:0}}.codex{z-index:5;touch-action:none;background:#06030cb8;place-items:center;transition:opacity .18s;display:grid;position:fixed;inset:0}.codex.hidden{opacity:0;pointer-events:none}.codex-book{background:#2a1d3a;border:2px solid #c9a24a;border-radius:14px;flex-direction:column;width:min(760px,92vw);height:min(560px,88vh);display:flex;overflow:hidden;box-shadow:0 0 0 6px #1a1024,0 18px 60px #000000b3}.codex-header{background:linear-gradient(#3a2850,#2a1d3a);border-bottom:1px solid #c9a24a80;justify-content:space-between;align-items:center;padding:10px 16px;display:flex}.codex-title{letter-spacing:.12em;color:#f0d78c;text-shadow:0 0 10px #f0d78c59;align-items:center;gap:10px;font-family:Georgia,Times New Roman,serif;font-size:22px;display:flex}.codex-icon svg{filter:drop-shadow(0 0 6px #f0d78c59);width:32px;height:32px;display:block}.codex-close{color:#f0d78c;cursor:pointer;background:#ffffff0d;border:1px solid #f0d78c66;border-radius:8px;width:34px;height:34px;font-size:16px}.codex-body{flex:1;gap:14px;min-height:0;padding:14px;display:flex}.codex-list{flex-direction:column;gap:6px;min-width:170px;display:flex;overflow-y:auto}.codex-entry{color:#e8dcc2;text-align:left;cursor:pointer;background:#ffffff0a;border:1px solid #f0d78c2e;border-radius:8px;align-items:center;gap:8px;padding:8px 10px;font:600 14px Georgia,serif;display:flex}.codex-entry.selected{color:#fff4dc;background:#f0d78c29;border-color:#f0d78cb3}.codex-swatch{border-radius:50%;width:12px;height:12px;box-shadow:0 0 6px}.codex-page{color:#2b1d12;background:linear-gradient(#f1e5c6,#e2d1a8);border-radius:10px;flex:1;min-height:0;padding:16px 18px 18px;overflow-y:auto;box-shadow:inset 0 0 24px #78501e59}.codex-preview{aspect-ratio:1;background:radial-gradient(circle at 50% 45%,#3c2a5a 0%,#1a1024 70%);border:3px solid #b8903e;border-radius:50%;width:min(220px,50vw);margin:0 auto 10px;position:relative;overflow:hidden;box-shadow:0 4px 14px #3c1e0a66}.codex-unknown{color:#c9a8ff73;text-shadow:0 0 18px #966edc80;place-items:center;font:700 96px Georgia,serif;display:none;position:absolute;inset:0}.codex.unknown .codex-unknown{display:grid}.codex.unknown .codex-preview canvas{visibility:hidden}.codex-entry.unknown{opacity:.6;font-style:italic}.codex-preview canvas{display:block;width:100%!important;height:100%!important}.codex-name{text-align:center;letter-spacing:.04em;font:700 26px Georgia,serif}.codex-stats{text-transform:uppercase;letter-spacing:.1em;color:#6b4a2a;justify-content:center;gap:22px;margin:6px 0 10px;font:14px Georgia,serif;display:flex}.codex-stats b{color:#2b1d12;font-size:16px}.codex-desc{margin:0;font:15px/1.5 Georgia,serif}@media (max-width:640px){.codex-body{flex-direction:column}.codex-list{flex-flow:wrap;min-width:0}}#hud.in-menu>:not(.vignette):not(.fade){visibility:hidden}.title-screen,.pause-menu{z-index:4;padding:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(16px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));box-sizing:border-box;color:#fff4dc;touch-action:none;place-items:center;font-family:Georgia,Times New Roman,serif;display:grid;position:fixed;inset:0;overflow:hidden}.title-screen{background:radial-gradient(60% 55% at 50% 42%,#2a1a48,#0e081a 70%,#06030c 100%);transition:opacity .45s}.title-screen.leaving{opacity:0;pointer-events:none}.title-screen.leaving .ts-card{transform:scale(1.06)}.title-screen.hidden,.pause-menu.hidden,.menu-confirm.hidden{display:none}.ts-moon{aspect-ratio:1;opacity:.9;background:radial-gradient(circle at 38% 36%,#fff8dc,#f1dc9b 60%,#d8b968);border-radius:50%;width:clamp(54px,9vmin,92px);position:absolute;top:7%;right:9%;box-shadow:0 0 40px 10px #ffe6a040,0 0 120px 40px #aa8cff1f}.ts-wisp{opacity:.22;width:clamp(26px,5vmin,46px);animation:26s linear infinite ts-drift,3.2s ease-in-out infinite ts-float;position:absolute}.ts-wisp svg,.ts-ghost svg,.pm-ghost svg,.ts-cat svg{width:100%;height:auto;display:block}.ts-wisp-0{animation-delay:-4s,0s;top:16%}.ts-wisp-1{opacity:.16;width:clamp(20px,3.6vmin,34px);animation-duration:34s,2.6s;animation-delay:-19s,-1s;top:64%}.ts-wisp-2{opacity:.12;width:clamp(16px,2.8vmin,26px);animation-duration:41s,3.8s;animation-delay:-30s,-2s;top:38%}@keyframes ts-drift{0%{left:-8%}to{left:106%}}@keyframes ts-float{0%,to{transform:translateY(0)rotate(-4deg)}50%{transform:translateY(-12px)rotate(4deg)}}.ts-card{flex-direction:column;align-items:center;gap:10px;width:min(100%,400px);margin-bottom:clamp(40px,10vh,110px);transition:transform .45s;display:flex;position:relative}.ts-title{letter-spacing:.01em;flex-direction:column;align-items:center;margin:0;font-size:clamp(46px,13vw,86px);font-style:italic;font-weight:700;line-height:.95;display:flex;position:relative}.ts-word{display:flex}.ts-word+.ts-word{letter-spacing:.08em;font-size:.82em}.ts-letter{background:linear-gradient(#fff3c4 10%,#f0cd62 55%,#c8922c 95%);color:#0000;filter:drop-shadow(0 3px #2a1a40)drop-shadow(0 0 18px #f0cd6259);animation:3s ease-in-out infinite ts-bob;animation-delay:calc(var(--i) * -.22s);-webkit-background-clip:text;background-clip:text;display:inline-block}@keyframes ts-bob{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-5px)rotate(-2deg)}}.ts-ghost{filter:drop-shadow(0 0 14px #dce6ff8c);width:.62em;animation:2.8s ease-in-out infinite ts-float;position:absolute;top:-.32em;right:-.55em}.ts-tag{text-align:center;color:#d9c9ef;opacity:.85;margin:4px 0 14px;font-size:clamp(14px,3.6vw,17px);font-style:italic}.blink{transform-box:fill-box;transform-origin:50%;animation:4.6s infinite ts-blink}@keyframes ts-blink{0%,92%,to{transform:scaleY(1)}95%{transform:scaleY(.1)}}.ts-cat{filter:drop-shadow(0 0 22px #ffd23f2e);width:clamp(110px,26vmin,190px);animation:7s ease-in-out infinite ts-peek;position:absolute;bottom:-6px;left:50%;transform:translate(-50%)}.ts-cat .ear-l,.ts-cat .ear-r{transform-box:fill-box;animation:5.5s ease-in-out infinite ts-ear}.ts-cat .ear-l{transform-origin:80% 100%}.ts-cat .ear-r{transform-origin:20% 100%;animation-delay:-2.7s}@keyframes ts-peek{0%,to{transform:translate(-50%,6%)}50%{transform:translate(-50%)}}@keyframes ts-ear{0%,86%,to{transform:rotate(0)}90%{transform:rotate(-12deg)}94%{transform:rotate(4deg)}}.ts-foot{right:max(14px, env(safe-area-inset-right));bottom:max(10px, env(safe-area-inset-bottom));color:#fff4dc66;align-items:center;gap:10px;font:11px system-ui,sans-serif;display:flex;position:absolute}.ts-dev-reset{font:inherit;color:#ffb3bf;cursor:pointer;background:#781e3259;border:1px solid #ff788c66;border-radius:6px;padding:3px 7px}.menu-buttons{flex-direction:column;gap:9px;width:100%;display:flex}.menu-btn{color:#fff4dc;cursor:pointer;touch-action:manipulation;background:linear-gradient(#3a2850,#241634);border:1px solid #e8c45a6b;border-radius:13px;outline:none;flex-direction:column;justify-content:center;align-items:center;width:100%;min-height:48px;padding:10px 18px;font:600 18px Georgia,Times New Roman,serif;transition:transform .12s,box-shadow .15s,border-color .15s,background .15s;display:flex;position:relative;box-shadow:inset 0 1px #ffffff14,0 3px 10px #0006}.menu-btn-label{align-items:center;gap:8px;display:inline-flex}.menu-btn-icon svg{width:24px;height:24px;display:block}.menu-btn-info{opacity:.75;margin-top:2px;font:12px system-ui,sans-serif}.ts-files .menu-card{width:min(420px,92vw)}.ts-file-row{align-items:stretch;gap:8px;display:flex}.ts-file-row .menu-btn{flex:1;min-height:58px}.menu-btn.empty .menu-btn-label{opacity:.7}.ts-file-erase{color:#ffb3bd;cursor:pointer;touch-action:manipulation;background:#ff506414;border:1px solid #ff6e7873;border-radius:13px;flex:none;width:44px;font-size:16px}.ts-file-erase:hover,.ts-file-erase:focus-visible{background:#ff506433;border-color:#ff7882f2}.menu-btn:before{content:"";opacity:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='%23e8c45a'%3E%3Cellipse cx='12' cy='16' rx='5.2' ry='4.4'/%3E%3Cellipse cx='5.2' cy='10.2' rx='2.2' ry='2.8'/%3E%3Cellipse cx='9.6' cy='6.4' rx='2.2' ry='2.9'/%3E%3Cellipse cx='14.4' cy='6.4' rx='2.2' ry='2.9'/%3E%3Cellipse cx='18.8' cy='10.2' rx='2.2' ry='2.8'/%3E%3C/g%3E%3C/svg%3E") 50%/contain no-repeat;width:18px;height:18px;margin-top:-9px;transition:opacity .15s,transform .15s;position:absolute;top:50%;left:14px;transform:translate(-6px)rotate(-18deg)}.menu-btn:hover,.menu-btn:focus-visible{border-color:#e8c45af2;transform:translateY(-1px);box-shadow:inset 0 1px #ffffff1a,0 0 14px #e8c45a59,0 3px 10px #0006}.menu-btn:hover:before,.menu-btn:focus-visible:before{opacity:1;transform:translate(0)rotate(-18deg)}.menu-btn:active{transform:translateY(1px)scale(.98)}.menu-btn.primary{color:#2a1a40;background:linear-gradient(#f6dd8a,#d9a93c);border-color:#f6dd8a;min-height:56px;font-size:20px}.menu-btn.primary:before{filter:brightness(.35)saturate(.6)}.menu-btn.primary:hover,.menu-btn.primary:focus-visible{box-shadow:0 0 22px #f6dd8a8c,0 3px 10px #0006}.menu-btn.danger{background:linear-gradient(#7a2a42,#4c1628);border-color:#ff8296b3}.menu-confirm,.pause-menu{background:#06030ca8}.settings-card{width:min(100%,360px)}.set-row{text-align:left;background:#3a285080;border:1px solid #e8c45a47;border-radius:13px;flex-direction:column;gap:4px;padding:10px 16px 8px;transition:border-color .15s,box-shadow .15s,opacity .15s;display:flex;box-shadow:inset 0 1px #ffffff0d}.set-row:focus-within{border-color:#e8c45af2;box-shadow:inset 0 1px #ffffff14,0 0 14px #e8c45a4d}.settings.muted .set-row{opacity:.5}.set-head{justify-content:space-between;align-items:baseline;display:flex}.set-name{font:600 17px Georgia,Times New Roman,serif}.set-value{color:#f0cd62;font-variant-numeric:tabular-nums;font:600 13px system-ui,sans-serif}.set-hint{color:#d9c9efb3;font:italic 12px Georgia,Times New Roman,serif}.menu-slider{appearance:none;cursor:pointer;touch-action:pan-y;background:0 0;outline:none;width:100%;height:30px;margin:0}.menu-slider::-webkit-slider-runnable-track{background:linear-gradient(90deg, #e8c45a 0 var(--fill,70%), #fff4dc24 var(--fill,70%) 100%);border-radius:4px;height:8px;box-shadow:inset 0 1px 2px #00000080}.menu-slider::-moz-range-track{background:#fff4dc24;border-radius:4px;height:8px;box-shadow:inset 0 1px 2px #00000080}.menu-slider::-moz-range-progress{background:#e8c45a;border-radius:4px;height:8px}.menu-slider::-webkit-slider-thumb{-webkit-appearance:none;background:radial-gradient(circle at 38% 34%,#fff2bf,#f0cd62 55%,#c99a2e);border:2px solid #2a1a40;border-radius:50%;width:24px;height:24px;margin-top:-8px;transition:transform .12s,box-shadow .15s;box-shadow:0 2px 6px #00000080}.menu-slider::-moz-range-thumb{background:radial-gradient(circle at 38% 34%,#fff2bf,#f0cd62 55%,#c99a2e);border:2px solid #2a1a40;border-radius:50%;width:20px;height:20px;box-shadow:0 2px 6px #00000080}.menu-slider:focus-visible::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 12px #f6dd8ab3,0 2px 6px #00000080}.menu-slider:active::-webkit-slider-thumb{transform:scale(1.12);box-shadow:0 0 12px #f6dd8ab3,0 2px 6px #00000080}.menu-slider:focus-visible::-moz-range-thumb{box-shadow:0 0 12px #f6dd8ab3,0 2px 6px #00000080}.menu-confirm{place-items:center;padding:16px;display:grid;position:absolute;inset:0}.menu-card{box-sizing:border-box;text-align:center;background:linear-gradient(#2e1f45,#1b1129);border:1px solid #e8c45a80;border-radius:18px;flex-direction:column;align-items:center;gap:8px;width:min(100%,340px);padding:24px 22px 20px;animation:.22s ease-out menu-pop;display:flex;position:relative;box-shadow:0 0 0 4px #2a1a4099,0 18px 50px #0009}@keyframes menu-pop{0%{opacity:0;transform:scale(.94)}}.menu-card-title{color:#f0cd62;text-shadow:0 2px #2a1a40;font-size:30px;font-style:italic;font-weight:700}.menu-card-sub{color:#d9c9ef;margin-bottom:10px;font-size:15px;font-style:italic;line-height:1.4}.pm-ghost{filter:drop-shadow(0 0 12px #dce6ff80);width:46px;animation:2.8s ease-in-out infinite ts-float;position:absolute;top:-30px;right:18px}.pm-note{color:#fff4dc73;margin-top:6px;font:11px system-ui,sans-serif}@media (max-aspect-ratio:4/5){.ts-cat{left:26%}}@media (max-height:520px){.ts-title{font-size:clamp(34px,11vh,58px)}.ts-tag{margin-bottom:6px}.ts-card{gap:6px;width:min(100%,360px);margin-bottom:0}.menu-buttons{gap:6px}.menu-btn{min-height:40px;padding:6px 14px;font-size:16px}.menu-btn.primary{min-height:46px;font-size:18px}.ts-cat{width:clamp(80px,22vh,120px);left:9%}.menu-card{padding:16px 18px 14px}.menu-card-title{font-size:24px}.set-row{gap:0;padding:6px 14px 4px}.set-hint{display:none}}@media (prefers-reduced-motion:reduce){.title-screen *,.pause-menu *{animation:none!important}}.dev-toast{z-index:20;color:#9dff5f;pointer-events:none;background:#000c;border-radius:8px;padding:8px 14px;font:13px ui-monospace,Consolas,monospace;position:fixed;bottom:60px;left:50%;transform:translate(-50%)}.minimap{pointer-events:auto;width:210px;margin-top:8px}.minimap-head{color:#e8dcc2;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;background:#ffffff0d;border:0;border-radius:6px;justify-content:space-between;align-items:center;width:100%;padding:3px 6px;font:700 11px system-ui,sans-serif;display:flex}.minimap-chevron{transition:transform .15s}.minimap.collapsed .minimap-chevron{transform:rotate(-90deg)}.minimap-canvas{background:#08050ebf;border:1px solid #e8c45a59;border-radius:8px;width:210px;height:140px;margin-top:4px;display:block}.minimap.collapsed .minimap-canvas,#hud.touch-mode .minimap{display:none}@media (max-width:760px),(max-height:520px){.minimap{display:none}}.mapview{z-index:5;touch-action:none;background:#06030cb8;place-items:center;display:grid;position:fixed;inset:0}.mapview.hidden{display:none}.mapview-device{background:linear-gradient(#3a2850,#241634);border:2px solid #c9a24a;border-radius:18px;flex-direction:column;width:min(860px,94vw);height:min(600px,90vh);display:flex;overflow:hidden;box-shadow:0 0 0 6px #1a1024,0 18px 60px #000000b3}.mapview-header{border-bottom:1px solid #c9a24a66;justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.mapview-title{color:#fff4dc;align-items:center;gap:10px;font:700 20px Georgia,serif;display:inline-flex}.mapview-icon svg{width:26px;height:26px;display:block}.mapview-floor{color:#ffe9a8;background:#e8c45a33;border:1px solid #e8c45a99;border-radius:6px;padding:2px 8px;font:700 15px system-ui,sans-serif}.mapview-close{color:#fff4dc;cursor:pointer;background:#ffffff0f;border:1px solid #e8c45a73;border-radius:8px;width:32px;height:32px;font-size:16px}.mapview-stage{cursor:grab;background:radial-gradient(at 50% 40%,#1f1630,#0b0814 80%);border:1px solid #e8c45a40;border-radius:12px;flex:1;min-height:0;margin:10px;position:relative;overflow:hidden}.mapview-floors{z-index:1;cursor:default;flex-direction:column;gap:6px;display:flex;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.mapview-floors.hidden{display:none}.mapview-floors button{color:#e8dcc2;cursor:pointer;touch-action:manipulation;background:linear-gradient(#3a2850,#241634);border:1px solid #e8c45a73;border-radius:9px;min-width:46px;height:38px;padding:0 8px;font:700 15px system-ui,sans-serif;position:relative}.mapview-floors button.zone{font-size:12px}.mapview-floors button.zone-start{margin-top:10px}.mapview-floors button:hover{border-color:#e8c45ae6}.mapview-floors button.active{color:#241634;background:linear-gradient(#e8c45a,#b8902e);border-color:#ffe9a8}.mapview-floors button.cat-here:after{content:"";background:#ffd23f;border-radius:50%;width:7px;height:7px;position:absolute;top:4px;right:4px;box-shadow:0 0 6px #ffd23f}.mapview-floors button.active.cat-here:after{box-shadow:none;background:#241634}.mapview-tip{z-index:2;color:#fff4dc;white-space:nowrap;pointer-events:none;background:#1a1024eb;border:1px solid #e8c45ab3;border-radius:8px;padding:4px 10px;font:700 14px Georgia,serif;position:absolute;top:0;left:0;box-shadow:0 4px 14px #00000080}.mapview-tip-status{letter-spacing:.06em;text-transform:uppercase;margin-top:1px;font:700 11px system-ui,sans-serif;display:block}.mapview-tip-status.cleared{color:#ffd23f}.mapview-tip-status.haunted{color:#c9a8ff}.mapview-tip.hidden{display:none}.mapview-stage:active{cursor:grabbing}.mapview-stage canvas{display:block}.mapview-controls{align-items:center;gap:8px;padding:0 14px 12px;display:flex}.mapview-controls button{color:#fff4dc;cursor:pointer;touch-action:manipulation;background:linear-gradient(#3a2850,#241634);border:1px solid #e8c45a73;border-radius:9px;width:40px;height:34px;font:700 18px system-ui,sans-serif}.mapview-controls button:hover{border-color:#e8c45ae6}.mapview-hint{color:#fff4dc80;margin-left:auto;font:12px system-ui,sans-serif}@media (max-width:640px){.mapview-hint{display:none}}
