:root{color-scheme:dark;--bg: #0e1116;--panel: rgba(14, 18, 24, .72);--line: rgba(255, 255, 255, .16);--ink: #eef2f6;--muted: #a9b4c0;--accent: #ffb000;--ok: #3ddc84;--bad: #ff6b5b;--sa-t: env(safe-area-inset-top, 0px);--sa-r: env(safe-area-inset-right, 0px);--sa-b: env(safe-area-inset-bottom, 0px);--sa-l: env(safe-area-inset-left, 0px)}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font:15px/1.4 system-ui,-apple-system,Segoe UI,sans-serif;overflow:hidden;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;overscroll-behavior:none}.view{position:fixed;inset:0}.view canvas{display:block;width:100%;height:100%;touch-action:none}button{font:inherit;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 14px;min-height:44px;min-width:44px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);cursor:pointer}button[aria-pressed=true]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}button.primary{background:var(--accent);color:#1a1200;font-weight:700;border:0}button:active{transform:translateY(1px)}button:focus-visible{outline:3px solid var(--accent);outline-offset:2px}.hud{position:fixed;left:calc(10px + var(--sa-l));bottom:calc(10px + var(--sa-b));display:flex;flex-direction:column;gap:8px;z-index:5}.hud-row{display:flex;gap:8px;flex-wrap:wrap}.debug{position:fixed;top:calc(8px + var(--sa-t));right:calc(8px + var(--sa-r));z-index:6;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:8px 10px;font:12px/1.45 ui-monospace,SF Mono,Menlo,Consolas,monospace;max-width:min(460px,60vw);pointer-events:none;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.debug b{color:#fff}.debug .ok{color:var(--ok)}.debug .bad{color:var(--bad)}.debug .err{color:var(--bad);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.screen{position:fixed;inset:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:calc(20px + var(--sa-t)) calc(20px + var(--sa-r)) calc(20px + var(--sa-b)) calc(20px + var(--sa-l));background:radial-gradient(120% 90% at 50% 10%,#1b2430,var(--bg));text-align:center}.screen[hidden]{display:none}.screen h1{margin:0;font-size:34px;letter-spacing:.02em}.screen p{margin:0;color:var(--muted);max-width:480px}.big{font-size:20px;font-weight:700;padding:14px 40px;background:var(--accent);color:#1a1200;border:0}.status{color:var(--bad)!important;font-size:13px}.rotate{display:none;z-index:30}@media(orientation:portrait)and (pointer:coarse){.rotate{display:flex}}.install{position:fixed;z-index:25;left:calc(10px + var(--sa-l));right:calc(10px + var(--sa-r));top:calc(10px + var(--sa-t));display:flex;gap:10px;align-items:flex-start;background:#fff7e0;color:#2a2000;border-radius:14px;padding:12px 14px;box-shadow:0 10px 30px #00000059}.install[hidden]{display:none}.install p{margin:4px 0 0;color:#4a3b10;font-size:14px}.install .share{font-weight:700}.install button{background:transparent;color:#2a2000;border-color:#0003}@media(prefers-reduced-motion:reduce){button:active{transform:none}}.garage{position:fixed;inset:0;z-index:15;display:flex;flex-direction:column;background:#0f1319;color:var(--ink);padding:var(--sa-t) var(--sa-r) var(--sa-b) var(--sa-l)}.garage[hidden]{display:none}.garage .muted{color:var(--muted)}.garage .ok{color:var(--ok);font-weight:700}.garage .bad{color:var(--bad);font-weight:700}.g-head{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--line)}.g-head b{font-size:17px}.g-x{margin-left:auto}.g-body{flex:1;display:flex;min-height:0}.g-list{width:200px;flex:none;overflow-y:auto;border-right:1px solid var(--line);padding:6px;display:flex;flex-direction:column;gap:4px}.g-item{flex:none;display:flex;align-items:center;gap:8px;text-align:left;padding:6px 8px;border-radius:10px;background:transparent;border-color:transparent}.g-item b,.g-item small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.g-item.on{background:#ffb0001f;border-color:var(--accent)}.g-item small{display:block;color:var(--muted);font-size:12px}.g-item>span:nth-child(2){flex:1;min-width:0}.logo{width:34px;height:34px;flex:none;display:inline-block}.logo.lg{width:72px;height:72px}.logo svg{width:100%;height:100%;display:block}.g-detail{flex:1;min-width:0;display:flex;flex-direction:column}.g-title{display:flex;gap:10px;align-items:center;padding:8px 12px 4px}.g-title h2{margin:0;font-size:18px}.g-title p{margin:2px 0 0;font-size:13px}.g-bar{display:flex;gap:8px;flex-wrap:wrap;padding:4px 12px 8px}.seg{display:flex;border:1px solid var(--line);border-radius:12px;overflow:hidden}.seg button{border:0;border-radius:0;background:transparent;min-height:40px;padding:6px 12px;backdrop-filter:none;-webkit-backdrop-filter:none}.seg button[aria-selected=true],.seg button[aria-pressed=true]{background:var(--accent);color:#1a1200;font-weight:700;box-shadow:none}.g-tab{flex:1;overflow-y:auto;padding:4px 12px 16px;-webkit-overflow-scrolling:touch}.g-tab h3,.g-tab h4{margin:10px 0 6px}.g-tab p{margin:4px 0}.brand{display:flex;gap:12px;align-items:flex-start;background:#ffffff0a;border-radius:12px;padding:10px}.brand h3{margin:0}.paint{display:flex;gap:12px;align-items:center;margin:10px 0}.swatches{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}.swatch{width:44px;height:44px;min-width:44px;border-radius:50%;padding:0;background:radial-gradient(circle at 35% 30%,rgba(255,255,255,.55),transparent 45%),var(--c);border:2px solid rgba(255,255,255,.25)}.swatch.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}.swatch.lg{width:64px;height:64px;border-radius:14px;flex:none}.desc{display:grid;grid-template-columns:90px 1fr;gap:4px 10px;margin:8px 0}.desc dt{color:var(--muted);font-weight:600}.desc dd{margin:0}.trims{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px}.trim{border:1px solid var(--line);border-radius:12px;padding:8px 10px}.trim.on{border-color:var(--accent)}.trim p{font-size:13px;color:#cfd6de}.figs{display:flex;gap:10px;flex-wrap:wrap}.figs svg{flex:1 1 300px;max-width:420px;background:#ffffff08;border-radius:12px}.side .gr{stroke:#5b6672;stroke-width:1.5}.side .bd{fill:#ffb0002e;stroke:var(--accent);stroke-width:1.5;stroke-linejoin:round}.side .wh{fill:#1b1f25;stroke:#8b96a3;stroke-width:1.5}.side .rim{fill:none;stroke:#8b96a3}.side .cg{fill:var(--bad)}.side .dim{stroke:var(--muted);stroke-dasharray:3 3}.side .lbl,.chart .ax{fill:var(--muted);font:10px system-ui,sans-serif}.chart .g{stroke:#ffffff14}.chart .red{stroke:var(--bad);stroke-dasharray:4 3}.chart .tq-l{fill:none;stroke:#4fc3f7;stroke-width:2.2}.chart .pw-l{fill:none;stroke:var(--accent);stroke-width:2.2}.chart .tq{fill:#4fc3f7}.chart .pw{fill:var(--accent)}.kpis{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}.kpis div{flex:1 1 90px;background:#ffffff0d;border-radius:12px;padding:8px 10px}.kpis b{display:block;font-size:20px}.kpis span{color:var(--muted);font-size:12px}.tables{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:10px}.tables table{width:100%;border-collapse:collapse;font-size:13px;background:#ffffff08;border-radius:12px;overflow:hidden}.tables caption{text-align:left;font-weight:700;padding:6px 0}.tables th{text-align:left;color:var(--muted);font-weight:500;padding:5px 8px;vertical-align:top;width:42%;border-top:1px solid var(--line)}.tables td{padding:5px 8px;border-top:1px solid var(--line)}.est{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.04em;color:#1a1200;background:#ffd166;border-radius:6px;padding:1px 5px;vertical-align:1px}.reps{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px}.rep{background:#ffffff0a;border-radius:12px;padding:8px 12px}.issues,.estimates{margin:6px 0;padding-left:18px;font-size:13px}.issues li{margin-bottom:6px}.issues li.error code{color:var(--bad)}.issues li.warning code{color:#ffd166}.issues small,.estimates code{color:var(--muted)}.estimates li{margin-bottom:4px}@media(max-width:700px){.g-list{width:64px}.g-item>span:nth-child(2),.g-item>span:last-child{display:none}.g-item{justify-content:center}}@media(max-height:430px){.g-head{padding:4px 12px}.g-title{padding-top:4px}.g-title p{display:none}.g-bar{padding-bottom:4px}.seg button{min-height:36px}}.g-3d{padding:0;display:flex;flex-direction:column;overflow:hidden}.v3-host{flex:1;display:flex;min-height:0}.v3-wrap{position:relative;flex:1 1 60%;min-width:0}.v3-canvas{position:absolute;inset:0}.v3-canvas canvas{width:100%;height:100%;display:block;touch-action:none}.v3-info{position:absolute;left:6px;top:6px;max-width:calc(100% - 12px);font-size:11px;line-height:1.35;background:#0e1218a8;border-radius:8px;padding:4px 7px;pointer-events:none}.v3-ctrl{flex:0 0 300px;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:6px;border-left:1px solid var(--line)}.v3-row{display:flex;flex-wrap:wrap;gap:6px}.v3-row>button{min-height:40px;padding:6px 10px;font-size:14px}.v3-sl{display:grid;grid-template-columns:82px 1fr;align-items:center;gap:2px 8px;font-size:13px;color:var(--muted)}.v3-sl input{width:100%;height:32px;accent-color:var(--accent)}.v3-sl output{grid-column:2;font-size:12px;color:var(--ink)}@media(max-width:760px){.v3-ctrl{flex-basis:220px}}@media(max-height:430px){.garage:has(.g-3d) .g-title{display:none}.v3-info .muted{display:none}}.lab-body{flex:1;display:flex;min-height:0}.lab-side{flex:0 0 300px;overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:8px;border-right:1px solid var(--line)}.lab-cars{display:grid;grid-template-columns:1fr 1fr;gap:6px}.lab-cars button{display:flex;align-items:center;gap:6px;min-height:44px;padding:4px 6px;font-size:12px;text-align:left}.lab-cars button span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lab-cars button[aria-pressed=true]{border-color:var(--accent)}.lab-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.lab-row>button{min-height:42px;padding:6px 10px;font-size:14px}.lab-row>.muted{width:44px;font-size:12px}.lab-view{position:relative;flex:1;min-width:0}.lab-canvas{position:absolute;inset:0}.lab-canvas canvas{width:100%;height:100%;display:block;touch-action:none}.lab-stats{position:absolute;left:6px;top:6px;max-width:calc(100% - 12px);font-size:11px;line-height:1.4;background:#0e1218b3;border-radius:8px;padding:4px 8px;pointer-events:none}.small{font-size:11px;line-height:1.35}@media(max-width:760px){.lab-side{flex-basis:230px}.lab-cars{grid-template-columns:1fr}}.lab-cars .logo.sm svg{width:22px;height:22px;display:block}.drive{position:fixed;inset:0;z-index:30;background:#000;touch-action:none}.drive-canvas{position:absolute;inset:0}.drive-canvas canvas{width:100%;height:100%;display:block}.drive-hud{position:absolute;left:calc(10px + env(safe-area-inset-left));top:calc(8px + env(safe-area-inset-top));max-width:46%;pointer-events:none;text-shadow:0 1px 3px rgba(0,0,0,.8);font-size:12px}.drive-hud button{pointer-events:auto;min-height:36px;padding:4px 10px}.drive-hud .speed{font-size:40px;font-weight:800;line-height:1}.drive-hud .speed small{font-size:14px;font-weight:600;margin-left:4px}.drive-hud .gear{position:absolute;left:150px;top:0;font-size:34px;font-weight:800;color:var(--accent)}.drive-hud .rpm{position:relative;width:220px;height:14px;background:#00000073;border-radius:7px;overflow:hidden;margin:6px 0 4px}.drive-hud .rpm i{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,#4bd36b,#ffb000)}.drive-hud .rpm i.red{background:#ff3b30}.drive-hud .rpm span{position:absolute;right:6px;top:-1px;font-size:11px}.drive-hud .mini{opacity:.92}.drive-hud .warn{color:#ffcc4d}.drive-hud .bad{color:#ff6b5a;font-weight:700}.drive-hud .big{font-size:18px}.drive-top{position:absolute;right:calc(8px + env(safe-area-inset-right));top:calc(8px + env(safe-area-inset-top));display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;max-width:54%}.drive-top button{min-height:40px;padding:6px 10px;font-size:13px;display:inline-flex;align-items:center;gap:6px}.drive-top button svg{width:20px;height:20px}.drive-menu{position:absolute;right:calc(8px + env(safe-area-inset-right));top:calc(58px + env(safe-area-inset-top));width:min(520px,70vw);max-height:70vh;overflow-y:auto;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:10px;display:flex;flex-direction:column;gap:8px;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.drive-menu .row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.drive-menu button{min-height:40px;font-size:13px;padding:6px 10px}.drive-tele{position:absolute;left:calc(10px + env(safe-area-inset-left));top:150px;border-radius:10px;width:300px;height:100px;pointer-events:none}.drive-steer{position:absolute;left:calc(14px + env(safe-area-inset-left));bottom:calc(14px + env(safe-area-inset-bottom));width:min(38vw,340px);height:70px;border-radius:35px;background:#14181e73;border:1px solid var(--line);touch-action:none}.drive-steer .knob{position:absolute;top:7px;left:50%;width:56px;height:56px;margin-left:-28px;border-radius:50%;background:#ffffffd9;box-shadow:0 2px 8px #00000080;pointer-events:none}.drive-pedals{position:absolute;right:calc(14px + env(safe-area-inset-right));bottom:calc(14px + env(safe-area-inset-bottom));display:flex;gap:12px}.pedal{position:relative;width:78px;height:min(46vh,210px);border-radius:16px;background:#14181e73;border:1px solid var(--line);overflow:hidden;touch-action:none}.pedal span{position:absolute;left:0;right:0;top:8px;text-align:center;font-size:11px;z-index:1;pointer-events:none}.pedal i{position:absolute;left:0;right:0;bottom:0;height:0;pointer-events:none}.pedal.gas i{background:#4bd36bb3}.pedal.brake i{background:#ff3b30b3}.drive-btns{position:absolute;right:calc(200px + env(safe-area-inset-right));bottom:calc(14px + env(safe-area-inset-bottom));display:grid;grid-template-columns:60px;gap:8px}.drive-btns button{min-height:52px;font-size:18px;padding:4px}.drive-btns .hb{font-size:11px;line-height:1.1}@media(pointer:fine){.drive-steer,.drive-pedals,.drive-btns{opacity:.55}}.ecu{z-index:40}.ecu-tabs{margin:8px 12px 0;align-self:flex-start}.ecu-body{flex:1;overflow-y:auto;padding:10px 12px 20px;display:flex;flex-direction:column;gap:10px}.ecu-body .row,.ecu-body .chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.ecu-body .chips button[aria-pressed=true],.ecu-tabs button[aria-pressed=true],.part button[aria-pressed=true],.drive-menu button[aria-pressed=true]{background:var(--accent);color:#111;border-color:var(--accent)}.ecu-body label{font-size:13px;color:var(--muted);display:inline-flex;align-items:center;gap:6px}.ecu-body input[type=number]{width:90px;min-height:40px;font:inherit;color:var(--ink);background:#0000004d;border:1px solid var(--line);border-radius:10px;padding:4px 8px}.cells{display:grid;grid-template-columns:repeat(auto-fill,minmax(70px,1fr));gap:6px}.cell{display:flex;flex-direction:column;align-items:center;padding:4px;min-height:52px}.cell small{font-size:10px;color:var(--muted)}.cell.up{background:#ff8c0040}.cell.down{background:#50a0ff40}.cell.sel{outline:2px solid var(--accent)}.mapchart,.dynochart{width:100%;max-width:760px;height:auto;background:#00000040;border-radius:10px}.part{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.part>span:first-child{width:140px;color:var(--muted)}.file{border:1px solid var(--line);border-radius:12px;padding:10px 14px;cursor:pointer}.dyno-head{display:flex;flex-direction:column;gap:4px}.dyno-head .acc{color:var(--accent)}.codes{margin:0;padding-left:18px}.live th{text-align:left;color:var(--muted);font-weight:500;padding-right:14px}.warn{color:#ffcc4d}.status{color:var(--accent)}.drive-menu[hidden],.drive-tele[hidden]{display:none}
