.city-life{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:2}.citizen-path{position:absolute;width:20px;height:20px;left:var(--x0);top:var(--y0);animation:city-walk var(--walk-time) linear var(--walk-delay) infinite alternate}.city-citizen{display:block;width:20px;height:20px;margin:-15px 0 0 -10px;background:url('assets/art/march-units-v04.png') 0 0/400% 600%;filter:drop-shadow(1px 2px 1px #111a);animation:soldier-walk .9s steps(1) infinite}.fountain-ripple{position:absolute;left:46.5%;top:35.7%;width:8%;height:2.6%;border-radius:50%;border:1px solid #d9f2e186;box-shadow:inset 0 0 7px #bae5df55;animation:water-ripple 2.4s ease-out infinite}.fountain-spray{position:absolute;left:50.2%;top:33%;width:.8%;height:3.7%;background:linear-gradient(90deg,transparent,#e5f8e8a0,transparent);opacity:.5;animation:water-spray 1.1s ease-in-out infinite alternate}.city-water{position:absolute;width:5%;height:6%;opacity:.24;background:repeating-linear-gradient(165deg,transparent 0 8px,#d8f4ef 9px,transparent 11px);animation:water-flow 2s linear infinite;clip-path:polygon(30% 0,70% 0,100% 100%,0 100%)}.water-left{left:18%;top:12%}.water-right{right:4%;top:88%}@keyframes city-walk{0%{left:var(--x0);top:var(--y0)}33%{left:var(--x1);top:var(--y1)}66%{left:var(--x2);top:var(--y2)}100%{left:var(--x3);top:var(--y3)}}@keyframes water-ripple{from{scale:.65;opacity:.8}to{scale:1.1;opacity:0}}@keyframes water-spray{to{opacity:.85;scale:1 .95}}@keyframes water-flow{to{background-position:0 24px}}
.command-tabs{display:flex;gap:6px;position:sticky;top:0;z-index:4;background:#162c21;padding:8px 0}.command-tabs button{flex:1;min-height:44px;background:#10251b;border:1px solid #73805a;color:#ddd3a2;font:inherit}.command-tabs button[aria-selected=true]{background:#455736;border-color:#cfbb75;color:#fff1bf}.hero-pool{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:10px}.champion-card{border:1px solid #77845b;background:linear-gradient(145deg,#263b2b,#102219);padding:14px;border-radius:4px}.champion-card.epic{border-color:#a681c5}.champion-card.rare{border-color:#7aaac7}.champion-card h3{margin:8px 0}.champion-card .champion-sigil{font-size:32px;color:#d8c48d}.champion-card.locked{opacity:.52}.champion-card small{display:block;margin:6px 0}.champion-card button{margin-top:8px;min-height:44px}.target-status{padding:12px;border:1px solid #8a8b5c;background:#243927;margin-bottom:12px}.target-status strong{color:#f0d17d}.dispatch-unit .dispatch-tiers{grid-template-columns:repeat(4,minmax(0,1fr))}.dispatch-unit label{font-size:11px}.dispatch-unit input{width:100%;min-width:0}.battle-result-card{text-align:center;border:1px solid #bcab69;padding:20px;background:radial-gradient(ellipse at top,#536037,#13291d 75%);animation:result-reveal .45s ease-out}.battle-result-card.defeat{background:radial-gradient(ellipse at top,#603b34,#211d1b 75%);border-color:#b37965}.battle-result-card .result-crest{font-size:64px;color:#e4c575;display:block}.battle-result-card h3{font-size:28px;margin:10px}.battle-result-card p{text-align:left;line-height:1.8}.result-count{display:inline-block;background:#17281b;border:1px solid #78855d;padding:4px 10px;border-radius:12px}.npc-status{font-size:10px;color:#cbd9af;display:block}.npc-party{pointer-events:none;opacity:.8}.march-party.waiting .party-shield{background:#66552a}.alliance-roster{display:grid;gap:6px;margin:14px 0}.alliance-member{display:flex;justify-content:space-between;border-bottom:1px solid #6b7850;padding:8px 0;gap:8px}.rally-summary{border:1px solid #b8a15d;padding:12px;margin:12px 0}.code-help{font-size:12px;line-height:1.8;overflow-wrap:anywhere}.code-entry{display:flex;gap:8px}.code-entry input{min-width:0;flex:1}.code-entry button{flex:none}.formation-actions{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0}.formation-actions button{min-height:40px}.battle-ready{box-shadow:0 0 0 2px #c4b56966}.gathering-badge{position:absolute;left:35px;top:38px;background:#153723e8;padding:3px 6px;border:1px solid #acc87d;color:#dceab7;font-size:10px}@keyframes result-reveal{from{opacity:0;transform:translateY(12px) scale(.96)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.city-life *,.battle-result-card{animation:none!important}}@media(max-width:420px){.dispatch-unit .dispatch-tiers{grid-template-columns:repeat(2,minmax(0,1fr))}.hero-pool{grid-template-columns:repeat(2,minmax(0,1fr))}.champion-card{padding:10px}.champion-card h3{font-size:15px}.code-entry{flex-wrap:wrap}}

.resource-empty .world-prop{filter:grayscale(.65);opacity:.5}.march-party.npc-party .party-shield{font-size:8px;background:#3b4931}.dispatch-tiers label[hidden]{display:none}.game-shell .bottom-nav [data-page="hero"]{font-size:10px}

.feature-open .city-life *{animation-play-state:paused}.city-stage .building{z-index:3}.city-stage .working{white-space:nowrap}.npc-party .march-soldier{animation-duration:1s}

.march-party.waiting .march-soldier{animation:none}.citizen-path{contain:layout style}
.march-line.other-route,.march-line.other-route.returning{stroke:#fff;stroke-width:3;filter:drop-shadow(0 1px 2px #102018)}.march-line.hostile-route,.march-line.hostile-route.returning{stroke:#ff4141;stroke-width:4;filter:drop-shadow(0 0 3px #641818)}.other-party{pointer-events:none}.other-party .party-shield{background:#29372aed;border-color:#e4e6ce;color:#fff8d9}.hostile-party .party-shield{background:#631b1bf0;border-color:#ff7770;color:#fff0e3}.march-party .party-shield{max-width:200px;font-size:11px}.route-legend{position:absolute;left:8px;bottom:8px;z-index:6;display:flex;gap:8px;padding:5px 8px;border:1px solid #80906d80;background:#14261de0;color:#dddac1;font-size:10px;pointer-events:none}.route-legend span:before{content:'';display:inline-block;width:13px;margin-right:4px;border-top:2px solid;vertical-align:middle}.legend-own:before{color:#a0e05d}.legend-other:before{color:white}.legend-hostile:before{color:#ff4141}.hostile-timer{border-left:3px solid #ed6560!important;background:#4b2425ed!important}.hostile-timer strong{color:#ffb1a1!important}.scout-roster{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.scout-roster p{padding:10px;border:1px solid #677453;background:#1d3426;font-size:12px}@media(max-width:420px){.route-legend{font-size:9px;gap:6px;max-width:calc(100% - 145px);flex-wrap:wrap}.scout-roster{grid-template-columns:1fr}.scout-roster p{margin:0}}
