.territory .land{stroke:#191c20;stroke-width:2.3;filter:none}
.territory.selected .land,.territory:focus-visible .land{stroke:#fff6d2;stroke-width:5;filter:drop-shadow(0 0 8px #fff7b2b0) drop-shadow(0 4px 1px #001527)}
.territory.target .land{stroke:#fff;stroke-width:5;stroke-dasharray:9 5}
.territory .land-sheen{opacity:1}.territory .land-relief{stroke:#14101d;stroke-width:7;stroke-opacity:.15;pointer-events:none}.counter-sheen{pointer-events:none}.territory .troop-circle{stroke:#051421;stroke-width:3.5}.territory .troop-count{stroke-width:3.5}
.is-animating #activityMarkers,.is-animating #battleArrow,.is-animating .capture-hatch{opacity:0}
#boardFx{pointer-events:none}.fx-old-count{font:800 23px 'DM Sans',sans-serif;text-anchor:middle;dominant-baseline:central;fill:white;paint-order:stroke;stroke:#102131;stroke-width:3px}
.playing .fx-old-land{animation:land-takeover 1.2s .6s ease-in-out both}.fx-capture-edge{fill:none;stroke-width:7;stroke-linejoin:round;animation:claim-edge 2.8s ease-out both}.fx-ripple{fill:none;stroke:var(--fx-color);stroke-width:4;transform-box:fill-box;transform-origin:center;animation:land-ripple 1.8s .4s ease-out both}.fx-route-shadow,.fx-route{fill:none;stroke:#00172b;stroke-width:11;stroke-linecap:round}.fx-route{stroke-width:5;stroke-dasharray:100;animation:march-route 2s ease-out both}.fx-delta{font:900 30px 'DM Sans',sans-serif;text-anchor:middle;fill:#d9ffaf;paint-order:stroke;stroke:#082440;stroke-width:5px;animation:troop-delta 2.7s .25s ease-out both}.fx-delta.loss{fill:#fff0cd}.fx-spark{animation:claim-spark 1.5s calc(.7s + var(--delay)) ease-out both}.fx-flag path{animation:flag-rise .7s .9s cubic-bezier(.2,.8,.3,1) both}.fx-flag{filter:drop-shadow(0 3px 2px #001b3599)}
@keyframes land-takeover{0%,20%{opacity:1}100%{opacity:0}}@keyframes claim-edge{0%,20%{opacity:0;stroke-width:14}45%{opacity:1;stroke-width:7}100%{opacity:0;stroke-width:3}}@keyframes land-ripple{0%{opacity:0;transform:scale(.8)}15%{opacity:1}100%{opacity:0;transform:scale(4)}}@keyframes march-route{from{stroke-dashoffset:100;opacity:.2}to{stroke-dashoffset:0;opacity:.95}}@keyframes troop-delta{0%{opacity:0;transform:translateY(15px) scale(.98)}20%,65%{opacity:1}100%{opacity:0;transform:translateY(-30px)}}@keyframes claim-spark{0%{opacity:0;transform:translate(0,0)}15%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy))}}@keyframes flag-rise{from{opacity:0;transform:translateY(25px)}to{opacity:1;transform:translateY(0)}}
.army-stage{position:absolute;inset:0;z-index:6;pointer-events:none;overflow:hidden}.army-canvas{display:block;width:100%;height:100%}.squad-label{position:absolute;left:0;top:0;color:white;text-shadow:0 1px 3px #000;font-size:11px;font-weight:900;white-space:nowrap}.squad-label:not(:empty){background:#06233de6;border:1px solid #c9edf9;padding:4px 7px;border-radius:7px;margin-left:-35px;box-shadow:0 3px 8px #00142580}
.army-inspect{position:absolute;top:78px;left:50%;transform:translateX(-50%);z-index:7;display:flex;align-items:center;gap:12px;padding:9px 12px;border:1px solid var(--army-color);border-radius:12px;background:#07243fee;box-shadow:0 6px 20px #00122488;max-width:90%;pointer-events:auto}.army-inspect strong{font-size:14px}.army-inspect small{display:block;color:#c1daea;font-size:9px;margin-top:3px}.army-inspect button{background:#1b4161;border-radius:50%;width:26px;height:26px;font-size:17px}.is-battling .army-stage,.is-battling .army-inspect{visibility:hidden}
.board-announcement{position:absolute;top:75px;left:50%;transform:translateX(-50%);z-index:7;display:flex;gap:10px;align-items:center;background:#07213eee;border:1px solid var(--scene-color);border-left:4px solid var(--scene-color);border-radius:12px;padding:11px 17px;box-shadow:0 10px 30px #00132470;max-width:85%;pointer-events:none}.board-announcement small{display:block;font-size:7px;letter-spacing:1.4px;color:var(--scene-color)}.board-announcement strong{display:block;font-size:17px;margin:4px 0;line-height:1.15}.board-announcement span{display:block;font-size:10px;color:#c9e3f5}.board-announcement.arrive{animation:scene-arrive .45s ease-out both}@keyframes scene-arrive{from{opacity:0;transform:translate(-50%,-12px)}to{opacity:1;transform:translate(-50%,0)}}
#victoryDialog[open] #winnerAvatar{animation:victory-arrive 1s cubic-bezier(.15,.8,.3,1) both}#victoryDialog[open] .score-row{animation:scene-arrive .6s ease-out both;transform:none!important}@keyframes victory-arrive{from{opacity:0;transform:translateY(22px) scale(.7)}to{opacity:1;transform:none}}
@media(max-width:750px){.army-inspect{top:85px;padding:7px 9px}.army-inspect strong{font-size:12px}.army-inspect small{font-size:8px}.board-announcement{top:82px;padding:8px 10px;gap:7px;max-width:92%}.board-announcement strong{font-size:13px}.board-announcement span{font-size:8px}.board-announcement .avatar{width:28px;height:28px}}

.card-explainer{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:15px 0 22px}.card-explainer article{padding:12px;background:#143854;border:1px solid #32608a;border-radius:10px}.card-explainer b{color:#ffe17c;font-size:12px}.card-explainer p{font-size:10px;color:#c2def2;line-height:1.5;margin-bottom:0}@media(max-width:600px){.card-explainer{grid-template-columns:1fr;gap:6px}.card-explainer article{padding:9px}.card-explainer p{margin:5px 0 0}}

.map-shell{background:radial-gradient(ellipse at 50% 45%,#159fcb,#075181)}.sea-route{stroke:#e0fbff;stroke-width:3;stroke-dasharray:4 7;opacity:.9}.water-ripples{animation:water-shimmer 9s ease-in-out infinite alternate;pointer-events:none}@keyframes water-shimmer{from{opacity:.45}to{opacity:1}}@media(prefers-reduced-motion:reduce){.water-ripples{animation:none}}
