:root{--ember:#ff7a30;--ember-hot:#ffb36b;--ink:#f4ecdf;--ink-dim:#cfc4b3;--panel:#120e0cb8;--line:#ffce9647;--serif:"Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;--sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif}*{box-sizing:border-box}html,body{height:100%;color:var(--ink);font-family:var(--sans);background:#0d0b0a;margin:0;overflow:hidden}canvas#game{width:100%;height:100%;display:block;position:fixed;inset:0}.hidden{display:none!important}kbd{font:600 11px var(--sans);border:1px solid var(--line);color:var(--ink);background:#ffffff0f;border-bottom-width:2px;border-radius:4px;padding:2px 6px}.screen{z-index:10;place-items:center;padding:16px;display:grid;position:fixed;inset:0}#pause,#dead{cursor:pointer;background:#08060573}#dead{cursor:default;background:radial-gradient(#3c000040,#0a0000cc)}#victory{background:radial-gradient(at 50% 40%,#28140559,#080605d9)}.card{text-align:center;background:var(--panel);border:1px solid var(--line);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:14px;width:100%;max-width:560px;padding:36px 32px;box-shadow:0 20px 80px #00000080}.card.small{max-width:340px;padding:26px}h1,h2{font-family:var(--serif);letter-spacing:.06em;margin:0 0 8px;font-weight:600}h1{background:linear-gradient(180deg, #fff3de 20%, var(--ember-hot) 60%, var(--ember));color:#0000;text-shadow:0 0 40px #ff7a3040;-webkit-background-clip:text;background-clip:text;font-size:clamp(40px,8vw,64px)}#victory h1{font-size:clamp(32px,6vw,48px)}h2{font-size:30px}.sub{font-family:var(--serif);color:var(--ink-dim);margin:0 0 22px;font-size:17px;font-style:italic}.card p{color:var(--ink-dim);line-height:1.55}.card a:not(.btn){color:var(--ember-hot)}.card strong{color:var(--ink)}button,.btn{font:600 16px var(--sans);color:#1b0f06;background:linear-gradient(180deg, var(--ember-hot), var(--ember));cursor:pointer;border:0;border-radius:999px;padding:12px 34px;text-decoration:none;transition:transform .12s,box-shadow .12s;display:inline-block;box-shadow:0 6px 30px #ff7a3059}button:hover:not(:disabled),.btn:hover{transform:translateY(-1px);box-shadow:0 8px 36px #ff7a3080}button:disabled{opacity:.6;cursor:wait}button.ghost{color:var(--ink);border:1px solid var(--line);box-shadow:none;background:0 0}.row{flex-wrap:wrap;justify-content:center;gap:12px;margin-top:18px;display:flex}pre{border:1px solid var(--line);text-align:left;background:#00000073;border-radius:8px;padding:12px;overflow-x:auto}pre code{color:var(--ember-hot);font:14px ui-monospace,SF Mono,Menlo,monospace}#hud{pointer-events:none;z-index:5;font-family:var(--serif);position:fixed;inset:0}#bars{gap:6px;width:min(300px,24vw);display:grid;position:absolute;top:22px;left:24px}.bar{background:#00000080;border:1px solid #ffffff2e;border-radius:3px;height:12px;position:relative;overflow:hidden}.bar i{transform-origin:0;transition:transform .15s;position:absolute;inset:0}.bar.hp i{background:linear-gradient(#e45a4a,#a3231b)}.bar.st{width:80%;height:7px}.bar.st i{background:linear-gradient(#d7e37a,#8faa2d)}#compass{border-bottom:1px solid #ffffff40;width:min(460px,38vw);height:30px;position:absolute;top:18px;left:50%;overflow:hidden;transform:translate(-50%);-webkit-mask-image:linear-gradient(90deg,#0000,#000 18% 82%,#0000);mask-image:linear-gradient(90deg,#0000,#000 18% 82%,#0000)}#compass-strip{white-space:nowrap;letter-spacing:.1em;color:var(--ink);text-shadow:0 1px 3px #000;font-size:14px;position:absolute;top:4px;left:0}#compass-strip span{position:absolute;transform:translate(-50%)}#compass-strip span.minor{color:#ffffff73;font-size:11px;top:2px}#compass-marker{background:var(--ember);width:12px;height:12px;box-shadow:0 0 10px var(--ember);position:absolute;top:3px;transform:translate(-50%)rotate(45deg)}#compass-dist{font:12px var(--sans);color:var(--ink-dim);position:absolute;top:34px;left:50%;transform:translate(-50%)}#shards{gap:8px;display:flex;position:absolute;top:20px;right:24px}#shards span{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);background:#ffffff26;width:16px;height:26px}#shards span.on{background:linear-gradient(180deg, var(--ember-hot), var(--ember));filter:drop-shadow(0 0 6px var(--ember))}#toast{text-align:center;letter-spacing:.08em;color:#fff4e3;text-shadow:0 2px 18px #000c;opacity:0;white-space:nowrap;font-size:clamp(22px,3.4vw,38px);transition:opacity .8s;position:absolute;top:22%;left:50%;transform:translate(-50%)}#toast.show{opacity:1}#toast small{letter-spacing:.2em;text-transform:uppercase;color:var(--ember-hot);margin-bottom:6px;font-size:.45em;display:block}#boss{text-align:center;width:min(620px,80vw);position:absolute;bottom:48px;left:50%;transform:translate(-50%)}#boss-name{letter-spacing:.12em;text-shadow:0 2px 8px #000;margin-bottom:6px;font-size:18px}#boss .bar{height:14px}#boss .bar i{background:linear-gradient(#ff9a4a,#c8421a)}#boss .bar b{transform-origin:0;background:#ffffff59;transition:transform .6s .25s;position:absolute;inset:0}#hint{text-align:center;max-width:92vw;font:13px var(--sans);color:var(--ink-dim);text-shadow:0 1px 4px #000;position:absolute;bottom:22px;left:50%;transform:translate(-50%)}#vignette{opacity:0;background:radial-gradient(#0000 55%,#aa00008c);transition:opacity .25s;position:absolute;inset:0}@media (max-width:720px){#bars{width:34vw;top:16px;left:16px}#compass{width:70vw;top:52px}#compass-dist{top:32px}#shards{top:16px;right:16px}}#boss .bar i{z-index:1}.screen{overflow-y:auto}@media (max-height:640px){.card{padding:20px 22px}h1{font-size:40px}.sub{margin-bottom:12px}}#sound{z-index:20;gap:8px;display:flex;position:fixed;top:58px;right:20px}button.icon{font:600 12px var(--sans);color:var(--ink);background:var(--panel);border:1px solid var(--line);box-shadow:none;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border-radius:999px;align-items:center;gap:6px;padding:7px 12px 7px 10px;display:inline-flex}button.icon:hover:not(:disabled){box-shadow:none;border-color:var(--ember-hot);transform:none}button.icon:focus-visible{outline:2px solid var(--ember-hot);outline-offset:2px}button.icon svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}button.icon .slash{stroke:var(--ember);stroke-width:2.2px;display:none}button.icon[aria-pressed=false]{color:var(--ink-dim);opacity:.8}button.icon[aria-pressed=false] .slash{display:inline}@media (max-width:720px){button.icon span{display:none}#sound{top:50px;right:12px}}label.icon.select{font:600 12px var(--sans);color:var(--ink);background:var(--panel);border:1px solid var(--line);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:0 4px 0 10px;display:inline-flex}label.icon.select:hover,label.icon.select:focus-within{border-color:var(--ember-hot)}label.icon.select svg{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linejoin:round;width:16px;height:16px}label.icon.select span:after{content:":"}label.icon.select select{appearance:none;font:inherit;color:inherit;cursor:pointer;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23f4ecdf' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E") right 8px center/9px 6px no-repeat;border:0;border-radius:999px;padding:7px 24px 7px 0}label.icon.select select:focus-visible{outline:2px solid var(--ember-hot);outline-offset:2px}label.icon.select option{color:#1a1411;background:#f4ecdf}@media (max-width:720px){label.icon.select span{display:none}}.title{padding:0;display:block;overflow:hidden}.title-shade{pointer-events:none;background:radial-gradient(120% 90% at 0 100%,#090705d1 0%,#09070580 38%,#09070500 68%),radial-gradient(60% 45% at 100% 100%,#0907059e 0%,#09070500 70%),linear-gradient(#09070559,#09070500 22%);position:absolute;inset:0}.title-block{width:min(600px,100vw - 48px);color:var(--ink);position:absolute;bottom:clamp(32px,11vh,128px);left:clamp(24px,6.5vw,104px)}.eyebrow{font:600 11px/1 var(--sans);letter-spacing:.24em;text-transform:uppercase;color:#ffc496d1;align-items:center;gap:10px;margin:0 0 18px;display:flex}.spark{background:var(--ember);width:7px;height:7px;transform:rotate(45deg);box-shadow:0 0 10px 1px #ff7a30cc}#title h1.wordmark{letter-spacing:-.012em;-webkit-text-fill-color:currentColor;color:#f8eedf;text-shadow:0 2px 28px #00000073;background:0 0;margin:0;font-family:Iowan Old Style,Palatino Linotype,Palatino,Book Antiqua,Georgia,serif;font-size:clamp(56px,9.5vw,118px);font-weight:500;line-height:.92}.tagline{max-width:34ch;font:italic 400 clamp(17px, 1.6vw, 20px)/1.45 var(--serif);color:#f4ecdfc7;margin:22px 0 0;padding-top:20px;position:relative}.tagline:before{content:"";background:linear-gradient(to right, var(--ember), #ff7a3000);width:44px;height:1px;position:absolute;top:0;left:0}.title-actions{flex-wrap:wrap;align-items:flex-start;gap:22px;margin-top:30px;display:flex}.play{font:600 15px/1 var(--sans);letter-spacing:.01em;color:#1c1007;background:linear-gradient(#ffa25e,#ff7a30);border-radius:999px;align-items:center;gap:12px;padding:14px 22px 14px 26px;display:inline-flex;box-shadow:0 10px 34px #ff6e2857,inset 0 1px #ffffff59}.play-arrow{transition:transform .18s;display:inline-block}.play:hover:not(:disabled){transform:none;box-shadow:0 12px 40px #ff6e2880,inset 0 1px #ffffff59}.play:hover:not(:disabled) .play-arrow{transform:translate(4px)}.play:focus-visible{outline-offset:3px;outline:2px solid #ffd1ad}.play:disabled{cursor:progress;opacity:1;color:#f4ecdfcc;background:#ffffff0f;box-shadow:inset 0 0 0 1px #ffc49647}.play:disabled .play-arrow{animation:1.2s ease-in-out infinite ember-pulse}@keyframes ember-pulse{50%{opacity:.25}}.controls{font:13px/1.4 var(--sans);color:#f4ecdfb8}.controls summary{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:14px 2px;list-style:none;display:inline-flex}.controls summary::-webkit-details-marker{display:none}.controls summary:after{content:"+";color:var(--ember-hot);font-size:15px;transition:transform .2s}.controls[open] summary:after{transform:rotate(45deg)}.controls summary:hover{color:var(--ink)}.controls summary:focus-visible{outline-offset:2px;border-radius:4px;outline:2px solid #ffd1ad}.controls-list{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0e0b099e;border-radius:12px;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 26px;width:min(460px,100vw - 48px);margin:4px 0 0;padding:16px 18px;display:grid;box-shadow:inset 0 0 0 1px #ffce9624}.controls-list div{justify-content:space-between;align-items:center;gap:12px;display:flex}.controls-list dt{gap:4px;display:flex}.controls-list dd{text-align:right;margin:0}.title kbd{text-align:center;color:#f5ead9;background:#ffffff12;border:1px solid #ffffff29;border-bottom-width:2px;border-radius:5px;min-width:22px;padding:5px 6px 4px;font:600 11px/1 ui-monospace,SF Mono,Menlo,monospace}.touch-note{font:13px var(--sans);color:var(--ember-hot);margin:16px 0 0;display:none}@media (hover:none) and (pointer:coarse){.touch-note{display:block}}.title-credit{text-align:right;max-width:330px;font:12px/1.55 var(--sans);color:#f4ecdf8f;position:absolute;bottom:clamp(18px,3.5vh,36px);right:clamp(20px,3.5vw,48px)}.title-credit p{margin:0 0 6px}.title-credit a{color:#ffc496e6;letter-spacing:.02em;font-weight:600;text-decoration:none}.title-credit a:hover{color:#ffd1ad;text-underline-offset:3px;text-decoration:underline}.title-block>*,.title-credit{animation:.9s cubic-bezier(.2,.7,.2,1) both rise}.title-block>.wordmark{animation-delay:80ms}.title-block>.tagline{animation-delay:.18s}.title-block>.title-actions{animation-delay:.3s}.title-credit{animation-delay:.5s}@keyframes rise{0%{opacity:0;transform:translateY(14px)}}@media (prefers-reduced-motion:reduce){.title-block>*,.title-credit,.play:disabled .play-arrow{animation:none}}@media (max-width:720px){.title-shade{background:linear-gradient(#09070500 38%,#09070599 66%,#090705e0 100%),linear-gradient(#09070559,#09070500 18%)}.eyebrow{letter-spacing:.16em;font-size:10.5px}.title-block{width:auto;bottom:112px;left:20px;right:20px}.title-credit{text-align:left;max-width:none;left:20px;right:20px}.controls-list{grid-template-columns:1fr}}@media (max-height:640px){#title h1.wordmark{font-size:52px}.tagline{margin-top:14px;padding-top:14px}.title-actions{margin-top:18px}}:root{--t-safe-l:env(safe-area-inset-left,0px);--t-safe-r:env(safe-area-inset-right,0px);--t-safe-t:env(safe-area-inset-top,0px);--t-safe-b:env(safe-area-inset-bottom,0px);--t-attack:92px;--t-small:64px;--t-arc:106px;--t-ring:124px}canvas#game{touch-action:none}body.touch{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}#touch{z-index:6;touch-action:none;display:none;position:fixed;inset:0}#touch.on{display:block}.t-stick{left:calc(var(--t-safe-l) + 26px + var(--t-ring) / 2);top:calc(100% - var(--t-safe-b) - 26px - var(--t-ring) / 2);opacity:.32;pointer-events:none;width:0;height:0;transition:opacity .35s;position:absolute}.t-stick.active{opacity:1;transition:opacity 80ms}.t-ring,.t-knob{border-radius:50%;position:absolute;top:0;left:0;transform:translate(-50%,-50%)}.t-ring{width:var(--t-ring);height:var(--t-ring);background:radial-gradient(circle,#0e0a080d 40%,#0e0a0852 100%);transition:box-shadow .18s;box-shadow:inset 0 0 0 1.5px #ffce9657,0 0 0 1px #0000002e}.t-ring:before{content:"";border:1px dashed #ffce9624;border-radius:50%;position:absolute;inset:22%}.t-knob{background:radial-gradient(circle at 40% 35%,#ffc48c8c,#ff7a3047 60%,#3c180866);width:52px;height:52px;box-shadow:0 0 0 1.5px #ffd6aa99,0 4px 14px #00000059}.t-stick.active .t-knob{box-shadow:0 0 0 1.5px #ffe0bed9,0 0 18px #ff7a3073,0 4px 14px #00000059}.t-stick.sprint .t-ring{box-shadow:inset 0 0 0 2px #ff9650d9,0 0 22px #ff7a3066}.t-buttons{right:calc(var(--t-safe-r) + 24px + var(--t-attack) / 2);bottom:calc(var(--t-safe-b) + 22px + var(--t-attack) / 2);width:0;height:0;position:absolute}.t-btn{width:var(--t-small);height:var(--t-small);color:#f6e9d6;font:600 8.5px/1 var(--serif);letter-spacing:.16em;text-transform:uppercase;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:radial-gradient(circle at 50% 35%,#3a261a80,#0e0a088f);border-radius:50%;align-content:center;place-items:center;gap:1px;transition:transform 90ms,background .12s,box-shadow .12s;display:grid;position:absolute;top:0;left:0;transform:translate(-50%,-50%);box-shadow:inset 0 0 0 1.5px #ffce9666,0 6px 18px #00000047}.t-btn svg{width:calc(var(--t-small) * .4);height:calc(var(--t-small) * .4);fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 1px 2px #00000080)}.t-btn svg .fill{fill:#ffc89638}.t-btn span{opacity:.72;margin-top:2px}.t-attack{width:var(--t-attack);height:var(--t-attack);color:#fff1dc;background:radial-gradient(circle at 50% 30%,#ff8a4057,#28120894 72%);font-size:9.5px;box-shadow:inset 0 0 0 1.5px #ffaa6ea6,0 0 22px #ff7a302e,0 6px 20px #0000004d}.t-attack svg{width:calc(var(--t-attack) * .4);height:calc(var(--t-attack) * .4);stroke-width:1.5px}.t-dodge{left:calc(var(--t-arc) * -.966);top:calc(var(--t-arc) * -.259)}.t-jump{left:calc(var(--t-arc) * -.259);top:calc(var(--t-arc) * -.966)}.t-btn.down{color:#fff;background:radial-gradient(circle at 50% 40%,#ffa05a9e,#782c0c99);transform:translate(-50%,-50%)scale(.92);box-shadow:inset 0 0 0 2px #ffd6aaf2,0 0 26px #ff7a3099}#rotate-hint{z-index:21;left:50%;top:calc(var(--t-safe-t) + 108px);white-space:nowrap;font:italic 13px var(--serif);color:#f4ecdfe6;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0e0b09a8;border-radius:999px;align-items:center;gap:10px;padding:8px 8px 8px 14px;animation:.6s ease-out .8s both rotate-in;display:none;position:fixed;transform:translate(-50%);box-shadow:inset 0 0 0 1px #ffce963d}#rotate-hint.on{display:flex}#rotate-hint svg{fill:none;width:18px;height:18px;stroke:var(--ember-hot);stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;flex:none}#rotate-hint button{all:unset;width:26px;height:26px;font:18px/1 var(--sans);color:var(--ink-dim);background:#ffffff0f;border-radius:50%;place-items:center;display:grid}@keyframes rotate-in{0%{opacity:0;transform:translate(-50%,-6px)}}.controls-touch,body.touch .controls-list:not(.controls-touch){display:none}body.touch .controls-touch{grid-template-columns:1fr;gap:9px;display:grid}.controls-touch dt{min-width:92px}.controls-touch kbd{white-space:nowrap}.controls-touch .t-glyph{background:#ffffff0d;border-radius:50%;place-items:center;width:28px;height:28px;display:grid;box-shadow:inset 0 0 0 1px #ffce9661}.controls-touch .t-glyph svg{fill:none;stroke:#f5ead9;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.controls-touch .t-glyph svg .fill{fill:#ffc89638}@media (max-height:500px){body.touch .controls-touch{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 22px;width:min(560px,100vw - 48px);padding:12px 14px}body.touch .controls-touch dt{min-width:0}body.touch .controls-touch dd{font-size:12px}body.touch .title-block:has(.controls[open]) :is(.eyebrow,.tagline,.touch-note){display:none}body.touch .title-block:has(.controls[open]) .title-actions{margin-top:12px}body.touch #title:has(.controls[open]) .title-credit{display:none}}body:not(.touch) .touch-note{display:none}body.touch .touch-note{color:#ffc496d9;font-style:italic;font-family:var(--serif);font-size:14px;display:block}body.touch #bars{margin-left:var(--t-safe-l);margin-top:var(--t-safe-t)}body.touch #shards{margin-right:var(--t-safe-r);margin-top:var(--t-safe-t)}body.touch #compass{margin-top:var(--t-safe-t)}body.touch #sound{margin-right:var(--t-safe-r);margin-top:var(--t-safe-t)}body.touch .title-block{margin-left:var(--t-safe-l)}body.touch .title-credit{margin-right:var(--t-safe-r);margin-bottom:var(--t-safe-b)}body.touch #boss{bottom:auto;top:calc(var(--t-safe-t) + 70px);width:min(440px,52vw)}body.touch #boss-name{font-size:15px}body.touch #hint{bottom:calc(var(--t-safe-b) + 18px);max-width:38vw;font-size:12px}@media (max-height:500px){body.touch #bars{gap:5px;width:min(220px,26vw);top:12px;left:16px}body.touch .bar{height:10px}body.touch .bar.st{height:6px}body.touch #compass{width:min(360px,34vw);height:26px;top:10px}body.touch #compass-dist{font-size:11px;top:30px}body.touch #shards{top:12px;right:16px}body.touch #shards span{width:13px;height:21px}body.touch #boss{top:calc(var(--t-safe-t) + 58px);width:min(400px,44vw)}body.touch #boss-name{margin-bottom:4px;font-size:13px}body.touch #boss .bar{height:10px}body.touch #toast{top:26%}:root{--t-attack:84px;--t-small:58px;--t-arc:96px;--t-ring:116px}}@media (max-width:500px){:root{--t-attack:80px;--t-small:56px;--t-arc:92px;--t-ring:112px}body.touch #compass{width:70vw;top:94px}body.touch #boss{top:calc(var(--t-safe-t) + 150px);width:84vw}body.touch #hint{bottom:calc(var(--t-safe-b) + 232px);max-width:84vw}body.touch #rotate-hint{top:calc(var(--t-safe-t) + 156px)}}body:has(#boss:not(.hidden)) #rotate-hint{display:none}@media (min-width:900px) and (min-height:600px){:root{--t-attack:104px;--t-small:72px;--t-arc:120px;--t-ring:140px}}
