@font-face{font-family:'Orbitron';font-style:normal;font-weight:700;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')} @font-face{font-family:'Orbitron';font-style:normal;font-weight:900;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')} @font-face{font-family:'Rajdhani';font-style:normal;font-weight:500;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')} @font-face{font-family:'Rajdhani';font-style:normal;font-weight:600;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')} @font-face{font-family:'Rajdhani';font-style:normal;font-weight:700;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2')} :root{ /* THE ACCENT IS THREE COLOURS, NOT ONE. Every panel border, tab and progress bar in this UI is a light/mid/deep gradient, and all three were written as literal hex in twenty places — so setting --cy for a faction moved a variable that almost nothing read, and the in-game HUD stayed Terran cyan whichever army you fielded. applyFactionTheme() now computes all three from the faction's own colour. */ --cy:#41c8ff; --cyL:#c6f2ff; --cy2:#1a6f99; --cyD:#10465f; --bg:#060a12; --red:#ff5d43; --gold:#ffd257; --green:#5dff9a; /* Capacitor injects --safe-area-inset-* on Android WebView versions where CSS env() reports zero. Keep env() as the browser/iOS fallback. */ /* HUD rail control size. vmin follows the short screen edge, so the same rule serves portrait phones, landscape phones, tablets and desktop: never below 40px touch target, never a lost-in-the-corner 44px on a 1440p monitor. Media queries below only need to move this one knob. */ --hudBtn:clamp(44px,5.8vmin,56px); --hudIntelH:clamp(26px,7vmin,32px); /* Resource row + intel strip + gaps. Side chips (LV / weather) start below this so a taller top plate cannot sit under them when the viewport ratio changes before hudflow measures. */ --hudTopStack:calc(var(--hudBtn) + var(--hudIntelH) + 16px); --hudSideRow:38px; --mmSize:min(84px,22vw,24vmin); --mmBay:calc(var(--mmSize) + 6px); --mmDockPad:max(calc(var(--sab) + 6px),38px); --satRaw:var(--safe-area-inset-top,env(safe-area-inset-top,0px)); /* Android WebView reports env(safe-area-inset-top) as 0px unless the activity opts into cutout mode, so relying on it alone painted the OS status bar — clock, wifi, battery — directly on top of the menu header. A floor keeps the UI clear of it everywhere; on a device that DOES report a real inset (an iPhone notch at 47px) max() leaves that untouched. */ --sat:max(var(--satRaw),26px); --sar:var(--safe-area-inset-right,env(safe-area-inset-right,0px)); --sab:var(--safe-area-inset-bottom,env(safe-area-inset-bottom,0px)); --sal:var(--safe-area-inset-left,env(safe-area-inset-left,0px)); /* metallic frame gradients (used as border-box layer) */ --steelB:linear-gradient(160deg,#aebfd4 0%,#54677d 28%,#182230 55%,#3c4c60 78%,#7e94ac 100%); --goldB:linear-gradient(160deg,#fff0b8 0%,#d8a94e 28%,#6e4d18 58%,#a87e2c 80%,#f4d47c 100%); --redB:linear-gradient(160deg,#ffb4a4 0%,#c05a42 30%,#5c1f12 60%,#e07a5e 100%); --panelG:linear-gradient(180deg,rgba(26,38,54,.95),rgba(9,15,24,.97)); --panelG2:linear-gradient(180deg,rgba(34,48,66,.97),rgba(12,19,30,.98)); --gloss:linear-gradient(180deg,rgba(255,255,255,.16),rgba(255,255,255,.04) 42%,transparent 46%); --fT:'Orbitron','Segoe UI',sans-serif; --fU:'Rajdhani','Segoe UI',Roboto,sans-serif; } *{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none} html{font-size:16px;-webkit-text-size-adjust:100%;text-size-adjust:100%} html[data-mf-text-scale="125"]{font-size:20px} html[data-mf-text-scale="150"]{font-size:24px} html[data-mf-text-scale="200"]{font-size:32px} html,body{width:100%;height:100%;height:100dvh;min-height:100dvh;overflow:hidden;background:var(--bg);font-family:var(--fU);color:#cfe8ff; position:fixed;inset:0;overscroll-behavior:none;touch-action:none} body{font-size:15px} /* No filter on the canvas here, on purpose. The grade is owned by applySettings() (SCREEN_GRADES in src/game/meta.js) and defaults to none. A baked-in contrast(1.17) saturate(1.20) was a second grade stacked on the lit pass, bloom, #grade and #vignette, and clipped every value under 7.3% sRGB to pure black before the first frame applySettings could touch. */ /* object-fit:contain is a safety net: if the bitmap aspect and the CSS box ever disagree (one missed resize), letterbox on --bg instead of stretching the 3D view and HUD. When resize() matches them, contain == fill. */ canvas#gl{position:fixed;inset:0;width:100%;height:100%;height:100dvh;min-height:100%;display:block;object-fit:contain;object-position:center;touch-action:none;background:var(--bg)} /* ---------- CINEMATIC POST: colour grade + vignette ---------- */ #grade{position:fixed;inset:0;pointer-events:none;z-index:2;mix-blend-mode:soft-light; background:linear-gradient(152deg,rgba(255,186,104,.32) 0%,rgba(255,222,180,.10) 26%, rgba(255,236,206,.02) 44%,rgba(14,32,78,.14) 66%,rgba(8,18,52,.42) 100%)} #vignette{position:fixed;inset:0;pointer-events:none;z-index:3; background: radial-gradient(ellipse 128% 92% at 50% 42%,transparent 42%,rgba(2,6,14,.14) 66%, rgba(2,6,14,.34) 84%,rgba(1,3,9,.60) 100%), linear-gradient(180deg,rgba(2,6,14,.26) 0%,transparent 14%,transparent 84%,rgba(2,6,14,.32) 100%)} #selbox{position:absolute;border:1.5px solid var(--cy);background:rgba(65,200,255,.12);display:none;pointer-events:none;z-index:5} /* ---------- shared metallic chrome ---------- */ .mfr{border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; box-shadow:0 3px 10px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.09)} .sic{background-repeat:no-repeat;pointer-events:none;filter:drop-shadow(0 3px 3px rgba(0,0,0,.55))} /* ---------- TOP BAR ---------- */ #topbar{position:absolute;top:var(--sat);left:var(--sal);right:var(--sar);display:flex;flex-wrap:wrap;gap:6px;align-items:center; padding:5px 8px;z-index:10;pointer-events:none;font-size:clamp(12px,1.6vmin,16px)} .res{display:flex;align-items:center;gap:5px;padding:3px 10px 3px 6px;border-radius:9px; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; box-shadow:0 2px 8px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.1); clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px)} .res[data-econ]{min-height:44px;pointer-events:auto;cursor:pointer;color:inherit;font:inherit} .res[data-econ]:focus-visible{outline:2px solid #8ee5ff;outline-offset:2px} .res[data-econ]:active{filter:brightness(1.2);transform:translateY(1px)} .res .ic{position:relative;isolation:isolate;flex:0 0 auto;width:18px;height:18px;overflow:hidden;border-radius:5px; border:1px solid rgba(255,255,255,.62);box-shadow:inset 0 1px 2px rgba(255,255,255,.28),0 0 8px currentColor} .res .ic::after{content:'';position:absolute;z-index:1;inset:3px;background:#f5fbff; filter:drop-shadow(0 1px 1px rgba(0,0,0,.68)) drop-shadow(0 0 2px rgba(255,255,255,.72))} #massIc::after{clip-path:polygon(50% 0,92% 25%,78% 88%,22% 88%,8% 25%)} #enIc::after{clip-path:polygon(56% 0,25% 50%,48% 50%,35% 100%,78% 40%,55% 40%)} #unitRes .ic::after{inset:2px;background: radial-gradient(circle at 50% 26%,#f5fbff 0 18%,transparent 20%), radial-gradient(ellipse at 50% 90%,#f5fbff 0 43%,transparent 45%)} .res b{font-variant-numeric:tabular-nums;font-size:clamp(13px,1.8vmin,18px);font-weight:700;letter-spacing:.02em} .res .rate{font-size:11px;opacity:.85;font-variant-numeric:tabular-nums;font-weight:600} #massIc{color:#5dff9a;background:linear-gradient(160deg,#45f194,#159952 62%,#063d23)} #enIc{color:#ffd257;background:linear-gradient(160deg,#ffe786,#d29d22 62%,#654607)} #unitRes .ic{color:var(--cy);background:linear-gradient(160deg,#7fe0ff,#248dbb 62%,#0a405e)} #unitRes.popWarn{border-color:rgba(255,193,75,.72);box-shadow:inset 0 0 12px rgba(255,174,40,.12)} #unitRes.popWarn b{color:#ffd66d} #unitRes.popFull{border-color:rgba(255,91,72,.88);box-shadow:inset 0 0 14px rgba(255,70,52,.18)} #unitRes.popFull b{color:#ff816e} /* Parked off the resource rail. sat+54 sat on the mail button and the mission chip — the leftover "60 FPS" tile people still see on patched OTAs. Bottom-right is diagnostic; the phone dock hides it entirely. */ #fps{position:fixed;top:auto;bottom:calc(var(--sab) + 8px);right:calc(var(--sar) + 10px);margin:0;padding:0; width:auto!important;min-width:0!important;height:auto!important;min-height:0!important;font:700 8px/1.2 var(--fU);opacity:.58; border:0!important;background:none!important;border-radius:0;box-shadow:none!important;pointer-events:none;color:#a6bed0} #fps::after{content:' FPS';font-size:7px;letter-spacing:.04em} #menuBtn,#spdBtn{pointer-events:auto;color:#dfeeff;border-radius:9px;padding:0; display:grid;place-items:center;line-height:1; width:var(--hudBtn);min-width:var(--hudBtn);height:var(--hudBtn);min-height:var(--hudBtn); font-size:calc(var(--hudBtn)*.42); border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box; box-shadow:0 2px 8px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.12);transition:transform .08s ease,filter .08s ease,box-shadow .08s ease} #spdBtn{font-size:calc(var(--hudBtn)*.31);font-weight:800;font-family:var(--fT)} #menuBtn:active,#spdBtn:active{transform:translateY(1px) scale(.96);filter:brightness(1.28); box-shadow:0 1px 3px rgba(0,0,0,.62),inset 0 2px 7px rgba(0,0,0,.38)} #menuBtn:focus-visible,#spdBtn:focus-visible{outline:2px solid #8ee5ff;outline-offset:2px} /* ---------- ALERT / TOAST ---------- */ /* z-index 110, not 20. Overlays (menus, profile, settings, armory) sit at 50, so every toast raised from a menu screen was rendering BEHIND the screen that raised it — invisible. The sign-in buttons were firing correctly and saying "not configured for this build" into a void, which is indistinguishable from a dead button. Same for armory purchase failures, profile warnings, and the updater's own messages. Above overlays, still below the modal dialogs (#accDlg 120, #dispatch 130) so a confirm box is never covered. */ /* position:fixed, not absolute — menu overlays scroll, and an absolutely positioned toast anchored to the document sat 104px from the TOP OF THE PAGE, i.e. off-screen the moment a long screen like Profile was scrolled. */ #toast{position:fixed;top:calc(var(--sat) + 104px);left:50%;transform:translateX(-50%);z-index:110; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box; border-left:3px solid var(--gold);border-radius:10px;padding:7px 15px;font-size:14px;font-weight:600; opacity:0;transition:opacity .3s;pointer-events:none;text-align:center;max-width:86%; box-shadow:0 4px 14px rgba(0,0,0,.6)} #toast.pickupReward{min-width:min(82vw,330px);padding:9px 15px 10px;border-left-color:var(--pickup-col); box-shadow:0 0 0 1px color-mix(in srgb,var(--pickup-col) 38%,transparent),0 8px 25px rgba(0,0,0,.72),0 0 22px color-mix(in srgb,var(--pickup-col) 20%,transparent)} #toast.pickupReward b{display:block;color:var(--pickup-col);font:700 12px/1.15 var(--fT);letter-spacing:.13em} #toast.pickupReward span{display:block;margin-top:4px;color:#eef8ff;font-size:12.5px;line-height:1.25} /* The notification rail is intentionally a reserved UI region. It is narrow, labelled, and positioned below the live HUD so warnings never masquerade as a blocking popup over production, construction, or unit inspection. */ #toast.noticeBox{top:calc(var(--sat) + 182px);left:50%;right:auto;transform:translateX(-50%);width:min(318px,calc(100vw - var(--sal) - var(--sar) - 26px));min-height:34px;max-height:38px;padding:14px 11px 4px;text-align:left;border-left-width:3px;font-size:10.5px;line-height:1.12;z-index:19;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} #toast.noticeBox::before{content:'COMMAND NOTICE';position:absolute;left:12px;top:4px;color:#79bfdf;font:900 9px var(--fT);letter-spacing:.16em} #toast.noticeBox.pickupReward{padding-top:17px}.noticeBox.pickupReward b{font-size:9px} #toast.noticeBox.radioNotice b,#toast.noticeBox.radioNotice span{display:block} #toast.noticeBox.radioNotice b{color:#a9e4ff;font:900 9px/1.2 var(--fT);letter-spacing:.1em} #toast.noticeBox.radioNotice span{margin-top:4px;color:#eef8ff;font:700 11px/1.2 var(--fU)} /* Combat keeps one short comms line and sends every full sentence to LOG. A firefight must never become a stack of paragraph cards over the battlefield. */ body.mfCombatHot #toast.noticeBox,body.uiPlacing #toast.noticeBox{min-height:32px;max-height:34px; padding:12px 10px 4px;white-space:nowrap;text-overflow:ellipsis;font-size:10px} body.mfCombatHot #toast.noticeBox::before,body.uiPlacing #toast.noticeBox::before{content:'COMMS';top:3px;font-size:8px} body.mfCombatHot #toast.noticeBox.radioNotice b,body.mfCombatHot #toast.noticeBox.radioNotice span, body.uiPlacing #toast.noticeBox.radioNotice b,body.uiPlacing #toast.noticeBox.radioNotice span{display:inline;margin:0;font-size:9.5px} body.mfCombatHot #toast.noticeBox.radioNotice b::after,body.uiPlacing #toast.noticeBox.radioNotice b::after{content:' · '} @media (max-width:640px){ body.uiPrimaryOpen #toast.noticeBox{top:calc(var(--sat) + 182px);right:auto;left:50%;transform:translateX(-50%);width:min(300px,calc(100vw - var(--sal) - var(--sar) - 26px));max-width:none;padding:15px 12px 8px;white-space:normal;overflow:visible;font-size:10.5px} body.uiPrimaryOpen #toast.noticeBox.pickupReward{padding-top:17px} } /* A command acknowledgement is persistent just long enough to connect a tap to the units' response, but never blocks the battlefield or accepts input. */ /* Orders speak through the notice rail now. Keep this leftover plate out of the top stack — a second acknowledgement was the overlapping "ghost chip". */ #radioAck{display:none!important;--ra:var(--cy);position:fixed;top:calc(var(--sat) + 126px);right:calc(var(--sar) + 9px);z-index:18; width:min(318px,84vw);min-height:48px;grid-template-columns:5px 35px 1fr auto;align-items:center; gap:8px;padding:6px 10px 6px 6px;border:1px solid color-mix(in srgb,var(--ra) 52%,#43576b); border-radius:9px;background:linear-gradient(100deg,rgba(5,13,23,.97),rgba(15,30,45,.94)); box-shadow:0 7px 20px rgba(0,0,0,.62),inset 0 1px 0 rgba(255,255,255,.08); opacity:0;transform:translateX(24px);transition:opacity .18s ease,transform .2s ease;pointer-events:none} #radioAck.show{opacity:1;transform:translateX(0)} #radioAck .raPulse{align-self:stretch;border-radius:4px;background:var(--ra);box-shadow:0 0 9px var(--ra)} #radioAck .raIcon{width:35px;height:35px;display:flex;align-items:center;justify-content:center;border-radius:8px; color:#ecfaff;font:800 18px/1 var(--fT);border:1px solid color-mix(in srgb,var(--ra) 60%,transparent); background:color-mix(in srgb,var(--ra) 18%,rgba(7,15,24,.95));text-shadow:0 0 8px var(--ra)} #radioAck .raCopy{min-width:0;display:flex;flex-direction:column;gap:2px} #radioAck .raCopy b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ra); font:800 9px/1.2 var(--fT);letter-spacing:.09em;text-transform:uppercase} #radioAck .raCopy i{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#e6f4ff; font:700 12px/1.2 var(--fU);font-style:normal} #radioAck .raCount{color:#a9c0d2;font:700 9px/1 var(--fT);letter-spacing:.06em;white-space:nowrap} @media(max-width:430px){#radioAck{width:min(286px,82vw);top:calc(var(--sat) + 120px)} #radioAck .raCount{display:none}} /* ---------- HUD TRAFFIC CONTROL (src/ui/hudflow.js) ---------- The lane owner writes `top` inline on every banner, so the hand-picked offsets above are advisory defaults for the first frame only. What lives here is the vocabulary the lane needs: compressed, squelched, and the two elements it creates itself. */ .mfLaneTight{padding-top:6px!important;padding-bottom:6px!important;font-size:10.5px!important; min-height:0!important;line-height:1.15!important} #toast.noticeBox.mfLaneTight{padding:12px 10px 6px!important} #unitCard.mfLaneTight{max-height:min(30vh,260px)!important} .mfLaneSquelch{opacity:0!important;pointer-events:none!important} #toast .mfNx{display:inline-block;margin-left:7px;padding:1px 5px;border-radius:6px;font-style:normal; font:800 9px/1.4 var(--fT);letter-spacing:.06em;color:#0a1420;background:var(--gold);vertical-align:middle} #mfLaneMore{position:fixed;left:50%;transform:translateX(-50%);z-index:19;display:none; padding:2px 9px;border-radius:7px;border:1px solid rgba(120,160,190,.4); background:rgba(6,14,23,.9);color:#9fc4dc;font:800 9px/1.5 var(--fT);letter-spacing:.1em; pointer-events:none} /* Deferred actions. A modal the player was not ready for waits here as a pill instead of pausing the game on top of a firefight. */ #mfChips{position:fixed;left:50%;transform:translateX(-50%);z-index:22;display:none;gap:6px; align-items:center;justify-content:center;flex-wrap:wrap;max-width:min(94vw,420px);pointer-events:none} .mfChip{pointer-events:auto;min-height:34px;padding:7px 14px;border-radius:9px; border:1px solid transparent;background:var(--panelG2) padding-box,var(--goldB) border-box; color:#ffe9ad;font:800 11px/1.1 var(--fT);letter-spacing:.09em;white-space:nowrap; box-shadow:0 4px 14px rgba(0,0,0,.6),0 0 14px rgba(255,200,90,.16); animation:mfChipPulse 2.2s ease-in-out infinite} .mfChip:active{filter:brightness(1.25)} @keyframes mfChipPulse{0%,100%{box-shadow:0 4px 14px rgba(0,0,0,.6),0 0 12px rgba(255,200,90,.14)} 50%{box-shadow:0 4px 14px rgba(0,0,0,.6),0 0 22px rgba(255,200,90,.34)}} body.menuMode #mfChips,body.menuMode #mfLaneMore{display:none!important} /* NO SESSION UI IN THE MENU, EVER. body.menuMode covered only part of the HUD and was set only by the attract backdrop, so any overlay opened over a live match leaked banners, build menus and tutorial callouts onto the menu. body.mfMenuOpen is set by hudflow.js whenever ANY front screen is up, and it takes down every battlefield surface in one place. */ body.mfMenuOpen #topbar,body.mfMenuOpen #cmdbar,body.mfMenuOpen #minimapWrap, body.mfMenuOpen #camRow,body.mfMenuOpen #goalBar,body.mfMenuOpen #wcRow, body.mfMenuOpen #infMeter,body.mfMenuOpen #selInfo,body.mfMenuOpen #heroBar, body.mfMenuOpen #fps,body.mfMenuOpen #atkAlert,body.mfMenuOpen #waveAlert, body.mfMenuOpen #mfMassAlert,body.mfMenuOpen #toast,body.mfMenuOpen #coach, body.mfMenuOpen #unitCard,body.mfMenuOpen #mfChips,body.mfMenuOpen #mfLaneMore, body.mfMenuOpen #buildMenu,body.mfMenuOpen #prodMenu,body.mfMenuOpen #bldMenu2, body.mfMenuOpen #placeUI,body.mfMenuOpen .baseFinder,body.mfMenuOpen #keelWrap, body.mfMenuOpen #keelModeBadge,body.mfMenuOpen #keelMapCue,body.mfMenuOpen #godBadge, body.mfMenuOpen #selbox,body.mfMenuOpen #radioAck,body.mfMenuOpen #deployBtn, body.mfMenuOpen #wcBanner,body.mfMenuOpen #consHud,body.mfMenuOpen #hazChip{display:none!important} @media (prefers-reduced-motion:reduce){.mfChip{animation:none}} /* ---------- SELECTION HOT-SLOTS (src/ui/hotslots.js) ---------- The actions the CURRENT selection can take, contained by the ABILITIES deck. The tab remains visible but is disabled when the selection cannot act. */ #hotSlots{position:static;left:auto;transform:none;top:auto;z-index:auto;display:none; gap:5px;align-items:stretch;justify-content:flex-end;width:100%;max-width:none;box-sizing:border-box;flex-wrap:nowrap; overflow-x:auto;padding:2px 2px 4px;scrollbar-width:none;pointer-events:none} #hotSlots::-webkit-scrollbar{display:none} .hotSlot{pointer-events:auto;position:relative;flex:0 1 auto;min-width:52px;min-height:44px; display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px; padding:5px 7px;border-radius:10px;border:1px solid transparent; background:var(--panelG2) padding-box,var(--steelB) border-box; box-shadow:0 4px 14px rgba(0,0,0,.6);color:#dbeeff; -webkit-tap-highlight-color:transparent} .hotSlot .hEm{font-size:17px;line-height:1} .hotSlot .hNm{font:800 9px/1.1 var(--fT);letter-spacing:.06em;color:#9fc4dc; max-width:62px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .hotSlot .hCd{position:absolute;inset:0;display:none;align-items:center;justify-content:center; border-radius:10px;background:rgba(4,10,18,.74);color:#ffd257;font:800 12px/1 var(--fT)} .hotSlot.cd{filter:saturate(.35) brightness(.72)} .hotSlot.cd .hCd:not(:empty){display:flex} .hotSlot.on{background:var(--panelG2) padding-box,var(--goldB) border-box;color:#ffe9ad; box-shadow:0 4px 14px rgba(0,0,0,.6),0 0 16px rgba(255,200,90,.3)} .hotSlot.on .hNm{color:#ffe9ad} .hotSlot:active{filter:brightness(1.25)} body.mfMenuOpen #hotSlots,body.menuMode #hotSlots{display:none!important} #hotUtilityPanel{position:fixed;left:50%;transform:translateX(-50%);z-index:13;display:none; grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;width:min(94vw,330px);padding:7px; border:1px solid rgba(103,193,234,.42);border-radius:12px;background:rgba(4,12,22,.96); box-shadow:0 10px 28px rgba(0,0,0,.72);backdrop-filter:blur(8px)} .hotUtility{position:relative;min-width:0;min-height:48px;padding:5px 3px;border-radius:9px;border:1px solid #29455d; display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;color:#dbeeff;background:#0d1c2c} .hotUtility .hEm{font-size:16px}.hotUtility .hNm{max-width:92px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; color:#a9cce0;font:800 8px/1.05 var(--fT);letter-spacing:.04em}.hotUtility .hCd{position:absolute;inset:0;display:none; place-items:center;border-radius:9px;background:rgba(4,10,18,.76);color:#ffd257;font:800 11px var(--fT)} .hotUtility.cd .hCd:not(:empty){display:grid}.hotUtility.cd{filter:saturate(.4) brightness(.72)} body.mfMenuOpen #hotUtilityPanel,body.menuMode #hotUtilityPanel{display:none!important} @media (max-width:380px){.hotSlot{min-width:46px;padding:4px 5px} .hotSlot .hEm{font-size:15px}.hotSlot .hNm{font-size:9px;max-width:52px}} /* ---------- FLOATING DAMAGE NUMBERS ---------- */ .ftxt{position:absolute;left:0;top:0;z-index:8;pointer-events:none;font-family:var(--fT);font-weight:800; font-size:11.5px;color:#f2f7fc;text-shadow:0 1px 3px rgba(0,0,0,.9),0 0 5px rgba(0,0,0,.6); opacity:0;will-change:transform,opacity;margin-left:-10px;margin-top:-8px} /* ---------- COACH BANNER ---------- */ #coach{position:absolute;top:calc(var(--sat) + 150px);left:50%;transform:translateX(-50%);z-index:19; border:1px solid transparent;background:var(--panelG2) padding-box,var(--goldB) border-box; border-radius:10px;padding:7px 14px;font-size:13px;font-weight:700;color:#ffe9ad; opacity:0;transition:opacity .35s;pointer-events:none;text-align:center;max-width:88%; box-shadow:0 4px 14px rgba(0,0,0,.6)} /* ---------- UNIT INTEL CARD ---------- */ #unitCard{position:absolute;top:calc(var(--sat) + 190px);left:50%;transform:translateX(-50%);z-index:21; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; border-radius:14px;padding:10px 11px 11px;font-size:11px;font-weight:600;display:none;width:min(420px,92vw); max-height:min(48vh,430px);overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch; box-shadow:0 8px 28px rgba(0,0,0,.72),inset 0 1px 0 rgba(255,255,255,.1);text-align:left;pointer-events:auto} #unitCard.pinned{background:linear-gradient(180deg,rgba(15,31,48,.99),rgba(5,13,23,.99)) padding-box,var(--goldB) border-box} #unitCard .ucHead{display:grid;grid-template-columns:38px 1fr 44px;gap:8px;align-items:center} #unitCard .ucHead>div{min-width:0} #unitCard .ucRoleIcon{width:38px;height:38px;display:flex;align-items:center;justify-content:center;border-radius:10px; font-size:22px;background:rgba(47,104,142,.24);border:1px solid rgba(116,190,235,.32)} #unitCard .ucHead b{display:block;font-family:var(--fT);font-size:14px;color:#eaf7ff;letter-spacing:.06em;text-transform:uppercase} #unitCard .ucHead small{display:block;margin-top:2px;color:#b8d1e4;font-size:10px;line-height:1.3;font-weight:600} #unitCard .ucClose{width:44px;height:44px;min-width:44px;border-radius:10px;color:#cfe8ff;font-size:24px; border:1px solid rgba(127,177,212,.45);background:rgba(16,35,53,.82);pointer-events:auto} #unitCard .ucClose:active{transform:scale(.92);background:rgba(54,91,119,.9)} #unitCard .ucChips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px} #unitCard .ucChip{display:inline-flex;align-items:center;gap:4px;min-height:25px;padding:3px 7px;border-radius:7px; color:#ccecff;background:rgba(36,83,112,.35);border:1px solid rgba(95,165,207,.28);font:700 9px/1 var(--fT);letter-spacing:.06em} #unitCard .ucChip i{font-size:12px;font-style:normal;color:#8be8ff} #unitCard .ucStats{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px} #unitCard .ucStats span{flex:1 1 72px;padding:5px 7px;border-radius:7px;background:rgba(3,9,16,.48);color:#89aabe; font:700 9px/1.2 var(--fT);letter-spacing:.07em;white-space:nowrap} #unitCard .ucStats b{font-size:10px;color:#edf8ff;font-family:var(--fT)} #unitCard .ucCounter{display:flex;flex-wrap:wrap;justify-content:space-between;gap:5px;margin-top:7px;padding:6px 8px; border-radius:8px;background:rgba(24,76,55,.26);border:1px solid rgba(93,255,154,.18);color:#75efaa;font:700 9px/1.35 var(--fT)} #unitCard .caution{color:#ffb0a2} #unitCard .ucMatchups{display:grid;gap:5px;margin-top:7px} #unitCard .ucMatchRow{display:grid;grid-template-columns:72px minmax(0,1fr);align-items:center;gap:5px;padding:5px; border-radius:8px;background:rgba(5,15,25,.58);border:1px solid rgba(100,170,213,.18)} #unitCard .ucMatchRow>strong{color:#8db5cf;font:800 9px/1.25 var(--fT);letter-spacing:.08em} #unitCard .ucMatchRow>div{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;min-width:0} #unitCard .ucMatchChip{display:grid;grid-template-columns:auto 1fr;grid-template-areas:'i b' 'i e' 'i s';column-gap:4px; min-width:0;padding:4px 5px;border-radius:6px;border:1px solid rgba(134,180,208,.24);background:rgba(22,45,62,.7)} #unitCard .ucMatchChip i{grid-area:i;align-self:center;font:900 13px/1 var(--fT);font-style:normal} #unitCard .ucMatchChip b{grid-area:b;overflow:hidden;text-overflow:ellipsis;color:#dcecf6;font:800 9px/1 var(--fT);letter-spacing:.03em} #unitCard .ucMatchChip em{grid-area:e;color:#eff9ff;font:900 9px/1.1 var(--fT);font-style:normal} #unitCard .ucMatchChip small{grid-area:s;color:#91aabc;font:800 9px/1 var(--fT)} #unitCard .ucMatchChip.good{border-color:rgba(83,240,151,.42);background:rgba(23,91,58,.38)} #unitCard .ucMatchChip.good i,#unitCard .ucMatchChip.good em,#unitCard .ucMatchChip.good small{color:#6ff2a8} #unitCard .ucMatchChip.bad{border-color:rgba(255,113,101,.38);background:rgba(102,35,38,.32)} #unitCard .ucMatchChip.bad i,#unitCard .ucMatchChip.bad em,#unitCard .ucMatchChip.bad small{color:#ff9388} #unitCard .ucMatchChip.warn{border-color:rgba(255,204,90,.38);background:rgba(96,76,26,.34)} #unitCard .ucMatchChip.warn i,#unitCard .ucMatchChip.warn em,#unitCard .ucMatchChip.warn small{color:#ffd977} #unitCard .ucMatchChip.neutral i,#unitCard .ucMatchChip.neutral em{color:#9bdfff} #unitCard .ucMatchRow.incoming{border-color:rgba(255,143,103,.17)} #unitCard .ucAmmo{margin-top:6px;color:#94b7ce;font:700 9px/1.3 var(--fT);letter-spacing:.08em} @media(max-width:430px){#unitCard .ucMatchRow{grid-template-columns:62px minmax(0,1fr)} #unitCard .ucMatchChip{padding:4px 3px;column-gap:3px}#unitCard .ucMatchChip b{font-size:9px}} /* Real model windows use the same authored mesh factories as the battlefield. They get a separate tiny WebGL context so inspecting a unit never moves the command camera or disturbs texture units in the main post-processing chain. */ .mfIntelPreview{position:relative;isolation:isolate;overflow:hidden;min-height:104px;border-radius:10px; background:radial-gradient(ellipse at 55% 62%,rgba(38,104,145,.28),transparent 55%), linear-gradient(180deg,rgba(4,12,22,.96),rgba(2,7,13,.98)); border:1px solid rgba(105,177,219,.34);box-shadow:inset 0 0 26px rgba(0,0,0,.68)} .mfIntelPreview::before{content:'';position:absolute;z-index:0;inset:0;opacity:.28;pointer-events:none; background-image:linear-gradient(rgba(80,170,220,.13) 1px,transparent 1px), linear-gradient(90deg,rgba(80,170,220,.13) 1px,transparent 1px); background-size:18px 18px;transform:perspective(120px) rotateX(57deg) scale(1.45);transform-origin:50% 100%} .mfIntelPreview::after{content:'';position:absolute;z-index:2;inset:0;pointer-events:none; background:linear-gradient(90deg,#66d9ff 0 12px,transparent 12px calc(100% - 12px),#66d9ff calc(100% - 12px)) top/100% 1px no-repeat, linear-gradient(90deg,#66d9ff 0 12px,transparent 12px calc(100% - 12px),#66d9ff calc(100% - 12px)) bottom/100% 1px no-repeat; opacity:.62} .mfIntelPreview canvas{position:absolute;z-index:1;inset:0;width:100%;height:100%;display:block} .mfIntelPreview .mfIntelFallback{position:absolute;z-index:1;left:50%;top:50%;transform:translate(-50%,-50%) scale(1.25)} .mfIntelPreviewTag{position:absolute;z-index:3;left:7px;top:6px;padding:3px 5px;border-radius:4px; color:#9be8ff;background:rgba(3,11,20,.78);font:800 9px/1 var(--fT);letter-spacing:.13em} #unitCard .mfIntelPreview{height:118px;margin-top:8px} /* ---------- IN-GAME WILDCARD ROW ---------- */ #wcRow{position:absolute;top:calc(var(--sat) + 36px);right:8px;z-index:9;display:none;gap:4px;align-items:center; border:1px solid transparent;background:var(--panelG) padding-box,var(--redB) border-box; border-radius:9px;padding:2px 8px;pointer-events:auto;box-shadow:0 2px 8px rgba(0,0,0,.5)} .wcChip{display:grid;place-items:center;flex:0 0 27px;width:27px;height:27px;border-radius:7px;font-size:15px; color:#fff;border:1px solid rgba(255,190,171,.42);background:linear-gradient(180deg,rgba(98,45,39,.9),rgba(36,17,22,.94)); box-shadow:inset 0 1px 0 rgba(255,255,255,.14),0 1px 4px rgba(0,0,0,.45);filter:saturate(1.18) contrast(1.08)} .wcMult{font-size:11px;color:#ffb0a2;font-weight:700;font-family:var(--fT)} #wcRow:active{filter:brightness(1.2)} /* ---------- OBJECTIVE / CLOCK BAR ---------- */ #goalBar{position:absolute;top:calc(var(--sat) + 36px);left:50%;transform:translateX(-50%);z-index:9;display:none; align-items:center;gap:8px;border:1px solid transparent; background:var(--panelG) padding-box,var(--steelB) border-box; border-radius:9px;padding:3px 11px;font-size:11.5px;font-weight:700;font-family:var(--fT); letter-spacing:.06em;pointer-events:auto;box-shadow:0 2px 8px rgba(0,0,0,.5);white-space:nowrap} /* Live match: the plate is a second row of #topbar, not a floating chip guessing sat+36. Sibling #goalBar (safe-row fixture / old shells) keeps the absolute fallback above. */ #topbar #goalBar{flex:1 1 100%;position:relative;top:auto;left:auto;transform:none;z-index:auto; width:auto;max-width:none;margin:1px 0 0;box-sizing:border-box; min-height:max(44px,var(--hudIntelH));max-height:none;justify-content:center;gap:6px;padding:3px 8px; white-space:nowrap;overflow:hidden; background:rgba(4,10,18,.4) padding-box,var(--steelB) border-box; box-shadow:inset 0 1px 0 rgba(255,255,255,.06)} #goalDetailBtn{appearance:none;-webkit-appearance:none;display:flex;align-items:center;justify-content:center;gap:6px; width:100%;min-width:0;min-height:44px;margin:0;padding:0;border:0;background:none;color:inherit; font:inherit;letter-spacing:inherit;white-space:inherit;overflow:hidden;cursor:pointer} #goalDetailBtn:focus-visible{outline:2px solid #77ddff;outline-offset:1px;border-radius:6px} #goalBar .hudIntelChip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:7px; border:1px solid rgba(120,170,205,.22);background:rgba(6,14,24,.42);letter-spacing:.05em} #goalBar .hudIntelChip.contact{color:#8fffc0;border-color:rgba(80,255,180,.28); text-shadow:0 0 10px rgba(80,255,180,.28)} #goalBar .hudIntelChip.goal{color:#d7ebff} #goalBar .hudIntelChip.time{color:#ffe9ad;font-variant-numeric:tabular-nums} #goalBar .hudIntelCompact{display:none} #goalBar .clk{color:#ffe9ad;font-variant-numeric:tabular-nums} #goalBar .clk.low{color:#ff8d7a;animation:infPulse 1s ease-in-out infinite} /* ---------- HIVE THREAT METER ---------- */ #infMeter{position:absolute;top:calc(var(--sat) + 66px);right:8px;z-index:9;display:none;align-items:center;gap:5px; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; border-radius:9px;padding:3px 9px;font-size:11px;font-weight:800;font-family:var(--fT);letter-spacing:.08em; pointer-events:auto;box-shadow:0 2px 8px rgba(0,0,0,.5)} #infMeter.t4{background:var(--panelG) padding-box,var(--redB) border-box;animation:infPulse 1.1s ease-in-out infinite} /* Map weather/hazard identity. Sits in the right status column with the hive meter; hudflow stacks them so a live threat never covers the name. */ #hazChip{position:absolute;top:calc(var(--sat) + 66px);right:8px;z-index:9; display:none;align-items:center;gap:5px;max-width:min(42vw,168px);min-height:44px; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; border-radius:9px;padding:3px 8px;font-size:10px;font-weight:800;font-family:var(--fT); letter-spacing:.07em;pointer-events:auto;box-shadow:0 2px 8px rgba(0,0,0,.5); color:#cfe8ff;white-space:nowrap;overflow:hidden} #hazChip .hazEm{flex:0 0 auto;font-size:13px;line-height:1} #hazChip .hazNm{min-width:0;overflow:hidden;text-overflow:ellipsis} #hazChip:active{filter:brightness(1.18)} @keyframes infPulse{0%,100%{box-shadow:0 0 4px rgba(255,93,67,.3)}50%{box-shadow:0 0 16px rgba(255,93,67,.85)}} /* ---------- WILDCARD ACTIVE BANNER (top bar during match) ---------- */ #wcBanner{position:absolute;top:calc(var(--sat) + 36px);left:50%;transform:translateX(-50%);z-index:9; display:none;align-items:center;gap:6px;border:1px solid transparent; background:var(--panelG) padding-box,var(--redB) border-box; border-radius:9px;padding:3px 10px;font-size:11px;font-weight:800;font-family:var(--fT); letter-spacing:.06em;pointer-events:auto;box-shadow:0 2px 8px rgba(0,0,0,.5);white-space:nowrap} #wcBanner .wcBIcon{font-size:14px;line-height:1} #wcBanner .wcBName{color:#ffb0a2} #wcBanner .wcBMult{color:#ffe9ad;font-variant-numeric:tabular-nums} #wcBanner .wcBCount{margin-left:2px;padding:0 5px;border-radius:6px;background:rgba(0,0,0,.35);color:#cfe8ff;font-size:10px} /* ---------- CONSUMABLE HUD (bottom-left during match) ---------- */ #consHud{position:absolute;left:calc(var(--sal) + 8px);bottom:calc(var(--sab) + 78px);z-index:10; display:none;flex-direction:column;gap:4px;pointer-events:auto} .conHudSlot{display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:8px; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; box-shadow:0 2px 8px rgba(0,0,0,.5);font-size:11px;font-weight:700;font-family:var(--fT); color:#cfe8ff;letter-spacing:.04em;pointer-events:auto;min-width:44px} .conHudSlot .conHudEm{font-size:16px;line-height:1} .conHudSlot .conHudNm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:90px} .conHudSlot .conHudScope{color:#ffad98;font:900 7px/1 var(--fT);letter-spacing:.08em;white-space:nowrap} .conHudSlot .conHudCt{color:#ffe9ad;font-size:10px;font-weight:800} /* ---------- MODIFIER TOOLTIP ---------- */ #modTooltip{position:absolute;z-index:100;pointer-events:none;display:none; max-width:260px;padding:10px 12px;border-radius:10px; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; box-shadow:0 6px 24px rgba(0,0,0,.7)} #modTooltip .mtName{font-size:13px;font-weight:800;color:#fff;font-family:var(--fT);margin-bottom:4px} #modTooltip .mtRarity{font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px} #modTooltip .mtDesc{font-size:11px;color:#a8c4d8;line-height:1.4} #modTooltip .mtSlot{font-size:9px;color:#7a9ab0;margin-top:4px;letter-spacing:.06em} /* ---------- PRE-MATCH MODIFIER SPLASH ---------- */ #modSplash{position:fixed;inset:0;z-index:200;display:none;align-items:center;justify-content:center; pointer-events:none;background:rgba(0,0,0,.45)} #modSplashInner{text-align:center;padding:24px 32px;border-radius:16px;max-width:320px; border:1px solid transparent;background:var(--panelG) padding-box,var(--goldB) border-box; box-shadow:0 8px 32px rgba(0,0,0,.7)} #modSplashInner .msTitle{font-size:15px;font-weight:900;color:#ffe9ad;font-family:var(--fT); letter-spacing:.12em;text-transform:uppercase;margin-bottom:14px} #modSplashInner .msRow{display:flex;align-items:center;gap:8px;padding:5px 0; border-bottom:1px solid rgba(255,255,255,.08)} #modSplashInner .msRow:last-child{border-bottom:none} #modSplashInner .msEm{font-size:18px;line-height:1;flex:0 0 24px;text-align:center} #modSplashInner .msNm{font-size:12px;font-weight:700;color:#fff;font-family:var(--fT);flex:1;text-align:left} #modSplashInner .msTag{font-size:9px;font-weight:700;color:#ffe9ad;letter-spacing:.08em} /* ---------- MINIMAP ---------- */ /* position:fixed so a wrap that lives inside #cmdbar still sits on the screen corner on desktop — absolute would pin it to the right-hand plate. */ #minimapWrap{position:fixed;left:6px;bottom:calc(var(--sab) + 6px);z-index:10;border-radius:8px;overflow:hidden;isolation:isolate; pointer-events:auto;border:1px solid transparent;background:#000 padding-box,var(--steelB) border-box;padding:2px; box-shadow:0 3px 14px rgba(0,0,0,.65)} #minimapWrap::after{content:'';position:absolute;inset:0;pointer-events:none;border-radius:8px; background: linear-gradient(var(--gold),var(--gold)) 0 0/14px 2px, linear-gradient(var(--gold),var(--gold)) 0 0/2px 14px, linear-gradient(var(--gold),var(--gold)) 100% 100%/14px 2px, linear-gradient(var(--gold),var(--gold)) 100% 100%/2px 14px; background-repeat:no-repeat;opacity:.85} /* THE BRACKETS BELONG TO THE OLD LAYOUT, NOT TO A BREAKPOINT. #minimapWrap::after paints four gold corner brackets. That is the fallback frame for the pre-dock HUD, and the tactical dock has always replaced it with its own steel box - but the rule that switched it off lived inside @media (max-width:600px) and (orientation:portrait), so the moment the dock was running at any other viewport the player got BOTH: the dock's own layout and a set of gold brackets bolted to a box that no longer wanted them, with the map content bleeding to the edge because the dock's padding was gated the same way. Whether the brackets show is a question about which layout is running, not about how wide the screen is. Scoped to the dock class alone, it is correct at every viewport - and the base rule below it already draws the clean steel box with padding that the dock wants. */ body.hudTacticalDock #minimapWrap::after{content:none} body.hudTacticalDock #minimapWrap{padding:4px} #minimap{display:block;touch-action:none;border-radius:6px;image-rendering:crisp-edges;transition:opacity .18s ease,filter .18s ease} /* Global clamp. The canvas attributes are 256×256; without an authored CSS size a landscape / zoomed-out viewport painted that bitmap 1:1 and the well ate a third of the screen. Portrait media used to own this rule, so ratio changes escaped it. */ #minimap{width:84px;height:84px;transition:width .18s ease,height .18s ease} /* ---------- BOTTOM COMMAND BAR ---------- */ #cmdbar{position:absolute;right:6px;bottom:calc(var(--sab) + 6px);z-index:10;display:flex;flex-direction:column;gap:6px;align-items:flex-end} .btnrow{display:flex;gap:6px} .baseFinder{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(var(--sab) + 72px);z-index:14;display:none; width:min(94vw,560px);max-height:calc(100dvh - var(--sat) - var(--sab) - 96px);box-sizing:border-box;padding:10px; border-radius:14px;border:1px solid rgba(107,205,249,.62);background:linear-gradient(155deg,rgba(16,42,61,.985),rgba(6,14,25,.99)); box-shadow:0 12px 36px rgba(0,0,0,.76),inset 0 1px 0 rgba(255,255,255,.08);overflow:hidden} .baseFinder header{display:flex;align-items:center;gap:10px;color:#c8f1ff;font:900 10px/1 var(--fT);letter-spacing:.1em} .baseFinder header>span{display:flex;min-width:0;flex:1;align-items:center;justify-content:space-between;gap:8px} .baseFinder header small{color:#7fa7c2;font:800 8px/1 var(--fT);letter-spacing:.08em} .baseFindBack{min-width:88px;min-height:44px;padding:6px 10px;color:#dcefff;border:1px solid rgba(147,204,235,.35);border-radius:8px; background:linear-gradient(180deg,rgba(25,54,77,.96),rgba(8,23,37,.98));font:900 9px/1 var(--fT);letter-spacing:.07em} .baseFindTabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:5px;margin-top:8px} .baseFindTabs button{min-width:0;min-height:44px;padding:5px 3px;display:flex;align-items:center;justify-content:center;gap:4px;color:#afc9da; border:1px solid rgba(110,161,190,.28);border-radius:7px;background:rgba(4,13,22,.72);font:800 8px/1 var(--fT);letter-spacing:.035em;overflow:hidden} .baseFindTabs button .baseFindTabIcon{font-size:12px;line-height:1}.baseFindTabs button .baseFindTabLabel{min-width:0;font:inherit;line-height:1;white-space:nowrap} .baseFindTabs button.on{color:#fff1a5;border-color:#ffe17c;background:rgba(91,67,12,.72);box-shadow:0 0 10px rgba(255,214,80,.2)} .baseFindGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin-top:8px;max-height:min(46dvh,344px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin} .baseFindCard{min-width:0;min-height:62px;padding:6px 7px;display:grid;grid-template-columns:40px minmax(0,1fr) auto;align-items:center;gap:7px;text-align:left; color:#dceeff;border:1px solid rgba(111,166,201,.28);border-radius:9px;background:linear-gradient(145deg,rgba(20,39,57,.96),rgba(7,18,29,.98));box-shadow:0 2px 8px rgba(0,0,0,.3)} .baseFindCard.on{border-color:#62d2ff;box-shadow:0 0 12px rgba(57,198,255,.25),inset 0 0 0 1px rgba(98,210,255,.14)} .baseFindIcon{width:38px;height:38px;display:grid;place-items:center;border-radius:8px;border:1px solid rgba(112,201,240,.28);background:radial-gradient(circle at 45% 38%,rgba(67,145,188,.38),rgba(5,18,29,.88));font-size:20px} .baseFindCopy{display:flex;min-width:0;flex-direction:column;gap:4px}.baseFindCopy b{overflow:hidden;text-overflow:ellipsis;color:#eaf7ff;font:900 9px/1.1 var(--fT);letter-spacing:.045em;white-space:nowrap} .baseFindCopy small{overflow:hidden;text-overflow:ellipsis;color:#82a7be;font:700 7.5px/1 var(--fT);letter-spacing:.03em;white-space:nowrap}.baseFindCopy i{height:3px;overflow:hidden;border-radius:2px;background:#06101a}.baseFindCopy i span{display:block;height:100%;background:linear-gradient(90deg,#46c985,#96edb7)} .baseFindCard>strong{display:flex;flex-direction:column;align-items:flex-end;color:#8be8ff;font:900 11px/1 var(--fT)}.baseFindCard>strong small{margin-top:5px;color:#7799ae;font:700 7px/1 var(--fT);white-space:nowrap} .baseFinder .baseFindHint{margin:8px 2px 0;color:#83a1b4;font:700 8px/1.3 var(--fT);letter-spacing:.04em}.baseFindEmpty{grid-column:1/-1;margin:0!important;padding:24px 10px;text-align:center;color:#83a1b4;font:800 9px/1.3 var(--fT)} .cbtn{min-width:53px;height:53px;border-radius:11px;color:#dfeeff;font-size:11px;font-weight:700;letter-spacing:.04em; display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:auto;padding:2px 6px; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box; box-shadow:0 3px 9px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.13); clip-path:polygon(9px 0,100% 0,100% calc(100% - 9px),calc(100% - 9px) 100%,0 100%,0 9px); position:relative;overflow:hidden;text-transform:uppercase} .cbtn::before{content:'';position:absolute;inset:0;background:var(--gloss);pointer-events:none} .cbtn .em{font-size:20px;line-height:1} /* ---- command icon sheet ------------------------------------------------- Buttons carry both an emoji and a data-icon. The emoji is the shipped fallback and stays visible until assets/textures/ui/cmdicons.png actually decodes, at which point cmdIconsBind() puts .cmdIcons on and these rules take over. A missing or broken sheet therefore costs nothing — no blank buttons, no 404-driven layout change — which is the same contract the tactical icon atlas uses. The sheet is an 8x8 grid of 128px cells; background-size 800% and a position of (col*100/7)% (row*100/7)% selects one cell. */ /* Faction roster icons (src/ui/facticons.js). Unlike the command sheet these keep their authored livery colour, so nothing tints them here; the shadow is what separates a dark-blue Nova glyph from the dark panel behind it. Sizing and cell offset are set inline because the cell is chosen per element. */ .facIcon{background-repeat:no-repeat;image-rendering:auto; filter:drop-shadow(0 1px 2px rgba(0,0,0,.55))} .em[data-icon]{display:inline-block;width:24px;height:24px;background-repeat:no-repeat} .camBtn .em[data-icon]{width:20px;height:20px} /* Cinematic-only glyphs that have no honest shipped atlas cell use inline monochrome vectors. Explicit SVG sizing prevents the browser's 300×150 replaced-element default from escaping a 44px touch target. */ .mfCinematicVectorIcon{display:inline-grid!important;place-items:center;width:24px;height:24px;flex:0 0 24px;line-height:0;background:none!important} .mfCinematicVectorIcon svg{display:block;width:100%;height:100%;overflow:visible;pointer-events:none} .tabBtn .tEm.mfCinematicVectorIcon{width:18px;height:18px;flex-basis:18px} body.mf-cinematic-hud #inboxHudBtn>.mfCinematicVectorIcon, body.mf-cinematic-hud #menuBtn>.mfCinematicVectorIcon{width:22px;height:22px;flex-basis:22px} body.mf-cinematic-hud #heroRankEm.mfCinematicVectorIcon{width:16px;height:16px;min-width:16px;flex-basis:16px;padding:0;color:var(--gold)} body.mf-cinematic-hud #upBtn,body.mf-cinematic-hud #repeatBtn,body.mf-cinematic-hud #rallyBtn{ display:flex;align-items:center;justify-content:center;gap:6px } html.cmdIcons .em[data-icon][data-icon-ready="true"]{ color:transparent;font-size:0; background-image:var(--cmdSheet);background-size:800% 800%; } html.cmdIcons .em[data-icon="move"] {background-position:0% 0%} html.cmdIcons .em[data-icon="attack"] {background-position:14.2857% 0%} html.cmdIcons .em[data-icon="hold"] {background-position:28.5714% 0%} html.cmdIcons .em[data-icon="stop"] {background-position:42.8571% 0%} html.cmdIcons .em[data-icon="patrol"] {background-position:57.1428% 0%} html.cmdIcons .em[data-icon="guard"] {background-position:71.4285% 0%} html.cmdIcons .em[data-icon="rally"] {background-position:85.7142% 0%} html.cmdIcons .em[data-icon="group"] {background-position:100% 0%} html.cmdIcons .em[data-icon="selectall"] {background-position:0% 14.2857%} html.cmdIcons .em[data-icon="unload"] {background-position:14.2857% 14.2857%} html.cmdIcons .em[data-icon="load"] {background-position:28.5714% 14.2857%} html.cmdIcons .em[data-icon="land"] {background-position:42.8571% 14.2857%} html.cmdIcons .em[data-icon="repair"] {background-position:57.1428% 14.2857%} html.cmdIcons .em[data-icon="resupply"] {background-position:71.4285% 14.2857%} html.cmdIcons .em[data-icon="retreat"] {background-position:85.7142% 14.2857%} html.cmdIcons .em[data-icon="delete"] {background-position:100% 14.2857%} html.cmdIcons .em[data-icon="zoomin"] {background-position:0% 28.5714%} html.cmdIcons .em[data-icon="zoomout"] {background-position:14.2857% 28.5714%} html.cmdIcons .em[data-icon="minimap"] {background-position:28.5714% 28.5714%} html.cmdIcons .em[data-icon="ping"] {background-position:42.8571% 28.5714%} html.cmdIcons .em[data-icon="waypoint"] {background-position:57.1428% 28.5714%} html.cmdIcons .em[data-icon="resource"] {background-position:71.4285% 28.5714%} html.cmdIcons .em[data-icon="energy"] {background-position:85.7142% 28.5714%} html.cmdIcons .em[data-icon="crystals"] {background-position:100% 28.5714%} html.cmdIcons .em[data-icon="gas"] {background-position:0% 42.8571%} html.cmdIcons .em[data-icon="population"]{background-position:14.2857% 42.8571%} html.cmdIcons .em[data-icon="time"] {background-position:28.5714% 42.8571%} html.cmdIcons .em[data-icon="score"] {background-position:42.8571% 42.8571%} html.cmdIcons .em[data-icon="victory"] {background-position:57.1428% 42.8571%} html.cmdIcons .em[data-icon="defeat"] {background-position:71.4285% 42.8571%} html.cmdIcons .em[data-icon="pause"] {background-position:85.7142% 42.8571%} html.cmdIcons .em[data-icon="options"] {background-position:100% 42.8571%} html.cmdIcons body.mf-cinematic-hud [data-mf-hud-role="service-controls"] button[data-icon][data-icon-ready="true"]::before{ content:'';display:inline-block;position:static;width:24px;height:24px;flex:0 0 24px; background-image:var(--cmdSheet);background-size:800% 800%;background-repeat:no-repeat } html.cmdIcons body.mf-cinematic-hud [data-mf-hud-role="service-controls"] button[data-icon="repair"]::before{background-position:57.1428% 14.2857%} html.cmdIcons body.mf-cinematic-hud [data-mf-hud-role="service-controls"] button[data-icon="delete"]::before{background-position:100% 14.2857%} .cbtn.on{background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box,var(--goldB) border-box; box-shadow:0 0 12px rgba(255,210,87,.45),inset 0 1px 0 rgba(255,255,255,.2)} .cbtn:active{transform:scale(.94)} .cbtn.cd{opacity:.5} .abtn{position:relative} .abtn .lvl{position:absolute;top:-4px;right:-4px;background:linear-gradient(180deg,#ffe9a3,#d8a94e);color:#221a00;font-size:10px;font-weight:800; border-radius:8px;padding:1px 5px;border:1px solid #fff3c4;box-shadow:0 1px 4px rgba(0,0,0,.5);font-family:var(--fT);z-index:2} .cdring{position:absolute;inset:0;background:rgba(0,0,0,.6);display:none;align-items:center;justify-content:center; font-size:15px;font-weight:800;font-family:var(--fT);z-index:2} #deployBtn{display:none;pointer-events:auto;padding:13px 20px;border-radius:12px;font-size:15px;font-weight:800; letter-spacing:.09em;font-family:var(--fT);color:#08210f;text-transform:uppercase;margin-bottom:2px; border:1px solid transparent;position:relative;overflow:hidden; background:linear-gradient(180deg,#b6ffd4,#4fe08c 45%,#25b464 55%,#8dffbc) padding-box, linear-gradient(160deg,#d8ffe8,#2bd672 40%,#0d5a2e 70%,#8dffbc) border-box; box-shadow:0 4px 18px rgba(45,225,120,.4),inset 0 1px 0 rgba(255,255,255,.55); clip-path:polygon(12px 0,calc(100% - 12px) 0,100% 12px,100% calc(100% - 12px),calc(100% - 12px) 100%,12px 100%,0 calc(100% - 12px),0 12px); animation:depPulse 1.5s ease-in-out infinite} #deployBtn:active{transform:scale(.96)} #deployBtn.bad{color:#2a0c06; background:linear-gradient(180deg,#ffc0b0,#e0705a 45%,#b0402c 55%,#ffb0a2) padding-box,var(--redB) border-box; box-shadow:0 4px 14px rgba(255,93,67,.35);animation:none} @keyframes depPulse{0%,100%{box-shadow:0 4px 18px rgba(45,225,120,.35),inset 0 1px 0 rgba(255,255,255,.55)} 50%{box-shadow:0 4px 26px rgba(45,225,120,.75),inset 0 1px 0 rgba(255,255,255,.6)}} .grpBtn{min-width:44px;height:48px;flex:1 1 0;font-family:var(--fT);font-size:11px;font-weight:800;gap:1px;padding:3px 4px} .camBtn{min-width:44px;min-height:44px;height:auto;font-size:9.5px} .camBtn .em{font-size:16px} .grpBtn .pId{font-size:16px;letter-spacing:0;line-height:1;font-weight:900;color:#d8ebf7} .grpBtn b{font-size:9px;color:#8be8ff;font-weight:800;line-height:1;font-style:normal} .grpBtn.saved{border-color:rgba(65,200,255,.55);box-shadow:0 0 9px rgba(65,200,255,.2)} .grpBtn.saved .pId{color:#8be8ff} .grpBtn.active{color:#fff;background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box,var(--goldB) border-box; box-shadow:0 0 13px rgba(255,210,87,.4),inset 0 1px 0 rgba(255,255,255,.2)} .grpBtn.active .pId{color:#fff} #grpRow{align-items:stretch;gap:4px} .pltLabel{flex:0 0 auto;display:flex;align-items:center;align-self:stretch;color:#8be8ff; font:800 8px/1 var(--fT);letter-spacing:.16em;text-transform:uppercase;padding:0 7px;white-space:nowrap; border:1px solid rgba(98,177,222,.28); background:linear-gradient(180deg,rgba(15,30,46,.94),rgba(7,16,27,.97)); clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px); pointer-events:none;user-select:none} /* Unit stacks are a takeover inside the existing PLATOONS row, not another battlefield drawer. P1-P4 keep their match-memory authority while the remaining width becomes a finger-stable, horizontally panning type rail. */ #grpRow.mfUnitStackReady>.grpBtn{flex:0 0 44px} #grpRow.mfUnitStackReady>#modeBtn{flex:0 0 54px} #mfUnitStackRail{display:none;flex:1 1 112px;min-width:96px;height:48px;align-items:stretch;gap:4px; overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;scroll-padding-inline:1px; scrollbar-width:none;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;touch-action:pan-x} #mfUnitStackRail::-webkit-scrollbar{display:none} .mfUnitStackCard{position:relative;flex:0 0 82px;width:82px;min-width:82px;height:48px;min-height:44px; display:grid;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:3px;padding:3px; overflow:hidden;scroll-snap-align:start;touch-action:pan-x;pointer-events:auto;color:#dff7ff; border:1px solid rgba(91,174,218,.34);border-radius:8px; background:linear-gradient(180deg,rgba(17,38,56,.94),rgba(5,17,28,.98)); box-shadow:inset 0 1px rgba(255,255,255,.07);font-family:var(--fT);text-align:left} .mfUnitStackCard:focus-visible{outline:2px solid #8be8ff;outline-offset:-2px} .mfUnitStackCard.selected{border-color:#4ed5ff;background:linear-gradient(180deg,rgba(20,86,124,.98),rgba(5,33,54,.99)); box-shadow:0 0 9px rgba(61,201,248,.24),inset 0 1px rgba(255,255,255,.12)} .mfUnitStackCard.partial{border-color:rgba(255,210,87,.72)} .mfUnitStackIcon{width:34px;height:34px;display:grid;place-items:center;overflow:hidden;pointer-events:none} .mfUnitStackIcon>*{max-width:34px;max-height:34px} .mfUnitStackFallback{font-size:19px;line-height:1;color:#83dfff} .mfUnitStackCopy{min-width:0;height:100%;display:flex;flex-direction:column;justify-content:center;gap:2px;pointer-events:none} .mfUnitStackName{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; color:#e5f8ff;font:900 8px/1.05 var(--fT);letter-spacing:.025em;text-transform:uppercase} .mfUnitStackMeta{display:flex;justify-content:space-between;align-items:center;gap:2px;color:#88bad0; font:800 7px/1 var(--fT);font-variant-numeric:tabular-nums} .mfUnitStackCount{color:#8be8ff;font:900 9px/1 var(--fT)} .mfUnitStackReady{font:800 7px/1 var(--fT);color:#8bb0c2} .mfUnitStackCard.ready .mfUnitStackReady{color:#72e0a1} .mfUnitStackHealth{display:block;width:100%;height:3px;overflow:hidden;border-radius:2px;background:rgba(0,0,0,.66)} .mfUnitStackHealthFill{display:block;height:100%;min-width:1px;background:linear-gradient(90deg,#40d77c,#b9ef70); box-shadow:0 0 4px rgba(88,226,134,.35)} /* ---------- SELECTION INFO ---------- */ #selInfo{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(var(--sab) + 6px);z-index:9; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; border-radius:10px;padding:2px 2px 2px 10px;font-size:13px;font-weight:600;min-height:44px; display:none;align-items:center;text-align:left;max-width:60%;pointer-events:auto;box-shadow:0 3px 10px rgba(0,0,0,.55)} #selInfo .selIntelCopy{display:flex;flex:1 1 auto;min-width:0;flex-direction:column;justify-content:center;line-height:1.25} #selInfo .selIntelCopy b{font:800 9px/1.25 var(--fT);color:#8be8ff;letter-spacing:.08em} #selInfo .selIntelCopy span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#d8ebf7} #selInfo .selIntelBtn{flex:0 0 44px;width:44px;height:44px;border:0;border-left:1px solid rgba(112,170,208,.22); color:#8be8ff;background:transparent;font-size:19px;border-radius:0 9px 9px 0;pointer-events:auto} #selInfo .selIntelBtn:active{background:rgba(65,200,255,.15);transform:scale(.94)} /* ---------- BUILD / PROD MENUS ---------- */ #buildMenu,#prodMenu{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(var(--sab) + 68px);z-index:11; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; border-radius:14px;padding:9px;display:none;box-shadow:0 8px 26px rgba(0,0,0,.65),inset 0 1px 0 rgba(255,255,255,.09); width:max-content;max-width:min(96vw,398px);max-height:min(56vh,56dvh);overflow-y:auto;-webkit-overflow-scrolling:touch; clip-path:polygon(14px 0,calc(100% - 14px) 0,100% 14px,100% calc(100% - 14px),calc(100% - 14px) 100%,14px 100%,0 calc(100% - 14px),0 14px)} .mfPanelChrome{position:sticky;top:-9px;z-index:12;display:flex;align-items:center;justify-content:space-between; height:44px;margin:-9px -9px 7px;padding:0 4px 0 13px;border-bottom:1px solid rgba(98,177,222,.25); background:linear-gradient(180deg,rgba(15,30,46,.99),rgba(7,16,27,.98));box-shadow:0 5px 12px rgba(0,0,0,.3)} .mfPanelChrome>span{color:#8be8ff;font:800 9px/1 var(--fT);letter-spacing:.14em} .mfPanelChrome>button{display:grid;place-items:center;width:44px;height:44px;min-width:44px;border:0;border-left:1px solid rgba(98,177,222,.2); color:#d8efff;background:transparent;font:400 27px/1 var(--fU);pointer-events:auto} .mfPanelChrome>button:active{color:#fff;background:rgba(65,200,255,.16);transform:scale(.93)} #buildMenu .grid,#prodMenu .grid{display:flex;gap:7px;flex-wrap:wrap;justify-content:center} .menuRoleBrief{position:relative;display:grid;grid-template-columns:112px minmax(0,1fr);min-height:116px; margin:7px 0 9px;overflow:hidden;border-radius:11px;border:1px solid rgba(88,189,238,.27); background:linear-gradient(115deg,rgba(15,39,60,.96),rgba(8,18,30,.98)); box-shadow:inset 0 1px 0 rgba(255,255,255,.07),0 4px 13px rgba(0,0,0,.3)} .menuRoleBrief::after{content:'';position:absolute;inset:0;pointer-events:none;background: linear-gradient(105deg,transparent 48%,rgba(65,200,255,.04) 48.5%,transparent 49%), radial-gradient(circle at 88% 10%,rgba(65,200,255,.13),transparent 45%)} .menuRoleVisual{min-width:0;min-height:116px;border-right:1px solid rgba(88,189,238,.2);z-index:1} .menuRoleVisual .mfIntelPreview{height:100%;min-height:116px;border:0;border-radius:0;background:transparent} .menuRoleVisual .mfIntelPreviewTag{font-size:9px;top:5px;left:5px} .menuRoleCopy{position:relative;z-index:2;min-width:0;padding:8px 9px 7px;display:flex;flex-direction:column;align-items:flex-start} .menuRoleEyebrow{width:100%;display:flex;align-items:center;gap:5px;color:#7fdfff; font:800 9px/1 var(--fT);letter-spacing:.1em;text-transform:uppercase} .menuRoleEyebrow>b{margin-left:auto;color:#7c9bb0;font-size:9px;white-space:nowrap} .menuRoleCopy>strong{margin-top:6px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; color:#effaff;font:800 13px/1 var(--fT);letter-spacing:.08em;text-transform:uppercase} .menuRoleCopy>p{margin:5px 0 0;color:#b9cedc;font-size:9px;line-height:1.3} .menuRoleDoctrine{margin-top:5px;color:#ffd66f;font:800 9px/1.2 var(--fT);letter-spacing:.055em} .menuRoleDoctrine>span{margin-right:5px;color:#6f9bb6} .menuRoleCopy>small{margin-top:4px;color:#f0a99b;font-size:9px;line-height:1.2} /* INSPECT is one of the first things a new player taps and it was a 31px target — 27px once the primary panel opened — against a 44px iOS / 48dp Android minimum. */ .menuRoleInspect{margin-top:auto;min-height:44px;padding:5px 9px;border-radius:6px;color:#9eeaff; border:1px solid rgba(95,198,244,.32);background:rgba(24,66,91,.62);font:800 9px/1 var(--fT);letter-spacing:.08em} .menuRoleInspect:active{background:rgba(45,114,151,.84);transform:scale(.97)} .bcard{width:84px;border-radius:10px;padding:6px 3px 5px;display:flex;flex-direction:column;align-items:center;gap:2px; font-size:10.5px;pointer-events:auto;position:relative;overflow:hidden; border:1px solid transparent;background:linear-gradient(180deg,rgba(30,46,64,.95),rgba(13,21,33,.97)) padding-box,var(--steelB) border-box; box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 2px 6px rgba(0,0,0,.4)} .bcard::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 50% 30%,rgba(65,200,255,.14),transparent 65%);pointer-events:none} .bcard .em{font-size:24px;height:46px;display:flex;align-items:center;justify-content:center} .bcard .icw{position:relative;height:46px;display:flex;align-items:center;justify-content:center} .bcard .nm{font-weight:700;font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:#eaf7ff;line-height:1.1; width:100%;text-align:center;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;word-break:break-word} .bcard .cost{color:var(--green);font-size:10.5px;font-weight:700;font-variant-numeric:tabular-nums} .bcard .cost span{color:var(--gold)} .bcard:active{transform:scale(.95)} .bcard.locked{filter:grayscale(.85) brightness(.7)} .bcard.locked .lockOv{position:absolute;top:6px;right:6px;font-size:14px;filter:none;z-index:2} .bcard .cardPurpose{min-height:18px;color:#9fd8f4;font:700 9px/1.25 var(--fT);letter-spacing:.04em;text-align:center; display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden} .bcard .cardDesc{min-height:22px;color:#9fb5c5;font-size:9px;line-height:1.25;opacity:.78;text-align:center; display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden} .bcard .cardMeta{position:relative;z-index:1;width:100%;display:flex;align-items:flex-start;justify-content:space-between;gap:4px; color:#a8bfd0;font:700 9.5px/1.3 var(--fT);letter-spacing:.015em;text-transform:uppercase;flex-wrap:wrap} .bcard .cardMeta span{min-width:0;flex:1 1 62px;overflow:visible;white-space:normal;overflow-wrap:anywhere} .bcard .cardDependency,.bcard .cardEffect,.bcard .cardLocks{position:relative;z-index:1;width:100%;padding:3px 4px;border-radius:5px; font:700 9.5px/1.35 var(--fT);letter-spacing:.015em;text-align:left;overflow-wrap:anywhere} .bcard .cardDependency{color:#87ccea;background:rgba(20,67,91,.34)} .bcard .cardEffect{color:#a4efc3;background:rgba(22,79,53,.32)} .bcard .cardLocks{color:#ffd27a;background:rgba(104,72,18,.38)} .bcard .cardQueueLock[hidden]{display:none!important} .ucDependency{margin-top:7px;padding:6px 8px;border-radius:7px;color:#a9dff5;background:rgba(18,60,83,.42); border:1px solid rgba(91,183,226,.22);font:800 9px/1.35 var(--fT);letter-spacing:.05em} #economyIntel .econGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-top:8px} #economyIntel .econResource{display:grid;gap:4px;padding:8px;border-radius:8px;border:1px solid rgba(87,178,220,.24); background:rgba(3,11,19,.5)} #economyIntel .econResource>b{color:#91e4ff;font:900 10px/1.2 var(--fT);letter-spacing:.08em} #economyIntel .econResource>span{display:flex;justify-content:space-between;gap:6px;color:#829daf; font:700 10px/1.3 var(--fT);letter-spacing:.035em} #economyIntel .econResource strong{color:#e8f6ff;font-weight:900;text-align:right} #economyIntel .econResource strong.good{color:#79efaa}#economyIntel .econResource strong.bad{color:#ff8f80} #economyIntel .econForecast{margin-top:2px;padding-top:5px;border-top:1px solid rgba(91,171,210,.17)} #economyIntel .econBottleneck{display:flex;flex-direction:column;gap:3px;margin-top:7px;padding:7px 8px;border-radius:7px; background:rgba(100,67,18,.34);border:1px solid rgba(255,199,78,.25)} #economyIntel .econBottleneck span{color:#d5a942;font:800 9.5px/1 var(--fT);letter-spacing:.08em} #economyIntel .econBottleneck b{color:#ffe2a0;font:800 10px/1.35 var(--fT);letter-spacing:.02em} .bcard .cardIntel{position:absolute;top:-4px;right:-4px;z-index:4;width:44px;height:44px;border:0;background:transparent; color:transparent;font-size:0;pointer-events:auto;padding:0} .bcard .cardIntel::after{content:'i';position:absolute;top:8px;right:8px;width:20px;height:20px;border-radius:50%; display:flex;align-items:center;justify-content:center;color:#8be8ff;background:rgba(8,25,39,.9); border:1px solid rgba(100,190,235,.55);font:800 12px/1 var(--fU);box-shadow:0 1px 4px rgba(0,0,0,.55)} .bcard .cardIntel:active::after{color:#fff;background:rgba(42,115,154,.95);transform:scale(.9)} .bcard.locked .lockOv{left:6px;right:auto} .bcard.locked .lockOv.navalX{display:grid;place-items:center;width:28px;height:28px;border-radius:50%; color:#ff5c55;background:rgba(49,8,12,.94);border:1px solid rgba(255,92,85,.8); font:900 19px/1 var(--fT);box-shadow:0 0 13px rgba(255,54,45,.42)} #bp_ic.intelTap{position:relative;min-width:52px;min-height:52px;pointer-events:auto;cursor:pointer} #bp_ic.intelTap::after{content:'i';position:absolute;right:-3px;bottom:-3px;width:21px;height:21px;border-radius:50%; display:flex;align-items:center;justify-content:center;color:#8be8ff;background:#0a1a29;border:1px solid rgba(100,190,235,.62); font:800 12px/1 var(--fU)} #prodMenu .queue{font-size:11px;text-align:center;margin-top:6px;opacity:.92;font-weight:600} #prodMenu .queue.empty{padding:8px 4px} .qRow{display:flex;gap:6px;overflow-x:auto;padding:2px 0 4px;touch-action:pan-x;justify-content:flex-start;-webkit-overflow-scrolling:touch} .qPlate{flex:0 0 auto;position:relative;width:64px;min-width:64px;min-height:64px;padding:4px 3px 10px;border-radius:9px; display:flex;flex-direction:column;align-items:center;gap:1px;pointer-events:auto;color:#eaf7ff; border:1px solid transparent;background:linear-gradient(180deg,rgba(30,46,64,.95),rgba(13,21,33,.97)) padding-box,var(--steelB) border-box} .qPlate.active{box-shadow:0 0 0 1px rgba(93,255,154,.5)} .qPlate:active{transform:scale(.94)} .qIc{height:36px;display:grid;place-items:center} .qNm{font:700 8px/1.1 var(--fT);letter-spacing:.04em;text-transform:uppercase;max-width:58px; overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .qN{position:absolute;top:2px;right:2px;min-width:22px;height:22px;padding:0 4px;border-radius:6px; display:grid;place-items:center;background:rgba(8,22,36,.92);border:1px solid rgba(93,255,154,.5); color:#9fffc4;font:800 11px/1 var(--fT)} .qBar{position:absolute;left:4px;right:4px;bottom:3px;height:3px;width:0;background:#5dff9a;border-radius:2px} .qAdj{margin-top:4px;color:#ffe291;font:700 9px/1 var(--fT);letter-spacing:.06em} /* Build-time tag on a unit card cost line, and the queue ETA readout. Muted against the green cost so cost stays the primary number. */ .bcard .cost .qEta{color:#9fb8cc;font-weight:600} .qEtaLine{color:#5dff9a} #repeatBtn,#upBtn{margin-top:6px;width:100%;height:44px;min-height:44px;border-radius:8px;color:#dfeeff;font-size:12px;font-weight:700;letter-spacing:.08em; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box;font-family:var(--fU);text-transform:uppercase} #upBtn{color:var(--gold);background:linear-gradient(180deg,rgba(64,48,14,.95),rgba(30,22,6,.97)) padding-box,var(--goldB) border-box} #repeatBtn.on{color:var(--green);box-shadow:0 0 9px rgba(93,255,154,.35)} @media(max-width:365px){ .menuRoleBrief{grid-template-columns:96px minmax(0,1fr)} .menuRoleCopy>p{font-size:9px}.menuRoleCopy>small{display:none} } @media(max-width:600px) and (orientation:portrait){ /* Measured at 412x900 in a live match: the panel resolved to 306px while the sticky header (44px) and the role brief (105px) consumed 149px of it, so only one 84px row of structures was reachable without scrolling. Give the deck more of the screen and stop the brief from taking half the panel: it is context for the cards, not a substitute for seeing them. */ #buildMenu,#prodMenu{width:calc(100vw - var(--sal) - var(--sar) - 12px);max-width:398px} #buildMenu .menuRoleBrief,#prodMenu .menuRoleBrief{min-height:0;margin:5px 0 7px; grid-template-columns:76px minmax(0,1fr)} #buildMenu .menuRoleBrief .menuRoleCopy>p,#prodMenu .menuRoleBrief .menuRoleCopy>p{ -webkit-line-clamp:2;line-clamp:2} #buildMenu .grid,#prodMenu .grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;align-items:stretch} #buildMenu .bcard,#prodMenu .bcard{width:auto;min-width:0;align-items:stretch;padding:8px;gap:4px;text-align:left} #buildMenu .bcard .icw,#prodMenu .bcard .icw{align-self:center} #buildMenu .bcard .nm,#prodMenu .bcard .nm{text-align:left;font-size:11px;min-height:24px;padding-right:24px} #buildMenu .bcard .cost,#prodMenu .bcard .cost{text-align:left;font-size:11px} #buildMenu .bcard .cardPurpose,#prodMenu .bcard .cardPurpose, #buildMenu .bcard .cardDesc,#prodMenu .bcard .cardDesc{text-align:left;-webkit-line-clamp:3} #buildMenu .bcard .cardPurpose,#prodMenu .bcard .cardPurpose{min-height:30px} #economyIntel .econGrid{grid-template-columns:1fr} } /* ---------- PLACEMENT CONFIRM ---------- */ #placeUI{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(var(--sab) + 68px);z-index:12;display:none;gap:12px} #placeUI .cbtn{width:62px;height:62px;font-size:26px;position:relative} #placeRotL,#placeRotR{width:52px;height:52px;font-size:22px;align-self:center;color:#8be8ff} #placeRotDeg{position:absolute;left:0;right:0;bottom:3px;font-size:max(9px,var(--mfHudTextMeta,8px));font-family:var(--fU);letter-spacing:.04em;opacity:.75} #placeOk{background:linear-gradient(180deg,rgba(20,64,40,.96),rgba(8,30,18,.97)) padding-box,linear-gradient(160deg,#b6ffd4,#2bd672 40%,#0d5a2e 70%,#6dffa8) border-box!important;color:var(--green)} #placeNo{background:linear-gradient(180deg,rgba(66,22,14,.96),rgba(32,10,6,.97)) padding-box,var(--redB) border-box!important;color:var(--red)} /* ---------- BUILDING PANEL ---------- */ #bldMenu2{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(var(--sab) + 68px);z-index:11;display:none; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; border-radius:14px;padding:10px 14px;width:max-content;max-width:min(92vw,340px);text-align:center; box-shadow:0 8px 26px rgba(0,0,0,.65);clip-path:polygon(12px 0,calc(100% - 12px) 0,100% 12px,100% calc(100% - 12px),calc(100% - 12px) 100%,12px 100%,0 calc(100% - 12px),0 12px)} #bldMenu2>.mfPanelChrome{top:-10px;margin:-10px -14px 8px;text-align:left} #bp_head{display:flex;align-items:center;gap:10px;justify-content:center} #bp_ic{flex:0 0 auto} #bp_title{font-weight:800;font-size:15px;color:#eaf7ff;font-family:var(--fT);letter-spacing:.06em;text-transform:uppercase} #bp_desc{font-size:12px;opacity:.88;margin-top:2px;font-weight:600} #bp_stats{margin-top:7px;padding:6px 8px;border-radius:7px;color:#bdeeff;background:rgba(17,55,76,.72); border:1px solid rgba(84,202,255,.28);font:700 10px/1.35 var(--fU);letter-spacing:.045em} #bp_delta{margin-top:6px;padding:6px 8px;border-radius:7px;color:#ffe49b;background:rgba(66,48,13,.58); border:1px solid rgba(255,208,87,.28);font:700 9.5px/1.45 var(--fU);letter-spacing:.035em} #bp_up{display:none;margin-top:8px;width:100%;min-height:44px;border-radius:8px;color:var(--gold);font-size:12px;font-weight:700;padding:8px 9px; border:1px solid transparent;background:linear-gradient(180deg,rgba(64,48,14,.95),rgba(30,22,6,.97)) padding-box,var(--goldB) border-box; font-family:var(--fU);letter-spacing:.05em} #bp_sell,#bp_prio,#bp_fire{margin-top:6px;width:100%;height:44px;min-height:44px;border-radius:8px;color:#9fc6e0;font-size:12px;font-weight:700; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box;font-family:var(--fU)} #bp_prio{color:#8be8ff} #bp_fire{color:#1c1403;height:44px;font-weight:800;letter-spacing:.06em; background:linear-gradient(180deg,#ffe9a3,#e8bd5c 45%,#c9973b 55%,#f2cf78) padding-box,var(--goldB) border-box} #bp_fire:disabled{color:#8a7a4a;background:var(--panelG2) padding-box,var(--steelB) border-box} .bldServiceActions{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr);gap:8px;margin-top:8px;width:100%} .bldServiceActions .bldServiceBtn{box-sizing:border-box;width:auto;height:auto;min-height:48px;margin:0;padding:8px 10px;border:1px solid transparent; border-radius:9px;font:900 11px/1.15 var(--fT);letter-spacing:.065em;white-space:normal;touch-action:manipulation} .bldServiceRepair{color:#87edff!important;background:linear-gradient(180deg,rgba(10,59,82,.98),rgba(4,25,39,.98)) padding-box, linear-gradient(145deg,#aaf5ff,#26c8f3 52%,#126995) border-box!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 0 12px rgba(39,199,244,.1)} .bldServiceRepair[data-state="repairing"]{color:#d7fbff!important;box-shadow:inset 0 0 12px rgba(50,212,255,.18),0 0 15px rgba(39,199,244,.18)} .bldServiceRepair[data-state="stalled"]{color:#ffe39a!important;background:linear-gradient(180deg,rgba(72,51,13,.98),rgba(34,24,6,.98)) padding-box,var(--goldB) border-box!important} .bldServiceRepair[data-state="under-fire"]{color:#ffc08d!important;background:linear-gradient(180deg,rgba(75,31,14,.98),rgba(37,14,7,.98)) padding-box, linear-gradient(145deg,#ffc175,#ef6c34 55%,#84200d) border-box!important} .bldServiceRepair[data-state="full"]{color:#8cebb4!important;background:linear-gradient(180deg,rgba(16,57,38,.9),rgba(7,29,19,.94)) padding-box, linear-gradient(145deg,#b9f6cf,#3fc77d 52%,#1b6b42) border-box!important} .bldServiceActions .bldServiceRepair:disabled{opacity:.72} .bldServiceRecycle{color:#ffd98a!important;background:linear-gradient(180deg,rgba(65,45,13,.96),rgba(31,22,7,.98)) padding-box,var(--goldB) border-box!important} .bldServiceRecycle[data-armed="true"]{color:#ff9e9e!important;background:linear-gradient(180deg,rgba(81,20,24,.98),rgba(38,8,12,.99)) padding-box, linear-gradient(145deg,#ff9b9b,#ff4653 52%,#86141d) border-box!important;box-shadow:inset 0 0 12px rgba(255,65,79,.18),0 0 14px rgba(255,50,65,.14)} #prodMenu>.bldServiceActions{position:sticky;bottom:-9px;z-index:3;margin:8px -1px -1px;padding:7px 1px 1px; background:linear-gradient(180deg,rgba(5,12,20,0),rgba(5,12,20,.97) 36%)} /* One selected structure and its same-type network share an upgrade rail. The two actions remain distinct without turning the compact service sheet into a second menu, and every reason wraps instead of disappearing into a title. */ .bldUpgradePanel{position:relative;margin-top:8px;padding:7px 2px 8px;display:grid;gap:5px;min-width:0; border-top:1px solid rgba(255,211,91,.38);border-bottom:1px solid rgba(69,180,221,.24); background:linear-gradient(90deg,rgba(66,45,9,.18),rgba(4,24,36,.1) 56%,rgba(21,80,103,.13))} .bldUpgradePanel:before,.bldUpgradePanel:after{content:"";position:absolute;width:18px;height:8px;pointer-events:none} .bldUpgradePanel:before{left:0;top:-1px;border-left:2px solid #ffd75c;border-top:2px solid #ffd75c} .bldUpgradePanel:after{right:0;bottom:-1px;border-right:2px solid #55d7ff;border-bottom:2px solid #55d7ff} .bldUpgradeHead{min-width:0;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 5px;color:#83b9ce; font:800 8px/1.1 var(--fT);letter-spacing:.13em} .bldUpgradeHead b{min-width:0;color:#ffe17b;font-size:10px;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .bldUpgradeCensus{min-width:0;padding:0 5px;color:#a9c9d8;font:800 8px/1.3 var(--fU);letter-spacing:.035em;overflow-wrap:anywhere} .bldUpgradeActions{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:6px;min-width:0} .bldUpgradePanel .bldUpgradeBtn{box-sizing:border-box;width:auto;height:auto;min-width:0;min-height:56px;margin:0;padding:7px 6px; display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;border:1px solid transparent;border-radius:7px; text-align:left;white-space:normal;overflow-wrap:anywhere;overflow:hidden;touch-action:manipulation} .bldUpgradePanel .bldUpgradeBtn strong{max-width:100%;color:inherit;font:900 10px/1.1 var(--fT);letter-spacing:.055em;white-space:normal} .bldUpgradePanel .bldUpgradeBtn small{max-width:100%;color:#b8cbd5;font:800 7.5px/1.25 var(--fU);letter-spacing:.02em;white-space:normal;overflow-wrap:anywhere} .bldUpgradePanel #bp_up,.bldUpgradePanel #upBtn{color:#ffe17a;background:linear-gradient(150deg,rgba(83,57,10,.82),rgba(30,23,7,.72)) padding-box, linear-gradient(145deg,#fff0a0,#d79c24 58%,#74500d) border-box} .bldUpgradePanel .bldUpgradeAll{color:#89eaff;background:linear-gradient(150deg,rgba(11,67,89,.78),rgba(4,28,43,.7)) padding-box, linear-gradient(145deg,#bff8ff,#2ec9f0 56%,#0b668e) border-box} .bldUpgradePanel .bldUpgradeBtn:disabled{opacity:.64;filter:saturate(.48);box-shadow:none} .bldUpgradeReason{min-width:0;padding:0 5px;color:#f1b482;font:800 7.5px/1.3 var(--fU);letter-spacing:.025em;overflow-wrap:anywhere} .bldUpgradePanel.is-legacy{padding:0;border:0;background:none}.bldUpgradePanel.is-legacy:before,.bldUpgradePanel.is-legacy:after{display:none} .bldUpgradePanel.is-legacy .bldUpgradeActions{grid-template-columns:1fr} .bldActivityRail{position:relative;display:grid;grid-template-columns:7px minmax(0,1fr) auto;align-items:center;gap:6px; min-width:0;margin:7px 0 5px;padding:4px 5px 8px;border-top:1px solid rgba(112,176,204,.28); color:#9eb7c3;background:linear-gradient(90deg,rgba(6,22,32,.42),rgba(6,22,32,.08) 82%,transparent)} .bldActivityMark{width:6px;height:6px;transform:rotate(45deg);background:#758e9a;box-shadow:0 0 7px rgba(117,142,154,.45)} .bldActivityRail>b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:900 9px/1.1 var(--fT);letter-spacing:.08em} .bldActivityRail>span{white-space:nowrap;font:900 8px/1 var(--fU);letter-spacing:.04em} .bldActivityTrack{position:absolute;left:5px;right:5px;bottom:2px;height:3px;overflow:hidden;background:rgba(3,8,13,.82)} .bldActivityTrack>i{display:block;width:100%;height:100%;transform-origin:left center;background:#758e9a;transition:transform .12s linear} .bldActivityRail[data-kind="constructing"]{color:#ffd16b}.bldActivityRail[data-kind="constructing"] .bldActivityMark,.bldActivityRail[data-kind="constructing"] .bldActivityTrack>i{background:#f0b73e} .bldActivityRail[data-kind="producing"]{color:#8eeaff}.bldActivityRail[data-kind="producing"] .bldActivityMark,.bldActivityRail[data-kind="producing"] .bldActivityTrack>i{background:#39c9ed} .bldActivityRail[data-kind="upgrading"]{color:#d6a7ff}.bldActivityRail[data-kind="upgrading"] .bldActivityMark,.bldActivityRail[data-kind="upgrading"] .bldActivityTrack>i{background:#ad72e9} .bldActivityRail[data-kind="researching"]{color:#9af2b9}.bldActivityRail[data-kind="researching"] .bldActivityMark,.bldActivityRail[data-kind="researching"] .bldActivityTrack>i{background:#55d984} .bldActivityRail[data-state="stalled"]{color:#ff9c83}.bldActivityRail[data-state="stalled"] .bldActivityMark,.bldActivityRail[data-state="stalled"] .bldActivityTrack>i{background:#ff624d} @media(max-width:360px){.bldServiceActions{gap:6px}.bldServiceActions .bldServiceBtn{padding:7px 6px;font-size:10px}} @media(max-width:360px){.bldUpgradePanel .bldUpgradeBtn strong{font-size:9px}.bldUpgradePanel .bldUpgradeBtn small,.bldUpgradeCensus,.bldUpgradeReason{font-size:7px}} html:is([data-mf-text-scale="150"],[data-mf-text-scale="200"]) .bldUpgradeActions{grid-template-columns:1fr} html:is([data-mf-text-scale="150"],[data-mf-text-scale="200"]) .bldUpgradePanel .bldUpgradeBtn{min-height:60px} html:is([data-mf-text-scale="150"],[data-mf-text-scale="200"]) .bldActivityRail{grid-template-columns:7px minmax(0,1fr);row-gap:3px} html:is([data-mf-text-scale="150"],[data-mf-text-scale="200"]) .bldActivityRail>span{grid-column:2;white-space:normal;overflow-wrap:anywhere} /* ---------- COMMANDER LOCATOR ---------- */ /* Identity, live condition and the fastest route back to the Commander share one top-left chip. This is a navigation control, not a decorative XP strip. */ #heroBar{position:fixed;top:calc(var(--sat) + 62px);left:calc(var(--sal) + 8px);z-index:9;width:min(232px,54vw);min-height:60px;box-sizing:border-box; pointer-events:auto;display:none;align-items:center;gap:7px;white-space:nowrap;cursor:pointer;overflow:hidden; border:1px solid transparent;background:linear-gradient(145deg,rgba(11,25,38,.96),rgba(5,12,21,.94)) padding-box,var(--steelB) border-box;border-radius:10px;padding:5px 7px; box-shadow:0 4px 14px rgba(0,0,0,.52),inset 0 1px 0 rgba(255,255,255,.08)} #heroBar:active{transform:translateY(1px)} #heroPortrait{position:relative;width:48px;height:48px;flex:0 0 48px;display:grid;place-items:center;overflow:hidden;border-radius:8px;border:1px solid rgba(119,213,249,.5);background:radial-gradient(circle at 50% 32%,rgba(63,147,192,.48),rgba(5,14,23,.95));box-shadow:0 0 10px rgba(59,191,242,.18)} #heroPortraitImg{position:absolute;inset:0;width:100%;height:100%;display:none;object-fit:cover;object-position:center 18%} #heroPortraitFallback{display:grid;place-items:center;color:#bfeeff;font:900 20px/1 var(--fT);font-style:normal} #heroRankEm{position:absolute;right:1px;bottom:1px;display:grid;place-items:center;min-width:16px;height:16px;padding:0 2px;border-radius:5px;background:rgba(3,9,15,.9);font-size:10px;line-height:1;filter:drop-shadow(0 0 5px rgba(255,210,87,.5))} .heroProfileBody{display:flex;min-width:0;flex:1;flex-direction:column;gap:2px}.heroProfileHead{display:flex;min-width:0;align-items:center;justify-content:space-between;gap:6px} #heroNameTxt{min-width:0;overflow:hidden;text-overflow:ellipsis;color:#eaf8ff;font:900 10px/1.1 var(--fT);letter-spacing:.08em} #heroLvlTxt{flex:0 0 auto;color:var(--gold);font:800 8px/1 var(--fT);letter-spacing:.06em} #heroCallsignTxt{overflow:hidden;text-overflow:ellipsis;color:#79cbe8;font:800 7px/1 var(--fT);letter-spacing:.1em} .heroVital{display:grid;grid-template-columns:15px minmax(36px,1fr) 27px;align-items:center;gap:3px}.heroVital small{color:#7c9aae;font:800 6.5px/1 var(--fT)}.heroVital>b{color:#a9cadc;text-align:right;font:800 6.5px/1 var(--fT)} .heroBarOuter,#xpOuter{height:4px;overflow:hidden;border-radius:3px;border:1px solid rgba(101,162,193,.3);background:rgba(0,0,0,.65)} #heroHpFill,#xpFill{display:block;height:100%;width:0%;border-radius:2px;transition:width .16s linear} #heroHpFill{background:linear-gradient(90deg,#32af71,#78e5a5);box-shadow:0 0 5px rgba(73,219,139,.5)} #xpFill{background:linear-gradient(90deg,#c9973b,var(--gold),#ffef9a);box-shadow:0 0 5px rgba(255,210,87,.6)} #heroBar.heroCritical{border-color:#ff6d62;background:linear-gradient(145deg,rgba(61,22,24,.96),rgba(18,10,16,.96));animation:heroCriticalPulse 1s ease-in-out infinite alternate} #heroBar.heroCritical #heroHpFill{background:linear-gradient(90deg,#e53f3f,#ff8a72)} @keyframes heroCriticalPulse{to{box-shadow:0 0 16px rgba(255,75,69,.34),inset 0 1px 0 rgba(255,255,255,.08)}} /* ---------- OVERLAYS ---------- */ .overlay{position:absolute;inset:0;z-index:50;background:rgba(3,7,14,.9);display:flex;align-items:center;justify-content:center; flex-direction:column;text-align:center; padding:max(20px,calc(var(--sat) + 12px)) max(20px,calc(var(--sar) + 20px)) max(20px,calc(var(--sab) + 20px)) max(20px,calc(var(--sal) + 20px)); backdrop-filter:blur(6px);overflow-y:auto;-webkit-overflow-scrolling:touch} #startScreen{background: radial-gradient(ellipse at 50% -10%,rgba(28,68,104,.6),transparent 60%), radial-gradient(ellipse at 50% 115%,rgba(96,58,14,.32),transparent 55%), rgba(3,7,14,.94);justify-content:flex-start;padding-top:calc(var(--sat) + 12px)} #emblem{width:76px;height:76px;margin-top:8px;filter:drop-shadow(0 0 14px rgba(255,210,87,.35)) drop-shadow(0 4px 6px rgba(0,0,0,.6))} .title{font-family:var(--fT);font-size:min(10.5vw,52px);font-weight:900;letter-spacing:.1em; background:linear-gradient(180deg,#ffffff 8%,#cfe9ff 38%,#7fb8e0 52%,#eaf7ff 62%,#5d87a8 100%); -webkit-background-clip:text;background-clip:text;color:transparent; filter:drop-shadow(0 0 16px rgba(65,200,255,.55)) drop-shadow(0 2px 2px rgba(0,0,0,.8))} .subtitle{font-size:12px;letter-spacing:.42em;color:var(--gold);margin-top:2px;font-weight:700;font-family:var(--fT); text-shadow:0 0 10px rgba(255,210,87,.4)} .mbtn{margin-top:13px;min-width:238px;min-height:48px;padding:13px 22px;border-radius:12px;font-size:16px;font-weight:700;letter-spacing:.1em; font-family:var(--fT);color:#1c1403;text-transform:uppercase;position:relative;overflow:hidden; border:1px solid transparent; background:linear-gradient(180deg,#ffe9a3,#e8bd5c 45%,#c9973b 55%,#f2cf78) padding-box,var(--goldB) border-box; box-shadow:0 4px 16px rgba(255,200,80,.28),inset 0 1px 0 rgba(255,255,255,.55); clip-path:polygon(13px 0,calc(100% - 13px) 0,100% 13px,100% calc(100% - 13px),calc(100% - 13px) 100%,13px 100%,0 calc(100% - 13px),0 13px)} .mbtn::after{content:'';position:absolute;top:0;bottom:0;width:46px;left:-60px;transform:skewX(-20deg);pointer-events:none; background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);animation:shine 3.4s ease-in-out infinite} @keyframes shine{0%,55%{left:-60px}85%,100%{left:130%}} .mbtn:active{transform:scale(.96)} .mbtn.alt{color:#dfeeff;background:var(--panelG2) padding-box,var(--steelB) border-box; box-shadow:0 3px 12px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.14); font-size:13.5px;min-width:238px;padding:11px 20px} .mbtn.alt::after{display:none} .diffRow{display:flex;gap:8px;margin-top:5px} .dbtn{padding:8px 15px;border-radius:9px;color:#9fc6e0;font-size:14px;font-weight:700;letter-spacing:.05em; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box; clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px)} .dbtn.on{color:#fff;background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box, linear-gradient(160deg,var(--cyL),var(--cy) 40%,var(--cyD) 70%,var(--cyL)) border-box; box-shadow:0 0 11px rgba(65,200,255,.45)} .hint{margin-top:16px;font-size:12.5px;line-height:1.65;color:#8fb3cc;max-width:350px;font-weight:600} .hint b{color:#cfe8ff} #gameOver{display:none;justify-content:flex-start;padding:0!important;overflow:hidden; background:radial-gradient(circle at 50% 0,rgba(31,73,105,.42),transparent 46%),rgba(3,7,14,.96)} .goResultScroll{width:min(calc(100% - var(--sal) - var(--sar) - 24px),430px);flex:1 1 auto;min-height:0; overflow-y:auto;overflow-x:hidden;padding:calc(var(--sat) + 22px) 2px 18px;text-align:center; -webkit-overflow-scrolling:touch;touch-action:pan-y;overscroll-behavior:contain} .goKicker{font-family:var(--fT);font-size:9px;letter-spacing:.24em;color:#78a9c8;text-transform:uppercase} #goTitle{font-size:clamp(29px,8.4vw,43px);line-height:1.06;margin-top:6px;letter-spacing:.04em} #goStats{margin-top:13px;color:#9fc6e0;font-weight:600} .goStatGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px} .goStatGrid>div,.goPayout>div,.goRes{min-width:0;padding:8px 4px;border-radius:9px; background:linear-gradient(180deg,rgba(26,42,60,.88),rgba(8,15,25,.9));border:1px solid rgba(112,165,201,.21)} .goStatGrid b,.goPayout b,.goRes b{display:block;color:#e7f5ff;font-family:var(--fT);font-size:13px;font-variant-numeric:tabular-nums} .goStatGrid span,.goPayout span,.goRes span{display:block;margin-top:3px;color:#7196af;font-size:9px;font-family:var(--fT);letter-spacing:.07em;line-height:1.25} #goChart{display:block;width:100%;height:112px;margin-top:8px;border-radius:10px;border:1px solid rgba(65,200,255,.26)} #goRewards{margin-top:8px;color:#cfe8ff;text-align:left} .goSection{margin-top:7px;padding:9px;border-radius:11px;background:rgba(8,17,29,.86);border:1px solid rgba(99,155,194,.22)} .goSection h3{display:flex;justify-content:space-between;gap:8px;margin-bottom:7px;font:800 9px var(--fT);letter-spacing:.18em;color:#8fcaec} .goSection h3 small{font-size:9px;color:#ff9b87;letter-spacing:.06em} .goPayout{display:grid;grid-template-columns:repeat(3,1fr);gap:6px} .goPayout b{font-size:17px;color:#ffe291}.goPayout span{font-size:9px} .goResourceGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px} .goRes b{font-size:12px;color:#a9f2cc}.goRes span{font-size:9px} .goLoot{--rar:#aeb9c6;display:flex;align-items:center;gap:9px;margin-top:6px;padding:8px 9px;border-radius:9px; background:linear-gradient(90deg,rgba(34,48,66,.96),rgba(8,15,25,.95)); border:1px solid rgba(130,165,194,.3);border-left:3px solid var(--rar)} .goLootEm{flex:0 0 31px;text-align:center;font-size:25px;color:var(--rar);filter:drop-shadow(0 0 6px var(--rar))} .goLoot div{min-width:0}.goLoot i{display:block;font:800 9px var(--fT);letter-spacing:.15em;color:var(--rar);font-style:normal} .goLoot b{display:block;margin-top:2px;font:800 12px var(--fT);color:#edf8ff}.goLoot small{display:block;margin-top:2px;font-size:9px;letter-spacing:.06em;color:#7697ae} .goNotice{margin-top:7px;padding:8px 10px;border-radius:9px;background:rgba(30,52,70,.68);font-size:10px;font-weight:700;color:#cde8fa;text-align:center} .goNotice.good{color:#9fffc4;border:1px solid rgba(93,255,154,.26)}.goNotice.bad{color:#ff9b8a;border:1px solid rgba(255,93,67,.25)} .goResultFoot{flex:0 0 auto;width:100%;padding:10px calc(var(--sar) + 18px) max(calc(var(--sab) + 12px),48px) calc(var(--sal) + 18px); background:linear-gradient(180deg,rgba(3,7,14,0),rgba(3,7,14,.98) 24%);display:flex;flex-direction:column;align-items:center;gap:8px} .goResultFoot .mbtn{width:min(100%,400px);margin:0;min-height:48px} .goResultFoot .mbtn[disabled],.goResultFoot .mbtn[hidden]{display:none} body.mfDeparting #topbar,body.mfDeparting #cmdbar,body.mfDeparting #hudDeckTabs, body.mfDeparting #selInfo,body.mfDeparting #prodMenu,body.mfDeparting #buildMenu,body.mfDeparting #bldMenu2, body.mfDeparting #minimapWrap,body.mfDeparting #camRow,body.mfDeparting #hotSlots, body.mfDeparting #primaryRow,body.mfDeparting #tacRow,body.mfDeparting #grpRow, body.mfDeparting #heroBar,body.mfDeparting #goalBar,body.mfDeparting #wcRow, body.mfDeparting #keelWrap,body.mfDeparting #toast,body.mfDeparting #coach, body.mfDeparting #placeUI,body.mfDeparting #unitCard,body.mfDeparting #gameOver{ display:none!important} #mfDepart{display:none;align-items:flex-end;justify-content:center;pointer-events:none;z-index:40; background:linear-gradient(180deg,transparent 38%,rgba(3,7,14,.82))} #mfDepart .mfDepartCard{margin:0 18px max(calc(var(--sab) + 28px),48px);text-align:center;max-width:360px;pointer-events:auto} #mfDepart small{display:block;font:800 9px var(--fT);letter-spacing:.22em;color:#78a9c8} #mfDepart b{display:block;margin-top:6px;font:800 clamp(22px,7vw,34px)/1.05 var(--fT);color:#e7f5ff;letter-spacing:.06em} #mfDepart p{margin:8px 0 0;color:#9fc6e0;font:600 13px/1.4 var(--fU)} #mfDepartSkip{margin:14px auto 0;min-height:48px;width:min(100%,220px)} .goBreak{display:flex;flex-wrap:wrap;justify-content:center;gap:5px;margin:8px auto 2px;max-width:390px} .goBreak span{padding:3px 6px;border-radius:6px;font-family:var(--fU);font-size:9px;letter-spacing:.04em; color:#9fc6e0;background:rgba(22,38,56,.8);border:1px solid rgba(110,165,205,.22)} .goBreak b{color:#ffe9ad}.goData{margin-top:7px;color:#9dffcf;font-size:12px;letter-spacing:.08em} .goBreak.research{padding-top:7px;border-top:1px solid rgba(95,181,215,.18)} .goBreak.research strong{flex:0 0 100%;text-align:center;color:#79d9ff;font:800 9px var(--fT);letter-spacing:.15em} .goAccountSalvage{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:10px 1px 6px; color:#9fffc4;font:800 9px var(--fT);letter-spacing:.13em} .goAccountSalvage small{color:#789aae;font:600 9px var(--fU);letter-spacing:.02em;text-transform:none} .goResourceGrid.account .goRes{border-color:rgba(95,225,156,.2);background:rgba(12,38,32,.64)} .goData small{display:block;color:#7fb29c;font:600 9px var(--fU);letter-spacing:.03em}.goData.muted{color:#7f9aab;font-size:10px} /* ---------- META HEADER ---------- */ /* The progression rail and the wordmark are the other two thirds of the top block. The reference carries neither at this weight: it states rank in the bar and gives the wordmark about a tenth of the screen. Keep both pieces of progression, but as slim rows on the pack progress track, and drop the long description line - it is the same copy the destination screen opens with. */ #startScreen #mfNextUnlockRail{margin:6px auto 0;padding:0;width:min(96%,440px);gap:6px} #startScreen .mfNextCard{flex:1 1 0;padding:5px 8px 6px;gap:2px;border-radius:6px} #startScreen .mfNextHead{gap:5px} #startScreen .mfNextHead b{font-size:8.5px;letter-spacing:.1em} #startScreen .mfNextBadge{font-size:11px} #startScreen .mfNextName{font-size:10.5px} #startScreen .mfNextMeta{font-size:8.5px} #startScreen .mfNextMeta small{display:none} /* The bar reads the progress track from the pack rather than a flat div. */ #startScreen .mfNextProg{height:8px;border-radius:0;background:none;border:0; border-style:solid;border-width:0 4px;border-color:transparent; border-image-source:url('../../assets/textures/ui/mf-ui-v3/progress_track.png');border-image-slice:0 44 0 44 fill;border-image-repeat:stretch} #startScreen .mfNextFill{height:100%;border-radius:0;background:none; border-style:solid;border-width:0 4px;border-color:transparent; border-image-source:url('../../assets/textures/ui/mf-ui-v3/progress_fill_gold.png');border-image-slice:0 44 0 44 fill;border-image-repeat:stretch} #startScreen .mfNextCard.type-armory .mfNextFill{border-image-source:url('../../assets/textures/ui/mf-ui-v3/progress_fill_cyan.png')} /* The wordmark: about a tenth of the screen, as the reference has it. */ #startScreen #menuBrand{max-height:min(23vh,200px);width:auto;object-fit:contain;margin:10px auto 4px} /* A shorter phone cannot afford the full wordmark: at 360x780 the stack ran 20px past the viewport and the live model card lost its bottom edge. Clamp the one decorative element rather than any control. */ @media (orientation:portrait) and (max-height:820px){ #startScreen #menuBrand{max-height:min(19vh,160px);margin:6px auto 3px} #startScreen #menuIntel{--bnH:88px} } /* Compact command bar, per the owner reference: ONE full-width row - hex portrait and name on the left, cores and record on the right - rather than a floating card with a second stacked resource row beneath it. The header, the progression rail and the wordmark together were taking 422px of a 900px phone, which is why the first command slice started below the halfway line. The plate is the pack nine-slice, and its border is the art own 48/224 of the bar height so the corners stay at the authored proportion. */ #metaHead{--barH:78px; display:grid;grid-template-columns:auto minmax(0,1fr) auto; grid-template-areas:'icon name act' 'icon xp act' 'icon res act'; grid-template-rows:auto auto auto; align-items:center;gap:0 10px;box-sizing:border-box; width:min(96vw,440px);min-height:var(--barH);margin:0 auto; padding:0 4px; border-style:solid;border-width:calc(var(--barH) * .13);border-color:transparent;border-radius:0; border-image-source:url('../../assets/textures/ui/mf-ui-v3/panel_player_info.png'); border-image-slice:48 fill;border-image-repeat:stretch; background:none;box-shadow:none;clip-path:none} /* ── The menu must never compress its own controls ───────────────────────── #startScreen is a flex column, so every child inherited flex-shrink:1. When the column ran out of height the browser squashed the BUTTONS instead of scrolling: measured 43px natural -> 26px rendered at 360x640, which sheared the WAR ROOM label in half on a real phone. .overlay already had overflow-y:auto — it simply never got the chance to scroll, because shrinking kept the content nominally "fitting". Pinning the fixed-height children makes the container overflow, and therefore scroll, instead. */ #startScreen>*{flex-shrink:0} #metaHead,#menuBrand,.mbtn,.menuGrid,.menuStrip,#menuIntel,#updBox{flex-shrink:0} #rankEm{font-size:30px;line-height:1;filter:drop-shadow(0 0 6px rgba(255,210,87,.5)); background:none;border:0;padding:0 2px;margin:0;cursor:pointer;min-width:44px;min-height:44px} #rankEm:active{transform:scale(.94)} #rankGreet{flex:1;min-width:0;text-align:left} #greetLine{display:block;font-size:13px;font-weight:800;color:#ffe9ad;letter-spacing:.09em;font-family:var(--fT); text-transform:uppercase;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} #greetSub{display:block;margin-top:2px;font-size:10px;color:#9fc6e0;font-weight:600; overflow:hidden;text-overflow:ellipsis;white-space:nowrap} #coreBox{text-align:right} #coreBox b{font-size:17px;color:#8be8ff;font-variant-numeric:tabular-nums;font-family:var(--fT)} #coreBox .lbl{display:block;font-size:9px;color:#7fa8c4;letter-spacing:.18em;font-weight:700} #metaRec{font-size:10.5px;color:#7fa8c4;margin-top:2px;font-weight:600} .secLbl{margin-top:11px;font-size:10px;letter-spacing:.34em;color:#6f9cbc;font-weight:700;font-family:var(--fT)} .wbtn{min-width:52px} .wbtn.on{color:#ffb0a2;background:linear-gradient(180deg,rgba(80,28,18,.96),rgba(40,12,8,.97)) padding-box,var(--redB) border-box; box-shadow:0 0 11px rgba(255,93,67,.4)} .wbtn[data-w="0"].on{color:#fff;background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box, linear-gradient(160deg,var(--cyL),var(--cy) 40%,var(--cyD) 70%,var(--cyL)) border-box; box-shadow:0 0 11px rgba(65,200,255,.45)} /* ---------- ARMORY ---------- */ #armory{display:none;justify-content:flex-start;padding:0!important;overflow:hidden} #armory h2{flex:0 0 auto;margin:calc(var(--sat) + 16px) 0 0;color:#8be8ff;letter-spacing:.28em;font-size:20px;font-family:var(--fT);text-shadow:0 0 14px rgba(65,200,255,.5)} #armory .armorySub{flex:0 0 auto;font-size:13px;color:#9fc6e0;margin-top:2px;font-weight:600} #storeList{flex:1 1 auto;min-height:0;width:min(calc(100% - var(--sal) - var(--sar) - 28px),402px); margin-top:10px;display:flex;flex-direction:column;gap:8px;padding-bottom:max(calc(var(--sab) + 24px),72px); overflow-x:hidden;overflow-y:auto;box-sizing:border-box;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;touch-action:pan-y} .sItem{display:flex;align-items:center;gap:11px;border-radius:12px;padding:9px 12px;text-align:left; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box; box-shadow:0 3px 9px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.09); clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px),0 10px)} .sItem:active{transform:scale(.98)} .sItem.owned{opacity:.62} .sEm{font-size:25px;filter:drop-shadow(0 2px 3px rgba(0,0,0,.5))} #storeList .sEm{position:relative;flex:0 0 62px;width:62px;height:62px;display:grid;place-items:center;overflow:hidden; border:1px solid rgba(89,194,239,.34);border-radius:10px;background:linear-gradient(145deg,rgba(19,55,74,.88),rgba(4,13,23,.96)); box-shadow:inset 0 1px rgba(255,255,255,.07),0 5px 13px rgba(0,0,0,.35)} #storeList .sEm::after{content:'';position:absolute;inset:5px;pointer-events:none;border:1px solid rgba(255,181,74,.18);border-radius:6px} #storeList .sEm .itemArt{width:58px!important;height:58px!important;object-fit:contain} .sTx{flex:1} .sTx b{font-size:14px;color:#eaf7ff;letter-spacing:.03em} .sTier{color:var(--gold);font-size:11.5px;font-family:var(--fT)} .sDs{font-size:11.5px;color:#9fc6e0;margin-top:1px;font-weight:600} .sBuy{font-size:13px;font-weight:800;color:#1c1403;border-radius:8px;padding:6px 9px;white-space:nowrap;font-family:var(--fT); border:1px solid transparent;background:linear-gradient(180deg,#ffe9a3,#e8bd5c 45%,#c9973b 55%,#f2cf78) padding-box,var(--goldB) border-box; box-shadow:inset 0 1px 0 rgba(255,255,255,.5)} .sItem.owned .sBuy{color:var(--green);background:var(--panelG2) padding-box,var(--steelB) border-box} .sHead{margin-top:8px;font-size:10px;letter-spacing:.34em;color:#6f9cbc;text-align:center;font-weight:700;font-family:var(--fT)} /* Two livery rows exist at once — the Arsenal STYLE tab and Profile → Identity — so they share the layout but never the id. */ #colorRow,#idLiveryRow{display:flex;gap:10px;justify-content:center;margin-top:6px;flex-wrap:wrap} .armLiveryNote{margin-top:8px} .armLiveryNote em{font-style:normal;font-weight:800;color:#cfe8ff} .swatch{width:46px;height:46px;border-radius:11px;border:2px solid rgba(255,255,255,.3);display:flex;align-items:center;justify-content:center; box-shadow:inset 0 2px 4px rgba(255,255,255,.45),inset 0 -4px 7px rgba(0,0,0,.35),0 3px 8px rgba(0,0,0,.5); clip-path:polygon(9px 0,calc(100% - 9px) 0,100% 9px,100% calc(100% - 9px),calc(100% - 9px) 100%,9px 100%,0 calc(100% - 9px),0 9px)} .swatch span{font-size:9.5px;font-weight:800;color:#08131f;background:rgba(255,255,255,.75);border-radius:6px;padding:1px 3px;font-family:var(--fT)} .swatch.sel{border-color:#fff;box-shadow:0 0 13px rgba(255,255,255,.65),inset 0 2px 4px rgba(255,255,255,.5)} .swatch.lockd{opacity:.78} .swatch:active{transform:scale(.92)} /* ---------- LEVEL UP ---------- */ #levelUp{display:none} #levelUp h2{color:var(--gold);letter-spacing:.24em;font-size:21px;font-family:var(--fT);text-shadow:0 0 16px rgba(255,210,87,.6)} .cardRow{display:flex;gap:12px;margin-top:18px;flex-wrap:wrap;justify-content:center} .upCard{width:154px;border-radius:13px;padding:14px 10px;font-size:12.5px;line-height:1.5;font-weight:600; border:1px solid transparent;background:linear-gradient(180deg,rgba(38,58,82,.97),rgba(15,26,42,.98)) padding-box,var(--goldB) border-box; box-shadow:0 5px 18px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.12); clip-path:polygon(12px 0,calc(100% - 12px) 0,100% 12px,100% calc(100% - 12px),calc(100% - 12px) 100%,12px 100%,0 calc(100% - 12px),0 12px)} .upCard .em{font-size:30px;filter:drop-shadow(0 2px 4px rgba(0,0,0,.5))} .upCard b{display:block;margin:6px 0 4px;color:#ffe9ad;font-size:13.5px;font-family:var(--fT);letter-spacing:.02em} .upCard:active{transform:scale(.96)} #pauseOverlay{display:none} #profileScr,#settingsScr,#setupScr{display:none;justify-content:flex-start;padding-top:calc(var(--sat) + 16px)} #setupScr{background: radial-gradient(ellipse at 50% -10%,rgba(28,68,104,.55),transparent 60%),rgba(3,7,14,.94)} /* `safe center` instead of plain `center`. A centred flex column that overflows clips its START — on a 640px-tall screen the menu header sat at -3.6px, above the top of the viewport and unreachable, which is the same "UI under the OS chrome" complaint in a different disguise. `safe` falls back to flex-start the moment the content no longer fits, so nothing is ever pushed off the top. */ #startScreen{justify-content:flex-start;padding-top:calc(var(--sat) + 8px)} #startScreen .title{margin-top:14px} .menuGrid{display:grid;grid-template-columns:1fr 1fr;gap:9px;width:min(88vw,340px);margin-top:12px} .gbtn{display:flex;align-items:center;justify-content:center;gap:8px;min-height:54px;padding:13px 8px;border-radius:11px; color:#dfeeff;font-size:13.5px;font-weight:700;letter-spacing:.08em;font-family:var(--fT);text-transform:uppercase; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box; box-shadow:0 3px 12px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.14); clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px),0 10px)} .gbtn .gEm{font-size:17px} .gbtn:active{transform:scale(.95)} /* Secondary destinations. Icon over a small caption, four across, roughly half the visual weight of a tile — present without asking to be read. */ .menuStrip{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;width:min(88vw,340px);margin-top:8px} .sbtn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:50px; padding:9px 2px 7px;border-radius:10px;position:relative; color:#a9c6de;font-size:9px;font-weight:700;letter-spacing:.06em;font-family:var(--fT);text-transform:uppercase; border:1px solid transparent; background:linear-gradient(180deg,rgba(16,28,44,.72),rgba(8,16,27,.78)) padding-box, linear-gradient(160deg,rgba(120,170,205,.22),rgba(30,60,88,.12)) border-box; box-shadow:0 2px 9px rgba(0,0,0,.4)} .sbtn .sEmj{font-size:17px;line-height:1;filter:saturate(.85)} .sbtn.pendingDispatch::after{content:'';position:absolute;top:6px;right:8px;width:8px;height:8px;border-radius:50%; background:#ffd257;border:1px solid #fff1b0;box-shadow:0 0 9px rgba(255,210,87,.9)} .sbtn:active{transform:scale(.94)} #metaHead:active{transform:scale(.98)} /* A single restrained live subject gives the home screen motion and roster identity without adding another destination or competing with PLAY. */ /* The live model feed stays a bottom banner. It was briefly the reference holo viewport under the wordmark, but at that size it reads as a hero panel and competes with the wordmark above it and the command slices below - the menu ends up with two focal points and no lead. As a banner it is the last thing on the screen, which is where a rotating showcase belongs: seen, not answered. The plate is the same neutral pack panel the command bar uses, so the screen opens and closes on the same shape. */ #menuIntel{--bnH:96px; position:relative;box-sizing:border-box;text-align:left; display:grid;grid-template-columns:104px minmax(0,1fr);gap:10px;align-items:stretch; width:min(94vw,400px);height:var(--bnH);margin:9px auto 0;flex:0 0 auto;overflow:hidden; border-style:solid;border-width:calc(var(--bnH) * .15);border-color:transparent;border-radius:0; border-image-source:url('../../assets/textures/ui/mf-ui-v3/panel_player_info.png'); border-image-slice:48 fill;border-image-repeat:stretch; background:none;box-shadow:none} #menuIntel #menuIntelModel{position:static;min-width:0;width:auto;height:100%;border-radius:0} #menuIntel #menuIntelModel .mfIntelPreview{height:100%;width:100%;min-height:0;border:0;border-radius:0; border-right:1px solid rgba(91,175,225,.24)} #menuIntel #menuIntelModel .mfIntelPreviewTag{display:block;font-size:8px;top:3px;left:4px} #menuIntel .menuIntelCopy{position:static;min-width:0;display:flex;flex-direction:column; justify-content:center;gap:1px;padding:0 3px 0 0;background:none} #menuIntel .menuIntelCopy>b{margin-top:2px;font-size:13px} #menuIntel .menuIntelCopy>span{white-space:normal;overflow:hidden;overflow-wrap:anywhere;font-size:8.5px;line-height:1.3} #menuIntelModel{min-width:0;height:76px} #menuIntelModel .mfIntelPreview{height:100%;min-height:0;border:0;border-right:1px solid rgba(91,175,225,.27);border-radius:0} #menuIntelModel .mfIntelPreviewTag{font-size:9px;top:5px;left:5px} .menuIntelCopy{min-width:0;display:flex;flex-direction:column;justify-content:center;padding:7px 9px 7px 0} .menuIntelEyebrow{display:flex;align-items:center;gap:5px;color:#6fa5c7;font:800 9px/1 var(--fT);letter-spacing:.11em;white-space:nowrap} .menuIntelEyebrow>span:last-child{margin-left:auto;color:#52738a} .menuIntelLive{width:6px;height:6px;border-radius:50%;background:#59e8a0;box-shadow:0 0 8px #37dc86;animation:menuIntelPulse 1.35s ease-in-out infinite} @keyframes menuIntelPulse{50%{opacity:.35;box-shadow:0 0 2px #37dc86}} .menuIntelCopy>b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:7px; color:#eaf7ff;font:900 12px/1 var(--fT);letter-spacing:.1em} .menuIntelCopy>span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-top:4px; color:#9bb9ce;font-size:9.2px;line-height:1.25;font-weight:650} /* ---------- map selector cards ---------- */ #mapRow{display:flex;gap:9px;overflow-x:auto;max-width:96vw;padding:6px 4px;margin-top:6px;-webkit-overflow-scrolling:touch; scroll-snap-type:x proximity;scroll-padding-inline:4px} .mapCard{flex:0 0 auto;width:108px;border-radius:11px;padding:5px 5px 6px;text-align:center; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box; box-shadow:0 3px 10px rgba(0,0,0,.5);scroll-snap-align:start} .mapCard canvas{width:96px;height:72px;border-radius:7px;display:block;margin:0 auto;border:1px solid rgba(0,0,0,.5)} .mapCard .mNm{min-height:2.35em;display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:700;letter-spacing:.04em;color:#cfe8ff;margin-top:4px;font-family:var(--fT);text-transform:uppercase;line-height:1.15;overflow-wrap:anywhere} .mapCard .mDs{min-height:2.5em;font-size:9px;color:#8fb3cc;line-height:1.25;margin-top:1px;font-weight:600} .mapCard.sel{background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box, linear-gradient(160deg,var(--cyL),var(--cy) 40%,var(--cyD) 70%,var(--cyL)) border-box; box-shadow:0 0 13px rgba(65,200,255,.45)} .mapCard:active{transform:scale(.96)} .half{min-width:0!important;flex:1;padding:10px 6px!important;font-size:12px!important;margin-top:0!important} #rallyBtn{margin-top:6px;width:100%;height:44px;min-height:44px;border-radius:8px;color:#8fe0b4;font-size:12px;font-weight:700;letter-spacing:.08em; border:1px solid transparent;background:linear-gradient(180deg,rgba(16,52,34,.95),rgba(8,26,17,.97)) padding-box, linear-gradient(160deg,#b6ffd4,#2bd672 40%,#0d5a2e 70%,#6dffa8) border-box;font-family:var(--fU);text-transform:uppercase} #profName{width:min(94vw,402px);height:42px;border-radius:10px;text-align:center;font-size:16px;font-weight:700;color:#eaf7ff; font-family:var(--fT);letter-spacing:.08em;outline:none;user-select:text;-webkit-user-select:text; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box;margin-top:6px} .setRow{min-height:64px;box-sizing:border-box;cursor:pointer;touch-action:manipulation} .setRow .sTx{min-width:0;padding:2px 0} .togB{display:flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:stretch; min-width:88px;min-height:48px;box-sizing:border-box;padding:10px 12px;line-height:1;text-align:center; color:#8a9fb4!important;background:var(--panelG2) padding-box,var(--steelB) border-box!important} .togB.onT{color:#5dff9a!important;box-shadow:0 0 9px rgba(93,255,154,.3)} .setRow:active .togB{transform:scale(.97);filter:brightness(1.14)} .setRow .sTx b{font-size:13.5px} .pItem.selP{box-shadow:0 0 11px rgba(93,255,154,.25),inset 0 1px 0 rgba(255,255,255,.09)} .embSw span{background:none!important} .spin{animation:sp 1.2s linear infinite;display:inline-block} @keyframes sp{to{transform:rotate(360deg)}} /* ---------- SMALL-SCREEN ERGONOMICS ---------- */ @media (max-width:430px){ .cbtn{min-width:48px;height:48px;font-size:10px} .cbtn .em{font-size:17px} #topbar{font-size:13px;gap:4px} .res{padding:3px 7px 3px 5px} /* The FPS counter is a SETTING, and it was being hidden unconditionally at phone widths — which is every device this game ships to, so the toggle in Display could never do anything. Gate it on the setting instead. */ #selInfo{font-size:12px;max-width:52vw;left:6px;transform:none;text-align:left;bottom:calc(var(--sab) + 150px)} .mbtn{min-width:206px;min-height:44px;padding:12px 18px;font-size:14px} .mbtn.alt{font-size:12.5px} .upCard{width:136px} #setupScr #mapRow{grid-template-columns:repeat(2,minmax(0,1fr))} } @media (max-height:620px){ #emblem{width:54px;height:54px;margin-top:2px} #startScreen .title{font-size:min(9vw,38px)} .hint{margin-top:8px;font-size:11.5px;line-height:1.5} .mbtn{margin-top:9px;padding:10px 18px} } /* Base-under-attack chip: persistent and tappable, unlike a toast. */ #atkAlert{position:fixed;left:50%;transform:translateX(-50%); top:calc(var(--sat) + 108px);z-index:60; padding:9px 16px;border-radius:12px;font-size:13px;font-weight:800;letter-spacing:.4px; background:linear-gradient(180deg,#5c1414,#3a0d0d);color:#ffd9d0; border:1px solid #ff6a55;box-shadow:0 4px 18px rgba(0,0,0,.55),0 0 22px rgba(255,80,60,.35); animation:atkPulse 1.1s ease-in-out infinite;pointer-events:auto;appearance:none;font-family:var(--fU);cursor:pointer} #waveAlert{position:fixed;left:50%;transform:translateX(-50%);top:calc(var(--sat) + 108px);z-index:59; min-width:min(82vw,310px);min-height:34px;padding:5px 11px;border:1px solid #ffb64b;border-radius:10px; background:linear-gradient(180deg,rgba(80,45,10,.97),rgba(40,21,6,.98));color:#fff3c5; box-shadow:0 4px 18px rgba(0,0,0,.55),0 0 22px rgba(255,158,45,.24);font-family:var(--fU); pointer-events:auto;text-align:center;animation:wavePulse 1.5s ease-in-out infinite} #waveAlert b{display:inline;font-size:10.5px;letter-spacing:.09em;color:#ffd477} #waveAlert span{display:inline;margin-left:7px;font-size:9px;letter-spacing:.05em;color:#fff0c2} #waveAlert.withAttack{top:calc(var(--sat) + 158px)} @keyframes atkPulse{0%,100%{opacity:1}50%{opacity:.62}} @keyframes wavePulse{0%,100%{border-color:#ffb64b}50%{border-color:#ffe29a}} /* ============================================================================ BATTLE SETUP — rebuilt. The old screen stacked eight label-and-row pairs down a single column with no grouping and 5px gaps, so it ran off the bottom of the phone and the START button was clipped by the safe area. Every option looked equally important because nothing was grouped and nothing had room. Now: a fixed header, ONE scroll region of grouped cards, and a fixed footer that always holds START. Only the four decisions that matter on a first run are visible; the rest lives behind ADVANCED. Touch targets are 46px. ============================================================================ */ #setupScr{padding:0!important;justify-content:flex-start!important} .setupHead{position:sticky;top:0;z-index:5;width:100%; display:flex;align-items:center;justify-content:space-between;gap:10px; padding:calc(var(--sat) + 14px) calc(var(--sar) + 18px) 12px calc(var(--sal) + 18px); background:linear-gradient(180deg,rgba(6,12,22,.99) 62%,rgba(6,12,22,0));} .setupHead h2{margin:0;color:#8be8ff;letter-spacing:.14em;font-size:17px;white-space:nowrap; font-family:var(--fT);text-shadow:0 0 14px rgba(65,200,255,.5)} .setupContext{max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right; font:800 9px/1.2 var(--fT);letter-spacing:.12em;color:#6fbddd} .setupTabs{flex:0 0 auto;width:100%;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:5px; padding:0 calc(var(--sar) + 14px) 10px calc(var(--sal) + 14px); background:rgba(6,12,22,.98);z-index:4} .setupTabBtn{min-width:0;min-height:48px;padding:9px 2px;border-radius:9px;font-family:var(--fT); font-size:9px;letter-spacing:.045em;font-weight:800;color:#789bb5;border:1px solid rgba(120,170,205,.24); background:linear-gradient(180deg,rgba(23,36,53,.96),rgba(9,17,28,.97))} .setupTabBtn.on{color:#f0fbff;border-color:var(--cy);background:linear-gradient(180deg,rgba(43,113,154,.9),rgba(15,44,68,.96)); box-shadow:0 0 12px rgba(65,200,255,.25)} .setupScroll{flex:1 1 auto;width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch; padding:2px calc(var(--sar) + 14px) 12px calc(var(--sal) + 14px); display:flex;flex-direction:column;gap:12px;align-items:stretch} .setupCard{flex:0 0 auto;border-radius:14px;padding:14px 14px 15px;border:1px solid transparent; background:linear-gradient(180deg,rgba(15,26,42,.92),rgba(8,15,26,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.34),rgba(30,60,88,.20)) border-box; box-shadow:0 4px 16px rgba(0,0,0,.42)} .setupCard.danger{background:linear-gradient(180deg,rgba(34,16,14,.92),rgba(18,8,7,.94)) padding-box, linear-gradient(160deg,rgba(210,120,100,.36),rgba(80,30,24,.22)) border-box} .setupCard .secLbl{margin:0 0 11px;text-align:left;font-size:10.5px;letter-spacing:.2em;opacity:.85} .optRow{display:flex;gap:9px;flex-wrap:wrap} .optRow .dbtn{flex:1 1 0;min-width:88px;min-height:46px;padding:11px 10px;font-size:14px;border-radius:11px; display:flex;align-items:center;justify-content:center;text-align:center;line-height:1.15} .optGrid{display:grid;grid-template-columns:1fr 1fr;gap:9px} .optGrid .dbtn{min-width:0} .commanderPickLbl{margin-top:15px!important} .commanderGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px} .commanderCard{position:relative;min-width:0;min-height:166px;padding:7px 6px 8px;border-radius:11px;text-align:left;color:#a9c9dd; border:1px solid rgba(115,164,199,.26);background:linear-gradient(180deg,rgba(20,34,51,.96),rgba(7,14,24,.98)); box-shadow:0 5px 15px rgba(0,0,0,.28);touch-action:manipulation} .commanderCard.on{color:#fff;border-color:var(--cmd,#5db6ff);box-shadow:0 0 16px color-mix(in srgb,var(--cmd,#5db6ff) 32%,transparent)} .commanderPortraitFrame{position:relative;display:block;margin-bottom:7px}.commanderCard img{display:block;width:100%;height:92px;object-fit:cover;object-position:center 18%;border-radius:7px;opacity:.72; border:1px solid color-mix(in srgb,var(--cmd,#5db6ff) 28%,transparent);box-shadow:inset 0 0 14px rgba(0,0,0,.5)} .commanderCard.on img{opacity:1} .commanderAbilityFloats{position:absolute;left:5px;right:5px;bottom:-6px;display:flex;gap:4px;justify-content:center;pointer-events:none} .commanderAbilityFloat{display:grid;grid-template-columns:19px 1fr;align-items:center;min-width:0;flex:1;height:28px;padding:3px 4px;border:1px solid rgba(114,189,221,.3);border-radius:7px;background:rgba(3,11,20,.92);box-shadow:0 4px 9px rgba(0,0,0,.5)} .commanderAbilityFloat i{display:grid!important;place-items:center;width:19px;height:19px;margin:0!important;border-radius:5px;color:#eafaff!important;background:color-mix(in srgb,var(--cmd,#5db6ff) 24%,#08131f);font:900 12px/1 var(--fT)!important;letter-spacing:0!important} .commanderAbilityFloat b{margin:0!important;color:#92b8cb!important;font:900 5.5px/1 var(--fT)!important;letter-spacing:.04em;white-space:nowrap} .commanderAbilityFloat.signature{border-color:color-mix(in srgb,var(--cmd,#5db6ff) 54%,transparent)} .commanderCard b,.commanderCard i,.commanderCard small{display:block;overflow:hidden;text-overflow:ellipsis} .commanderCard i{font:800 7.5px var(--fT);letter-spacing:.12em;color:var(--cmd,#5db6ff);font-style:normal;white-space:nowrap} .commanderCard b{margin-top:2px;font:800 9px/1.15 var(--fT);color:#e9f6ff} .commanderCard small{margin-top:4px;font:650 8px/1.25 var(--fU);color:#86a8bd} #battleScaleRow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px} #battleScaleRow[hidden]{display:none!important} #battleScaleRow .bsbtn{min-width:0;min-height:68px;padding:8px 4px;flex-direction:column;gap:2px} #battleScaleRow .bsbtn b{font-family:var(--fT);font-size:10px;letter-spacing:.07em;color:#e8f6ff} #battleScaleRow .bsbtn span{font-family:var(--fT);font-size:9px;letter-spacing:.04em;color:#79b9df} #battleScaleRow .bsbtn small{font-size:9px;font-weight:800;letter-spacing:.04em;color:#718ca0} #battleScaleRow .bsbtn.on b{color:#fff} #battleScaleRow .bsbtn.on span{color:#9deaff} #battleScaleRow .bsbtn.on small{color:#c8f3ff} .secHint{margin-top:11px;font-size:11.5px;line-height:1.4;color:#8fb3cc;font-weight:600;text-align:left} .secHint.danger{color:#c98d80} .advWrap{display:contents!important} #setupScr:not([data-tab]) [data-setup-tab]:not([data-setup-tab="map"]), #setupScr[data-tab="map"] [data-setup-tab]:not([data-setup-tab="map"]), #setupScr[data-tab="forces"] [data-setup-tab]:not([data-setup-tab="forces"]), #setupScr[data-tab="rules"] [data-setup-tab]:not([data-setup-tab="rules"]), #setupScr[data-tab="economy"] [data-setup-tab]:not([data-setup-tab="economy"]), #setupScr[data-tab="modifiers"] [data-setup-tab]:not([data-setup-tab="modifiers"]){display:none} .setupFoot{flex:0 0 auto;width:100%;display:flex;gap:10px;align-items:center;justify-content:center; /* Some Android WebViews report a zero bottom inset while still drawing a 3-button/navigation shelf. The 54px floor is the physical escape hatch: Back stays above that shelf even when the platform value is wrong. */ padding:12px calc(var(--sar) + 14px) max(calc(var(--sab) + 14px),54px) calc(var(--sal) + 14px); background:linear-gradient(0deg,rgba(6,12,22,.99) 62%,rgba(6,12,22,0))} .setupFoot .mbtn{margin:0!important;flex:1 1 0;min-width:0;width:auto!important; font-size:14px!important;padding:15px 8px!important;white-space:nowrap;letter-spacing:.06em!important} .setupFoot .mbtn.alt{flex:0 0 32%} .setupFoot .mbtn.alt:only-child{flex:0 1 540px;max-width:min(94vw,540px)} #setupScr #mapRow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px; max-width:100%;margin:0;padding:2px 0 6px;overflow:visible} #setupScr .mapCard{width:auto;min-width:0;box-sizing:border-box} #setupScr .mapCard canvas{width:100%;height:auto;aspect-ratio:1/1;box-sizing:border-box} /* src/galaxyui.js injects `#setupScr.galaxyFlow #mapRow .mapCard canvas {aspect-ratio:16/10}` into at runtime: later in the cascade and at higher specificity, so the rule above never reached the live War Table card - it was 16:10 on screen while this file said otherwise. The world is square (MAP 3200 x 3200) and this is the surface a player picks a site from, so it is square too. !important rather than a specificity hack because the loser is a runtime-injected string in another module; delete galaxyui.js's 16/10 declaration and this line goes with it. */ #setupScr.galaxyFlow #mapRow .mapCard canvas{aspect-ratio:1/1} #setupScr .mapCard b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} #setupScr .mapCard .mNm{font-size:11.5px;margin-top:6px} #setupScr .mapCard .mDs{font-size:9.5px} #setupScr .mapCard .mSize{margin-top:7px;color:#71d8ff;font:900 8px/1 var(--fT);letter-spacing:.08em} .warTableCard{overflow:hidden} .regionMissionDeck{margin-top:10px;padding-top:10px;border-top:1px solid rgba(120,205,255,.2)} .regionMissionHead{display:flex;align-items:end;justify-content:space-between;gap:8px;margin-bottom:8px} .regionMissionHead span{color:#eaf8ff;font:900 11px/1 var(--fT);letter-spacing:.14em} .worldOrbitRail{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:0 0 10px} .orbitWorld{display:flex;min-width:0;min-height:48px;align-items:center;justify-content:center;gap:4px;padding:7px 4px; border-radius:9px;border:1px solid rgba(110,170,205,.25);color:#819eb2;background:rgba(5,13,23,.78)} .orbitWorld.on{color:#eaf9ff;border-color:var(--world);background:linear-gradient(180deg,rgba(28,60,82,.92),rgba(7,20,33,.96)); box-shadow:0 0 12px color-mix(in srgb,var(--world) 26%,transparent)} .orbitWorldOrb{display:block;flex:0 0 auto;width:11px;height:11px;border-radius:50%;background:var(--world); box-shadow:inset -4px -3px 5px rgba(0,0,0,.6),0 0 7px color-mix(in srgb,var(--world) 70%,transparent)} .orbitWorld span{display:block;min-width:0;text-align:left}.orbitWorld b,.orbitWorld small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .orbitWorld b{font:900 7px/1.1 var(--fT);letter-spacing:.04em}.orbitWorld small{margin-top:2px;font:700 6.5px/1 var(--fT);letter-spacing:.04em;color:#62839a} .orbitWorld.on small{color:#8ac7df} @media(max-width:380px){.orbitWorld{gap:3px;padding-left:3px;padding-right:3px}.orbitWorldOrb{width:10px;height:10px}.orbitWorld b{font-size:7px}.orbitWorld small{display:none}} .regionMissionHead small{color:#6e9bb7;font:800 8px/1 var(--fT);letter-spacing:.1em;text-align:right} @media(max-width:390px){#setupScr #mapRow{grid-template-columns:1fr}.regionMissionHead{align-items:flex-start}} /* Deployment planner: the battlefield is the control. A player selects a commander chip and taps one of the legal numbered zones instead of choosing abstract compass text that does not resemble the actual map. */ .spawnMapWrap{position:relative;border-radius:12px;overflow:hidden;border:1px solid rgba(120,190,230,.42); background:#08131f;box-shadow:inset 0 0 22px rgba(0,0,0,.6),0 4px 14px rgba(0,0,0,.35)} #spawnMap{display:block;width:100%;height:auto;aspect-ratio:1/1;touch-action:manipulation} .spawnLegend{position:absolute;left:8px;bottom:7px;display:flex;gap:10px;padding:5px 7px;border-radius:7px; color:#cce5f5;background:rgba(4,10,18,.78);font:700 9px/1 var(--fT);letter-spacing:.08em} .spawnLegend span{display:flex;align-items:center;gap:4px}.spawnLegend i{width:7px;height:7px;border-radius:50%;display:block} .spawnLegend .you{background:var(--cy);box-shadow:0 0 7px var(--cy)}.spawnLegend .ally{background:#66e5a2;box-shadow:0 0 7px #66e5a2}.spawnLegend .enemy{background:#ff5d43;box-shadow:0 0 7px #ff5d43} .spawnPick{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:9px} .spawnTarget{min-height:46px;border-radius:9px;color:#91abc0;font:800 9px/1.1 var(--fT);letter-spacing:.06em; border:1px solid rgba(100,155,195,.28);background:linear-gradient(180deg,rgba(18,34,52,.95),rgba(8,18,31,.97))} .spawnTarget b{display:block;margin-top:3px;color:#d9f1ff;font-size:10px}.spawnTarget.on{color:#fff;border-color:#69d8ff; background:linear-gradient(180deg,rgba(41,102,140,.96),rgba(14,49,76,.97));box-shadow:0 0 10px rgba(65,200,255,.3)} .spawnTarget.off{opacity:.38} .spawnFairness{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:9px; padding:9px 10px;border-radius:9px;background:rgba(20,73,48,.34);border:1px solid rgba(91,230,153,.28)} .spawnFairness b{flex:0 0 auto;color:#70f0a4;font:800 9.5px/1 var(--fT);letter-spacing:.1em} .spawnFairness span{color:#a9cdbb;font-size:9.5px;line-height:1.25;text-align:right;font-weight:650} #aiSlotList{display:flex;flex-direction:column;gap:8px;margin-top:11px} .aiSlot{padding:9px;border-radius:10px;border:1px solid rgba(120,170,205,.22);background:rgba(5,13,23,.46)} .aiSlotHead{display:flex;align-items:center;justify-content:space-between;gap:7px;margin-bottom:7px;flex-wrap:wrap} .aiSlotName{display:flex;align-items:center;gap:6px;flex:1 1 132px;min-width:0;color:#ffb3a6;font:800 10px/1 var(--fT);letter-spacing:.1em} .aiSlotName i{font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aiMapFac{width:20px;height:20px;flex:0 0 20px} .aiSlotZone{color:#8fb3cc;font:700 9px/1 var(--fT)} .aiRole{min-width:65px;min-height:38px;padding:7px 8px;border-radius:8px;font:800 8px/1 var(--fT);letter-spacing:.08em; color:#ff9f8e;border:1px solid rgba(255,93,67,.48);background:rgba(75,24,20,.7)} .aiRole.ally{color:#8fffc0;border-color:rgba(102,229,162,.52);background:rgba(17,71,48,.68)} .aiBehaviorRow{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:9px;margin:1px 0 5px} .aiBehaviorRow label{color:#7898ae;font:800 8px/1 var(--fT);letter-spacing:.12em} .aiBehavior{width:100%;min-height:42px;padding:7px 30px 7px 10px;border-radius:8px;appearance:auto; color:#d9f1ff;font:800 9px/1 var(--fT);letter-spacing:.07em;border:1px solid rgba(105,192,230,.38); background:#0b1c2c;color-scheme:dark} .aiBehaviorHint{margin:0 0 7px;color:#82a5bc;font:650 9px/1.35 var(--fU);letter-spacing:.025em} .aiToggle{min-width:88px;min-height:46px;padding:9px 12px;border-radius:8px;color:#7890a5;font:800 9px/1 var(--fT); border:1px solid rgba(100,155,195,.28);background:#0b1828}.aiToggle.on{color:#72ffae;border-color:#40c97d} .aiDiffRow{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.aiDiff{min-height:46px;border-radius:8px;color:#8199ad; font:800 9px/1 var(--fT);border:1px solid rgba(100,155,195,.22);background:#0b1828}.aiDiff.on{color:#fff;border-color:#ff836e; background:linear-gradient(180deg,rgba(110,42,34,.96),rgba(54,20,18,.97));box-shadow:0 0 8px rgba(255,93,67,.22)} .aiDiff.mapFloor,.globalDiff.mapFloor{opacity:.3;filter:saturate(.25);border-style:dashed} .aiSlot.disabled .aiDiffRow,.aiSlot.disabled .aiSlotZone,.aiSlot.disabled .aiBehaviorRow,.aiSlot.disabled .aiBehaviorHint{opacity:.32;pointer-events:none} .aiSlot.mapLocked{border-style:dashed;opacity:.52;background:rgba(5,10,17,.34)} .aiSlot.mapLocked .aiDiffRow,.aiSlot.mapLocked .aiSlotZone,.aiSlot.mapLocked .aiRole,.aiSlot.mapLocked .aiBehaviorRow,.aiSlot.mapLocked .aiBehaviorHint{opacity:.22;pointer-events:none} .aiSlot.mapLocked .aiToggle{color:#8fa3b2;border-color:rgba(140,165,184,.28);background:rgba(65,80,92,.22)} @media(max-width:390px){.aiSlotZone{order:4;width:100%;padding-left:26px}.aiRole{min-width:58px}.aiToggle{min-width:78px;padding-left:8px;padding-right:8px}} #defFocusRow .dbtn{font-size:11.5px}.dfbtn.on{color:#fff!important;border-color:#f4ca68!important; background:linear-gradient(180deg,rgba(94,70,26,.96),rgba(45,31,11,.97))!important;box-shadow:0 0 11px rgba(244,202,104,.2)} /* ============================================================================ APPLE / WKWebView Safari and the in-app web view need a few things stated explicitly that Chrome infers: no long-press callout, no text selection on chrome elements, no tap highlight, no rubber-band, and no double-tap-to-zoom. Any one of them missing turns an ordinary game gesture into a browser gesture. ============================================================================ */ html,body{ -webkit-touch-callout:none; -webkit-tap-highlight-color:transparent; -webkit-user-select:none; user-select:none; -webkit-overflow-scrolling:touch; height:100%;height:100dvh;min-height:100dvh;height:-webkit-fill-available; overscroll-behavior:none; } button,canvas,.cbtn,.bcard,.mapCard,.gbtn,.dbtn{touch-action:manipulation;-webkit-user-select:none} canvas#gl{touch-action:none} /* Text inputs are the one place selection must still work. */ input,textarea,#profName{-webkit-user-select:text;user-select:text} /* Scroll regions keep their own gesture so the page itself never moves. */ .setupScroll,#buildMenu,#storeList,#prodMenu{overscroll-behavior:contain;touch-action:pan-y} /* Safari's dynamic viewport unit, with the older unit as the fallback. */ .overlay{min-height:100vh;min-height:100dvh} @supports (-webkit-touch-callout:none){ /* Home-indicator clearance on notch devices, on top of the safe-area vars. */ #cmdbar{padding-bottom:max(var(--sab),8px)} } /* ---- SETTINGS ------------------------------------------------------------ Fixed chrome plus one explicit scroll region keeps BACK reachable on Android gesture and three-button navigation layouts. Native settings are grouped by intent, instead of one undifferentiated list of toggles. */ #settingsScr{display:none;padding:0!important;justify-content:flex-start!important;overflow:hidden} .subMenuHead{flex:0 0 auto;width:100%;padding:calc(var(--sat) + 16px) calc(var(--sar) + 18px) 10px calc(var(--sal) + 18px); background:linear-gradient(180deg,rgba(6,12,22,.99) 68%,rgba(6,12,22,.9));text-align:center} .subMenuHead h2{margin:0;color:#8be8ff;letter-spacing:.22em;font-size:19px;font-family:var(--fT); text-shadow:0 0 14px rgba(65,200,255,.5)} .subMenuHead span{display:block;margin-top:4px;color:#7399b5;font-size:10px;letter-spacing:.06em;font-weight:700} /* A destination should announce itself as a place, not as a heading over a ledger. These shallow panoramas are real, original menu art; the dark falloff keeps every surrounding control readable without painting prose over the illustration. The scan is one compositor-only ambient cue and is stopped by the reduced-motion contract below. */ .mfMenuHero{--mf-menu-art:none;position:relative;flex:0 0 auto;width:min(calc(100% - var(--sal) - var(--sar) - 28px),760px); height:clamp(86px,15vh,138px);margin:2px auto 7px;overflow:hidden;border:1px solid rgba(91,202,240,.32); border-radius:12px;background-color:#050c14;background-image:var(--mf-menu-art);background-size:cover;background-position:center; box-shadow:0 11px 28px rgba(0,0,0,.34),inset 0 1px rgba(255,255,255,.07);isolation:isolate} .mfMenuHero::before{content:"";position:absolute;z-index:1;inset:0;pointer-events:none; background:linear-gradient(90deg,rgba(2,8,15,.62),transparent 28%,transparent 72%,rgba(2,8,15,.62)), linear-gradient(0deg,rgba(1,7,13,.68),transparent 48%,rgba(4,13,22,.12)); box-shadow:inset 0 0 0 5px rgba(3,12,20,.22),inset 0 -1px rgba(89,212,255,.22)} .mfMenuHero::after{content:"";position:absolute;z-index:2;left:-38%;top:0;width:32%;height:100%;pointer-events:none; background:linear-gradient(90deg,transparent,rgba(92,220,255,.17),transparent);transform:skewX(-18deg); animation:mfMenuHeroScan 7.8s ease-in-out infinite} .mfMenuHero--operations{--mf-menu-art:url('../../assets/textures/ui/menu-art-v1/operations-war-table-v1.webp')} .mfMenuHero--arsenal{--mf-menu-art:url('../../assets/textures/ui/menu-art-v1/arsenal-fabrication-bay-v1.webp')} .mfMenuHero--research,.mfMenuHero--systems{--mf-menu-art:url('../../assets/textures/ui/menu-art-v1/research-directorate-v1.webp')} .mfMenuHero--contracts{--mf-menu-art:url('../../assets/textures/ui/menu-art-v1/contracts-intel-table-v1.webp')} .mfMenuHero--career{--mf-menu-art:url('../../assets/textures/ui/menu-art-v1/career-service-record-v1.webp')} .mfMenuHero--settings{--mf-menu-art:url('../../assets/textures/ui/menu-art-v1/settings-calibration-bay-v1.webp')} .mfMenuHero--inbox{--mf-menu-art:url('../../assets/textures/ui/menu-art-v1/inbox-communications-v1.webp')} .mfMenuHero--social{--mf-menu-art:url('../../assets/textures/ui/menu-art-v1/social-crew-lounge-v1.webp')} .mfMenu3DHost{position:absolute;z-index:3;right:4px;top:4px;bottom:4px;width:min(45%,178px);pointer-events:none} .mfMenu3DHost>.mfIntelPreview{width:100%;height:100%;min-height:0;margin:0;border-color:rgba(91,221,255,.4);border-radius:7px; background:radial-gradient(ellipse at 55% 64%,rgba(38,104,145,.2),transparent 58%),rgba(2,8,14,.62)} .mfMenu3DHost .mfIntelPreviewTag{left:auto;right:5px;top:5px;font-size:7px;background:rgba(2,8,14,.8)} .mfMenu3DHost .mfIntelPreview::before{opacity:.18} @media(max-width:380px){.mfMenu3DHost{width:42%}} #settingsScr>.mfMenuHero{height:clamp(70px,11vh,96px)} @keyframes mfMenuHeroScan{0%,28%{transform:translateX(0) skewX(-18deg);opacity:0}44%{opacity:.75}72%,100%{transform:translateX(440%) skewX(-18deg);opacity:0}} /* Screen entry has five visual groups at most. It deliberately moves the presentation, never the hit target under a finger, and replays only when showFrontScreen explicitly enters the route. */ .mfFrontEntering>.subMenuHead,.mfFrontEntering>h2{animation:mfFrontScreenReveal .22s ease-out both} .mfFrontEntering>.mfMenuHero{animation:mfFrontScreenReveal .26s .035s ease-out both} .mfFrontEntering>.screenTabs,.mfFrontEntering>.tabRow,.mfFrontEntering>#matRow{animation:mfFrontScreenReveal .24s .07s ease-out both} .mfFrontEntering>.opsScroll,.mfFrontEntering>.dailyScroll,.mfFrontEntering>.profileScroll,.mfFrontEntering>.settingsScroll, .mfFrontEntering>.warScroll,.mfFrontEntering>.inboxScroll,.mfFrontEntering>#storeList{animation:mfFrontScreenReveal .26s .1s ease-out both} .mfFrontEntering>.setupFoot,.mfFrontEntering>.warFoot{animation:mfFrontScreenReveal .2s .13s ease-out both} @keyframes mfFrontScreenReveal{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}} .settingsScroll{flex:1 1 auto;min-height:0;width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch; overscroll-behavior:contain;touch-action:pan-y;padding:0 calc(var(--sar) + 14px) 12px calc(var(--sal) + 14px)} #profileScr{display:none;padding:0!important;justify-content:flex-start!important;overflow:hidden} .profileScroll{flex:1 1 auto;min-height:0;width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch; overflow-x:hidden;box-sizing:border-box;overscroll-behavior:contain;touch-action:pan-y; padding:8px calc(var(--sar) + 14px) 18px calc(var(--sal) + 14px); display:flex;flex-direction:column;align-items:center} .profileScroll>*{max-width:100%!important} #setList{width:min(100%,430px);margin:0 auto;display:flex;flex-direction:column;gap:10px} .settingsNav{position:sticky!important;top:0;z-index:4;width:100%!important;margin:0!important; padding:8px 0 9px!important;background:linear-gradient(180deg,rgba(6,12,22,.99) 72%,rgba(6,12,22,.88))} /* Five settings tabs at a 64px basis, with flex-shrink pinned to 0 by the `flex:1 0 72px` shorthand below, came to 5*64 + 4*6 gap = 344px inside a 332px track. That 12px overflow only exists at 360px, which is why every check run on a 412px viewport missed it. Restoring shrink is the fix; a smaller basis alone cannot help while shrink is zero. */ .settingsNav .screenTabBtn{flex:1 1 56px;min-width:0;padding-left:2px;padding-right:2px;font-size:9px} .setGroup{display:flex;flex-direction:column;gap:7px;padding:11px;border-radius:14px;border:1px solid transparent; background:linear-gradient(180deg,rgba(13,23,37,.92),rgba(7,13,22,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.3),rgba(30,60,88,.16)) border-box} .setGroupHd{text-align:left;font-family:var(--fT);font-size:10.5px;letter-spacing:.17em;color:#8be8ff;font-weight:900} .setGroupDs{text-align:left;margin-top:-3px;font-size:10px;line-height:1.35;color:#6f91aa;font-weight:600} .setGroup .sItem{width:100%;margin:0} .audNowPlaying{display:grid;grid-template-columns:minmax(0,1fr);gap:3px;min-width:0;padding:10px 12px;border-radius:11px; border:1px solid rgba(89,194,239,.36);border-left:3px solid #59c2ef;text-align:left; background:linear-gradient(135deg,rgba(16,47,68,.76),rgba(6,16,27,.92));box-shadow:inset 0 1px rgba(255,255,255,.05)} .audNowHead{display:flex;align-items:baseline;justify-content:space-between;gap:8px;min-width:0} .audNowHead span,.audNowHead b{font-family:var(--fT);font-size:8px;line-height:1.25;letter-spacing:.14em;font-weight:900} .audNowHead span{color:#7ea7bf}.audNowHead b{min-width:0;color:#8be8ff;text-align:right;overflow-wrap:anywhere} .audNowPlaying>strong{min-width:0;color:#eff9ff;font:800 13px/1.35 var(--fU);overflow-wrap:anywhere} .audNowPlaying>span{min-width:0;color:#9fc6e0;font:700 9px/1.35 var(--fT);letter-spacing:.07em;overflow-wrap:anywhere} .audNowPlaying>small{min-width:0;color:#7fa2b9;font:750 8.5px/1.35 var(--fT);letter-spacing:.08em;overflow-wrap:anywhere} .audNowPlaying[data-scene="result-victory"]{border-left-color:#62e6a2;background:linear-gradient(135deg,rgba(16,66,53,.78),rgba(6,20,22,.94))} .audNowPlaying[data-scene="result-victory"] .audNowHead b{color:#82f3ba} .audNowPlaying[data-scene="result-defeat"]{border-left-color:#ff8d7a;background:linear-gradient(135deg,rgba(72,31,31,.8),rgba(20,10,16,.95))} .audNowPlaying[data-scene="result-defeat"] .audNowHead b{color:#ffad9f} .setEmpty{display:none;padding:18px 8px;text-align:center;color:#6f91aa;font-size:10.5px;font-weight:700} .setGroupEmpty .setEmpty{display:block} /* ---- SCREEN CATEGORY TABS -------------------------------------------------- These are destinations within one screen, not action buttons. A 48px minimum meets Android's touch target guidance and clears iOS's 44pt baseline. */ .screenTabs{flex:0 0 auto;width:min(94vw,430px);max-width:calc(100% - var(--sal) - var(--sar) - 20px); margin:0 auto;display:flex;gap:6px;overflow-x:auto;padding:8px 1px 9px; scrollbar-width:none;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;touch-action:pan-x} .screenTabs::-webkit-scrollbar{display:none} .screenTabBtn{position:relative;flex:1 1 72px;min-width:64px;min-height:48px;padding:5px 5px 7px; display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border-radius:10px; color:#82a7c1;border:1px solid transparent;font-family:var(--fT);font-size:9px;line-height:1; letter-spacing:.08em;font-weight:900;white-space:nowrap;touch-action:manipulation; background:linear-gradient(180deg,rgba(23,36,53,.97),rgba(10,18,30,.98)) padding-box, linear-gradient(160deg,rgba(120,170,205,.32),rgba(30,60,88,.18)) border-box} .screenTabBtn .tabGlyph{font-family:Arial,sans-serif;font-size:14px;line-height:1;color:#a6c5da} .screenTabBtn::after{content:"";position:absolute;left:24%;right:24%;bottom:3px;height:2px;border-radius:2px; background:var(--cy);box-shadow:0 0 7px var(--cy);opacity:0;transform:scaleX(.25);transition:.16s;pointer-events:none} .screenTabBtn.on{color:#fff; background:linear-gradient(180deg,rgba(40,93,130,.98),rgba(17,43,68,.99)) padding-box, linear-gradient(160deg,var(--cyL),var(--cy) 42%,var(--cyD) 72%,var(--cyL)) border-box; box-shadow:0 0 12px rgba(65,200,255,.28)} .screenTabBtn.on .tabGlyph{color:#dff8ff;text-shadow:0 0 7px rgba(65,200,255,.8)} .screenTabBtn.on::after{opacity:1;transform:scaleX(1)} .screenTabBtn:active{transform:scale(.96)} .screenTabBtn:focus-visible{outline:2px solid #ffe08a;outline-offset:2px} .screenTabs.twoTabs .screenTabBtn{flex-basis:120px} .mfTabPanel[hidden]{display:none!important} .profilePane{width:min(100%,430px);display:flex;flex-direction:column;align-items:center} .profilePane>.sHead:first-child{margin-top:2px} .profileActions{display:flex;gap:8px;width:min(94vw,402px);max-width:100%;margin-top:8px} /* Phone landscape and tablet widths should use the room they have. Keeping a portrait 430px column in the middle of a 1280px display made labels and controls unnecessarily small and left navigation visually disconnected. */ @media (orientation:landscape) and (min-width:760px){ .screenTabs{width:min(76vw,720px)} #setList,.profilePane,.dailyPane{width:min(76vw,720px)} #opsScr>.opsScroll{width:min(76vw,720px);margin:0 auto;padding-left:0;padding-right:0} #profStats,#accPanel,#savePanel,#profList,.profileActions,#dailyList,#boostRow2{width:100%!important;max-width:none!important} } /* ---- ROLE TABS ------------------------------------------------------------- Stacked sections meant scrolling past everything you did not want to reach the thing you did. Tabs put every role one tap away and keep the panel a constant height, which matters when it is anchored to the bottom of a phone. The strip sticks to the top of the panel so it stays reachable while the grid under it scrolls. */ .tabRow{position:sticky;top:35px;z-index:3;display:flex;gap:5px;overflow-x:auto; padding:4px 2px 8px;margin:-2px -2px 4px;-webkit-overflow-scrolling:touch; scrollbar-width:none;touch-action:pan-x;background:linear-gradient(180deg,rgba(12,20,32,.99) 70%,rgba(12,20,32,0))} .tabRow::-webkit-scrollbar{display:none} .tabBtn{flex:0 0 auto;display:flex;align-items:center;gap:5px;min-height:44px;padding:8px 11px;border-radius:9px; font-family:var(--fT);font-size:10px;letter-spacing:.13em;font-weight:800;white-space:nowrap; color:#8fb6d4;border:1px solid transparent;touch-action:manipulation; background:linear-gradient(180deg,rgba(26,40,58,.95),rgba(12,20,32,.97)) padding-box, linear-gradient(160deg,rgba(120,170,205,.30),rgba(30,60,88,.18)) border-box} .tabBtn .tEm{font-size:13px;line-height:1} .tabBtn.on{color:#fff; background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box, linear-gradient(160deg,var(--cyL),var(--cy) 40%,var(--cyD) 70%,var(--cyL)) border-box; box-shadow:0 0 12px rgba(65,200,255,.40)} .tabBtn:active{transform:scale(.95)} #noticeLogBtn{position:relative} #noticeLogCount{position:absolute;right:4px;top:3px;min-width:15px;height:15px;padding:0 3px;border-radius:8px; display:grid;place-items:center;background:#eb5048;color:#fff;font:800 8px/1 var(--fT);font-style:normal} #noticeLogCount:empty{display:none} #prodNav{display:grid;grid-template-columns:44px minmax(0,1fr) auto 44px;align-items:center;gap:6px; margin:0 0 7px;padding:5px;border-bottom:1px solid rgba(91,190,235,.22);background:rgba(4,14,25,.72)} #prodNav button{width:44px;height:44px;min-width:44px;min-height:44px;border-radius:8px;border:1px solid #315d7b;background:#102b42;color:#d9f5ff;font:900 24px/1 var(--fT)} #prodNav button:active{transform:scale(.94)}#prodNav button.muted{opacity:.28} #prodNav b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#c8efff;font:900 10px/1.2 var(--fT);letter-spacing:.1em} #prodNav span{color:#79b7d4;font:800 9px/1 var(--fT);letter-spacing:.08em;white-space:nowrap} #mfNoticeHistory{display:none;position:fixed;z-index:122;left:auto;right:max(var(--sar),9px);width:min(88vw,360px); bottom:calc(var(--sab) + 190px);height:auto;max-height:142px;flex-direction:column;overflow:hidden;border-radius:10px; color:#e8f7ff;border:1px solid rgba(107,204,250,.48);background:linear-gradient(180deg,rgba(14,31,49,.965),rgba(6,14,25,.975)); box-shadow:0 10px 28px rgba(0,0,0,.58),inset 0 1px rgba(255,255,255,.08);pointer-events:auto} #mfNoticeHistory header{display:flex;align-items:center;justify-content:space-between;padding:5px 7px 4px;border-bottom:1px solid rgba(100,185,230,.18)} #mfNoticeHistory header small{display:none}#mfNoticeHistory header b{display:block;margin:0;color:#8bdcff;font:900 9px var(--fT);letter-spacing:.13em}#mfNoticeHistory header button{width:30px;height:28px;border-radius:7px;color:#c9eaff;background:#172b40;border:1px solid #476987;font-size:16px} #mfNoticeHistory nav{display:flex;gap:3px;padding:4px 6px;overflow-x:auto}#mfNoticeHistory nav button{min-height:26px;padding:3px 7px;border-radius:7px;white-space:nowrap;color:#83a7c0;background:#101f30;border:1px solid #29445d;font:800 7px var(--fT);letter-spacing:.06em} #mfNoticeHistory nav button.on{color:#fff;border-color:#62d2ff;background:#1b5a82;box-shadow:0 0 10px rgba(70,200,255,.25)} .mfNoticeList{overflow-y:auto;padding:0 6px 5px}.mfNoticeItem{display:grid;grid-template-columns:48px 1fr;gap:5px;padding:5px 5px;border-bottom:1px solid rgba(110,175,210,.12);font-size:9.5px;line-height:1.2} .mfNoticeItem i{color:#68cffa;font:800 8px var(--fT);letter-spacing:.09em;font-style:normal}.mfNoticeItem.p0 i{color:#ff756d}.mfNoticeItem.p3 i{color:#d6b46a}.mfNoticeEmpty{padding:28px 12px;text-align:center;color:#7d9aad} @media(max-height:620px){#mfNoticeHistory{bottom:calc(var(--sab) + 8px);max-height:126px;width:min(72vw,350px)}} .bcard .wkTag{font-size:9px;letter-spacing:.12em;color:#8fb0c8;opacity:.75; font-weight:800;font-family:var(--fT);margin-top:2px} /* ============================================================================ UPDATER PANEL — start menu Sits under the menu grid: present enough that a player notices a patch, quiet enough that it is not competing with PLAY for attention. ============================================================================ */ /* Collapsed by default: one quiet line. It opens itself the moment there is a patch, a download or a failure — see updWants() in src/updater.js. */ #updPanel.mini{padding:7px 11px;margin-top:9px;background:linear-gradient(180deg,rgba(12,21,34,.62),rgba(7,13,22,.68)) padding-box, linear-gradient(160deg,rgba(120,170,205,.16),rgba(30,60,88,.08)) border-box;box-shadow:none} #updPanel.mini #updBarO,#updPanel.mini #updNotes,#updPanel.mini #updRoll{display:none!important} #updPanel.mini #updTxt{font-size:9.5px;color:#8fb3cc;letter-spacing:.13em} #updPanel.mini #updSub{font-size:9px;margin-top:1px;opacity:.85} #updPanel.mini #updBtn{min-height:44px;padding:8px 12px;font-size:9px;opacity:.9} #updPanel{width:min(88vw,340px);margin-top:14px;padding:11px 12px 10px;border-radius:12px; border:1px solid transparent; background:linear-gradient(180deg,rgba(15,26,42,.92),rgba(8,15,26,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.30),rgba(30,60,88,.18)) border-box; box-shadow:0 4px 16px rgba(0,0,0,.42)} #updPanel.good{background:linear-gradient(180deg,rgba(14,34,24,.94),rgba(7,20,14,.95)) padding-box, linear-gradient(160deg,rgba(120,235,170,.42),rgba(24,80,50,.24)) border-box} .updHead{display:flex;align-items:center;justify-content:space-between;gap:10px} #updTxt{font-family:var(--fT);font-size:11px;letter-spacing:.16em;color:#cfe8ff;font-weight:800} #updSub{font-size:10.5px;color:#8fb3cc;font-weight:600;margin-top:2px} .updBtns{display:flex;gap:6px;align-items:center;flex:0 0 auto} #updBtn,#updCancel{min-width:44px;min-height:44px;padding:9px 12px;border-radius:9px;font-family:var(--fT);font-size:10px; letter-spacing:.1em;font-weight:800;color:#dfeeff;border:1px solid transparent;white-space:nowrap; background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box, linear-gradient(160deg,var(--cyL),var(--cy) 40%,var(--cyD) 70%,var(--cyL)) border-box} #updBtn:disabled{opacity:.45} #updCancel{padding:9px 10px;background:linear-gradient(180deg,rgba(70,28,24,.96),rgba(34,12,10,.97)) padding-box, linear-gradient(160deg,#ffc9bd,#ff6a55 45%,#5e1d14 75%,#ffb0a2) border-box} /* MATCH loader — the second and only battlefield-specific loading archetype. The terrain sheet, planet survey map, region colour and map composition all come from the selected playable site. This is a deployment dossier, not a generic spinner over an unrelated space backdrop. */ #loadScr{--mf-match-accent:#5ad4ff;--mf-match-accent-rgb:90,212,255;--mf-match-x:50%;--mf-match-y:50%; padding:0!important;align-items:stretch!important;overflow:hidden;isolation:isolate;color:#dff7ff; background:#02070d!important;text-align:left!important} #loadScr .mfMatchLoadArt{position:absolute;inset:0;overflow:hidden;pointer-events:none;background:#02070d} #loadScr .mfMatchLoadTerrain{position:absolute;inset:-5%;transform:scale(1.06);opacity:.72; background-image:linear-gradient(90deg,rgba(1,5,10,.96) 0,rgba(1,6,11,.72) 43%,rgba(1,7,12,.30) 73%,rgba(1,5,10,.78) 100%),var(--mf-match-terrain,none); background-position:center,var(--mf-match-x) var(--mf-match-y);background-size:cover,cover;filter:saturate(.72) contrast(1.15) brightness(.62)} #loadScr .mfMatchLoadArt::before{content:'';position:absolute;z-index:2;inset:0;opacity:.30; background:repeating-linear-gradient(90deg,transparent 0 79px,rgba(var(--mf-match-accent-rgb),.10) 80px 81px),repeating-linear-gradient(0deg,transparent 0 79px,rgba(var(--mf-match-accent-rgb),.07) 80px 81px),linear-gradient(105deg,transparent 51%,rgba(var(--mf-match-accent-rgb),.12) 51.2%,transparent 51.5%)} #loadScr .mfMatchLoadArt::after{content:'';position:absolute;z-index:4;inset:0;background:linear-gradient(180deg,rgba(1,5,9,.86),transparent 24%,transparent 68%,rgba(1,5,9,.94)),radial-gradient(circle at 73% 44%,transparent 0 25%,rgba(1,5,9,.62) 64%)} #loadScr .mfMatchLoadWorld{position:absolute;z-index:1;right:-7%;top:10%;width:min(63vw,780px);height:78%;opacity:.38; border:1px solid rgba(var(--mf-match-accent-rgb),.34);clip-path:polygon(11% 0,100% 0,100% 89%,89% 100%,0 100%,0 11%); background-image:linear-gradient(135deg,rgba(2,10,17,.20),rgba(2,9,15,.76)),var(--mf-match-world,none);background-size:cover,cover;background-position:center; filter:saturate(.86) contrast(1.1);box-shadow:inset 0 0 70px #01050a,0 0 50px rgba(var(--mf-match-accent-rgb),.10)} #loadScr .mfMatchLoadRoute{position:absolute;z-index:3;right:8%;top:23%;width:min(47vw,560px);height:50%;opacity:.7;transform:skewX(-8deg)} #loadScr .mfMatchLoadRoute::before,#loadScr .mfMatchLoadRoute::after{content:'';position:absolute;border:1px solid rgba(var(--mf-match-accent-rgb),.44)} #loadScr .mfMatchLoadRoute::before{inset:8% 10% 14% 5%;clip-path:polygon(0 0,72% 0,100% 31%,100% 100%,16% 100%,0 82%)} #loadScr .mfMatchLoadRoute::after{left:28%;top:15%;width:38%;height:58%;border-style:dashed} #loadScr .mfMatchLoadRoute i{position:absolute;width:8px;height:8px;border:2px solid var(--mf-match-accent);background:#06121b;box-shadow:0 0 12px var(--mf-match-accent)} #loadScr .mfMatchLoadRoute i:nth-child(1){left:8%;top:18%}#loadScr .mfMatchLoadRoute i:nth-child(2){left:37%;top:64%}#loadScr .mfMatchLoadRoute i:nth-child(3){right:18%;top:29%}#loadScr .mfMatchLoadRoute i:nth-child(4){right:5%;bottom:13%} #loadScr .mfMatchLoadFrame{position:relative;z-index:6;min-height:100%;width:100%;display:grid;grid-template-rows:auto 1fr auto;gap:18px; padding:max(20px,calc(var(--sat) + 12px)) max(22px,calc(var(--sar) + 16px)) max(20px,calc(var(--sab) + 12px)) max(22px,calc(var(--sal) + 16px)); border:1px solid rgba(var(--mf-match-accent-rgb),.30);box-shadow:inset 0 0 0 8px rgba(1,7,12,.38)} #loadScr .mfMatchLoadHead{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;border-bottom:1px solid rgba(var(--mf-match-accent-rgb),.24);padding-bottom:10px} #loadScr .mfLoadBrand{position:relative;display:grid;place-items:center;width:clamp(150px,24vw,260px);aspect-ratio:1200/673;flex:0 0 auto} #loadScr .mfLoadBrand img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 9px 20px #000c)} #loadScr .mfLoadBrandFallback{font:900 clamp(20px,4vw,38px)/1 var(--fT);letter-spacing:.07em;color:#eefbff;text-shadow:0 0 28px rgba(var(--mf-match-accent-rgb),.3);white-space:nowrap} #loadScr .mfMatchLoadIdentity{display:grid;justify-items:end;gap:4px;padding-top:5px;text-align:right} #loadScr .mfMatchLoadIdentity span,#loadScr .mfMatchLoadFoot span{font:700 8px/1.35 var(--fT);letter-spacing:.2em;color:#6e93a6} #loadScr .mfMatchLoadIdentity b,#loadScr .mfMatchLoadFoot b{font:700 9px/1.4 var(--fT);letter-spacing:.12em;color:var(--mf-match-accent)} #loadScr .mfMatchLoadBrief{align-self:end;width:min(610px,88vw);padding:20px 22px 18px;border-left:2px solid var(--mf-match-accent); background:linear-gradient(90deg,rgba(2,9,16,.94),rgba(3,13,22,.66) 77%,transparent);box-shadow:-16px 0 40px #01060a99} #loadEyebrow{font:700 9px/1 var(--fT);letter-spacing:.30em;color:var(--mf-match-accent);margin-bottom:9px} #loadScr #loadTitle{margin:0;font-size:clamp(24px,5vw,46px)!important;line-height:1.04;letter-spacing:.035em;text-wrap:balance} #loadPoi{margin-top:9px;font:700 12px/1.3 var(--fT);letter-spacing:.20em;color:#e9fbff} #loadHook{margin-top:10px;max-width:540px;font:500 12px/1.55 var(--fU);color:#9fb8cc;text-align:left} #loadStats{margin-top:14px;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:6px 8px;max-width:560px} #loadStats .lsChip{display:flex;gap:6px;align-items:baseline;padding:5px 8px;border-radius:2px;background:rgba(4,16,26,.78);border:1px solid rgba(var(--mf-match-accent-rgb),.22)} #loadStats .lsK{font:700 7px/1 var(--fT);letter-spacing:.16em;color:#65889b} #loadStats .lsV{font:700 9px/1 var(--fT);letter-spacing:.08em;color:#d7edf5} #loadScr .mfMatchLoadFoot{display:grid;grid-template-columns:minmax(150px,1fr) auto auto;align-items:end;gap:18px;border-top:1px solid rgba(var(--mf-match-accent-rgb),.24);padding-top:11px} #loadScr .mfMatchLoadFoot>div:first-child{display:grid;gap:4px} #loadSub{font:700 9px/1.4 var(--fT);letter-spacing:.18em;color:#b7d2de;text-align:right} #loadScr .mfMatchLoadSignal{height:22px;display:flex;align-items:flex-end;gap:3px} #loadScr .mfMatchLoadSignal i{display:block;width:4px;background:var(--mf-match-accent);box-shadow:0 0 8px rgba(var(--mf-match-accent-rgb),.58);animation:mfMatchSignal 1.1s ease-in-out infinite alternate} #loadScr .mfMatchLoadSignal i:nth-child(1){height:7px}#loadScr .mfMatchLoadSignal i:nth-child(2){height:14px;animation-delay:.1s}#loadScr .mfMatchLoadSignal i:nth-child(3){height:22px;animation-delay:.2s}#loadScr .mfMatchLoadSignal i:nth-child(4){height:12px;animation-delay:.3s}#loadScr .mfMatchLoadSignal i:nth-child(5){height:18px;animation-delay:.4s} @keyframes mfMatchSignal{to{opacity:.28;transform:scaleY(.55);transform-origin:bottom}} @media(max-width:620px){#loadScr .mfMatchLoadWorld{right:-32%;width:112vw;opacity:.31}#loadScr .mfMatchLoadRoute{right:-14%;width:82vw;opacity:.48}#loadScr .mfMatchLoadFrame{gap:10px;padding:max(14px,calc(var(--sat) + 8px)) max(14px,calc(var(--sar) + 10px)) max(14px,calc(var(--sab) + 8px)) max(14px,calc(var(--sal) + 10px))}#loadScr .mfLoadBrand{width:145px}#loadScr .mfMatchLoadIdentity span{display:none}#loadScr .mfMatchLoadBrief{width:100%;padding:16px 14px 14px}#loadScr #loadTitle{font-size:clamp(23px,8vw,34px)!important}#loadHook{font-size:11px}#loadScr .mfMatchLoadFoot{grid-template-columns:1fr auto;gap:9px}#loadSub{grid-column:1/-1;grid-row:1;text-align:left}#loadScr .mfMatchLoadFoot>div:first-child{grid-column:1;grid-row:2}#loadScr .mfMatchLoadSignal{grid-column:2;grid-row:2}} @media(orientation:landscape) and (max-height:560px){#loadScr .mfMatchLoadFrame{grid-template-rows:62px 1fr 47px}#loadScr .mfLoadBrand{width:128px}#loadScr .mfMatchLoadBrief{align-self:center;width:min(54vw,580px);padding:11px 15px}#loadScr #loadTitle{font-size:clamp(22px,4.6vw,36px)!important}#loadHook{margin-top:6px;line-height:1.35}#loadStats{margin-top:8px}#loadScr .mfMatchLoadWorld{top:5%;height:90%}} @media(prefers-reduced-motion:reduce){#loadScr .mfMatchLoadSignal i{animation:none}} /* NORMAL recovery blocker. Boot and UGA carry the same sealed command-link composition in their self-contained CSS; early/modern WebGL recovery uses this shared shell without inventing a third visual loader. */ .mfNormalRecovery{--mf-normal-accent:#83edff;position:fixed;inset:0;z-index:2147483000;display:flex;align-items:center;justify-content:center;overflow:hidden;isolation:isolate;padding:26px;color:#d8f7ff;text-align:center;background:radial-gradient(ellipse at 50% 18%,#0c2637,#06131f 40%,#02060c 78%);font-family:var(--fT,system-ui,sans-serif)} .mfNormalRecovery::before{content:'';position:absolute;inset:-8%;opacity:.28;background:repeating-linear-gradient(90deg,transparent 0 126px,#72dff112 127px 128px,transparent 129px 254px),repeating-linear-gradient(0deg,transparent 0 92px,#72dff10c 93px 94px,transparent 95px 186px)} .mfNormalRecovery::after{content:'';position:absolute;inset:max(14px,var(--sat,0px)) max(14px,var(--sar,0px)) max(14px,var(--sab,0px)) max(14px,var(--sal,0px));border:1px solid #75c3d52a;pointer-events:none} .mfNormalRecoveryPanel{position:relative;z-index:2;width:min(540px,88vw);display:grid;justify-items:center;gap:12px;padding:20px 0;border-top:1px solid #71cce133;border-bottom:1px solid #72b8cc20} .mfNormalRecoveryBrand{position:relative;width:min(78vw,360px);aspect-ratio:1200/673;display:grid;place-items:center;margin-bottom:-8px} .mfNormalRecoveryBrand img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 10px 24px #000b)} .mfNormalRecoveryBrand span{font:900 clamp(30px,9vw,54px)/1 var(--fT,sans-serif);letter-spacing:.07em;color:#eefbff} .mfNormalRecoveryKicker{font:700 8px/1.4 ui-monospace,monospace;letter-spacing:.22em;color:#6fa8be} .mfNormalRecoveryTitle{font:900 14px/1.4 var(--fT,sans-serif);letter-spacing:.1em;color:var(--mf-normal-accent)} .mfNormalRecoveryBody{max-width:390px;font:500 12px/1.55 var(--fU,system-ui,sans-serif);color:#9fb8cc} .mfNormalRecoverySignal{width:min(340px,75vw);height:4px;overflow:hidden;background:#183344} .mfNormalRecoverySignal i{display:block;width:28%;height:100%;background:linear-gradient(90deg,#2b96c3,#91f6ff);box-shadow:0 0 14px #5ee1ff;animation:mfNormalRecoverySignal 1.8s ease-in-out infinite} .mfNormalRecovery button{min-width:156px;min-height:44px;margin-top:4px;padding:11px 24px;border:1px solid #48cfff;border-radius:3px;background:linear-gradient(180deg,#174a67,#0b2639);color:#eaf7ff;font:900 10px/1 var(--fT,sans-serif);letter-spacing:.12em} @keyframes mfNormalRecoverySignal{0%{transform:translateX(-120%)}55%,100%{transform:translateX(360%)}} @media(prefers-reduced-motion:reduce){.mfNormalRecoverySignal i{width:100%;animation:none}} #updBarO{margin-top:9px;height:7px;border-radius:5px;overflow:hidden; background:rgba(4,10,18,.85);box-shadow:inset 0 1px 3px rgba(0,0,0,.7)} /* Per-file download feed. Hidden in mini exactly like the bar it sits under. */ #updPanel.mini #updFeed{display:none!important} #updFeed{margin-top:7px;max-height:104px;overflow-y:auto;font:600 9px/1.5 var(--fT);letter-spacing:.05em} #updFeed .updFRow{display:grid;grid-template-columns:12px minmax(0,1fr) auto;gap:6px;align-items:center;padding:1.5px 0;color:#8fb3cc} #updFeed .updFN{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} #updFeed .updFS{opacity:.8;font-variant-numeric:tabular-nums} #updFeed .updFRow.downloading{color:#cfe6ff} #updFeed .updFRow.ok{color:#5dff9a} #updFeed .updFRow.fail{color:#ff6b5a} #updBarF{height:100%;width:0%;border-radius:5px; background:linear-gradient(90deg,var(--cy2),var(--cy) 60%,var(--cyL)); box-shadow:0 0 10px rgba(65,200,255,.55);transition:width .18s linear} #updPanel.good #updBarF{background:linear-gradient(90deg,#1f9c62,#3fdc8f 60%,#c8ffe4); box-shadow:0 0 10px rgba(80,230,150,.5)} /* The bar keeps moving while a download is in flight even if a chunk is slow, so a stalled connection reads as "still working" rather than as a freeze. */ #updPanel.busy #updBarF::after{content:'';position:absolute;inset:0; background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent); animation:updSheen 1.1s linear infinite} #updPanel.busy #updBarF{position:relative;overflow:hidden} @keyframes updSheen{from{transform:translateX(-100%)}to{transform:translateX(100%)}} #updNotes{margin-top:9px;font-size:10.5px;line-height:1.45;color:#a8c6dd;font-weight:600; max-height:76px;overflow-y:auto;white-space:pre-line} #updRoll{display:none;margin-top:8px;width:100%;min-height:44px;padding:9px;border-radius:8px; font-size:10px;letter-spacing:.08em;color:#8a9fb4;font-weight:700; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box} body.patched #updRoll{display:block} /* ============================================================================ MENUS IN DEPTH ---------------------------------------------------------------------------- The start screen is now a window onto a live battlefield, so it stops being an opaque sheet: a vignette and a soft scrim keep the text legible while the scene reads through. The panels themselves sit in a perspective container and are pushed toward the viewer on the Z axis, and the whole stack leans a couple of degrees against the camera's orbit — so the UI is standing in the scene rather than pasted over it. ============================================================================ */ #startScreen{ background: /* A pool of shade under the title block only, so the words stay crisp while the battlefield reads clearly everywhere else. */ radial-gradient(ellipse 78% 30% at 50% 41%, rgba(2,6,12,.94), rgba(2,6,12,0) 72%), radial-gradient(ellipse at 50% 45%, rgba(3,7,14,0) 42%, rgba(3,7,14,.50) 78%, rgba(2,5,11,.88) 100%), linear-gradient(180deg, rgba(4,9,17,.72) 0%, rgba(4,9,17,.16) 24%, rgba(4,9,17,.14) 56%, rgba(3,7,14,.80) 100%); backdrop-filter:blur(1.1px); perspective:1100px; perspective-origin:50% 42%; --px:0deg; --py:0deg; } #startScreen > *{ transform-style:preserve-3d; transition:transform .5s cubic-bezier(.2,.7,.3,1); } /* Layered depth: the emblem and title stand furthest forward, the buttons sit just behind them, and the chrome at the edges lies flattest. Combined with the orbit-driven lean this parallaxes exactly like a real object would. */ #startScreen #emblem{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(72px)} #startScreen .title{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(58px)} #startScreen .subtitle{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(46px)} #startScreen #startBtn{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(40px)} #startScreen .menuGrid{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(26px)} #startScreen .menuStrip{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(18px)} #startScreen #menuIntel{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(13px)} #startScreen #metaHead{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(14px)} #startScreen #updPanel{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(8px)} #startScreen .hint{transform:rotateY(var(--px)) rotateX(var(--py)) translateZ(4px)} /* Text needs a little more weight now that there is a moving image behind it. */ #startScreen .title{text-shadow:0 6px 26px rgba(0,0,0,.85),0 2px 5px rgba(0,0,0,.9)} #startScreen .subtitle,#startScreen .hint{text-shadow:0 2px 8px rgba(0,0,0,.9)} #startScreen #metaHead,#startScreen #updPanel,#startScreen .gbtn,#startScreen #startBtn{ box-shadow:0 10px 30px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.12)} /* Buttons press INTO the panel rather than merely shrinking — the depth cue makes a touch feel like it landed on something physical. */ .gbtn,.mbtn,.dbtn,.tabBtn,.bcard{transform-style:preserve-3d} .gbtn:active,.mbtn:active{transform:translateZ(-14px) scale(.97)} .setupCard{transform-style:preserve-3d} #setupScr{perspective:1200px;perspective-origin:50% 38%} .setupScroll .setupCard{transform:translateZ(10px);transition:transform .35s cubic-bezier(.2,.7,.3,1)} .setupScroll .setupCard:active{transform:translateZ(24px)} /* In-match panels get the same treatment, kept subtle: they are read at a glance mid-fight and must never cost legibility for style. */ #buildMenu,#prodMenu{perspective:900px} #buildMenu .bcard,#prodMenu .bcard{transition:transform .2s cubic-bezier(.2,.7,.3,1)} #buildMenu .bcard:active,#prodMenu .bcard:active{transform:translateZ(18px) scale(1.04)} @media (prefers-reduced-motion:reduce){ #startScreen > *{transition:none} #startScreen #emblem,#startScreen .title,#startScreen .subtitle,#startScreen #startBtn, #startScreen .menuGrid,#startScreen .menuStrip,#startScreen #menuIntel,#startScreen #metaHead, #startScreen #updPanel,#startScreen .hint{transform:none} #startScreen .gbtn:active,#startScreen .sbtn:active,#startScreen .mbtn:active, #startScreen #metaHead:active{transform:none;filter:brightness(1.14)} } /* Continuously changing 3D transforms can make an Android WebView re-run hit testing between touch-down and touch-up. Keep the live battlefield, lighting and motion, but pin the actual controls to a stable 2D plane on touch-only devices so the target under a finger cannot move before the tap completes. */ @media (hover:none) and (pointer:coarse){ #startScreen{perspective:none} #startScreen > *{transition:none;transform-style:flat} #startScreen #emblem,#startScreen .title,#startScreen .subtitle,#startScreen #startBtn, #startScreen .menuGrid,#startScreen .menuStrip,#startScreen #menuIntel,#startScreen #metaHead, #startScreen #updPanel,#startScreen .hint{transform:none} } /* ============================================================================ MENU BACKDROP — Live / Dimmed / Off The live diorama was doing what a diorama does: moving. Behind a menu that is read rather than watched, motion competes for the eye every time it crosses a label. Dimmed is now the default — the scene still reads as a real battlefield, but it sits back: heavier scrim, more blur, and a slower orbit (set in attractTick). Off replaces it with a flat plate for anyone who wants the menu and nothing else. ============================================================================ */ /* Two layers, not three. Stacked alphas multiply, so the first attempt at this (.96 over .76 over .58) left about one percent of the scene showing and Dimmed was indistinguishable from Off. A pool of shade under the text block and a light overall wash is enough — the desaturation and blur are doing most of the work, and they cost the image nothing in legibility. */ body.bgDim #startScreen{ background: radial-gradient(ellipse 92% 46% at 50% 42%, rgba(2,6,12,.86), rgba(2,6,12,.18) 80%), linear-gradient(180deg, rgba(4,9,17,.60) 0%, rgba(4,9,17,.26) 30%, rgba(4,9,17,.30) 62%, rgba(3,7,14,.70) 100%); backdrop-filter:blur(3px) saturate(.55) brightness(.72); } body.bgOff #startScreen{ background: radial-gradient(ellipse at 50% -12%, rgba(26,62,96,.5), transparent 62%), radial-gradient(ellipse at 50% 116%, rgba(96,58,14,.26), transparent 55%), #050a13; backdrop-filter:none; } /* Nothing behind the plate needs drawing — hand the GPU back. Scoped to menuMode so this never touches the canvas during an actual match. */ body.menuMode.bgOff #gl,body.menuMode.bgOff #grade,body.menuMode.bgOff #vignette{display:none} /* While the menu diorama is up, the match HUD is hidden outright rather than merely covered — a blurred command bar showing through the title screen reads as a bug, not as depth. */ body.menuMode #topbar,body.menuMode #cmdbar,body.menuMode #minimapWrap, body.menuMode #camRow,body.menuMode #goalBar,body.menuMode #wcRow, body.menuMode #infMeter,body.menuMode #selInfo,body.menuMode #heroBar, body.menuMode #fps,body.menuMode #atkAlert,body.menuMode #waveAlert, body.menuMode #wcBanner,body.menuMode #consHud,body.menuMode #hazChip{display:none!important} /* One rule owns the counter's visibility, driven by the setting via a body class. Inline styles cannot beat an !important media rule, which is why the toggle appeared dead rather than merely wrong. */ body:not(.fpsOn) #fps{display:none!important} body.fpsOn:not(.menuMode) #fps{display:block} body.hudTacticalDock #fps,body.hudTacticalDock.fpsOn #fps{display:none!important} /* The wordmark is a clipped gradient, so it has no fill of its own to lean on. Over a bright battlefield its darker stops fell to roughly the value of sunlit grass and the letters vanished. A hard drop shadow gives every stroke its own edge without touching the metal look. */ #startScreen .title{ filter:drop-shadow(0 3px 0 rgba(0,0,0,.55)) drop-shadow(0 0 18px rgba(0,0,0,.9)); letter-spacing:.09em} #startScreen .subtitle{filter:drop-shadow(0 2px 5px rgba(0,0,0,.95))} /* ============================================================================ PROFILE — career card, account panel, save codes ============================================================================ */ #profStats{width:min(94vw,402px);margin-top:8px} .cRank{font-family:var(--fT);font-size:12px;letter-spacing:.12em;color:#ffe9ad;font-weight:800; text-align:center;margin-bottom:9px} .cGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px} .cCell{padding:9px 4px;border-radius:10px;text-align:center;border:1px solid transparent; background:linear-gradient(180deg,rgba(15,26,42,.92),rgba(8,15,26,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.26),rgba(30,60,88,.16)) border-box} .cCell b{display:block;font-family:var(--fT);font-size:15px;color:#eaf7ff;letter-spacing:.02em} .cCell span{display:block;margin-top:3px;font-size:9px;letter-spacing:.14em;color:#7fa8c6;font-weight:800} .cFoot{margin-top:8px;text-align:center;font-size:11px;color:#8fb3cc;font-weight:600} .cMilestoneLedger{display:flex;flex-direction:column;gap:6px;margin-top:11px;text-align:left} .cMilestoneHead{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:0 2px} .cMilestoneHead b{color:#eaf7ff;font:900 10px/1.2 var(--fT);letter-spacing:.13em}.cMilestoneHead span{color:#7192aa;font:700 8.5px/1.3 var(--fU)} .cMilestone{display:grid;grid-template-columns:110px minmax(0,1fr);gap:8px;align-items:start;padding:8px 9px;border-radius:10px; border:1px solid rgba(110,154,183,.2);background:linear-gradient(160deg,rgba(13,25,40,.9),rgba(6,13,23,.94))} .cMilestone.current{border-color:rgba(255,211,102,.55);box-shadow:inset 3px 0 #ffd366}.cMilestone.locked{opacity:.53} .cMilestoneRank{display:flex;align-items:center;gap:6px;min-width:0}.cMilestoneRank i{font-style:normal;font-size:18px} .cMilestoneRank span,.cMilestoneRank b,.cMilestoneRank small{display:block;min-width:0}.cMilestoneRank b{color:#eaf7ff;font:900 9px/1.2 var(--fT);letter-spacing:.06em} .cMilestoneRank small{margin-top:2px;color:#779ab2;font:700 8px/1.2 var(--fU)} .cMilestoneItems{display:flex;flex-direction:column;gap:4px;min-width:0}.cMilestoneItems>div{display:flex;align-items:center;gap:6px;min-width:0} .cMilestoneItems>div>span:last-child{min-width:0;color:#b8d0df;font:700 8.5px/1.3 var(--fU);overflow-wrap:anywhere} #accPanel,#savePanel{width:min(94vw,402px);margin-top:7px;padding:11px;border-radius:12px; border:1px solid transparent; background:linear-gradient(180deg,rgba(15,26,42,.92),rgba(8,15,26,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.30),rgba(30,60,88,.18)) border-box} #accPanel.busy{opacity:.6;pointer-events:none} .accHead{display:flex;align-items:center;gap:10px;text-align:left} #accAv{width:42px;height:42px;flex:0 0 auto;border-radius:50%;background-size:cover;background-position:center; display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:800;color:#cfe8ff; background-color:#16253a;border:1px solid rgba(120,170,205,.35)} .accWho{min-width:0} .accWho b{display:block;font-family:var(--fT);font-size:13px;color:#eaf7ff;letter-spacing:.03em; white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .accWho span{display:block;font-size:10.5px;color:#8fb3cc;font-weight:600;margin-top:2px; white-space:nowrap;overflow:hidden;text-overflow:ellipsis} #accBtns{display:flex;flex-direction:column;gap:7px;margin-top:10px} .accBtn{display:flex;align-items:center;justify-content:center;gap:8px;padding:11px 12px;border-radius:10px; font-family:var(--fT);font-size:11px;letter-spacing:.08em;font-weight:800;color:#fff; border:1px solid transparent; background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box, linear-gradient(160deg,var(--cyL),var(--cy) 40%,var(--cyD) 70%,var(--cyL)) border-box} .accBtn.ghost{color:#9fc6e0;background:var(--panelG2) padding-box,var(--steelB) border-box} .accBtn.google{background:linear-gradient(180deg,#f6f7f9,#dfe3e8) padding-box, linear-gradient(160deg,#fff,#c9ced6) border-box;color:#1f2328} .accBtn.facebook{background:linear-gradient(180deg,#2a63d6,#1a4bb0) padding-box, linear-gradient(160deg,#9fc0ff,#1a4bb0) border-box;color:#fff} /* A provider with no credentials in this build is shown, but shown as off — a button that silently does nothing is worse than one that says why. */ .accBtn.off{opacity:.42} .accEm{display:inline-flex;width:19px;height:19px;align-items:center;justify-content:center; border-radius:50%;background:rgba(0,0,0,.16);font-weight:900;font-size:12px} .accBtn.google .accEm{background:#1a73e8;color:#fff} #accSync{margin-top:9px;font-size:10.5px;color:#8fb3cc;font-weight:600;text-align:center} .saveFileInfo{display:flex;align-items:center;gap:10px;padding:9px;border-radius:10px; border:1px solid rgba(93,255,154,.24);background:rgba(8,31,31,.58)} .saveFileIcon{width:36px;height:36px;flex:0 0 auto;border-radius:9px;display:flex;align-items:center; justify-content:center;font-family:var(--fT);font-size:19px;color:#8dffc0; border:1px solid rgba(93,255,154,.32);background:rgba(25,92,63,.34);box-shadow:0 0 14px rgba(46,255,142,.08)} .saveFileInfo b{display:block;font-family:var(--fT);font-size:11px;letter-spacing:.09em;color:#dffff0} .saveFileInfo span{display:block;margin-top:3px;font-size:10px;color:#8fbfa8;font-weight:650} .saveFileHint{margin-top:8px;font-size:10px;line-height:1.4;color:#789bb3;text-align:center;font-weight:600} .saveBtns{display:flex;gap:7px;margin-top:8px} .saveBtns .accBtn{flex:1} .saveBtns .accBtn:disabled{opacity:.55} #accDlg{display:none;position:fixed;inset:0;z-index:120;align-items:center;justify-content:center; background:rgba(2,5,11,.78);backdrop-filter:blur(3px);padding:22px} .accDlgBox{width:min(92vw,360px);padding:16px;border-radius:14px;border:1px solid transparent; background:linear-gradient(180deg,rgba(18,30,48,.98),rgba(9,16,28,.99)) padding-box, linear-gradient(160deg,rgba(140,190,225,.42),rgba(30,60,88,.22)) border-box; box-shadow:0 14px 40px rgba(0,0,0,.7)} #accDlgTxt{font-size:12.5px;line-height:1.5;color:#dfeeff;font-weight:600;text-align:center} .accDlgBtns{display:flex;gap:8px;margin-top:14px} .accDlgBtns .accBtn{flex:1} /* ============================================================================ DAILY ORDERS · BOOSTERS · DISPATCHES ============================================================================ */ .gbtn{position:relative} .gDot{position:absolute;top:7px;right:9px;width:9px;height:9px;border-radius:50%;display:none; background:#ffd257;box-shadow:0 0 8px rgba(255,210,87,.9)} .gDot.on{display:block;animation:dotPulse 1.4s ease-in-out infinite} @keyframes dotPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.82)}} #boostRow{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;width:min(88vw,340px);margin-top:10px} #boostRow2{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;width:min(94vw,402px);margin-top:6px} .boostChip{display:flex;align-items:center;gap:5px;padding:6px 10px;border-radius:9px; font-family:var(--fT);font-size:9.5px;letter-spacing:.08em;font-weight:800;color:#ffe9ad; border:1px solid transparent; background:linear-gradient(180deg,rgba(58,44,14,.95),rgba(28,20,6,.96)) padding-box, linear-gradient(160deg,#ffe9ad,#e8bd5c 45%,#6b4d14 75%,#ffd257) border-box} .boostChip b{color:#fff;font-weight:900} #dailyScr{display:none;padding:0!important;justify-content:flex-start!important;overflow:hidden} #dossierScr{display:none;justify-content:flex-start;padding-top:calc(var(--sat) + 18px)} .dailyScroll{flex:1 1 auto;min-height:0;width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch; overscroll-behavior:contain;touch-action:pan-y;padding:2px calc(var(--sar) + 14px) 16px calc(var(--sal) + 14px)} .dailyPane{width:min(100%,430px);margin:0 auto;display:flex;flex-direction:column;align-items:center} #dailyHead,#dossHead{margin-top:7px;font-size:11px;color:#8fb3cc;font-weight:700;letter-spacing:.06em} .dailyScopeNote{display:flex;align-items:center;gap:7px;max-width:402px;margin-top:7px;padding:6px 8px;border-radius:8px;text-align:left; border:1px solid rgba(255,132,106,.22);background:rgba(64,22,17,.3)} .dailyScopeNote>span:last-child{min-width:0;color:#9fb5c4;font:650 8.5px/1.35 var(--fU);letter-spacing:.02em;overflow-wrap:anywhere} #dailyList,#dossierList{width:min(100%,402px);margin-top:11px;display:flex;flex-direction:column;gap:8px} .ordItem{display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:12px;text-align:left; border:1px solid transparent; background:linear-gradient(180deg,rgba(15,26,42,.92),rgba(8,15,26,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.30),rgba(30,60,88,.18)) border-box} .ordVisual{flex:0 0 70px;align-self:stretch;min-height:70px;position:relative;overflow:hidden;border:1px solid rgba(89,194,239,.3);border-radius:9px; background:#050c14 url('../../assets/textures/ui/menu-art-v1/operations-war-table-v1.webp') 45% center/auto 100% no-repeat} .ordVisual.arsenal{background-image:url('../../assets/textures/ui/menu-art-v1/arsenal-fabrication-bay-v1.webp');background-position:58% center} .ordVisual.intel{background-image:url('../../assets/textures/ui/menu-art-v1/contracts-intel-table-v1.webp');background-position:52% center} .ordVisual::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent 45%,rgba(5,12,20,.62));box-shadow:inset 0 0 0 4px rgba(2,8,14,.22)} .ordItem.done{background:linear-gradient(180deg,rgba(14,34,24,.94),rgba(7,20,14,.95)) padding-box, linear-gradient(160deg,rgba(120,235,170,.46),rgba(24,80,50,.26)) border-box; box-shadow:0 0 14px rgba(80,230,150,.20)} .ordItem.claimed{opacity:.5} .ordTx{flex:1;min-width:0} .ordTx b{display:block;font-family:var(--fT);font-size:12px;color:#eaf7ff;letter-spacing:.03em} .ordTx span{display:block;font-size:10.5px;color:#8fb3cc;font-weight:600;margin-top:2px} .ordBarO{margin-top:7px;height:5px;border-radius:4px;background:rgba(4,10,18,.85);overflow:hidden} .ordBarF{height:100%;border-radius:4px;background:linear-gradient(90deg,var(--cy2),var(--cy) 70%,var(--cyL)); transition:width .3s ease} .ordItem.done .ordBarF{background:linear-gradient(90deg,#1f9c62,#3fdc8f 70%,#c8ffe4)} .ordRw{margin-top:6px;font-size:9.5px;letter-spacing:.06em;color:#ffe9ad;font-weight:800;font-family:var(--fT)} .ordAct{flex:0 0 auto;min-width:56px;text-align:center;padding:9px 8px;border-radius:9px; font-family:var(--fT);font-size:10px;letter-spacing:.08em;font-weight:800;color:#9fc6e0; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box} .ordItem.done .ordAct{color:#062;background:linear-gradient(180deg,#7ef0b4,#2bd672) padding-box, linear-gradient(160deg,#d8ffe9,#1f9c62) border-box} @media(max-width:380px){.ordVisual{flex-basis:54px}.ordItem{gap:8px;padding-left:8px;padding-right:8px}} .dossItem{display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:12px;text-align:left; border:1px solid transparent; background:linear-gradient(180deg,rgba(15,26,42,.92),rgba(8,15,26,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.30),rgba(30,60,88,.18)) border-box} .dossItem.locked{opacity:.45} .dossN{font-family:var(--fT);font-size:16px;color:var(--cy);font-weight:900;opacity:.75;min-width:26px} .dossTx{flex:1;min-width:0} .dossTx b{display:block;font-family:var(--fT);font-size:12px;color:#eaf7ff;letter-spacing:.05em} .dossTx span{display:block;font-size:10px;color:#8fb3cc;font-weight:600;margin-top:2px;letter-spacing:.05em} .dossLock{font-size:14px;opacity:.7} #dispatch{display:none;position:fixed;inset:0;z-index:130;align-items:center;justify-content:center; padding:max(16px,calc(var(--sat) + 8px)) max(14px,calc(var(--sar) + 12px)) max(16px,calc(var(--sab) + 8px)) max(14px,calc(var(--sal) + 12px)); background:radial-gradient(circle at 50% 30%,rgba(18,49,72,.20),transparent 54%),rgba(1,4,9,.9);backdrop-filter:blur(7px)} #dispatch.in .dispBox{animation:dispIn .42s cubic-bezier(.2,.8,.3,1)} @keyframes dispIn{from{opacity:0;transform:translateY(18px) scale(.975);filter:brightness(1.4)}to{opacity:1;transform:none;filter:none}} .dispBox{--da:#62d9ff;--dar:98,217,255;position:relative;isolation:isolate;width:min(94vw,460px); max-height:min(88vh,720px);max-height:min(88dvh,720px);overflow-y:auto;padding:16px 17px 16px;border-radius:15px; border:1px solid rgba(var(--dar),.52);text-align:left;color:#dcebf6; background:radial-gradient(circle at 12% 0,rgba(var(--dar),.13),transparent 37%), linear-gradient(180deg,rgba(9,20,33,.995),rgba(4,10,18,.995)); box-shadow:0 20px 60px rgba(0,0,0,.86),0 0 42px rgba(var(--dar),.12),inset 0 1px 0 rgba(255,255,255,.08)} .dispBox::before{content:'';position:absolute;z-index:-1;inset:0;pointer-events:none;border-radius:inherit;opacity:.26; background:repeating-linear-gradient(180deg,transparent 0 3px,rgba(105,190,235,.055) 3px 4px)} .dispBox::after{content:'';position:absolute;z-index:4;inset:0;pointer-events:none;border-radius:inherit; background:linear-gradient(90deg,var(--da) 0 25px,transparent 25px calc(100% - 25px),var(--da) calc(100% - 25px)) top/100% 2px no-repeat; opacity:.78} .dispBox[data-faction="ascendancy"]{--da:#ff675d;--dar:255,103,93} .dispBox[data-faction="syndicate"]{--da:#75e96d;--dar:117,233,109} .dispBox[data-faction="horde"]{--da:#b968ff;--dar:185,104,255} .dispSignalRail{position:relative;z-index:1;height:8px;display:flex;justify-content:flex-end;gap:3px;margin:-4px 0 8px} .dispSignalRail span{width:13px;border-radius:1px;background:var(--da);opacity:.18;box-shadow:0 0 5px rgba(var(--dar),.6)} .dispSignalRail span:nth-child(2){opacity:.30}.dispSignalRail span:nth-child(3){opacity:.46} .dispSignalRail span:nth-child(4){opacity:.66}.dispSignalRail span:nth-child(5){opacity:.92} .dispSpeaker{position:relative;z-index:1;display:grid;grid-template-columns:92px minmax(0,1fr);align-items:center;gap:13px} .dispPortraitFrame{position:relative;width:92px;height:92px;padding:3px;overflow:hidden;clip-path:polygon(9px 0,100% 0,100% calc(100% - 9px),calc(100% - 9px) 100%,0 100%,0 9px); background:linear-gradient(145deg,rgba(var(--dar),.92),rgba(var(--dar),.18) 42%,rgba(var(--dar),.68)); box-shadow:0 0 20px rgba(var(--dar),.22)} #dispPortrait{display:block;width:86px;height:86px;object-fit:cover;background:#07111d;transition:filter .25s,transform .25s} .dispPortraitSweep{position:absolute;z-index:2;inset:3px;pointer-events:none;overflow:hidden; background:linear-gradient(180deg,transparent 0 44%,rgba(var(--dar),.2) 50%,transparent 56%);background-size:100% 190%;animation:dispScan 3.2s linear infinite} @keyframes dispScan{to{background-position:0 190%}} #dispStateMark{position:absolute;z-index:3;right:4px;bottom:4px;padding:3px 5px;background:rgba(2,7,13,.86);color:var(--da); font:900 9px/1 var(--fT);letter-spacing:.12em;border-left:1px solid var(--da)} .dispSpeakerCopy{min-width:0} .dispRoute{display:flex;justify-content:space-between;gap:8px;color:var(--da);font:800 9px/1 var(--fT);letter-spacing:.12em;white-space:nowrap} .dispRoute span:last-child{color:#62839a} #dispSpeakerName{margin-top:9px;overflow:hidden;text-overflow:ellipsis;color:#f1f8fd;font:900 15px/1.08 var(--fT);letter-spacing:.075em;text-transform:uppercase} .dispAffiliation{display:flex;min-width:0;gap:4px;margin-top:7px;color:#779ab1;font:750 9px/1.35 var(--fT);letter-spacing:.07em;text-transform:uppercase} .dispAffiliation i{font-style:normal;color:#3d5b70}.dispAffiliation span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} #dispFaction{color:var(--da);flex:0 0 auto;max-width:48%} #dispFrom{min-width:0} .dispRule{position:relative;z-index:1;height:1px;margin:13px 0 10px;background:linear-gradient(90deg,var(--da),rgba(var(--dar),.22),transparent)} .dispRule span{position:absolute;left:0;top:-3px;width:7px;height:7px;transform:rotate(45deg);background:var(--da);box-shadow:0 0 8px rgba(var(--dar),.7)} .dispMeta{position:relative;z-index:1;display:flex;justify-content:space-between;gap:10px;color:#688aa1;font:800 9px/1 var(--fT);letter-spacing:.13em} #dispClass{color:var(--da)} #dispTtl{position:relative;z-index:1;margin-top:9px;color:#eefaff;font:900 18px/1.16 var(--fT);letter-spacing:.09em; text-shadow:0 0 18px rgba(var(--dar),.38)} #dispTxt{position:relative;z-index:1;margin-top:12px;padding:10px 11px 10px 13px;white-space:pre-line; border-left:2px solid rgba(var(--dar),.58);background:linear-gradient(90deg,rgba(var(--dar),.075),transparent 66%); color:#cbddea;font-size:12.4px;line-height:1.6;font-weight:600} #dispOk{position:relative;z-index:5;margin-top:14px;width:100%;min-height:48px;color:#06111a; background:linear-gradient(180deg,#c9f5ff,var(--da) 55%,rgba(var(--dar),.72)) padding-box, linear-gradient(160deg,#fff,var(--da)) border-box} .dispBox[data-mode="intercepted"] #dispPortrait{filter:saturate(.62) contrast(1.2);transform:scale(1.025)} .dispBox[data-mode="intercepted"] .dispPortraitSweep{animation-duration:.72s;opacity:.82} .dispBox[data-mode="intercepted"]::before{opacity:.48} .dispBox[data-mode="urgent"]{box-shadow:0 20px 60px rgba(0,0,0,.86),0 0 38px rgba(255,92,67,.22),inset 0 1px 0 rgba(255,255,255,.08)} .dispBox[data-mode="urgent"] #dispStateMark,.dispBox[data-mode="urgent"] #dispClass{animation:dispUrgent 1s ease-in-out infinite} @keyframes dispUrgent{50%{opacity:.42}} .dispBox[data-mode="open"] .dispSignalRail span:nth-last-child(-n+2){opacity:.16} .dispBox[data-mode="field"] #dispPortrait{filter:saturate(.82) contrast(1.08)} @media (max-width:430px){ .dispBox{width:100%;padding:13px 13px 14px} .dispSpeaker{grid-template-columns:82px minmax(0,1fr);gap:10px} .dispPortraitFrame{width:82px;height:82px}.dispPortraitFrame #dispPortrait{width:76px;height:76px} #dispSpeakerName{font-size:12.5px;letter-spacing:.055em}.dispAffiliation{font-size:9px} #dispTtl{font-size:16px}#dispTxt{font-size:11.7px;line-height:1.55} } @media (max-height:590px) and (orientation:landscape){ #dispatch{align-items:flex-start}.dispBox{max-height:calc(100dvh - var(--sat) - var(--sab) - 12px)} .dispSpeaker{grid-template-columns:70px minmax(0,1fr)}.dispPortraitFrame{width:70px;height:70px} .dispPortraitFrame #dispPortrait{width:64px;height:64px}#dispSpeakerName{font-size:12px} } /* ============================================================================ OPERATIONS — threat ladder, modifiers, weekly, mastery ============================================================================ */ #opsScr{display:none;padding:0!important;justify-content:flex-start!important;perspective:1200px;overflow:hidden} #opsScr>.opsScroll{min-height:0;overflow-x:hidden;overscroll-behavior:contain;touch-action:pan-y} .opsScroll{flex:1 1 auto;width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch; padding:2px calc(var(--sar) + 14px) 12px calc(var(--sal) + 14px); display:flex;flex-direction:column;gap:12px;align-items:stretch} .opsBrief{flex:0 0 auto;width:min(94vw,430px);max-width:calc(100% - var(--sal) - var(--sar) - 20px); box-sizing:border-box;margin:8px auto 7px;padding:8px 10px 9px;border-radius:12px; border:1px solid transparent;background:linear-gradient(180deg,rgba(18,35,53,.97),rgba(7,16,27,.98)) padding-box, linear-gradient(155deg,rgba(151,220,255,.55),rgba(35,90,126,.22) 62%,rgba(255,208,102,.35)) border-box; box-shadow:0 5px 16px rgba(0,0,0,.42),inset 0 1px 0 rgba(255,255,255,.07)} .opsBriefHead{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 2px 6px; color:#83bddc;font:800 9px var(--fT);letter-spacing:.18em} .opsBriefHead b{padding:3px 7px;border-radius:6px;color:#8ff0bd;background:rgba(24,94,63,.35); border:1px solid rgba(91,230,159,.25);font-size:9px;letter-spacing:.12em} .opsBriefGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px} .opsBriefGrid>div{min-width:0;padding:6px 4px 5px;text-align:center;border-radius:8px; background:rgba(4,11,19,.54);border:1px solid rgba(116,171,205,.16)} .opsBriefGrid span,.opsBriefGrid small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .opsBriefGrid span{color:#698da7;font:800 9px var(--fT);letter-spacing:.13em} .opsBriefGrid b{display:block;margin:2px 0 1px;color:#e9f8ff;font:900 14px var(--fT);letter-spacing:.04em; font-variant-numeric:tabular-nums;text-shadow:0 0 9px rgba(65,200,255,.28)} .opsBriefGrid>div:last-child b{color:#ffe29a;text-shadow:0 0 9px rgba(255,202,73,.28)} .opsBriefGrid small{color:#6f94ae;font:800 9px var(--fT);letter-spacing:.08em} @media (orientation:landscape) and (min-width:760px){.opsBrief{width:min(76vw,720px)}} #threatRow{display:grid;grid-template-columns:repeat(4,1fr);gap:6px} .thBtn{padding:9px 4px;border-radius:10px;text-align:center;border:1px solid transparent; background:linear-gradient(180deg,rgba(26,40,58,.95),rgba(12,20,32,.97)) padding-box, linear-gradient(160deg,rgba(120,170,205,.28),rgba(30,60,88,.16)) border-box} .thBtn b{display:block;font-family:var(--fT);font-size:13px;color:#eaf7ff;letter-spacing:.04em} .thBtn span{display:block;margin-top:2px;font-size:9px;letter-spacing:.1em;color:#7fa8c6;font-weight:800} .thBtn.on{background:linear-gradient(180deg,rgba(70,26,20,.96),rgba(34,12,9,.97)) padding-box, linear-gradient(160deg,#ffc9bd,#ff6a55 45%,#5e1d14 75%,#ffb0a2) border-box; box-shadow:0 0 14px rgba(255,106,85,.35)} .thBtn.on b{color:#fff} .thBtn.on span{color:#ffb0a2} .thBtn.lock{opacity:.34} #opModRow{display:flex;flex-direction:column;gap:8px} .opMod{position:relative;display:grid;grid-template-columns:96px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:96px;padding:7px 10px 7px 7px;border-radius:12px;text-align:left;overflow:hidden; cursor:pointer;touch-action:manipulation; border:1px solid transparent; background:linear-gradient(180deg,rgba(20,30,46,.92),rgba(10,17,28,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.24),rgba(30,60,88,.14)) border-box} .opMod::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,transparent 0 58%,rgba(112,184,224,.035) 58.5% 59%,transparent 59.5%)} .opMod.on{background:linear-gradient(180deg,rgba(58,20,16,.94),rgba(28,10,8,.96)) padding-box, linear-gradient(160deg,rgba(255,150,130,.5),rgba(90,30,22,.3)) border-box} .opModArt{position:relative;align-self:stretch;min-height:80px;overflow:hidden;border-radius:9px;border:1px solid rgba(126,181,215,.25); background-image:url('../../assets/modifiers/modifier-art-atlas-v1.png');background-size:500% 200%;background-position:var(--opx) var(--opy);background-repeat:no-repeat; box-shadow:inset 0 0 18px rgba(0,0,0,.28),0 4px 10px rgba(0,0,0,.28)} .opModArt::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 45%,rgba(5,12,21,.18)),linear-gradient(180deg,rgba(82,180,228,.03),rgba(1,5,10,.25));pointer-events:none} .opModArt i{position:absolute;left:6px;bottom:6px;width:18px;height:3px;border-radius:2px;background:#69caef;box-shadow:0 0 8px #55c4ee;opacity:.8} .opMod.on .opModArt{border-color:rgba(255,139,110,.64);box-shadow:inset 0 0 20px rgba(92,17,8,.1),0 0 15px rgba(255,89,58,.2)} .opMod.on .opModArt i{background:#ff8a70;box-shadow:0 0 8px #ff6248} .opMod.lock{cursor:not-allowed;opacity:.68} .opMod.lock .opModArt{filter:saturate(.38) brightness(.62)} .opMod.lock .opModArt::before{content:"🔒";position:absolute;z-index:2;left:50%;top:50%;transform:translate(-50%,-50%);width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:rgba(3,8,14,.82);border:1px solid rgba(190,211,224,.25);font-size:15px} .opMod.lock .opRw{color:#526b7d} .opTx{flex:1;min-width:0} .opTx b{display:block;font-family:var(--fT);font-size:11.5px;color:#eaf7ff;letter-spacing:.04em} .opTx span{display:block;font-size:10px;color:#8fb3cc;font-weight:600;margin-top:2px} .opUnlock{display:block;margin-top:5px;color:#f0ad86;font:800 9px var(--fT);letter-spacing:.055em;line-height:1.25} .opUnlock.earned{color:#70d9a4} .opRw{position:relative;z-index:1;align-self:start;margin-top:3px;padding:5px 6px;border-radius:7px;border:1px solid rgba(102,151,182,.24);background:rgba(4,11,19,.7);font-family:var(--fT);font-size:10px;font-weight:900;color:#7fa8c6} .opMod.on .opRw{color:#ffb0a2} @media (max-width:360px){ .opMod{grid-template-columns:82px minmax(0,1fr) auto;gap:7px;min-height:90px;padding-right:7px}.opModArt{min-height:76px}.opTx b{font-size:10.5px}.opTx span{font-size:9px}.opRw{font-size:9px;padding:4px} } @media (orientation:landscape) and (min-width:760px){ #opModRow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.opMod{grid-template-columns:112px minmax(0,1fr) auto;min-height:102px}.opModArt{min-height:86px} } #setupScr[data-tab="modifiers"] .setupCard>.secHint:first-of-type{margin:-3px 0 12px} #setupScr .wbtn.lock{opacity:.38;filter:saturate(.35);cursor:not-allowed} #opPayout{margin-top:11px;text-align:center;font-family:var(--fT);font-size:11px;letter-spacing:.14em; color:#8fb3cc;font-weight:800} #opPayout b{color:#ffe9ad;font-size:15px} .wkBriefCard{position:relative;overflow:hidden;border-radius:13px;border:1px solid color-mix(in srgb,var(--wkf) 48%,transparent); background:linear-gradient(180deg,color-mix(in srgb,var(--wkf2) 68%,#0b1623),rgba(6,13,22,.98)); box-shadow:0 8px 24px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.07)} .wkBriefCard::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.25; background:linear-gradient(120deg,transparent 0 58%,color-mix(in srgb,var(--wkf) 20%,transparent) 58.5% 59%,transparent 59.5%)} .wkBriefHead{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px 7px; border-bottom:1px solid color-mix(in srgb,var(--wkf) 24%,transparent)} .wkBriefHead div span,.wkBriefHead div b{display:block}.wkBriefHead div span{color:var(--wkf);font:800 9px var(--fT);letter-spacing:.17em} .wkBriefHead div b{margin-top:2px;color:#effaff;font:900 10.5px var(--fT);letter-spacing:.1em} .wkBriefHead i{padding:4px 6px;border-radius:6px;color:#ffe29a;background:rgba(88,59,8,.48);border:1px solid rgba(255,210,94,.28); font:800 9px var(--fT);font-style:normal;letter-spacing:.08em;white-space:nowrap} .wkVisualRow{position:relative;z-index:1;display:grid;grid-template-columns:1.05fr .95fr;gap:7px;padding:8px 8px 0} .wkMapPreview,.wkCommander{position:relative;height:112px;overflow:hidden;border-radius:10px;border:1px solid rgba(156,205,235,.22)} .wkMapPreview{background:linear-gradient(145deg,#244c3e,#112a28 62%,#15232d)} /* No per-map selectors here on purpose. The four ids that used to be keyed (vanguard / highland / isles / crater) are legacy MAPDEFS entries no drop world can return, so every weekly fell through to the rule above. drawMapPreview() now paints the real landform into a canvas inside the tile for any authored site (see renderOps in src/endgame.js); the rule above is the genuine last-resort fallback for a site that has no MAPDEFS entry. */ .wkMapPreview canvas{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover} .wkMapGrid{position:absolute;inset:0;opacity:.22;background-image:linear-gradient(rgba(180,220,240,.18) 1px,transparent 1px), linear-gradient(90deg,rgba(180,220,240,.18) 1px,transparent 1px);background-size:14px 14px;transform:perspective(100px) rotateX(12deg)} .wkMapName{position:absolute;left:0;right:0;bottom:0;padding:22px 8px 7px;background:linear-gradient(transparent,rgba(3,8,14,.96) 45%)} .wkMapName span,.wkMapName b,.wkMapName small{display:block}.wkMapName span{color:#79a5c0;font:800 9px var(--fT);letter-spacing:.14em} .wkMapName b{margin-top:1px;color:#fff;font:900 9px var(--fT);white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .wkMapName small{margin-top:1px;color:#88a9bd;font-size:9px;font-weight:700;line-height:1.15;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden} .wkHazard{position:absolute;top:6px;left:6px;max-width:calc(100% - 12px);padding:3px 5px;border-radius:5px;color:#ffdda1; background:rgba(61,37,8,.78);border:1px solid rgba(255,193,78,.33);font:800 9px var(--fT);letter-spacing:.05em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .wkCommander{background:var(--wkf2)}.wkCommanderPortrait{width:100%;height:100%;object-fit:cover;object-position:center 18%;filter:saturate(.88) contrast(1.08)} .wkCommander::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 28%,rgba(3,7,13,.15) 48%,rgba(3,7,13,.98) 100%)} .wkCommanderCrest{position:absolute;z-index:2;top:5px;right:5px;width:34px;height:34px;display:flex;align-items:center;justify-content:center; border-radius:8px;background:rgba(4,10,17,.72);box-shadow:0 0 12px color-mix(in srgb,var(--wkf) 34%,transparent)} .wkCommanderName{position:absolute;z-index:2;left:7px;right:7px;bottom:6px}.wkCommanderName span,.wkCommanderName b,.wkCommanderName small{display:block} .wkCommanderName span{color:var(--wkf);font:800 9px var(--fT);letter-spacing:.12em}.wkCommanderName b{margin-top:1px;color:#fff;font:900 9px var(--fT); white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wkCommanderName small{color:#94b0c1;font-size:9px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .wkGoal{position:relative;z-index:1;display:flex;align-items:center;gap:8px;margin:7px 8px 0;padding:7px 8px;border-radius:9px; background:rgba(6,14,23,.72);border:1px solid color-mix(in srgb,var(--wkf) 24%,transparent)} .wkGoalEm{flex:0 0 29px;text-align:center;font-size:21px;filter:drop-shadow(0 0 5px var(--wkf))}.wkGoal div{min-width:0}.wkGoal small,.wkGoal b{display:block} .wkGoal small{color:var(--wkf);font:800 9px var(--fT);letter-spacing:.15em}.wkGoal b{margin-top:1px;color:#effaff;font:900 9.5px var(--fT)} .wkGoal p{margin:1px 0 0;color:#8eacbf;font-size:9px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .wkIntelGrid{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin:6px 8px 0} .wkIntelGrid div{min-width:0;padding:5px 3px;text-align:center;border-radius:7px;background:rgba(4,10,17,.6);border:1px solid rgba(123,171,201,.15)} .wkIntelGrid span,.wkIntelGrid b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wkIntelGrid span{color:#648aa4;font:800 9px var(--fT);letter-spacing:.08em} .wkIntelGrid b{margin-top:2px;color:#d9edf8;font:800 9px var(--fT)} .wkModChips{position:relative;z-index:1;display:flex;gap:4px;overflow-x:auto;margin:6px 8px 0;scrollbar-width:none}.wkModChips::-webkit-scrollbar{display:none} .wkModChips span{flex:0 0 auto;padding:4px 6px;border-radius:6px;color:#ffb0a2;background:rgba(71,22,17,.68);border:1px solid rgba(255,113,88,.25); font:800 9px var(--fT);letter-spacing:.05em;white-space:nowrap} .wkReward{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:8px;margin:6px 8px 0;padding:6px 8px;border-radius:9px; background:linear-gradient(100deg,rgba(69,49,8,.56),rgba(11,23,34,.7));border:1px solid rgba(255,211,95,.28)} .wkReward div span,.wkReward div b{display:block}.wkReward div span{color:#c3a751;font:800 9px var(--fT);letter-spacing:.11em}.wkReward div b{margin-top:1px;color:#ffe29a;font:900 13px var(--fT)} .wkReward small{color:#8faabd;font:750 9px var(--fT);line-height:1.35;text-align:right;letter-spacing:.04em} .wkScaleNote{position:relative;z-index:1;margin:5px 8px 0;padding:4px 6px;text-align:center;border-radius:6px;color:#ffb995;background:rgba(66,30,12,.42); font:800 9px var(--fT);letter-spacing:.05em} .wkRecord{position:relative;z-index:1;display:flex;align-items:center;gap:7px;padding:6px 9px 7px;color:#6f92aa;font:800 9px var(--fT);letter-spacing:.09em} .wkRecord b{color:#dcefff;font-size:10px}.wkRecord small{margin-left:auto;color:#718da0;font-size:9px;letter-spacing:.03em} #weeklyGo{width:100%;min-height:50px;margin-top:8px;color:#061018;background:linear-gradient(180deg,#ffe79e,#e2b947 65%,#b7811c) padding-box, linear-gradient(160deg,#fff7d4,#f2c84f 48%,#81540b) border-box;box-shadow:0 0 16px rgba(255,202,72,.18);touch-action:manipulation} #masteryGrid{font-size:11px} .mRow{display:grid;grid-template-columns:1fr 44px 44px 44px 44px;gap:6px;align-items:center;margin-bottom:6px} .mRow.mHdr div{text-align:center;font-size:15px} .mNm{font-size:10.5px;color:#cfe8ff;font-weight:700;text-align:left; white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .mCell{text-align:center;padding:7px 2px;border-radius:8px;font-family:var(--fT);font-size:10px; font-weight:800;color:#5f7d94;border:1px solid transparent; background:rgba(10,17,28,.8) padding-box,linear-gradient(160deg,rgba(90,130,160,.2),rgba(30,60,88,.1)) border-box} .mCell.got{color:#0a2417;background:linear-gradient(180deg,#7ef0b4,#2bd672) padding-box, linear-gradient(160deg,#d8ffe9,#1f9c62) border-box} .mFoot{margin-top:9px;text-align:center;font-size:10.5px;color:#8fb3cc;font-weight:700} /* ============================================================================ DEVELOPMENT — materials, research, crafting, wear ============================================================================ */ #devScr{display:none;padding:0!important;justify-content:flex-start!important;overflow:hidden} #devScr h2{margin:calc(var(--sat) + 16px) 0 8px} #matRow{display:flex;gap:6px;justify-content:center;flex-wrap:wrap;width:min(94vw,402px)} #devScr>h2,#devScr>#matRow,#devScr>#devTabs,#devScr>.setupFoot{flex-shrink:0} #devScr>.opsScroll{min-height:0;overflow-x:hidden} #devScr>.opsScroll>#devBody{width:100%;min-width:0} .matChip{display:flex;align-items:center;gap:5px;padding:6px 10px;border-radius:9px; font-family:var(--fT);font-size:11px;font-weight:800;color:#cfe8ff;border:1px solid transparent; background:linear-gradient(180deg,rgba(20,32,50,.94),rgba(10,18,30,.96)) padding-box, linear-gradient(160deg,rgba(120,170,205,.3),rgba(30,60,88,.18)) border-box} .matChip span{font-size:13px;opacity:.9} .matChip.core{color:#ffe9ad;background:linear-gradient(180deg,rgba(46,36,12,.94),rgba(24,18,6,.96)) padding-box, linear-gradient(160deg,#ffe9ad,#a87e2c) border-box} .matChip.data{color:#9feaff;background:linear-gradient(180deg,rgba(10,43,56,.94),rgba(5,22,32,.96)) padding-box, linear-gradient(160deg,#a9efff,#247ca3) border-box;box-shadow:0 0 12px rgba(65,200,255,.14)} .researchStatus{width:100%;box-sizing:border-box;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:5px 8px; padding:8px 10px;margin-bottom:2px;border-radius:9px;font-family:var(--fT);font-size:9px;letter-spacing:.08em; color:#bceeff;border:1px solid rgba(82,202,255,.35);background:linear-gradient(100deg,rgba(12,48,68,.96),rgba(9,22,36,.96))} .researchStatus b{color:#effcff;font-size:10px;letter-spacing:.12em}.researchStatus span{text-align:right} .researchStatus small{grid-column:1/-1;color:#8fb3cc;font-size:8px;line-height:1.3;letter-spacing:.04em} .researchRecover{margin-top:5px;color:#8fe9ff;font:800 9px var(--fU);letter-spacing:.08em} .researchComplete{width:100%;padding:12px;text-align:center;color:#8fe4ba;font-family:var(--fT);font-size:11px} .devBr{margin:12px 2px 6px;font-family:var(--fT);font-size:9.5px;letter-spacing:.22em; color:#7fb4d6;font-weight:800} .devBr:first-child{margin-top:2px} .devProgress{display:flex;align-items:center;gap:9px;padding:9px 11px;margin:2px 0 7px;border-radius:10px; background:linear-gradient(90deg,rgba(29,78,108,.42),rgba(9,20,33,.6));border:1px solid rgba(65,200,255,.24)} .devProgress b{font-family:var(--fT);font-size:15px;color:#8be8ff} .devProgress span{font-family:var(--fT);font-size:9px;letter-spacing:.16em;color:#8fb3cc;font-weight:800} .devProgress>.mfOwnershipBadge{flex:0 0 auto;padding:3px 6px;font:900 7px/1.2 var(--fT);letter-spacing:.07em} .devProgress>span:last-child{min-width:0;line-height:1.35;overflow-wrap:anywhere} .devBranchNav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin-bottom:5px} .devBranchBtn{min-width:0;padding:8px 3px;border-radius:8px;font-family:var(--fT);font-size:9px; letter-spacing:.04em;font-weight:800;color:#789bb5;border:1px solid rgba(120,170,205,.22);background:rgba(7,15,25,.8)} .devBranchBtn span{display:block;margin-top:2px;font-size:9px;color:#587892} .devBranchBtn.on{color:#e9faff;border-color:var(--cy);background:linear-gradient(180deg,rgba(43,113,154,.8),rgba(15,44,68,.9)); box-shadow:0 0 12px rgba(65,200,255,.2)} .devBranchBtn.on span{color:#9eeaff} .devNone{font-size:11px;color:#7fa8c6;font-weight:600;line-height:1.5;padding:4px 2px 8px} .devItem{display:flex;align-items:center;gap:10px;padding:10px 11px;border-radius:11px;text-align:left; margin-bottom:7px;border:1px solid transparent; background:linear-gradient(180deg,rgba(15,26,42,.92),rgba(8,15,26,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.28),rgba(30,60,88,.16)) border-box} .devItem.done{background:linear-gradient(180deg,rgba(14,34,24,.94),rgba(7,20,14,.95)) padding-box, linear-gradient(160deg,rgba(120,235,170,.44),rgba(24,80,50,.24)) border-box} .devItem.lock{opacity:.42} .modEm{flex:0 0 auto;width:34px;height:34px;display:flex;align-items:center;justify-content:center; font-size:18px;border-radius:9px;background:rgba(4,10,18,.7);border:1px solid rgba(120,170,205,.22)} .devTx{flex:1;min-width:0} .devTx b{display:block;font-family:var(--fT);font-size:11.5px;color:#eaf7ff;letter-spacing:.04em} .devTx span{display:block;font-size:10px;color:#8fb3cc;font-weight:600;margin-top:2px;line-height:1.35} .devTx>.mfOwnershipBadge{display:inline-flex;margin:0 0 4px;padding:3px 6px;font:900 7px/1.2 var(--fT);letter-spacing:.07em} .devCost{margin-top:5px;font-family:var(--fT);font-size:9px;letter-spacing:.08em;color:#ffe9ad;font-weight:800} .devAct{flex:0 0 auto;min-width:60px;text-align:center;padding:9px 7px;border-radius:9px; font-family:var(--fT);font-size:9.5px;letter-spacing:.08em;font-weight:800;color:#7fa8c6; border:1px solid transparent;background:var(--panelG2) padding-box,var(--steelB) border-box} .devAct.go{color:#fff;background:linear-gradient(180deg,rgba(46,110,152,.96),rgba(20,52,80,.97)) padding-box, linear-gradient(160deg,var(--cyL),var(--cy) 40%,var(--cyD) 70%,var(--cyL)) border-box} .devSub{margin:-3px 0 8px 44px;padding:7px 10px;border-radius:9px;font-family:var(--fT);font-size:9px; letter-spacing:.08em;color:#9fc6e0;font-weight:800;text-align:left;border:1px solid transparent; background:var(--panelG2) padding-box,var(--steelB) border-box} .devReqs{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin:-3px 0 8px 44px;font-size:9px;color:#6f91aa} .devReqs b{font-family:var(--fT);font-size:9px;letter-spacing:.12em} .devReqs span{padding:3px 6px;border-radius:6px;background:rgba(8,17,28,.8);border:1px solid rgba(120,170,205,.2);font-weight:700} .devReqs span.ok{color:#76dfa8;border-color:rgba(80,220,145,.35)} .devReqs span.no{color:#ff9c8a;border-color:rgba(255,100,80,.28)} .devNeed{margin:-3px 0 8px 44px;font-size:9px;line-height:1.35;font-weight:800;color:#ff9c8a} .devJump{display:block;width:calc(100% - 44px);color:#9eeaff;cursor:pointer} .devReqInline{margin-top:4px!important;color:#ff9c8a!important;font-family:var(--fT);font-size:9px!important;letter-spacing:.06em} /* Wear bar: green while there is life in it, amber as it runs down, red at the end. The colour IS the warning — a player should never have to read a number to know a module is about to break. */ .wearO{margin-top:6px;height:5px;border-radius:4px;background:rgba(4,10,18,.85);overflow:hidden} .wearF{height:100%;border-radius:4px;background:linear-gradient(90deg,#1f9c62,#3fdc8f 70%,#c8ffe4)} .wearF.low{background:linear-gradient(90deg,#a13a26,#ff6a55 70%,#ffc9bd)} /* Painted item art. Rendered pixel-crisp at small sizes and given a soft drop shadow so a 128px plate still reads as an object at 15px in a cost line. */ .itemArt{display:inline-block;vertical-align:middle;border-radius:5px; image-rendering:auto;filter:drop-shadow(0 1px 2px rgba(0,0,0,.6))} .rosterArt{border-radius:9px!important;box-shadow:inset 0 0 0 1px rgba(150,215,255,.18)} .itemEm{display:inline-block;vertical-align:middle} .costOne{display:inline-flex;align-items:center;gap:3px;margin-right:9px} .costSep{margin-left:4px;opacity:.75;font-weight:700} .modEm{background:none!important;border:none!important;padding:0} .sEm .itemArt{border-radius:7px} .boostChip .itemArt{margin-right:1px} /* ============================================================================ FACTION CODEX Cards are colour-driven by a single custom property per faction (--fc), so a new faction needs one hex value here and nothing else. The crest sits on the card's own tint rather than a neutral chip — these marks were drawn with an internal glow and they die on a grey background. ============================================================================ */ .facIc{display:block;object-fit:contain;filter:drop-shadow(0 1px 3px rgba(0,0,0,.7))} .fbEm .facIc{margin:0 auto} /* width:auto + stretch, not a vw width: the scroll parent already has padding, so a 94vw child sits 30px wider than the space it was given and loses its right edge. Let the parent size it. */ .facCard{width:auto;align-self:stretch;max-width:402px;box-sizing:border-box; margin:0 auto 10px;padding:11px 12px 12px;border-radius:13px; background:linear-gradient(180deg,var(--fc2),rgba(6,12,20,.96)) padding-box, linear-gradient(150deg,var(--fc),rgba(40,70,100,.25)) border-box; border:1px solid transparent;box-shadow:0 6px 20px rgba(0,0,0,.5)} .facHd{display:flex;align-items:center;gap:11px} .facCrest{width:54px;height:54px;flex:0 0 54px;display:flex;align-items:center;justify-content:center} .facNm{flex:1;min-width:0} .facNm b{display:block;font-family:var(--fT);font-size:15px;letter-spacing:.1em;color:var(--fc); text-shadow:0 0 12px color-mix(in srgb,var(--fc) 45%,transparent)} .facNm span{display:block;margin-top:2px;font-size:9px;font-weight:800;letter-spacing:.17em;color:#9fc0d8} .facNm small{display:block;margin-top:3px;font-size:8.5px;font-weight:800;letter-spacing:.14em;color:var(--fc);opacity:.92} .facTag{font-size:9px;font-weight:800;letter-spacing:.13em;color:#0a1119;background:var(--fc); padding:3px 6px;border-radius:5px;white-space:nowrap} .facBody{display:flex;gap:11px;margin-top:10px} .facPortWrap{flex:0 0 96px;width:96px;height:96px;border-radius:9px;overflow:hidden; border:1px solid color-mix(in srgb,var(--fc) 40%,transparent);background:#060b12} .facPort{width:100%;height:100%;object-fit:cover;display:block} .facText{flex:1;min-width:0;font-size:10.5px;line-height:1.5;color:#b4cddf;font-weight:600} .facCdr{margin-top:7px;font-size:9px;font-weight:800;letter-spacing:.15em;color:#7f9db4} .facCdr b{display:block;margin-top:1px;font-size:11.5px;letter-spacing:.04em;color:#eaf4ff;font-family:var(--fT)} .facCdr i{display:block;margin-top:3px;font-size:10px;font-style:italic;letter-spacing:0; font-weight:600;color:var(--fc);opacity:.92} .facUnits{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:10px} .facUnitsHdr{margin:10px 0 4px;font:800 9px/1 var(--fT);letter-spacing:.13em;color:var(--fc)} .facUnit{padding:7px 8px;border-radius:8px;background:rgba(4,9,16,.6); border:1px solid color-mix(in srgb,var(--fc) 22%,transparent)} .facUnit b{display:block;font-family:var(--fT);font-size:10px;letter-spacing:.09em;color:#eaf4ff} .facUnit span{display:block;margin-top:1px;font-size:9px;font-weight:800;letter-spacing:.05em;color:var(--fc)} .facUnit i{display:block;margin-top:3px;font-size:9px;font-style:normal;line-height:1.4;color:#93b0c6;font-weight:600} .facDoctrine{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:9px} .facDoctrine>div{min-width:0;padding:7px 8px;border-radius:8px;font-size:9px;line-height:1.4;font-weight:650; background:rgba(4,9,16,.7);border:1px solid rgba(130,165,190,.19);color:#adc5d6} .facDoctrine b{display:block;margin-bottom:3px;font:800 9px/1 var(--fT);letter-spacing:.11em} .facStrong b{color:#76efaa}.facWeak b{color:#ff927f} .facEndgoal{margin-top:7px;padding:8px 9px;border-radius:8px;background:rgba(4,9,16,.72); border:1px solid color-mix(in srgb,var(--fc) 25%,transparent)} .facEndgoal>span{display:block;color:var(--fc);font:800 9px/1 var(--fT);letter-spacing:.13em} .facEndgoal>b{display:block;margin-top:5px;color:#f1f8ff;font:800 9px/1.25 var(--fT);letter-spacing:.05em} .facEndgoal>p{margin:5px 0 0;color:#9eb8ca;font-size:9px;line-height:1.45;font-weight:600} .facBonus{margin-top:9px;padding:8px 9px;border-radius:8px;font-size:10px;line-height:1.45; color:#c3dcee;font-weight:600;background:color-mix(in srgb,var(--fc) 11%,rgba(4,9,16,.7)); border:1px solid color-mix(in srgb,var(--fc) 28%,transparent)} .facBonusNm{display:block;font-family:var(--fT);font-size:9.5px;letter-spacing:.13em; color:var(--fc);margin-bottom:3px} /* Hazard strip on the battle-setup map cards. */ .mHz{margin-top:6px;padding:5px 6px;border-radius:6px;font-size:9px;line-height:1.35; color:#c9b48c;font-weight:600;text-align:left; background:rgba(58,42,16,.42);border:1px solid rgba(214,164,72,.28)} .mHz b{display:block;font-family:var(--fT);font-size:9px;letter-spacing:.11em; color:#ffce6a;margin-bottom:2px} /* "SET UP" chip on an unconfigured sign-in button — tells the player the button does something before they tap it. */ .accSet{margin-left:8px;padding:2px 6px;border-radius:5px;font-size:9px;font-weight:800; letter-spacing:.1em;background:rgba(0,0,0,.28);color:inherit;opacity:.85} #accSync{margin-top:9px;font-size:10px;line-height:1.5;color:#9fc0d8;font-weight:600;text-align:left} /* Asset-pack download line — same register as the updater panel above it. */ #packPanel{display:none;width:min(88vw,340px);margin-top:9px;padding:8px 11px 10px;border-radius:2px; border:1px solid rgba(83,196,226,.34);box-shadow:inset 3px 0 #54dcff; background:linear-gradient(135deg,rgba(3,17,27,.97),rgba(5,31,43,.93))} #packPanel .packRow{display:flex;align-items:center;justify-content:space-between;gap:10px} #packTxt{font-family:var(--fT);font-size:9.5px;letter-spacing:.13em;color:#8be8ff} #packSub{font-size:9px;margin-top:2px;color:#8fb3cc;font-weight:600} #packBtn{min-height:44px;padding:8px 12px;border-radius:8px;font-size:9px;font-weight:800;letter-spacing:.1em; border:1px solid rgba(120,200,255,.4);color:#cfeaff; background:linear-gradient(180deg,rgba(30,70,105,.9),rgba(16,40,64,.9))} #packBtn:disabled{opacity:.55} #packBarO{margin-top:7px;height:5px;border-radius:4px;overflow:hidden;background:rgba(6,14,22,.85)} #packBarF{height:100%;width:0%;border-radius:4px;transition:width .25s; background:linear-gradient(90deg,var(--cy2),var(--cy) 60%,var(--cyL))} /* Offline mode: the online panels have nothing to say, so they say nothing. */ body.offline #packPanel{display:none!important} /* ============================================================================ MODERN MOBILE COMMAND DOCK Only one context row is exposed at a time. The permanent row keeps the four high-frequency actions reachable while the deck strip swaps orders, powers, platoons, and camera controls without stacking six rows over the battle. ============================================================================ */ #cmdbar{pointer-events:none} #hudDeckTabs{display:none;align-items:center;justify-content:flex-end;gap:5px;pointer-events:auto} .hudDeckBtn{min-height:44px;padding:8px 10px;display:flex;align-items:center;justify-content:center;gap:5px; border-radius:9px;color:#7f9db5;font:800 9px/1 var(--fT);letter-spacing:.07em; border:1px solid rgba(120,170,205,.25);background:linear-gradient(180deg,rgba(23,36,53,.94),rgba(9,17,28,.96)); box-shadow:0 2px 7px rgba(0,0,0,.38);pointer-events:auto} .hudDeckBtn span{font-size:13px;color:#9fc6e0} .hudDeckBtn[data-deck="buildings"]{font-size:7px;letter-spacing:0} .hudDeckBtn.on{color:#fff;border-color:#62d2ff;background:linear-gradient(180deg,rgba(42,105,145,.96),rgba(14,46,70,.98)); box-shadow:0 0 10px rgba(65,200,255,.24),inset 0 1px 0 rgba(255,255,255,.13)} .hudDeckBtn:disabled{opacity:.34;filter:grayscale(1) saturate(.15);color:#5f7180;border-color:rgba(100,125,144,.18); background:linear-gradient(180deg,rgba(20,27,36,.86),rgba(8,13,20,.92));box-shadow:none;cursor:default;pointer-events:none} #godBadge{display:none;align-items:center;justify-content:center;min-height:27px;padding:4px 9px;border-radius:8px; color:#191202;background:linear-gradient(180deg,#fff1a8,#e4af39);border:1px solid #fff0a8; box-shadow:0 0 14px rgba(255,202,69,.48);font:900 9px/1 var(--fT);letter-spacing:.11em;white-space:nowrap} body.godMode #godBadge{display:flex} .setRow[data-set="godMode"]{border-color:rgba(255,210,87,.48)!important; background:linear-gradient(180deg,rgba(62,45,12,.72),rgba(24,17,5,.82))!important} .setRow[data-set="godMode"] .sTx b{color:#ffe08a} @media (max-width:600px) and (orientation:portrait){ /* Explicit portrait rows keep variable-length objectives and modifier sets from borrowing the same pixels. These offsets all share the same safe-area origin so a notched WebView cannot shift only one part of the stack. */ /* Seven controls cannot share a six-column grid: the pause button wrapped below the resources and pushed every secondary HUD row down. A flex rail gives resources the remaining width and keeps all controls on one line. */ /* top:0 + sat in padding — the default top:sat AND padding-top:sat stacked two status-bar offsets and shoved the intel chip into LV / weather. */ #topbar{top:0;left:var(--sal);right:var(--sar);min-height:0;display:flex;flex-wrap:wrap; gap:4px;padding:max(var(--sat),8px) 6px 6px;font-size:11px; background:linear-gradient(180deg,rgba(5,12,21,.78),rgba(5,11,20,.52) 70%,rgba(5,11,20,.2)); border-bottom:1px solid rgba(112,170,208,.2);box-shadow:0 8px 18px rgba(0,0,0,.28); backdrop-filter:blur(8px)} #topbar .res{flex:1 1 0;min-width:0;min-height:44px;gap:3px;padding:2px 4px;border-radius:8px;overflow:hidden} #topbar .res b{min-width:0;overflow:hidden;text-overflow:ellipsis;font-size:13px;white-space:nowrap} #topbar .res .rate{flex:0 0 auto;font-size:9px}.res .ic{width:19px;height:19px} :root{ --hudBtn:44px; /* One shared dock plate. The map used to be a second absolute card at bottom:12px while #cmdbar sat on max(sab+6,38px) home-indicator pad — that is why it hung below ARMY and painted over ORDERS. --mmDockPad is the same inset the command plate uses; --mmBay is the reserved square (canvas + frame) so tabs and action rows share one column. */ --mmDockPad:max(calc(var(--sab) + 6px),38px); --mmSize:min(84px,22vw,24vmin); --mmBay:calc(var(--mmSize) + 6px); } #menuBtn{font-size:19px} /* God Mode is configured and labelled in Settings; repeating it in the phone battle rail costs an entire wrapped HUD row on narrow devices. */ body.godMode #godBadge{display:none!important} #cmdbar{left:0;right:0;bottom:0;width:auto;min-height:0;box-sizing:border-box;gap:3px;align-items:flex-end; padding:4px calc(var(--sar) + 6px) var(--mmDockPad) calc(var(--sal) + 6px); border-top:1px solid rgba(112,170,208,.25); background:linear-gradient(180deg,rgba(5,12,21,.34),rgba(5,11,20,.88) 18%,rgba(4,9,17,.96)); box-shadow:0 -8px 24px rgba(0,0,0,.34);backdrop-filter:blur(7px)} /* Live battle: the map is a grid cell in the command plate, not a second absolute card. Column 1 is the steel well; tabs and actions share column 2 so ORDERS can never paint under the canvas when the ratio changes. */ #hudDeckTabs{width:100%;gap:3px;overflow-x:auto;scrollbar-width:none} #hudDeckTabs::-webkit-scrollbar{display:none} /* The shared tab-typography rule further down lists .hudDeckBtn alongside .setupTabBtn and sets font-size:.5625rem with no media query. Same specificity, later in the file, so it silently won and this portrait sizing never applied: every tab rendered at 9px, PLATOONS overflowed its 78px cell, and BUILDINGS was pinned to a one-off 7px purely so it would fit — which is what made the row read as mismatched. Own the sizing from the dock's own id so the responsive value wins, and stack the glyph over the label the way the action row directly below already does. That returns the glyph's width to the text and lets all five share one size. */ #hudDeckTabs .hudDeckBtn{flex:1 1 0;min-width:0;min-height:38px;padding:4px 2px; flex-direction:column;gap:2px;font-size:8px; overflow:hidden;white-space:nowrap;letter-spacing:.02em} #hudDeckTabs .hudDeckBtn span{font-size:12px;flex:0 0 auto} #hudDeckTabs .hudDeckBtn[data-deck="buildings"]{font-size:8px;letter-spacing:.02em} #cmdbar .btnrow{width:100%;justify-content:flex-end;gap:3px} #cmdbar #primaryRow{margin-top:auto} #cmdbar #heroRow{justify-content:flex-start;overflow-x:auto;scrollbar-width:none} #cmdbar #heroRow::-webkit-scrollbar{display:none} #cmdbar #hotSlots{gap:3px;overflow:visible} #cmdbar #hotSlots .hotSlot{flex:1 1 0;min-width:0;max-width:58px;height:44px;min-height:44px;padding:3px 2px} #cmdbar #hotSlots .hotSlot .hNm{max-width:54px;font-size:8px} #cmdbar .cbtn{min-width:46px;height:42px;border-radius:9px;font-size:8px;padding:2px 3px} #cmdbar .cbtn .em{font-size:15px} #cmdbar .camBtn,#cmdbar .grpBtn{min-width:46px;height:40px} #cmdbar .grpBtn{flex:1 1 0;width:auto} #cmdbar .pltLabel{font-size:7px;padding:0 5px;letter-spacing:.12em} #cmdbar #modeBtn{min-width:52px} #cmdbar #deployBtn{margin:0 0 1px;padding:8px 12px;font-size:10px} #minimapWrap{position:fixed;left:calc(var(--sal) + 10px);bottom:max(calc(var(--sab) + 158px),198px);padding:4px; transition:bottom .18s ease,left .18s ease,width .18s ease,height .18s ease,box-shadow .18s ease} body.hudTacticalDock #cmdbar{display:grid;grid-template-columns:var(--mmBay) minmax(0,1fr); grid-template-rows:auto auto;align-items:end;column-gap:4px;row-gap:3px;padding-top:6px} body.hudTacticalDock #cmdbar>*{grid-column:2;width:100%;min-width:0} body.hudTacticalDock #minimapWrap{position:relative;left:auto;right:auto;top:auto;bottom:auto; grid-column:1;grid-row:1/-1;justify-self:stretch;align-self:end; width:var(--mmBay);height:var(--mmBay);max-width:100%; box-sizing:border-box;z-index:11;margin:0;padding:4px;border-radius:11px; background:#04080e padding-box,var(--steelB) border-box; box-shadow:inset 0 2px 10px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.08); clip-path:polygon(9px 0,100% 0,100% calc(100% - 9px),calc(100% - 9px) 100%,0 100%,0 9px)} body.hudTacticalDock #minimapWrap::after{content:none} body.hudTacticalDock #cmdbar .btnrow, body.hudTacticalDock #hudDeckTabs{box-sizing:border-box;padding-left:0} body.hudTacticalDock #selInfo{left:calc(var(--sal) + 8px);right:calc(var(--sar) + 8px); bottom:max(calc(var(--sab) + 176px),216px)} body.hudTacticalDock #minimap{width:var(--mmSize);height:var(--mmSize)} body.hudTacticalDock.hudViewDeck #minimapWrap{box-shadow:inset 0 0 0 1px rgba(69,190,240,.42)} #selInfo{left:calc(var(--sal) + 112px);right:calc(var(--sar) + 8px);bottom:max(calc(var(--sab) + 158px),198px); transform:none;max-width:none;min-height:44px;padding:2px 2px 2px 9px;text-align:left;font-size:10px;line-height:1.25} #unitCard{top:calc(var(--sat) + 126px);width:calc(100vw - var(--sal) - var(--sar) - 16px);max-height:46vh} #buildMenu,#prodMenu,#bldMenu2{bottom:max(calc(var(--sab) + 160px),200px);max-height:min(48vh,420px);clip-path:none;overflow-x:hidden} #placeUI{bottom:max(calc(var(--sab) + 160px),200px);gap:7px} #placeUI .cbtn{width:52px;height:52px;font-size:22px} #placeRotL,#placeRotR{width:46px!important;height:46px!important} #goalBar{top:calc(var(--sat) + 58px);min-height:30px;max-height:30px; max-width:calc(100vw - var(--sal) - var(--sar) - 16px);overflow:hidden;text-overflow:ellipsis} #topbar #goalBar{top:auto;min-height:var(--hudIntelH);max-height:var(--hudIntelH); max-width:none;overflow:hidden} /* Side chips sit under the two-row top plate, not under a guessed sat+92 that collides once the intel strip is inside the bar. */ #wcRow{top:calc(var(--sat) + var(--hudTopStack));left:calc(var(--sal) + 8px);right:auto; width:calc(58vw - var(--sal) - 12px);min-height:32px;max-height:32px;padding:2px 5px; overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none} #wcRow::-webkit-scrollbar{display:none} #infMeter{top:calc(var(--sat) + var(--hudTopStack));left:auto;right:calc(var(--sar) + 8px); width:calc(42vw - var(--sar) - 12px);min-height:32px;max-height:32px;justify-content:center; overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:3px 6px} #hazChip{top:calc(var(--sat) + var(--hudTopStack));left:auto;right:calc(var(--sar) + 8px); max-width:calc(42vw - var(--sar) - 12px);min-height:44px;max-height:44px;padding:2px 6px;font-size:9px} #heroBar{top:calc(var(--sat) + var(--hudTopStack) + var(--hudSideRow));left:calc(var(--sal) + 8px);right:auto; width:min(232px,54vw);max-width:54vw;min-height:60px} .baseFinder{left:calc(var(--sal) + 7px);right:calc(var(--sar) + 7px);transform:none;bottom:max(calc(var(--sab) + 202px),208px); width:auto;max-height:calc(100dvh - var(--sat) - var(--sab) - 224px)} .baseFindGrid{grid-template-columns:1fr;max-height:min(32dvh,276px)} /* Five filters remain simultaneously discoverable on 344px phones. Stack a compact visual label under its icon; the button keeps the full category in aria-label/title for assistive technology and long-press inspection. */ .baseFindTabs button{padding:3px 1px;flex-direction:column;gap:2px;font-size:7px;letter-spacing:0} .baseFindTabs button .baseFindTabIcon{font-size:10px}.baseFindTabs button .baseFindTabLabel{font-size:7px} /* One compact status chip replaces the old full-width icon strip. */ #wcBanner{top:calc(var(--sat) + var(--hudTopStack));font-size:9px;padding:2px 7px;gap:4px} #wcBanner .wcBIcon{display:none} #wcBanner .wcBCount{margin:0;padding:0;background:none;font-size:9px} #consHud{bottom:calc(var(--sab) + 68px);left:calc(var(--sal) + 6px)} .conHudSlot{padding:3px 6px;font-size:10px;min-width:40px} .conHudSlot .conHudEm{font-size:14px} /* Transient panels begin below the complete live-HUD stack. Their base rules predate the split-row layout and used to open on top of modifiers, threat, and the Commander bars even though the resting HUD looked correct. */ #toast,#radioAck{top:calc(var(--sat) + var(--hudTopStack) + var(--hudSideRow) + 72px)} #unitCard{top:calc(var(--sat) + var(--hudTopStack) + var(--hudSideRow) + 72px)} #abBarrage .cdring,#abClass .cdring{font-size:10px;letter-spacing:0} #abBarrage>span:not(.em):not(.lvl),#abClass>span:not(.em):not(.lvl){font-size:9px;letter-spacing:0} #atkAlert,#waveAlert{max-width:calc(100vw - var(--sal) - var(--sar) - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis} /* Primary-panel mode. Production, construction and pinned intel own the interaction until closed, so secondary HUD rows yield their pixels. The permanent action row remains reachable for emergency Stop / Army input. */ body.uiPrimaryOpen #hudDeckTabs, body.uiPrimaryOpen #cmdbar>.btnrow:not(#primaryRow), body.uiPrimaryOpen #minimapWrap, body.uiPrimaryOpen #selInfo, body.uiPrimaryOpen #heroBar, body.uiPrimaryOpen #wcRow, body.uiPrimaryOpen #infMeter, body.uiPrimaryOpen #wcBanner, body.uiPrimaryOpen #consHud{display:none!important} /* A primary sheet normally removes the minimap, but an active UGA voice profile explicitly owns that same location. Keep the receiver visible for the short transmission, then let the ordinary primary-sheet rule hide the minimap again as soon as the signal exits. The phone command row already leaves its authored lower-left map bay clear. */ body.uiPrimaryOpen #minimapWrap[data-transmission="enter"], body.uiPrimaryOpen #minimapWrap[data-transmission="hold"], body.uiPrimaryOpen #minimapWrap[data-transmission="exit"]{display:block!important} body.uiPrimaryOpen #cmdbar{gap:0;padding-top:5px;min-height:0; background:linear-gradient(180deg,rgba(5,12,21,0),rgba(4,9,17,.95) 42%);box-shadow:none} body.uiPrimaryOpen.hudTacticalDock #cmdbar{grid-template-columns:1fr} body.uiPrimaryOpen.hudTacticalDock #cmdbar:has(#minimapWrap[data-transmission]){ grid-template-columns:var(--mmBay) minmax(0,1fr)} body.uiPrimaryOpen.hudTacticalDock #cmdbar .btnrow{padding-left:0} body.uiPrimaryOpen #buildMenu,body.uiPrimaryOpen #prodMenu,body.uiPrimaryOpen #bldMenu2{ bottom:max(calc(var(--sab) + 70px),110px);max-height:min(54vh,500px);clip-path:none} body.uiIntelOpen #buildMenu,body.uiIntelOpen #prodMenu,body.uiIntelOpen #bldMenu2{ visibility:hidden;pointer-events:none} body.uiPrimaryOpen #unitCard{top:calc(var(--sat) + 98px);bottom:max(calc(var(--sab) + 70px),110px); width:calc(100vw - var(--sal) - var(--sar) - 16px);max-height:none} /* Critical contact information owns the first free row below the objective. A direct-action toast moves below it; economy coaching is queued in JS. */ body.uiPrimaryOpen #waveAlert,body.uiPrimaryOpen #atkAlert{top:calc(var(--sat) + 94px)} body.uiPrimaryOpen #waveAlert{padding:7px 18px;min-width:min(74vw,300px)} body.uiPrimaryOpen #waveAlert.withAttack{top:calc(var(--sat) + 142px)} body.uiPrimaryOpen #toast:not(.noticeBox){top:calc(var(--sat) + 98px);max-width:calc(100vw - var(--sal) - var(--sar) - 24px); padding:6px 11px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} body.uiPrimaryOpen.uiWaveOpen #toast:not(.noticeBox){top:calc(var(--sat) + 148px)} body.uiPrimaryOpen.uiWaveOpen.uiAttackOpen #toast:not(.noticeBox){top:calc(var(--sat) + 196px)} /* The visual role summary stays graphical but becomes a compact header on phones instead of consuming the height of two additional card rows. */ body.uiPrimaryOpen .menuRoleBrief{grid-template-columns:76px minmax(0,1fr);min-height:78px} body.uiPrimaryOpen .menuRoleVisual{min-height:78px} body.uiPrimaryOpen .menuRoleVisual .mfIntelPreview{min-height:78px} body.uiPrimaryOpen .menuRoleCopy{padding:6px 8px} body.uiPrimaryOpen .menuRoleCopy>strong{margin-top:3px;font-size:11px} body.uiPrimaryOpen .menuRoleCopy>p,body.uiPrimaryOpen .menuRoleCopy>small{display:none} body.uiPrimaryOpen .menuRoleDoctrine{margin-top:4px} body.uiPrimaryOpen .menuRoleInspect{min-height:44px;margin-top:auto;padding:4px 8px} } @media (orientation:landscape) and (max-height:600px){ /* Keep the building directory to the right of the always-available commander locator. A centred 560px sheet overlapped the profile on common 900×412 phones even though both controls individually fit the viewport. */ .baseFinder{left:auto;right:calc(var(--sar) + 8px);transform:none;width:min(62vw,560px)} } /* ========================================================================== QUALITY PASS — shared mobile rules Keep the authored steel/cyan language, but make every screen read as one product: one header rhythm, one action shape, and less chrome between the player and the information they came for. ========================================================================== */ button{font-family:var(--fU)} button:focus-visible,[role="button"]:focus-visible,input:focus-visible,textarea:focus-visible{ outline:2px solid #ffe08a;outline-offset:2px} /* Keep the 344 px evidence viewport mathematically disjoint without shrinking primary actions below 44 px: 60 px map bay + six 44 px actions + five 1 px gaps. This must live after the broader portrait block or its defaults win. */ @media (max-width:380px) and (orientation:portrait){ :root{--mmSize:56px} body.hudTacticalDock #minimap{width:56px;height:56px} body.hudTacticalDock #cmdbar .btnrow, body.hudTacticalDock #hudDeckTabs{padding-left:0;gap:1px} body.hudTacticalDock #cmdbar .cbtn{min-width:44px;width:44px} } .subMenuHead,.setupHead{letter-spacing:.01em} .subMenuHead h2,.setupHead h2{font-size:clamp(16px,4.7vw,20px);letter-spacing:.14em} .subMenuHead span{max-width:560px;margin:5px auto 0;line-height:1.35} .setupCard,.setGroup,.opsCard,.dailyCard{box-shadow:0 3px 12px rgba(0,0,0,.34)} .mbtn,.accBtn,.setupTabBtn,.screenTabBtn,.hudDeckBtn,.cbtn{min-height:44px} /* Selected-unit abilities are primary in-match actions. Compact tactical-dock rules may shrink secondary commands, but Barrage/Class must retain the 48px mobile target their focused interaction test promises. */ #cmdbar #abBarrage,#cmdbar #abClass{min-width:48px;width:48px;min-height:48px;height:48px} /* Category tabs carry more navigation weight than ordinary buttons. Preserve their 48px touch target after the compact global button rule above. */ .screenTabs .screenTabBtn{min-height:48px} .secHint,.setGroupDs{font-size:11.5px;line-height:1.45} @media (max-width:380px) and (orientation:portrait){ .setupTabs{display:flex;gap:4px;overflow-x:auto;justify-content:flex-start;scrollbar-width:none} .setupTabs::-webkit-scrollbar{display:none} .setupTabBtn{flex:0 0 88px;min-height:44px} .subMenuHead{padding-left:calc(var(--sal) + 12px);padding-right:calc(var(--sar) + 12px)} .subMenuHead h2{font-size:15px;letter-spacing:.1em} .subMenuHead span{font-size:10px} .setupCard{padding:11px} .setupScroll{padding-left:calc(var(--sal) + 10px);padding-right:calc(var(--sar) + 10px)} } @media (max-width:380px) and (orientation:portrait){ /* On 320–360px phones the live rates are the only expendable text. Values, resource identities, and all command targets remain visible. */ #topbar .res .rate{display:none} #topbar{gap:3px;padding-left:2px;padding-right:2px} :root{--hudBtn:44px} } /* Operations / Campaign takeover. Every selector is rooted to the injected pane so the normal Threat, Weekly and Mastery layouts keep their own rhythm. */ #opsPane-campaign{padding:0;border:0;background:none;box-shadow:none;overflow:visible} .storyCampaignHero{display:flex;align-items:flex-start;gap:14px;margin:0 0 12px;padding:16px; border:1px solid rgba(101,202,255,.34);border-radius:14px; background:linear-gradient(90deg,rgba(5,14,25,.97) 0%,rgba(5,14,25,.87) 56%,rgba(5,14,25,.32)), var(--campaign-hero) center 42%/cover no-repeat, linear-gradient(145deg,rgba(13,32,52,.98),rgba(5,14,25,.97));box-shadow:0 12px 30px rgba(0,0,0,.28)} .storyCampaignHero>div:first-child{min-width:0;flex:1}.storyCampaignHero span,.storyCampaignSection>span{ color:#7edcff;font-size:9px;letter-spacing:1.7px;font-weight:900}.storyCampaignHero h3{margin:5px 0 6px; color:#f4fbff;font-size:18px;line-height:1.08;letter-spacing:.5px}.storyCampaignHero p{margin:0;color:#adc0d2; font-size:11px;line-height:1.45}.storyCampaignCount{flex:0 0 64px;text-align:center;padding:9px 5px;border-radius:10px; border:1px solid rgba(126,220,255,.3);background:rgba(3,11,21,.62)}.storyCampaignCount b{display:block; color:#ffe089;font-size:25px;line-height:1}.storyCampaignCount span{display:block;margin-top:5px;color:#8ba7bd; font-size:9px;letter-spacing:.8px} .storyModeReward{display:inline-flex!important;align-items:center;margin-top:9px!important;padding:5px 7px;border:1px solid rgba(116,240,177,.38); border-radius:6px;background:rgba(24,75,53,.56);color:#87f4b5!important;font:900 8px/1 var(--fT)!important;letter-spacing:.08em!important} .storyCampaignSection{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin:14px 3px 8px} .storyCampaignSection small{color:#7890a5;font-size:9px;text-align:right}.storyCampaignLadder{display:grid;gap:9px} .storyCampaignMission{display:grid;grid-template-columns:132px minmax(0,1fr);gap:11px;padding:11px;border-radius:13px; border:1px solid color-mix(in srgb,var(--cf) 34%,#26384a);background:linear-gradient(125deg,var(--cf2),rgba(7,16,28,.98) 58%); box-shadow:inset 3px 0 0 color-mix(in srgb,var(--cf) 72%,transparent),0 7px 18px rgba(0,0,0,.22)} .storyCampaignMission.current{border-color:color-mix(in srgb,var(--cf) 78%,white);box-shadow:inset 3px 0 0 var(--cf), 0 0 18px color-mix(in srgb,var(--cf) 18%,transparent)}.storyCampaignMission.locked{filter:saturate(.55);opacity:.68} .storyCampaignKeyArt{position:relative;align-self:stretch;min-height:146px;border-radius:10px;overflow:hidden; border:1px solid color-mix(in srgb,var(--cf) 55%,#294158);background:#07101b} .storyCampaignKeyArt>img{width:100%;height:100%;display:block;object-fit:cover}.storyCampaignKeyArt::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 42%,rgba(2,7,13,.9))} .storyCampaignKeyArt>span{position:absolute;z-index:2;right:5px;top:5px; display:grid;place-items:center;width:30px;height:30px;padding:2px;border-radius:8px;background:rgba(3,9,17,.88); border:1px solid color-mix(in srgb,var(--cf) 60%,transparent)}.storyCampaignKeyArt>span img{width:100%;height:100%;object-fit:contain} .storyCampaignKeyArt>small{position:absolute;z-index:2;left:8px;right:8px;bottom:7px;color:#eff8ff;font:900 9px/1.25 var(--fT);letter-spacing:.08em;text-shadow:0 2px 6px #000} .storyCampaignMissionBody{min-width:0}.storyCampaignMission header{display:flex;align-items:flex-start;justify-content:space-between; gap:8px;margin-bottom:7px}.storyCampaignMission header small{display:block;color:var(--cf);font-size:9px;letter-spacing:1.2px; font-style:normal}.storyCampaignMission header b{display:block;margin-top:2px;color:#f5f9fc;font-size:13px;line-height:1.14} .storyCampaignState{flex:0 0 auto;padding:4px 6px;border:1px solid color-mix(in srgb,var(--cf) 54%,transparent); border-radius:6px;background:color-mix(in srgb,var(--cf2) 75%,black);color:var(--cf);font-size:9px;letter-spacing:.9px;font-style:normal} .storyCampaignIntel{display:grid;gap:5px}.storyCampaignIntel>span{color:#aabccc;font-size:9.5px;line-height:1.33} .storyCampaignIntel em{display:block;margin-bottom:1px;color:#6f8aa1;font-size:9px;font-style:normal;font-weight:900;letter-spacing:1px} .storyCampaignIntel .storyCampaignReward{color:#f2d47f}.storyCampaignAction{width:100%;min-height:48px;margin-top:9px; border:1px solid color-mix(in srgb,var(--cf) 75%,white);border-radius:9px;color:#06111b;font:900 10px var(--font); letter-spacing:1.1px;background:linear-gradient(180deg,color-mix(in srgb,var(--cf) 78%,white),var(--cf)); box-shadow:0 5px 14px color-mix(in srgb,var(--cf) 18%,transparent)}.storyCampaignAction:active{transform:translateY(1px)} .storyCampaignLock{display:flex;align-items:center;min-height:44px;margin-top:8px;padding:0 9px;border-radius:8px; border:1px dashed rgba(135,154,172,.28);color:#8295a7;font-size:9px;line-height:1.3;letter-spacing:.4px} .storyCampaignArcLabel{margin-top:19px}.storyCampaignArcs{display:flex;gap:10px;padding:0 2px 8px;overflow-x:auto; scroll-snap-type:x mandatory;scrollbar-width:none}.storyCampaignArcs::-webkit-scrollbar{display:none}.storyCampaignArc{flex:0 0 270px; min-height:194px;padding:11px;border:1px solid color-mix(in srgb,var(--cf) 42%,#203245);border-radius:13px; background:radial-gradient(circle at 15% 0,color-mix(in srgb,var(--cf) 18%,transparent),transparent 46%), linear-gradient(145deg,var(--cf2),#07101b 72%);scroll-snap-align:start}.storyCampaignArcHead{display:flex;gap:10px;align-items:center} .storyCampaignArcHead>img{width:58px;height:70px;object-fit:cover;border-radius:8px;border:1px solid var(--cf)} .storyCampaignArcHead>div{min-width:0}.storyCampaignArcHead small{display:block;color:var(--cf);font-size:9px;letter-spacing:.7px} .storyCampaignArcHead b{display:block;margin:3px 0;color:#f1f7fb;font-size:12px;line-height:1.15}.storyCampaignArcHead span{color:#91a8b8;font-size:9px} .storyCampaignArcPath{margin:10px 0 6px;padding:7px;border-radius:7px;background:rgba(0,0,0,.28);color:var(--cf); font-size:9px;font-weight:900;line-height:1.35;letter-spacing:.55px;text-align:center}.storyCampaignArc p{margin:0;color:#9fb2c1;font-size:9px;line-height:1.4} @media(max-width:430px){.storyCampaignHero{padding:13px;min-height:142px;background-position:center 42%}.storyCampaignHero h3{font-size:16px}.storyCampaignHero p{font-size:10px} .storyCampaignMission{grid-template-columns:1fr;gap:9px;padding:9px}.storyCampaignKeyArt{height:112px;min-height:112px} .storyCampaignMission header{display:block}.storyCampaignState{display:inline-block;margin-top:5px}.storyCampaignArc{flex-basis:252px}} /* ── Training entry ──────────────────────────────────────────────────────── src/tutorial.js#ensureTrainingEntry used to insert an identity CARD above #startBtn, which pushed PLAY down the menu. It is now a single button directly under PLAY. Both are .mbtn, so both already inherit the same min-width at every breakpoint — the only thing that could make this one wider is its longer label, so the type is sized to stay inside that min-width rather than push past it. The two must report identical offsetWidth at 412 px and at 360 px; that is measured, not assumed. */ /* ── Career ladder (Profile ▸ CAREER) ────────────────────────────────────── The block the menu header gave up: emblem, commander name, rank, progress bar and XP-to-next. */ .cLadder{display:flex;align-items:center;gap:11px;margin-bottom:10px;padding:9px 11px;border-radius:11px; border:1px solid transparent;background:var(--panelG) padding-box,var(--steelB) border-box} .cLadEm{font-size:30px;line-height:1;filter:drop-shadow(0 0 6px rgba(255,210,87,.5))} .cLadInfo{flex:1;min-width:0} .cLadNm{font-size:14px;font-weight:800;color:#ffe9ad;letter-spacing:.1em;font-family:var(--fT); text-transform:uppercase;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .cLadRank{margin-top:1px;font-size:10.5px;color:#ffe9ad;font-weight:700} .cLadBarO{height:6px;background:rgba(0,0,0,.65);border-radius:3px;border:1px solid rgba(255,210,87,.35);margin:4px 0 3px} .cLadBarF{height:100%;width:0%;background:linear-gradient(90deg,#c9973b,var(--gold),#ffef9a);border-radius:3px; box-shadow:0 0 6px var(--gold)} .cLadXp{font-size:10.5px;color:#9fc6e0;font-variant-numeric:tabular-nums;font-weight:600; overflow:hidden;text-overflow:ellipsis;white-space:nowrap} /* ── First-run sign-in gate footer ───────────────────────────────────────── The affordance that keeps the gate a gate. */ #apGateFoot{margin-top:2px;padding:11px 15px 14px;text-align:center;border-top:1px solid rgba(120,170,205,.18)} #apGateFoot .mbtn{margin-top:0;width:100%;min-width:0} #apGateFoot small{display:block;margin-top:8px;font-size:9.5px;line-height:1.45;color:#8fb3cc} /* ── WAR ROOM ────────────────────────────────────────────────────────────── Four operation cards behind the primary button. Locked cards are dimmed and badged rather than hidden. */ /* display:none is NOT optional for a new .overlay. `.overlay` is display:flex, and the only thing hiding the front screens before the first showFrontScreen() is each screen's own display:none here — `body:not(.mfIntroDone) .overlay` covers the pre-intro window and nothing else. Ship an overlay without this and it paints on top of the menu the instant the launch title finishes, which is exactly what 1.32.19/1.32.20 did: the game opened straight into the War Room. */ #warScr{display:none;justify-content:flex-start;padding-left:0;padding-right:0;overflow:hidden} .warScroll{flex:1 1 auto;width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch; min-height:0;box-sizing:border-box;overscroll-behavior-y:contain;touch-action:pan-y; padding:2px calc(var(--sar) + 16px) max(calc(var(--sab) + 18px),24px) calc(var(--sal) + 16px); scroll-padding-block-end:max(calc(var(--sab) + 72px),82px)} .warGrid{display:flex;flex-direction:column;gap:10px;width:min(100%,460px);margin:0 auto;padding-bottom:4px} /* WAR TABLE: DEV MODULES. Development surfaces are not operations, and they used to sit in .warGrid as siblings of TRAINING / STANDARD / CAMPAIGN. Borrow the Settings group shell (.setGroup) so the section reads as authored rather than bolted on. .warGrid is a flex column, so this needs its own column layout or the nested .warCard children collapse to the section's width. */ .warDevGroup{display:flex;flex-direction:column;gap:10px;width:100%;box-sizing:border-box; margin-top:6px;padding:11px;border-radius:14px;border:1px solid transparent; background:linear-gradient(180deg,rgba(13,23,37,.92),rgba(7,13,22,.94)) padding-box, linear-gradient(160deg,rgba(120,170,205,.3),rgba(30,60,88,.16)) border-box} .warDevHd{text-align:left;font-family:var(--fT);font-size:10.5px;letter-spacing:.17em;color:#8be8ff;font-weight:900} .warDevDs{text-align:left;margin-top:-4px;font-size:10px;line-height:1.35;color:#6f91aa;font-weight:600} .warCard{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;column-gap:12px;row-gap:8px;width:100%;text-align:left;padding:13px 14px 16px; overflow:visible;box-sizing:border-box; border-radius:9px 2px 2px 9px;cursor:pointer;position:relative; border:0;border-left:3px solid var(--warAccent,#73d9f4); background:linear-gradient(90deg,rgba(18,48,70,.82),rgba(7,19,33,.84) 70%,rgba(7,19,33,.5)); box-shadow:inset 0 -1px rgba(115,217,244,.22),0 5px 16px rgba(0,0,0,.3)} .warCard[data-mode="campaign"]{--warAccent:#efc96d} .warCard[data-mode="training"]{--warAccent:#8ee9d3} .warCard:active{transform:scale(.985)} .warCard.locked{opacity:.5;cursor:default} .warCard.locked:active{transform:none} .warCard.locked.browse{opacity:.78;cursor:pointer} .warCard.locked.browse:active{transform:scale(.985)} .warEm{grid-column:1;font-size:26px;line-height:1;color:var(--warAccent,#73d9f4);filter:drop-shadow(0 0 6px rgba(139,232,255,.35))} .warBody{grid-column:2;min-width:0;display:block} .warNm{display:block;font-family:var(--fT);font-size:15px;font-weight:800;letter-spacing:.13em;color:#eaf7ff} .warDs{display:block;margin-top:3px;font-size:12px;line-height:1.3;color:#c0d8e7;font-weight:600;overflow-wrap:anywhere} .warFootTx{display:block;margin-top:4px;font-size:10.5px;line-height:1.3;letter-spacing:.035em;color:#93b3c8;font-weight:700;text-transform:uppercase;overflow-wrap:anywhere} .warReward{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-top:7px;min-width:0;max-width:100%}.warReward b{flex:0 0 auto;padding:3px 5px; border:1px solid color-mix(in srgb,var(--mode,#63d9ff) 48%,transparent);border-radius:5px;background:color-mix(in srgb,var(--mode,#63d9ff) 12%,transparent); color:var(--mode,#63d9ff);font:900 10px/1.15 var(--fT);letter-spacing:.04em}.warReward small{flex:1 1 8em;min-width:0; display:block;overflow-wrap:anywhere;color:#dfecf4;font:800 10px/1.2 var(--fT);letter-spacing:.02em} .warLock{grid-column:1/-1;justify-self:start;max-width:100%;font-family:var(--fT);font-size:9px;font-weight:800; letter-spacing:.08em;color:#ffd66f;border:1px solid rgba(255,214,111,.34);border-radius:6px;padding:4px 7px; background:rgba(48,36,10,.6);white-space:normal;line-height:1.25} .warFoot{flex:0 0 auto;width:100%;display:flex;justify-content:center;position:relative;z-index:2; padding:4px calc(var(--sar) + 16px) calc(var(--sab) + 10px) calc(var(--sal) + 16px); background:linear-gradient(180deg,rgba(3,7,14,.18),rgba(3,7,14,.97) 18px)} .warFoot .mbtn{margin-top:0} .warContinuation{margin-top:7px!important;color:#a8c6da!important;font-size:11px!important;line-height:1.3!important;letter-spacing:.045em!important} .warContinuation strong{color:#ffd66f;font:800 1em/1 var(--fT);letter-spacing:.08em} .warContinuation i{display:inline-block;margin-left:3px;color:#8be8ff;font-style:normal;font-size:13px;line-height:1} /* Hologram chrome lives under the canvas, not on top of canvas-drawn labels. */ .mfGalaxyViewport,.mfPlanetViewport{display:flex;flex-direction:column} .mfGalaxyViewport>.mfGalaxyHelp,.mfPlanetViewport>.mfGalaxyHelp{ position:relative;left:auto;right:auto;bottom:auto;margin-top:6px;padding:2px 4px 0} @media (max-width:430px){ .warEm{font-size:22px} .warNm{font-size:14px} .warDs{font-size:11.5px} } /* PLANET + REGION MAP PICKER (Battle Setup → MAP tab). The planet owns the biome; the region row below it offers only the battlefields that exist on the selected world, so a crater can never appear on the green planet. */ #planetRow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px} #planetRow .pbtn{flex-direction:column;align-items:center;justify-content:center;gap:3px; min-width:0;min-height:82px;padding:10px 6px;text-align:center} #planetRow .pbtn .pEm{font-size:24px;line-height:1;filter:drop-shadow(0 0 8px rgba(139,232,255,.35))} #planetRow .pbtn b{font-family:var(--fT);font-size:11px;letter-spacing:.14em;color:#eaf7ff} #planetRow .pbtn small{font-size:9px;line-height:1.25;color:#718ca0;font-weight:700} #planetRow .pbtn.on small{color:#c8f3ff} #planetRow .pbtn.on .pEm{filter:drop-shadow(0 0 12px rgba(139,232,255,.8))} @media (max-width:430px){ #planetRow{grid-template-columns:1fr} #planetRow .pbtn{flex-direction:row;min-height:52px;justify-content:flex-start;text-align:left; gap:10px;padding:8px 12px} #planetRow .pbtn small{flex:1 1 auto} } /* ── IDENTITY: commanders, titles, frames ────────────────────────────────── Rank-gated. Locked entries render dimmed with the rank that opens them, so the roster is also the progression screen. */ .idHint{display:flex;align-items:center;justify-content:center;gap:7px;min-width:0;margin-top:4px;font-size:9.5px;letter-spacing:.06em;color:#7fa8c4;font-weight:700} .idHint>.mfOwnershipBadge{flex:0 0 auto}.idHint>span:last-child{min-width:0;overflow-wrap:anywhere} .charRow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px; width:min(94vw,402px);margin:8px auto 0} .charCard{display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 8px 9px;border-radius:11px; cursor:pointer;text-align:center;border:1px solid transparent; background:var(--panelG) padding-box,var(--steelB) border-box} .charCard:active{transform:scale(.97)} .charCard.sel{background:var(--panelG) padding-box,linear-gradient(160deg,#8be8ff,#1d6f92) border-box; box-shadow:0 0 0 1px rgba(139,232,255,.25),0 4px 14px rgba(0,0,0,.5)} .charCard.locked{opacity:.45;cursor:default} .charCard.locked:active{transform:none} .charPortrait{display:block;width:62px;height:62px;border-radius:50%;overflow:hidden;flex:0 0 auto} .charPortrait img,.badgePortrait{width:100%;height:100%;object-fit:cover;display:block} .charNm{font-family:var(--fT);font-size:10px;font-weight:800;letter-spacing:.05em;color:#eaf7ff;line-height:1.2} .charRole{font-size:9px;color:#8fb3cc;font-weight:600;line-height:1.2} .charState{margin-top:2px;font-family:var(--fT);font-size:9px;font-weight:800;letter-spacing:.1em;color:#7399b5} .charState.on{color:#5dff9a} .charState.lock{color:#ffd66f} .chipRow{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;width:min(94vw,402px);margin:7px auto 0} .idChip{padding:7px 10px;border-radius:8px;cursor:pointer;border:1px solid transparent; background:var(--panelG2) padding-box,var(--steelB) border-box;min-height:44px} .idChip b{display:block;font-family:var(--fT);font-size:9px;font-weight:800;letter-spacing:.1em;color:#cfe8ff} .idChip span{display:block;margin-top:2px;font-size:9px;letter-spacing:.06em;color:#ffd66f;font-weight:700} .idChip.sel{background:var(--panelG2) padding-box,linear-gradient(160deg,#8be8ff,#1d6f92) border-box} .idChip.sel b{color:#eaf7ff} .idChip.locked{opacity:.5;cursor:default} .idChip:active{transform:scale(.96)} .idChip.locked:active{transform:none} .cLadNm i{font-style:normal;font-size:9.5px;letter-spacing:.12em;color:#8be8ff;margin-left:5px} /* Portrait frames — CSS only, so a new tier costs nothing to ship. */ #rankEm .badgePortrait,.cLadEm .badgePortrait{width:40px;height:40px;border-radius:50%} .cLadEm .badgePortrait{width:44px;height:44px} .fr-steel {border:2px solid #7d99ad;box-shadow:0 0 7px rgba(125,153,173,.5)} .fr-bronze {border:2px solid #c9873b;box-shadow:0 0 8px rgba(201,135,59,.55)} .fr-silver {border:2px solid #d3e2ee;box-shadow:0 0 9px rgba(211,226,238,.55)} .fr-gold {border:2px solid #ffd66f;box-shadow:0 0 10px rgba(255,214,111,.6)} .fr-crimson {border:2px solid #ff6a5a;box-shadow:0 0 11px rgba(255,106,90,.6)} .fr-warmaster{border:2px solid #b98bff;box-shadow:0 0 13px rgba(185,139,255,.7)} /* ── INBOX ───────────────────────────────────────────────────────────────── display:none first — see the #warScr note. A new .overlay without it paints over the menu the moment the launch title finishes. */ #inboxScr{display:none;justify-content:flex-start;padding-left:0;padding-right:0} .inboxScroll{flex:1 1 auto;box-sizing:border-box;width:100%;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch; padding:2px calc(var(--sar) + 16px) 10px calc(var(--sal) + 16px)} .inboxScroll .sHead{width:min(100%,460px);margin-left:auto;margin-right:auto} .inboxScroll .sHead:focus-visible{outline:2px solid #ffe08a;outline-offset:3px} /* A compact, sticky jump rail puts requests and direct messages within one touch of the first fold, even when the player opens the sealed arc archive. */ #inboxQuickNav{position:sticky;top:0;z-index:5;box-sizing:border-box;width:min(100%,460px); display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin:0 auto 6px;padding:4px 0 7px; background:linear-gradient(180deg,rgba(5,14,26,.99) 78%,rgba(5,14,26,.82))} #inboxQuickNav .inboxJump{display:flex;align-items:center;justify-content:center;gap:5px;min-width:0;min-height:44px; padding:5px 6px;border:1px solid rgba(80,174,208,.34);border-bottom:2px solid rgba(89,212,255,.7); border-radius:8px;background:linear-gradient(180deg,rgba(14,53,75,.92),rgba(4,20,35,.96)); color:#d4efff;font:800 .71875rem/1.12 var(--fT);letter-spacing:.04em;cursor:pointer;touch-action:manipulation} #inboxQuickNav .inboxJump:active{background:rgba(22,81,109,.96)} #inboxQuickNav .inboxJump:focus-visible,#inboxArchive summary:focus-visible, #inboxDispatches .inboxItem:focus-visible{outline:2px solid #ffe08a;outline-offset:2px} #inboxQuickNav .inboxJumpCount{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 3px; border-radius:6px;background:#f7c66f;color:#11202d;font:900 .625rem/1 var(--fT)} #inboxQuickNav .inboxJumpCount[hidden]{display:none} html[data-mf-text-scale]:not([data-mf-text-scale="100"]) #inboxQuickNav{display:flex;overflow-x:auto;scrollbar-width:none;touch-action:pan-x} html[data-mf-text-scale]:not([data-mf-text-scale="100"]) #inboxQuickNav .inboxJump{flex:0 0 auto;min-width:7.75rem} /* The unread count belongs on the heading of the list it counts, now that the inbox is one scrolling page instead of a tab strip. */ .sHeadCount{display:none;margin-left:8px;padding:1px 6px;border-radius:8px;vertical-align:middle; letter-spacing:.04em;font:800 9px/1.5 var(--fT);color:#0a1420;background:var(--gold)} .sHeadCount.on{display:inline-block} /* Arc progression. Built by renderInbox(); the Dossier used to carry this line and handed it over when it became the faction codex. */ #inboxDispHead{width:min(100%,460px);margin:5px auto 0;text-align:center; color:#a4c5d6;font:700 .71875rem/1.4 var(--fU);letter-spacing:.03em} #inboxDispatches,#inboxFriends,#inboxMessages,#inboxNews,#inboxUpdates{display:flex;flex-direction:column;gap:7px; width:min(100%,460px);margin:7px auto 0} #inboxArchive{width:min(100%,460px);margin:11px auto 0} #inboxArchive summary{box-sizing:border-box;display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-height:44px;padding:9px 11px; list-style:none;border:1px solid rgba(222,168,87,.35);border-radius:9px; background:linear-gradient(100deg,rgba(64,42,20,.86),rgba(9,26,39,.96)); color:#ffe2aa;font:800 .75rem/1.2 var(--fT);letter-spacing:.06em;cursor:pointer} #inboxArchive summary::-webkit-details-marker{display:none} #inboxArchive summary::after{content:'+';flex:0 0 auto;font:900 1rem/1 var(--fT)} #inboxArchive[open] summary::after{content:'−'} #inboxArchive .inboxArchiveCount{margin-left:auto;color:#d2b988;font:800 .65625rem/1.2 var(--fT); letter-spacing:.03em;overflow-wrap:anywhere} #inboxArchive .inboxArchiveList{display:flex;flex-direction:column;gap:7px;padding-top:7px} .inboxItem{box-sizing:border-box;display:flex;align-items:center;gap:10px;width:100%;min-height:44px;text-align:left;padding:11px 12px; border-radius:10px;cursor:pointer;border:1px solid transparent; background:var(--panelG) padding-box,var(--steelB) border-box} .inboxItem:active{transform:scale(.985)} #inboxFriends .inboxItem.unread{flex-wrap:wrap} #inboxFriends .inboxItem.unread .inboxMeta{width:100%;justify-content:flex-end} #inboxArchive .inboxItem.locked{cursor:default;border-color:rgba(158,112,58,.24); background:linear-gradient(90deg,rgba(43,31,21,.72),rgba(5,15,26,.9))} .inboxDot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:rgba(120,160,190,.35)} .inboxItem.unread .inboxDot{background:#5be69f;box-shadow:0 0 7px rgba(91,230,159,.85)} .inboxTx{flex:1 1 auto;min-width:0;display:block} .inboxTx b{display:block;font-family:var(--fT);font-size:.75rem;line-height:1.25;font-weight:800;letter-spacing:.04em; color:#cfe8ff;overflow-wrap:anywhere} .inboxItem.unread .inboxTx b{color:#eaf7ff} .inboxTx span{display:block;margin-top:2px;font-size:.6875rem;line-height:1.3;letter-spacing:.02em;color:#95b6ca; font-weight:600;overflow-wrap:anywhere} .inboxMeta{flex:0 0 auto;font-family:var(--fT);font-size:.6875rem;font-weight:800;letter-spacing:.04em;color:#8baec4} .inboxItem.unread .inboxMeta{color:#5be69f} .inboxEmpty{padding:13px 12px;border-radius:10px;font-size:.75rem;line-height:1.5;color:#8fb3cc; border:1px dashed rgba(120,170,205,.26);background:rgba(10,17,28,.4)} @media (max-width:430px){ .menuStrip{gap:5px} .sbtn{font-size:9px;padding-left:2px;padding-right:2px} .sbtn .sEmj{font-size:15px} } /* ── Mailbox ─────────────────────────────────────────────────────────────── Menu: pinned to the top-right corner, clear of #metaHead, so the unread dot is always in the same place. In-game: a compact button in the top bar that opens the Inbox as a popup and closes every other panel first. */ #inboxBtn{position:absolute;top:calc(var(--sat) + 6px);right:calc(var(--sar) + 8px);z-index:6; width:44px;height:44px;display:flex;align-items:center;justify-content:center;border-radius:11px; cursor:pointer;border:1px solid transparent; background:var(--panelG2) padding-box,var(--steelB) border-box; box-shadow:0 3px 12px rgba(0,0,0,.5)} #inboxBtn .sEmj{font-size:18px;line-height:1;filter:saturate(.85)} #inboxBtn:active{transform:scale(.94)} /* On wide screens the resource chips stay content-sized, so without an anchor the control cluster floated mid-row — fine on a phone where the chips flex-fill, adrift on a tablet or desktop. The inbox button carries the split: chips left, controls pinned to the right edge. */ #inboxHudBtn{margin-left:auto;width:var(--hudBtn);min-width:var(--hudBtn);height:var(--hudBtn);min-height:var(--hudBtn);padding:0;display:grid;place-items:center;border-radius:9px;font-size:calc(var(--hudBtn)*.34);line-height:1; color:#cfe8ff;border:1px solid rgba(120,170,205,.28);background:rgba(10,17,28,.8);position:relative} #inboxHudBtn:active{transform:scale(.94)} /* One dot rule for both, so an unread transmission looks identical wherever the player happens to be. */ #inboxBtn.pendingDispatch::after,#inboxHudBtn.pendingDispatch::after{ content:'';position:absolute;top:5px;right:5px;width:8px;height:8px;border-radius:50%; background:#5be69f;box-shadow:0 0 7px rgba(91,230,159,.9)} #inboxBtn{position:absolute} body.menuMode #inboxHudBtn{display:none} /* ── Menu header: profile icon + level, resources underneath ─────────────── Grid areas rather than a flex row, so the mailbox can sit in the header's own top-right corner instead of floating over the numbers, and the resources get a full-width row of their own. */ /* Children of the compact command bar. These live here, after the older header rules, because those set grid-area:mail and a two-column resource row - both of which belong to the stacked card the bar replaced. */ #rankEm{grid-area:icon;grid-row:1 / span 2;position:relative;display:flex;align-items:center;justify-content:center; width:40px;height:46px;min-width:0;min-height:0;padding:0;margin:0;flex:0 0 auto;font-size:inherit;filter:none; background:url('../../assets/textures/ui/mf-ui-v3/frame_portrait_empty.png') center/contain no-repeat} #rankEmGlyph{font-size:19px;line-height:1;display:block;filter:drop-shadow(0 0 5px rgba(255,210,87,.5))} #rankLvl{position:absolute;right:-2px;bottom:1px;min-width:16px;height:16px;padding:0 3px; display:flex;align-items:center;justify-content:center;border-radius:9px; font-family:var(--fT);font-size:9px;font-weight:800;line-height:1;color:#08131d; background:linear-gradient(180deg,#ffe9a3,#e0b757);border:1px solid rgba(10,20,30,.65)} #rankGreet{grid-area:name;display:grid;gap:1px;min-width:0;text-align:left} #greetLine{display:block;font-size:14px;letter-spacing:.05em;margin:0} #greetSub{display:block;font-size:9px;letter-spacing:.03em;margin:0} /* Resources move out of their own row onto the right of the same bar, with a hairline where the reference splits its two plates. */ /* The rank track, folded out of its own card and onto the banner. The bar is the pack progress art rather than a flat div, so it matches the plates it sits inside. */ #metaRank{grid-area:xp;display:flex;align-items:center;gap:8px;min-width:0;padding:1px 0} #metaXp{flex:1 1 auto;min-width:0;height:7px;overflow:hidden; border-style:solid;border-width:0 4px;border-color:transparent; border-image-source:url('../../assets/textures/ui/mf-ui-v3/progress_track.png');border-image-slice:0 44 0 44 fill;border-image-repeat:stretch} #metaXpFill{display:block;height:100%;min-width:0; border-style:solid;border-width:0 4px;border-color:transparent; border-image-source:url('../../assets/textures/ui/mf-ui-v3/progress_fill_gold.png');border-image-slice:0 44 0 44 fill;border-image-repeat:stretch} #metaXpTx{flex:0 0 auto;font:700 8.5px/1 ui-monospace,monospace;letter-spacing:.06em;color:#9fc6e0; white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:64%} #metaRes{grid-area:res;display:flex;align-items:baseline;gap:13px;justify-content:flex-start; padding:1px 0 0;border-top:0;border-left:0} .metaResCell{display:flex;align-items:baseline;justify-content:flex-start;gap:5px;min-width:0} .metaResCell .lbl{font-size:7.5px;letter-spacing:.12em;color:#7fa8c4;font-weight:700;flex:0 0 auto} .metaResCell b{font-family:var(--fT);font-size:12px;color:#8be8ff;font-variant-numeric:tabular-nums; overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px} .metaResCell:last-child b{font-size:10px;color:#cfe8ff} #metaRec{margin:0;color:inherit} /* Version and inbox stay reachable but stop competing: two small stacked icon buttons at the end of the bar. */ #metaActions{grid-area:act;grid-row:1 / span 2;display:flex;align-items:center;gap:5px;padding-left:8px} #metaHead #updDot,#metaHead #inboxBtn{border-radius:9px} #metaHead #updDotGlyph{font-size:13px} #metaHead #inboxBtn .sEmj{font-size:14px} #metaHead #updDot::after{top:4px;right:4px;width:7px;height:7px} #inboxBtn{position:static;width:28px;height:28px;flex:0 0 auto} #rankEm .badgePortrait{width:30px;height:30px;border-radius:50%} /* The narrow-phone tune was written for the tall stacked card and grew the resource values; on the compact banner that overflowed the row into CORES [ / RECORD 0W ... at 360px. Everything here now shrinks. */ @media (max-width:430px){ #rankEmGlyph{font-size:17px} #rankEm{width:37px;height:43px} #rankEm .badgePortrait{width:26px;height:26px} #greetLine{font-size:13px} #metaRes{gap:10px} .metaResCell .lbl{font-size:7px;letter-spacing:.1em} .metaResCell b{font-size:11px} .metaResCell:last-child b{font-size:9.5px} #metaXpTx{font-size:8px} #metaHead #updDot,#metaHead #inboxBtn{border-radius:8px} } /* ── Update status dot ───────────────────────────────────────────────────── The colour IS the feature: from the menu, without opening anything, the player can tell whether the build they are running is current. */ #updDot{flex:0 0 auto;width:40px;height:40px;display:flex;align-items:center; justify-content:center;border-radius:11px;cursor:pointer;border:1px solid transparent; background:var(--panelG2) padding-box,var(--steelB) border-box;position:relative} #updDotGlyph{font-size:15px;line-height:1;color:#7f9db4} #updDot:active{transform:scale(.94)} #updDot::after{content:'';position:absolute;top:5px;right:5px;width:8px;height:8px;border-radius:50%; background:#6b8296;box-shadow:none;transition:background .2s} #updDot.updOk::after {background:#5be69f;box-shadow:0 0 7px rgba(91,230,159,.9)} #updDot.updWarn::after {background:#ffd66f;box-shadow:0 0 7px rgba(255,214,111,.9)} #updDot.updBad::after {background:#ff6a5a;box-shadow:0 0 7px rgba(255,106,90,.9)} #updDot.updOk #updDotGlyph{color:#5be69f} #updDot.updWarn #updDotGlyph{color:#ffd66f} #updDot.updBad #updDotGlyph{color:#ff8d7a} #updDot.updBusy::after{animation:updPulse 1s ease-in-out infinite} @keyframes updPulse{0%,100%{opacity:1}50%{opacity:.25}} /* ============================================================================ VISUAL LAUNCHER / GAME VERSION GATEWAY ---------------------------------------------------------------------------- #updScr is deliberately reused: old OTA sources still know this route and the established updater retains authority over Download, Apply and Rollback. The launcher adds presentation and sequencing around it, never a second updater implementation. All art below already ships in www. ============================================================================ */ #updScr{display:none;justify-content:flex-start;padding:0;overflow:hidden; color:#e9f7ff;background:#02070f;isolation:isolate} .mfLauncherBackdrop{position:absolute;inset:0;z-index:-2;overflow:hidden;pointer-events:none; background:radial-gradient(80% 62% at 50% 12%,rgba(26,91,132,.28),transparent 70%), radial-gradient(62% 55% at 8% 78%,rgba(0,118,151,.12),transparent 78%), linear-gradient(180deg,#07111d 0%,#030912 52%,#02060c 100%)} .mfLauncherBackdrop::before{content:'';position:absolute;inset:0;opacity:.18; background-image:linear-gradient(rgba(87,193,239,.09) 1px,transparent 1px), linear-gradient(90deg,rgba(87,193,239,.07) 1px,transparent 1px); background-size:42px 42px;transform:perspective(460px) rotateX(58deg) scale(1.6);transform-origin:50% 100%} .mfLauncherBackdrop::after{content:'';position:absolute;inset:0; background:linear-gradient(90deg,transparent 0 8%,rgba(87,202,248,.07) 8.15%,transparent 8.3% 91.7%,rgba(87,202,248,.07) 91.85%,transparent 92%), repeating-linear-gradient(180deg,transparent 0 3px,rgba(126,216,255,.018) 4px)} .mfLauncherBackdrop i{position:absolute;border-radius:50%;border:1px solid rgba(94,204,250,.10)} .mfLauncherBackdrop i:nth-child(1){width:68vw;height:68vw;right:-38vw;top:10vh} .mfLauncherBackdrop i:nth-child(2){width:42vw;height:42vw;left:-27vw;top:44vh} .mfLauncherBackdrop i:nth-child(3){width:84vw;height:84vw;left:8vw;bottom:-68vw} .mfLauncherTop{position:relative;z-index:3;flex:0 0 auto;width:100%;min-height:62px; padding:calc(var(--sat) + 10px) calc(var(--sar) + 16px) 9px calc(var(--sal) + 16px); display:flex;align-items:flex-end;justify-content:space-between;gap:12px; border-bottom:1px solid rgba(104,203,245,.19);background:linear-gradient(180deg,rgba(3,10,18,.97),rgba(5,15,26,.91)); box-shadow:0 12px 34px rgba(0,0,0,.28)} .mfLauncherTopBrand{display:flex;flex-direction:column;min-width:0} .mfLauncherTopBrand b{font:900 15px/1 var(--fT);letter-spacing:.22em;color:#ecfaff;text-shadow:0 0 14px rgba(96,217,255,.46)} .mfLauncherTopBrand span{margin-top:4px;font:800 7px/1 var(--fT);letter-spacing:.28em;color:#5d9fbd} .mfLauncherIdentity{flex:0 1 auto;min-height:30px;max-width:54%;display:flex;align-items:center;gap:7px; padding:6px 9px;border:1px solid rgba(105,177,215,.22);border-radius:999px;background:rgba(11,27,42,.68); color:#8faabe;font:800 8px/1.15 var(--fT);letter-spacing:.11em;text-align:right} .mfLauncherIdentity i{flex:0 0 8px;width:8px;height:8px;border-radius:50%;background:#d8b357;box-shadow:0 0 9px rgba(255,196,68,.54)} .mfLauncherIdentity[data-state="connected"]{color:#b6f9d0;border-color:rgba(91,230,159,.26)} .mfLauncherIdentity[data-state="connected"] i{background:#5be69f;box-shadow:0 0 10px rgba(91,230,159,.75)} .mfLauncherIdentity[data-state="offline"]{color:#a8b4bd;border-color:rgba(157,170,180,.18)} .mfLauncherIdentity[data-state="offline"] i{background:#7e8d98;box-shadow:none} .updScroll.mfLauncherScroll{position:relative;flex:1 1 auto;width:100%;min-height:0;overflow-y:auto;overflow-x:hidden; -webkit-overflow-scrolling:touch;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#24516b transparent; padding:12px calc(var(--sar) + 14px) 22px calc(var(--sal) + 14px)} .mfLauncherScroll>section,.mfLauncherScroll>details{width:min(100%,760px);margin:0 auto 13px} .mfLauncherHero{position:relative;min-height:218px;overflow:hidden;border-radius:17px; border:1px solid rgba(105,205,249,.28);background:#02060c;box-shadow:0 18px 44px rgba(0,0,0,.42),inset 0 1px rgba(255,255,255,.06)} .mfLauncherHeroArt{position:absolute;inset:0;overflow:hidden;background:#000} .mfLauncherHeroArt::after{content:'';position:absolute;inset:0; background:linear-gradient(90deg,rgba(1,6,11,.92) 0%,rgba(2,8,15,.66) 48%,rgba(2,8,14,.08) 100%), linear-gradient(0deg,rgba(1,5,10,.88),transparent 72%,rgba(1,5,10,.08))} .mfLauncherHeroArt img{position:absolute;width:100%;height:100%;object-fit:cover;object-position:center;filter:saturate(.92) contrast(1.08) brightness(.92)} .mfLauncherSweep{position:absolute;z-index:2;left:-12%;top:0;width:34%;height:100%;opacity:.55; background:linear-gradient(90deg,transparent,rgba(110,222,255,.22),transparent);transform:skewX(-18deg);animation:mfLauncherHeroSweep 5.6s ease-in-out infinite} .mfLauncherOrbit{position:absolute;z-index:2;right:-50px;top:-56px;width:236px;height:236px;border-radius:50%; border:1px solid rgba(111,219,255,.22);box-shadow:0 0 44px rgba(40,171,222,.08),inset 0 0 38px rgba(50,178,230,.06)} .mfLauncherOrbit::before,.mfLauncherOrbit::after{content:'';position:absolute;border-radius:50%;border:1px dashed rgba(108,210,250,.16)} .mfLauncherOrbit::before{inset:24px}.mfLauncherOrbit::after{inset:58px} .mfLauncherHeroCopy{position:relative;z-index:3;min-height:218px;width:min(75%,480px);padding:25px 20px 19px; display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start} .mfLauncherEyebrow{font:900 8px/1 var(--fT);letter-spacing:.25em;color:#68cff5} .mfLauncherHero h2{margin:8px 0 5px;font:900 clamp(21px,6vw,34px)/.98 var(--fT);letter-spacing:.08em;color:#f4fbff; text-shadow:0 2px 16px rgba(0,0,0,.9),0 0 18px rgba(80,196,242,.24)} .mfLauncherHero p{max-width:420px;margin:0;color:#a8bfd0;font:600 11px/1.45 var(--fU);text-wrap:balance} .mfLauncherHeroChips{display:flex;flex-wrap:wrap;gap:5px;margin-top:12px} .mfLauncherHeroChips span{min-height:24px;display:inline-flex;align-items:center;padding:5px 8px;border-radius:6px; background:rgba(8,24,38,.76);border:1px solid rgba(103,191,230,.24);color:#a9d9ee;font:900 7.5px/1 var(--fT);letter-spacing:.12em} .mfLauncherHeroChips #mfLaunchCategory{color:#90f1b5;border-color:rgba(91,230,159,.26)} .mfLauncher[data-category="hotfix"] .mfLauncherHeroChips #mfLaunchCategory{color:#ffd089;border-color:rgba(255,180,80,.34)} .mfLauncher[data-category="content"] .mfLauncherHeroChips #mfLaunchCategory{color:#c5a6ff;border-color:rgba(174,130,255,.34)} .mfLauncher[data-category="overhaul"] .mfLauncherHeroChips #mfLaunchCategory{color:#8eeaff;border-color:rgba(80,210,255,.36)} .mfLauncherSectionHead{min-height:36px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 2px 7px} .mfLauncherSectionHead>div{display:flex;align-items:center;gap:8px;min-width:0} .mfLauncherSectionHead span{display:grid;place-items:center;width:24px;height:24px;border-radius:5px;background:#10293d; border:1px solid rgba(103,196,237,.27);color:#73cce8;font:900 7px/1 var(--fT)} .mfLauncherSectionHead h3{margin:0;color:#d9f4ff;font:900 10px/1 var(--fT);letter-spacing:.17em} .mfLauncherSectionHead>b{max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#638ca5;font:800 7px/1 var(--fT);letter-spacing:.10em} .mfLauncherConsole{padding:11px;border-radius:15px;border:1px solid rgba(94,181,221,.18);background:rgba(5,14,24,.76);box-shadow:0 12px 30px rgba(0,0,0,.20)} .mfLauncherConsole .mfLauncherSectionHead{padding-left:1px;padding-right:1px} .mfLauncher .updScroll #updPanel,.mfLauncher #updPanel{width:100%;max-width:none;margin:0;padding:13px;border-radius:12px; background:linear-gradient(180deg,rgba(17,35,53,.95),rgba(7,18,30,.97)) padding-box, linear-gradient(150deg,rgba(126,218,255,.37),rgba(25,75,108,.15)) border-box; box-shadow:inset 0 1px rgba(255,255,255,.05),0 10px 26px rgba(0,0,0,.28)} .mfLauncher #updPanel.mini{padding:13px;margin:0;box-shadow:inset 0 1px rgba(255,255,255,.05),0 10px 26px rgba(0,0,0,.28)} .mfLauncher #updPanel.mini #updBarO{display:block!important} .mfLauncher #updPanel.mini #updTxt{font-size:10.5px;color:#d2ecfa}.mfLauncher #updPanel.mini #updSub{font-size:9.5px} .mfLauncher #updPanel.mini #updBtn{opacity:1} .mfLauncher #updBarO{height:9px;margin-top:12px;border:1px solid rgba(107,199,237,.13);background:rgba(1,7,13,.92)} .mfLauncher #updBarF{position:relative;height:100%;min-width:0;background:linear-gradient(90deg,#0a789b,#46d7ff 60%,#a2f4ff);box-shadow:0 0 15px rgba(70,215,255,.46)} .mfLauncher #updBarF::after{content:'';position:absolute;inset:0;opacity:.4;background:repeating-linear-gradient(115deg,transparent 0 8px,rgba(255,255,255,.5) 9px 11px,transparent 12px 18px);animation:mfLaunchProgress 1.1s linear infinite} .mfLauncherTelemetry{display:grid;grid-template-columns:1.25fr .8fr .8fr;gap:6px;margin-top:9px} .mfLauncherTelemetry span{min-width:0;padding:7px 8px;border-radius:7px;border:1px solid rgba(101,178,214,.13);background:rgba(5,15,25,.72)} .mfLauncherTelemetry small,.mfLauncherDetailGrid small{display:block;color:#567b91;font:800 6.5px/1 var(--fT);letter-spacing:.13em} .mfLauncherTelemetry b,.mfLauncherDetailGrid b{display:block;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#b9ddec;font:800 8px/1 var(--fT);letter-spacing:.06em} .mfLauncher #updNotes{margin-top:9px;color:#9eb8c8;font-size:9.5px;line-height:1.45} .mfLauncher #updRoll{min-height:44px} .mfLauncherRelease,.mfLauncherContent,.mfLauncherHistory{padding:11px;border-radius:15px;border:1px solid rgba(93,174,213,.16);background:rgba(5,14,24,.68)} .mfLauncherReleaseCard{overflow:hidden;border-radius:12px;border:1px solid rgba(102,190,231,.20);background:linear-gradient(155deg,rgba(19,43,62,.93),rgba(7,18,30,.96))} .mfLauncherReleaseBanner{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start;padding:13px; overflow:hidden;border-bottom:1px solid rgba(103,190,230,.15)} .mfLauncherReleaseBanner::after{content:'MASSFRONT';position:absolute;right:-10px;bottom:-8px;color:rgba(115,211,250,.035);font:900 34px/1 var(--fT);letter-spacing:.04em} #mfLaunchReleaseKind{position:relative;z-index:1;min-height:28px;display:inline-flex;align-items:center;padding:6px 8px;border-radius:6px; color:#9bf1b9;border:1px solid rgba(91,230,159,.28);background:rgba(22,79,49,.34);font:900 7px/1 var(--fT);letter-spacing:.13em} .mfLauncherReleaseBanner>div{position:relative;z-index:1;min-width:0}.mfLauncherReleaseBanner h4{margin:0;color:#ecf9ff;font:900 11px/1.15 var(--fT);letter-spacing:.12em} .mfLauncherReleaseBanner p{margin:5px 0 0;color:#8faabb;font:600 9.5px/1.4 var(--fU)} .mfLauncherReleaseBanner details{margin-top:7px;color:#a9c5d5;font:700 8px/1.4 var(--fU)} .mfLauncherReleaseBanner details summary{min-height:28px;display:inline-flex;align-items:center;cursor:pointer;color:#80d4f1;letter-spacing:.08em} .mfLauncherReleaseBanner details p{margin:0 0 5px;overflow-wrap:anywhere} .mfLauncherTabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;padding:7px;background:rgba(2,9,16,.46)} .mfLauncherTabs button{min-width:0;min-height:44px;padding:7px 4px;border-radius:7px;border:1px solid rgba(83,143,176,.20); color:#6f91a7;background:#0c1b2a;font:800 7px/1.12 var(--fT);letter-spacing:.08em;white-space:normal} .mfLauncherTabs button.on{color:#e9faff;border-color:rgba(83,210,255,.55);background:linear-gradient(180deg,#1b5878,#123a55);box-shadow:0 0 13px rgba(59,190,239,.16)} .mfLauncherNoteList{display:grid;gap:6px;margin:0;padding:10px 11px 12px;list-style:none} .mfLauncherNoteList li{position:relative;min-height:34px;padding:8px 9px 8px 27px;border-radius:7px;background:rgba(11,29,43,.72);color:#acc4d2;font:600 9.5px/1.4 var(--fU)} .mfLauncherNoteList li::before{content:'◆';position:absolute;left:10px;top:10px;color:#56d4fa;font-size:7px} .mfLauncherNoteList.upcoming li{color:#8898a4}.mfLauncherNoteList.upcoming li::before{content:'◇';color:#a687e5} .mfLauncherPackRail{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px} .mfLauncherPack{position:relative;min-width:0;min-height:182px;overflow:hidden;border-radius:12px;border:1px solid rgba(104,191,232,.21);background:#0a1724} .mfLauncherPack>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.84) brightness(.62);opacity:.72} .mfLauncherPack::after{content:'';position:absolute;inset:0;background:linear-gradient(0deg,rgba(3,10,17,.99) 5%,rgba(4,12,20,.82) 54%,rgba(3,9,16,.13) 100%)} .mfLauncherPack>div{position:relative;z-index:2;min-height:136px;padding:55px 10px 8px;display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start} .mfLauncherPack>div>span{color:#65c8ed;font:900 6.5px/1 var(--fT);letter-spacing:.16em}.mfLauncherPack h4{margin:5px 0 3px;color:#ecf9ff;font:900 9px/1.1 var(--fT);letter-spacing:.08em} .mfLauncherPack p{margin:0;color:#98aebb;font:600 8.5px/1.35 var(--fU)}.mfLauncherPack small{margin-top:6px;color:#85dba8;font:900 7px/1 var(--fT);letter-spacing:.10em} .mfLauncherPack>button{position:relative;z-index:3;width:calc(100% - 16px);min-height:44px;margin:0 8px 8px;border-radius:7px;border:1px solid rgba(89,197,240,.42); color:#d9f4ff;background:linear-gradient(180deg,#1c5575,#12364f);font:900 8px/1 var(--fT);letter-spacing:.11em} .mfLauncherPack>button:disabled{opacity:.44;filter:grayscale(.7)} .mfRequiresNet{display:none;position:absolute;z-index:4;inset:auto 7px 7px 7px;min-height:38px;align-items:center;justify-content:center;border-radius:7px; color:#8a9aa4;background:rgba(7,12,17,.95);border:1px solid rgba(145,159,168,.20);font:900 6.5px/1 var(--fT);letter-spacing:.10em} .mfLauncher[data-online="false"] .onlineOnly{filter:saturate(.18);opacity:.67}.mfLauncher[data-online="false"] .onlineOnly>button{visibility:hidden}.mfLauncher[data-online="false"] .onlineOnly .mfRequiresNet{display:flex} #mfLaunchPackProgress #packPanel{width:100%;margin:8px 0 0} .mfLauncherHistoryTabs{grid-template-columns:repeat(2,minmax(0,1fr));padding:0 0 8px;background:none} .mfLauncherTimeline{position:relative;display:grid;gap:0;margin:0;padding:1px 0 0 17px;list-style:none} .mfLauncherTimeline::before{content:'';position:absolute;left:5px;top:8px;bottom:9px;width:1px;background:linear-gradient(#5acff6,rgba(65,145,180,.12))} .mfLauncherTimeline li{position:relative;min-height:58px;padding:8px 9px 9px 11px;border-bottom:1px solid rgba(98,173,209,.12)} .mfLauncherTimeline li::before{content:'';position:absolute;left:-16px;top:13px;width:7px;height:7px;border-radius:50%;background:#47d3ff;border:2px solid #092135;box-shadow:0 0 9px rgba(71,211,255,.55)} .mfLauncherTimeline li.gap::before{background:#536673;box-shadow:none}.mfLauncherTimeline li:last-child{border-bottom:0} .mfLauncherTimeline b{display:block;color:#d8f0fa;font:900 8.5px/1.2 var(--fT);letter-spacing:.10em}.mfLauncherTimeline em{margin-left:6px;color:#68cdef;font:900 6.5px/1 var(--fT);font-style:normal} .mfLauncherTimeline span{display:block;margin-top:4px;color:#829aaa;font:600 8.5px/1.35 var(--fU)} .mfLauncherDetails{overflow:hidden;border:1px solid rgba(94,174,213,.16);border-radius:12px;background:rgba(4,13,22,.76)} .mfLauncherDetails summary{min-height:48px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;cursor:pointer; color:#8eb6ca;font:900 8px/1 var(--fT);letter-spacing:.13em;list-style:none}.mfLauncherDetails summary::-webkit-details-marker{display:none} .mfLauncherDetails summary::after{content:'+';font-size:15px;color:#68c7e8}.mfLauncherDetails[open] summary::after{content:'−'} .mfLauncherDetails summary span{margin-left:auto;color:#536f80;font-size:6.5px;letter-spacing:.08em} .mfLauncherDetailGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:0 10px 10px} .mfLauncherDetailGrid>span{min-width:0;padding:9px;border-radius:7px;background:rgba(12,29,42,.72);border:1px solid rgba(93,164,198,.12)} .mfLauncherFoot{position:relative;z-index:4;flex:0 0 auto;width:100%;display:grid;grid-template-columns:minmax(0,.72fr) minmax(0,1.4fr) auto;gap:7px; padding:9px calc(var(--sar) + 12px) calc(var(--sab) + 10px) calc(var(--sal) + 12px);border-top:1px solid rgba(104,199,239,.22); background:linear-gradient(180deg,rgba(4,13,23,.96),rgba(2,7,13,.99));box-shadow:0 -14px 30px rgba(0,0,0,.34)} .mfLauncherFoot button{margin:0;min-width:0;min-height:50px}.mfLauncherPlay{position:relative;overflow:hidden;font:900 10px/1 var(--fT);letter-spacing:.12em} .mfLauncherPlay:not(:disabled){box-shadow:0 0 24px rgba(64,196,244,.23),inset 0 1px rgba(255,255,255,.12)} .mfLauncherPlay:disabled{opacity:.48}.mfLauncherOfflineAction{font-size:8px;letter-spacing:.08em;padding-left:8px;padding-right:8px} .mfLauncherFoot #updBack{width:50px;min-width:50px;max-width:50px;padding:0;font-size:0;overflow:hidden}.mfLauncherFoot #updBack::before{content:'◀';font-size:14px} body.mfLauncherGate .mfLauncherFoot #updBack{display:none} body.mfLauncherGate .mfLauncherFoot{grid-template-columns:minmax(0,.78fr) minmax(0,1.45fr)} /* updatePrimary() reveals the secondary route with an inline display value. Explicitly constrain the grid items so the legacy .mbtn minimum cannot overflow its column and let the disabled online action steal Offline taps. #updBack needs the same treatment above and is constrained on its own rule: it carries .mbtn.alt, whose min-width:238px outranks .mfLauncherFoot button on specificity and then overrides width, which starved PLAY OFFLINE to 44px of the 108px its label needs at 412px wide. */ .mfLauncherFoot .mfLauncherOfflineAction,.mfLauncherFoot .mfLauncherPlay{ min-width:0;width:100%;max-width:100%;justify-self:stretch;overflow:hidden } @keyframes mfLauncherHeroSweep{0%,18%{transform:translateX(-125%) skewX(-18deg);opacity:0}40%{opacity:.58}72%,100%{transform:translateX(420%) skewX(-18deg);opacity:0}} @keyframes mfLaunchProgress{to{background-position:22px 0}} /* Phone cards get the full viewport width. The former two-column layout fit mathematically at 412px but reduced the artwork to postage stamps. */ @media(max-width:520px){ .mfLauncherHero{min-height:220px} .mfLauncherHeroArt::after{background:linear-gradient(0deg,rgba(1,6,11,.98) 0%,rgba(1,6,11,.88) 28%,rgba(1,6,11,.12) 86%)} .mfLauncherHeroCopy{min-height:220px;width:100%;padding:16px;justify-content:flex-end} .mfLauncherHero h2{max-width:270px;font-size:clamp(21px,6vw,27px);line-height:1.02} .mfLauncherHero p{max-width:290px;line-height:1.35} .mfLauncherPackRail{grid-template-columns:1fr}.mfLauncherPack{min-height:168px} .mfLauncherPack>div{min-height:122px;padding-top:48px;padding-right:116px} .mfLauncherPack>button{width:auto;min-width:96px;position:absolute;right:0;bottom:0} } @media(max-width:370px){ .mfLauncherTop{padding-left:calc(var(--sal) + 11px);padding-right:calc(var(--sar) + 11px)} .updScroll.mfLauncherScroll{padding-left:calc(var(--sal) + 9px);padding-right:calc(var(--sar) + 9px)} .mfLauncherHero{min-height:204px}.mfLauncherHeroCopy{min-height:204px;width:82%;padding:20px 14px 15px} .mfLauncherPack{min-height:158px}.mfLauncherPack>div{min-height:112px;padding-top:42px;padding-right:112px} .mfLauncherFoot{padding-left:calc(var(--sal) + 8px);padding-right:calc(var(--sar) + 8px)} } @media(orientation:landscape) and (min-width:640px) and (max-height:620px){ .mfLauncherTop{min-height:48px;padding-top:calc(var(--sat) + 5px);padding-bottom:6px}.mfLauncherTopBrand b{font-size:12px} .updScroll.mfLauncherScroll{display:grid;grid-template-columns:minmax(290px,1.04fr) minmax(280px,.96fr);align-items:start;gap:10px;padding-top:8px;padding-bottom:12px} .mfLauncherScroll>section,.mfLauncherScroll>details{width:100%;margin:0}.mfLauncherHero{grid-row:span 2;min-height:270px;height:calc(100vh - var(--sat) - var(--sab) - 128px)} .mfLauncherHeroCopy{min-height:100%;width:76%;padding:18px}.mfLauncherHero h2{font-size:23px}.mfLauncherConsole{padding:8px} .mfLauncherRelease,.mfLauncherContent,.mfLauncherHistory{padding:8px}.mfLauncherPackRail{grid-template-columns:repeat(2,minmax(0,1fr))}.mfLauncherPack{min-height:154px} .mfLauncherPack>div{min-height:109px;padding-top:34px}.mfLauncherDetails{grid-column:1/-1}.mfLauncherFoot{padding-top:6px;padding-bottom:calc(var(--sab) + 6px)} } @media(prefers-reduced-motion:reduce){ .mfLauncherSweep,.mfLauncher #updBarF::after{animation:none!important}.mfLauncherBackdrop::before{transform:none;opacity:.08} .mfLauncher *{scroll-behavior:auto!important;transition:none!important} } /* OPERATIONS FOOT — the start button is pinned, not buried. Measured at 360x640: the old screen spent 386px on chrome and left a 254px window onto a 2044px pane, so the control that begins a match sat about a thousand pixels below the fold. Putting it in the footer makes "every tab ends in a button that starts a match" true at every scroll position. ONE ROW, not two. Stacking the pair measured 181px of footer and gave back most of what the move had just won; side by side is 2 x 44px targets in the height of one. START takes the width because it is the primary action. */ .setupFoot.opsFoot{ display:flex; flex-direction:row; align-items:stretch; gap:8px; } .setupFoot.opsFoot .opsGo{ flex:1 1 auto; min-height:48px; margin:0; } .setupFoot.opsFoot .mbtn{ flex:0 0 auto; min-width:96px; min-height:48px; margin:0; } /* The arcs carousel became a link to the Dossier, which owns faction lore. */ .storyCampaignArcLink{ display:flex; flex-direction:column; gap:2px; width:100%; text-align:left; min-height:44px; background:transparent; border:none; cursor:pointer; } /* Major-update opening controls. Two doctrine-sized choices, never tiny radio dots: setup is already a phone UI and every state must be tappable. */ .deployPkgRow{display:grid!important;grid-template-columns:1fr 1fr;gap:8px} .deployPkgRow .pkgbtn{min-height:66px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:5px;padding:10px 12px} .deployPkgRow .pkgbtn b{font:800 12px var(--fT);letter-spacing:.08em} .deployPkgRow .pkgbtn span{font-size:9px;letter-spacing:.06em;color:#9fc6e0;text-align:left} #goalBar .firstContact{color:#8fffc0;text-shadow:0 0 10px rgba(80,255,180,.38);white-space:nowrap} @media (max-width:380px){#goalBar .hudIntelChip.contact .hudIntelFull{display:none}} /* ========================================================================== FRONT-END SHELL — mobile input feel and accessibility Scope is the out-of-match shell only: menu, War Room, War Table, Settings, Profile, Operations, Dossier. Nothing below may name in-match HUD chrome (#cmdbar, #buildMenu, #prodMenu, #minimapWrap, .cbtn, .hotSlot); that surface is owned elsewhere and its rules live further up this file. ========================================================================== */ /* ---- 1. Double-tap zoom, and the tap delay that comes with it ------------- `touch-action` does not inherit. Only html, body and canvas#gl ever set it, so every front-end overlay ran at the default `auto` — which keeps double-tap-to-zoom alive and makes the browser hold each tap ~300ms to see whether a second one follows. That cost two things: menu buttons felt mushy, and a double tap that missed the battlefield zoomed the whole page, with no way back inside a fullscreen webview. `manipulation` drops the double-tap gesture and the delay. Page pinch is already locked on the viewport (index.html maximum-scale=1) so a pinch that starts on a menu cannot scale the HUD; camera zoom stays on canvas#gl. It also keeps the in-match double-tap RETREAT gesture unambiguous: no front-end surface can claim a second tap as a zoom any more. */ .overlay,.overlay button,.overlay [role="button"],.overlay summary,.overlay a, .warCard,.mapCard,.setRow,.gbtn,.sbtn,.mbtn,.dbtn,.tabBtn, .mfGalaxyStep,.mfWorldChip,.mfRegionChip,.mfQuickPlan,.mfTeamBtn,.mfQuickCommander{ touch-action:manipulation} /* ---- 2. Touch targets below the 44px floor ------------------------------- Measured at 412x915: the menu header's two icon buttons were 40x40, and .dbtn derived its height from padding alone (~36px). The War Table stage stepper was the worst of them at 31px — five of them side by side across a 412px screen, which is a 74px-wide, 31px-tall target for the control that navigates the whole flow. */ #metaActions #inboxBtn,#metaActions #updDot{width:44px;height:44px} .dbtn{min-height:44px;display:inline-flex;align-items:center;justify-content:center} .sbtn{font-size:10px} #profName{min-height:44px;height:44px} .settingsNav .screenTabBtn{font-size:10px;letter-spacing:.04em} .setupContext{font-size:10px} #setupScr .commanderCard i{font-size:9px;letter-spacing:.08em} #setupScr .commanderCard b{font-size:10.5px} #setupScr .commanderCard small{font-size:9.5px} .boostChip{min-height:44px;box-sizing:border-box;font-size:10px} /* ---- 3. Safe-area insets on scrollers that end at the screen edge --------- #settingsScr and #profileScr are the two `padding:0!important` shells, so unlike every other front screen they do not inherit .overlay's bottom inset. Their scroller runs to the bottom of the display with no footer under it, which put the last settings row and the profile actions beneath the home indicator / gesture bar. The floor matters as much as the inset: Android gesture navigation reports env(safe-area-inset-bottom) as 0 while still drawing a bar there. */ .settingsScroll,.profileScroll{padding-bottom:max(calc(var(--sab) + 14px),26px)} /* ---- 4. War Room card type ------------------------------------------------ The operation cards are the only route into a match; their supporting lines were set at 8–9px, which is below the point where letterforms survive a phone's subpixel grid. */ .warFootTx{font-size:10px;letter-spacing:.04em;-webkit-line-clamp:3;overflow-wrap:anywhere} .warLock{font-size:10px;overflow-wrap:anywhere} .warReward b,.warReward small{font-size:9.5px} .warReward small{-webkit-line-clamp:3;overflow-wrap:anywhere} @media (max-width:430px){.warDs{font-size:10.5px}} /* ---- 5. Setup / AI rows on the War Table's deploy stage ------------------- These sit under the deployment drawers and were the last 8px labels on the route into a match. .aiRole and the behaviour