:root{color-scheme:dark;font-family:"Hiragino Maru Gothic ProN","Yu Gothic",system-ui,sans-serif;color:#e9f5ff;background:#070d24;font-synthesis:none}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 50% 15%,#192d59,#070d24 65%)}button,a,.wheel{-webkit-tap-highlight-color:transparent}button{font:inherit;font-weight:800;border:1px solid #7a9bc166;border-radius:14px;padding:11px 15px;background:#182942;color:#e9f5ff;cursor:pointer;touch-action:manipulation;min-height:44px}button:hover{background:#244264}button:disabled{opacity:.45;cursor:default}button:focus-visible,a:focus-visible,.wheel:focus-visible,summary:focus-visible{outline:3px solid #ffe39a;outline-offset:3px}a{color:#b8dfed}main{max-width:1020px;margin:auto;padding:0 18px}header{height:66px;display:flex;gap:12px;align-items:center;justify-content:space-between;font-size:13px}header a{text-decoration:none}header button{font-size:12px}.brand{font-size:10px;letter-spacing:3px;color:#89a9c4}.space{position:relative;height:clamp(290px,43vh,420px);overflow:hidden;border:1px solid #7498c44d;border-radius:24px;background:#080d24;box-shadow:0 0 70px #3c6f9e20}canvas{position:absolute;inset:0;width:100%;height:100%}.flight-hud{position:absolute;inset:14px 16px auto;display:flex;justify-content:space-between;align-items:center;color:#acccdb;font-size:13px}.flight-hud button{padding:5px 10px;min-height:36px;font-size:12px}.overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:38px 18px 18px;background:linear-gradient(#07102233,#07102288);z-index:3}.overlay p{line-height:1.65;margin:8px 0 14px}.overline{font-size:11px;color:#88d5dd;letter-spacing:3px}h1{font-size:clamp(28px,5vw,43px);line-height:1.08;margin:6px 0 10px;letter-spacing:3px}h1 span{color:#ffe3a2;font-size:1.3em}h2{font-size:clamp(24px,4vw,36px);margin:10px 0}.primary{background:#ffd790;color:#132138;border-color:#ffe7b3;box-shadow:0 4px 0 #9f7838}.primary:hover{background:#ffe5b4}.primary:active{transform:translateY(2px);box-shadow:0 2px 0 #9f7838}#enemy{position:absolute;left:50%;top:43%;display:flex;flex-direction:column;align-items:center;padding:22px 36px;border-radius:43% 57% 40% 55%;border:1px solid #b5b9e4;background:radial-gradient(ellipse,#3d4569ee,#20233bcc);box-shadow:0 0 38px #92a9ef38;will-change:transform}.rock-mark{font-size:10px;letter-spacing:2px;color:#c1c6e2}#target{font-size:56px;white-space:nowrap;color:#fff4dc;text-shadow:0 0 24px #ffe5a18c;line-height:1.35}#hint{font-size:12px;color:#bdd8e9;letter-spacing:2px}#beam{position:absolute;left:50%;bottom:8%;font-size:32px;font-weight:900;color:#a8ffee;text-shadow:0 0 10px #5fffeb;opacity:0;white-space:nowrap;pointer-events:none}#enemy.hit{background:#b6fff9;border-color:#fff;box-shadow:0 0 65px #7bfff6}#enemy.hit #target{color:#123841}.ship{position:absolute;left:50%;bottom:9px;font-size:38px;color:#8eeadf;transform:translateX(-50%);text-shadow:0 0 22px #61efec}#trail{position:absolute;left:16px;right:16px;bottom:16px;display:flex;gap:5px;flex-wrap:wrap;max-width:40%;font-size:11px;color:#95d7df}#trail span{border:1px solid #7de8d64d;border-radius:12px;padding:3px 7px;background:#0b203777}#collection{max-width:440px;display:flex;gap:8px;flex-wrap:wrap;justify-content:center;color:#b6fff1}#collection span{border:1px solid #82e7d1;border-radius:20px;padding:5px 12px;background:#183c4d}.console{margin:14px 0;border:1px solid #607b9d60;border-radius:24px;padding:14px 22px 6px;background:linear-gradient(125deg,#1c2c47,#101c34);box-shadow:0 12px 40px #0004}.drum-pairs{display:flex;justify-content:center;gap:18px;max-width:720px;margin:auto}.kana-pair{display:flex;flex:1;min-width:0;max-width:210px;flex-direction:column;align-items:center}.pair-label{font-size:11px;color:#a0bacb}.candidate{font-size:38px;color:#9ef5e8;line-height:1.4}.formula{font-size:11px;color:#b6ccd9;min-height:20px}.pair-drums{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%}.drum{display:flex;flex-direction:column;gap:4px;min-width:0}.arrow{width:100%;padding:5px;min-height:44px;background:#0c1a30;font-size:13px;border-radius:10px}.wheel{display:flex;flex-direction:column;align-items:center;justify-content:space-around;width:100%;height:108px;border-radius:14px;border:1px solid #72b3c899;background:linear-gradient(#071225,#24465a 50%,#071225);box-shadow:inset 0 8px 10px #0004,inset 0 -8px 10px #0004;touch-action:none;cursor:grab;user-select:none}.wheel:active{cursor:grabbing}.wheel strong{font-size:32px;color:#fff4d8;text-align:center;transition:transform .1s}.wheel.turn strong{transform:scale(.88)}.neighbor{font-size:16px;opacity:.28}.tiny{font-size:11px;color:#92b2c6}.input-help{text-align:center;font-size:11px;color:#96b9cc;margin:10px 0}.actions{display:flex;justify-content:center}.actions .primary{min-width:200px}#status{text-align:center;font-size:13px;min-height:20px;color:#ffdca7;margin:12px 0 7px}details{color:#a5bfcc;font-size:13px;line-height:1.9;padding:6px 8px}summary{cursor:pointer}footer{font-size:11px;color:#849fb3;padding:14px 8px 28px;line-height:1.8}footer a{margin-left:10px}[hidden]{display:none!important}@media(max-width:600px){main{padding:0 10px}header{height:55px}.brand{display:none}.space{height:300px;border-radius:18px}.console{padding:10px 6px 5px;border-radius:18px}.drum-pairs{gap:4px}.pair-drums{gap:2px}.drum{gap:3px}.wheel{height:90px;border-radius:10px}.wheel strong{font-size:28px}.neighbor{font-size:13px}.candidate{font-size:32px}.formula{font-size:10px}.pair-label{font-size:10px}.arrow{padding:4px;min-height:44px}.actions .primary{min-width:190px}#target{font-size:44px}#enemy{padding:18px 26px}#trail{max-width:35%}.overlay .tiny{font-size:10px}}@media(max-width:360px){.space{height:270px}.wheel strong{font-size:25px}.neighbor{font-size:11px}.tiny{font-size:10px}.input-help{font-size:10px}}@media(max-height:550px) and (min-width:650px){main{max-width:1100px}#game{display:grid;grid-template-columns:1fr 1fr;gap:10px}header{grid-column:1/-1;height:46px}.space{height:340px}.console{margin:0;padding:8px}details,footer{grid-column:1/-1}.drum-pairs{gap:6px}.pair-drums{gap:3px}.wheel{height:85px}.candidate{font-size:30px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}.ship{text-shadow:none}}

/* This game's viewport is the play surface. Keep page scroll and pull-to-refresh outside gestures. */
html,body{width:100%;height:100%;overflow:hidden;overscroll-behavior:none}body{height:100dvh;touch-action:manipulation}main#game{position:relative;height:100%;max-width:1100px;display:grid;grid-template-columns:1fr;grid-template-rows:44px minmax(0,1fr) auto;gap:8px;padding:max(0px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) max(6px,env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-left))}header{height:auto;grid-column:1/-1}header button{min-height:36px;padding:6px 12px}#help-open{margin-left:auto}.space{height:auto;min-height:0;width:100%}.console{margin:0;padding:8px 8px 4px;min-width:0}.drum-pairs{gap:12px}.pair-label{display:none}.candidate{font-size:32px;line-height:1.2}.formula{font-size:10px;min-height:17px}.wheel{height:88px}.input-help{margin:5px 0;font-size:11px}.actions .primary{min-height:44px;padding:8px 20px}#status{font-size:12px;margin:6px 0 2px;min-height:17px;line-height:1.4}.help-panel{position:absolute;z-index:10;inset:48px 8px 8px;padding:18px;background:#102039f5;border:1px solid #7aa2c3;border-radius:20px;overflow:auto;overscroll-behavior:contain;font-size:14px;line-height:1.8}.help-panel>button{float:right}.help-panel footer{padding:10px 0}#enemy{max-width:90%}
@media(max-width:600px){.drum-pairs{gap:4px}.pair-drums{gap:2px}.console{padding:7px 6px 4px}.candidate{font-size:30px}.wheel{height:74px}.wheel strong{font-size:27px}.arrow{min-height:44px}.input-help{font-size:10px}.flight-hud{inset:8px 10px auto}.flight-hud button{min-height:32px}.overlay{padding:30px 12px 8px}.overlay p{font-size:12px;margin:4px 0 8px}h1{font-size:27px;line-height:1.05;margin:2px 0 6px}.overline{font-size:10px!important}.overlay .tiny{font-size:9px}.ship{font-size:28px}}
@media(max-height:700px){.wheel{height:60px}.neighbor{font-size:11px}.candidate{font-size:27px}.input-help{margin:4px 0}#status{font-size:11px}}
@media(max-height:550px) and (min-width:480px){main#game{grid-template-columns:minmax(0,1fr) minmax(292px,1.35fr);grid-template-rows:36px minmax(0,1fr);gap:6px;padding-bottom:max(4px,env(safe-area-inset-bottom))}.space,.console{height:100%;min-height:0}.console{display:flex;flex-direction:column;justify-content:center;padding:5px 6px}.drum-pairs{width:100%;gap:4px}.pair-drums{gap:2px}.candidate{font-size:25px}.formula{min-height:14px;font-size:9px}.wheel{height:52px}.wheel strong{font-size:25px}.neighbor{font-size:10px}.drum{gap:2px}.arrow{min-height:44px;border-radius:8px}.input-help{display:none}.actions{margin-top:6px}.actions .primary{min-height:44px}#status{font-size:10px;line-height:1.2;margin:5px 0 0;min-height:12px}.overlay p{font-size:11px}h1{font-size:23px}.overline{letter-spacing:1px}.flight-hud{font-size:11px}.flight-hud button{font-size:10px;min-height:28px;padding:3px 6px}.overlay .tiny{font-size:9px}#collection{gap:4px;font-size:10px}#collection span{padding:3px 6px}.overlay h2{font-size:22px}}

#game[data-phase="title"] .console,#game[data-phase="complete"] .console{display:none}
#game[data-phase="title"],#game[data-phase="complete"]{grid-template-columns:1fr;grid-template-rows:44px minmax(0,1fr)}
@media(max-height:550px) and (min-width:480px){.flight-hud{flex-wrap:wrap;gap:3px}.space #enemy{padding:12px 10px}.space #target{font-size:32px}.space #hint{font-size:10px}#game[data-phase="title"],#game[data-phase="complete"]{grid-template-rows:36px minmax(0,1fr)}}

.mode-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;max-width:650px}.mode-actions button{font-size:13px}
@media(max-width:600px){.mode-actions{gap:6px}.mode-actions button{font-size:12px;padding:9px 12px}}

/* Shared input: the highlighted range is always the next keyboard target. */
.candidate{min-height:38px;padding:0 10px;border:2px solid transparent;background:transparent;border-radius:10px;box-shadow:none;cursor:pointer}.candidate:hover{background:#254358}.kana-pair.active .candidate,.drum.selected .wheel{border-color:#ffe19a;box-shadow:0 0 0 2px #ffe19a44,0 0 12px #ffe19a55}.input-tools{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;margin:5px 0}.input-target{flex-basis:100%;text-align:center;font-size:11px;line-height:1.2;color:#ffe19a}.input-tools button{min-height:36px;padding:4px 10px;font-size:11px}.input-help{display:none}@media(max-height:550px){.input-tools{margin:3px 0;gap:4px}.input-target{font-size:10px}.input-tools button{min-height:32px}.candidate{min-height:31px}}
.formula.retained::after{content:' 前';color:#91aaba}
.input-tools{flex-wrap:nowrap}.input-target{flex-basis:auto}.input-tools button{white-space:nowrap}
