@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@300;400;500;600;700;800&display=swap');
:root{color-scheme:dark;--white:#e5eee4;--muted:#98b2b1;--mint:#bfe3cf;--gold:#d6c29d;font-family:Manrope,'Segoe UI',sans-serif;color:var(--white);background:#040e14;font-synthesis:none}
*{box-sizing:border-box}body{margin:0;overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:2px solid #e4eabd;outline-offset:6px}button{border:0}button:hover{filter:brightness(1.15)}button:active{transform:translateY(1px)}[hidden]{display:none!important}#app{position:relative;width:100%;height:100dvh;min-height:480px;overflow:hidden;background:#07151c}#world{position:absolute;width:100%;height:100%;inset:0;display:block;touch-action:none}.menu-shade{position:absolute;inset:0;background:linear-gradient(90deg,#031015d9 0%,#041319a3 26%,#04131912 68%),linear-gradient(0deg,#030e14e0,transparent 24%,transparent 80%,#03101570);pointer-events:none;transition:opacity .6s}.topbar{position:absolute;top:0;left:0;width:100%;padding:31px 4.4%;display:flex;justify-content:space-between;align-items:center;z-index:4}.wordmark{display:flex;align-items:center;gap:13px;color:var(--white);text-decoration:none;font-size:12px;letter-spacing:3px;font-weight:700}.wordmark svg{width:30px;fill:none;stroke:var(--mint);stroke-width:1.1}.edition{display:block;letter-spacing:1.65px;font-size:7px;margin-top:6px;color:#90a9a6;font-weight:500}.location{display:flex;align-items:center;gap:10px;font-size:9px;letter-spacing:2px;color:#b7ccc4}.location i,.journey-meta i{display:inline-block;width:5px;height:5px;border-radius:50%;background:#beeccf;box-shadow:0 0 12px #9de8cd}nav{display:flex;gap:12px}.icon-button{display:grid;place-items:center;width:35px;height:35px;background:#11282c45;border:1px solid #b6d7cd25;border-radius:50%;transition:background .2s}.icon-button:hover{background:#b5ddc52b}.icon-button svg{width:16px;height:16px;fill:none;stroke:var(--white);stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}.icon-button[aria-pressed=true]{opacity:.45}.menu-screen{position:absolute;left:8.4%;top:24%;z-index:2}.eyebrow{display:flex;align-items:center;gap:13px;color:var(--gold);font-size:9px;letter-spacing:2.4px;font-weight:500}.eyebrow>span{display:inline-block;width:31px;height:1px;background:var(--gold)}h1{font-size:clamp(70px,7.6vw,126px);line-height:.9;font-weight:300;letter-spacing:.1em;margin:29px 0 22px -7px;text-shadow:0 2px 40px #8dcecb19}h1>span{font-weight:600;letter-spacing:.07em}.subtitle{font-size:12px;letter-spacing:.52em;color:#c7d5c6;margin:0 0 28px}.intro{font-size:13px;line-height:1.9;font-weight:400;color:#b7c8c2;margin:0 0 30px}.menu-actions{display:flex;align-items:center;gap:23px}.primary{display:flex;align-items:center;justify-content:space-between;gap:36px;padding:19px 23px;min-width:220px;background:var(--mint);color:#132e2c;font-weight:800;letter-spacing:1.5px;font-size:10px;border:1px solid #ecf4d84a;box-shadow:0 4px 28px #091d1629;transition:background .2s}.primary:hover{background:#e1f0d9}.primary>span:last-child{font-size:20px;font-weight:400;line-height:12px}.text-button{background:none;color:#c8d9d1;font-size:11px;padding:10px 0}.text-button>span{margin-left:8px}.journey-meta{display:flex;gap:15px;margin-top:27px;color:#94aea5;font-size:7px;letter-spacing:1.05px}.journey-meta i{width:4px;height:4px;margin-right:6px}.journey-meta>span+span{border-left:1px solid #aac8b944;padding-left:15px}.sector-card{position:absolute;bottom:12.5%;right:5.8%;width:300px;padding:19px 22px;border:1px solid #b7d6cb30;background:linear-gradient(110deg,#051a208a,#0b232936);backdrop-filter:blur(10px);z-index:2}.small-label{font-size:8px;letter-spacing:1.7px;color:#aac1b8;font-weight:500}.sector-card>div{display:flex;gap:16px;align-items:center;margin-top:13px;font-size:11px}.sector-number{font-size:34px;color:#cee4d3;font-weight:300;letter-spacing:-2px}.sector-card small{display:block;font-size:7px;letter-spacing:.8px;color:#91afa5;margin-top:7px}.card-arrow{margin-left:auto;font-size:20px;color:var(--gold)}.menu-footer{position:absolute;bottom:30px;left:4.4%;right:4.4%;display:flex;justify-content:space-between;font-size:7px;letter-spacing:1.3px;color:#9bb3ae;z-index:2}.footer-star{color:#dce5c3;font-size:19px;margin-left:14px;vertical-align:middle}.only-game{display:none!important}#app[data-state=playing] .only-game,#app[data-state=paused] .only-game{display:flex!important}#app:not([data-state=menu]) .menu-screen,#app:not([data-state=menu]) .sector-card,#app:not([data-state=menu]) .menu-footer{display:none}#app:not([data-state=menu]) .menu-shade{opacity:0}#app:not([data-state=menu]) .topbar{background:linear-gradient(#030f17d9,transparent);padding-top:20px;padding-bottom:20px}.hud{position:absolute;left:4.5%;right:4.5%;top:91px;display:flex;align-items:flex-start;justify-content:space-between;pointer-events:none}.shield-widget{width:195px}.hud-label{display:flex;justify-content:space-between;align-items:center;font-size:8px;letter-spacing:1.4px;color:#bed4ca}.hud-label strong{font-size:17px;font-weight:400}.meter{height:4px;background:#92c9bb29;margin:8px 0 12px}.meter>div{height:100%;background:var(--mint);box-shadow:0 0 14px #a7e6ce50;transition:width .12s linear}.critical .meter>div{background:#ffa48b}.critical .hud-label{color:#ffb199}.dash-row{display:flex;align-items:center;gap:9px;font-size:7px;letter-spacing:1px;color:#abc7c3}.dash-meter{width:65px;height:2px;background:#79989f44}.dash-meter>div{height:100%;background:#9cceea}.progress-widget{width:250px;text-align:center;padding-top:6px}.progress-track{position:relative;height:2px;background:#c0daca2c;margin-top:14px}.progress-track>div{height:100%;background:#bfe3cf;transition:width .2s}.progress-track i{position:absolute;top:-2px;width:6px;height:6px;transform:rotate(45deg);background:#a7cbb2}.progress-track i:nth-of-type(1){left:0}.progress-track i:nth-of-type(2){left:50%}.progress-track i:nth-of-type(3){right:0}.score-widget{text-align:right;width:195px}.score-widget strong{display:block;font-size:25px;font-weight:300;letter-spacing:4px;margin-top:5px;font-variant-numeric:tabular-nums}#combo{font-size:9px;color:var(--gold);letter-spacing:1px}.game-bottom{position:absolute;bottom:27px;left:4.5%;right:4.5%;justify-content:space-between;align-items:center;color:#abc3bc;font-size:8px;letter-spacing:1px}.game-bottom b{font-weight:600;color:#dfebdd}.game-bottom #hint>span{padding:0 14px}.game-bottom .text-button{font-size:8px;letter-spacing:1px}kbd{font:inherit;font-size:9px;border:1px solid #b8d4c53d;padding:5px 8px;border-radius:3px;color:#d2e5d4;background:#9fd4c00b;white-space:nowrap}.game-bottom kbd{margin-left:8px}.boss-hud{position:absolute;top:172px;left:35%;width:30%}.boss-hud>div:first-child{display:flex;justify-content:space-between;font-size:8px;letter-spacing:1.4px;color:#eedbc3}.boss-track{height:3px;background:#ffceb92b;margin-top:9px}.boss-track>div{height:100%;background:#e5bea3;box-shadow:0 0 12px #efb493}.announcement{position:absolute;top:24%;left:15%;right:15%;text-align:center;pointer-events:none;opacity:0;transition:opacity .5s;text-shadow:0 2px 14px #000}.announcement.visible{opacity:1}.announcement span{font-size:9px;letter-spacing:3px;color:var(--gold)}.announcement h2{font-size:32px;font-weight:300;letter-spacing:1px;margin:12px}.announcement p{font-size:11px;color:#d0dfd5}dialog{max-width:560px;width:calc(100% - 36px);padding:45px;border:1px solid #9cd3ba40;color:var(--white);background:linear-gradient(135deg,#122b32f7,#06151dfc);box-shadow:0 30px 100px #0008}dialog::backdrop{background:#020e16ab;backdrop-filter:blur(10px)}dialog h2{font-weight:300;font-size:32px;line-height:1.2;letter-spacing:-.6px;margin:23px 0 16px}dialog p{color:#a9c1b9;font-size:12px;line-height:1.8}dialog .primary{width:100%;margin-top:26px}dialog>.text-button{display:block;margin:12px auto 0}.close{position:absolute;right:17px;top:10px;background:none;color:#c5d6c9;font-size:28px;font-weight:300}.control-list{margin:25px 0}.control-list>div{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 0;border-bottom:1px solid #a0bdaa15;font-size:10px;color:#b4cac2}.help-tip{display:flex;gap:17px;border:1px solid #a6d2b926;padding:15px}.help-tip>span{font-size:28px;color:var(--mint)}.help-tip p{font-size:11px;margin:0}.help-tip strong{display:block;font-weight:600;color:#d7e7d7}.help-note{font-size:10px!important}.result-stats{display:flex;justify-content:space-between;border-top:1px solid #d0e8d924;border-bottom:1px solid #d0e8d924;margin:25px 0;padding:23px 0}.result-stats span{display:block;font-size:8px;letter-spacing:1px;color:#9fb9b0}.result-stats strong{display:block;font-weight:300;font-size:24px;margin-top:8px}
@media(min-aspect-ratio:2/1){.menu-screen{top:18%}h1{font-size:15vh}.intro{margin-bottom:18px}.sector-card{bottom:17%}}
@media(max-width:1000px){.menu-screen{left:7%;top:25%}h1{font-size:95px}.sector-card{width:245px;right:4%;bottom:12%}.menu-actions{gap:15px}.journey-meta{font-size:6px}.game-bottom #hint{font-size:7px}.game-bottom #hint>span{padding:0 5px}.location{font-size:8px}.progress-widget{width:190px}.shield-widget,.score-widget{width:150px}}
@media(max-width:700px){#app{min-height:400px}.topbar{padding:20px 6%}.wordmark{font-size:10px;letter-spacing:2px}.edition{font-size:6px}.location{display:none}.menu-screen{left:8%;top:23%}h1{font-size:78px;margin-top:23px}.eyebrow{font-size:7px;letter-spacing:1.7px}.subtitle{font-size:9px}.intro{font-size:12px}.primary{min-width:190px;padding:17px 19px;font-size:9px}.journey-meta{display:none}.sector-card{display:none}.menu-footer{bottom:22px;left:8%;font-size:6px}.menu-footer>span:last-child{display:none}.hud{top:83px}.progress-widget{width:130px}.small-label{font-size:6px;letter-spacing:1px}.shield-widget,.score-widget{width:100px}.hud-label{font-size:6px}.dash-row{gap:5px;font-size:6px}.score-widget strong{font-size:20px;letter-spacing:2px}.game-bottom{bottom:15px}.game-bottom #hint{display:none}.game-bottom{justify-content:flex-end}.boss-hud{top:150px;left:25%;width:50%}.announcement{top:28%;left:7%;right:7%}.announcement h2{font-size:24px}dialog{padding:30px 24px;max-height:90dvh;overflow:auto}dialog h2{font-size:28px}.control-list>div{font-size:9px}.control-list kbd{font-size:8px}}
@media(max-height:620px) and (min-width:701px){.topbar{padding-top:17px}.menu-screen{top:23%}h1{font-size:70px;margin:18px 0}.subtitle{margin-bottom:14px}.intro{margin-bottom:14px;font-size:11px}.journey-meta{margin-top:16px}.primary{padding:14px 18px}.menu-footer{bottom:18px}.hud{top:72px}.announcement{top:31%}.boss-hud{top:140px}}
.mode-select{display:flex;gap:6px;border:0;padding:0;margin:0 0 20px}.mode-select legend{padding:0;margin-bottom:9px}.mode-select label{position:relative;cursor:pointer}.mode-select input{position:absolute;opacity:0;pointer-events:none}.mode-select span{display:block;min-width:92px;padding:9px 12px;border:1px solid #bfe3cf33;background:#06161c8c;color:#b7c8c2;font-size:9px;letter-spacing:1.5px;font-weight:700;transition:background .2s,border-color .2s}.mode-select small{display:block;margin-top:4px;font-size:8px;letter-spacing:.5px;font-weight:400;color:#94aea5}.mode-select input:checked+span{border-color:var(--mint);background:#bfe3cf1f;color:var(--white)}.mode-select input:focus-visible+span{outline:2px solid #e4eabd;outline-offset:3px}.lives-row{margin-top:7px}#lives{color:var(--mint);letter-spacing:3px}.critical #lives{color:#ffb199}
@media(max-width:700px){.mode-select{margin-bottom:14px}.mode-select span{min-width:0;padding:7px 9px;font-size:8px}.mode-select small{font-size:7px}}
@media(max-height:620px) and (min-width:701px){.mode-select{margin-bottom:12px}.mode-select span{padding:6px 10px}}
@media(max-height:500px) and (max-width:1000px){.mode-select{margin-bottom:8px}.mode-select legend{display:none}.mode-select span{padding:5px 8px;font-size:7px}.mode-select small{display:none}}
.stage-list{display:grid;gap:6px;margin:22px 0 10px;max-height:52dvh;overflow:auto}.stage-row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid #d0e8d91a}.stage-row span{font-size:12px;color:#d7e4dc}.stage-row small{display:block;font-size:8px;letter-spacing:1.4px;color:var(--gold);margin-bottom:3px}.stage-row button{padding:8px 12px;border:1px solid #bfe3cf40;background:#bfe3cf14;font-size:9px;letter-spacing:1.3px;font-weight:700}.stage-row button.boss{border-color:#ffb77d66;background:#ffb77d17;color:#ffd9b8}#stage-select>.text-button{display:block;margin:10px auto 0}
.ending{position:absolute;inset:0;z-index:5;overflow:hidden;background:#020a10;text-align:center;animation:ending-in 3s ease-out both}.ending-scenes{position:absolute;inset:0}.ending-scene{position:absolute;inset:-4%;background:center/cover no-repeat;opacity:0;transition:opacity 3s ease;animation:ending-drift 16s ease-in-out infinite alternate}.ending-scene.active{opacity:1}.ending-scene small{position:absolute;left:9%;bottom:10%;font-size:10px;letter-spacing:4px;color:#d6c29dd9}.ending-roll{position:absolute;z-index:1;left:50%;top:0;width:min(640px,86%);transform:translate(-50%,100dvh);animation:ending-roll 62s linear 2s forwards}.ending-roll .ending-dev{margin-top:26px;font-size:12px;letter-spacing:1.5px;color:#d6c29d}@keyframes ending-in{from{opacity:0}to{opacity:1}}@keyframes ending-drift{from{transform:scale(1.02) translateX(-1.5%)}to{transform:scale(1.08) translateX(1.5%)}}.ending-roll .eyebrow{justify-content:center}.ending-roll h2{font-size:clamp(30px,4vw,52px);font-weight:300;letter-spacing:1px;margin:22px 0 14px}.ending-roll p{color:#b7c8c2;font-size:14px;line-height:1.9;margin:0}.ending-roll section{margin-top:70px}.ending-roll h3{font-size:9px;letter-spacing:3px;color:var(--gold);font-weight:500;margin:0 0 18px}.ending-roll ul{padding:0;margin:0}.ending-roll li{list-style:none;font-size:13px;line-height:2.2;color:#d7e4dc}.ending-roll li small{color:#94aea5;letter-spacing:1.2px;margin-right:10px;font-size:9px}.ending-roll strong{display:block;font-size:34px;font-weight:300;letter-spacing:3px}.ending-roll .ending-last{margin:90px 0 0;font-size:clamp(26px,3vw,40px);font-weight:300;color:var(--white)}.ending-skip{position:absolute;right:5%;bottom:5%;z-index:1}@keyframes ending-roll{to{transform:translate(-50%,-100%)}}
@media(prefers-reduced-motion:reduce){.ending{overflow:auto;animation:none}.ending-scenes{position:fixed}.ending-scene{animation:none}.ending-roll{position:relative;transform:none;animation:none;margin:80px auto}}
@media(max-width:700px){.stage-row{grid-template-columns:1fr auto}.stage-row>span{grid-column:1/-1}.ending-roll p{font-size:12px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}@media(max-width:700px){}
@media(max-height:500px) and (max-width:1000px){
  #app{min-height:320px}.topbar{padding:12px 4%}.edition{display:none}.menu-screen{top:22%;left:7%}h1{font-size:57px;margin:16px 0 12px}.subtitle{font-size:9px;margin-bottom:13px}.intro{font-size:10px;margin-bottom:15px}.journey-meta,.sector-card,.menu-footer{display:none}.menu-actions .primary{padding:13px 17px}.hud{top:61px}.hud-label strong{font-size:13px}.score-widget strong{font-size:19px}.game-bottom{bottom:10px}.game-bottom #hint{display:none}.game-bottom{justify-content:flex-end}.boss-hud{top:117px}.announcement{top:31%}.announcement h2{font-size:22px;margin:9px}.announcement p{font-size:9px}
}

.manual-fire{font-size:8px;letter-spacing:1.1px;color:#b9d1ca}
@media(max-width:700px){.game-bottom .manual-fire{font-size:7px}}
@media(max-height:500px) and (max-width:1000px){.manual-fire{font-size:7px}}
@media(min-width:1200px) and (min-aspect-ratio:2/1){
  .hud,.game-bottom{left:50%;right:auto;width:min(92vw,1300px,260vh);transform:translateX(-50%)}
  .hud{top:76px}.shield-widget,.score-widget{width:220px;padding:10px 12px;background:linear-gradient(90deg,#06171baa,transparent)}.score-widget{background:linear-gradient(270deg,#06171baa,transparent)}
  .hud-label{font-size:10px}.hud-label strong{font-size:21px}.dash-row{font-size:8px}.score-widget strong{font-size:29px}.progress-widget{width:300px}
}
.score-form{margin:-6px 0 0}.score-form>div{display:flex;gap:8px;margin-top:9px}.score-form input{flex:1;min-width:0;padding:12px 14px;border:1px solid #bfe3cf40;background:#03131aa6;color:var(--white);font:inherit;font-size:13px;letter-spacing:2px;text-transform:uppercase}.score-form input:focus-visible{outline:2px solid #e4eabd;outline-offset:2px}.score-form button{padding:0 18px;border:1px solid var(--mint);background:#bfe3cf1f;font-size:10px;letter-spacing:1.5px;font-weight:700}.score-form button:disabled{opacity:.5;cursor:default}.score-form p{min-height:1.8em;margin:6px 0 0;font-size:11px}.ranking-tabs{display:flex;gap:6px;margin:4px 0 16px}.ranking-tabs button{padding:8px 14px;border:1px solid #bfe3cf33;background:#06161c8c;color:#b7c8c2;font-size:9px;letter-spacing:1.5px;font-weight:700}.ranking-tabs button[aria-pressed=true]{border-color:var(--mint);background:#bfe3cf1f;color:var(--white)}.ranking-list{list-style:none;counter-reset:rank;padding:0;margin:0 0 6px;max-height:44dvh;overflow:auto}.ranking-list li{counter-increment:rank;display:grid;grid-template-columns:28px 1fr auto;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid #d0e8d91a;font-size:12px}.ranking-list li::before{content:counter(rank,decimal-leading-zero);color:var(--gold);font-size:10px;letter-spacing:1px}.ranking-list li small{display:block;font-size:8px;letter-spacing:1.2px;color:#94aea5;margin-top:3px}.ranking-list li strong{font-weight:400;font-size:15px;letter-spacing:1px;font-variant-numeric:tabular-nums}.ranking-list li.mine{color:var(--mint)}#result .ranking-list{max-height:26dvh;margin-top:-8px}
/* Holding a touch button must never select its label or open the iOS magnifier and callout. */
#app{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}#app input{-webkit-user-select:text;user-select:text}
/* iOS zooms the page into any focused field under 16px and never zooms back out. */
@media(pointer:coarse){.score-form input{font-size:16px;padding:10px 12px}}
/* Install invitation and portrait guard. */
.intro-film{position:absolute;inset:0;z-index:15;background:#000;transition:opacity .35s}.intro-film video{width:100%;height:100%;object-fit:cover;transition:opacity .35s}.intro-film.dark video{opacity:0}.intro-film.gone{opacity:0;pointer-events:none}.intro-skip{position:absolute;right:max(5%,calc(env(safe-area-inset-right) + 16px));bottom:max(5%,calc(env(safe-area-inset-bottom) + 12px));padding:10px 14px;background:#0008;letter-spacing:1.5px}
#app.has-gamepad[data-state] #touch-controls{display:none!important}
.install-steps{margin:14px 0 6px;padding-left:22px;color:#d7e4dc;font-size:12px;line-height:1.7}.install-steps li+li{margin-top:6px}.install-steps li::marker{color:var(--gold)}#install>.small-label{margin:18px 0 0;color:var(--gold)}.rotate{display:none;position:fixed;inset:0;z-index:20;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:32px;text-align:center;background:#040e14f2;color:var(--white)}.rotate svg{width:84px;fill:none;stroke:var(--mint);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;animation:rotate-hint 2.4s ease-in-out infinite}.rotate strong{font-size:22px;font-weight:300;letter-spacing:1px}.rotate p{max-width:280px;margin:0;color:#a9c1b9;font-size:12px;line-height:1.8}@keyframes rotate-hint{0%,25%{transform:rotate(0)}55%,100%{transform:rotate(-90deg)}}@media(orientation:portrait) and (pointer:coarse) and (max-width:760px){.rotate{display:flex}}
/* Short landscape screens (phones lying down): the menu fits between the top bar and the bottom edge. */
@media(max-height:540px) and (orientation:landscape){
  #app{min-height:0}.topbar{padding:10px max(4%,calc(env(safe-area-inset-right) + 12px)) 10px max(4%,calc(env(safe-area-inset-left) + 12px))}.edition,.location{display:none}
  .menu-screen{top:calc(52px + env(safe-area-inset-top));bottom:max(10px,env(safe-area-inset-bottom));left:max(6%,calc(env(safe-area-inset-left) + 16px));display:flex;flex-direction:column;justify-content:center;width:min(60vw,480px)}
  .menu-screen .eyebrow{display:none}h1{font-size:clamp(30px,13vh,62px);margin:0 0 6px -4px}.subtitle{font-size:9px;margin:0 0 8px}.intro{font-size:10px;line-height:1.6;margin:0 0 10px}
  .mode-select{margin-bottom:10px}.mode-select legend{display:none}.mode-select span{min-width:0;padding:6px 10px;font-size:8px}.mode-select small{display:none}
  .menu-actions{gap:14px;flex-wrap:wrap}.menu-actions .primary{min-width:180px;padding:12px 16px}.menu-actions .text-button{padding:8px 0}.journey-meta,.sector-card,.menu-footer{display:none}
  dialog{padding:20px 26px;max-height:calc(100dvh - 16px);overflow:auto}dialog h2{font-size:22px;margin:10px 0 8px}dialog p{margin:6px 0}dialog .primary{margin-top:14px;padding:12px 16px}.close{top:4px}
  .result-stats{margin:12px 0;padding:12px 0}.result-stats strong{font-size:19px;margin-top:4px}.control-list{margin:10px 0}.control-list>div{padding:6px 0}.help-tip{padding:10px}#result .ranking-list{max-height:40dvh}.ranking-list{max-height:48dvh}.stage-list{margin:12px 0 8px}
}
@media(max-height:380px) and (orientation:landscape){.intro{display:none}h1{margin-bottom:4px}}
/* Touch controls (touch-first screens only): a floating analog stick on the left, FIRE and DASH on the right,
   clear of the notch and the home bar. */
#touch-controls{display:none}#touch-controls button,.stick{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;touch-action:none}
@media(pointer:coarse){
  #app[data-state=playing] #touch-controls{display:block;position:absolute;inset:0;z-index:3;pointer-events:none}
  .stick{position:absolute;left:0;bottom:0;width:48%;height:74%;pointer-events:auto}
  .stick-base{position:absolute;left:max(100px,calc(env(safe-area-inset-left) + 88px));top:calc(100% - max(100px,calc(env(safe-area-inset-bottom) + 88px)));width:132px;height:132px;margin:-66px 0 0 -66px;border-radius:50%;border:1px solid #bfdac766;background:radial-gradient(circle,#13383b66,#13383b26 72%);opacity:.5;transition:opacity .15s}
  .stick.active .stick-base{opacity:1;transition:none}
  .stick-knob{position:absolute;left:50%;top:50%;width:58px;height:58px;margin:-29px 0 0 -29px;border-radius:50%;background:#bfdfcfd9;border:1px solid #e6f1dc;box-shadow:0 0 18px #7fecd455}
  .touch-actions{position:absolute;right:max(18px,calc(env(safe-area-inset-right) + 8px));bottom:max(16px,calc(env(safe-area-inset-bottom) + 6px));display:flex;gap:26px;align-items:flex-end}
  .touch-fire,.touch-dash{border-radius:50%;pointer-events:auto;letter-spacing:1px}
  .touch-fire{width:clamp(76px,23vh,96px);height:clamp(76px,23vh,96px);background:#bfdfcf;color:#12302e;border:1px solid #e6f1dc88;font-weight:800;font-size:11px}.touch-fire:active{background:#eff7e7}
  .touch-dash{width:clamp(58px,17vh,70px);height:clamp(58px,17vh,70px);margin-bottom:calc(clamp(76px,23vh,96px) * .55);background:#96cabc22;border:1px solid #bfdac744;color:#dbedda;font-size:9px}
  .game-bottom{left:50%!important;right:auto!important;transform:translateX(-50%);justify-content:center!important;bottom:max(12px,env(safe-area-inset-bottom))!important}.game-bottom #hint{display:none}
}
/* Ranking tabs swap in place: the list dims while loading and the status line keeps its height. */
#ranking-list{min-height:46px;transition:opacity .15s}#ranking-list.loading{opacity:.5}#ranking-status{min-height:1.8em;margin:4px 0 0}
