:root{--bg:#0b0d10;--panel:#0e1116c7;--panel-solid:#12161c;--line:#ffffff17;--text:#e9edf2;--muted:#8d97a5;--accent:#e8403a;--accent2:#f5b83d;--good:#3ecf7a;--radius:14px;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--text);-webkit-user-select:none;user-select:none;margin:0;overflow:hidden}#app{position:fixed;inset:0}#app canvas{display:block}.hidden{display:none!important}.loading{z-index:50;background:radial-gradient(at 50% 30%,#1b2230,#07090c 70%);place-items:center;transition:opacity .6s;display:grid;position:fixed;inset:0}.loading .box{text-align:center;width:min(520px,86vw)}.loading h1{letter-spacing:.02em;margin:0 0 6px;font-size:44px;font-weight:800}.loading h1 span{color:var(--accent)}.loading p{color:var(--muted);margin:0 0 26px}.bar{background:#ffffff14;border-radius:6px;height:6px;overflow:hidden}.bar>div{background:linear-gradient(90deg, var(--accent), var(--accent2));width:0;height:100%;transition:width .25s}.loading .step{color:var(--muted);margin-top:10px;font-size:13px}.menu{z-index:40;background:linear-gradient(90deg,#07090ceb 0%,#07090cbf 38%,#07090c00 70%);grid-template-columns:minmax(360px,460px) 1fr;display:grid;position:fixed;inset:0}.menu .side{flex-direction:column;gap:13px;padding:28px 30px 0;display:flex;overflow-y:auto}.menu h1{letter-spacing:.01em;margin:0;font-size:40px;font-weight:800}.menu h1 span{color:var(--accent)}.menu .sub{color:var(--muted);margin-top:-8px;font-size:14px}.menu .group{flex-direction:column;gap:8px;display:flex}.menu .label{text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-size:12px}.seg{flex-wrap:wrap;gap:6px;display:flex}.seg button,.btn{appearance:none;border:1px solid var(--line);color:var(--text);font:inherit;cursor:pointer;background:#ffffff0a;border-radius:10px;padding:9px 13px;font-size:14px;transition:all .15s}.seg button:hover,.btn:hover{background:#ffffff17}.seg button.on{background:var(--text);color:#0b0d10;border-color:var(--text);font-weight:600}.cars{grid-template-columns:1fr 1fr;gap:10px;display:grid}.car-card{border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;background:#ffffff08;padding:12px;transition:all .15s}.car-card:hover{background:#ffffff12}.car-card.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset;background:#e8403a14}.car-card b{font-size:15px;display:block}.car-card small{color:var(--muted);margin-top:4px;font-size:12px;line-height:1.4;display:block}.swatches{flex-wrap:wrap;gap:8px;display:flex}.swatch{cursor:pointer;border:2px solid #ffffff26;border-radius:50%;width:28px;height:28px}.swatch.on{border-color:#fff;transform:scale(1.12)}select{appearance:none;border:1px solid var(--line);width:100%;color:var(--text);font:inherit;background:#ffffff0d;border-radius:10px;padding:10px 12px}select option{background:#12161c}input[type=range]{width:100%;accent-color:var(--accent)}.go{z-index:2;appearance:none;font:inherit;letter-spacing:.04em;color:#fff;cursor:pointer;background:linear-gradient(90deg,#e8403a,#f0663a);border:0;border-radius:12px;margin-top:4px;padding:15px;font-size:18px;font-weight:800;position:sticky;bottom:12px;box-shadow:0 10px 30px #e8403a59}.go:hover{filter:brightness(1.08)}.menu .foot{color:var(--muted);margin-top:auto;padding-bottom:20px;font-size:11px;line-height:1.5}.menu .keys{color:var(--muted);font-size:12px;line-height:1.7}.menu .keys kbd,.help kbd{border:1px solid var(--line);font:inherit;color:var(--text);background:#ffffff14;border-bottom-width:2px;border-radius:5px;padding:1px 6px;font-size:11px}.hud{pointer-events:none;z-index:20;position:fixed;inset:0}.hud .street{border:1px solid var(--line);white-space:nowrap;background:#0d1117d1;border-radius:999px;padding:7px 18px;font-size:15px;font-weight:600;position:absolute;top:18px;left:50%;transform:translate(-50%)}.hud .street small{color:var(--muted);margin-left:8px;font-weight:400}.hud .speedo{width:230px;height:230px;position:absolute;bottom:22px;right:26px}.hud .speedo svg{width:100%;height:100%;overflow:visible}.hud .speedo .val{text-align:center;place-items:center;display:grid;position:absolute;inset:0}.hud .speedo .val b{font-variant-numeric:tabular-nums;text-shadow:0 2px 12px #0009;font-size:58px;font-weight:800;line-height:1}.hud .speedo .val span{color:var(--muted);letter-spacing:.15em;margin-top:2px;font-size:12px;display:block}.hud .speedo .gear{color:var(--accent2);text-shadow:0 2px 8px #0009;font-size:26px;font-weight:800;position:absolute;bottom:36px;left:50%;transform:translate(-50%)}.hud .speedo .rpm{color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.hud .assists{gap:6px;display:flex;position:absolute;bottom:258px;right:30px}.hud .assists i{letter-spacing:.08em;color:#56606d;border:1px solid var(--line);background:#ffffff0f;border-radius:5px;padding:3px 6px;font-size:10px;font-style:normal;font-weight:700}.hud .assists i.on{color:#111;background:var(--accent2);border-color:var(--accent2)}.hud .assists i.act{color:#fff;background:var(--accent);border-color:var(--accent)}.hud .minimap{background:#1a2029;border:2px solid #ffffff26;border-radius:50%;width:220px;height:220px;position:absolute;bottom:22px;left:22px;overflow:hidden;box-shadow:0 8px 30px #00000073}.hud .minimap canvas{width:100%;height:100%}.hud .info{color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 12px;font-size:13px;line-height:1.5;position:absolute;top:18px;left:22px}.hud .info b{color:var(--text)}.hud .race{text-align:center;position:absolute;top:68px;left:50%;transform:translate(-50%)}.hud .race .t{font-variant-numeric:tabular-nums;text-shadow:0 2px 14px #000000b3;font-size:44px;font-weight:800}.hud .race .s{color:var(--muted);font-size:14px}.hud .race .d{font-size:18px;font-weight:700}.hud .race .d.good{color:var(--good)}.hud .race .d.bad{color:var(--accent)}.hud .toast{text-shadow:0 2px 16px #000c;opacity:0;text-align:center;font-size:30px;font-weight:800;transition:opacity .3s;position:absolute;top:40%;left:50%;transform:translate(-50%,-50%)}.hud .toast.show{opacity:1}.hud .toast small{color:var(--muted);font-size:16px;font-weight:500;display:block}.hud .fps{color:var(--muted);background:var(--panel);border-radius:8px;padding:4px 8px;font:12px ui-monospace,monospace;position:absolute;top:18px;right:22px}.hud .hint{color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:5px 12px;font-size:12px;position:absolute;bottom:22px;left:50%;transform:translate(-50%)}.overlay{z-index:45;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#06080bb8;place-items:center;display:grid;position:fixed;inset:0}.pause{flex-direction:column;gap:10px;width:min(420px,90vw);display:flex}.pause h2{margin:0 0 8px;font-size:30px}.pause .btn{text-align:left;padding:13px 16px;font-size:15px}.help{color:var(--muted);columns:2;margin-top:8px;font-size:13px;line-height:1.8}.map{z-index:44;background:#0c1016;position:fixed;inset:0}.map canvas{cursor:grab;width:100%;height:100%}.map .top{pointer-events:none;justify-content:space-between;align-items:center;display:flex;position:absolute;top:16px;left:16px;right:16px}.map .top>*{pointer-events:auto}.map .title{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 14px;font-size:20px;font-weight:800}.map .tip{color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 14px;font-size:13px}.map .places{flex-direction:column;gap:5px;width:270px;max-height:calc(100vh - 100px);display:flex;position:absolute;top:70px;left:16px;overflow-y:auto}.map .places .btn{text-align:left;white-space:nowrap;text-overflow:ellipsis;background:#0e1116eb;padding:7px 11px;font-size:13px;overflow:hidden}.races{flex-direction:column;gap:8px;display:flex}.race-item{border:1px solid var(--line);cursor:pointer;background:#ffffff08;border-radius:10px;justify-content:space-between;align-items:center;gap:10px;padding:9px 12px;display:flex}.race-item:hover{background:#ffffff14}.race-item.on{border-color:var(--accent2);background:#f5b83d14}.race-item small{color:var(--muted);font-size:12px}.tc,.map .map-close,.map .tip .t-touch{display:none}html.touch{--tc-st:max(10px, env(safe-area-inset-top));--tc-sb:max(12px, env(safe-area-inset-bottom));--tc-sl:max(14px, env(safe-area-inset-left));--tc-sr:max(14px, env(safe-area-inset-right));--tcb:clamp(40px, 11vh, 52px);--tcp:clamp(60px, min(20vh, 15vw), 112px)}html.touch,html.touch body{touch-action:none;overscroll-behavior:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.touch #app canvas{touch-action:none}.touch .menu .side,.touch .map .places,.touch .credits .cr-scroll,.touch .overlay{touch-action:pan-y;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.touch input[type=range]{touch-action:none;height:34px}.touch .menu{grid-template-columns:minmax(0,480px) 1fr}.touch .menu .side{padding:var(--tc-st) 18px 0 calc(var(--tc-sl) + 4px);gap:12px}.touch .menu h1{font-size:30px}.touch .seg{gap:8px}.touch .seg button,.touch .btn{min-height:44px;padding:10px 15px;font-size:15px}.touch .seg button:hover:not(.on),.touch .btn:hover,.touch .car-card:hover:not(.on),.touch .race-item:hover:not(.on){background:#ffffff0a}.touch .seg button:active,.touch .btn:active,.touch .car-card:active,.touch .race-item:active{background:#ffffff29}.touch .car-card{padding:14px}.touch .swatches{gap:10px}.touch .swatch{width:38px;height:38px}.touch select{min-height:46px;font-size:16px}.touch .race-item{min-height:52px;padding:11px 14px}.touch .go{bottom:var(--tc-sb);padding:17px}.touch .menu .foot{padding-bottom:calc(var(--tc-sb) + 8px)}.menu .tc-note:empty{display:none}.menu .tc-note{color:var(--accent2);font-size:13px}.touch .overlay{-webkit-backdrop-filter:none;padding:var(--tc-st) 16px var(--tc-sb);background:#06080bdb;place-items:safe center;overflow-y:auto}.touch .pause .btn{min-height:50px}.touch .help{display:none}.touch .map .tip{font-size:12px}.touch .map .tip .t-desk{display:none}.touch .map .tip .t-touch{display:inline}.touch .map .map-close{background:#0e1116eb;place-items:center;width:48px;height:48px;padding:0;font-size:20px;display:grid}.touch .map .top{top:var(--tc-st);left:var(--tc-sl);right:var(--tc-sr);gap:10px}.touch .map .places{top:calc(var(--tc-st) + 60px);left:var(--tc-sl);width:220px;max-height:calc(100% - var(--tc-st) - var(--tc-sb) - 70px)}.touch .map .places .btn{min-height:40px;font-size:14px}.touch .hud .hint,.touch .hud .assists{display:none}.touch .hud .minimap{left:var(--tc-sl);top:var(--tc-st);pointer-events:auto;width:104px;height:104px;bottom:auto}.touch .hud .street{top:var(--tc-st);left:calc(var(--tc-sl) + 116px);max-width:calc(100vw - var(--tc-sl) - var(--tc-sr) - 116px - 5 * var(--tcb) - 56px);text-overflow:ellipsis;padding:6px 12px;font-size:13px;overflow:hidden;transform:none}.touch .hud .speedo{left:50%;right:auto;bottom:calc(var(--tc-sb) - 16px);transform-origin:50% 100%;transform:translate(-50%)scale(.56)}.touch .hud .fps{top:calc(var(--tc-st) + var(--tcb) + 8px);right:var(--tc-sr)}.touch .hud .race{top:calc(var(--tc-st) + var(--tcb) + 4px)}.touch .hud .race .t{font-size:32px}.touch .hud .toast{font-size:24px}.touch .tc{pointer-events:none;display:block;position:absolute;inset:0}.tc .top,.tc .zone,.tc .b,.tc .tilt,.tc .shift,.tc .rot{pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none}.tc .b{appearance:none;font:inherit;color:#ffffffeb;background:#10141a57;border:2px solid #ffffff4d;border-radius:50%;place-items:center;margin:0;padding:0;display:grid;position:absolute;box-shadow:0 2px 10px #00000040}.tc .b.on{background:#ffffff57;border-color:#fffc}.tc .b svg{fill:none;stroke:currentColor;stroke-width:2.2px;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;width:50%;height:50%}.tc .b b{letter-spacing:.08em;pointer-events:none;font-size:12px;font-weight:800}.tc .b small{opacity:.7;pointer-events:none;margin-top:3px;font-size:10px;display:block}.tc .pedal{align-content:center}.tc .sq{border-radius:18px}.tc .top{top:var(--tc-st);right:var(--tc-sr);gap:8px;display:flex;position:absolute}.tc .top .b{width:var(--tcb);height:var(--tcb);border-radius:12px;position:static}.tc .top .b.lit{color:#ffd76a;border-color:#ffd76abf}.tc [data-h=gas]{right:var(--tc-sr);bottom:var(--tc-sb);width:calc(var(--tcp) * 1.05);height:calc(var(--tcp) * 1.75);border-color:#3ecf7a8c;align-content:end;padding-bottom:14px}.tc [data-h=gas].on{background:#3ecf7a66;border-color:#3ecf7af2}.tc [data-h=brake]{right:calc(var(--tc-sr) + var(--tcp) * 1.05 + 12px);bottom:var(--tc-sb);width:var(--tcp);height:calc(var(--tcp) * 1.15);border-color:#e8403a8c}.tc [data-h=brake].on{background:#e8403a6b;border-color:#e8403af2}.tc [data-h=hand]{right:calc(var(--tc-sr) + var(--tcp) * 1.05 + 12px);bottom:calc(var(--tc-sb) + var(--tcp) * 1.15 + 10px);width:var(--tcp);height:calc(var(--tcp) * .6)}.tc [data-h=horn]{right:calc(var(--tc-sr) + var(--tcp) * 1.05 + 12px + (var(--tcp) - var(--tcb)) / 2);bottom:calc(var(--tc-sb) + var(--tcp) * 1.75 + 20px);width:var(--tcb);height:var(--tcb)}.tc .shift{right:var(--tc-sr);bottom:calc(var(--tc-sb) + var(--tcp) * 1.75 + 10px);width:calc(var(--tcp) * 1.05);gap:8px;display:none;position:absolute}.tc.manual .shift{display:flex}.tc .shift .b{height:calc(var(--tcp) * .55);border-radius:14px;flex:1;position:static}.tc .zone{width:46vw;height:60vh;display:none;position:absolute;bottom:0;left:0}.tc.m-slider .zone{display:block}.tc .track{left:var(--tc-sl);bottom:calc(var(--tc-sb) + 18px);width:calc(var(--tcp) * 2.9);height:calc(var(--tcp) * .9);pointer-events:none;background:#10141a42;border:2px solid #ffffff38;border-radius:999px;place-items:center;display:grid;position:absolute}.tc .track:before{content:"";background:#ffffff47;height:2px;position:absolute;top:50%;left:14%;right:14%}.tc .knob{width:calc(var(--tcp) * .78);height:calc(var(--tcp) * .78);background:#ffffff3d;border:2px solid #fff9;border-radius:50%}.tc .zone.on .track{border-color:#fff6}.tc .zone.on .knob{background:#ffffff73}.tc .zl{left:calc(var(--tc-sl) + var(--tcp) * 1.45);bottom:calc(var(--tc-sb) + var(--tcp) * .9 + 26px);letter-spacing:.14em;color:#ffffff73;pointer-events:none;font-size:10px;font-weight:700;position:absolute;transform:translate(-50%)}.tc .zone.on .zl{display:none}.tc .steer-b{bottom:var(--tc-sb);width:calc(var(--tcp) * 1.15);height:calc(var(--tcp) * 1.15);display:none}.tc.m-buttons .steer-b{display:grid}.tc [data-h=left]{left:var(--tc-sl)}.tc [data-h=right]{left:calc(var(--tc-sl) + var(--tcp) * 1.15 + 14px)}.tc .tilt{left:calc(var(--tc-sl) + var(--tcp) * 1.05 + 14px);bottom:var(--tc-sb);flex-direction:column;align-items:center;gap:10px;display:none;position:absolute}.tc.m-tilt .tilt{display:flex}.tc .tilt .b{width:var(--tcb);height:var(--tcb);position:static}.tc .tilt .ind{width:calc(var(--tcp) * .9);height:calc(var(--tcp) * .9);background:#10141a42;border:2px solid #ffffff4d;border-radius:50%;place-items:center;display:grid}.tc .tilt .ind i{background:#ffffffbf;border-radius:2px;width:72%;height:4px}.tc.no-tilt .tilt:before{content:"нет датчика";white-space:nowrap;color:var(--accent2);font-size:11px}.tc.m-tilt [data-h=brake]{right:auto;left:var(--tc-sl);width:calc(var(--tcp) * 1.05);height:calc(var(--tcp) * 1.75)}.tc.m-tilt [data-h=hand]{bottom:var(--tc-sb)}.tc.m-tilt [data-h=horn]{bottom:calc(var(--tc-sb) + var(--tcp) * .6 + 14px)}.tc .rot{border:1px solid var(--line);text-align:center;white-space:nowrap;background:#0e1116db;border-radius:12px;padding:10px 16px;font-size:14px;font-weight:600;display:none;position:absolute;top:34%;left:50%;transform:translate(-50%)}@media (orientation:portrait){.tc .rot{display:block}.touch .hud .street{display:none}.touch .hud .speedo{bottom:calc(var(--tc-sb) + var(--tcp) * 1.75 + var(--tcb) + 26px)}}@media (max-height:500px){.touch .go{padding:12px;font-size:16px}.touch .menu h1{font-size:26px}}
