:root{--purple: #7a6a9a;--dusk: #20262d;--chalk: #9aa3ad;--flame-core: #ffe9b8;--flame: #f2b35e;--ember: #c77a3a;--fault: #b9d3b2;--t-prism: #7fa9c4;--t-amp: #c99b72;--t-split: #ae9fcb;--t-diffuse: #d2c08e}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--ground);color:var(--ink);font-family:var(--font-text);overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;overscroll-behavior:none}#c{position:fixed;inset:0;width:100%;height:100%;display:block;touch-action:none}.mono{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase}.fade{transition:opacity 1.2s ease}.off{opacity:0;pointer-events:none}.hud{position:fixed;top:14px;left:16px;color:var(--chalk);pointer-events:none}.hud b{color:var(--flame-core);font-weight:400}.top{position:fixed;top:10px;right:12px}.btn{appearance:none;background:#20262d99;border:1px solid rgba(238,240,234,.16);color:var(--chalk);padding:7px 10px;border-radius:7px;cursor:pointer}.tray{position:fixed;left:50%;bottom:calc(14px + env(safe-area-inset-bottom));transform:translate(-50%);display:flex;gap:4px;padding:5px;background:#20262db8;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(238,240,234,.12);border-radius:12px}.tool{appearance:none;border:1px solid transparent;background:none;display:flex;flex-direction:column;align-items:center;gap:5px;padding:9px 10px 7px;border-radius:9px;cursor:pointer;min-width:58px;min-height:58px;opacity:.75;touch-action:none}.tool[data-t=prism]{color:var(--t-prism)}.tool[data-t=amp]{color:var(--t-amp)}.tool[data-t=split]{color:var(--t-split)}.tool[data-t=diffuse]{color:var(--t-diffuse)}.tool[aria-pressed=true]{opacity:1;border-color:currentColor;background:#ffffff0a}.tool[hidden]{display:none}.tool svg{width:30px;height:30px;stroke:currentColor;fill:none;stroke-width:1.3;pointer-events:none}.tool svg .bx{fill:currentColor;fill-opacity:.16;stroke-opacity:.5}.dots{display:flex;gap:3px;height:5px;pointer-events:none}.dots i{width:5px;height:5px;border-radius:1px;background:currentColor}.tool.empty{opacity:.28}.tool.land{animation:land 1.1s ease-out}@keyframes land{30%{box-shadow:0 0 22px 6px #f2b35e8c}to{box-shadow:0 0 #f2b35e00}}#sel{position:fixed;left:0;top:0;pointer-events:none;opacity:0;transition:opacity .2s ease}#sel.on{opacity:1}#sel button{pointer-events:auto;position:absolute;width:46px;height:46px;margin:-23px 0 0 -23px;border-radius:50%;border:1px solid rgba(238,240,234,.22);background:#20262dc7;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:var(--ground);display:grid;place-items:center;cursor:pointer;touch-action:none}#sel:not(.on) button{pointer-events:none}#sel svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.sys{position:fixed;top:52px;right:12px;width:min(400px,calc(100vw - 24px));max-height:calc(100vh - 170px);overflow:auto;background:var(--ground);color:var(--ink);border-radius:4px;padding:18px 20px 22px;box-shadow:0 20px 60px #00000073;display:none;font-size:var(--fs-sm);line-height:var(--lh-body);-webkit-user-select:text;user-select:text}.sys.on{display:block}.sys h2{font-family:var(--font-display);font-weight:400;font-size:var(--fs-xl);line-height:var(--lh-snug);margin:0 0 4px}.sys h3{font-family:var(--font-mono);font-weight:400;font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);margin:18px 0 8px;border-top:1px solid var(--rule);padding-top:12px}.sys p{margin:0 0 6px;color:var(--ink-soft)}.sw{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.sw div{font-family:var(--font-mono);font-size:var(--fs-2xs);color:var(--ink-soft)}.sw i{display:block;height:30px;border-radius:3px;margin-bottom:3px;border:1px solid rgba(28,32,36,.08)}.row{display:grid;grid-template-columns:7.5rem 1fr;gap:4px 10px;margin-bottom:6px}.row .k{font-family:var(--font-mono);font-size:var(--fs-2xs);letter-spacing:.06em;text-transform:uppercase;color:var(--ink);padding-top:3px}.row .v{color:var(--ink-soft)}#edges button{position:fixed;width:44px;height:44px;margin:-22px 0 0 -22px;border:0;background:none;color:var(--chalk);opacity:0;pointer-events:none;transition:opacity 1.5s ease;cursor:pointer;touch-action:none}#edges.on button{opacity:.55;pointer-events:auto;animation:breathe 3.4s ease-in-out infinite}#edges svg{width:26px;height:26px;stroke:currentColor;fill:none;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}@keyframes breathe{50%{opacity:.22}}@keyframes hintGlow{0%,to{box-shadow:0 0 #f2b35e00}50%{box-shadow:0 0 18px 5px #f2b35e99}}.tool.hint,#sel button.hint{animation:hintGlow 1.6s ease-in-out infinite}#goal{position:fixed;left:0;top:0;width:34px;height:34px;margin:-17px 0 0 -17px;color:var(--flame);opacity:0;pointer-events:none;transition:opacity 1s ease}#goal.on{opacity:.7}#goal svg{width:100%;height:100%;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 6px rgba(242,179,94,.7))}#restartBtn{padding:7px 9px}.top{display:flex;gap:6px}#confirm{position:fixed;top:56px;right:12px;width:min(280px,calc(100vw - 24px));background:#20262deb;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(238,240,234,.16);border-radius:10px;padding:14px 16px;color:var(--ground);display:none}#confirm.on{display:block}#confirm p{margin:0;font-family:var(--font-display);font-size:var(--fs-lg)}#confirm p.sub{font-family:var(--font-text);font-style:italic;font-size:var(--fs-sm);color:var(--chalk);margin:4px 0 12px}#confirm div{display:flex;gap:8px;justify-content:flex-end}#clearBtn{color:var(--flame-core);border-color:#f2b35e73}#challenge{position:fixed;left:0;top:0;width:46px;height:30px;margin:-15px 0 0 -23px;color:var(--chalk);opacity:0;pointer-events:none;transition:opacity 1s ease;display:flex;align-items:center;gap:2px}#challenge.on{opacity:.75}#challenge svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}#challenge .stars{font-size:11px;letter-spacing:1px;color:var(--t-split)}
