:root{--void:#05070d;--ink:#e8eefc;--muted:#93a3bf;--edge:#a0beff38;--panel:#0a101cb8;--sans:ui-sans-serif, system-ui, "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box}html,body{background:var(--void);height:100%;color:var(--ink);font-family:var(--sans);overscroll-behavior:none;margin:0;overflow:hidden}#lab-canvas{touch-action:none;cursor:grab;width:100%;height:100%;display:block;position:fixed;inset:0}#lab-canvas:active{cursor:grabbing}#ui{pointer-events:none;padding:max(1rem, env(safe-area-inset-top)) max(1rem, env(safe-area-inset-right)) max(1rem, env(safe-area-inset-bottom)) max(1rem, env(safe-area-inset-left));position:fixed;inset:0}#ui a,#ui button{pointer-events:auto}.exit{top:max(1rem, env(safe-area-inset-top));left:max(1rem, env(safe-area-inset-left));border:1px solid var(--edge);background:var(--panel);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--ink);border-radius:999px;padding:.55rem .9rem;font-size:.85rem;font-weight:500;text-decoration:none;transition:border-color .18s,background .18s;position:absolute}.exit:hover{background:#121c2ed9;border-color:#a0beff99}.exit:focus-visible{outline-offset:2px;outline:2px solid #7fb0ff}.hint{left:50%;bottom:max(1.75rem, env(safe-area-inset-bottom));border:1px solid var(--edge);background:var(--panel);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--muted);text-align:center;border-radius:.85rem;flex-direction:column;align-items:center;gap:.35rem;padding:.7rem 1.15rem;font-size:.8rem;transition:opacity .5s,transform .5s;display:flex;position:absolute;transform:translate(-50%)}.hint strong{color:var(--ink);letter-spacing:.01em;font-size:.9rem}.hint.is-hidden{opacity:0;transform:translate(-50%)translateY(.5rem)}kbd{border:1px solid var(--edge);min-width:1.4em;color:var(--ink);font:inherit;text-align:center;background:#ffffff0f;border-radius:.3rem;margin:0 .1em;padding:.12em .35em;font-size:.9em;display:inline-block}@media (prefers-reduced-motion:reduce){.hint{transition:none}}.panel{--zone-accent:#8fb6ff;right:max(1rem, env(safe-area-inset-right));bottom:max(1rem, env(safe-area-inset-bottom));border:1px solid var(--edge);border-left:3px solid var(--zone-accent);background:var(--panel);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);pointer-events:auto;opacity:0;border-radius:.9rem;width:min(23rem,100vw - 2rem);padding:1.15rem 1.25rem 1.25rem;transition:opacity .22s,transform .22s;position:absolute;transform:translateY(.6rem);box-shadow:0 18px 40px -18px #000000d9}.panel.is-open{opacity:1;transform:translateY(0)}.panel__eyebrow{color:var(--zone-accent);letter-spacing:.09em;text-transform:uppercase;margin:0 0 .3rem;font-size:.7rem;font-weight:600}.panel__title{margin:0 0 .45rem;font-size:1.4rem;line-height:1.15}.panel__body{color:var(--muted);margin:0 0 1rem;font-size:.88rem;line-height:1.5}.panel__cta{border:1px solid var(--zone-accent);color:var(--zone-accent);border-radius:999px;padding:.5rem .95rem;font-size:.82rem;font-weight:600;text-decoration:none;transition:background .18s,color .18s;display:inline-block}.panel__cta:hover{background:var(--zone-accent);color:#05070d}.panel__cta:focus-visible{outline-offset:2px;outline:2px solid #7fb0ff}.panel__cta.is-inert{opacity:.45;pointer-events:none}.panel__close{width:1.75rem;height:1.75rem;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:50%;font-size:1.3rem;line-height:1;position:absolute;top:.5rem;right:.6rem}.panel__close:hover{color:var(--ink);background:#ffffff17}.minimap{right:max(1rem, env(safe-area-inset-right));top:max(1rem, env(safe-area-inset-top));border:1px solid var(--edge);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:auto;background:#080c16b8;border-radius:50%;width:168px;height:168px;position:absolute}.minimap canvas{cursor:pointer;border-radius:50%;display:block}.minimap__tick{color:var(--muted);letter-spacing:.06em;pointer-events:none;font-size:.6rem;font-weight:700;position:absolute}.minimap__tick--n{color:var(--ink);top:3px;left:50%;transform:translate(-50%)}.minimap__tick--s{bottom:3px;left:50%;transform:translate(-50%)}.minimap__tick--e{top:50%;right:5px;transform:translateY(-50%)}.minimap__tick--w{top:50%;left:5px;transform:translateY(-50%)}@media (height<=620px){.minimap{display:none}}@media (prefers-reduced-motion:reduce){.panel{transition:none}}.loader{z-index:10;background:var(--void);place-items:center;transition:opacity .45s;display:grid;position:fixed;inset:0}.loader.is-done{opacity:0;pointer-events:none}.loader__inner{text-align:center;width:min(22rem,100vw - 3rem)}.loader__brand{color:var(--muted);letter-spacing:.16em;text-transform:uppercase;margin:0 0 .4rem;font-size:.7rem;font-weight:600}.loader__title{letter-spacing:-.01em;margin:0 0 1.6rem;font-size:clamp(1.6rem,5vw,2.2rem);font-weight:600}.loader__track{background:#a0beff29;border-radius:2px;height:2px;overflow:hidden}.loader__bar{transform-origin:0;background:linear-gradient(90deg,#6ea8ff,#cfe0f7);height:100%;transition:transform .3s;transform:scaleX(0)}.loader__status{color:var(--muted);font-variant-numeric:tabular-nums;margin:.85rem 0 0;font-size:.78rem}.loader.is-failed .loader__track{display:none}.loader.is-failed .loader__status{color:#ffb4a8}.no-webgl #lab-canvas,.no-webgl #ui{display:none}.stick{left:max(1.25rem, env(safe-area-inset-left));bottom:max(1.25rem, env(safe-area-inset-bottom));pointer-events:auto;touch-action:none;width:124px;height:124px;display:none;position:absolute}body.is-touch .stick{display:block}.stick__base{border:1px solid var(--edge);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0a101c80;border-radius:50%;place-items:center;width:100%;height:100%;display:grid}.stick__knob{background:#cfe0f747;border:1px solid #a0beff80;border-radius:50%;width:46px;height:46px;transition:transform .12s ease-out}.stick.is-active .stick__knob{background:#cfe0f773;transition:none}.hint__touch,body.is-touch .hint__desktop{display:none}body.is-touch .hint__touch{display:block}body.is-touch .panel{left:max(1rem, env(safe-area-inset-left));right:max(1rem, env(safe-area-inset-right));width:auto;bottom:calc(max(1.25rem, env(safe-area-inset-bottom)) + 136px)}body.is-touch .minimap{width:116px;height:116px}body.is-touch .minimap canvas{width:116px!important;height:116px!important}body.is-touch .hint{display:none}@media (width<=560px){body.is-touch .stick{width:104px;height:104px}body.is-touch .panel{bottom:calc(max(1.25rem, env(safe-area-inset-bottom)) + 116px)}}@media (prefers-reduced-motion:reduce){.loader,.loader__bar,.stick__knob{transition:none}}
