@font-face{font-family:Castle;src:url('./assets/castle-pixel.ttf') format('truetype');font-display:swap}
:root{color-scheme:dark;--bg:#020204;--ink:#f1dfb0;--muted:#a99bb5;--gold:#edbe63;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--ui-left:max(14px,env(safe-area-inset-left,0px));--ui-right:max(14px,env(safe-area-inset-right,0px));--controls-bottom:calc(max(14px,var(--safe-bottom)) + 18px)}
*{box-sizing:border-box}
html,body{width:100%;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;background:var(--bg)}
body{color:var(--ink);font-family:'Courier New',monospace}
button,a{-webkit-tap-highlight-color:transparent}
button{font:inherit;cursor:pointer}
button:focus-visible,a:focus-visible{outline:2px solid #ffe0a0;outline-offset:5px}
.app{position:fixed;inset:0;width:100%;height:100%;height:100dvh;margin:0;padding:0}
.game{position:absolute;inset:0;width:100%;height:100%;min-height:0;overflow:hidden;background:#020204;border:0;outline:0;box-shadow:none;user-select:none;-webkit-user-select:none;image-rendering:pixelated}
canvas{display:block;width:100%;height:100%;touch-action:none;user-select:none;image-rendering:pixelated}
.hud{position:absolute;top:max(14px,var(--safe-top));left:var(--ui-left);right:var(--ui-right);display:flex;justify-content:space-between;align-items:start;z-index:4;pointer-events:none}
.hud button{pointer-events:auto}
.record{display:flex;flex-direction:column;gap:5px}
.record>span{font-family:Castle,monospace;font-size:10px;letter-spacing:.5px;color:#ad99af}
.record strong{font-family:Castle,monospace;font-size:21px;font-weight:400;font-variant-numeric:tabular-nums;color:#e8c170;text-shadow:2px 2px #0b0812}
.record strong:before{content:'';display:inline-block;background:url('./assets/mouse.png') center/contain no-repeat;width:15px;height:15px;margin-right:7px;image-rendering:pixelated}
.torch-level{width:92px;padding-top:3px;margin:0 5px}
.torch-level>span{display:flex;justify-content:space-between;color:#ac8c79;font-size:7px;gap:5px;white-space:nowrap}
.torch-level em{font-style:normal}
.torch-level b{color:#f2bc65;font-weight:400}
.torch-meter{height:8px;padding:1px;margin-top:7px;border:1px solid #6a4930;background:#151018}
.torch-meter i{display:block;height:4px;width:75%;background:#e8a444;box-shadow:inset 0 1px #ffe4a0}
.tools{display:flex;gap:9px}
.icon-button{width:32px;height:32px;background:#241d30;border:2px solid #6b576a;box-shadow:2px 2px #0d0b15;display:grid;place-items:center;color:#ddc8a1}
.icon-button svg{width:14px;height:14px}
.icon-button:disabled{opacity:.35;cursor:default}
.overlay{position:absolute;inset:0;z-index:3;display:flex;flex-direction:column;align-items:center;overflow-y:auto;touch-action:pan-y;padding:calc(max(14px,var(--safe-top)) + 65px) max(24px,env(safe-area-inset-right)) max(35px,var(--safe-bottom)) max(24px,env(safe-area-inset-left));background:linear-gradient(#14101c32,#14101c95 25%,#14101cdd 65%,#14101ce8)}
.intro,.result,.paused{width:100%;max-width:340px;margin:auto;text-align:center;flex-shrink:0}
.eyebrow{font-family:Castle,monospace;font-size:9px;line-height:1.6;letter-spacing:.6px;color:#bea6bc;display:flex;justify-content:center;align-items:center;gap:7px}
.eyebrow span{width:4px;height:4px;background:#d99a32;box-shadow:0 0 8px #e39944}
.hero-king{width:51px;height:75px;object-fit:contain;image-rendering:pixelated;margin:16px 0 0;filter:drop-shadow(3px 3px 0 #08060e)}
h1{font-family:Castle,monospace;font-size:40px;line-height:1.17;letter-spacing:1px;margin:12px 0 18px;font-weight:400;color:#edc373;text-shadow:3px 3px #0e0a13,0 0 22px #d99a3220}
p{font-size:12px;line-height:1.7;color:#c5b6cb;margin:0 0 20px}
.rules{display:flex;justify-content:center;gap:19px;margin:23px 0;font-size:10px;color:#dac9b4}
.rules span{display:flex;align-items:center;gap:7px}
.rules img{width:20px;height:20px;object-fit:contain;image-rendering:pixelated}
.rules img.mouse{width:28px}
.primary{width:100%;border:2px solid #ffe0a0;border-right-color:#866331;border-bottom-color:#866331;padding:17px 15px;background:#d3a551;color:#241a20;font-family:Castle,monospace;font-size:12px;text-align:left;display:flex;align-items:center;justify-content:space-between;box-shadow:0 4px 0 #4b3233,4px 0 0 #17111e,-4px 0 0 #17111e}
.primary span{font-family:monospace;font-size:20px;line-height:12px}
.primary:hover{background:#efc371}
.primary:active{transform:translateY(3px);box-shadow:none}
.micro{font-size:8px;color:#9e8da7;margin-top:18px;line-height:1.8}
.secondary{border:0;background:none;font-size:10px;color:#c0a9c0;padding:23px 5px 0;text-decoration:underline;text-underline-offset:4px}
.install-help{display:block;margin:0 auto;font-size:9px}
h2{font-family:Castle,monospace;font-size:27px;line-height:1.35;margin:25px 0 20px;font-weight:400;color:#edc373;text-shadow:3px 3px #08060d}
#resultTitle{font-size:18px;line-height:1.7;max-width:270px;margin:18px auto 12px}
.final-score{font-family:Castle,monospace;font-size:62px;line-height:1.3;color:#edc373;margin:15px 0 0;text-shadow:4px 4px #4a3037}
.result-coin{width:28px;height:28px;image-rendering:pixelated;margin-top:6px}
.result p{font-size:11px;margin-bottom:20px}
.live-hint{position:absolute;bottom:max(9px,var(--safe-bottom));left:var(--ui-left);right:var(--ui-right);text-align:center;font-size:7px;letter-spacing:.15px;color:#ad96b2;pointer-events:none}
.point-toast{display:none}
.swing-controls{position:absolute;left:var(--ui-left);bottom:var(--controls-bottom);width:min(360px,calc(100% - var(--ui-left) - var(--ui-right) - 104px));z-index:4;display:flex;align-items:center;flex-direction:column;gap:8px}
.swing-button{width:100%;min-height:76px;display:flex;align-items:center;justify-content:center;gap:12px;padding:20px 14px;background:#493024;border:2px solid #c68a45;border-right-color:#725032;border-bottom-color:#725032;color:#ffda91;box-shadow:0 3px 0 #140e15;font-family:Castle,monospace;font-size:15px;touch-action:manipulation}
.swing-button svg{width:27px;height:27px;flex:none}
.swing-button:active:not(:disabled){transform:translateY(2px);box-shadow:0 1px 0 #140e15}
.swing-button:disabled{opacity:.38;cursor:default}
.swing-button[aria-busy=true]{opacity:.6;border-color:#796047;color:#baa17a}
.swing-controls>span{font:8px/10px 'Courier New',monospace;letter-spacing:.35px;color:#b79776;white-space:nowrap}
.joystick-controls{position:absolute;left:auto;right:var(--ui-right);bottom:calc(var(--controls-bottom) + 2px);z-index:4;display:flex;align-items:center;flex-direction:column;gap:8px;pointer-events:none;opacity:.36}
.joystick{width:86px;height:86px;border:2px solid #9a754b;background:#261b18d9;position:relative;border-radius:50%;box-shadow:inset 0 0 0 4px #17101abd,0 3px 0 #0a0712;touch-action:none;user-select:none;pointer-events:none}
.joystick:focus-visible{outline:2px solid #edc373;outline-offset:4px}
.joy-axis{position:absolute;background:#8a684c30;pointer-events:none}
.joy-axis.horizontal{height:1px;left:8px;right:8px;top:40px}
.joy-axis.vertical{width:1px;top:8px;bottom:8px;left:40px}
.stick{position:absolute;left:23px;top:23px;width:36px;height:36px;border:2px solid #ca9a59;border-bottom-color:#6b4930;border-right-color:#6b4930;border-radius:50%;background:#715239;box-shadow:0 3px 0 #130e13;pointer-events:none;will-change:transform}
.stick span{position:absolute;inset:10px;border:1px solid #af8653;border-radius:50%;background:#926d43}
.joystick-controls>span{font:7px/10px 'Courier New',monospace;color:#b79776;letter-spacing:.7px}
dialog{background:#211a2b;border:3px solid #9e8057;padding:38px 25px 25px;width:min(90%,390px);max-height:calc(100dvh - 40px);overflow:auto;color:var(--ink);box-shadow:5px 5px #09070f}
dialog::backdrop{background:#080510c9}
dialog h2{font-size:22px}
dialog .eyebrow{justify-content:flex-start}
dialog p{font-size:12px}
dialog .micro{font-size:10px;margin-bottom:0}
.close{position:absolute;right:13px;top:8px;border:0;background:none;color:var(--ink);font-size:26px}
.sr-only{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0,0,0,0)}
[hidden]{display:none!important}
@media(max-width:350px){.torch-level{width:72px}.torch-level>span{font-size:6px}.record strong{font-size:18px}.record>span{font-size:9px}.primary{font-size:10px}.rules{gap:10px}.swing-button{min-height:72px;padding:18px 10px;font-size:13px;gap:8px}.swing-controls>span{font-size:7px}.joystick{width:76px;height:76px}.stick{left:18px;top:18px}.joy-axis.horizontal{top:35px}.joy-axis.vertical{left:35px}}
@media(max-height:740px){.hero-king{width:34px;height:50px;margin-top:10px}h1{font-size:32px;margin:10px 0 12px}p{font-size:11px;margin-bottom:12px}.rules{margin:17px 0}.primary{padding:15px 14px;font-size:11px}.micro{margin-top:13px}}
@media(max-height:620px){.hero-king{display:none}h1{font-size:30px;margin:12px 0}.rules{margin:12px 0}.intro p{font-size:10px;line-height:1.6}.intro .micro{font-size:7px}.swing-button{min-height:70px}#resultTitle{font-size:15px;margin-top:12px}.final-score{font-size:46px}.result-coin{width:18px;height:18px}.result p{margin-bottom:15px}.joystick{width:76px;height:76px}.stick{left:18px;top:18px}.joy-axis.horizontal{top:35px}.joy-axis.vertical{left:35px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto}}

/* Guest name gate and the shared podium retain the castle's pixel palette. */
.profile-panel{width:100%;max-width:340px;margin:auto;text-align:center;flex-shrink:0}
.profile-panel h1{font-size:clamp(21px,6vw,29px);line-height:1.5;margin:18px 0 26px}
#playerForm{text-align:left}.profile-panel label{display:block;font-size:12px;margin-bottom:9px;color:#e9d5ad}
#playerInput{display:block;width:100%;min-height:56px;border:2px solid #8c704c;background:#17111d;color:#f3e2bd;padding:13px 14px;font:18px 'Courier New',monospace;border-radius:0;user-select:text;-webkit-user-select:text;outline-offset:3px}
#playerInput:focus{outline:2px solid #e9bb67;border-color:#f4d48b}#playerInput::placeholder{color:#857589}
.form-message{font-size:11px;line-height:1.6;min-height:18px;color:#e3b29a;margin:10px 0 13px}.primary:disabled{opacity:.5;cursor:default}.primary:disabled:active{transform:none}
.player-welcome{font-size:11px;line-height:1.8;color:#b9a6bb;margin:12px 0}.player-welcome strong{color:#e7c181;overflow-wrap:anywhere}.player-welcome .secondary{display:block;margin:0 auto;padding:5px 8px;font-size:9px}
#startError:empty{display:none}.overlay[data-panel=result]{padding-top:calc(max(14px,var(--safe-top)) + 60px)}
.result{max-width:620px;margin:0 auto}.result-body{max-width:340px;margin:20px auto 0}.leaderboard{width:100%;padding:12px 0 0;border-bottom:1px solid #8f70472b}
.leaderboard h3{font:10px/1.6 Castle,monospace;letter-spacing:.3px;color:#bca4b7;margin:0 0 14px}
.ranking-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}.rank-card{display:flex;flex-direction:column;align-items:center;min-width:0;background:#1b1421d9;border:1px solid #76614366;padding:12px 5px 10px;box-shadow:inset 0 1px #ffffff05}
.rank-card.gold{color:#ecc567;border-color:#ab813e99}.rank-card.silver{color:#c3cbd6}.rank-card.bronze{color:#c78b5f}
.rank-star{width:29px;height:29px;filter:drop-shadow(0 2px #08060c)}.rank-place{font-size:7px;color:#ad97ac;margin:7px 0}.rank-name{display:block;font:700 12px/1.5 'Courier New',monospace;max-width:100%;width:100%;padding:0 3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#e6d7bd}.rank-score{font:20px/1.3 Castle,monospace;margin:6px 0 0}.rank-card.is-you{background:#30231eeb;box-shadow:inset 0 -2px #b99854}
.ranking-status{font:9px/1.7 'Courier New',monospace;color:#a894aa;margin:9px 0 12px;min-height:15px}.leaderboard .secondary{padding:0 8px 13px;font-size:10px}
@media(max-height:650px){.rank-card{padding:8px 4px}.rank-star{width:23px;height:23px}.rank-place{margin:4px 0}.rank-score{font-size:16px}.leaderboard h3{font-size:8px;margin-bottom:9px}.result-body{margin-top:8px}.result .final-score{margin:6px 0 0}.result #resultTitle{margin:7px auto}.result .result-coin{display:none}.profile-panel h1{font-size:23px;margin:15px 0 22px}}
@media(min-width:650px) and (max-height:500px){.result{display:grid;grid-template-columns:1fr 1fr;gap:28px;align-items:center}.result-body{width:100%;margin:0 auto}.ranking-grid{gap:7px}.leaderboard{align-self:start;margin-top:8px}.overlay[data-panel=result]{padding-top:calc(max(14px,var(--safe-top)) + 65px)}.rank-name{font-size:11px}}

.hud-ranking{list-style:none;margin:5px 0 0;padding:0;display:grid;gap:5px;max-width:min(135px,30vw);pointer-events:none;text-shadow:0 1px 3px #000,0 0 4px #000}
.hud-rank{display:flex;align-items:center;gap:5px;min-width:0}.hud-rank svg{display:block;width:11px;height:11px;flex:none;filter:drop-shadow(0 1px 1px #000)}
.hud-rank.gold{color:#ecc567}.hud-rank.silver{color:#c3cbd6}.hud-rank.bronze{color:#c78b5f}
.hud-name{display:block;min-width:0;max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:10px/1.4 'Courier New',monospace;color:#e3d4bc}
@media(max-width:350px){.hud-name{font-size:9px}.hud-ranking{gap:4px}.hud-rank svg{width:10px;height:10px}}
