:root{--ink: #eef2f4;--dim: #9fb0b8;--panel: rgba(14, 18, 20, .72);--line: rgba(255, 255, 255, .12);--ok: #7fc98a;--warn: #e0a53c;--danger: #e2603f;--accent: #7fb2d9}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:#0e1214}body{font:13px/1.35 ui-sans-serif,-apple-system,SF Pro Text,system-ui,sans-serif;color:var(--ink);-webkit-user-select:none;user-select:none;touch-action:none}#stage{position:fixed;left:0;top:0;width:100vw;height:100vh;transform-origin:0 0;overflow:hidden}#view{display:block;width:100%;height:100%}#hud{position:fixed;inset:0;pointer-events:none}#cluster{position:fixed;left:50%;bottom:max(10px,var(--safe-b, 0px));transform:translate(-50%);width:min(620px,calc(var(--sw, 100vw) * .84));pointer-events:none;filter:drop-shadow(0 10px 26px rgba(0,0,0,.55))}#cluster .cluster{display:block;width:100%;height:auto}#status{position:fixed;top:14px;right:16px;text-align:right;font-size:11px;line-height:1.5;color:var(--dim);pointer-events:none;text-shadow:0 1px 3px rgba(0,0,0,.7)}#status b{color:var(--ink);font-variant-numeric:tabular-nums;font-weight:550}#status .warn{color:var(--warn)}#status .danger{color:var(--danger)}#status .hidden{display:none}#keys{position:fixed;left:14px;bottom:14px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);max-width:320px}#keys h2{margin:0 0 8px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);font-weight:550}#keys dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:3px 12px;font-size:11px}#keys dt{color:var(--accent);font-family:ui-monospace,SFMono-Regular,monospace;white-space:nowrap}#keys dd{margin:0;color:var(--dim)}#keys .hint{margin:10px 0 0;font-size:10px;color:#fff6;line-height:1.4}#keys.hidden{display:none}#toast{position:fixed;left:50%;top:18px;transform:translate(-50%);background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:7px 16px;font-size:12px;opacity:0;transition:opacity .25s;pointer-events:none;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}#toast.show{opacity:1}#loading{position:fixed;inset:0;z-index:60;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:26px;background:radial-gradient(120% 90% at 50% 30%,#1a2229,#0b0e11 70%);transition:opacity .7s ease}#loading.done,body.loading #cluster,body.loading #status,body.loading #keys,body.loading .lil-gui{opacity:0;pointer-events:none}#loading .intro{text-align:center;max-width:420px;padding:0 24px}#loading h1{margin:0;font-size:34px;font-weight:300;letter-spacing:.3em;text-transform:uppercase;color:var(--ink);text-indent:.3em}#loading .sub{margin:10px 0 0;font-size:12px;letter-spacing:.1em;color:var(--dim)}#loading .progress{margin:26px auto 0;width:190px;height:2px;border-radius:1px;background:#ffffff1f;overflow:hidden}#loading .progress i{display:block;height:100%;width:30%;border-radius:1px;background:linear-gradient(90deg,transparent,var(--accent),transparent);animation:sweep 1.5s ease-in-out infinite}@keyframes sweep{0%{transform:translate(-100%)}to{transform:translate(430%)}}#loading .tip{margin:14px 0 0;font-size:11px;color:#ffffff59}#loading .credits{display:flex;gap:22px;flex-wrap:wrap;justify-content:center;font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:#ffffff38;padding:0 24px;text-align:center}.lil-gui{--background-color: rgba(14,18,20,.86);--widget-color: rgba(255,255,255,.1);--font-size: 11px;--input-font-size: 11px}#garage{position:fixed;inset:0;display:none;pointer-events:none;z-index:40}#garage.visible{display:block}.garage-panel{position:absolute;top:0;right:0;bottom:0;width:min(680px,calc(var(--sw, 100vw) * .58));display:flex;flex-direction:column;background:linear-gradient(180deg,#0a0d0ef5,#0a0d0efc);border-left:1px solid rgba(255,255,255,.1);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);pointer-events:auto;box-shadow:-30px 0 80px #00000080}@media(max-width:820px){.garage-panel{width:var(--sw, 100vw);border-left:none}}.garage-panel header{display:flex;align-items:flex-start;justify-content:space-between;padding:22px 24px 14px;border-bottom:1px solid rgba(255,255,255,.08)}.garage-panel h1{margin:0;font-size:15px;font-weight:550;letter-spacing:.22em;text-transform:uppercase;color:var(--ink)}.garage-panel .title p{margin:4px 0 0;font-size:11px;color:var(--dim);letter-spacing:.04em}.garage-panel .close{appearance:none;border:1px solid rgba(255,255,255,.16);background:#ffffff0d;color:var(--ink);font:inherit;font-size:11px;letter-spacing:.06em;padding:8px 14px;border-radius:999px;cursor:pointer;transition:background .15s}.garage-panel .close:hover{background:#ffffff1f}.totals{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:#ffffff12;border-bottom:1px solid rgba(255,255,255,.08)}.tot{background:#0b0e0f;padding:12px 14px 13px}.tot b{display:block;font-size:21px;font-weight:550;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.tot span{display:block;font-size:9.5px;color:var(--dim);letter-spacing:.05em;margin-top:2px}.tot.good b{color:var(--ok)}.tot .bar{display:block;height:3px;margin-top:7px;border-radius:2px;background:#ffffff1f;overflow:hidden}.tot .bar u{display:block;height:100%;background:var(--ok)}.fleet{display:flex;gap:6px;padding:12px 20px 0}.fleet button{flex:1;appearance:none;cursor:pointer;text-align:left;border:1px solid rgba(255,255,255,.1);background:#ffffff08;border-radius:9px;padding:9px 11px;color:var(--dim);font:inherit;transition:border-color .14s,background .14s}.fleet button:hover{border-color:#ffffff3d}.fleet button.on{border-color:var(--accent);background:#8fb2d61f;color:var(--ink)}.fleet button b{display:block;font-size:11.5px;font-weight:550}.fleet button span{display:block;font-size:9.5px;letter-spacing:.05em;margin-top:2px;opacity:.75}#g-nav{display:flex;gap:2px;padding:10px 16px 0;overflow-x:auto;scrollbar-width:none}#g-nav::-webkit-scrollbar{display:none}#g-nav button{appearance:none;border:none;background:none;color:var(--dim);font:inherit;text-align:left;padding:8px 12px 10px;cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap}#g-nav button b{display:block;font-size:11.5px;font-weight:550;letter-spacing:.02em}#g-nav button span{display:none}#g-nav button.on{color:var(--ink);border-bottom-color:var(--accent)}.items{flex:1;overflow-y:auto;padding:16px 20px 24px}.group{margin-bottom:22px}.group h2{margin:0 0 10px;font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;color:#ffffff57;font-weight:550}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(196px,1fr));gap:8px}.card{position:relative;border:1px solid rgba(255,255,255,.1);border-radius:9px;background:#ffffff07;padding:11px 12px 30px;cursor:pointer;transition:border-color .14s,background .14s}.card:hover{border-color:#ffffff3d;background:#ffffff0e}.card.on{border-color:#7fc98a8c;background:#7fc98a17}.card.off{opacity:.42;cursor:not-allowed}.card .row{display:flex;align-items:baseline;gap:8px;justify-content:space-between}.card h3{margin:0;font-size:12px;font-weight:550;color:var(--ink);letter-spacing:.01em}.card .mass{font-size:10px;color:var(--dim);font-variant-numeric:tabular-nums;white-space:nowrap}.card .desc{margin:6px 0 0;font-size:10.5px;line-height:1.42;color:var(--dim)}.card .effect{margin:6px 0 0;font-size:10.5px;line-height:1.42;color:#8fb6d6e6}.card .note{margin:6px 0 0;font-size:10px;color:var(--warn)}.card .state{position:absolute;left:12px;bottom:9px;font-size:8.5px;letter-spacing:.12em;text-transform:uppercase;color:#ffffff4d}.card.on .state{color:var(--ok)}.garage-panel footer{padding:12px 24px;border-top:1px solid rgba(255,255,255,.08);font-size:10.5px;color:#fff6}.empty{color:var(--dim);font-size:11px}body.in-garage #cluster,body.in-garage #status,body.in-garage #keys,body.in-garage .lil-gui{opacity:0;pointer-events:none;transition:opacity .2s}#cluster,#status,.lil-gui{transition:opacity .25s}.pad-focus{outline:2px solid var(--accent)!important;outline-offset:2px;box-shadow:0 0 0 4px #7fb2d92e!important}#padkeys{margin:0;display:grid;grid-template-columns:auto 1fr;gap:3px 12px;font-size:11px}#padkeys dt{color:var(--accent);white-space:nowrap}#padkeys dd{margin:0;color:var(--dim)}#keylist[hidden],#padkeys[hidden]{display:none}#padmenu{position:fixed;inset:0;display:none;z-index:45;pointer-events:none}#padmenu.visible{display:block}.padmenu-panel{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:min(620px,calc(var(--sw, 100vw) * .92));max-height:calc(var(--sh, 100vh) * .9);overflow:auto;pointer-events:auto;background:linear-gradient(180deg,#0a0d0ef2,#0a0d0efa);border:1px solid rgba(255,255,255,.1);border-radius:14px;box-shadow:0 30px 80px #0000008c;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);padding:18px 20px 20px}.padmenu-panel header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.padmenu-panel h2{margin:0;font-size:15px;letter-spacing:.16em;text-transform:uppercase;font-weight:600}.padmenu-panel h3{margin:18px 0 8px;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);font-weight:550}.padmenu-panel .pm-status{margin:4px 0 0;font-size:11px;color:var(--dim)}.padmenu-panel button{appearance:none;font:inherit;font-size:12px;color:var(--ink);cursor:pointer;background:#ffffff0d;border:1px solid var(--line);border-radius:9px;padding:9px 11px;text-align:left}.padmenu-panel button:hover{border-color:#7fb2d980}.padmenu-panel button small{display:block;font-size:10px;color:var(--dim);margin-top:2px}.pm-close{flex:none}.pm-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}@media(max-width:560px){.pm-grid{grid-template-columns:1fr}}.pm-help{margin:0 0 10px;font-size:11px;line-height:1.45;color:var(--dim)}.pm-meter{display:grid;grid-template-columns:74px 1fr 104px;align-items:center;gap:10px;margin:7px 0;font-size:11px}.pm-meter span{color:var(--dim)}.pm-meter b{font-weight:500;color:var(--ink);font-variant-numeric:tabular-nums;text-align:right}.pm-meter .bar{position:relative;height:12px;border-radius:6px;background:#ffffff0f;overflow:hidden}.pm-meter .bar.center:after{content:"";position:absolute;left:50%;top:0;bottom:0;width:1px;background:#ffffff40}.pm-meter i{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:6px}.pm-meter i.raw{background:#ffffff38}.pm-meter i.out{background:var(--accent);height:4px;top:4px}.pm-row{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}.pm-measure-note{min-height:15px;margin:8px 0 0;font-size:11px;color:var(--warn)}.pm-sliders{display:grid;gap:8px;margin-top:10px}.pm-sliders label{display:grid;grid-template-columns:150px 1fr 54px;align-items:center;gap:10px;font-size:11.5px;color:var(--dim)}.pm-sliders label b{font-weight:500;color:var(--ink);text-align:right;font-variant-numeric:tabular-nums}.pm-sliders label.check{grid-template-columns:auto 1fr}.pm-sliders input[type=range]{width:100%;accent-color:var(--accent)}.pm-sliders input[type=checkbox]{accent-color:var(--accent);width:16px;height:16px}@media(max-width:560px){.pm-sliders label{grid-template-columns:1fr 54px}.pm-sliders label input[type=range]{grid-column:1 / -1;grid-row:2}}body.loading #padmenu{display:none}#keys{max-height:calc(var(--sh, 100vh) - 28px);overflow:auto}#touch{position:fixed;inset:0;z-index:30;pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}#touch[hidden]{display:none}#touch button{appearance:none;font:inherit;font-size:11.5px;letter-spacing:.04em;color:var(--ink);background:#0a0e106b;border:1px solid rgba(255,255,255,.18);border-radius:12px;min-width:56px;height:44px;padding:0 11px;touch-action:none;pointer-events:auto;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);-webkit-tap-highlight-color:transparent}#touch button.on{background:#7fb2d961;border-color:#7fb2d9b3}#touch button.engaged{background:#e0a53c6b;border-color:#e0a53cd9}#touch.fly button[data-ground]{display:none}.t-stick-zone{position:absolute;left:0;bottom:0;width:42%;height:66%;pointer-events:auto;touch-action:none}.t-stick{position:absolute;left:calc(var(--safe-l, 0px) + 104px);top:calc(100% - 92px);width:150px;height:66px;transform:translate(-50%,-50%);border-radius:33px;border:1.5px solid rgba(255,255,255,.24);background:#0a0e1038;opacity:.6;transition:opacity .15s}#touch.fly .t-stick{width:132px;height:132px;border-radius:50%}.t-stick.on{opacity:1}.t-knob{position:absolute;left:50%;top:50%;width:52px;height:52px;margin:-26px 0 0 -26px;border-radius:50%;background:#eef2f4e0;box-shadow:0 4px 14px #00000059}.t-pedals{position:absolute;right:calc(var(--safe-r, 0px) + 18px);bottom:calc(var(--safe-b, 0px) + 14px);display:flex;gap:12px;align-items:flex-end;pointer-events:none}.t-pedal{position:relative;width:74px;height:150px;border-radius:16px;overflow:hidden;background:#0a0e1057;border:1.5px solid rgba(255,255,255,.2);touch-action:none;pointer-events:auto;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.t-gas{width:84px;height:188px}#touch.fly .t-gas{display:none}.t-fill{position:absolute;left:0;right:0;bottom:0;height:0;background:linear-gradient(180deg,#7fb2d9d9,#7fb2d973)}.t-brake .t-fill{background:linear-gradient(180deg,#e2603fd9,#e2603f73)}.t-pedal span{position:absolute;left:0;right:0;bottom:10px;text-align:center;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink);text-shadow:0 1px 3px rgba(0,0,0,.6)}.t-pedal.on{border-color:#ffffff73}.t-side{position:absolute;right:calc(var(--safe-r, 0px) + 18px);bottom:calc(var(--safe-b, 0px) + 210px);display:grid;grid-template-columns:repeat(2,auto);gap:8px;justify-items:stretch}.t-top{position:absolute;left:calc(var(--safe-l, 0px) + 12px);top:calc(var(--safe-t, 0px) + 10px);display:flex;gap:8px}body.phone #cluster{width:min(320px,36%);bottom:max(6px,var(--safe-b, 0px))}body.phone #status{font-size:10px;top:calc(var(--safe-t, 0px) + 8px);right:calc(var(--safe-r, 0px) + 12px)}body.phone #st-pos,body.phone #st-perf,body.phone .lil-gui{display:none}body.phone #keys{left:calc(var(--safe-l, 0px) + 12px);bottom:10px;max-width:360px}body.phone .padmenu-panel{padding:14px 16px 16px}body.phone .garage-panel header{padding:14px 16px 10px}#keys,.padmenu-panel,.garage-panel .items{touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}
