:root{font-family:Manrope,'Noto Sans SC',sans-serif;color:#e9ece7;background:#101311;color-scheme:dark;--bg:#101311;--panel:#171b18;--panel2:#1e2420;--line:#2a302c;--text:#e9ece7;--muted:#858e87;--soft:#b3bbb5;--accent:#9dd889;--accent-strong:#73c66b;--red:#f4776b;--dial-top:#f3f4ef;--dial-bottom:#cfd4ce;--dial-text:#171b18;--mono:'DM Mono',monospace}
*{box-sizing:border-box}body{margin:0;min-width:320px;background:var(--bg)}button,input{font:inherit}button{color:inherit;cursor:pointer}button:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app{min-height:100vh;background:radial-gradient(ellipse at 30% 45%,#202621 0,#101311 53%);overflow:hidden}.topbar{height:64px;display:flex;align-items:center;padding:0 30px;border-bottom:1px solid #ffffff0c;gap:30px}.brand-mark{display:flex;align-items:center;gap:10px;font:500 10px var(--mono);letter-spacing:1.5px;color:#929a93;white-space:nowrap}.brand-dot{height:8px;width:8px;background:var(--accent);border-radius:50%;box-shadow:0 0 12px #9dd88980}.mode-switch{display:flex;gap:3px;padding:3px;background:#1b201c;border:1px solid #2a302b;border-radius:8px;margin:auto}.mode{border:0;background:transparent;color:#8c958d;padding:8px 16px;border-radius:5px;font-size:12px}.mode.active{background:#333c35;color:#eff3ee;box-shadow:0 1px 4px #0007}.top-actions{display:flex;align-items:center;gap:8px}.icon-btn,.quiet-btn{height:35px;border:1px solid #2b312d;background:#1a1e1b;border-radius:6px;color:#c1c7c2}.icon-btn{width:36px;font-size:17px}.quiet-btn{padding:0 12px;font-size:12px}.drive-layout{display:grid;grid-template-columns:minmax(0,1fr) 384px;min-height:calc(100vh - 64px)}.drive-stage{position:relative;min-height:calc(100vh - 64px);padding:22px 28px 18px;display:flex;flex-direction:column;align-items:center;transition:opacity .3s}.status-row{width:100%;display:flex;align-items:center;justify-content:space-between;color:#909991;font:11px var(--mono)}.live-state{display:flex;gap:8px;align-items:center}.live-state i,.accel-chip i{width:7px;height:7px;border-radius:50%;background:#68706a}.live-state.running i{background:var(--accent);box-shadow:0 0 10px #9dd889}.accel-chip{display:flex;align-items:center;gap:8px;padding:7px 12px;border:1px solid #2b312d;border-radius:99px;background:#171c18;color:#c3cac4}.accel-chip i{background:#6dbb6b}.readout-row{position:absolute;top:17%;width:min(680px,84%);display:flex;justify-content:space-between;align-items:start;pointer-events:none}.readout{display:flex;flex-direction:column;gap:6px;color:#67716a}.readout span{font:9px var(--mono);letter-spacing:1px}.readout strong{color:#dce2dc;font:500 21px var(--mono)}.readout strong small{font-size:10px;color:#768078;margin-left:4px}.readout.center{text-align:center}.readout.right{text-align:right}.gauge-wrap{position:absolute;width:min(500px,72vh,67vw);aspect-ratio:1;top:50%;left:50%;transform:translate(-50%,-49%);display:grid;place-items:center;transition:transform .3s}.gauge-wrap svg{width:100%;height:100%;overflow:visible}.gauge-shadow{fill:#070908;stroke:#252a26;stroke-width:13}.gauge-track{fill:none;stroke:#444b45;stroke-width:14;stroke-dasharray:1055 1408;transform:rotate(135deg);transform-origin:260px 260px;stroke-linecap:butt}.gauge-progress{fill:none;stroke:var(--accent-strong);stroke-width:14;stroke-dasharray:0 1408;transform:rotate(135deg);transform-origin:260px 260px;stroke-linecap:butt;transition:stroke-dasharray .18s}.dial{fill:url(#dial);stroke:#070908;stroke-width:8}.dial-center{fill:#100d0d;stroke:#a53438;stroke-width:2}.gauge-rpm-label{font:13px var(--mono);fill:#d5d6d0;letter-spacing:.5px}.gauge-unit{font:17px var(--mono);fill:#d5d6d0}.gauge-speed{font:64px var(--mono);fill:#fff;filter:url(#glow)}#ticks line{stroke:var(--dial-text);stroke-width:3;opacity:.85}#ticks line.minor{stroke-width:1.5;opacity:.6}#ticks text{font:34px var(--mono);fill:var(--dial-text)}#needle{transform-origin:260px 270px;transition:transform .18s ease-out}#needle path{fill:var(--red);filter:drop-shadow(0 0 5px #f4776b80)}#needle circle{fill:#111}.gear-plate{fill:#af3033}.gear-text{fill:#fff;font:22px var(--mono)}.gauge-caption{position:absolute;bottom:2%;left:0;right:0;display:flex;justify-content:center;gap:12px;color:#929a93;font:9px var(--mono);letter-spacing:1.8px}.gauge-caption span:first-child{color:#d9dfd9}.shift-light{fill:#4b514b}.shift-light.on{fill:#a4dd89;filter:drop-shadow(0 0 4px #9dd889)}.shift-light.hot{fill:#ef665d}.drive-controls{position:absolute;bottom:5.2%;left:26px;right:26px;display:flex;align-items:center;justify-content:center;gap:10px}.control-btn{border:1px solid #303631;background:#202521;border-radius:8px;height:52px;color:#e5eae4;font-size:13px;font-weight:600;transition:background .15s,border .15s,transform .15s}.control-btn:hover{background:#2b322d;border-color:#49534b}.control-btn:active{transform:scale(.98)}.start-btn{padding:0 24px;min-width:178px;display:flex;align-items:center;justify-content:center;gap:10px}.start-icon{color:var(--accent);font-size:18px}.stop-btn{padding:0 20px;color:var(--red)}.demo-controls{display:flex;gap:6px}.demo-controls .small{width:46px;font-size:22px}.sound-pill{min-width:180px}.volume-readout{width:68px;font-size:10px;line-height:1.3;color:#9ba39c}.volume-readout b{font:13px var(--mono);color:#eef1ec}.pedal{width:76px}.accelerator{color:var(--accent)}.stop-outline{width:86px;border-color:#a64444;color:#f07770;background:transparent;font:500 14px var(--mono);letter-spacing:1px}.gps-hint{position:absolute;top:calc(100% + 8px);font-size:11px;color:#778078;text-align:center}.notice{position:absolute;bottom:16px;left:28px;right:28px;display:flex;justify-content:space-between;gap:20px;color:#656e67;font-size:9px}.notice span:last-child{text-align:right}.setup-panel{background:var(--panel);border-left:1px solid #282e29;min-height:calc(100vh - 64px);display:flex;flex-direction:column;max-height:calc(100vh - 64px)}.setup-heading{padding:22px 22px 15px;display:flex;align-items:center;justify-content:space-between}.eyebrow{font:10px var(--mono);letter-spacing:1.4px;color:#7e8980}.setup-heading h1{font-size:20px;margin:3px 0 0;font-weight:600}.panel-close{display:none}.setup-tabs{display:grid;grid-template-columns:repeat(3,1fr);margin:0 16px;border-bottom:1px solid #303630}.setup-tab{height:43px;border:0;border-bottom:2px solid transparent;background:transparent;color:#8e978f;font-size:12px}.setup-tab span{margin-right:7px;font-size:15px}.setup-tab.active{color:#e7ebe5;border-color:var(--accent)}.panel-scroll{overflow:auto;padding:17px 19px 28px;scrollbar-width:thin;scrollbar-color:#414942 transparent}.tab-panel{display:none}.tab-panel.active{display:block}.section-heading{display:flex;justify-content:space-between;align-items:end;margin:3px 0 16px}.section-heading h2{font-size:16px;font-weight:600;margin:4px 0 0}.item-count{color:#778078;font:10px var(--mono);padding-bottom:2px}.segmented{display:grid;grid-template-columns:1fr 1fr;gap:4px;background:#111512;padding:3px;border-radius:7px;margin-bottom:12px}.segmented button{border:0;background:transparent;border-radius:5px;color:#8d968e;font-size:11px;padding:8px}.segmented button.selected{background:#2b332c;color:#e8eee7}.sound-list{display:grid;grid-template-columns:1fr 1fr;gap:7px}.sound-option{min-height:51px;padding:9px 10px;border:1px solid #303630;border-radius:6px;background:#1b201c;text-align:left;display:flex;align-items:center;gap:9px;font-size:11px;color:#bdc5be}.sound-option.selected{border-color:#80bd70;background:#222d23;color:#eff6eb}.sound-icon{height:28px;width:28px;display:grid;place-items:center;flex:none;border-radius:6px;background:#272e29;color:#a5c997;font-size:14px}.sound-option.selected .sound-icon{background:#344733;color:#c2e8aa}.sound-check{margin-left:auto;color:var(--accent);font-size:12px}.sound-description{margin-top:12px;padding:13px;border-left:2px solid var(--accent-strong);background:#1c221d;color:#b4bdb5;font-size:11px;line-height:1.7;border-radius:0 5px 5px 0}.listen-note{display:flex;gap:8px;align-items:center;color:#79827b;font-size:10px;margin:13px 2px}.pulse-icon{color:var(--accent);font-size:17px}.gauge-current{display:flex;align-items:center;gap:12px;border:1px solid #303630;border-radius:7px;padding:12px;background:#1c211d;margin-bottom:14px}.mini-gauge{height:43px;width:43px;border:3px solid #758273;border-radius:50%;display:grid;place-items:center;color:#cce9ba;position:relative;font-size:20px}.mini-gauge span{position:absolute;font:9px var(--mono);color:#f0f3ed}.gauge-current b{display:block;font-size:12px;font-weight:600}.gauge-current small{display:block;color:#889188;font-size:10px;margin-top:4px}.gauge-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px}.gauge-card{height:74px;text-align:left;border:1px solid #303630;border-radius:6px;background:#1a1f1b;padding:9px;display:flex;gap:9px;align-items:center;position:relative}.gauge-card.selected{border-color:#84bc75;background:#222b23}.gauge-thumb{width:48px;height:48px;border-radius:50%;background:radial-gradient(circle,#181b18 36%,#e1e3dc 38%,#b9c0b6 72%,#333a34 74%);display:grid;place-items:center;color:#252a25;font:11px var(--mono);flex:none}.gauge-card:nth-child(4n+2) .gauge-thumb{background:radial-gradient(circle,#bd2429 35%,#111 37%,#272c28 75%,#525b52 77%);color:#fff}.gauge-card:nth-child(4n+3) .gauge-thumb{background:radial-gradient(circle,#e5e9e3 35%,#353b36 37%,#fafbf7 74%,#6e786f 76%)}.gauge-card b{font-size:10px;line-height:1.35;font-weight:600;display:block}.gauge-card small{font-size:9px;color:#889189;display:block;margin-top:3px}.gauge-card .check{position:absolute;right:7px;top:6px;color:var(--accent);font-size:10px}.setting-block{border-bottom:1px solid #2a302b;padding:1px 0 15px;margin-bottom:12px}.setting-block h3{font-size:12px;margin:0 0 4px}.setting-block p{font-size:10px;color:#838c85;margin:0 0 11px}.drive-style{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.drive-style button{border:1px solid #303630;border-radius:5px;background:#1b201c;padding:9px 6px;text-align:left}.drive-style button.selected{border-color:#83b975;background:#233024}.drive-style b,.drive-style small{display:block}.drive-style b{font-size:10px}.drive-style small{color:#8a948b;font-size:9px;margin-top:4px;white-space:nowrap}.range-setting{display:block;border-bottom:1px solid #2a302b;padding:3px 0 13px;margin-bottom:12px}.range-setting>span{display:flex;align-items:baseline;gap:8px;position:relative}.range-setting b,.toggle-setting b{font-size:11px;font-weight:600}.range-setting small,.toggle-setting small{font-size:9px;color:#818a82}.range-setting output{margin-left:auto;color:#abb7ac;font:10px var(--mono)}input[type=range]{width:100%;height:3px;display:block;margin:12px 0 0;accent-color:var(--accent-strong)}.toggle-setting{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #2a302b;padding:8px 0 12px;margin-bottom:4px}.toggle-setting span{display:flex;flex-direction:column;gap:4px}.toggle-setting input{position:absolute;opacity:0;pointer-events:none}.toggle-setting i{height:19px;width:34px;border-radius:12px;background:#3c443e;position:relative;transition:.2s;flex:none}.toggle-setting i:after{content:'';position:absolute;top:3px;left:3px;width:13px;height:13px;border-radius:50%;background:#c3cbc3;transition:.2s}.toggle-setting input:checked+i{background:#609556}.toggle-setting input:checked+i:after{left:18px;background:#fff}.calibration>div{display:flex;align-items:center;gap:10px}.calibration button{height:27px;min-width:31px;border:1px solid #343b35;background:#202621;border-radius:4px}.calibration b{font:11px var(--mono);min-width:36px;text-align:center}.calibration .reset-btn{margin-left:auto;padding:0 12px;font-size:10px}.calibration em{font-style:normal;color:#bf9870}.acceleration{border:0;padding-bottom:0;margin-top:14px}.accel-options{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.accel-options button{border:1px solid #303630;border-radius:5px;background:#1a1f1b;padding:8px 6px;text-align:left;font:10px var(--mono)}.accel-options button.selected{border-color:#83b975;background:#243025;color:#dff2d7}.accel-options small{font:9px 'Noto Sans SC',sans-serif;color:#89938a;display:block;margin-top:3px}.best-time{margin-top:11px;color:#8e988f;font-size:10px}.best-time b{color:#dfe8dc;font:12px var(--mono)}.mobile-settings-bar{display:none}.modal-backdrop{position:fixed;inset:0;background:#070908c9;z-index:10;display:grid;place-items:center;padding:20px;backdrop-filter:blur(5px)}.modal{width:min(440px,100%);position:relative;background:#1a1f1b;border:1px solid #343b35;border-radius:9px;padding:30px;box-shadow:0 20px 90px #0009}.modal-close{position:absolute;right:13px;top:13px}.modal h2{margin:0 0 8px;font-size:20px}.modal p{color:#abb4ac;font-size:12px;line-height:1.8}.guide-step{display:flex;gap:12px;padding:11px 0;border-bottom:1px solid #303630;font-size:12px;line-height:1.6}.guide-step b{color:var(--accent);font:12px var(--mono)}.guide-ok{width:100%;height:40px;margin-top:18px;border:0;border-radius:5px;background:var(--accent-strong);color:#101510;font-size:12px;font-weight:700}.donate-box{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:18px}.qr-placeholder{height:130px;border:1px solid #363e37;border-radius:6px;display:grid;place-items:center;background-color:#f5f5f0;background-image:linear-gradient(90deg,#202620 12%,transparent 12%,transparent 88%,#202620 88%),linear-gradient(#202620 12%,transparent 12%,transparent 88%,#202620 88%);background-size:21px 21px;color:#273128}.qr-placeholder span{background:#f5f5f0;padding:6px 9px;font-size:10px}.donate-label{text-align:center;color:#a9b2aa;font-size:10px;margin-top:6px}.toast{position:fixed;z-index:20;bottom:22px;left:50%;transform:translate(-50%,20px);opacity:0;transition:.25s;background:#303831;color:#edf3ed;padding:10px 16px;border-radius:5px;font-size:11px;pointer-events:none}.toast.show{opacity:1;transform:translate(-50%,0)}.hidden{display:none!important}.light{color-scheme:light;--bg:#e6e9e5;--panel:#f5f6f2;--panel2:#e8ece7;--line:#d0d5d0;--text:#19201a;--muted:#6e786f;--soft:#576158;background:#e6e9e5}.light .app{background:radial-gradient(ellipse at 30% 45%,#fff 0,#e6e9e5 64%)}.light .topbar{border-color:#0001}.light .mode-switch,.light .icon-btn,.light .quiet-btn,.light .control-btn,.light .sound-option,.light .gauge-card,.light .drive-style button,.light .accel-options button{background:#ecefeb;color:#434d45;border-color:#d0d6d0}.light .mode.active,.light .setup-tab.active{color:#19201a;background:#fff}.light .setup-panel{background:#f5f6f2;border-color:#d5dad5}.light .setup-tab{color:#6d776e}.light .gauge-current,.light .sound-description{background:#e9eee8;border-color:#cbd5cb}.light .dial-center{fill:#24211e}.light .gauge-rpm-label,.light .gauge-unit{fill:#ddd}.light .gauge-speed{fill:white}.light .setup-heading h1,.light .section-heading h2,.light .gauge-current b,.light .setting-block h3{color:#1a211b}.light .panel-scroll{scrollbar-color:#bdc6be transparent}
@media(max-width:1000px){.drive-layout{grid-template-columns:minmax(0,1fr) 340px}.gauge-wrap{width:min(440px,66vh,62vw)}.drive-controls{left:14px;right:14px;gap:6px}.demo-controls{gap:4px}.demo-controls .small{width:38px}.sound-pill{min-width:140px}.pedal{width:64px}.readout-row{top:14%}}
@media(max-width:760px){.topbar{height:56px;padding:0 14px;gap:10px}.brand-mark{font-size:8px;letter-spacing:1px}.mode-switch{margin-left:auto;margin-right:0}.mode{padding:7px 9px;font-size:10px}.top-actions{gap:5px}.top-actions .quiet-btn{display:none}.icon-btn{height:32px;width:32px}.drive-layout{display:block;min-height:calc(100dvh - 56px)}.drive-stage{height:calc(100dvh - 56px);min-height:580px;padding:14px 14px 15px}.status-row{font-size:9px}.readout-row{top:15%;width:88%}.readout span{font-size:7px;letter-spacing:.5px}.readout strong{font-size:16px}.gauge-wrap{width:min(440px,60vh,88vw);top:47%;}.drive-controls{bottom:61px;left:12px;right:12px}.start-btn{height:50px;min-width:155px}.demo-controls{width:100%;display:grid;grid-template-columns:38px minmax(90px,1fr) 38px 38px 53px 38px 58px 58px 69px;gap:4px}.demo-controls .control-btn{height:46px}.demo-controls .small{width:auto;font-size:20px}.sound-pill{min-width:0;font-size:10px}.volume-readout{width:auto;font-size:8px}.volume-readout b{font-size:10px}.pedal{width:auto;font-size:10px}.stop-outline{width:auto;font-size:11px}.gps-hint{top:calc(100% + 5px);font-size:9px}.notice{bottom:12px;left:14px;right:14px;font-size:8px;justify-content:center}.notice span:first-child{text-align:center}.notice span:last-child{display:none}.setup-panel{position:fixed;z-index:5;left:0;right:0;bottom:0;height:min(80dvh,680px);min-height:0;max-height:none;border:1px solid #343b35;border-bottom:0;border-radius:13px 13px 0 0;transform:translateY(calc(100% - 48px));transition:transform .3s ease;box-shadow:0 -12px 40px #0006}.setup-panel.open{transform:translateY(0)}.setup-heading{padding:11px 18px 7px}.setup-heading .eyebrow,.setup-heading h1{display:none}.panel-close{display:block}.setup-tabs{margin:0 14px}.panel-scroll{padding:14px 17px 28px}.mobile-settings-bar{display:block;position:fixed;z-index:4;bottom:0;left:0;right:0;height:49px;pointer-events:none}.mobile-settings-bar button{pointer-events:auto;position:absolute;right:15px;bottom:10px;height:38px;border:1px solid #4b554d;border-radius:7px;background:#222923;color:#e8eee8;padding:0 13px;font-size:11px;box-shadow:0 4px 18px #0008}.setup-panel.open~.mobile-settings-bar{display:none}}
@media(max-width:390px){.brand-mark span:last-child{display:none}.topbar{gap:8px}.mode{padding:7px 7px}.gauge-wrap{width:min(390px,56vh,92vw)}.demo-controls{grid-template-columns:32px minmax(73px,1fr) 32px 32px 46px 32px 47px 47px 56px}.drive-controls{left:7px;right:7px}.demo-controls .control-btn{height:42px}.notice{font-size:7px}.readout-row{top:13%}}
@media(max-height:700px) and (min-width:761px){.gauge-wrap{width:min(400px,60vh,60vw)}.readout-row{top:13%}.drive-controls{bottom:4.5%}.notice{bottom:8px}}
.rpm-bar{position:absolute;left:27%;right:27%;bottom:9%;height:4px;background:#3d453e;border-radius:9px;overflow:hidden}.rpm-bar span{display:block;height:100%;width:0;background:var(--accent-strong);transition:width .12s}.dial-center{fill:var(--dial-core,#100d0d)}#needle path{fill:var(--needle-tone,#f4776b)}.gauge-wrap[data-gauge*="赛车方向盘"] .dial{fill:#cbd9d5}.gauge-wrap[data-gauge*="虚拟座舱"] .gauge-speed{font-size:72px}.gauge-wrap[data-gauge*="圆形仪表"] .dial-center{stroke-width:4}.gauge-wrap[data-gauge*="Engine Data"] .gauge-rpm-label{font-size:11px}.ui-hidden .topbar,.ui-hidden .readout-row,.ui-hidden .status-row,.ui-hidden .drive-controls{opacity:0;pointer-events:none;transition:opacity .3s}.redline .drive-stage:after{content:'';position:absolute;inset:0;pointer-events:none;border:2px solid #e9504870;box-shadow:inset 0 0 80px #b81e1624}.flash-pop .drive-stage:after{background:#ffffff2c}.drive-stage:after{transition:background .08s}@media(min-width:761px){.drive-controls{bottom:10%}.gps-hint{top:calc(100% + 8px);bottom:auto}}
.qr-placeholder{position:relative;overflow:hidden;border:1px dashed #69756c;background:#222823;color:#bdc8bd}.qr-placeholder input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.qr-placeholder img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#fff}.qr-placeholder span{z-index:1;background:#141a15d9;color:#eef2ed}.qr-note{font-size:10px!important;color:#818a83!important}@media(min-width:761px){.gauge-wrap{top:43%}}
