/* PHOSPHOR: a physical deck beneath a luminous network display. */
:root{--cyan:#8effa6;--text:#c1f5ce;--dim:#80a88a}
body{background:#040807;text-shadow:none}
body:after{opacity:.22}
body:before{box-shadow:inset 0 0 160px #0005}
.shell{background:radial-gradient(ellipse at 28% 42%,#1b583521,transparent 65%)}
header{border-bottom:0;position:relative}
header:after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,#8effa655,#24403066 45%,transparent)}
.brand{font-weight:800;letter-spacing:-1px;text-shadow:0 0 18px #8effa62b}
.brandmark{background:var(--cyan);box-shadow:3px 3px 0 #294a34,0 0 22px #8effa619}
#leveltitle{font-weight:600;letter-spacing:.4px;color:#d0ffdb;text-shadow:0 0 25px #8effa61a}
.metriclabel{color:#87a68f}.metricvalue b,.metricvalue strong{color:#d0ffda;text-shadow:0 0 9px #8effa622}
.hud #aps,.hud #hp{color:#91ffac;text-shadow:0 0 7px #8effa655}
.hud .meter{height:5px;background:#13281d;box-shadow:0 1px 0 #32513c55}
.hud .meter>div{box-shadow:0 0 9px #8effa670}
.mission h2{display:flex;align-items:center;gap:8px;color:#b5d5bd}
.mission h2:before{content:'';width:4px;height:4px;background:#a9c6a4;box-shadow:0 0 8px #a9c6a444}
.map{background-image:radial-gradient(ellipse at 50% 50%,#285a3838,transparent 59%),linear-gradient(#589a6b0a 1px,transparent 1px),linear-gradient(90deg,#589a6b0a 1px,transparent 1px);background-size:100% 100%,26px 26px,26px 26px;border:0;box-shadow:inset 0 0 65px #020805a0}
.map:before{display:block;content:'';position:absolute;left:50%;top:50%;width:160px;height:160px;transform:translate(-50%,-50%);border:1px solid #8effa60b;outline:1px solid #8effa606;outline-offset:22px;pointer-events:none;z-index:0}
.localcaption{color:#779980;letter-spacing:1px}
.minimapframe{background:linear-gradient(145deg,#102017,#050c08);border-color:#46634c;box-shadow:0 4px 12px #0008,inset 0 0 0 3px #070c09,inset 0 0 0 4px #253a2b;padding:9px}
#minimap .mini-current{fill:#d7ffe3;stroke:#d7ffe3}
#wires .reachable{stroke:#9bffb2;stroke-width:1.5;filter:drop-shadow(0 0 3px #8effa64d)}
.map .node{background:linear-gradient(140deg,#173421,#0a1910 75%);border:1px solid #567b60;box-shadow:0 5px 0 #020805,0 6px 0 #23422e,inset 0 1px 0 #a2ffb61c}
.map .node.available{border-color:#8ed99e;box-shadow:0 5px 0 #020805,0 6px 0 #3e714c,inset 0 1px 0 #a2ffb633,0 0 25px #8effa60b}
.map .node.available:hover{background:linear-gradient(140deg,#285735,#102b19);border-color:#d0ffda}
.map .node .num{font-weight:500;letter-spacing:1px;color:#d0ffdb}
.map .node .symbol{color:#90b59a}
.map .node.current{background:linear-gradient(135deg,#c7ffd6,#76ec98);border-color:#e0ffe9;box-shadow:0 5px 0 #2f7144,0 6px 0 #8ad39c,0 0 28px #8effa63b,inset 0 1px 0 #f1fff6}
.map .node.current .num{color:#092414;text-shadow:none}.map .node.current .symbol{color:#27553a}
.map .node.current:before{border-color:#2e6544;inset:4px}
.map .node.current:after{border-color:#9bffb2;inset:-10px}
.map .node.vault:not(.current){border-color:#b4cf9b;border-style:double;border-width:3px;background:linear-gradient(140deg,#273d25,#0f2012)}
.map .node.exit:not(.current){border-style:dashed;border-color:#b2e5d0}
.map .node .nodelabel{color:#a8c6b0;background:#07110b;font-size:8px;padding:3px 5px}
.enemybadge{background:#ffc681;border-color:#0b110a;box-shadow:0 0 14px #ffc6813a;color:#2b1a09}
.console{padding:17px 15px 14px;background:radial-gradient(circle at 8px 8px,#718478 1px,#17251e 2px,transparent 3px),radial-gradient(circle at calc(100% - 8px) 8px,#718478 1px,#17251e 2px,transparent 3px),radial-gradient(circle at 8px calc(100% - 8px),#526558 1px,#17251e 2px,transparent 3px),radial-gradient(circle at calc(100% - 8px) calc(100% - 8px),#526558 1px,#17251e 2px,transparent 3px),repeating-linear-gradient(0deg,#ffffff01 0,#ffffff01 1px,transparent 1px,transparent 3px),linear-gradient(140deg,#202c25,#101913 60%);border:1px solid #435448;box-shadow:inset 0 0 0 3px #0c150f,inset 0 0 0 4px #354539,0 6px 0 #020604,0 7px 0 #2a3d30,0 14px 25px #0005}
.deckplate{display:flex;align-items:center;justify-content:space-between;padding:0 2px 14px;font:8px/1 var(--mono);letter-spacing:1px;color:#829486}.deckplate b{font-weight:500;color:#b5c6b6;margin-left:6px}.deckled{color:#a3ffbb;font-size:8px;text-shadow:0 0 8px #8effa6}
.actionheading{font-size:9px;color:#a4bca9;margin-bottom:11px;min-height:14px}.actionheading span{font-size:7px;color:#789180}
.console .actions button{background:linear-gradient(150deg,#253d2c,#12281b);border-color:#57735e;box-shadow:inset 0 1px 0 #c9ffda24,0 3px 0 #040b07,0 4px 0 #3b5141;position:relative;transition:background .12s,box-shadow .12s,transform .12s;min-height:66px}
.console .actions button:not(:disabled):hover{background:linear-gradient(150deg,#35533d,#1c3524);border-color:#a9d4b4}
.console .actions button:not(:disabled):active{transform:translateY(2px);box-shadow:inset 0 1px 5px #0008,0 1px 0 #3b5141}
.console .actions button:disabled{background:linear-gradient(150deg,#17251b,#101a13);border-color:#2b3d30;box-shadow:inset 0 1px 0 #a9d4b409,0 3px 0 #060c08,0 4px 0 #263a2d}
.console .actions{gap:11px}.console .actiontext{color:#c4efce}.console .actiontext small{color:#89a992}.console .actionicon{color:#b6ffca;text-shadow:0 0 9px #8effa625}.console kbd{color:#9bbb9f}
#start{margin-top:17px;border-color:#87c99a;background:linear-gradient(110deg,#193c27,#10281b);box-shadow:inset 0 1px 0 #b6ffca26,0 3px 0 #050c08;color:#c9ffd8}
#start:before{background:linear-gradient(90deg,#326d44,#5cba77);box-shadow:0 0 18px #8effa655}
#start.charging{border-color:#d0ffda;box-shadow:0 0 24px #8effa625}
.controls{font-size:8px;color:#7d9585;padding-top:2px}
.enemyinfo{margin-top:24px}.feed #log{color:#a2c9ac}.panelhead{color:#779780}
.missionselect .levels button{position:relative;background:linear-gradient(115deg,#162b1c,#07110b 75%);border-color:#355840;box-shadow:inset 3px 0 #284d34,0 4px 0 #010503}
@media(hover:hover) and (pointer:fine){.missionselect .levels button:hover:not(:disabled){border-color:#83bd94;background:linear-gradient(115deg,#23432b,#0b1c11 75%)}}
.missionselect .levels button.selected{box-shadow:inset 3px 0 #a1ffb8,0 4px 0 #010503;border-color:#6da67c}
.missionselect .levelnumber{font-weight:700;color:#517d5b;font-size:38px}.missioncardname{font-weight:600;letter-spacing:1px;text-shadow:0 0 20px #8effa611}
@media(max-width:700px){
.map{background-size:100% 100%,22px 22px,22px 22px}.map:before{width:125px;height:125px;outline-offset:16px}.map .node.current:after{inset:-8px}
.console{padding:14px 10px 13px;margin-top:13px}.deckplate{font-size:7px;padding:1px 6px 14px;letter-spacing:.9px}.deckled{font-size:7px}.actionheading{display:none}
.mobilecontrols{gap:12px}.dpad{gap:2px;max-width:146px;grid-template-rows:repeat(3,44px)}
.dpad button{background:linear-gradient(145deg,#2b3e31,#17271e);border-color:#5a7062;box-shadow:inset 0 1px 0 #b9d8c338,0 3px 0 #040b07,0 4px 0 #425649;color:#c6f5d2;text-shadow:0 0 7px #8effa622;font-size:23px}
.dpad button:disabled{background:linear-gradient(145deg,#19271f,#111b15);border-color:#304437;color:#4a6953;box-shadow:inset 0 1px 0 #b9d8c30a,0 3px 0 #040b07,0 4px 0 #263a2d}
.dpad button:not(:disabled):active{transform:translateY(2px);background:#326343;color:#e1ffea;box-shadow:inset 0 2px 6px #0006,0 1px 0 #425649}
.dpad-center{background:radial-gradient(#263e2d,#15231a);color:#8eac96;border:1px solid #2b4132;box-shadow:inset 0 1px 5px #0005;font-size:15px}
.console .mobilecontrols .actions{gap:9px 6px}.console .mobilecontrols .actions button{min-height:63px;padding:7px 2px;gap:5px}.console .mobilecontrols .actiontext{font-size:8px;line-height:1.3}.console .mobilecontrols .actionicon{font-size:20px}
.missionselect .levelnumber{font-size:25px}.missioncardname{font-size:17px}.enemyinfo{margin-top:20px}.controls{display:none}
}
@media(max-width:360px){.console{margin-left:-5px;margin-right:-5px;padding-left:8px;padding-right:8px}.mobilecontrols{gap:9px;grid-template-columns:136px minmax(0,1fr)}.dpad{max-width:136px}.console .mobilecontrols .actiontext{font-size:7px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
/* Typography and original SVG icon system. Fonts are bundled for offline play. */
@font-face{font-family:Rajdhani;src:url('./fonts/rajdhani-semibold.ttf') format('truetype');font-style:normal;font-weight:600;font-display:swap}
@font-face{font-family:'IBM Plex Mono';src:url('./fonts/ibm-plex-mono.ttf') format('truetype');font-style:normal;font-weight:400;font-display:swap}
:root{--mono:'IBM Plex Mono',monospace;--ui:Rajdhani,'Arial Narrow',sans-serif}
body{font-family:var(--ui);font-weight:600;font-size:16px;letter-spacing:.2px}button{font-family:var(--ui);font-weight:600}
.brand{font-family:var(--ui);font-size:29px;letter-spacing:.2px;font-weight:600}.brandmark{font:18px var(--mono)}.edition{font:9px var(--mono)}
#leveltitle{font-family:var(--ui);font-weight:600;font-size:34px;letter-spacing:1.3px}.selecthead h1{font-family:var(--ui);font-size:42px;letter-spacing:1px}.missioncardname{font-family:var(--ui);font-size:29px;font-weight:600}.missionselect .levelnumber{font-family:var(--mono);font-size:26px;font-weight:400}.missionselect .difficulty{font:600 14px var(--ui)}.missioncardfacts{font:10px/1.8 var(--mono)}
.metriclabel{font:600 12px/1.1 var(--ui);letter-spacing:1px;color:#92b39c}.metricvalue b,.metricvalue strong{font-family:var(--mono);font-weight:400}.hud #aps{font-family:var(--mono)}
.missiontitle #missions{font:600 13px var(--ui)}.mission h2{font:600 15px var(--ui);letter-spacing:.5px}.localcaption{display:none}.mapfoot{font:9px var(--mono)}#seed{display:none}
.icon{display:block;width:24px;height:24px;flex-shrink:0}
.map svg.icon{position:static;inset:auto;display:block;width:100%;height:100%;overflow:visible}
.map .node .symbol{width:15px;height:15px;top:6px;left:6px;line-height:1}
.map .node .num{font:400 23px/28px var(--mono);letter-spacing:-1px;margin-top:12px}
.map .node .nodelabel{font:600 12px var(--ui);letter-spacing:1px;background:transparent;padding:0;top:calc(100% + 13px)}
.map .node.node:not(.current) .symbol{display:none}
.map .node.node:not(.current) .num{margin-top:0}
.enemybadge{display:flex;gap:1px;height:25px;min-width:25px;top:-13px;right:-13px;padding:2px}.enemybadge .icon{width:17px!important;height:17px!important}
.actionheading,.console .controls,.enemyinfo{display:none}
.console .actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.console .actions button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;min-height:94px;padding:13px 6px;position:relative}
.console .actionicon{display:block;width:30px;height:30px}.console .actionicon .icon{width:30px;height:30px}
.console .actiontext{font:600 17px/1 var(--ui);letter-spacing:.6px;text-transform:uppercase;text-align:center}
.console .actiontext small{display:none}.console kbd{position:absolute;top:7px;right:7px;font:8px var(--mono);opacity:.65}.console kbd:before,.console kbd:after{content:''}
.deckplate{padding-bottom:16px;font:8px var(--mono);letter-spacing:1px}.deckplate b{font-weight:400}
#start{font:600 18px/1 var(--ui);letter-spacing:1px;padding:16px 12px}.startcopy small{font:8px var(--mono);letter-spacing:0;margin-top:2px}
.feed{margin-top:20px}.panelhead{display:none}body[data-warning=true] .panelhead{display:flex;justify-content:flex-end}.panelhead>span:first-child{display:none}#stateLabel{font:9px var(--mono);color:var(--pink)}
#log{font:10px/1.6 var(--mono);color:#7ea98a;min-height:20px;margin-top:7px}.abandon{font:600 12px var(--ui);letter-spacing:.5px;min-height:34px;margin-top:10px}
body[data-screen=game] footer{display:none}
#help{display:grid;place-items:center;border:0;width:32px;height:32px;min-height:32px;color:#92b39c}#help .icon{width:21px;height:21px}.levelclear .icon{width:22px;height:22px}
.dpad button{display:grid;place-items:center}.dpad button .icon{width:23px;height:23px}.dpad-center .icon{width:18px;height:18px}
dialog h2{font:600 29px/1.1 var(--ui)}dialog p,dialog li{font:600 16px/1.5 var(--ui)}dialog .eyebrow{font:9px var(--mono)}dialog .close{font:600 14px var(--ui)}.selectionnote{font:600 14px var(--ui)}
@media(max-width:700px){
.brand{font-size:24px;letter-spacing:.3px}.brandmark{font-size:14px}.budget{font:11px var(--mono)}#lives{font-family:var(--mono)}
.missiontitle #leveltitle{font:600 27px/1 var(--ui);letter-spacing:.8px}.missiontitle #missions{font:600 12px var(--ui)}.missiontitle{margin-bottom:19px}
.metriclabel{font:600 11px var(--ui);letter-spacing:1px;margin-bottom:6px}.hud .metricvalue b{font-family:var(--mono);font-size:20px}.hud #trace{font-family:var(--mono);font-size:16px}.hud #hp{font-size:17px}
.mission h2{font:600 13px var(--ui);letter-spacing:.5px}.mission{margin-bottom:8px}.map .node .num{font:400 20px/24px var(--mono);letter-spacing:-.5px;margin-top:10px}.map .node .symbol{width:12px;height:12px;top:5px;left:5px}.map .node .nodelabel{font:600 10px var(--ui);top:calc(100% + 12px)}
.console .mobilecontrols .actions button{min-height:65px;padding:6px 2px;gap:6px}.console .mobilecontrols .actionicon,.console .mobilecontrols .actionicon .icon{width:25px;height:25px}.console .mobilecontrols .actiontext{font:600 12px/1 var(--ui);letter-spacing:.4px}.console .mobilecontrols .actions{gap:8px 6px}
.deckplate{font:7px var(--mono);padding:1px 5px 13px}.deckplate b{margin-left:4px}.feed{margin-top:17px}#log{font-size:9px}.abandon{font-size:11px;margin-top:6px}
#start{font-size:16px;padding:13px 12px}.selecthead h1{font-size:34px}.missioncardname{font-size:24px}.missionselect .difficulty{font-size:12px}.missioncardfacts{font-size:8px}.missionselect .levelnumber{font-size:20px}.selectionnote{font-size:12px}
}
@media(max-width:360px){.console .mobilecontrols .actiontext{font-size:11px}.missiontitle #leveltitle{font-size:25px}}
/* Short effects remain visible on touch; tooltips are supplementary only. */
.console .actiontext small{display:block;font:400 9px/1.5 var(--mono);letter-spacing:0;text-transform:none;color:#93b39d;margin-top:7px;max-width:115px;text-align:center}
.console .actions button{min-height:119px;gap:8px;padding:13px 5px}
.console .actions button:disabled .actiontext small{color:#75917e}
@media(max-width:700px){.console .mobilecontrols .actions button{min-height:100px;gap:6px;padding:9px 3px}.console .mobilecontrols .actiontext{width:100%;font-size:12px}.console .actiontext small{font:600 11px/1.25 var(--ui);color:#9cbcaa;margin-top:5px;max-width:none;letter-spacing:0}.dpad{align-self:center}}
/* Integer-sized pixel glyphs preserve the deliberately low-resolution silhouette. */
.console .actionicon,.console .actionicon .icon{width:32px;height:32px}
.enemybadge .icon{width:16px!important;height:16px!important}
.map .node .symbol{width:16px;height:16px}
.dpad button .icon{width:24px;height:24px}
@media(max-width:700px){.console .mobilecontrols .actionicon,.console .mobilecontrols .actionicon .icon{width:32px;height:32px}.map .node .symbol{width:16px;height:16px;top:4px;left:4px}}

/* Effects use intentional semantic lines, never automatic word wrapping. */
.console .actiontext small{max-width:none;line-height:1.5}
.console .effectline{display:block;white-space:nowrap}
.console .effectline + .effectline{color:#829d8a}
@media(max-width:700px){.console .actiontext small{font-size:11px;line-height:1.35}}
/* Pulse intelligence stays inside the overview; the local map never expands. */
.minimapframe.scanning{border-color:#82d99a;box-shadow:inset 0 0 16px #81ff9e14,0 0 14px #81ff9e12}
#scanstatus{position:absolute;bottom:calc(100% + 5px);right:0;font:8px var(--mono);color:#b1f5c2;white-space:nowrap}
.map #minimap .mini-glyph{position:static;stroke:none;fill:currentColor;overflow:visible}
.map #minimap .mini-type{color:#b7f9c6}
.map #minimap .mini-threat{color:#ffc681}
.map #minimap .mini-location{fill:none;stroke:#dcffe6;stroke-width:1.2}
@media(max-width:700px){.minimapframe.scanning{width:112px;height:112px}}
@media(min-width:701px){.minimapframe.scanning{width:150px;height:150px}}
