*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;background:#0b1310;color:#f3e9d2;overscroll-behavior:none}body{font-family:"PingFang TC","Noto Sans TC","Microsoft JhengHei",sans-serif}button{font:inherit;color:inherit;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-user-select:none}button:focus-visible{outline:2px solid #f4d393;outline-offset:3px}button:disabled{opacity:.65;cursor:wait}[hidden]{display:none!important}h1,h2,p{margin:0}#arena{--top:72px;--dock:120px;position:relative;width:100%;height:100svh;min-height:420px;overflow:hidden;isolation:isolate;touch-action:none}#playfield{position:absolute;left:0;right:0;top:var(--top);bottom:calc(var(--dock) + env(safe-area-inset-bottom));overflow:hidden;background:#18231b}#world{display:block;width:100%;height:100%;outline:none;cursor:crosshair}#hud{position:absolute;inset:0;pointer-events:none}.topbar,.bottom-dock{pointer-events:auto;position:absolute;left:0;right:0;background:#111c17;border-color:#a5925c40;border-style:solid;border-width:0}.topbar{height:var(--top);top:0;border-bottom-width:1px;padding:10px 22px;display:flex;gap:24px;align-items:center;justify-content:space-between}.vitals{display:grid;grid-template-columns:75px 145px;gap:5px 10px;min-width:230px;align-items:center}.player-id{grid-row:1/3;font-family:"Songti TC",serif;color:#d9bf8a;font-size:17px;letter-spacing:.06em}.vital-track{font-size:11px;line-height:1.1;min-width:120px}.vital-track>span{display:flex;justify-content:space-between;margin-bottom:4px;color:#d5dcc9}.vital-track i{display:block;height:4px;background:#b7caad22}.vital-track em{display:block;width:100%;height:100%;background:#a8c497}.stamina em{background:#c6ab70}.shield-value{position:absolute;font-size:10px;color:#a8dced;left:24px;top:49px}.location{display:flex;flex-direction:column;min-width:150px;flex:1;max-width:330px;gap:3px}.location>b{font-size:16px;font-weight:500;color:#f0dfbb}.location>span{font-size:11px;color:#a5b29d}.location #stealthText{color:#dfbf83;position:absolute;top:48px;margin-left:115px;font-size:11px}.location #stealthText.concealed{color:#b4d8a1}.match{min-width:90px;display:flex;flex-direction:column;gap:5px;font-size:12px}.match b{font:24px/1 Georgia,serif;margin-left:8px;color:#efd9aa}.match small{font-size:10px;color:#b4bd9f}.match small.danger{color:#ffb5a0}.menu{display:flex;gap:5px}.menu button{border:1px solid #b29c633d;background:#1b2920;padding:8px 11px;min-height:36px;font-size:12px;color:#c7ceb7}.menu button:hover{border-color:#d6bb80}.bottom-dock{bottom:0;height:calc(var(--dock) + env(safe-area-inset-bottom));padding:28px 24px calc(11px + env(safe-area-inset-bottom));border-top-width:1px;display:flex;align-items:center;justify-content:center}.notice{position:absolute;top:5px;left:16px;right:16px;height:19px;text-align:center;font-size:12px;color:#899c88;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}.notice.active{color:#e2d295}.quickbar{display:grid;grid-template-columns:repeat(6,74px);gap:6px;position:relative;z-index:1}.slot{position:relative;height:73px;padding:6px 9px 6px;border:1px solid #9c916245;background:linear-gradient(160deg,#223027,#17241d);display:flex;align-items:center;flex-direction:column;justify-content:center;gap:3px;transition:border-color .12s,background .12s}.slot.selected{border:1px solid #dfc27c;background:linear-gradient(160deg,#564c30,#2d3422);box-shadow:inset 0 -2px #c1a568}.slot.armed{border-color:#f3aa6a;background:#61412a}.slot.empty{color:#72816f}.slot.received{border-color:#c7e7aa;background:#34553a;box-shadow:0 0 14px #a6d58335}.slot[data-delta]:after{content:attr(data-delta);position:absolute;right:4px;top:-15px;font-weight:700;font-size:14px;color:#d3f5b6;background:#203324;padding:1px 5px;border-radius:2px}.slot kbd{position:absolute;left:5px;top:3px;font:10px Georgia,serif;color:#b2ba9e}.slot-icon{width:28px;height:28px;color:#dbc895}.slot-icon{display:grid;place-items:center;font:600 15px/1 "PingFang TC",sans-serif;width:auto;min-width:28px}.edition a{color:#e6c98a;text-underline-offset:4px}.slot b{font-size:11px;font-weight:500;letter-spacing:.03em}.slot .quantity{position:absolute;right:5px;top:4px;font-size:13px;line-height:1.1;font-weight:600;color:#e6d6aa}.empty .quantity{color:#788872}.desktop-hint{position:absolute;left:22px;bottom:27px;font-size:11px;line-height:1.9;color:#8ea08a}.stick,.touch-actions{display:none}.overlay{position:absolute;inset:0;background:linear-gradient(90deg,#081510fa,#0b1711ee 40%,#0a191277 75%,#0a170f70);display:flex;align-items:center;padding:36px 7vw;z-index:8;touch-action:pan-y}.intro-content{width:570px;max-width:100%;max-height:calc(100svh - 56px);overflow:auto;scrollbar-width:thin}.eyebrow{font-size:12px;letter-spacing:.2em;color:#cbb077;display:flex;align-items:center;gap:14px;margin-bottom:20px}.eyebrow>span{width:28px;height:1px;background:#c5a46a}h1{font-family:"Songti TC","Noto Serif TC",Georgia,serif;font-weight:600;font-size:clamp(42px,5.5vw,78px);letter-spacing:.12em;line-height:1.25;text-shadow:0 3px 30px #0008}h2{font-family:"Songti TC","Noto Serif TC",Georgia,serif;font-size:34px;letter-spacing:.13em;font-weight:400;color:#d9bb7d;margin:10px 0 22px}.intro-line{font-size:18px;letter-spacing:.05em;color:#dedecd}.campaign-route{display:flex;align-items:center;gap:16px;max-width:500px;padding:20px 0;margin:24px 0;border-top:1px solid #baa16755;border-bottom:1px solid #baa16755}.campaign-route span{font-size:16px;color:#ddd6b6}.campaign-route b{font:24px Georgia,serif;color:#c5a971;display:block;margin-bottom:7px}.campaign-route i{font-size:24px;color:#8c926e;font-style:normal}.intro-story{font-size:16px;line-height:1.9;color:#bdcbb7}.intro-rules{margin:20px 0 25px;font-size:16px;line-height:1.9;color:#c5ceba}.intro-rules b{font-weight:500;color:#daba7e;margin-right:8px}.primary{display:block;width:100%;max-width:420px;min-height:54px;padding:13px 20px;border:1px solid #dfc181;background:#bc9c5a;color:#122017;font-size:18px;font-weight:600;letter-spacing:.08em;box-shadow:0 8px 24px #07160c70}.primary:hover{background:#dec185}.secondary{width:100%;max-width:420px;margin-top:10px;padding:12px;background:#142319d9;border:1px solid #b2aa8755;font-size:16px;color:#d2d6c0}.edition{font-size:11px;line-height:1.6;color:#9faa98;margin-top:15px}.intro-mark{position:absolute;right:8vw;top:41%;text-align:center;opacity:.9;text-shadow:0 3px 10px #0a180b}.intro-mark>span{display:block;font-family:"Songti TC",serif;font-size:44px;letter-spacing:.2em}.intro-mark>b{font-size:16px;letter-spacing:.08em;font-weight:400;display:block;margin-top:14px}.intro-mark>i{display:block;height:64px;width:1px;background:#c0ac73;margin:24px auto}.intro-mark>small{font-size:10px;letter-spacing:.15em;color:#e1cd9c}.centered{justify-content:center;background:#08130de0;backdrop-filter:blur(5px);padding:22px}.dialog{width:530px;max-width:100%;max-height:calc(100svh - 40px);overflow-y:auto;overscroll-behavior:contain;padding:30px;border:1px solid #c3ac7060;background:#122018f5;box-shadow:0 30px 100px #0007;scrollbar-width:thin}.dialog .eyebrow{margin-bottom:0;font-size:11px}.dialog h2{font-size:30px;letter-spacing:.06em;margin:18px 0}.dialog p{font-size:16px;line-height:1.8;color:#ccd0bc;text-wrap:pretty}.dialog .primary{margin-top:23px;max-width:none}.dialog .secondary{max-width:none}.story-dialog{width:590px}.story-body{margin-bottom:20px}.stage-tactic{font-size:15px;line-height:1.8;color:#dbc392;border-left:2px solid #b39b65;padding:10px 14px;background:#1c2a1c;margin:20px 0}.carry-inventory{white-space:pre-line;font-size:15px;line-height:1.8;color:#e4d1a0;padding:12px 0;border-top:1px solid #b59e6435;border-bottom:1px solid #b59e6435}.dialog .story-rule{font-size:15px;color:#d3d9c1;margin-top:16px}.result-stats{display:flex;gap:26px;margin:22px 0;padding-top:18px;border-top:1px solid #d6c08540}.result-stats strong{font:29px Georgia,serif;display:block;color:#dfc081}.result-stats span{font-size:12px;display:block;margin-top:6px}.reward-text{color:#d5e5b5;font-size:15px;white-space:pre-line;line-height:1.8;margin-bottom:15px}.dialog .result-tip{font-size:14px;margin-top:16px;color:#a6b19b}.rules-dialog{width:560px;display:flex;flex-direction:column;overflow:hidden}.rules-goal{flex:none;padding-bottom:15px;border-bottom:1px solid #c3ac7040}.rules-list{overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;min-height:0;padding:15px 5px 0 0;display:grid;gap:15px}.rules-list b{font-size:17px;color:#e4c789;font-weight:500}.rules-list p{font-size:16px;line-height:1.6;margin-top:5px}.rules-dialog .primary,.rules-dialog .eyebrow,.rules-dialog h2{flex:none}.rules-dialog .rules-scroll-hint{flex:none;font-size:14px;line-height:1.5;color:#d7bc80;padding-top:8px}.map-dialog{width:830px}.map-dialog h2{font-size:25px;margin:10px 0 15px}#fullMap{display:block;width:100%;height:auto;border:1px solid #b79b6150}.map-dialog #mapInfo{font-size:14px;color:#d7c291;margin-top:13px}.map-dialog .map-legend{font-size:12px;color:#a7bca1;margin-top:6px}.map-dialog .primary{margin-top:16px}noscript{position:absolute;top:0;background:#111;padding:20px;z-index:10}
@media(max-width:1100px){.desktop-hint{display:none}.topbar{gap:15px;padding:9px 15px}.vitals{grid-template-columns:60px 120px;min-width:190px}.player-id{font-size:14px}.location{max-width:250px;min-width:120px}.location>b{font-size:14px}.menu button{padding:8px 9px}.intro-mark{right:5vw}.intro-mark>span{font-size:34px}}
@media(pointer:coarse){#arena{--dock:184px}.bottom-dock{padding:26px 12px 106px}.quickbar{grid-template-columns:repeat(6,55px);gap:4px}.slot{height:51px;padding:3px}.slot-icon{width:22px;height:22px}.slot b{font-size:10px}.slot kbd{display:none}.slot .quantity{font-size:12px;right:3px;top:3px}.desktop-hint{display:none}.stick{display:block;position:absolute;width:88px;height:88px;bottom:calc(14px + env(safe-area-inset-bottom));touch-action:none}.move-stick{left:20px}.aim-stick{right:20px}.stick-rim{position:absolute;inset:0;border-radius:50%;border:1px solid #b9bc8470;background:#26352b;box-shadow:inset 0 0 18px #09140f70}.aim-stick .stick-rim{border-color:#c9ab6c99}.stick-knob{position:absolute;width:34px;height:34px;border:1px solid #ded1a07a;background:#a9b68c40;border-radius:50%;left:calc(50% - 17px);top:calc(50% - 17px);pointer-events:none}.stick small{position:absolute;bottom:4px;left:0;right:0;font-size:10px;text-align:center;color:#a6b594;pointer-events:none}.touch-actions{display:grid;position:absolute;bottom:calc(20px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);grid-template-columns:47px 47px;gap:5px}.touch-actions button{height:34px;font-size:12px;border:1px solid #bba56b45;background:#1d2c22;color:#c8d0b9;touch-action:none}.touch-actions button.pressed{background:#4b6037;border-color:#b9d392}.intro-mark{display:none}}
@media(max-width:650px){#arena{--top:88px;--dock:184px}.topbar{display:grid;grid-template-columns:112px 1fr 56px;grid-template-rows:36px 30px;gap:4px 10px;padding:8px 10px}.vitals{grid-column:1;grid-row:1/3;display:block;min-width:0}.player-id{display:none}.vital-track{min-width:0;font-size:10px;margin-bottom:8px}.shield-value{left:11px;top:70px;font-size:9px}.location{min-width:0;grid-column:2;grid-row:1;gap:3px}.location>b{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.location>span{font-size:9px}.location #stealthText{position:static;font-size:9px;margin-left:0}.match{grid-column:3;grid-row:1;min-width:0;font-size:9px;gap:3px}.match b{font-size:20px;margin-left:3px}.match small{font-size:8px;white-space:nowrap}.menu{grid-column:2/4;grid-row:2;gap:5px;justify-content:flex-end;align-self:end}.menu button{font-size:10px;padding:4px 7px;min-height:27px;min-width:34px}.bottom-dock{padding:27px 10px 105px}.notice{font-size:10px;left:9px;right:9px;top:5px;height:16px}.quickbar{width:100%;max-width:370px;grid-template-columns:repeat(6,minmax(0,1fr));gap:4px}.slot{height:52px;padding:3px}.slot-icon{width:22px;height:22px}.slot b{font-size:10px}.slot kbd{display:none}.slot .quantity{font-size:12px;right:3px;top:3px}.slot[data-delta]:after{top:-12px;font-size:11px}.stick{display:block;position:absolute;width:86px;height:86px;bottom:calc(14px + env(safe-area-inset-bottom));touch-action:none}.move-stick{left:15px}.aim-stick{right:15px}.stick-rim{position:absolute;inset:0;border-radius:50%;border:1px solid #b9bc8470;background:#26352b;box-shadow:inset 0 0 18px #09140f70}.aim-stick .stick-rim{border-color:#c9ab6c99}.stick-knob{position:absolute;width:34px;height:34px;border:1px solid #ded1a07a;background:#a9b68c40;border-radius:50%;left:calc(50% - 17px);top:calc(50% - 17px);pointer-events:none}.stick small{position:absolute;bottom:4px;left:0;right:0;font-size:10px;text-align:center;color:#a6b594;pointer-events:none}.touch-actions{display:grid;position:absolute;bottom:calc(19px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);grid-template-columns:47px 47px;gap:5px}.touch-actions button{height:35px;font-size:12px;border:1px solid #bba56b45;background:#1d2c22;color:#c8d0b9;touch-action:none}.touch-actions button.pressed{background:#4b6037;border-color:#b9d392}.desktop-hint,.intro-mark{display:none}.overlay{padding:20px 24px;background:#0a1811e9}.intro-content{width:100%;max-height:calc(100svh - 40px)}.eyebrow{font-size:10px;letter-spacing:.12em;margin-bottom:12px}h1{font-size:43px}h2{font-size:28px;margin:6px 0 16px}.intro-line{font-size:16px;letter-spacing:0}.campaign-route{gap:11px;margin:18px 0;padding:14px 0}.campaign-route span{font-size:14px;white-space:nowrap}.campaign-route b{font-size:22px}.intro-story{font-size:16px;line-height:1.75}.intro-rules{font-size:16px;line-height:1.65;margin:16px 0 20px}.intro-rules p{margin-bottom:8px}.primary{font-size:17px;min-height:51px}.edition{font-size:10px;margin-top:12px}.dialog{padding:23px 20px;max-height:calc(100svh - 32px)}.centered{padding:16px}.dialog h2{font-size:25px;margin:15px 0}.dialog p{font-size:16px;line-height:1.7}.dialog .eyebrow{font-size:10px}.dialog .primary{margin-top:18px}.stage-tactic{font-size:14px;margin:16px 0;padding:8px 11px}.carry-inventory{font-size:14px}.result-stats{gap:21px;margin:18px 0}.result-stats strong{font-size:25px}.reward-text{font-size:14px}.rules-dialog h2{font-size:23px}.rules-list{gap:13px}.rules-list p{font-size:16px}.rules-dialog .primary{margin-top:13px}.map-dialog h2{font-size:22px}.map-dialog #mapInfo{font-size:13px}.map-dialog .map-legend{font-size:11px}}
@media(max-height:650px) and (max-width:650px){h1{font-size:35px}h2{font-size:24px;margin-bottom:11px}.intro-content .eyebrow{margin-bottom:8px}.campaign-route{margin:12px 0;padding:10px 0}.intro-rules{margin:11px 0 15px;line-height:1.5}.intro-rules p{margin-bottom:5px}.intro-story{line-height:1.6}.edition{margin-top:8px}}
@media(max-height:620px) and (min-width:651px){#arena{--top:64px;--dock:102px}.bottom-dock{padding-top:25px;padding-bottom:8px}.slot{height:63px}.overlay{padding:20px 5vw}.intro-content{max-height:calc(100svh - 40px)}h1{font-size:45px}h2{font-size:26px;margin:4px 0 12px}.eyebrow{margin-bottom:9px}.campaign-route{margin:13px 0;padding:10px 0}.intro-rules{margin:12px 0 17px;line-height:1.6}.intro-story{line-height:1.65}.primary{min-height:48px}.edition{margin-top:9px}.dialog{padding:22px}.dialog h2{margin:12px 0}.dialog .primary{margin-top:16px}}
@media(pointer:coarse) and (min-width:651px) and (max-height:620px){#arena{--dock:116px}.bottom-dock{padding:28px 170px 12px}.quickbar{grid-template-columns:repeat(6,53px)}.slot{height:60px}.stick{width:78px;height:78px;bottom:14px}.move-stick{left:18px}.aim-stick{right:18px}.touch-actions{grid-template-columns:43px;bottom:13px;left:auto;right:106px;transform:none;gap:3px}.touch-actions button{height:23px;font-size:10px}.notice{left:170px;right:170px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* Music controls live in a paused dialog, outside the combat view. */
#audioOverlay{z-index:12}.audio-dialog{width:520px}.audio-link{display:block;border:0;background:transparent;padding:10px 0;color:#bac8b4;text-decoration:underline;text-underline-offset:4px;font-size:12px;min-height:36px}.audio-controls{display:grid;grid-template-columns:1fr;gap:14px;margin:22px 0}.audio-controls button{min-height:44px;border:1px solid #b6a36b70;background:#26372a;padding:10px;font-size:15px}.audio-controls button[aria-pressed="false"]{color:#97a38d;background:#152019}.audio-controls label{display:flex;justify-content:space-between;font-size:14px}.audio-controls output{color:#e6c789}.audio-controls input{width:100%;height:30px;accent-color:#c4ab72;touch-action:pan-x}.audio-dialog #nowPlaying{font-size:14px;color:#dfc797}.audio-dialog .music-credit{font-size:13px;line-height:1.7;color:#9dab95}

.ending-ui{position:absolute;inset:0;z-index:9;pointer-events:none;color:#e7d6b2}.ending-ui>button{position:absolute;right:22px;top:15px;min-height:42px;border:1px solid #aa986a77;background:#142219cc;padding:8px 14px;pointer-events:auto;font-size:13px}.ending-copy{position:absolute;bottom:26px;left:20px;right:20px;text-align:center}.ending-copy small{font-size:10px;letter-spacing:.14em;color:#b5a77f}.ending-copy h2{font-size:26px;margin:4px 0 6px;letter-spacing:.12em}.ending-copy p{font-size:13px;line-height:1.6;color:#bdc9b7}.ending-track{position:absolute;bottom:0;height:3px;left:0;right:0;background:#142018}.ending-track i{display:block;height:100%;background:#d5bc7e;width:0}@media(max-width:650px){.ending-copy{bottom:40px}.ending-copy h2{font-size:23px}.ending-copy p{max-width:310px;margin:auto;font-size:13px}.ending-ui>button{right:12px;top:20px}}

.health-hit{color:#ff9386!important;text-shadow:0 0 12px #f64e35}.health-hit b{color:#ffc5b8}
.shield-value{font-size:12px;font-weight:600}.facility-gain{animation:facility-gain 1.4s ease-out;color:#d4f8bc!important}.shield-value.facility-gain{color:#c6f4ff!important}.notice.active{font-weight:500;color:#f0dfae}
@keyframes facility-gain{0%,30%{background:#91c78355;box-shadow:0 0 0 5px #9de5b22b;text-shadow:0 0 12px #b3e9af}100%{background:transparent;box-shadow:none;text-shadow:none}}
@media(max-width:650px){.shield-value{font-size:11px}}

@media(max-width:650px){.slot{padding-top:13px;padding-bottom:4px;gap:2px}.slot-icon{white-space:nowrap;font-size:12px;line-height:15px!important;width:auto!important;height:15px!important;flex-shrink:0}}

/* v8 keeps the trackpad control legend visible and avoids weapon mode confusion. */
.match{min-width:110px}.match>span{display:block}.slot kbd{font-size:10px;min-width:22px;width:auto;padding:1px 3px}.desktop-hint{max-width:310px;line-height:1.75}.slot:nth-child(-n+2){border-color:#7f9477}.slot:nth-child(-n+2).selected{box-shadow:none}.notice{font-size:13px}

/* The practice guide occupies the existing dock, leaving the playfield unobscured. */
#arena.is-practice{--dock:170px}
#arena.is-practice .desktop-hint{display:none}
#arena.is-practice .bottom-dock{padding-top:82px}
.practice-bar{position:absolute;top:25px;width:min(760px,96%);height:48px;display:flex;align-items:center;justify-content:space-between;gap:18px;text-align:left}
.practice-copy strong{font-size:15px;font-weight:500;color:#f0ddb0;display:block;margin-bottom:9px}
.practice-steps{display:flex;gap:8px;flex-wrap:wrap}.practice-steps span{font-size:12px;padding:3px 7px;border:1px solid #8c957452;color:#aab69d}.practice-steps span.done{color:#d6f0bf;border-color:#9bb480;background:#344530}.practice-steps span.done:after{content:' 已練習';font-size:10px}
#readyBattleButton{min-height:44px;padding:10px 18px;background:#bc9c5a;color:#122017;border:1px solid #dfc181;font-size:16px;white-space:nowrap}
@media(max-width:650px),(pointer:coarse){.practice-bar{height:52px;width:100%;gap:7px}.practice-copy strong{font-size:11px;margin-bottom:5px}.practice-steps{gap:3px}.practice-steps span{font-size:9px;padding:2px 3px}.practice-steps span.done:after{content:''}.practice-steps span.done{border-bottom-width:3px}#readyBattleButton{font-size:12px;min-height:44px;padding:7px}.match{min-width:0}.match small{max-width:98px;white-space:normal;text-align:right;font-size:8px}}

.sound-tests{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}.audio-controls .sound-tests button{font-size:12px;padding:8px 4px;min-height:42px}.audio-controls #effectsStatus{font-size:12px;color:#b8cbb3}.audio-controls{gap:9px;margin:14px 0}
@media(max-width:650px){#arena.is-practice{--dock:244px}.practice-bar{width:calc(100% - 20px);height:48px}}
