:root{color-scheme:dark;--ink:#e6f4ef;--muted:#9bb8bf;--mint:#bceacd;--panel:#0d2435ed;--line:#45616c;--orange:#ffb268;--cyan:#85e5e0;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#0a1c2d;color:var(--ink)}button,input,select{font:inherit}button{cursor:pointer;color:inherit;border:1px solid transparent;border-radius:9px;background:transparent;min-height:40px;padding:8px 12px;touch-action:manipulation}button:hover{background:#d9fff017}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid #a2e3c1;outline-offset:3px}button:disabled{opacity:.45;cursor:default}[hidden]{display:none!important}a{color:#bceacd;text-decoration:none}input,select{background:#132e3f;color:var(--ink);border:1px solid #3b5866;border-radius:6px;padding:8px;min-height:38px}input[type=checkbox]{accent-color:#a7e9c2;min-height:0;width:15px;height:15px;margin:0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.app{position:relative;width:100%;height:100dvh}#stage,#world{position:absolute;inset:0;overflow:hidden}#world canvas{display:block;width:100%;height:100%;touch-action:none}.stage-vignette{position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,#041323a6,transparent 18%,transparent 74%,#041323b3)}
.game-header{position:absolute;top:0;left:0;right:0;height:66px;padding:10px 22px;display:flex;align-items:center;justify-content:space-between;gap:14px;z-index:12;background:linear-gradient(#0a1e31e6,#0a1e3170,transparent)}.brand{display:flex;align-items:center;gap:8px;white-space:nowrap}.brand svg{width:29px;fill:none;stroke:#a0e5cb;stroke-width:1.4}.brand span{font:600 21px "Songti SC",serif;letter-spacing:2px}.map-picker-wrap{position:absolute;left:50%;transform:translateX(-50%)}#map-picker{display:flex;align-items:center;justify-content:space-between;gap:19px;font-size:12px;background:#0b2435b3;border:1px solid #47616c77;min-width:170px;min-height:37px;backdrop-filter:blur(10px)}.chevron{color:#a0c7c7}.header-actions{display:flex;gap:5px}.icon-button{font-size:21px;min-width:37px;padding:6px;line-height:1}#sound-toggle[aria-pressed=true]{color:#bbf7d3;background:#31544466}
#map-menu{position:absolute;top:46px;left:50%;transform:translateX(-50%);width:226px;background:#0c2639f5;border:1px solid #50727a;border-radius:11px;padding:7px;box-shadow:0 12px 40px #0004;backdrop-filter:blur(14px)}#map-menu button{width:100%;display:flex;align-items:center;gap:16px;text-align:left;font-size:17px;min-height:44px;padding:9px 13px;border-radius:6px}#map-menu button span{font-size:12px}#map-menu button[aria-pressed=true]{background:#345a54;color:#cffff0}
.camera-quick{position:absolute;right:23px;top:78px;display:flex;gap:6px;z-index:10}.camera-quick button{background:#0c2636b8;border:1px solid #526e7666;backdrop-filter:blur(9px);font-size:12px;min-height:36px;padding:6px 10px}.camera-quick #home-view,.camera-quick #toggle-minimap{font-size:20px;width:36px;padding:4px}.camera-quick button[aria-pressed=true]{background:#315a50;color:#d4ffe4}
.game-bottom{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);z-index:12;text-align:center;max-width:calc(100% - 24px)}.action-hint{font-size:11px;color:#c3d7d9;margin-bottom:10px;text-shadow:0 2px 10px #000a;letter-spacing:.5px;min-height:17px}.game-dock{display:flex;align-items:center;gap:7px;padding:7px;background:#0a2233dc;border:1px solid #5c787566;border-radius:16px;backdrop-filter:blur(14px);box-shadow:0 10px 30px #07152266}.game-dock button{font-size:12px;white-space:nowrap;min-height:44px;padding:9px 13px}.game-dock button>span:first-child{font-size:16px}.prepare-tools{display:flex;gap:3px}.prepare-tools button.selected,#explore-toggle[aria-pressed=true]{background:#395b51;color:#d3ffe3;border-color:#6d9c80}.launch-button{background:#c7efd2;color:#153c2d;font-weight:650;min-width:115px!important;display:flex;align-items:center;justify-content:center;gap:9px;border-color:#d5f5df}.launch-button:hover{background:#e5ffe9}.launch-button b{font-size:14px}.game-dock .launch-button span{font-size:13px!important}.dock-divider{width:1px;height:26px;background:#64817f4a}.zero-speed{position:absolute;top:-34px;left:100%;font-size:10px;color:#cae5df;background:#173a47cd;border:1px solid #436672;white-space:nowrap;min-height:28px;padding:4px 9px;border-radius:20px}.playing .prepare-tools,.walking .prepare-tools{display:none}.playing .action-hint{opacity:.7}
.world-labels{position:absolute;inset:0;pointer-events:none;z-index:2}.world-label{position:absolute;left:0;top:0;border-radius:4px;padding:3px 6px;font-size:10px;background:#15313dbc;color:#cde5e7;border:1px solid #637b7766;white-space:nowrap}.source-positive{color:#ffca9a}.source-negative{color:#afd8fa}.force-label{color:var(--orange)}.velocity-label{color:var(--cyan)}
.launch-overlay{position:absolute;inset:0;pointer-events:none;z-index:6}.velocity-handle{position:absolute;left:0;top:0;min-height:36px;width:36px;padding:0;border:0;background:none!important;pointer-events:auto;touch-action:none;cursor:grab;overflow:visible}.velocity-handle i{position:absolute;inset:8px;border:2px solid #bdfff0;background:#277479b0;box-shadow:0 0 0 5px #b8fff019,0 0 18px #8bf2e64a;border-radius:50%}.velocity-handle:active{cursor:grabbing}.velocity-handle .velocity-label{position:absolute;left:42px;top:6px;padding:5px 8px;font:11px "SFMono-Regular",Consolas,monospace;white-space:nowrap;color:#d8fff5;background:#12353eeb;border:1px solid #4c93918a;border-radius:6px}.velocity-handle.label-left .velocity-label{left:auto;right:42px}
.minimap-box{position:absolute;bottom:118px;right:24px;width:133px;border:1px solid #50777b88;border-radius:9px;padding:6px;background:#092636c9;backdrop-filter:blur(10px);z-index:5}.minimap-box canvas{width:100%;height:auto;display:block;border-radius:4px;touch-action:none;cursor:crosshair}.force-compass{position:absolute;right:24px;bottom:264px;display:flex;align-items:center;gap:9px;padding:7px 11px;background:#112d3ace;border:1px solid #9a80544d;color:var(--orange);border-radius:8px;z-index:5;pointer-events:none}.force-compass b{font-size:24px;line-height:1}.force-compass span{font:italic 15px Georgia,serif}.crosshair{position:absolute;left:50%;top:50%;width:8px;height:8px;border:1px solid #c5efe966;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none}
.joystick{position:absolute;left:28px;bottom:119px;width:104px;height:104px;border:1px solid #b7e7d640;background:#bce5d50c;border-radius:50%;touch-action:none;z-index:8;box-shadow:inset 0 0 30px #b5f2d909}.joystick:before,.joystick:after{content:"";position:absolute;background:#a0d1c217}.joystick:before{left:50%;top:12px;bottom:12px;width:1px}.joystick:after{top:50%;left:12px;right:12px;height:1px}#joystick-thumb{position:absolute;width:42px;height:42px;left:30px;top:30px;border-radius:50%;background:#bceacc52;border:1px solid #d3ffe68a;box-shadow:0 4px 15px #0002;pointer-events:none}
.control-panel{position:absolute;right:20px;top:66px;bottom:112px;width:310px;background:#0c2538f7;border:1px solid #466670;border-radius:12px;box-shadow:0 15px 65px #0006;padding:18px;overflow:auto;z-index:30;backdrop-filter:blur(18px)}.panel-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px}.panel-heading h2{font-weight:500;font-size:17px;margin:0}.panel-heading button{font-size:24px;padding:0 7px}.control-panel section{border-top:1px solid #34525d;padding:17px 0}.control-panel h3{font-size:12px;font-weight:500;color:#a8c7cc;margin:0 0 12px}.display-options{display:grid;grid-template-columns:1fr 1fr;gap:12px 10px;font-size:11px}.display-options label{display:flex;align-items:center;gap:7px;cursor:pointer}.display-options i{width:13px;height:2px}.trail-swatch{background:#fff1c5}.force-swatch{background:var(--orange)}.velocity-swatch{background:var(--cyan)}.number-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.number-grid label{font-size:10px;color:#a3bdc5;display:grid;gap:5px}.number-grid input{min-width:0;width:100%;font-size:12px;font-variant-numeric:tabular-nums}.panel-action{border:1px solid #61867b;background:#23493f;color:#cef4dc;width:100%;font-size:11px;margin-top:12px}.control-panel select{width:100%;font-size:11px}.panel-note{font-size:11px;line-height:1.8;color:#93b0ba;margin:10px 0 0}.follow-setting{display:flex;gap:8px;align-items:center;font-size:11px}.view-options{display:flex;gap:8px;margin-top:12px}.view-options button{flex:1;border:1px solid #46646f;font-size:11px}.time-setting{display:flex;align-items:center;gap:12px;font-size:11px;color:#94b2bc;margin-top:12px}.time-setting select{width:auto;flex:1}.control-panel details{border-top:1px solid #34525d;padding:17px 0;font-size:12px;color:#bad3d9}.control-panel summary{cursor:pointer}.readouts{font-size:11px;line-height:2.2;margin-top:12px;color:#8aa9b6}.readouts strong{color:#dceddf;font-family:monospace}.panel-footer{display:grid;gap:7px}.panel-footer button,.panel-footer a{font-size:11px;padding:5px 0;text-align:left;color:#a9d9c7;min-height:30px}
.toast{position:absolute;top:75px;left:50%;transform:translateX(-50%);max-width:min(360px,calc(100% - 30px));font-size:12px;padding:10px 16px;border:1px solid #6c96866b;background:#173e38ee;box-shadow:0 5px 22px #0004;border-radius:9px;z-index:25;text-align:center;pointer-events:none}.loading{position:absolute;inset:0;display:grid;place-items:center;background:#0b2033;color:#bde5d7;z-index:50;font-size:14px;letter-spacing:2px}
dialog{width:min(650px,calc(100% - 28px));max-height:86dvh;overflow:auto;color:#c7dce1;background:#102b3d;border:1px solid #54717b;border-radius:14px;padding:23px}dialog::backdrop{background:#061423b8;backdrop-filter:blur(7px)}.dialog-heading{display:flex;align-items:center;justify-content:space-between}.dialog-heading h2{font-size:21px;font-weight:500;margin:0}.dialog-heading button{font-size:24px}dialog p{font-size:12px;line-height:1.9;color:#a8c1c9}dialog b{color:#c4ead6;font-weight:500}dialog h3{font-size:14px;font-weight:500}dialog hr{border:0;border-top:1px solid #3c5966;margin:22px 0}.equations{display:flex;justify-content:space-around;flex-wrap:wrap;gap:18px;padding:14px 8px;background:#0b2031;border-radius:7px;font-size:19px;color:#e5f4e9}
@media(max-width:700px){.game-header{padding:10px 13px;height:57px;gap:6px}.brand svg{width:24px}.brand span{font-size:17px;letter-spacing:1px}.brand{gap:5px}#map-picker{min-width:0;font-size:10px;padding:6px 10px;gap:10px;min-height:33px}.map-picker-wrap{left:48%}.icon-button{font-size:19px;min-width:30px;min-height:33px;padding:4px}.header-actions{gap:1px}.camera-quick{top:66px;right:13px;gap:5px}.camera-quick button{font-size:10px;min-height:33px;padding:5px 8px}.camera-quick #home-view,.camera-quick #toggle-minimap{width:33px;font-size:19px}.game-bottom{bottom:max(16px,env(safe-area-inset-bottom));max-width:calc(100% - 18px)}.game-dock{gap:3px;padding:5px;border-radius:13px}.game-dock button{font-size:10px;padding:8px 8px;min-height:43px}.game-dock button>span:first-child{font-size:14px}.prepare-tools{gap:0}.launch-button{min-width:76px!important;gap:5px}.game-dock .launch-button span{font-size:11px!important}.retry-button span{display:none}.dock-divider{margin:0 2px}.action-hint{font-size:10px;margin-bottom:8px;letter-spacing:0}.zero-speed{left:auto;right:0;top:-55px;min-height:27px;font-size:9px}.control-panel{right:10px;top:60px;bottom:100px;width:min(310px,calc(100% - 20px));padding:15px}.minimap-box{right:13px;bottom:103px;width:105px;padding:5px}.force-compass{right:13px;bottom:219px;padding:5px 9px}.force-compass b{font-size:21px}.joystick{left:17px;bottom:107px;width:90px;height:90px}#joystick-thumb{left:25px;top:25px;width:38px;height:38px}.velocity-handle .velocity-label{font-size:10px;padding:4px 6px;left:37px}.velocity-handle.label-left .velocity-label{right:37px}.toast{top:62px;font-size:11px}.world-label{font-size:9px;padding:3px 5px}}
@media(max-width:420px){.brand span{font-size:15px}.brand svg{width:21px}#map-picker{font-size:9px;max-width:132px}.map-picker-wrap{left:47%}.header-actions #fullscreen{display:none}.game-dock button{padding:7px 7px}.game-dock #explore-toggle span{display:none}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}

.particle-badge{position:fixed;top:73px;left:24px;color:#ebf6ff;background:#102d46c9;border:1px solid #ffffff23;border-radius:5px;padding:5px 10px;font-size:12px;pointer-events:none;z-index:5}.particle-settings label{display:flex;justify-content:space-between;align-items:center;margin:10px 0;gap:8px}.particle-settings select{max-width:190px}@media(max-width:600px){.particle-badge{left:12px;top:118px;font-size:11px}}

.follow-pick{position:absolute;right:calc(100% + 10px);bottom:7px;display:flex;align-items:center;gap:2px;background:#0a2233dc;border:1px solid #5c787566;border-radius:12px;padding:3px;backdrop-filter:blur(14px);font-size:11px;white-space:nowrap}.follow-pick button{min-height:34px;min-width:30px;padding:4px 8px;font-size:16px}.follow-pick span{padding:0 4px;color:#d9eadf}@media(max-width:700px){.follow-pick{right:auto;left:0;bottom:calc(100% + 34px)}}

.challenge-wrap{position:relative}.challenge-menu{position:absolute;top:44px;right:0;width:272px;display:grid;gap:2px;padding:6px;background:#0c2639f7;border:1px solid #50727a;border-radius:11px;box-shadow:0 12px 40px #0005;backdrop-filter:blur(14px);z-index:20}.camera-quick .challenge-menu button{display:grid;gap:3px;text-align:left;width:100%;min-height:46px;padding:9px 11px;border:0;border-radius:7px;background:transparent;backdrop-filter:none}.camera-quick .challenge-menu button:hover{background:#d9fff017}.challenge-menu b{font-size:13px;font-weight:600;color:#eef7f1}.challenge-menu small{font-size:11px;line-height:1.5;color:#9fbcc3}.camera-quick .challenge-menu button[aria-pressed=true]{background:#345a54}.camera-quick #challenge-toggle[aria-pressed=true]{background:#4a3d16d9;color:#ffe7a6;border-color:#ffd16688}
.challenge-bar{display:inline-flex;align-items:center;gap:10px;margin-bottom:9px;padding:4px 5px 4px 14px;min-height:36px;background:#2b2511d9;border:1px solid #ffd16655;border-radius:20px;color:#ffe9b0;font-size:12px;box-shadow:0 6px 22px #0005;backdrop-filter:blur(10px)}.challenge-bar .warn{color:#ffb39c}.challenge-bar .ok{color:#b6ffd2}#hint-btn{min-height:28px;padding:3px 11px;border-radius:14px;background:#ffd16630;border:1px solid #ffd16688;color:#fff3cf;font-size:12px}#hint-btn[aria-pressed=true]{background:#ffd16666;color:#2b2511}#hint-btn.attention{animation:hint-pulse 1.3s ease-in-out infinite}@keyframes hint-pulse{50%{box-shadow:0 0 0 6px #ffd16633;background:#ffd16655}}
.challenge-label{color:#ffe7a6;background:#2d2410e6;border-color:#ffd16677;font-size:11px}.pad-label{color:#bff6ef;background:#123a3ee6;border-color:#7de5df77}
.velocity-handle i{background:#2774794d}.velocity-handle.idle i{animation:handle-pulse 1.4s ease-in-out infinite}@keyframes handle-pulse{50%{box-shadow:0 0 0 9px #b8fff033,0 0 22px #8bf2e666;transform:scale(1.12)}}.lock-setting{margin-top:10px}
@media(max-width:700px){.challenge-menu{width:min(272px,calc(100vw - 26px))}.challenge-bar{font-size:10px;gap:6px;padding:3px 4px 3px 10px;min-height:32px;max-width:100%}#hint-btn{font-size:10px;padding:3px 8px}.camera-quick #lines-toggle,.camera-quick #heading-lock{padding:5px 7px}}
@media(prefers-reduced-motion:reduce){#hint-btn.attention,.velocity-handle.idle i{animation:none}}

.challenge-menu .track-progress{font-style:normal;font-size:11px;color:#ffd98a}.challenge-bar .level-nav{min-height:28px;min-width:28px;padding:0 6px;font-size:18px;line-height:1;border-radius:14px;color:#ffe9b0}.challenge-bar .level-nav:disabled{opacity:.25}#challenge-text b{color:#fff3cf}.bar-stars{color:#ffd166;letter-spacing:1px}#demo-btn{min-height:28px;padding:3px 11px;border-radius:14px;background:#9dffc41f;border:1px solid #9dffc477;color:#d8ffe6;font-size:12px}
.level-goal{max-width:min(560px,calc(100vw - 32px));margin:-4px auto 8px;font-size:12px;line-height:1.6;color:#e9f3ee;text-shadow:0 2px 8px #000c}.playing .level-goal{display:none}
.level-banner{position:absolute;top:18%;left:50%;transform:translateX(-50%);z-index:40;width:min(520px,calc(100vw - 32px));padding:22px 26px 16px;text-align:center;background:linear-gradient(160deg,#1c3a4bf2,#0d2233f2);border:1px solid #ffd16688;border-radius:18px;box-shadow:0 20px 60px #0008,0 0 0 1px #ffd16622 inset;cursor:pointer}.level-banner.show{animation:banner-in .5s cubic-bezier(.2,1.4,.4,1)}@keyframes banner-in{from{opacity:0;transform:translate(-50%,-18px) scale(.9)}}.lb-num{font:700 40px/1.1 "Songti SC",serif;letter-spacing:4px;color:#ffd166;text-shadow:0 0 24px #ffd16666}.lb-title{margin-top:6px;font-size:20px;font-weight:600;color:#f2fbf6}.lb-goal{margin-top:12px;font-size:13px;line-height:1.8;color:#cfe3e2}.lb-tags{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:12px}.lb-tags span{font-size:11px;padding:3px 9px;border-radius:12px;background:#ffffff14;border:1px solid #ffffff24;color:#e7f3f0}.level-banner small{display:block;margin-top:12px;font-size:10px;color:#8fb0b6}
.level-card{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:41;width:min(460px,calc(100vw - 32px));padding:24px 24px 18px;text-align:center;background:linear-gradient(160deg,#20402ff5,#0e2433f5);border:1px solid #9dffc488;border-radius:18px;box-shadow:0 20px 70px #000a}.level-card.show{animation:card-in .6s cubic-bezier(.2,1.5,.4,1)}@keyframes card-in{from{opacity:0;transform:translate(-50%,-44%) scale(.85)}}.lc-title{font-size:21px;font-weight:650;color:#f4fff7}.lc-stars{margin:10px 0 6px;font-size:34px;letter-spacing:6px}.lc-stars i{font-style:normal;color:#ffffff26}.lc-stars i.on{color:#ffd166;text-shadow:0 0 18px #ffd16699;display:inline-block;animation:star-pop .5s both}.lc-stars i.on:nth-child(2){animation-delay:.15s}.lc-stars i.on:nth-child(3){animation-delay:.3s}@keyframes star-pop{from{transform:scale(0) rotate(-40deg)}70%{transform:scale(1.35)}}.lc-concept-head{margin-top:8px;font-size:12px;color:#9dffc4;letter-spacing:1px}.lc-concept{margin-top:6px;font-size:14px;line-height:1.8;color:#e6f4ee;text-align:left;background:#00000026;border-radius:10px;padding:10px 14px}.lc-note{margin-top:10px;font-size:11px;color:#a9c7c3}.lc-actions{display:flex;gap:10px;justify-content:center;margin-top:16px}.lc-actions button{min-width:120px;border:1px solid #6d9c80;background:#1f3f38}.lc-actions .primary{background:#c7efd2;color:#153c2d;font-weight:650;border-color:#d5f5df}
.speed-wrap{position:relative}#speed-btn{font-variant-numeric:tabular-nums}.speed-menu{position:absolute;bottom:calc(100% + 12px);right:0;display:flex;gap:3px;padding:5px;background:#0c2639f7;border:1px solid #50727a;border-radius:12px;box-shadow:0 10px 30px #0006;backdrop-filter:blur(14px)}.game-dock .speed-menu button{min-height:38px;padding:6px 10px;font-size:13px}.speed-menu button[aria-pressed=true]{background:#395b51;color:#d3ffe3}
.ring-label{font-size:10px}
@media(max-width:700px){.lb-num{font-size:32px}.lb-title{font-size:17px}.lb-goal{font-size:12px}.level-banner{top:14%;padding:18px 18px 12px}.lc-concept{font-size:12px}.level-goal{font-size:10px}.challenge-bar .level-nav{min-width:24px}#demo-btn{font-size:10px;padding:3px 8px}.game-dock #speed-btn{padding:8px 6px}}
@media(max-width:420px){.game-dock #speed-btn{font-size:10px}}
@media(prefers-reduced-motion:reduce){.level-banner.show,.level-card.show,.lc-stars i.on{animation:none}}

.sound-settings label{display:flex;gap:9px;align-items:flex-start;font-size:11px;margin:0 0 11px;cursor:pointer;color:#d6e8e3}.sound-settings input[type=checkbox]{margin-top:2px;flex:none}.sound-settings small{display:block;margin-top:3px;font-size:10px;line-height:1.6;color:#8fadb6}.sound-settings .volume-setting{align-items:center;color:#a3bdc5}.sound-settings input[type=range]{flex:1;min-height:0;padding:0;accent-color:#a7e9c2}
