@font-face{font-family:Barlow;font-style:normal;font-weight:400 500;font-display:swap;src:url('./fonts/barlow-regular.ttf')}@font-face{font-family:Barlow;font-style:normal;font-weight:600 900;font-display:swap;src:url('./fonts/barlow-bold.ttf')}@font-face{font-family:'Barlow Condensed';font-style:normal;font-weight:400 900;font-display:swap;src:url('./fonts/barlow-condensed.ttf')}
:root{color-scheme:dark;--ink:#f7f8ed;--muted:#d4d8cd;--acid:#d7fc70;--panel:#16201bbb;--font:'Barlow',Arial,sans-serif;--display:'Barlow Condensed','Arial Narrow',Impact,sans-serif}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#202821;color:var(--ink);font-family:var(--font)}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible{outline:2px solid var(--acid);outline-offset:5px}#game,#viewport,.vignette{position:absolute;inset:0}#viewport canvas{display:block;width:100%;height:100%}.vignette{pointer-events:none;background:linear-gradient(180deg,rgba(9,18,15,.55),transparent 28%,transparent 61%,rgba(7,15,12,.64)),radial-gradient(ellipse at center,transparent 38%,#10201a22);z-index:1}.topbar{position:absolute;top:0;left:0;width:100%;padding:29px 36px;display:flex;align-items:center;justify-content:space-between;z-index:2}.brand{display:flex;align-items:center;gap:13px;font-size:23px;font-weight:800;letter-spacing:1.4px;line-height:1}.brand-symbol{font-family:var(--display);font-size:45px;font-style:italic;line-height:46px;background:var(--acid);color:#172519;display:block;width:41px;height:44px;text-align:center;transform:skew(-8deg);padding-right:4px}.edition{display:block;font-size:10px;letter-spacing:2.4px;font-weight:500;color:#e2e6d8;margin-top:8px}.location{display:flex;align-items:center;gap:13px;font-size:14px;font-weight:700;letter-spacing:2px;margin-left:-74px}.location-no{border:1px solid #ebf2e15c;width:35px;height:39px;display:grid;place-items:center;font-family:var(--display);font-size:22px;letter-spacing:0}.location small{display:block;margin-top:6px;color:#c5d0c1;font-weight:500;font-size:10px;letter-spacing:3px}.tools{display:flex;gap:7px}.icon-button{width:40px;height:40px;border:1px solid #dae4d029;background:#101e1a52;display:grid;place-items:center;border-radius:50%;backdrop-filter:blur(10px);transition:background .2s}.icon-button:hover{background:#c4db8d28;border-color:#d7fc7080}.icon-button svg{width:19px;height:19px}.score-panel{position:absolute;top:142px;left:36px;z-index:2;width:254px;text-shadow:0 2px 15px #09160f60}.micro{font-size:11px;font-weight:700;letter-spacing:2.3px;color:#e3e9d8}.score-panel #score{font-family:var(--display);font-size:66px;line-height:1.08;font-weight:600;letter-spacing:1px;font-variant-numeric:tabular-nums}.best-line{font-size:10px;letter-spacing:1.5px;margin-top:6px;display:flex;gap:12px;color:#d7dfd0}.best-line strong{font-size:12px;color:white;letter-spacing:.4px}.special-label{display:flex;justify-content:space-between;margin:27px 0 8px;font-size:11px;letter-spacing:2px;font-weight:700}.special-label #special-value{letter-spacing:0;font-size:12px;font-weight:500;color:var(--acid)}.special-track{height:9px;background:#15221b73;overflow:hidden;transform:skew(-15deg);border:1px solid #edf7de3c;position:relative}.special-track:after{content:'';position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent,transparent calc(10% - 2px),#17251980 calc(10% - 2px),#17251980 10%)}#special-fill{height:100%;width:0%;background:var(--acid);transition:width .2s;box-shadow:0 0 14px var(--acid)}#special-hint{font-size:11px;color:#e0e7d4bd;margin-top:8px;letter-spacing:.2px}.special-active #special-label{color:var(--acid)}.special-active #special-fill{animation:charge .7s infinite alternate}.session-tag{position:absolute;right:36px;top:153px;display:flex;align-items:center;gap:11px;font-size:10px;letter-spacing:1.8px;z-index:2;color:#e7edd9}.session-line{height:1px;width:29px;background:var(--acid)}.trick-display{position:absolute;left:50%;bottom:105px;transform:translateX(-50%);text-align:center;z-index:2;width:min(720px,70%);pointer-events:none;filter:drop-shadow(0 3px 8px #11201588)}.trick-display .micro{font-size:10px;color:#dce9c2;letter-spacing:2.8px}.combo-numbers{display:flex;align-items:baseline;justify-content:center;gap:15px;font-family:var(--display);font-size:48px;line-height:1.2;font-weight:700;margin:7px 0 3px;letter-spacing:.5px}.combo-numbers #multiplier{color:var(--acid);font-size:35px}.trick-display.active .combo-numbers{font-size:69px;color:var(--acid)}.trick-display.landed .combo-numbers{color:white}.trick-display.bailed .combo-numbers{color:#ff8c6a}#trick-string{font-size:14px;font-weight:500;line-height:1.5;color:#f4f5e9;min-height:22px}.bottom-left{position:absolute;bottom:94px;left:36px;display:flex;align-items:center;gap:12px;z-index:2}.speed-value{font-family:var(--display);font-size:47px;font-weight:500;min-width:41px}.speed-caption{font-size:10px;letter-spacing:1px;line-height:1.5;color:#f0f6e6}.speed-caption span{display:block;font-size:9px;letter-spacing:1.1px;color:#d9e4c6b0;margin-top:3px}.speed-bars{height:22px;width:41px;background:repeating-linear-gradient(90deg,#d7fc7090 0 3px,transparent 3px 6px);clip-path:polygon(0 80%,100% 0,100% 100%,0 100%);margin-left:3px}.bottom-right{position:absolute;right:36px;bottom:90px;z-index:2;text-align:center}#minimap{width:90px;height:110px;display:block;opacity:.85}.bottom-right span{display:block;font-size:8px;letter-spacing:1.5px;margin-top:7px;color:#e0e9d0}.controls{position:absolute;bottom:0;height:64px;left:36px;right:36px;display:flex;justify-content:center;align-items:center;gap:29px;z-index:2;border-top:1px solid #e0efd027}.controls>span{display:flex;align-items:center;gap:5px;font-size:10px;font-weight:600;letter-spacing:1.3px;color:#d6dfcd}.controls kbd:last-of-type{margin-right:5px}kbd{font-family:var(--font);font-weight:600;min-width:23px;height:22px;padding:3px 5px;display:inline-flex;justify-content:center;align-items:center;background:#e9f6db10;border:1px solid #d8e6c63b;border-bottom:2px solid #d8e6c653;border-radius:3px;font-size:12px;color:#f6faec}.space-key{min-width:60px}#toast{position:absolute;left:50%;top:112px;transform:translateX(-50%) translateY(-12px);z-index:4;border:1px solid #d7fc7040;background:#122015cc;backdrop-filter:blur(10px);font-size:13px;padding:11px 19px;border-radius:3px;opacity:0;transition:.25s;pointer-events:none;text-align:center}#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}#loading{position:absolute;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;flex-direction:column;background:#17201b;transition:opacity .6s}.loading-brand{font-family:var(--display);font-style:italic;font-size:76px;letter-spacing:1px;font-weight:800}.loading-brand span{color:var(--acid)}.loading-track{width:185px;height:3px;background:#ffffff20;margin-top:24px;overflow:hidden}.loading-track i{display:block;width:55%;height:100%;background:var(--acid);animation:load 1s infinite alternate}.loading-track+p{font-size:10px;letter-spacing:3px;color:#c2cbbb;margin-top:16px}#loading.done{opacity:0;pointer-events:none}dialog{border:1px solid #d7fc7030;width:510px;max-width:calc(100vw - 32px);padding:26px 32px 32px;background:#18251cf5;color:var(--ink);box-shadow:0 35px 130px #0008;border-radius:6px;backdrop-filter:blur(24px);max-height:90vh;overflow-y:auto}dialog::backdrop{background:#09140e91;backdrop-filter:blur(7px)}.menu-heading{display:flex;align-items:center;justify-content:space-between}.menu-heading .micro{font-size:10px}.menu-heading button{width:30px;height:30px;font-size:24px;font-weight:400}dialog h1{font-family:var(--display);font-size:65px;line-height:.98;letter-spacing:.5px;font-weight:700;margin:25px 0 15px}dialog>p{font-size:14px;line-height:1.6;color:#c4cfbc}.guide{margin:23px 0;border-top:1px solid #ffffff18}.guide>div{display:flex;align-items:center;justify-content:space-between;padding:13px 0;border-bottom:1px solid #ffffff18;gap:10px}.guide strong{font-size:13px;font-weight:500}.guide>div>span{display:flex;gap:5px}.menu-tip{font-size:12px!important;margin:22px 0}.primary-button{display:flex;align-items:center;justify-content:space-between;width:100%;padding:17px 20px;background:var(--acid);color:#172515;border:0;font-weight:800;font-size:13px;letter-spacing:1.7px;border-radius:3px}.primary-button:hover{background:#e4ff9c}.primary-button span{font-size:21px}.touch-controls{display:none}#error{position:absolute;inset:0;z-index:20;background:#17201b;padding:20vh 10vw;text-align:center}#error[hidden]{display:none}#error h1{font-family:var(--display);font-size:44px}#error button{padding:12px 22px;background:var(--acid);color:#17201b;border:0;border-radius:4px}@keyframes load{from{transform:translateX(-50%)}to{transform:translateX(140%)}}@keyframes charge{to{filter:brightness(1.4)}}@media(max-width:850px){.topbar{padding:22px}.score-panel{left:22px;top:118px;width:195px}.score-panel #score{font-size:53px}.location{margin-left:0}.session-tag{display:none}.bottom-left{left:22px}.bottom-right{right:22px}.controls{left:22px;right:22px;gap:15px}.controls>span{font-size:9px;letter-spacing:.5px}.trick-display{width:65%;bottom:113px}.combo-numbers{font-size:40px}#trick-string{font-size:12px}.trick-display.active .combo-numbers{font-size:57px}}@media(max-width:600px){.topbar{padding:19px 17px}.brand{font-size:20px;gap:9px}.brand-symbol{font-size:38px;width:35px;height:39px;line-height:40px}.edition{font-size:8px;letter-spacing:1.5px}.location{display:none}.tools{gap:5px}.icon-button{width:34px;height:34px}.score-panel{top:107px;left:18px;width:165px}.score-panel #score{font-size:44px}.micro{font-size:9px}.special-label{margin-top:19px}.best-line{font-size:8px}.controls{gap:13px;left:17px;right:17px;height:57px}.secondary-control{display:none!important}.controls>span{font-size:8px;gap:3px}.controls kbd{min-width:20px;font-size:10px;padding:3px}.bottom-left{bottom:85px;left:18px}.bottom-right{right:18px;bottom:82px}#minimap{width:65px;height:80px}.bottom-right span{font-size:7px}.speed-value{font-size:37px}.speed-bars{display:none}.speed-caption span{display:none}.trick-display{bottom:135px;width:92%}.combo-numbers{font-size:38px}.trick-display.active .combo-numbers{font-size:52px}#trick-string{font-size:12px}.trick-display .micro{font-size:9px}}@media(pointer:coarse){.touch-controls{position:absolute;z-index:3;bottom:35px;left:20px;right:22px;display:flex;justify-content:space-between;align-items:flex-end;pointer-events:none}.touch-dpad{display:grid;grid-template-columns:repeat(3,43px);grid-template-rows:repeat(2,43px);gap:5px}.touch-dpad button,#touch-ollie{pointer-events:auto;touch-action:none;user-select:none;border:1px solid #e6f0d749;background:#17251c77;backdrop-filter:blur(12px);border-radius:5px;font-size:21px}.touch-dpad button:first-child{grid-column:2}.touch-dpad button:nth-child(2){grid-column:1;grid-row:2}.touch-dpad button:nth-child(3){grid-column:2;grid-row:2}.touch-dpad button:nth-child(4){grid-column:3;grid-row:2}#touch-ollie{width:82px;height:82px;border-radius:50%;color:var(--acid);font-weight:800;font-size:14px;line-height:1.5}#touch-ollie span{display:block;font-size:10px;font-weight:500;color:#e1e9d5}.controls{display:none}.bottom-left{bottom:151px}.bottom-right{bottom:151px}.trick-display{bottom:150px;width:65%}.combo-numbers{font-size:32px}.trick-display.active .combo-numbers{font-size:44px}.touch-controls button:active{background:#d7fc7050}}
/* Keep the live HUD legible over the moving scene. */
.edition{font-size:12px;letter-spacing:1.4px}.location small,.micro,.best-line,.special-label,#special-hint,.session-tag,.trick-display .micro,.speed-caption,.speed-caption span,.bottom-right span,.controls>span,.loading-track+p,.menu-heading .micro{font-size:12px}.best-line{letter-spacing:1px}.controls>span{letter-spacing:.8px}.location{margin-left:0}.brand{font-size:23px}.speed-caption span{letter-spacing:.4px}.bottom-right{right:35px}.bottom-right span{font-size:12px;letter-spacing:.5px}.bottom-right canvas{margin:auto}.guide strong{font-size:14px}#trick-string{font-size:14px}
@media(max-width:850px){.edition{font-size:10px}.location{gap:8px;letter-spacing:1px}.controls{gap:16px}.controls>span{font-size:11px;letter-spacing:.5px}.speed-caption span{display:none}.bottom-right span{display:none}.trick-display{width:66%}.special-label{letter-spacing:1px}}
@media(max-width:600px){.brand{font-size:20px}.edition{font-size:10px}.controls{gap:12px}.controls>span{font-size:10px;letter-spacing:0}.controls kbd{min-width:20px;font-size:12px}.trick-display{width:90%}.trick-display .micro{font-size:11px}.score-panel{width:168px}.special-label,#special-hint,.micro{font-size:11px}.best-line{font-size:10px}#trick-string{font-size:13px}.bottom-right{right:18px}.bottom-left{gap:8px}}
@media(pointer:coarse){.trick-display{width:65%;bottom:155px}.trick-display .micro{font-size:10px}#trick-string{font-size:12px}}
/* VibeSkater identity and lightweight game overlays. */
.brand{width:218px;display:block;line-height:0;flex:none}.brand img{display:block;width:100%;height:auto;filter:drop-shadow(0 2px 2px #101c1780)}.topbar{padding-top:20px;padding-bottom:20px}.loading-brand{width:min(430px,80vw);line-height:0}.loading-brand img{width:100%;height:auto;display:block}.loading-track{margin-top:34px}.icon-button{backdrop-filter:none;background:#14201bd6}.trick-display{filter:none;text-shadow:0 2px 10px #0e1a14b3}#toast{backdrop-filter:none;background:#122015ed}.controls{gap:24px}.visuals-setting{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 0 22px;font-size:14px}.visuals-setting select{font:inherit;color:#f7f8ed;background:#243328;border:1px solid #c8dbab55;border-radius:4px;padding:9px 35px 9px 12px}#grind-cue{position:absolute;left:50%;top:55%;transform:translateX(-50%);display:flex;align-items:center;gap:9px;background:#15241cea;padding:9px 13px;border:1px solid #d7fc7088;border-radius:4px;font-size:12px;letter-spacing:1px;color:#eff4e6;z-index:2;pointer-events:none}#grind-cue[hidden]{display:none}#grind-cue-label{color:var(--acid);margin-right:4px;font-size:11px}#grind-cue kbd{font-size:11px}#touch-ollie span{font-size:8px}
@media(max-width:850px){.brand{width:190px}.controls{gap:13px}.controls>span{letter-spacing:0}.score-panel{top:130px}}
@media(max-width:600px){.brand{width:165px}.topbar{padding-top:18px}.score-panel{top:110px}.controls{gap:8px}.controls>span{font-size:9px}#grind-cue{top:52%;padding:8px 9px;font-size:10px;gap:6px}#grind-cue-label{font-size:10px}}
/* Compact play HUD; supporting information lives in pause. */
.brand{width:auto;font-family:var(--font);font-weight:700;font-style:normal;font-size:29px;letter-spacing:-1.2px;line-height:1;white-space:nowrap}.brand span,.loading-brand span{color:var(--acid)}.loading-brand{font-family:var(--font);font-weight:700;font-style:normal;font-size:64px;letter-spacing:-3px;width:auto;line-height:1.2}.topbar{padding:26px 30px}.tools{gap:6px}.icon-button{width:35px;height:35px;background:#14201b7a;border-color:#ffffff20}.score-panel{top:94px;left:30px;width:145px}.score-panel .micro{font-size:11px;letter-spacing:1.7px;color:#e5ebdcba}.score-panel #score{font-size:41px;line-height:1.05}.special-label{margin:14px 0 6px;font-size:11px;letter-spacing:1.4px}.special-track{height:5px;border:0;transform:none;border-radius:3px}.special-track:after{display:none}#special-value,#special-hint{display:none}.controls{border:0;height:46px;bottom:10px;transition:opacity .5s;pointer-events:none}.playing .controls{opacity:0}.controls>span{font-size:12px;letter-spacing:0}.secondary-control{display:none!important}.trick-display{bottom:55px;width:min(680px,80%);transition:opacity .18s}.trick-display.quiet{opacity:0;pointer-events:none}.trick-display .micro{font-family:var(--font);font-size:11px;letter-spacing:2px;color:#deead0}.trick-display.active .combo-numbers,.trick-display.landed .combo-numbers,.trick-display.bailed .combo-numbers{font-size:49px;margin:3px 0;line-height:1.08}.combo-numbers #multiplier{font-size:29px}#trick-string{font-size:14px;min-height:18px;line-height:1.35}.combo-window{width:100px;height:3px;margin:11px auto 0;background:#ffffff25;border-radius:3px;overflow:hidden;opacity:0}.linking .combo-window{opacity:1}#combo-window-fill{height:100%;background:var(--acid);transform-origin:left center}.special-trick .combo-numbers{color:#eefca4!important;text-shadow:0 0 16px #c9ff6b55}#grind-cue{position:absolute;left:0;top:0;gap:7px;padding:6px 10px;border:1px solid #ffffff30;border-radius:99px;background:#14201dc9;font-size:12px;letter-spacing:0;color:#f5f8ed;will-change:transform}#grind-cue kbd{height:17px;padding:1px 4px;min-width:0;border:0;background:#edf4d51a;font-size:9px;border-radius:3px}#grind-cue-label{font-size:12px;letter-spacing:0;color:inherit;margin:0}#grind-cue.armed{border-color:#d7fc7066;color:var(--acid)}.pause-detail .bottom-left,.pause-detail .bottom-right{position:static;display:flex;align-items:center;justify-content:space-between;text-align:left;margin:0}.pause-detail .bottom-right{justify-content:center;gap:20px}.pause-detail .bottom-right canvas{width:66px;height:81px;margin:0}.pause-detail .bottom-right span{display:block;font-size:12px}.pause-detail{padding:7px 0}.pause-detail .speed-value{font-size:27px}.pause-detail .speed-caption span{display:block;font-size:12px}.pause-detail .best-line{margin:0;justify-content:space-between;font-size:12px}.pause-detail .speed-bars{display:none}.pause-detail .best-line strong{font-size:16px}.guide strong{font-size:13px}.guide>div{padding:10px 0}.menu-tip{margin:16px 0}dialog h1{font-size:46px;margin:16px 0 8px}dialog>p{font-size:14px}dialog .guide{margin:17px 0}.visuals-setting{padding-top:12px}#toast{top:80px;font-size:12px;padding:8px 13px;border-radius:99px}#touch-ollie span{font-size:10px}
@media(max-width:600px){.topbar{padding:20px 18px}.brand{font-size:25px;letter-spacing:-1px}.score-panel{left:18px;top:80px;width:115px}.score-panel #score{font-size:35px}.controls>span{font-size:9px}.controls{gap:10px}.trick-display{bottom:37px;width:90%}.trick-display.active .combo-numbers,.trick-display.landed .combo-numbers{font-size:43px}#trick-string{font-size:12px}.loading-brand{font-size:46px}.trick-display .micro{font-size:10px}.guide strong{font-size:12px}.guide kbd{font-size:10px}}
@media(pointer:coarse){.trick-display{bottom:139px;width:80%}.controls{display:none}.trick-display.active .combo-numbers{font-size:43px}}

/* Unstretched italic wordmark framed by the two skate-era arcs. */
.brand,.loading-brand{position:relative;display:block;font-family:var(--font);font-style:italic;font-weight:700;letter-spacing:-.7px;line-height:1.1;padding:8px 0;isolation:isolate}
.brand:before,.brand:after,.loading-brand:before,.loading-brand:after{content:'';position:absolute;left:7%;width:86%;height:13px;pointer-events:none;border-radius:50%}
.brand:before,.loading-brand:before{top:-3px;border-top:2px solid currentColor}
.brand:after,.loading-brand:after{bottom:-3px;border-bottom:2px solid currentColor}
.loading-brand:before,.loading-brand:after{height:25px;border-width:3px}

#trick-status{display:none}.bottom-right{right:28px;bottom:27px;pointer-events:none}.bottom-right span{display:none}#minimap{width:82px;height:101px;opacity:.8}
.brand:before,.brand:after,.loading-brand:before,.loading-brand:after{left:5%;width:90%;height:16px;border:0;background:currentColor;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 240 20' preserveAspectRatio='none'%3E%3Cpath d='M0 20 Q120 -14 240 20 Q120 -4 0 20Z'/%3E%3C/svg%3E") center/100% 100% no-repeat;border-radius:0;transform:none}
.brand:before,.loading-brand:before{top:-6px}.brand:after,.loading-brand:after{bottom:-6px;transform:rotate(180deg)}
@media(max-width:600px){.bottom-right{right:16px;bottom:20px}#minimap{width:64px;height:79px}}

#game{touch-action:none;overscroll-behavior:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.touch-controls{display:none!important}.gesture-hint,.mobile-guide{display:none}.gesture-mode .controls,.gesture-mode .guide,.gesture-mode .menu-tip{display:none}.gesture-mode .mobile-guide{display:block}.mobile-guide p{font-size:15px;line-height:1.5}.gesture-mode .gesture-hint{display:block;position:absolute;bottom:calc(25px + env(safe-area-inset-bottom));left:10%;width:80%;z-index:3;text-align:center;font-size:13px;line-height:1.65;color:#eff5e3;pointer-events:none;transition:opacity .5s;text-shadow:0 1px 8px #000}.gesture-mode.playing .gesture-hint{opacity:0}.gesture-mode .topbar{padding-top:calc(18px + env(safe-area-inset-top));padding-left:calc(18px + env(safe-area-inset-left));padding-right:calc(18px + env(safe-area-inset-right))}.gesture-mode .icon-button{width:44px;height:44px}.gesture-mode .bottom-right{bottom:calc(20px + env(safe-area-inset-bottom))}.gesture-mode .trick-display{bottom:calc(35px + env(safe-area-inset-bottom))}.gesture-mode .score-panel{top:calc(100px + env(safe-area-inset-top))}dialog{touch-action:pan-y;max-height:85dvh;overflow-y:auto}.score-panel,.brand,.trick-display{pointer-events:none}@media(max-width:430px){.gesture-mode .brand{font-size:22px}.gesture-mode .tools{gap:3px}}

/* Match Safari's visible viewport, including moving browser bars. */
html,body{position:fixed;inset:0;width:100%;height:100%;overflow:hidden;overscroll-behavior:none}#game{position:fixed;inset:auto;left:0;top:0;width:100%;height:100dvh;overflow:hidden}#viewport{inset:0;width:100%;height:100%}#viewport canvas{display:block;width:100%!important;height:100%!important}.gesture-mode .trick-display{width:calc(100% - 36px);bottom:calc(28px + env(safe-area-inset-bottom))}.gesture-mode #trick-string{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gesture-mode .bottom-right{bottom:calc(115px + env(safe-area-inset-bottom));right:14px}.gesture-mode .score-panel{top:calc(88px + env(safe-area-inset-top))}@media(orientation:landscape) and (max-height:500px){.gesture-mode .brand{font-size:20px}.gesture-mode .topbar{padding-top:12px}.gesture-mode .score-panel{top:62px}.gesture-mode .score-panel #score{font-size:28px}.gesture-mode .special-label{margin-top:6px}.gesture-mode .trick-display{bottom:14px}.gesture-mode .bottom-right{bottom:16px}.gesture-mode .combo-numbers{font-size:34px!important}}

.level-picker{border:1px solid #d7fc7035;background:#d7fc7007;border-radius:10px;padding:18px;margin:18px 0 24px}.level-picker label{display:block;font-size:12px;letter-spacing:2px;font-weight:700;color:var(--acid);margin-bottom:12px}.level-picker select{display:block;width:100%;background:#203127;color:#f7f8ed;border:1px solid #ffffff35;border-radius:6px;padding:12px;font:700 17px var(--font)}.level-picker p{font-size:14px;line-height:1.5;color:#c5cfc0;margin:12px 0}.level-load{width:100%;border:0;background:var(--acid);color:#172519;border-radius:5px;padding:12px;font-size:13px;font-weight:700;letter-spacing:1px}dialog{max-height:85dvh;overflow-y:auto}

#grind-cue{opacity:0;transition:opacity .12s ease,filter .12s ease;filter:blur(2px)}#grind-cue.visible{opacity:1;filter:blur(0)}#landing-feedback{position:absolute;right:max(24px,env(safe-area-inset-right));top:43%;z-index:4;pointer-events:none;font:600 15px var(--font);color:#e8f3c8;opacity:0;transform:translateX(12px);transition:opacity .18s,transform .18s;text-shadow:0 2px 7px #162018}#landing-feedback.show{opacity:1;transform:translateX(0)}#landing-feedback.sloppy{color:#eebc9c}@media(max-width:600px){#landing-feedback{font-size:13px;right:16px;top:38%}}@media(prefers-reduced-motion:reduce){#grind-cue,#landing-feedback{transition:none}}

/* Landing feedback uses the same condensed score face and label rhythm as the HUD. */
#landing-feedback{display:flex;flex-direction:column;align-items:flex-end;gap:3px;color:var(--ink);text-shadow:0 2px 8px #14201bcc;transition:opacity .16s ease,transform .16s ease}
#landing-feedback span{font-family:var(--font);font-size:12px;font-weight:600;letter-spacing:1.4px;text-transform:uppercase;line-height:1.3;color:var(--muted)}
#landing-feedback strong{font-family:var(--display);font-size:38px;font-weight:700;line-height:1;letter-spacing:.3px;font-variant-numeric:tabular-nums;color:var(--acid)}
#landing-feedback.sloppy strong{color:#eebc9c}
@media(max-width:600px){#landing-feedback span{font-size:11px;letter-spacing:1px}#landing-feedback strong{font-size:32px}}
@media(prefers-reduced-motion:reduce){#landing-feedback{transition:none}}

/* Temporary performance diagnostics. Remove this block and the matching markup/code when testing is complete. */
#perf-diagnostics{position:relative;z-index:6;flex:none;overflow:hidden}#perf-diagnostics .perf-icon{display:block}#perf-diagnostics strong,#perf-diagnostics span,#perf-diagnostics small{display:none}#perf-diagnostics.expanded{position:fixed;top:max(74px,calc(62px + env(safe-area-inset-top)));right:max(30px,env(safe-area-inset-right));width:196px;height:auto;padding:10px 12px;border:1px solid #d7fc7055;border-radius:4px;background:#101a16e8;color:#eef4e8;text-align:left;font:600 11px/1.35 var(--font);letter-spacing:.25px;white-space:pre-line;box-shadow:0 7px 25px #0005;display:block}#perf-diagnostics.expanded .perf-icon{display:none}#perf-diagnostics.expanded strong{display:block;color:var(--acid);font-size:10px;letter-spacing:1.4px;margin-bottom:5px}#perf-diagnostics.expanded span{display:block;font-variant-numeric:tabular-nums}#perf-diagnostics.expanded small{display:block;margin-top:6px;color:#c8d2c099;font-size:8px;letter-spacing:.5px}#perf-diagnostics[hidden]{display:none}@media(max-width:600px){#perf-diagnostics.expanded{top:calc(62px + env(safe-area-inset-top));right:12px;width:166px;padding:8px 10px;font-size:10px}#perf-diagnostics.expanded small{font-size:7px}}
/* In-world coaching floats beside the board with direct action prompts. */
#tutorial{position:absolute;z-index:5;left:50%;top:55%;transform:translate(-50%,-50%);pointer-events:none;color:#f7f8ed;font-family:var(--font);text-shadow:0 1px 3px #0007}
#tutorial[hidden],#tutorial-marker[hidden],#tutorial-input[hidden],#tutorial-skip[hidden]{display:none}
#tutorial-copy{display:flex;flex-direction:column;gap:9px}
#tutorial[data-side=left]{text-align:center}#tutorial[data-side=right]{text-align:left}
#tutorial-step{font-size:11px;font-weight:700;letter-spacing:1.8px;color:var(--acid);opacity:.9}
.tutorial-command{display:flex;align-items:center;gap:12px}.tutorial-command h2{order:2}
#tutorial[data-side=left] .tutorial-command{justify-content:center;flex-direction:column;align-items:center}
#tutorial-input{display:flex;align-items:center;gap:6px;flex:none;color:#eef4e8;text-shadow:none;white-space:nowrap}#tutorial-input kbd{display:inline-grid;place-items:center;min-width:42px;height:38px;padding:0 11px;border:1px solid #f4f7eb;border-bottom:4px solid #aab0a5;border-radius:7px;background:#f5f7ef;color:#172019;box-shadow:0 4px 0 #4c554d,0 7px 15px #0006;font:800 17px/1 var(--font)}#tutorial-input b{font:700 8px var(--font);letter-spacing:1px;color:#eef4e8}
.touch-chip{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:34px;padding:0 12px;border:1px solid #d7fc708c;border-radius:999px;background:#14201bd9;color:var(--acid);box-shadow:0 5px 14px #0004;text-shadow:none;font:800 12px/1 var(--font);letter-spacing:.6px;white-space:nowrap}.touch-chip i{display:block;width:9px;height:9px;border:2px solid currentColor;border-radius:50%;box-shadow:0 0 0 3px #d7fc7025}
#tutorial h2{font:800 21px/1.12 var(--font);letter-spacing:.2px;margin:0;text-transform:uppercase}
#tutorial h2{white-space:pre-line}#tutorial-secondary{font:800 17px/1.16 var(--font);letter-spacing:.15px;margin:-2px 0 0;text-transform:uppercase;color:#f7f8ed;white-space:pre-line}#tutorial-secondary[hidden]{display:none}
#tutorial p{font:600 13px/1.45 var(--font);white-space:pre-line;margin:0;color:#e4e9de}
#tutorial button{pointer-events:auto;min-height:42px}
#tutorial-finish{border:0;border-radius:6px;background:var(--acid);color:#14201b;padding:9px 15px;font:800 13px var(--font);letter-spacing:.5px;margin-top:6px}
#tutorial-skip{position:absolute;z-index:7;left:max(20px,env(safe-area-inset-left));bottom:max(20px,env(safe-area-inset-bottom));border:0;background:#14201b8c;border-radius:99px;color:#eef2e9b8;padding:10px 14px;font:600 11px var(--font);letter-spacing:1px}
.tutorial-progress{width:54px;height:2px;background:#ffffff38;margin-top:8px}.tutorial-progress i{display:block;height:100%;background:var(--acid);transition:width .3s ease}
#tutorial[data-side=left] .tutorial-progress{margin-left:auto}
#tutorial-marker{position:absolute;transform:translate(-50%,-100%);color:var(--acid);text-shadow:0 2px 5px #000;font:800 12px var(--font);letter-spacing:1.2px;z-index:3;pointer-events:none}
.learning .gesture-hint,.learning .controls{visibility:hidden}
#tutorial-replay{margin:12px 0;background:transparent;color:var(--acid);border:1px solid #d7fc7055}
@media(max-width:600px){#tutorial-copy{gap:10px}#tutorial h2{font-size:17px;line-height:1.16}#tutorial-secondary{font-size:14px;line-height:1.18}#tutorial-input kbd{min-width:35px;height:33px;padding:0 8px;font-size:14px}#tutorial p{font-size:13px;line-height:1.45}.tutorial-command{gap:9px}#tutorial[data-side=right] .tutorial-command{flex-direction:column;align-items:flex-start}#tutorial[data-side=right] #tutorial-input{justify-content:flex-start}.touch-chip{min-height:33px;padding:0 11px;font-size:11px}#tutorial-skip{bottom:calc(18px + env(safe-area-inset-bottom));font-size:10px}}
@media(max-height:500px){#tutorial h2{font-size:16px}#tutorial p{font-size:11px}#tutorial-input kbd{min-width:32px;height:30px;padding:0 7px;font-size:13px}}
@media(prefers-reduced-motion:reduce){.tutorial-progress i{transition:none}}

#tutorial-aside{position:absolute;z-index:5;transform:translate(-50%,-50%);pointer-events:none;font-family:var(--font);color:var(--ink);text-shadow:0 1px 3px #0007}
#tutorial-aside[hidden]{display:none}.tutorial-eyebrow{display:block;font-size:11px;line-height:1.35;letter-spacing:1.5px;font-weight:700;color:var(--acid);margin:0 0 12px}
#tutorial-aside h3{font-size:26px;line-height:1.15;margin:0;font-weight:700;letter-spacing:-.5px}#tutorial-aside p{font-size:14px;line-height:1.4;margin:12px 0 0}#tutorial-aside strong{display:block;font-weight:700;margin-bottom:3px}
.tutorial-keys{display:flex;gap:5px;align-items:center;flex-wrap:wrap}.tutorial-keys kbd{display:inline-grid;place-items:center;min-width:29px;height:29px;padding:0 6px;background:#f5f7ef;color:#172019;border:1px solid #fff;border-bottom:3px solid #aab0a5;border-radius:5px;box-shadow:0 2px 0 #4c554d;text-shadow:none;font:700 13px var(--font)}.tutorial-keys b{font-size:9px;padding:0 2px}.tutorial-tip{margin:14px 0 0}.tutorial-tip p{margin-top:7px!important}
#tutorial-input{flex-wrap:wrap;max-width:100%}.tutorial-command{flex-wrap:wrap}#tutorial h2{max-width:100%}
@media(max-width:600px){#tutorial-aside{display:flex;flex-direction:column;gap:11px}#tutorial-aside h3{font-size:21px}#tutorial-aside p{font-size:13px;line-height:1.4;margin:0}.tutorial-eyebrow{font-size:10px;line-height:1.4;margin:0 0 1px}.tutorial-tip{margin:0}.tutorial-tip strong{margin-bottom:6px}.tutorial-keys{gap:5px}.tutorial-keys kbd{min-width:24px;height:27px;padding:0 5px;font-size:12px}.tutorial-keys .touch-chip{min-height:30px;padding:0 9px;font-size:10px}}

#tutorial-complete{font:800 25px/1.12 var(--font);margin:0 0 12px;letter-spacing:.1px;color:var(--acid)}#tutorial-complete[hidden]{display:none}#tutorial[data-side=left] #tutorial-input{justify-content:center}
@media(max-width:600px){#tutorial-complete{font-size:20px}}

/* Completion is one centered group with a quiet inline continue cue. */
#tutorial[data-stage=done] #tutorial-copy{align-items:center;text-align:center;gap:12px;width:100%}
#tutorial[data-stage=done] #tutorial-complete{font:700 38px/1.08 var(--font);letter-spacing:-.7px;margin:0;color:var(--ink);width:100%;text-align:center}
#tutorial[data-stage=done] #tutorial-complete span{display:block}
#tutorial[data-stage=done] .tutorial-command{order:3;display:flex;flex-direction:row;justify-content:center;align-items:center;gap:9px;width:100%}
#tutorial[data-stage=done] h2{font:500 14px/1.35 var(--font);text-transform:none;letter-spacing:0;order:initial}
#tutorial[data-stage=done] #tutorial-input kbd{font-size:12px;min-width:0;height:28px;padding:0 8px;box-shadow:0 2px 0 #4c554d;border-bottom-width:2px}
#tutorial[data-stage=done] p{font-weight:400;font-size:14px;width:100%;text-align:center}
@media(max-width:600px){#tutorial[data-stage=done] #tutorial-copy{gap:11px}#tutorial[data-stage=done] #tutorial-complete{font-size:30px;line-height:1.08}#tutorial[data-stage=done] .tutorial-command{flex-direction:column;align-items:center;gap:7px}#tutorial[data-stage=done] p,#tutorial[data-stage=done] h2{font-size:13px;line-height:1.4}}

#tutorial[data-stage=done] #tutorial-complete{font-style:italic;text-transform:uppercase;letter-spacing:-.7px}
.tutorial-tip strong{display:block;font:700 14px/1.3 var(--font);margin-bottom:7px}.tutorial-tip .tutorial-keys{margin:0}.tutorial-tip p{display:none}
@keyframes tutorial-continue-pulse{0%,100%{transform:scale(1);filter:brightness(1)}50%{transform:scale(1.07);filter:brightness(1.18)}}
#tutorial[data-stage=done] #tutorial-input kbd,#tutorial[data-stage=done] #tutorial-input .touch-chip{animation:tutorial-continue-pulse 1.15s ease-in-out infinite;transform-origin:center}
@media(prefers-reduced-motion:reduce){#tutorial[data-stage=done] #tutorial-input kbd,#tutorial[data-stage=done] #tutorial-input .touch-chip{animation:none;filter:brightness(1.15)}}

/* Keep the tutorial visually focused, then reveal the gameplay HUD as one layer. */
.score-panel,.trick-display,.bottom-right{transition:opacity .45s ease,visibility 0s linear}
.learning .score-panel,.learning .trick-display,.learning .bottom-right{opacity:0!important;visibility:hidden;transition:opacity .16s ease,visibility 0s linear .16s}
.learning #landing-feedback,.learning #grind-cue{opacity:0!important;visibility:hidden}
@media(prefers-reduced-motion:reduce){.score-panel,.trick-display,.bottom-right{transition:none}}
