/* INK / OPS UI tokens. Gameplay rendering remains owned by render.js. */
:root{--ink:#edf1e8;--red:#d6ff5f;--paper:#111714;--surface:#19221d;--line:#455347;--muted:#9aa79b;--accent:#d6ff5f}
html,body{font-family:Inter,'Helvetica Neue','PingFang SC','Microsoft YaHei',sans-serif}
button,input{font-family:inherit}button{transition:background .16s,color .16s,border-color .16s}button:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px}
.screen{background:rgba(8,14,10,.88);cursor:default;padding:28px;box-sizing:border-box;backdrop-filter:blur(12px)}
.panel{width:min(1180px,100%);max-width:1180px;max-height:calc(100dvh - 56px);overflow:auto;box-sizing:border-box;text-align:left;padding:40px 48px;background:#111714;border:1px solid var(--line);border-radius:0;transform:none;box-shadow:none;color:var(--ink);scrollbar-color:var(--line) var(--paper)}
.panel h1{font-size:clamp(36px,5vw,64px);letter-spacing:-2px;font-weight:750;line-height:1.1;margin:18px 0}.panel h2{font-size:16px;color:var(--muted);margin:0 0 28px;line-height:1.6}.menu-header{display:flex;gap:18px;align-items:center;padding-bottom:20px;border-bottom:1px solid var(--line);font:13px/1.4 ui-monospace,monospace;letter-spacing:2px}.menu-header span:last-child{margin-left:auto;color:var(--muted);letter-spacing:1px}.menu-header em{font-style:normal;color:var(--accent)}
.menu-layout{display:grid;grid-template-columns:1.2fr 1fr;gap:70px;padding:36px 0}.menu-primary h1{font-size:clamp(58px,7vw,104px);letter-spacing:-6px;white-space:nowrap;margin:0;line-height:1}.menu-primary h1 span{color:var(--accent);padding:0 8px}.menu-primary h2{font-size:32px;color:var(--ink);letter-spacing:5px;margin:12px 0 32px;font-weight:650}.mainbtns,.mainbtns:has(.start){display:flex;flex-direction:column;align-items:stretch;gap:10px;margin:0}.mainbtns button,.mainbtns button.start,.mainbtns button:nth-child(2),.mainbtns button.start+button{position:relative;text-align:left;min-width:0;font-size:23px;line-height:1.3;padding:15px 22px;transform:none;border-radius:0;border:1px solid var(--line);background:transparent;color:var(--ink);box-shadow:none;font-weight:650}.mainbtns button.start{background:var(--accent);border-color:var(--accent);color:#111714}.mainbtns button i,.mainbtns button.start i{font-size:12px;margin-top:5px;letter-spacing:1px;font-weight:400;opacity:.72}.mainbtns button.secondary{font-size:17px;padding:13px 22px}.mainbtns button:hover,.mainbtns button.start:hover{transform:none;filter:none;background:#263529;border-color:var(--accent)}.mainbtns button.start:hover{background:#e2ff92}
.mission-panel{align-self:stretch;border-left:1px solid var(--line);padding:6px 0 0 32px}.mission-panel h3{font-size:18px;margin:0 0 20px}.mission-panel h3 span{float:right;color:var(--muted);font:12px ui-monospace,monospace}.mapsel{display:flex;flex-direction:column;align-items:stretch;gap:12px;margin:0}.mapsel>span{display:none}.mapsel .mapbtn{font-family:inherit;display:block;text-align:left;border:1px solid var(--line);border-radius:0;padding:22px;font-size:21px;transform:none;background:transparent;color:var(--ink);opacity:1}.mapsel .mapbtn.on{border-color:var(--accent);background:#222e22;color:var(--accent);box-shadow:inset 3px 0 var(--accent)}.mapsel .mapbtn i{font-size:13px;line-height:1.6;margin-top:8px;display:block;color:var(--muted);font-style:normal}.mission-note{font-size:14px;line-height:1.9;color:var(--muted);margin-top:28px;padding-top:20px;border-top:1px solid var(--line)}.menu-footer{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding-top:18px;color:var(--muted);font:11px/1.6 ui-monospace,monospace;letter-spacing:1px}.heading-en{font:16px ui-monospace,monospace;letter-spacing:3px;color:var(--muted);margin-left:20px}.subpage .settings{margin:30px 0 40px}
.settings{align-items:stretch;gap:0;font-size:16px;border-top:1px solid var(--line);padding:0;margin:24px 0}.settings label{min-height:66px;display:flex;gap:18px;border-bottom:1px solid var(--line);padding:0 8px}.settings input[type=range]{flex:1;width:180px;margin-left:auto;accent-color:var(--accent);max-width:360px}.settings input[type=checkbox]{accent-color:var(--accent);width:20px;height:20px}.settings b{font:15px ui-monospace,monospace;min-width:60px;text-align:right}.settings .k{font-size:12px;color:var(--muted)}.panel .cols{gap:40px;font-size:14px;line-height:2.1;margin:24px 0}.cols>div{flex:1}.colhead{font-size:18px;border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:10px}.panel .cols b{color:var(--accent);font-weight:500}.panel .go{font-size:16px;animation:none;border-top:1px solid var(--line);padding-top:20px;color:var(--accent)}
.online,.lobby{align-items:stretch;gap:16px}.online .row,.lobby .row{justify-content:flex-start}.online button,.lobby button,.bigbtn,.checkpoints button{font:500 15px/1.5 inherit;border:1px solid var(--line);border-radius:0;transform:none;padding:11px 22px;background:var(--accent);color:#111714;font-size:15px}.online button.big{font-size:18px;transform:none;padding:14px 26px}.online button.alt,.lobby button.alt{color:var(--ink);background:transparent}.online input[type=text],.lobby input[type=text],.namebox{background:var(--surface);border:1px solid var(--line);border-radius:0;color:var(--ink);font-size:18px;padding:10px}.online .hint{font-size:13px;line-height:1.7;text-align:left}.online .sub,.online .radio,.online .status{font-size:14px}.online .code,.code{font:28px ui-monospace,monospace;border:1px solid var(--line);border-radius:0;padding:12px 18px;color:var(--accent)}.online .plist,.plist{font-size:16px;min-width:0}.plist div,.scoreboard div,.board div{border-bottom:1px solid var(--line);padding:10px}.lobbylist{align-items:stretch;max-width:none;border-top:1px solid var(--line);padding-top:20px}.lobbyrow{font-size:14px}.beststat{font-size:14px;color:var(--muted);margin-top:20px}.beststat b{color:var(--accent);margin-left:20px}.checkpoints{justify-content:flex-start;font-size:13px}.checkpoints button{background:transparent;color:var(--ink);font-size:13px}.panel .stats{font-size:22px;line-height:1.8}.board{transform:translateX(-50%);background:#111714;border:1px solid var(--line);border-radius:0;font-size:16px}.board h3{font-size:22px}.scoreboard{font-size:18px;min-width:0}
/* Opaque HUD plates keep contrast independent of the procedural world. */
.hud-tl,.hud-tr,.hud-bl,.hud-br,.crosshair,.grapple-ret,.hitmarker,.dmg-ind,.message,.killfeed,.focus-meter,.bossbar.show,.gstam,.tip{mix-blend-mode:normal}.hud-tl,.hud-tr,.hud-bl,.hud-br{transform:none;background:rgba(17,23,20,.94);border:1px solid #455347;padding:14px 18px;border-radius:0}.hud-tl{left:28px;top:24px;font-size:12px}.score b{font:600 26px ui-monospace,monospace;margin-left:16px}.combo{font-size:14px;min-height:0}.hud-tr{right:28px;top:24px;font-size:16px}.wave b{font:600 26px ui-monospace,monospace;margin-left:10px}.left,.timer,.modifier{font-size:12px;min-height:0;line-height:1.7}.hud-bl{left:28px;bottom:24px}.hud-br{right:28px;bottom:24px}.health{font-size:12px;gap:12px}.health #hpnum{font:18px ui-monospace,monospace}.bar{width:160px;height:5px;border:0;border-radius:0;background:#455347;transform:none}.fill,.fill.red,.fm-fill{background:var(--accent)}.low .fill{background:#ff7267}.low .bar{border:0}.ammo b{font:500 42px ui-monospace,monospace}.ammo span{font:16px ui-monospace,monospace}.tally{display:none}.weapon{font-size:18px}.hint{font-size:11px;line-height:1.6}.slots{font-size:12px;gap:7px}.slot,.slot.active{font-size:12px;transform:none;border:0}.slot.active{color:var(--accent)}.slot .num{font-size:10px;border:1px solid var(--line);border-radius:0}.slot .sammo{font:11px ui-monospace,monospace}.crosshair i{background:var(--accent);border-radius:0}.crosshair{filter:drop-shadow(0 1px 2px #111)}.crosshair.katana i{background:var(--accent)}.msg-main{font-size:56px;transform:none;color:var(--accent);text-shadow:0 2px 8px #111}.msg-sub{font-size:18px;color:var(--ink);text-shadow:0 2px 4px #111}.killfeed{font-size:15px;right:28px}.killfeed div{background:#111714;padding:7px 12px;margin:4px 0}.tip{font-size:15px;color:var(--ink);text-shadow:0 2px 5px #111}.focus-meter{transform:translateY(-50%);left:28px}.fm-label,.fm-ready{font-size:11px;background:#111714;padding:4px}.fm-tube{width:10px;height:120px;border:1px solid #455347;border-radius:0;background:#111714;margin:auto}.bossbar{font-size:18px;background:#111714;padding:12px}.bar.big{height:6px}.nades i{background:var(--accent);border-color:var(--accent)}
@media(max-width:850px){.screen{padding:16px}.panel{padding:24px;max-height:calc(100dvh - 32px)}.menu-layout{gap:28px;grid-template-columns:1.1fr 1fr;padding:28px 0}.menu-primary h1{font-size:60px;letter-spacing:-4px}.menu-primary h2{font-size:25px}.mission-panel{padding-left:22px}.panel .cols{flex-direction:column;gap:24px}.heading-en{display:block;margin:12px 0;font-size:12px}}
@media(max-width:600px){.menu-layout{grid-template-columns:1fr}.menu-primary h1{font-size:64px}.mission-panel{border-left:0;border-top:1px solid var(--line);padding:24px 0 0}.menu-header{font-size:11px}.menu-footer{gap:20px;font-size:9px}.panel h1{font-size:36px}.settings label{flex-wrap:wrap;padding:15px 0;gap:12px}.settings input[type=range]{min-width:120px}.online .row.split{display:none}.hud-tl,.hud-tr,.hud-bl,.hud-br{padding:8px;max-width:42%;box-sizing:border-box}.hud-tl,.hud-bl{left:12px}.hud-tr,.hud-br{right:12px}.health{flex-wrap:wrap}.bar{width:80px}.ammo b{font-size:30px}.slots{display:none}.lobbyrow{grid-template-columns:1fr auto;gap:8px}.online .plist{min-width:0}.online input.namebox{width:140px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
.map-preview{height:190px;background:url('./assets/district.png') center 48%/cover;border:1px solid var(--line)}.map-current{display:flex;flex-direction:column;gap:8px;padding:18px 0}.map-current strong{font-size:22px;font-weight:600}.map-current span{font-size:12px;color:var(--muted)}
@media(max-width:600px){.panel .menu-primary h1{font-size:56px;letter-spacing:-4px}.map-preview{height:140px}}
