@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700;900&display=swap');
:root{color-scheme:dark;--bg:#111320;--panel:#181b2b;--text:#eee5e8;--muted:#9695ad;--pink:#efb4cd;--cyan:#89d7d7;--line:#303044}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 38% 35%,#23233c 0,transparent 60%),var(--bg);color:var(--text);font:14px/1.5 system-ui,-apple-system,"Segoe UI",sans-serif}button,a,input{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--cyan);outline-offset:5px}button:disabled{cursor:wait;opacity:.6}button{border:0}a{color:inherit;text-decoration:none}.topbar{height:84px;max-width:1120px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{font-family:"Noto Serif SC",serif;font-size:22px;letter-spacing:4px;display:flex;align-items:center;gap:12px;font-weight:700}.brand-mark{font-size:30px;color:var(--pink)}.brand-en{font-family:monospace;font-weight:400;font-size:12px;letter-spacing:3px;color:var(--muted);margin-left:5px}.top-right{display:flex;align-items:center;gap:24px}.edition{color:var(--muted);font-size:13px;letter-spacing:2px}.icon-btn{background:transparent;color:var(--muted);padding:7px}.icon-btn:first-of-type{font-size:21px}.icon-btn span{font-size:12px;margin-left:4px}.icon-btn:hover{color:var(--pink)}#fullscreen{font-size:23px}.arcade{display:grid;grid-template-columns:minmax(0,520px) 282px;gap:36px;max-width:838px;margin:28px auto 0;align-items:start}.field-meta{display:flex;justify-content:space-between;align-items:center;font:12px monospace;letter-spacing:1px;margin-bottom:12px;color:var(--pink)}.field-meta .muted{margin-left:12px;font:13px system-ui}.field-meta i{display:inline-block;width:5px;height:5px;background:var(--pink);margin-right:8px}.field-meta b{font-weight:400}#loop-label{color:var(--muted);font:12px system-ui}.field{position:relative;width:100%;aspect-ratio:480/680;overflow:hidden;border:1px solid #555069;background:#111b2b;box-shadow:0 0 0 4px #151725,0 12px 50px #03040c66;touch-action:none}#canvas-host,#canvas-host canvas{width:100%;height:100%;display:block}canvas{image-rendering:auto}.overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(180deg,#0b112b44,#10142777 65%,#0b112bd9);z-index:5}.overlay[hidden]{display:none}.start-copy{text-align:center;margin-top:-20px}.eyebrow{font:10px monospace;letter-spacing:3px;color:#b1c8dc}.title-seal{width:35px;height:35px;border:1px solid #dfafc7aa;color:var(--pink);margin:32px auto 20px;font:19px/32px "Noto Serif SC",serif;transform:rotate(5deg)}h1{margin:0;font:900 clamp(50px,6vw,76px)/1.3 "Noto Serif SC",serif;letter-spacing:9px;text-shadow:0 3px 0 #392f52,0 6px 20px #000}h1 span{display:block;color:#f2c1d6}.subtitle{font:11px monospace;letter-spacing:3px;margin:16px 0 22px;color:#d3c4df}.title-rule{height:1px;width:44px;background:var(--pink);margin:0 auto 22px}.intro{color:#d5cbd9;font:14px "Noto Serif SC",serif;letter-spacing:2px}.primary{display:block;min-width:218px;padding:14px 28px;margin:32px auto 12px;background:#e9b8ce;color:#2e233c;border:1px solid #ffe7ef;box-shadow:4px 4px 0 #66516e;letter-spacing:4px;font-weight:600}.primary:hover{background:#f7d8e5;transform:translateY(-1px)}.start-hint{font-size:12px;letter-spacing:1px;color:#aba4c2}.start-bottom{position:absolute;bottom:34px;left:0;right:0;display:flex;justify-content:center;gap:20px;font-size:11px;color:#a09db8;letter-spacing:2px}.start-bottom span{color:#e2c4d5}.field-bottom{position:absolute;bottom:8px;left:12px;right:12px;display:flex;justify-content:space-between;color:#c8c8df88;font:9px monospace;letter-spacing:1px;pointer-events:none}.under-field{display:flex;align-items:center;justify-content:space-between;margin-top:13px;font-size:12px;color:var(--muted)}.under-field>span>.pink{margin-right:7px}.under-field button{background:none;color:var(--muted);font-size:12px;padding:4px}.under-field kbd{margin-left:8px}.sidebar{padding-top:24px}.section-label{font-size:11px;letter-spacing:2px;color:#b0a7bd;display:flex;align-items:center;justify-content:space-between}.section-label span{font-size:11px;color:#827e97;letter-spacing:1px}.score-block>strong{font:34px/1.65 ui-monospace,"Courier New",monospace;letter-spacing:3px;font-weight:400;color:#f0cee0}.high-score{display:flex;justify-content:space-between;font:12px monospace;color:var(--muted);padding-bottom:20px;border-bottom:1px solid var(--line)}.stats{padding:18px 0 22px}.stat-life>div{display:flex;align-items:center;gap:16px;margin-top:6px}.life-icon{color:var(--pink);font-size:20px}.stat-life strong{font:29px ui-monospace,monospace;letter-spacing:2px}.stat-pair{display:grid;grid-template-columns:1fr 1fr;margin-top:20px}.stat-pair>div+div{border-left:1px solid var(--line);padding-left:23px}.stat-pair strong{display:block;font:21px monospace;letter-spacing:2px;margin:6px 0}.stat-pair small{color:#7f7d96;font-size:11px}.stat-pair kbd{margin-left:7px}.character-card{height:251px;position:relative;overflow:hidden;border:1px solid #414054;background:#20213b}.character-card img{width:100%;height:100%;object-fit:cover;object-position:center 25%;image-rendering:auto}.portrait-shade{position:absolute;inset:0;background:linear-gradient(transparent 45%,#141828 100%)}.character-caption{position:absolute;bottom:18px;left:19px}.character-caption>span{font:9px monospace;color:#d3bdcb;letter-spacing:2px}.character-caption h2{font:600 27px "Noto Serif SC",serif;letter-spacing:3px;margin:5px 0}.character-caption small{font:12px monospace;letter-spacing:1px;color:#d4bbd0}.character-caption p{margin:0;font-size:11px;color:#b9a8c4;letter-spacing:2px}.character-number{position:absolute;top:11px;right:13px;font:12px monospace;color:#b7a3bf}.control-panel{padding-top:22px}.control-panel>.section-label{margin-bottom:15px}.key-row{display:flex;align-items:center;justify-content:space-between;margin-top:11px;font-size:12px;color:#aaa4b9}.key-row>span:first-child{font-size:10px}.key-row kbd{margin-right:3px}kbd{display:inline-block;border:1px solid #474153;border-bottom:2px solid #474153;border-radius:3px;color:#c3bdce;font:10px/1.5 monospace;padding:1px 5px;background:#222232}.auto-row{display:flex;align-items:center;margin-top:18px;padding-top:14px;border-top:1px solid var(--line);font-size:12px;color:#c1b9cd;cursor:pointer}.auto-row input{position:absolute;opacity:0;width:32px;height:20px;right:0}.auto-row{position:relative}.switch{margin-left:auto;display:block;width:29px;height:15px;background:#555166;border-radius:10px;position:relative}.switch:after{content:"";width:9px;height:9px;position:absolute;left:3px;top:3px;border-radius:50%;background:#181b2b;transition:transform .15s}.auto-row input:checked+.switch{background:var(--pink)}.auto-row input:checked+.switch:after{transform:translateX(14px)}.auto-row input:focus-visible+.switch{outline:2px solid var(--cyan)}.chapter-note{display:flex;gap:13px;color:var(--pink);margin-top:24px;align-items:flex-start}.chapter-note>span{font-size:20px}.chapter-note p{margin:0;font:11px/1.9 "Noto Serif SC",serif;color:#a9a0b6}.chapter-note p span{color:#77758e}footer{max-width:1120px;margin:36px auto 0;padding:19px 0 25px;border-top:1px solid var(--line);display:flex;justify-content:space-between;font:10px monospace;letter-spacing:1px;color:#858096}footer .muted{padding:0 10px;color:#524e65}.muted{color:var(--muted)}.pink{color:var(--pink)}.boss-hud{position:absolute;top:16px;left:16px;right:16px;pointer-events:none;color:#f9dfed;text-shadow:0 2px #171024}.boss-hud>div:first-child{display:flex;justify-content:space-between;font-size:11px}.boss-track{height:5px;background:#3c304b;margin-top:6px}.boss-track i{display:block;height:100%;background:#f0accb;width:100%}.boss-hud p{text-align:right;font:14px "Noto Serif SC",serif;margin:9px 0 0}.boss-hud>span{font-size:9px;color:var(--pink)}.stage-banner{position:absolute;top:38%;left:0;right:0;text-align:center;pointer-events:none;text-shadow:0 2px 8px #101426;background:linear-gradient(90deg,transparent,#13142aaa,transparent);padding:22px 0}.stage-banner>*{display:block}.stage-banner small{font:10px monospace;color:var(--pink);letter-spacing:4px}.stage-banner strong{font:600 31px "Noto Serif SC",serif;letter-spacing:6px;margin:10px 0}.stage-banner>span{color:#d3c4df;font-size:12px;letter-spacing:2px}.focus-state{position:absolute;left:12px;bottom:25px;font-size:10px;color:var(--cyan);opacity:0;pointer-events:none}.focus-state.active{opacity:1}.touch-controls{display:none}[hidden]{display:none!important}.error-copy{max-width:320px;margin:auto;line-height:1.8}.error-copy p{color:var(--pink)}
@media(min-height:1000px) and (min-width:850px){.arcade{margin-top:40px;grid-template-columns:minmax(0,560px) 282px;max-width:878px;gap:36px}.character-card{height:285px}.topbar{height:100px}}@media(max-width:1000px){.topbar,footer{margin-left:28px;margin-right:28px}.arcade{margin-left:auto;margin-right:auto;width:calc(100% - 56px);grid-template-columns:minmax(0,520px) 250px;gap:24px}.brand-en{display:none}.score-block>strong{font-size:30px}.edition{display:none}}@media(max-width:720px){.topbar{height:62px;margin:0 17px}.brand{font-size:18px;letter-spacing:2px;gap:8px}.brand-mark{font-size:24px}.top-right{gap:9px}.icon-btn span{display:none}.arcade{display:flex;flex-direction:column;width:min(100% - 24px,480px);margin-top:16px;gap:15px}.game-column{width:100%}.field{max-height:calc(100dvh - 150px);width:auto;margin:auto;aspect-ratio:480/680}.field-meta{font-size:10px}.field-meta .muted{font-size:11px}.sidebar{display:grid;grid-template-columns:1fr 1fr;gap:18px;width:100%;padding-top:0}.score-block{padding-top:5px}.score-block>strong{font-size:25px;letter-spacing:0}.high-score{padding-bottom:10px;font-size:10px}.stats{padding:5px 0}.stat-life strong{font-size:22px}.stat-life>div{margin-top:3px}.stat-pair{margin-top:10px}.stat-pair strong{font-size:16px}.stat-pair>div+div{padding-left:12px}.character-card{height:210px}.control-panel{padding-top:3px}.section-label{font-size:9px;letter-spacing:1px}.section-label span{font-size:9px}.key-row{font-size:10px}.key-row kbd{padding:1px 3px}.chapter-note{display:none}.under-field{margin-top:9px;font-size:10px}.touch-controls{display:flex;align-items:center;justify-content:space-between;margin-top:10px;gap:8px}.touch-controls button{background:#2f2b42;padding:10px 12px;border:1px solid #64506b;font-size:12px;touch-action:none}.touch-controls span{font-size:10px;color:var(--muted)}footer{margin:20px 14px 0;font-size:9px}footer>span:last-child{font-size:8px}.start-copy{transform:scale(.86)}h1{font-size:58px}.start-bottom{bottom:22px;font-size:9px}.field-bottom{font-size:8px}.boss-hud p{font-size:12px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}

/* The touch console lives outside the playfield so fingers never hide bullets. */
.touch-controls{user-select:none;-webkit-user-select:none;touch-action:none}
.joystick-wrap{display:flex;flex-direction:column;align-items:center;gap:3px;flex:0 0 112px}
.joystick-wrap small{font-size:10px;color:var(--muted);letter-spacing:2px}
#joystick{position:relative;display:grid;place-items:center;width:96px;height:96px;border:1px solid #70627e;border-radius:50%;background:radial-gradient(circle,#333048 0 34%,#222236 35% 64%,#3c344c 65% 66%,#191d30 67%);touch-action:none}
#joystick-knob{z-index:1;width:40px;height:40px;border:1px solid #c29bb4;border-radius:50%;background:#745b79;box-shadow:0 2px 10px #0006;pointer-events:none}
.joystick-cross{position:absolute;inset:16px;background:linear-gradient(90deg,transparent 49%,#8d779644 49% 51%,transparent 51%),linear-gradient(transparent 49%,#8d779644 49% 51%,transparent 51%);pointer-events:none}
#joystick.pressed #joystick-knob{background:#bd91b1;border-color:#f3cfe1}
.touch-actions{display:grid;grid-template-columns:repeat(2,64px);gap:8px}
.touch-actions button{min-height:44px;border-radius:9px!important;white-space:nowrap;touch-action:none}
.touch-actions #touch-bomb{background:#60445e;border-color:#d6a4bf;color:#ffe7f2}
.touch-actions button.pressed{background:#87647f;border-color:#f1c3db}
@media(max-width:720px),(pointer:coarse){
 body{padding-top:env(safe-area-inset-top)}
 .topbar{height:48px;margin:0 14px}.brand{font-size:17px;letter-spacing:2px;gap:7px}.brand-en,.edition{display:none}.top-right{gap:8px}.icon-btn{padding:4px}.icon-btn span{display:none}
 .arcade{display:flex;flex-direction:column;width:calc(100% - 20px);max-width:650px;margin:0 auto;height:calc(var(--game-viewport-height, 100dvh) - 48px - env(safe-area-inset-top) - env(safe-area-inset-bottom));gap:5px;padding:5px 0 7px}
 .sidebar{order:-1;display:flex;width:100%;height:54px;flex:0 0 54px;padding:0;gap:18px;align-items:center}
 .sidebar .character-card,.sidebar .control-panel,.sidebar .chapter-note,.high-score{display:none}
 .score-block{padding:0;flex:1}.score-block>strong{font-size:20px;line-height:1.3;letter-spacing:1px}.section-label{font-size:9px;letter-spacing:1px}.section-label span{display:none}
 .stats{padding:0;display:flex;gap:18px;align-items:center}.stat-life>div{gap:7px;margin:0}.stat-life strong{font-size:18px;letter-spacing:0}.life-icon{font-size:13px}.stat-pair{margin:0;display:flex;gap:14px}.stat-pair>div+div{padding-left:0;border:0}.stat-pair strong{font-size:14px;letter-spacing:0;margin:2px 0}.stat-pair small{display:none}
 .game-column{min-height:0;flex:1;display:flex;flex-direction:column;width:100%}
 .field-meta{flex:0 0 18px;margin:0 0 5px;font-size:10px}.field-meta .muted{font-size:11px}
 .field-slot{min-height:0;flex:1;container-type:size;display:grid;place-items:center;width:100%}
 .field{width:min(100cqw, calc(100cqh * .705882));height:auto;aspect-ratio:480/680;max-height:none;margin:0}
 .under-field{flex:0 0 24px;margin:4px 0 0;font-size:10px}.under-field button{min-height:24px;padding:0 4px}.under-field kbd{display:none}
 .touch-controls{display:flex;flex:0 0 112px;align-items:center;justify-content:space-between;gap:10px;margin:0;padding:0 max(4px,calc((100% - 350px)/2))}
 .touch-controls .touch-actions button{font-size:13px;padding:9px 8px}
 footer{display:none}
 .start-copy{transform:none;width:100%;margin:0}.title-seal{margin:18px auto 9px}.eyebrow{font-size:9px}h1{font-size:clamp(28px,7dvh,52px);letter-spacing:6px}.subtitle{margin:8px 0 12px;font-size:9px}.title-rule{margin-bottom:13px}.intro{font-size:11px;letter-spacing:1px}.primary{min-width:170px;padding:11px 18px;margin:18px auto 8px;font-size:13px}.start-hint{font-size:10px}.start-bottom{bottom:13px;font-size:8px;gap:12px}.boss-hud{top:10px;left:10px;right:10px}.boss-hud p{font-size:11px}.boss-hud>div:first-child{font-size:10px}
}
@media(orientation:landscape) and (max-height:550px) and (pointer:coarse){
 .topbar{height:40px}.arcade{height:calc(var(--game-viewport-height, 100dvh) - 40px - env(safe-area-inset-top) - env(safe-area-inset-bottom));max-width:980px}
 .game-column{display:grid;grid-template-columns:112px minmax(0,1fr) 140px;grid-template-rows:minmax(0,1fr) 22px;gap:5px 10px}
 .field-meta{display:none}.field-slot{grid-column:2;grid-row:1;height:100%}.under-field{grid-column:2;grid-row:2;margin:0}.touch-controls{display:contents}.joystick-wrap{grid-column:1;grid-row:1;align-self:center}.touch-actions{grid-column:3;grid-row:1;align-self:center}
 .sidebar{position:absolute;top:6px;left:50%;transform:translateX(-50%);width:260px;height:28px;gap:15px}.sidebar .section-label{display:none}.stat-pair{display:none}.score-block>strong{font-size:16px}.stats{gap:0}.stat-life strong{font-size:16px}
 .start-copy .eyebrow,.start-copy .title-seal,.start-copy .intro,.start-copy .title-rule,.start-bottom{display:none}.start-copy h1{font-size:32px}.start-copy h1 span{display:inline}.start-copy .primary{margin-top:15px}
}
@container (max-height:400px){
 .start-copy .eyebrow,.start-copy .title-seal,.start-copy .title-rule,.start-copy .intro{display:none}
 .start-copy h1{font-size:38px}.start-copy .primary{margin-top:14px}.start-bottom{display:none}
}

/* Override inline dimensions written by Pixi autoDensity, preserving the full view. */
#canvas-host{position:absolute;inset:0;width:100%;height:100%}
#canvas-host canvas{width:100%!important;height:100%!important;display:block}
@media(max-width:720px),(pointer:coarse){
 .field{width:100%;height:100%;min-width:0;min-height:0}
 .field-slot{overflow:hidden}
 .arcade{width:calc(100% - 20px - env(safe-area-inset-left) - env(safe-area-inset-right))}
 .sidebar{min-width:0;gap:10px}.stats{gap:10px}.stat-pair{gap:8px}
 .boss-hud{left:6px;right:6px}.boss-hud>div:first-child{gap:4px}
 .start-copy{max-height:100%;overflow:auto}.primary{min-width:0;max-width:90%}
 .start-hint{padding:0 5px}
}

/* Prevent Safari selection, image dragging and long-press callouts during play. */
body,.topbar *,.arcade *,footer *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
img,canvas{-webkit-user-drag:none}
button{touch-action:manipulation}
.touch-controls button,#joystick,.field{touch-action:none}
.loading{width:min(76%,260px);margin:18px auto 0;text-align:left}
.loading-caption{display:flex;justify-content:space-between;gap:12px;color:#d9c8de;font-size:12px;letter-spacing:0;margin-bottom:7px}
.loading-track{height:6px;background:#292a40;border:1px solid #64536e;overflow:hidden}
.loading-track i{display:block;width:0;height:100%;background:#efb4cd}
@media(max-height:550px){.loading{margin-top:8px}.loading-caption{font-size:11px;margin-bottom:4px}}
