:root{--ink:#1a1626;--paper:#fffaf0;--accent:#e8611a;--font-display:"Bebas Neue", Impact, sans-serif;--font-body:-apple-system, "SF Pro Text", "Helvetica Neue", Arial, sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body{background:#8ecbff;overflow:hidden}.webgl{outline:none;position:fixed;top:0;left:0}.speed-lines{pointer-events:none;width:100%;height:100%;position:fixed;inset:0}.interact-prompt{background:var(--paper);color:var(--ink);border:3px solid var(--ink);box-shadow:4px 4px 0 var(--ink);font:700 14px var(--font-body);cursor:pointer;opacity:0;pointer-events:none;border-radius:999px;align-items:center;gap:8px;padding:5px 14px 5px 5px;transition:opacity .2s;display:flex;position:fixed;top:0;left:0}.interact-prompt.is-visible{opacity:1;pointer-events:auto}.interact-prompt__hint{opacity:.75;margin-left:9px;font-weight:600}.interact-prompt__key{background:var(--ink);min-width:26px;height:26px;color:var(--paper);font:400 18px var(--font-display);letter-spacing:.04em;border-radius:6px;place-items:center;padding:0 6px;display:grid}.controls-hint{background:var(--paper);color:var(--ink);border:3px solid var(--ink);box-shadow:4px 4px 0 var(--ink);font:700 12px var(--font-body);opacity:0;pointer-events:none;border-radius:14px;align-items:flex-end;gap:18px;padding:12px 16px;transition:opacity .4s,transform .4s;display:flex;position:fixed;bottom:20px;left:20px;transform:translateY(12px)}.controls-hint.is-visible{opacity:1;transform:none}.controls-hint.is-locked,.controls-hint-button.is-locked{opacity:0;pointer-events:none}.controls-hint__group{flex-direction:column;align-items:center;gap:6px;display:flex}.controls-hint__label{text-transform:uppercase;letter-spacing:.06em;opacity:.7}.controls-hint__pad{grid-template-columns:repeat(3,auto);gap:4px;display:grid}.controls-hint__pad .controls-hint__key:first-child{grid-area:1/2}.controls-hint__pad .controls-hint__key:nth-child(2){grid-area:2/1}.controls-hint__pad .controls-hint__key:nth-child(3){grid-area:2/2}.controls-hint__pad .controls-hint__key:nth-child(4){grid-area:2/3}.controls-hint__key{background:var(--paper);min-width:30px;height:30px;color:var(--ink);border:2px solid var(--ink);box-shadow:0 3px 0 var(--ink);font:400 17px var(--font-display);letter-spacing:.04em;border-radius:6px;place-items:center;padding:0 7px;transition:background 80ms,color 80ms,transform 80ms,box-shadow 80ms;display:grid}.controls-hint__key.is-wide{min-width:64px}.controls-hint__key.is-pressed{background:var(--accent);color:var(--paper);box-shadow:0 1px 0 var(--ink);transform:translateY(2px)}.controls-hint-button{background:var(--paper);width:38px;height:38px;color:var(--ink);border:3px solid var(--ink);box-shadow:3px 3px 0 var(--ink);font:400 22px var(--font-display);cursor:pointer;opacity:0;pointer-events:none;border-radius:50%;transition:opacity .3s;position:fixed;bottom:20px;left:20px}.controls-hint-button.is-visible{opacity:1;pointer-events:auto}@media (hover:none){.controls-hint,.controls-hint-button{display:none}}.touch-controls{display:none}@media (hover:none) and (pointer:coarse){.touch-controls{transition:opacity .3s;display:block}}.touch-controls.is-locked{opacity:0;pointer-events:none}.joystick,.action-button{bottom:calc(28px + env(safe-area-inset-bottom));touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;position:fixed}.joystick{left:calc(28px + env(safe-area-inset-left));background:#1a162638;border:3px solid #fffaf0bf;border-radius:50%;width:132px;height:132px;box-shadow:0 0 0 3px #1a162659}.joystick__arrow{border:7px solid #0000;border-top-width:0;border-bottom:9px solid #fffaf0cc;width:0;height:0;margin:-7px 0 0 -7px;position:absolute;top:50%;left:50%}.joystick__arrow.is-up{transform:translateY(-50px)}.joystick__arrow.is-right{transform:rotate(90deg)translateY(-50px)}.joystick__arrow.is-down{transform:rotate(180deg)translateY(-50px)}.joystick__arrow.is-left{transform:rotate(270deg)translateY(-50px)}.joystick__knob{background:var(--paper);border:3px solid var(--ink);width:56px;height:56px;box-shadow:3px 3px 0 var(--ink);border-radius:50%;margin:-28px 0 0 -28px;transition:transform .15s ease-out,background .15s;position:absolute;top:50%;left:50%}.joystick.is-active .joystick__knob{transition:background .15s}.action-button{background:var(--accent);width:76px;height:76px;color:var(--paper);border:3px solid var(--ink);box-shadow:4px 4px 0 var(--ink);font:400 22px var(--font-display);letter-spacing:.06em;text-transform:uppercase;border-radius:50%}.action-button.is-jump{right:calc(28px + env(safe-area-inset-right));width:84px;height:84px}.action-button.is-dash{right:calc(124px + env(safe-area-inset-right));bottom:calc(76px + env(safe-area-inset-bottom));background:var(--paper);width:64px;height:64px;color:var(--ink);font-size:19px}.action-button:active{box-shadow:1px 1px 0 var(--ink);transform:translate(3px,3px)}.project-backdrop{opacity:0;pointer-events:none;background:radial-gradient(at 30%,#0000 25%,#100c1e99 100%);transition:opacity .5s;position:fixed;inset:0}.project-backdrop.is-visible{opacity:1;pointer-events:auto}.project-card{background:var(--paper);width:min(440px,100vw - 48px);max-height:calc(100vh - 64px);color:var(--ink);border:4px solid var(--ink);box-shadow:10px 10px 0 var(--ink);font-family:var(--font-body);opacity:0;pointer-events:none;border-radius:6px;transition:transform .55s cubic-bezier(.2,1.3,.4,1),opacity .3s;position:fixed;top:50%;right:max(4vw,24px);overflow:auto;transform:translate(130%,-50%)skew(-8deg)}.project-card.is-visible{opacity:1;pointer-events:auto;transform:translateY(-50%)skew(0)}.project-card__band{background:repeating-linear-gradient(-45deg, var(--accent) 0 14px, color-mix(in srgb, var(--accent), black 14%) 14px 28px);border-bottom:4px solid var(--ink);justify-content:space-between;align-items:center;padding:8px 10px 8px 16px;display:flex}.project-card__status{background:var(--ink);color:var(--paper);letter-spacing:.04em;text-transform:uppercase;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:700}.project-card__close{background:var(--paper);width:32px;height:32px;color:var(--ink);border:3px solid var(--ink);font:700 20px/1 var(--font-body);cursor:pointer;border-radius:50%;place-items:center;display:grid}.project-card__body{flex-direction:column;gap:16px;padding:20px 22px 18px;display:flex}.project-card__header{align-items:center;gap:14px;display:flex}.project-card__icon{border:3px solid var(--ink);border-radius:16px;width:64px;height:64px}.project-card__title{font:400 46px/.9 var(--font-display);letter-spacing:.02em}.project-card__tagline{color:var(--accent);margin-top:4px;font-weight:700}.project-card__summary{font-size:15px;line-height:1.5}.project-card__highlights{flex-direction:column;gap:6px;padding-left:18px;font-size:14px;line-height:1.4;display:flex}.project-card__highlights li::marker{color:var(--accent)}.project-card__section h3{font:400 20px var(--font-display);letter-spacing:.06em;margin-bottom:6px}.project-card__section p{font-size:14px}.project-card__chips{flex-wrap:wrap;gap:6px;list-style:none;display:flex}.project-card__chips li{border:2px solid var(--ink);border-radius:999px;padding:2px 10px;font-size:13px;font-weight:600}.project-card__links{flex-wrap:wrap;gap:12px;display:flex}.project-card__link{background:var(--accent);color:#fff;border:3px solid var(--ink);box-shadow:4px 4px 0 var(--ink);font:400 20px var(--font-display);letter-spacing:.06em;border-radius:6px;padding:8px 18px;text-decoration:none;transition:transform .1s,box-shadow .1s}.project-card__link:hover{box-shadow:6px 6px 0 var(--ink);transform:translate(-2px,-2px)}.project-card__link:active{box-shadow:2px 2px 0 var(--ink);transform:translate(2px,2px)}.project-card__lesson blockquote{background:color-mix(in srgb, var(--accent), var(--paper) 88%);border-left:5px solid var(--accent);border-radius:4px;padding:10px 12px 10px 14px;font-size:14px;font-style:italic;line-height:1.5}.project-card__hint{opacity:.6;font-size:12px}@media (width<=759px){.project-card{width:auto;max-height:55vh;box-shadow:6px 6px 0 var(--ink);inset:auto 16px 16px;transform:translateY(130%)}.project-card.is-visible{transform:translateY(0)}.project-backdrop{background:linear-gradient(#0000 30%,#100c1e99 100%)}}@media (prefers-reduced-motion:reduce){.project-card,.project-backdrop,.interact-prompt,.controls-hint{transition:opacity .2s}}.raid-bar{background:var(--paper);color:var(--ink);border:3px solid var(--ink);box-shadow:4px 4px 0 var(--ink);font:700 15px var(--font-body);opacity:0;pointer-events:none;border-radius:999px;align-items:center;gap:14px;padding:6px 16px 6px 6px;transition:transform .4s cubic-bezier(.2,1.3,.4,1),opacity .3s;display:flex;position:fixed;top:16px;left:50%;transform:translate(-50%,-150%)}.raid-bar.is-visible{opacity:1;transform:translate(-50%)}.raid-bar__label{color:#fff;font:400 20px var(--font-display);letter-spacing:.08em;background:#a855f7;border-radius:999px;padding:2px 12px}.raid-bar__timer{min-width:70px;font:400 24px var(--font-display);letter-spacing:.04em}.raid-bar__hearts{color:#e23b3b;letter-spacing:2px;font-size:20px}.raid-bar__best,.raid-bar__hint{opacity:.65;font-size:12px}.raid-countdown{color:#fff;font:400 120px var(--font-display);-webkit-text-stroke:5px var(--ink);text-shadow:6px 6px 0 var(--ink);opacity:0;pointer-events:none;position:fixed;top:38%;left:50%;transform:translate(-50%,-50%)scale(.6)}.raid-countdown.is-visible{animation:.9s ease-out forwards raid-pop}@keyframes raid-pop{0%{opacity:0;transform:translate(-50%,-50%)scale(1.6)}25%{opacity:1;transform:translate(-50%,-50%)scale(1)}to{opacity:1;transform:translate(-50%,-50%)scale(.95)}}.raid-flash{opacity:0;pointer-events:none;background:radial-gradient(#0000 45%,#e23b3b8c 100%);position:fixed;inset:0}.raid-flash.is-flashing{animation:.5s ease-out raid-flash}@keyframes raid-flash{0%{opacity:1}to{opacity:0}}.raid-panel{background:var(--paper);width:min(360px,100vw - 48px);color:var(--ink);border:4px solid var(--ink);box-shadow:10px 10px 0 var(--ink);font-family:var(--font-body);text-align:center;opacity:0;pointer-events:none;border-radius:6px;padding:18px 22px;transition:transform .4s cubic-bezier(.2,1.3,.4,1),opacity .25s;position:fixed;top:50%;left:50%;transform:translate(-50%,-40%)scale(.9)}.raid-panel.is-visible{opacity:1;transform:translate(-50%,-50%)scale(1)}.raid-panel__title{font:400 52px/1 var(--font-display);color:#e23b3b;letter-spacing:.04em}.raid-panel.is-record .raid-panel__title{color:#a855f7}.raid-panel__time{margin-top:8px;font-size:18px;font-weight:700}.raid-panel__best{opacity:.7;margin-top:2px;font-size:14px}.raid-panel__hint{white-space:pre;margin-top:14px;font-size:13px;font-weight:700}@media (width<=759px){.raid-bar{gap:8px;font-size:13px}.raid-bar__hint{display:none}}
