@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@600;700;800;900&family=Nunito+Sans:wght@400;600;700;800;900&display=swap');
:root{font-family:'Nunito Sans',system-ui,sans-serif;color:#fff;background:#172b39;font-synthesis:none}*{box-sizing:border-box}body{margin:0;overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid #fff;outline-offset:5px}button{touch-action:manipulation}#world,.vignette{position:fixed;inset:0;width:100%;height:100%}.vignette{pointer-events:none;background:linear-gradient(90deg,rgba(7,21,33,.8),transparent 62%),linear-gradient(0deg,rgba(5,19,30,.9),transparent 48%)}body.racing .vignette{background:linear-gradient(0deg,#07152199,transparent 32%),linear-gradient(180deg,#07152188,transparent 24%)}header{position:fixed;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:25px 38px;z-index:4}.wordmark{color:white;text-decoration:none;font-family:'Barlow Condensed',Impact,sans-serif;font-size:17px;font-weight:800;letter-spacing:2px;line-height:1.1}.wordmark span{display:block;font-size:32px;letter-spacing:1px}.top-actions{display:flex;gap:12px;align-items:center}.prototype{font-size:11px;letter-spacing:2px;opacity:.7;margin-right:16px}.icon-btn{background:#1224387d;border:1px solid #ffffff40;border-radius:99px;color:white;padding:10px 17px;font-size:14px;backdrop-filter:blur(12px)}.intro{position:absolute;left:6%;top:19%;max-width:490px}.eyebrow{font-size:12px;letter-spacing:2.4px;font-weight:800;color:#a4f4e5}.eyebrow>span{display:inline-block;width:6px;height:6px;background:#91ffe2;border-radius:50%;margin-right:8px}h1{font-family:'Barlow Condensed',Impact,sans-serif;font-weight:800;font-size:clamp(48px,5.6vw,84px);line-height:.98;letter-spacing:-1px;margin:18px 0}h1 em{font-style:normal;color:#bcff82}p{font-size:16px;line-height:1.6;color:#d5e1e8} .track-meta{display:flex;gap:17px;margin:22px 0;font-size:11px;letter-spacing:1.5px;font-weight:800}.track-meta span+span{border-left:1px solid #ffffff40;padding-left:17px}.primary{border:0;border-radius:13px;background:#bdff82;color:#15362d;font-weight:900;font-size:18px;padding:17px 26px;box-shadow:0 5px 0 #6d9b47;min-width:230px;transition:transform .15s,filter .15s}.primary:hover{filter:brightness(1.1);transform:translateY(-2px)}.primary span{float:right;margin-left:45px}.instructions{font-size:12px;line-height:2.2;margin-top:23px;color:#c3d1d8}.instructions b{font-size:11px;font-weight:800;color:white}.instructions i{margin:0 8px;font-style:normal}.circuit-tag{position:absolute;right:6%;top:44%;text-align:right;text-shadow:0 2px 10px #142a36}.circuit-tag>span{font-size:11px;letter-spacing:2px;color:#c8ffee}.circuit-tag h2{font-family:'Barlow Condensed',Impact,sans-serif;font-size:38px;line-height:1;margin:10px 0}.circuit-tag p{margin:0;font-size:13px}.garage{position:absolute;bottom:24px;left:6%;right:6%}.garage-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.garage-heading h2{font-size:16px;font-weight:800;margin:0}.garage-heading>span{color:#bbcbd4;font-size:13px}.character-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}.character{height:115px;background:#183447d9;border:1px solid #ffffff29;color:white;border-radius:14px;display:flex;align-items:center;gap:14px;padding:8px 14px;text-align:left;position:relative;overflow:hidden;transition:all .2s;backdrop-filter:blur(12px)}.character:hover{background:#315566;transform:translateY(-4px)}.character.selected{border:2px solid #c0ff88;background:#305243;box-shadow:0 0 24px #a1ff5520}.character img{height:100px;width:67px;object-fit:cover;border-radius:9px}.character strong{font-size:17px;display:block}.character small{font-size:11px;color:#d4dfdf;display:block;margin-top:3px}.character .check{position:absolute;top:5px;right:8px;color:#bcff82;font-size:13px}.garage-foot{display:flex;justify-content:space-between;font-size:11px;color:#b9cbcf;margin-top:12px}.garage-foot span:first-child{color:#baff86}.hidden{display:none!important}#hud{position:fixed;inset:0;pointer-events:none}#hud button{pointer-events:auto}.race-top{position:absolute;top:115px;left:38px;right:38px;display:flex;align-items:center;gap:30px}.place strong{font-family:'Barlow Condensed',Impact,sans-serif;font-size:75px;font-style:italic;line-height:.9}.place strong span{font-size:25px}.place small{display:block;font-size:10px;letter-spacing:2px;margin-top:8px}.lap,.timer{border-left:1px solid #ffffff55;padding-left:28px}.lap small,.timer small{display:block;font-size:11px;letter-spacing:2px;color:#bde1db}.lap b,.timer b{font-size:27px;font-weight:900;font-variant-numeric:tabular-nums}.timer{margin-left:auto;border:0;text-align:right}.race-bottom{position:absolute;bottom:30px;left:38px;right:38px;display:flex;justify-content:space-between;align-items:flex-end}.power-panel{background:#112634ce;border:1px solid #ffffff30;backdrop-filter:blur(12px);padding:20px;border-radius:20px;width:270px}#charges{display:flex;gap:8px;margin:14px 0}#charges span{height:15px;flex:1;border:1px solid #66d9df66;transform:skewX(-15deg);background:#234654}#charges span.full{background:#6af5ff;box-shadow:0 0 12px #49edff66}#boost{width:100%;border:0;border-radius:10px;color:#12323f;background:#79ebef;padding:12px 8px;font-weight:900;font-size:14px}#boost:disabled{color:#a7c5ca;background:#304b55}.effects{display:flex;justify-content:space-between;gap:10px;font-size:12px;margin-top:14px;color:#9fb8c1}.effects .active{color:#ffc1eb;text-shadow:0 0 12px #ff81d8}.speed{text-align:center;margin-bottom:5px}.speed b{font-family:'Barlow Condensed',Impact,sans-serif;font-size:80px;font-weight:700;font-style:italic;line-height:1}.speed>span{font-size:12px;letter-spacing:1px;margin-left:10px}.speed small{display:block;font-size:11px;letter-spacing:2px;color:#bbf6eb;margin-top:8px}.map-wrap{text-align:center;background:#112634aa;border-radius:20px;padding:8px 10px 14px;border:1px solid #ffffff25}.map-wrap>span{display:block;font-size:10px;letter-spacing:2px;color:#c2d8de}#map{width:200px;height:155px}#countdown{position:fixed;inset:0;display:grid;place-items:center;font-family:'Barlow Condensed',Impact,sans-serif;font-size:160px;font-weight:900;color:#d3ffa5;text-shadow:0 6px 0 #234c37,0 10px 70px #000;pointer-events:none}#toast{position:fixed;left:50%;top:25%;transform:translate(-50%,-10px);opacity:0;transition:.2s;background:#102c3de8;border:1px solid #b5fff166;padding:13px 24px;border-radius:99px;font-weight:800;font-size:16px;pointer-events:none;text-align:center}#toast.show{opacity:1;transform:translate(-50%,0)}#status{position:absolute;top:210px;left:40px;color:#ccffac;font-weight:800;font-size:15px}.modal{position:fixed;inset:0;background:#061623ba;backdrop-filter:blur(12px);display:grid;place-items:center;z-index:10;padding:20px}.dialog{background:#142e3d;border:1px solid #7eb4b755;box-shadow:0 20px 100px #0005;border-radius:24px;text-align:center;padding:38px;max-width:490px;width:100%;max-height:95vh;overflow:auto}.dialog h2{font-family:'Barlow Condensed',Impact,sans-serif;font-size:52px;margin:15px 0}.dialog .primary{display:block;width:100%;margin-top:24px}.secondary{background:transparent;border:0;color:#d4e4e7;padding:16px;font-size:14px}.result-row{display:flex;gap:12px;align-items:center;padding:8px 10px;border-radius:8px;font-size:14px}.result-row.you{background:#bdff8220;color:#ceffaa}.result-row img{width:30px;height:35px;object-fit:cover;border-radius:6px}.result-row span:last-child{margin-left:auto;font-variant-numeric:tabular-nums}.touch-controls{display:none} @media(max-width:1100px){.character{gap:8px;padding:6px}.character img{width:50px;height:85px}.character strong{font-size:15px}.character small{font-size:10px}.intro{top:17%}.circuit-tag{top:40%}.garage{bottom:18px}.character{height:102px}}@media(max-height:750px) and (min-width:761px){.intro{top:17%}h1{font-size:55px}.intro p{margin:10px 0}.track-meta{margin:14px 0}.instructions{margin-top:15px}.character{height:85px}.character img{height:73px}.garage-foot{margin-top:8px}.circuit-tag{top:39%}}@media(max-width:760px){header{padding:18px 20px}.wordmark{font-size:12px}.wordmark span{font-size:25px}.prototype{display:none}.icon-btn{padding:8px 12px;font-size:12px}.intro{left:6%;top:14%}h1{font-size:49px}.intro p{font-size:14px;margin:10px 0}.track-meta{font-size:9px;gap:12px;margin:15px 0}.track-meta span+span{padding-left:12px}.primary{padding:13px 20px;min-width:205px;font-size:16px}.instructions{font-size:10px;margin-top:12px}.instructions b{font-size:10px}.circuit-tag{display:none}.garage{bottom:14px}.garage-heading h2{font-size:14px}.garage-heading>span{font-size:11px}.character-grid{gap:7px;grid-template-columns:repeat(3,1fr)}.character{height:71px;gap:7px;padding:5px}.character img{width:36px;height:59px}.character strong{font-size:14px}.character small{font-size:9px}.garage-foot{font-size:10px}.garage-foot span:last-child{display:none}.race-top{top:95px;left:20px;right:20px;gap:20px}.place strong{font-size:58px}.lap{padding-left:16px}.lap b,.timer b{font-size:22px}.race-bottom{bottom:112px;left:16px;right:16px}.power-panel{width:200px;padding:13px}.power-panel .eyebrow{font-size:10px;letter-spacing:1px}.speed b{font-size:50px}.speed>span{font-size:10px}.speed small{font-size:9px;letter-spacing:1px}.map-wrap{position:fixed;right:15px;top:175px;padding:3px;background:#10263280}.map-wrap>span{display:none}#map{width:115px;height:90px}.touch-controls{position:absolute;bottom:20px;left:16px;right:16px;display:flex;gap:10px;justify-content:space-between;pointer-events:auto}.touch-controls button{background:#163e50d9;color:#fff;border:1px solid #ffffff55;border-radius:16px;height:65px;min-width:65px;font-size:17px;font-weight:800;touch-action:none;user-select:none}.touch-controls button:active{background:#508889}#status{top:170px;left:20px;font-size:12px;max-width:180px}#toast{top:38%;font-size:13px;min-width:230px}.dialog{padding:25px}.dialog h2{font-size:43px}}@media(max-height:660px) and (max-width:760px){.intro{top:13%}h1{font-size:36px;margin:12px 0}.intro p{display:none}.instructions{line-height:1.7}.garage-heading{margin-bottom:6px}.character{height:60px}.character img{height:48px}.garage{bottom:8px}}@media(prefers-reduced-motion:reduce){button{transition:none}}

@media(max-width:760px){.touch-controls{gap:6px}.touch-controls button{min-width:0;flex:1;font-size:14px}.touch-controls .accelerator{background:#bdff82;color:#15362d}.instructions{font-size:11px}.instructions b{font-size:11px}.instructions i{margin:0 4px}}
@media(pointer:coarse) and (min-width:761px){.touch-controls{position:absolute;bottom:12px;left:30%;right:30%;display:flex;gap:8px}.touch-controls button{flex:1;min-height:55px;touch-action:none;border-radius:12px;background:#234957;color:white;border:1px solid #a8ded3}.touch-controls .accelerator{background:#bdff82;color:#15362d}.race-bottom{bottom:90px}}

.character-grid{grid-template-columns:repeat(9,minmax(0,1fr));gap:8px}.character{padding:7px;gap:8px}.character img{width:49px}.character strong{font-size:15px}.character small{font-size:10px}.skill-description{margin:9px 0 0;font-size:13px;line-height:1.4;color:#d7eddc}.garage-foot{margin-top:6px}#power-summary{font-size:12px;line-height:1.4;margin:12px 0 6px}#crystal-rule{font-size:11px;color:#afd4cd}#recover:disabled{opacity:.5}.power-panel .eyebrow{font-size:10px;letter-spacing:1.2px}
@media(max-width:1000px){.character{gap:5px}.character img{width:35px}.character strong{font-size:13px}.character small{font-size:9px}}
@media(max-width:760px){.character-grid{display:flex;overflow-x:auto;gap:7px;padding:4px 0 10px;scroll-snap-type:x mandatory}.character{min-width:112px;height:79px;scroll-snap-align:start}.character img{width:42px;height:65px}.garage-heading>span{font-size:0}.garage-heading>span:after{content:'Swipe to choose';font-size:11px}.garage-foot span{font-size:10px}.skill-description{font-size:12px;margin:4px 0}header{padding:13px 12px}.top-actions{gap:5px}.icon-btn{font-size:11px;padding:8px}.wordmark span{font-size:22px}#power-summary{font-size:11px}.power-panel{padding:11px}.instructions{max-width:355px;line-height:1.8}}

.character img{object-fit:cover;object-position:center 35%}
@media(max-width:760px){header{align-items:flex-start}.top-actions{max-width:225px;justify-content:flex-end;flex-wrap:wrap;gap:4px}.icon-btn{padding:7px;font-size:11px}.wordmark{font-size:10px}.wordmark span{font-size:20px}}

#weather{position:absolute;top:106px;left:24px;padding:8px 12px;border-radius:12px;background:#142d40dd;color:#e2f4ff;font-size:14px;font-weight:700;letter-spacing:.04em;pointer-events:none}@media(max-width:700px){#weather{top:88px;left:12px;font-size:12px;padding:6px 9px}}

.online-button{display:block;margin-top:12px;padding:12px 20px;background:#264758;color:#e1fff1;border:1px solid #80b6a4;border-radius:14px;font-weight:700;font-size:16px}#online-screen{position:fixed;inset:0;z-index:50;background:#071d2be8;display:grid;place-items:center;padding:20px;overflow:auto}.online-card{width:min(540px,100%);background:#163044;border:1px solid #548774;border-radius:24px;padding:26px;color:#ecfff3}.online-card h2{font-size:28px;margin:0 0 12px}.online-card p{line-height:1.5}.online-card button{padding:12px 16px;border-radius:12px;margin:6px 4px 6px 0;font-weight:700;font-size:16px}.online-card label{display:block;margin-top:16px}.online-card input{background:#f3fff7;border:0;border-radius:10px;padding:12px;font-size:22px;text-transform:uppercase;width:150px;color:#123}#room-code-display{font-size:27px;letter-spacing:.15em}#room-members>div{display:flex;align-items:center;gap:12px;border-bottom:1px solid #416153;padding:8px}#room-members img{width:38px;height:42px;object-fit:cover;border-radius:8px}#room-message{color:#f5dc98;min-height:24px}#connection{position:absolute;top:145px;left:24px;font-size:14px;background:#142d40dd;color:#efffe7;padding:8px;border-radius:10px}#online-screen.hidden{display:none}@media(max-width:700px){#connection{top:125px;left:12px}.online-card{padding:18px}}

#power-icon{display:inline-block;font-size:36px;line-height:1;vertical-align:middle;margin:4px 10px 8px 0}#power-timer{width:calc(100% - 65px);height:9px;accent-color:#91efe0}#drift-meter{display:block;width:100%;height:6px;accent-color:#ffc95d;margin:8px 0}progress{border:0;border-radius:8px;overflow:hidden;background:#ffffff20}progress::-webkit-progress-bar{background:#ffffff20}progress::-webkit-progress-value{background:#91efe0}#drift-meter::-webkit-progress-value{background:#ffc95d}

.track-choice{display:block;font-size:13px;margin:12px 0;color:#daefdf}.track-choice select{display:block;width:100%;max-width:350px;padding:10px;margin-top:6px;background:#203e39;color:#fff;border:1px solid #77a695;border-radius:8px;font:inherit}

.cup-podium{display:flex;align-items:flex-end;justify-content:center;gap:10px;margin:18px 0}.podium-place{width:30%;text-align:center}.podium-place>img{width:65px;height:65px;object-fit:contain}.podium-place>strong{display:block;font-size:13px;margin:5px 0}.podium-place>div{display:flex;flex-direction:column;justify-content:center;height:60px;background:#496f78;border-radius:8px 8px 0 0}.podium-0>div{height:95px;background:#8c7436}.podium-2>div{height:45px;background:#765444}.podium-place b{font-size:22px}.podium-place span{font-size:12px}.dialog{max-height:90vh;overflow:auto}

#victory-line{color:#e0ffc2;font-size:17px;line-height:1.5;margin:14px 0;font-style:italic}

/* Supplied Great Oak scene provides the garage backdrop. Racing remains real-time 3D. */
body:has(#menu:not(.hidden)){overflow-y:auto}
#menu{position:relative;min-height:100vh;padding:130px 6% 28px;display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,.75fr);gap:32px;align-items:start;background:linear-gradient(90deg,#071923ed 0%,#071923a0 38%,#07192315 75%),linear-gradient(0deg,#071923 0%,transparent 65%),url('assets/great-oak.jpg') center top/cover fixed}
#menu .intro{position:static;max-width:490px}
#menu .circuit-tag{display:block;position:static;justify-self:end;align-self:center;text-align:left;width:min(100%,360px);padding:24px;background:#092735eb;border:1px solid #86e9df80;border-radius:18px;box-shadow:0 12px 40px #00101966;text-shadow:none}
#menu .circuit-tag>span{font-size:14px;color:#b8fff1;letter-spacing:.1em}
#menu .circuit-tag p{font-size:16px;color:#f1fff9}
#menu .garage{position:static;grid-column:1/-1;margin-top:16px}
#menu .character-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));overflow:visible}
#menu .character{min-width:0}
@media(max-width:1100px){#menu .character-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:760px){#menu{padding:115px 18px 24px;grid-template-columns:1fr;gap:20px;background-position:60% top}#menu .circuit-tag{justify-self:stretch;width:100%;max-width:none}#menu .garage{margin:0}#menu .character-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#menu .character{width:auto;height:100px}#menu .intro{max-width:100%}#menu .garage-heading>span{font-size:13px}}

.arcade-return{display:inline-flex;align-items:center;text-decoration:none;min-height:44px;color:inherit}.arcade-return:focus-visible{outline:3px solid #ffdc73;outline-offset:3px}
/* Mobile racing: keep the track visible and controls within the safe area. */
#mobile-options,#rotate-phone{display:none}#mobile-settings{max-width:440px;width:calc(100% - 32px);max-height:90dvh;overflow:auto;border:1px solid #82bdb5;border-radius:20px;background:#163044;color:#fff;padding:20px;font-size:16px}#mobile-settings::backdrop{background:#071923d9}#mobile-settings button,#mobile-settings a{display:inline-flex;align-items:center;min-height:44px;margin:5px;padding:9px 12px;border-radius:10px;border:1px solid #9ed5bd;background:#244d56;color:white;font:inherit}#mobile-settings p{line-height:1.5}
@media(pointer:coarse){
 #mobile-options{display:inline-flex;align-items:center}#world{height:100dvh;touch-action:none}header{padding:8px max(10px,env(safe-area-inset-right)) 8px max(10px,env(safe-area-inset-left))}.top-actions{max-width:none}.icon-btn{min-height:44px;font-size:14px}
 #menu{padding-top:85px}#menu h1{font-size:38px}#menu .instructions,#menu .circuit-tag{display:none}#menu .intro{max-width:none}#menu .character-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
 body.racing header{left:auto;right:0;padding:4px max(8px,env(safe-area-inset-right));width:auto;z-index:8}body.racing header .wordmark,body.racing header .prototype,body.racing #music,body.racing #sound,body.racing #recover,body.racing header .arcade-return{display:none}body.racing .top-actions{gap:4px;flex-wrap:nowrap}
 .race-top{position:fixed;top:max(8px,env(safe-area-inset-top));left:max(10px,env(safe-area-inset-left));right:auto;gap:14px;align-items:center}.place strong{font-size:30px;line-height:1}.place small,.timer,#racer-count{display:none}.lap{border:0;padding:0}.lap small{font-size:12px}.lap b{font-size:18px}.race-bottom{position:static}.speed,.map-wrap,#status,#weather,#power-label,#charges,#power-icon,#power-timer,#power-summary,#crystal-rule{display:none}.power-panel{position:fixed;right:max(10px,env(safe-area-inset-right));bottom:max(76px,env(safe-area-inset-bottom));width:auto;padding:0;border:0;background:none;box-shadow:none}#boost{margin:0;min-height:44px;max-width:180px;padding:8px 14px;font-size:14px}
 .touch-controls{position:fixed;bottom:max(10px,env(safe-area-inset-bottom));left:max(10px,env(safe-area-inset-left));right:max(10px,env(safe-area-inset-right));display:flex;gap:8px;pointer-events:auto;justify-content:space-between}.touch-controls button{flex:0 1 80px;min-width:44px;min-height:48px;height:48px;font-size:14px;border-radius:12px;background:#163e50b8;touch-action:none}.touch-controls button:nth-child(3){margin-left:auto}.tilt-mode .touch-controls button[data-key]:not([data-key="ShiftLeft"]){display:none}.tilt-mode .touch-controls{right:auto}.tilt-mode .touch-controls button{margin:0}.tilt-mode .power-panel{bottom:max(10px,env(safe-area-inset-bottom))}
 #toast{top:64px;max-width:60vw;min-width:0;font-size:14px;padding:8px 12px;pointer-events:none}#connection{top:55px;left:10px;font-size:12px;max-width:45vw}.modal{padding:12px}.dialog{max-height:85dvh}.dialog h2{font-size:32px}
}
@media(pointer:coarse) and (orientation:portrait){#rotate-phone{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:#102b39;padding:28px}#rotate-phone strong{font-size:28px}#rotate-phone p{font-size:18px}#rotate-phone a{color:#caffae;min-height:44px;padding:14px}}
