/* A map first, with controls revealed when needed. */
#worldAtlas[open]{position:fixed;inset:0;width:100vw;height:100dvh;max-width:none;max-height:none;margin:0;padding:0;border:0;border-radius:0;overflow:hidden;background:#153e4b;box-shadow:none}
#atlasCanvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;display:block}
#worldAtlas .atlasHead{position:absolute;top:max(12px,env(safe-area-inset-top));left:12px;right:12px;display:flex;gap:8px;margin:0;padding:8px;background:#17323eea;border:1px solid #b3c7b33d;border-radius:16px;backdrop-filter:blur(12px)}
#worldAtlas .atlasHead h2{flex:1;font-size:20px;margin:0;line-height:44px}#worldAtlas .atlasHead button{padding:9px 12px;min-width:44px;font-size:13px}#worldAtlas #atlasClose{font-size:26px;padding:0}
#atlasOptionsToggle{position:absolute;right:16px;bottom:calc(20px + env(safe-area-inset-bottom));box-shadow:0 5px 22px #10282d55;min-width:80px}
#worldAtlas .atlasTray{position:absolute;left:12px;right:12px;top:calc(88px + env(safe-area-inset-top));max-height:calc(100dvh - 170px);overflow:auto;overscroll-behavior:contain;box-sizing:border-box;padding:16px;border:1px solid #9eb7ab66;border-radius:16px;background:#1c3740f5;box-shadow:0 10px 30px #10282d55;backdrop-filter:blur(16px)}
#worldAtlas #atlasOptions{top:auto;bottom:calc(78px + env(safe-area-inset-bottom));max-height:calc(100dvh - 185px)}
.atlasTrayHead{display:flex;justify-content:space-between;align-items:center;gap:10px}.atlasTrayHead h3{margin:0;font-size:18px}.atlasTray h3{font-size:15px}.atlasTray label{font-size:13px;display:block}.atlasTray p{font-size:12px;line-height:1.6;color:#bdd0c7}.atlasTray button{width:100%;text-align:left;margin:3px 0}.atlasTrayHead button{width:44px;text-align:center}.atlasTray label.atlasCheck{display:flex;align-items:center;gap:10px;min-height:44px}#worldAtlas .atlasCheck input{width:20px;min-height:20px;margin:0}.atlasHint{position:absolute;left:16px;bottom:calc(22px + env(safe-area-inset-bottom));max-width:calc(100% - 120px);pointer-events:none;font-size:11px!important;line-height:1.6!important;color:#c5d7cc!important;margin:0!important}
#dockMore{border-top:1px solid #aec5b333;padding:4px 0 0;margin-top:8px}#dockMore>summary{font-size:13px;padding:10px 0;min-height:40px;box-sizing:border-box;color:#cadad1;cursor:pointer}#commandDock .dockhead h2{font-size:18px}#commandDock .dockhead{margin-bottom:10px}#commandDock #attackPreview{padding:8px 0}#commandDock #armyRoster{display:none}#commandDock #unitOrders{margin:10px 0}#commandDock .orderrow{margin-top:6px}.combatHint{font-size:12px!important;line-height:1.5!important;color:#d7dfcb!important;margin:8px 0!important}.combatHint button{min-height:36px;font-size:12px;margin-top:6px}.tacticalNotes{font-size:13px;line-height:1.7;padding:10px 0}.scoutedIntel{color:#b9e3cd!important}
.mapVeteran{display:inline-flex;margin-left:6px;padding:2px 5px;border:1px solid #dbc88788;border-radius:5px;font:700 10px/1.1 system-ui;color:#f0da94;background:#3a4237}.unitIdentity{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:#ddc989}
#battleResult[data-outcome="victory"]{animation:battleArrival .6s cubic-bezier(.16,1,.3,1) both;box-shadow:0 0 0 1px #d7c28766,0 12px 60px #7cbf8d33}#battleResult[data-outcome="defeat"]{animation:battleArrival .4s ease-out both}#battleResult[data-outcome="victory"]::before{content:'';position:absolute;inset:0;border-radius:inherit;background:linear-gradient(115deg,transparent 20%,#e8df9c22 45%,transparent 65%);background-size:240% 100%;animation:resultSweep 1.4s ease-out;pointer-events:none}.battleResult h2{position:relative}.battlePhaseCallout{position:fixed;left:50%;top:34%;transform:translateX(-50%);z-index:18;pointer-events:none;max-width:75vw;padding:10px 18px;border:1px solid #bfd2b766;border-radius:12px;background:#18333fdd;color:#e5ead7;font:700 15px system-ui;text-align:center;animation:phaseCallout 2.2s both}
@keyframes phaseCallout{0%{opacity:0;translate:0 10px}15%,70%{opacity:1;translate:0 0}100%{opacity:0;translate:0 -8px}}@keyframes battleArrival{from{opacity:0;translate:0 20px;scale:.96}to{opacity:1;translate:0 0;scale:1}}@keyframes resultSweep{from{background-position:160% 0}to{background-position:-80% 0}}
@media(min-width:800px){#worldAtlas .atlasTray{left:auto;right:24px;width:360px}.atlasHint{font-size:13px!important}}
@media(prefers-reduced-motion:reduce){#battleResult,.battlePhaseCallout,#battleResult::before{animation:none!important}.battlePhaseCallout{display:none}}
#commandDock .combatHeading{display:flex!important;justify-content:space-between;gap:12px;font-size:13px;line-height:1.5;margin-bottom:8px}#commandDock .combatForces{display:grid!important;grid-template-columns:1fr auto 1fr;gap:12px;align-items:center;background:none;padding:8px 0}#commandDock .combatForces>span:not(:nth-child(2)){display:flex;flex-direction:column;gap:3px;font-size:11px;color:#bfd1ca}#commandDock .combatForces>span:last-child{text-align:right}#commandDock .combatForces b{font-size:24px;line-height:1.1;color:#ecf0df}#commandDock .combatForces>span:nth-child(2){font-size:11px;color:#aebeb7}#commandDock .lossEstimate{font-size:11px;margin:4px 0}#commandDock .routeDetails{padding:4px 0!important}#commandDock .combatHint{margin:6px 0!important}#commandDock .orderrow{display:flex!important;gap:8px}#commandDock #march{flex:1;min-width:0}#commandDock #hold:disabled,#commandDock #manage:disabled{display:none}#commandDock #hold,#commandDock #manage{flex:none;padding:10px 14px}#commandDock #sectorOwner{text-transform:none;font-size:11px}#commandDock #battleTactics .tacticsHeading span{display:none}
#commandDock .orderrow[hidden],#commandDock .dockTroopControls[hidden]{display:none!important}#commandDock .battleCommand{padding:12px;margin-top:6px}#commandDock .battleCommandHead{font-size:13px;letter-spacing:0}#commandDock .battleCommandHead small{font-size:13px;letter-spacing:0}#commandDock .battleBalance{margin:10px 0}#commandDock .battleBalance b{font-size:24px}#commandDock .battleCommand>p{font-size:12px!important;margin:8px 0!important;line-height:1.5!important}#commandDock .battleCommand>details>summary{font-size:13px;min-height:38px}
#commandDock:has(#battleCommand:not([hidden])) .contextBar{position:absolute;right:14px;top:10px;width:34px;background:none;padding:0}#commandDock:has(#battleCommand:not([hidden])) .dockhead{padding-right:38px;margin-bottom:6px}#commandDock:has(#battleCommand:not([hidden])) #sectorFocus,#commandDock:has(#battleCommand:not([hidden])) #sectorOwner{display:none}#commandDock:has(#battleCommand:not([hidden])) .dockhead h2{margin:0;font-size:17px}#commandDock #dockMore[hidden]{display:none!important}@media(max-height:650px){#commandDock .battleCommand{padding:10px}#commandDock .battleBalance b{font-size:21px}#commandDock .battleBalance{margin:6px 0}}
#battleResult{position:fixed;z-index:25;left:50%;right:auto;top:auto;bottom:calc(100px + env(safe-area-inset-bottom));transform:translateX(-50%);box-sizing:border-box;width:min(390px,calc(100vw - 24px));max-width:calc(100vw - 24px);max-height:calc(100dvh - 140px);overflow:auto;padding:20px;border:1px solid #b4c99d77;border-radius:18px;color:#edf3e8;box-shadow:0 16px 48px #0b242b88;font:500 14px/1.5 Manrope,system-ui}
#battleResult h2{font:800 22px/1.25 Manrope,system-ui;margin:0 30px 8px 0}#battleResult p{font-size:12px;line-height:1.6;margin:8px 0;color:#c7d7cc}#battleResult button{position:relative;min-height:44px;padding:10px 12px;border:1px solid #b4c9a455;border-radius:10px;background:#34534f;color:#e4ecd9;font:700 12px/1.4 Manrope,system-ui}#battleResult #dismissResult{position:absolute;right:10px;top:10px;width:36px;height:36px;min-height:36px;padding:0;font-size:21px;background:#42615d;color:#eff2e4}#battleResult #resultReview,#battleResult #resultContinue{display:block;width:100%;margin-top:10px}#battleResult #resultContinue{background:#a6dfb6;color:#153c35}#battleResult::before{width:auto;height:auto;margin:0;border:0;display:block;content:none}#battleResult[data-outcome="victory"]::before{content:'';inset:0;pointer-events:none}#battleResult #resultOperation[hidden],#battleResult button[hidden]{display:none!important}
#commandDock:has(#battleCommand:not([hidden])) .contextBar{position:sticky!important;right:auto;top:0!important;height:0;min-height:0;width:100%;margin:0!important;z-index:5}#commandDock:has(#battleCommand:not([hidden])) .contextBar>button{position:absolute;right:0;top:0}
