:root{--bg: #0d0f14;--bg2: #12151c;--card: #1a1e28;--card2: #222736;--line: #2c3242;--text: #f2f4f8;--muted: #8b93a5;--accent: #ff6b2c;--accent-dark: #d94f14;--cyan: #4dd8ff;--gold: #f5c518;--green: #35c46f;--red: #e5484d;--purple: #a78bfa;--radius: 16px;--tabbar-h: 62px}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{height:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,system-ui,sans-serif;font-size:16px;line-height:1.45;overscroll-behavior:none;user-select:none;-webkit-user-select:none}#root{min-height:100vh}.screen{padding:16px 16px calc(var(--tabbar-h) + 24px + env(safe-area-inset-bottom));max-width:560px;margin:0 auto;animation:screen-in .25s ease}@keyframes screen-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}h1{font-size:24px;font-weight:800;letter-spacing:-.02em}h2{font-size:18px;font-weight:700}.muted{color:var(--muted);font-size:14px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:none;border-radius:14px;padding:14px 20px;font-size:17px;font-weight:700;color:#fff;background:linear-gradient(135deg,var(--accent),var(--accent-dark));cursor:pointer;width:100%;transition:transform .1s ease,filter .15s ease;box-shadow:0 6px 20px #ff6b2c59}.btn:active{transform:scale(.97)}.btn:disabled{filter:grayscale(.7) brightness(.7);box-shadow:none}.btn-ghost{background:var(--card2);box-shadow:none;border:1px solid var(--line)}.btn-sm{padding:8px 14px;font-size:14px;width:auto;border-radius:10px}.chip{background:var(--card2);border:1px solid var(--line);border-radius:999px;padding:8px 14px;font-size:14px;font-weight:600;color:var(--text);cursor:pointer}.chip:active{background:var(--line)}.input{width:100%;background:var(--bg2);border:1.5px solid var(--line);border-radius:14px;color:var(--text);font-size:22px;font-weight:700;text-align:center;padding:12px;outline:none}.input:focus{border-color:var(--accent)}.tabbar{position:fixed;left:0;right:0;bottom:0;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:#0d0f14eb;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--line);display:flex;z-index:50}.tabbar button{flex:1;background:none;border:none;color:var(--muted);font-size:11px;font-weight:600;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer}.tabbar button .ico{font-size:22px;line-height:1;transition:transform .15s ease}.tabbar button.active{color:var(--accent)}.tabbar button.active .ico{transform:translateY(-2px) scale(1.12)}@keyframes spin{to{transform:rotate(360deg)}}.wheel-spin{animation:spin .5s linear infinite}@keyframes flame-pulse{0%,to{opacity:.9;transform:scaleX(1)}50%{opacity:.5;transform:scaleX(.8) translate(4px)}}.fx-flame{animation:flame-pulse .35s ease-in-out infinite;transform-origin:20px 130px}@keyframes neon-pulse{0%,to{opacity:.6}50%{opacity:.25}}.fx-neon{animation:neon-pulse 1.6s ease-in-out infinite}@keyframes trail-dash{to{stroke-dashoffset:-48}}.fx-trail line{animation:trail-dash .5s linear infinite}@keyframes engine-pulse{0%,to{opacity:.75}50%{opacity:.4}}.fx-engine{animation:engine-pulse .8s ease-in-out infinite}@keyframes wheelie{0%{transform:rotate(0)}30%{transform:rotate(-7deg)}60%{transform:rotate(-5deg)}to{transform:rotate(0)}}.car-wheelie{animation:wheelie .9s ease;transform-origin:85% 85%}@keyframes bump{0%{transform:scale(1)}40%{transform:scale(1.08)}to{transform:scale(1)}}.car-bump{animation:bump .5s cubic-bezier(.34,1.56,.64,1)}@keyframes coin-fly{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-46px)}}.coin-fly{position:absolute;font-weight:800;color:var(--gold);animation:coin-fly 1.1s ease forwards;pointer-events:none;text-shadow:0 2px 8px rgba(0,0,0,.6)}.ring-wrap{position:relative;display:grid;place-items:center}.ring-wrap svg{transform:rotate(-90deg)}.ring-value{position:absolute;text-align:center}.ring-value .big{font-size:34px;font-weight:800;letter-spacing:-.02em}.ring-track{stroke:var(--card2)}.ring-bar{stroke:var(--accent);transition:stroke-dashoffset .6s cubic-bezier(.22,1,.36,1)}.ring-bar.done{stroke:var(--green)}.streak{display:inline-flex;align-items:center;gap:6px;background:var(--card2);border:1px solid var(--line);border-radius:999px;padding:6px 12px;font-weight:700;font-size:14px}.banner{border-radius:14px;padding:10px 14px;font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px}.banner.boost{background:#4dd8ff1f;border:1px solid rgba(77,216,255,.4);color:var(--cyan)}.banner.warn{background:#f5c5181a;border:1px solid rgba(245,197,24,.35);color:var(--gold)}.lb-row{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px}.lb-row.me{background:#ff6b2c1a;border:1px solid rgba(255,107,44,.4)}.lb-rank{width:28px;text-align:center;font-weight:800;color:var(--muted);flex-shrink:0}.lb-name{flex:1;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lb-val{font-weight:800}.delta-up{color:var(--green);font-size:12px;font-weight:700}.delta-down{color:var(--red);font-size:12px;font-weight:700}.slot-row{display:flex;align-items:center;gap:12px;padding:12px;background:var(--card);border:1px solid var(--line);border-radius:14px}.slot-emoji{font-size:26px}.slot-info{flex:1}.slot-name{font-weight:700;font-size:15px}.tier-pips{display:flex;gap:4px;margin-top:4px}.pip{width:18px;height:6px;border-radius:3px;background:var(--card2);border:1px solid var(--line)}.pip.on{background:linear-gradient(90deg,var(--accent),var(--gold));border-color:transparent}.paint-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.paint-cell{aspect-ratio:1;border-radius:12px;border:2px solid var(--line);cursor:pointer;display:grid;place-items:center;font-size:12px;font-weight:700;color:#ffffffd9}.paint-cell.sel{border-color:#fff;box-shadow:0 0 0 2px var(--accent)}.track-viewport{position:relative;overflow-x:auto;overflow-y:hidden;border-radius:var(--radius);border:1px solid var(--line);background:linear-gradient(#0e1420,#101a2c 55%,#232a36 55.1%,#2b3140);-webkit-overflow-scrolling:touch;scrollbar-width:none}.track-viewport::-webkit-scrollbar{display:none}.track-scene{position:relative;height:320px}.track-sky{position:absolute;top:0;left:0;height:176px;width:100%;overflow:hidden}.track-road{position:absolute;left:0;right:0;bottom:0;height:144px}.road-line{position:absolute;left:0;right:0;height:4px;background-image:linear-gradient(90deg,#aab2bd 0 40px,transparent 40px 80px);background-size:80px 4px;opacity:.5}.track-car{position:absolute;transition:left 1.2s cubic-bezier(.22,1,.36,1)}.track-label{position:absolute;transform:translate(-50%);text-align:center;white-space:nowrap;font-size:11px;font-weight:700;text-shadow:0 1px 4px #000}.track-post{position:absolute;bottom:130px;text-align:center;font-size:10px;color:var(--muted)}.track-post:after{content:"";display:block;width:3px;height:26px;background:var(--line);margin:2px auto 0;border-radius:2px}.finish-arch{position:absolute;bottom:128px;font-size:40px}.overtake-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#080a0ee0;display:grid;place-items:center;text-align:center;animation:screen-in .2s ease}.overtake-title{font-size:44px;font-weight:900;font-style:italic;letter-spacing:.04em;background:linear-gradient(90deg,var(--gold),var(--accent));-webkit-background-clip:text;background-clip:text;color:transparent;animation:bump .6s cubic-bezier(.34,1.56,.64,1)}@keyframes zoom-car{0%{transform:translate(-130vw)}to{transform:translate(130vw)}}.overtake-car{animation:zoom-car 1.1s cubic-bezier(.4,0,.6,1) forwards}.heatmap{display:grid;grid-template-columns:repeat(13,1fr);gap:4px}.hm-cell{aspect-ratio:1;border-radius:4px;background:var(--card2);border:1px solid var(--line)}.hm-cell.done{background:var(--green);border-color:transparent}.hm-cell.freeze{background:var(--cyan);border-color:transparent}.hm-cell.miss{background:#e5484d8c;border-color:transparent}.hm-cell.today{outline:2px solid var(--gold)}.badge-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.badge-cell{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 6px;text-align:center}.badge-cell .b-emoji{font-size:24px;filter:grayscale(1) opacity(.35)}.badge-cell.earned .b-emoji{filter:none}.badge-cell .b-name{font-size:10px;font-weight:600;color:var(--muted);margin-top:4px}.badge-cell.earned .b-name{color:var(--text)}.onb{min-height:100vh;display:flex;flex-direction:column;padding:24px 20px calc(24px + env(safe-area-inset-bottom));max-width:560px;margin:0 auto}.onb-body{flex:1;display:flex;flex-direction:column;justify-content:center;gap:18px}.onb-dots{display:flex;gap:6px;justify-content:center;margin-bottom:18px}.onb-dot{width:8px;height:8px;border-radius:4px;background:var(--card2);transition:all .25s ease}.onb-dot.on{width:22px;background:var(--accent)}.onb h1{font-size:28px}.onb .lead{font-size:17px;color:var(--text)}.rule-row{display:flex;gap:12px;align-items:flex-start}.rule-row .r-emoji{font-size:24px;flex-shrink:0}.car-carousel{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;margin:0 -20px;padding:0 20px;scrollbar-width:none}.car-carousel::-webkit-scrollbar{display:none}.car-slide{flex:0 0 86%;scroll-snap-align:center;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px;text-align:center}.car-slide.sel{border-color:var(--accent);box-shadow:0 0 0 2px #ff6b2c66}@keyframes drive-in{0%{transform:translate(-60%) rotate(-2deg);opacity:0}to{transform:none;opacity:1}}.drive-in{animation:drive-in .6s cubic-bezier(.22,1,.36,1)}.section-title{display:flex;align-items:center;justify-content:space-between;margin:20px 0 10px}.spinner{width:34px;height:34px;border-radius:50%;border:3px solid var(--card2);border-top-color:var(--accent);animation:spin .8s linear infinite}.center-fill{min-height:100vh;display:grid;place-items:center}.seg{display:flex;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:4px;gap:4px}.seg button{flex:1;border:none;background:none;color:var(--muted);font-weight:700;font-size:14px;padding:8px;border-radius:9px;cursor:pointer}.seg button.active{background:var(--card2);color:var(--text)}
