:root{
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  color:#d8dddc;
  background:#171b1d;
  font-synthesis:none;
  --panel:#202728;
  --panel-deep:#1b2122;
  --line:#414949;
  --muted:#8f9a98;
}
*{box-sizing:border-box}
body{margin:0;min-width:0;min-height:100vh;background:radial-gradient(circle at 50% 5%,#2b3232 0,#1c2223 42%,#141819 100%);overflow:hidden}
button{font:inherit}
button:focus-visible{outline:2px solid #c7d8d4;outline-offset:2px}

.topbar{height:68px;display:grid;grid-template-columns:1.25fr 1fr 1.05fr;align-items:center;padding:0 24px;background:#192021;border-bottom:1px solid #3b4343;box-shadow:0 8px 24px #0005;position:relative;z-index:3}
.brand{display:flex;gap:11px;align-items:center;min-width:0}.brand-mark{display:grid;place-items:center;width:34px;height:34px;border:1px solid #7b8787;border-radius:2px;font:700 18px Georgia,serif;color:#e4e0d3;background:#22292a}.brand div{display:grid;gap:2px;min-width:0}.brand strong{font-family:Georgia,serif;letter-spacing:.14em;font-size:17px}.brand span,.map-toolbar span,.selection-block span,.panel-block p,footer{color:var(--muted);font-size:11px}.turn-strip,.resource-strip{display:flex;justify-content:center;gap:8px;align-items:center}.turn-strip span,.resource-strip span,.menu-button{padding:7px 10px;border:1px solid #3b4444;background:#222a2b;border-radius:2px;font-size:11px;letter-spacing:.075em;color:#d6dcda;white-space:nowrap}.turn-strip span:nth-child(2){background:#4d5b63;color:#eef0ec;border-color:#66737a}.resource-strip{justify-content:flex-end}.menu-button{cursor:pointer;background:#1d2425;color:#bfc9c6}

.workspace{height:calc(100vh - 102px);min-height:590px;display:grid;grid-template-columns:minmax(0,1fr) 244px;gap:13px;padding:13px;transition:grid-template-columns .18s ease}.workspace.panel-collapsed{grid-template-columns:minmax(0,1fr) 0}.panel-collapsed .side-panel{display:none}
.map-card,.side-panel{background:var(--panel);border:1px solid var(--line);box-shadow:0 10px 35px #0005}.map-card{display:grid;grid-template-rows:52px minmax(0,1fr);overflow:hidden;min-width:0}.map-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:0 13px 0 17px;border-bottom:1px solid var(--line);background:#252d2e}.map-toolbar>div{display:grid;gap:3px;min-width:0}.map-toolbar strong{font-family:Georgia,serif;font-size:13px;letter-spacing:.04em}.map-toolbar span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.debug-toggle{border:1px solid #596362;background:#1b2122;color:#c4ccca;border-radius:2px;padding:8px 10px;font-size:11px;cursor:pointer;white-space:nowrap}.debug-toggle strong{font-family:inherit;color:#939f9d}.debug-toggle.on{border-color:#8aa9a2;background:#293835}.debug-toggle.on strong{color:#c4e5dc}

.map-wrap{width:100%;height:100%;min-height:0;background:#bbb393;position:relative;overflow:hidden;touch-action:none;cursor:grab}.map-wrap:active{cursor:grabbing}.map-wrap:after{content:"";position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(#30332b20 .55px,transparent .72px);background-size:4px 4px;mix-blend-mode:multiply;opacity:.32}#eastfront-map{display:block;width:100%;height:100%;user-select:none;-webkit-user-select:none;touch-action:none;will-change:transform}

/* Terrain: all cell geometry still comes from canonical hexPolygon(). */
.terrain{stroke:#726d59;stroke-width:.85;vector-effect:non-scaling-stroke}.terrain-plain{fill:#b8b18f}.terrain-forest{fill:#84906e}.terrain-city{fill:#9d9682}.terrain-marsh{fill:#8ea29b}.terrain-hill{fill:#b19872}.terrain-detail{pointer-events:none;opacity:.61}.forest-detail{fill:#52644d;stroke:#40513f;stroke-width:.85}.forest-detail .tree-trunk{fill:none;stroke:#43503e;stroke-width:1.2}.city-detail{fill:#68675c;stroke:#54544c;stroke-width:.9}.marsh-detail{fill:none;stroke:#607970;stroke-width:1.45;stroke-linecap:round}.hill-detail{fill:none;stroke:#7b6549;stroke-width:1.4;stroke-linecap:round}

/* Infrastructure endpoints remain canonical center-to-center/shared-edge geometry. */
.road-underlay{stroke:#5e5749;stroke-width:7.2;stroke-linecap:round;opacity:.62}.road-center{stroke:#9a8c6c;stroke-width:3.7;stroke-linecap:round;opacity:.96}.rail-underlay{stroke:#c0b79b;stroke-width:5.4;stroke-linecap:round;opacity:.68}.rail-base{stroke:#474842;stroke-width:2.25;stroke-linecap:round}.rail-sleeper{stroke:#454640;stroke-width:1.35}.river-bank{stroke:#59767b;stroke-width:7.3;stroke-linecap:round;stroke-linejoin:round;opacity:.78}.river-water{stroke:#82aeb5;stroke-width:4.5;stroke-linecap:round;stroke-linejoin:round}.bridge-shadow{stroke:#49483f;stroke-width:10.2;stroke-linecap:butt}.bridge-deck{stroke:#d0c49f;stroke-width:7.1;stroke-linecap:butt}.bridge-rail{stroke:#5a584d;stroke-width:1.3;stroke-linecap:butt}

/* Exact base polygons; visual hierarchy is intentionally restrained. */
.overlay{vector-effect:non-scaling-stroke}.reachable{fill:#7998a1;fill-opacity:.18;stroke:#c3d7d8;stroke-width:1.2;cursor:pointer}.reachable:focus-visible{stroke:#f4fbf9;stroke-width:2.4;outline:none}.zoc{fill:#6f3d3a;fill-opacity:.055;stroke:#743a37;stroke-width:1.9;stroke-dasharray:5 4;pointer-events:none}.planned-path{fill:none;stroke:#e0e7e4;stroke-width:2.8;stroke-dasharray:6 5;stroke-linecap:round;stroke-linejoin:round;opacity:.9;pointer-events:none}.path-node{fill:#e6ebe7;stroke:#60777a;stroke-width:1.8;pointer-events:none}.path-node-core{fill:#647a7e;pointer-events:none}.destination-node{fill:#ead482;stroke:#665d3b}.destination-hex{fill:#e6ce73;fill-opacity:.075;stroke:#d9c369;stroke-width:1.7;stroke-dasharray:3 4;pointer-events:none}.attack-target-base{fill:#d4a955;fill-opacity:.035;stroke:#b88f42;stroke-width:1.1;stroke-dasharray:2 5;pointer-events:none}.target-bracket{stroke:#e0bb68;stroke-width:3.1;stroke-linecap:square;pointer-events:none;vector-effect:non-scaling-stroke}

/* Touch expansion is transparent and sits below visible counters. */
.unit-hit-area{fill:#fff;fill-opacity:.001;stroke:none;pointer-events:all;cursor:pointer}.counter-visual{cursor:pointer;filter:url(#counterShadow);color:#172022;outline:none}.counter-face{transform-box:fill-box;transform-origin:center;transition:transform .1s ease}.counter-body{stroke:#2f393b;stroke-width:1.45}.counter.german .counter-body{fill:#798993}.counter.soviet .counter-body{fill:#9b6b61}.counter.stack-back{opacity:.97}.counter.selected{filter:url(#selectedShadow)}.counter.selected .counter-body{stroke:#e8e4d5;stroke-width:2.6}.counter-visual:focus-visible .counter-body{stroke:#d4e8e4;stroke-width:2.6}.counter-top-rule{fill:none;stroke:#d7dbd4;stroke-width:.7;opacity:.3}.unit-symbol{fill:none;stroke:currentColor;stroke-width:2.05;stroke-linecap:square;stroke-linejoin:miter}.counter-stats{font-size:8.8px;font-weight:850;letter-spacing:.025em;fill:#182123}.stack-front .counter-stats,.stack-back .counter-stats{font-size:7.25px}.stats-rule{stroke:#263235;stroke-width:.75;opacity:.66}.damage-mark{font:900 11px/1 sans-serif;fill:#f0e4d5;paint-order:stroke;stroke:#41413b;stroke-width:.6}.at-label{font-size:10px;font-weight:900;fill:currentColor;stroke:none}.oos-icon{fill:none;stroke:#efe7d7;stroke-width:1.55;stroke-linecap:round;paint-order:stroke;filter:drop-shadow(0 1px .6px #0007)}.faction-mark circle{fill:#e9e5d8;fill-opacity:.80;stroke:#354044;stroke-width:.7}.faction-mark text{font-size:5.2px;font-weight:900;fill:#283235;stroke:none}.stack-badge circle{fill:#222c2e;stroke:#e0dccf;stroke-width:.8}.stack-badge text{font-size:6.3px;font-weight:850;fill:#f0ede3;stroke:none}

.side-panel{padding:11px;display:flex;flex-direction:column;gap:9px;overflow:auto;min-width:0}.panel-block{border:1px solid #3c4545;background:var(--panel-deep);padding:11px}.selection-block{display:grid;gap:4px}.selection-block strong{font:700 18px Georgia,serif;color:#e4e1d7}.selection-block span:not(.eyebrow){font-size:10px}.eyebrow{display:block;color:#84918f!important;font-size:9px!important;letter-spacing:.16em;margin-bottom:6px}.panel-block p{margin:0;line-height:1.5}.legend{display:grid;grid-template-columns:22px 1fr;align-items:center;gap:7px 9px;font-size:11px}.legend .eyebrow{grid-column:1/-1}.legend-swatch{display:block;width:20px;height:15px;border-radius:1px}.reachable-swatch{background:#7998a14a;border:1px solid #c3d7d8}.zoc-swatch{border:2px dashed #743a37}.target-swatch{position:relative;border:1px dotted #b88f42}.target-swatch:after{content:"";position:absolute;left:2px;top:2px;width:5px;height:5px;border-left:2px solid #e0bb68;border-top:2px solid #e0bb68}.legend-line{width:22px;height:0}.road-swatch{border-top:5px double #9a8c6c}.rail-swatch{border-top:3px dashed #55564f}.river-swatch{border-top:4px solid #82aeb5}.debug-key{display:none}.workspace.debug-active .debug-key{display:block}.assertions{margin-top:auto;display:grid;gap:4px;font-size:9px}.assertions>strong{font-size:12px;margin-bottom:4px}.assertions.pass>strong{color:#a4c7ad}.assertions.fail>strong{color:#d9a392}.assertions div{display:grid;grid-template-columns:14px 1fr;color:#909b99}.assertions div span{color:#9fc4a8}

/* Debug is always the top tactical layer. */
.debug-boundary{fill:none;stroke:#edf7f3;stroke-width:.75;stroke-dasharray:2 3;pointer-events:none}.debug-center{fill:#152929;stroke:#eef7f4;stroke-width:.8;pointer-events:none}.debug-label{font:6.3px ui-monospace,monospace;fill:#263a3a;paint-order:stroke;stroke:#e8dfc7;stroke-width:2px;pointer-events:none}.counter-anchor-debug{stroke:#fff0a8;stroke-width:1.05;fill:#6f5d1c;pointer-events:none}.debug-counter-bounds{fill:none;stroke:#fff;stroke-width:.8;stroke-dasharray:3 2;pointer-events:none}.debug-touch-bounds{fill:none;stroke:#42d6df;stroke-width:1;stroke-dasharray:4 3;pointer-events:none}.debug-stack-offset{stroke:#ffcf78;stroke-width:.8;stroke-dasharray:2 2;pointer-events:none}.debug-road-node{fill:#fbf0bd;stroke:#5b513f;stroke-width:1}.debug-rail-node{fill:#eee;stroke:#303333;stroke-width:1}.debug-river-edge{stroke:#27dbff;stroke-width:1.5;stroke-dasharray:2 2}.debug-bridge-crossing{fill:#ffec64;stroke:#4f4614;stroke-width:1.2}.debug-path-node{fill:none;stroke:#ff86dc;stroke-width:1.2;pointer-events:none}

footer{height:34px;display:flex;justify-content:space-between;align-items:center;padding:0 18px;background:#151a1b;border-top:1px solid #353c3d;letter-spacing:.025em}

@media(max-width:1100px){.workspace{grid-template-columns:minmax(0,1fr) 218px;gap:10px;padding:10px}.topbar{grid-template-columns:1.18fr .92fr 1fr;padding:0 17px}.turn-strip,.resource-strip{gap:5px}.turn-strip span,.resource-strip span,.menu-button{padding:7px 8px}.map-toolbar{padding-left:13px}.side-panel{padding:9px}.panel-block{padding:9px}}
@media(max-width:900px){.brand span{display:none}.resource-strip>span{display:none}.topbar{grid-template-columns:1fr 1.1fr auto}.workspace.panel-open{grid-template-columns:minmax(0,1fr) 205px}.map-toolbar span{display:none}}
@media(max-height:760px){.topbar{height:60px}.workspace{height:calc(100vh - 94px);min-height:545px}.map-card{grid-template-rows:46px minmax(0,1fr)}.side-panel{gap:6px}.panel-block{padding:8px}.assertions{font-size:8.3px}}

/* UI-003 real Core integration additions. Tactical geometry still comes from the locked SVG coordinate space. */
.terrain-rough{fill:#9a9277}.terrain-main-city{fill:#888174}.terrain-outer-city{fill:#958e7e}.terrain-lake{fill:#78969b}.capital-detail{stroke-width:1.15}.rough-detail{stroke:#6e624d}.lake-detail{fill:none;stroke:#52767c;stroke-width:1.3;opacity:.72}.river-major{stroke-width:6.2}.counter-id{font-size:4.7px;font-weight:800;fill:#e8e7df;opacity:.82}.unit-mini-label{font-size:6px;font-weight:900;fill:currentColor;stroke:none}.unit-letter-label{font-size:9px;font-weight:900;fill:currentColor;stroke:none}
.deployment-zone{fill:#91a7a4;fill-opacity:.10;stroke:#d3ded9;stroke-width:1;stroke-dasharray:3 4;cursor:pointer;vector-effect:non-scaling-stroke}.deployment-zone:focus-visible{stroke:#fff;stroke-width:2;outline:none}.move-option{vector-effect:non-scaling-stroke;cursor:pointer}.move-legal{fill:#789aa5;fill-opacity:.22;stroke:#d2e4e3;stroke-width:1.6}.move-illegal{fill:#8a5048;fill-opacity:.10;stroke:#7e4b46;stroke-width:1.3;stroke-dasharray:3 4}
.boot-screen,.privacy-gate{min-height:100vh;display:grid;place-items:center;background:#171c1d;color:#dfe3df;font:14px Inter,ui-sans-serif,system-ui,sans-serif}.boot-screen.error{color:#e1aaa0}.privacy-gate{padding:24px;background:radial-gradient(circle at 50% 35%,#2b3434,#151a1b 68%)}.privacy-card{width:min(520px,90vw);padding:32px;border:1px solid #46504f;background:#202728;box-shadow:0 20px 60px #0008;text-align:center}.privacy-card h1{margin:8px 0 10px;font:700 28px Georgia,serif;color:#e7e2d4}.privacy-card p{color:#aab4b1;line-height:1.6;margin:0 0 24px}.primary-action{width:100%;border:1px solid #71837f;background:#435552;color:#edf2ed;padding:11px 12px;border-radius:2px;font-weight:800;letter-spacing:.08em;cursor:pointer}.primary-action:disabled{opacity:.35;cursor:not-allowed}.status-message p{color:#d9cfb6}.deployment-panel{display:grid;min-height:0}.deployment-progress{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:8px}.deployment-progress strong{font:700 20px Georgia,serif;color:#e4e1d7}.deployment-progress span{font-size:9px;color:#8e9a97}.roster-list{display:grid;gap:4px;max-height:255px;overflow:auto;margin-bottom:9px;padding-right:3px}.roster-row{display:grid;grid-template-columns:1fr auto;gap:2px 6px;text-align:left;border:1px solid #3c4646;background:#1c2324;color:#d7dcda;padding:7px 8px;cursor:pointer}.roster-row small{grid-column:1;color:#84918f;font-size:8px}.roster-row b{grid-column:2;grid-row:1/3;align-self:center;font-size:7px;letter-spacing:.08em;color:#788985}.roster-row.placed b{color:#aac3ad}.roster-row.selected{border-color:#d8d4c6;background:#303b3b}.roster-row:disabled{cursor:not-allowed;opacity:.45}.privacy-note{margin-top:8px!important}.integration-debug{display:grid;gap:5px;font-size:9px}.integration-debug>div{display:grid;grid-template-columns:66px minmax(0,1fr);gap:6px}.integration-debug>div span{color:#768481}.integration-debug>div strong{font-size:8px;color:#b8c1be;overflow-wrap:anywhere}.integration-debug .ok{color:#9fc4a8}.integration-debug .bad{color:#d9a392}.viewer-buttons{display:grid;grid-template-columns:1fr 1fr;gap:6px}.mini-button{border:1px solid #465150;background:#232b2c;color:#9ca8a5;padding:6px;cursor:pointer}.mini-button.active{border-color:#a5b5b0;color:#e2e7e4;background:#34403f}.panel-block code{font-size:9px;color:#c8d7d3}

/* UI-004 non-combat turn-loop affordances. All tactical placement remains SVG/canonical geometry. */
.rail-hit-corridor{stroke:#fff;stroke-opacity:.001;stroke-width:18;pointer-events:stroke;cursor:pointer}
.rail-repair-highlight{stroke:#b6c4bd;stroke-width:5;stroke-opacity:0;pointer-events:none}.rail-repair-highlight.rail-active{stroke:#95b79d;stroke-opacity:.52}.rail-repair-highlight.rail-selected{stroke:#e5c46b;stroke-opacity:.96;stroke-width:7}
.movement-draft{stroke:#d9eced;stroke-width:3.4}.reinforcement-entry{fill:#9dc7b6;fill-opacity:.19;stroke:#d6eee4;stroke-width:1.6;stroke-dasharray:5 3;cursor:pointer;vector-effect:non-scaling-stroke}.recovery-base{fill:#c6d3a0;fill-opacity:.08;stroke:#b9c995;stroke-width:1.1;stroke-dasharray:2 5;pointer-events:none;vector-effect:non-scaling-stroke}
.entrench-icon{fill:none;stroke:#f0e7ce;stroke-width:1.25;stroke-linecap:round;opacity:.9}.phase-actions{display:grid;gap:7px}.secondary-action{width:100%;border:1px solid #4d5a58;background:#242d2e;color:#b8c4c0;padding:8px 9px;border-radius:2px;cursor:pointer}.secondary-action.active{border-color:#c9b76e;background:#3c3a2d;color:#efe4b4}.button-row{display:grid;grid-template-columns:1fr 1fr;gap:6px}.issue-list{display:grid;gap:4px;margin:6px 0;font-size:9px;color:#cda69d}.phase-metric{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:#899592}.phase-metric strong{color:#d6dcd9}.reinforcement-list{display:grid;gap:4px;max-height:180px;overflow:auto}.reinforcement-row{display:grid;grid-template-columns:1fr auto;border:1px solid #3f4948;background:#1c2324;color:#cbd2cf;padding:7px;text-align:left;cursor:pointer}.reinforcement-row.selected{border-color:#d6ca92;background:#34362e}.reinforcement-row small{grid-column:1/-1;color:#85908d;font-size:8px}.warning-note{color:#dec68d!important}.game-over-panel{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 50% 35%,#313838,#151919 68%);padding:24px}.game-over-card{width:min(560px,90vw);padding:36px;border:1px solid #59615f;background:#202728;text-align:center;box-shadow:0 25px 70px #0009}.game-over-card h1{font:700 38px Georgia,serif;color:#ebe5d5;margin:8px 0}.game-over-card p{color:#aeb7b4}.phase-pill{font-size:9px;color:#9fa9a6;text-transform:uppercase;letter-spacing:.08em}
/* UI-005 combat transaction prototype */
.combat-target-option{fill:rgba(210,164,72,.16);stroke:#c89a3c;stroke-width:2.2;stroke-dasharray:7 4;cursor:pointer}.combat-target-option.selected{fill:rgba(226,173,63,.3);stroke-width:3}.combat-attack-line{stroke:#e1c07a;stroke-width:2.4;stroke-dasharray:8 5;pointer-events:none}.combat-battle-target{fill:none;stroke:#f1d08a;stroke-width:2.7;stroke-dasharray:3 3;pointer-events:none}.retreat-option{fill:rgba(165,125,92,.18);stroke:#9c6948;stroke-width:2;stroke-dasharray:5 4;cursor:pointer}.retreat-draft-line{fill:none;stroke:#c58f68;stroke-width:3;stroke-dasharray:8 5}.breakthrough-option{fill:rgba(112,159,171,.13);stroke:#6f9fac;stroke-width:2;stroke-dasharray:5 4;cursor:pointer}.breakthrough-option.illegal{fill:rgba(145,69,59,.1);stroke:#95584f}.breakthrough-draft-line{fill:none;stroke:#91bcc6;stroke-width:3;stroke-dasharray:10 5}.schwerpunkt-target{fill:rgba(214,128,72,.13);stroke:#d5844d;stroke-width:2.4;stroke-dasharray:4 3;cursor:pointer}.schwerpunkt-target.selected{fill:rgba(214,128,72,.3);stroke-width:3}.combat-card{border:1px solid rgba(211,184,126,.25);background:rgba(30,35,38,.42);padding:10px;border-radius:6px;margin-top:8px}.combat-card h3{margin:0 0 6px;font-size:13px;letter-spacing:.05em}.combat-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px 8px;font-size:11px}.combat-grid span{opacity:.72}.combat-grid strong{text-align:right}.combat-unit-list{display:flex;flex-wrap:wrap;gap:5px;margin:7px 0}.combat-unit-list button{font-size:10px}.pending-lock{border-left:3px solid #c89a3c;padding-left:8px}.battle-history{max-height:160px;overflow:auto}.battle-history-row{display:grid;grid-template-columns:1fr auto;gap:3px 8px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.07);font-size:10px}.dice-box{display:flex;gap:8px;align-items:center;margin:8px 0}.die{display:grid;place-items:center;width:34px;height:34px;border:1px solid rgba(255,255,255,.35);border-radius:5px;font-weight:700;background:rgba(255,255,255,.05)}.modifier-list{font-size:10px;display:grid;grid-template-columns:1fr auto;gap:3px 10px}.combat-handoff-note{color:#e4c680}.loss-draft{font-family:ui-monospace,monospace;font-size:10px;word-break:break-all;background:rgba(0,0,0,.18);padding:6px;border-radius:4px}
/* UI-006 P4R3 production terrain renderer. Geometry remains canonical. */
.renderer-controls{display:flex;gap:7px;align-items:center}.production-toggle{min-width:92px}.prod-ground-substrate{opacity:.98}.production-terrain-cell{pointer-events:none}.production-grid{fill:none;stroke:#655f4e;stroke-width:.75;stroke-opacity:.64;vector-effect:non-scaling-stroke;pointer-events:none}.prod-road,.prod-rail-ballast,.prod-rail-sleep,.prod-rail-pair,.prod-river-bank,.prod-river-water,.prod-bridge{pointer-events:none}.prod-road{filter:drop-shadow(0 .7px .6px #3a332660)}.prod-river-water{filter:drop-shadow(0 1px .5px #344f5860)}.prod-bridge{filter:drop-shadow(0 1.2px .7px #28251d88)}
#eastfront-map[data-renderer-mode="production"] #counter-layer .counter-body{filter:drop-shadow(0 1px .8px #0005)}
#eastfront-map[data-renderer-mode="production"] .deployment-zone{fill-opacity:.12;stroke-width:1.2}
#eastfront-map[data-renderer-mode="production"] .combat-target-option,#eastfront-map[data-renderer-mode="production"] .move-option{paint-order:stroke fill}

/* UI-008 product shell / Web Preview */
.preview-home,.preview-state{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 22%,#2f3837 0,#1b2223 44%,#111617 100%);color:#dfe3df}
.preview-home-card,.preview-state-card{width:min(560px,92vw);border:1px solid #4a5654;background:linear-gradient(180deg,#222b2b,#192020);box-shadow:0 28px 80px #0008;padding:42px 44px;text-align:center}
.preview-brand-mark{width:58px;height:58px;margin:0 auto 18px;display:grid;place-items:center;border:1px solid #82908c;background:#263130;color:#eee8d8;font:700 30px Georgia,serif}
.preview-kicker{display:block;color:#8f9e9a;font-size:11px;letter-spacing:.22em;text-transform:uppercase}.preview-home h1,.preview-state h1{font:700 clamp(30px,5vw,48px) Georgia,serif;letter-spacing:.035em;color:#eee9dc;margin:12px 0}.preview-home-copy,.preview-state-card p{color:#aeb8b5;line-height:1.65;margin:0 auto 24px;max-width:430px}.preview-new-game{min-width:220px;border:1px solid #81928e;background:#415451;color:#f1f3ec;padding:13px 20px;font-weight:800;letter-spacing:.12em;cursor:pointer}.preview-new-game:hover{background:#4b605c}.preview-about{margin:22px auto 0;max-width:420px;color:#8f9a98;font-size:12px;text-align:left;border-top:1px solid #343e3d;padding-top:14px}.preview-about summary{cursor:pointer;text-align:center;color:#bcc6c2}.preview-about p{margin:10px 0 0;line-height:1.55}.preview-home-version{margin-top:24px;border:0;background:none;height:auto;padding:0;justify-content:center;font-size:10px;letter-spacing:.1em}.preview-loading .preview-state-card{border-color:#45514f}.preview-fatal .preview-state-card{border-color:#715752}.preview-fatal h1{font-size:34px}.mobile-advisory,.mobile-game-advisory{border:1px solid #7f6e4f;background:#332f25;color:#e7d7ad;padding:10px 12px;font-size:12px;line-height:1.45}.mobile-game-advisory{position:fixed;left:10px;right:10px;top:10px;z-index:20;text-align:center;box-shadow:0 8px 24px #0008}.game-over-restart{margin-top:22px}.map-controls{display:flex!important;grid-auto-flow:column;align-items:center;justify-content:flex-end;gap:8px}.zoom-controls,.developer-controls{display:flex;align-items:center;gap:5px}.map-control-button{min-width:38px;min-height:38px;border:1px solid #596362;background:#1b2122;color:#d7dedb;border-radius:2px;cursor:pointer;font-weight:800}.map-control-button:hover{background:#2b3635}.fit-button{font-size:9px;letter-spacing:.08em}.zoom-controls span{min-width:44px;text-align:center;font-size:9px!important;color:#aeb9b6!important}.resource-strip .menu-button{min-height:38px}

@media(max-width:1100px){.map-toolbar{gap:8px}.map-controls{gap:5px}.map-control-button{min-width:42px;min-height:42px}.resource-strip .menu-button{min-height:42px}.side-panel{width:auto}.roster-row,.secondary-action,.primary-action,.mini-button,.reinforcement-row{min-height:42px}}
@media(max-width:760px){body{overflow:auto}.preview-home,.preview-state{padding:14px}.preview-home-card,.preview-state-card{padding:30px 20px}.topbar{height:auto;min-height:70px;grid-template-columns:1fr auto;padding:8px 10px;gap:8px}.turn-strip{grid-column:1/-1;order:3;justify-content:flex-start;overflow:auto}.resource-strip{gap:4px}.workspace,.workspace.panel-open{height:calc(100vh - 124px);min-height:520px;grid-template-columns:minmax(0,1fr);padding:6px}.workspace.panel-open .side-panel{position:absolute;right:8px;top:128px;bottom:38px;width:min(270px,80vw);z-index:10;box-shadow:0 15px 45px #000b}.map-card{grid-template-rows:auto minmax(0,1fr)}.map-toolbar{min-height:54px;padding:6px 8px}.map-toolbar>div:first-child{display:none}.map-controls{width:100%;justify-content:flex-end}.developer-controls{display:none}.mobile-game-advisory{top:auto;bottom:8px}.brand span{display:block!important}.brand strong{font-size:14px}.resource-strip>span{display:none}footer{display:none}}

/* UI-009R1 mobile/tablet compatibility: one cached production terrain surface below live SVG interaction layers. */
.terrain-surface{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:center;display:block;pointer-events:none;user-select:none;-webkit-user-select:none;will-change:transform;z-index:0}
#eastfront-map{position:relative;z-index:1;background:transparent}

/* UI Visual Pass A — original slate / brass command interface.
   Presentation only: no terrain, counter geometry, or event targeting changes. */
:root{--panel:#17202b;--panel-deep:#111923;--line:#394553;--muted:#aab5c3;--ivory:#f0e9dc;--brass:#bca071;--ice:#bed9e9;color:var(--ivory);background:#0b1018}
body{background:radial-gradient(ellipse at 35% 0,#223043,#0b1018 65%)}
.topbar{background:linear-gradient(180deg,#202c3a,#101822);border-bottom:1px solid #8b7958;box-shadow:0 2px 0 #080d15,0 8px 24px #0006}
.brand-mark,.preview-brand-mark{color:#e1c795;background:linear-gradient(145deg,#293748,#111922);border:1px solid var(--brass);box-shadow:inset 0 0 0 3px #111923,inset 0 0 0 4px #576070,0 3px 10px #0006;border-radius:50%}
.brand strong{color:var(--ivory);letter-spacing:.18em}.brand span{color:#a2aebd}
.turn-strip span,.resource-strip>span{background:#0d1520;border-color:#344152;border-radius:3px;color:#b9c5d2;letter-spacing:.055em}
.turn-strip strong,.resource-strip strong{font-variant-numeric:tabular-nums;color:var(--ivory);font-size:15px;margin-left:4px}
.turn-strip span:nth-child(2){background:#233345;color:#d9e6ef;border-color:#586f83}
.turn-strip span:last-child{border-bottom:2px solid var(--brass);color:#e3cc9f}
.map-card,.side-panel{border-color:#44505e;border-radius:5px;box-shadow:0 10px 28px #0006,inset 0 1px #ffffff0c}
.map-toolbar{background:linear-gradient(180deg,#202c3a,#17212d);border-color:#424c58}.map-toolbar strong{color:#e6ddcd;letter-spacing:.06em}
.side-panel{background:linear-gradient(160deg,#1a2532f5,#101822fa);scrollbar-color:#647184 #111923;scrollbar-width:thin}
.panel-block{background:linear-gradient(145deg,#1c2733,#111a25);border:1px solid #3d4958;border-radius:4px;padding:12px;box-shadow:inset 0 1px #ffffff07,0 3px 9px #0002}
.eyebrow{color:#c0aa82!important;letter-spacing:.13em;font-size:10px!important}.panel-block p{color:#b8c3d0;line-height:1.65}
.selection-block{border-top:2px solid var(--brass)}.selection-block strong{color:#f3ead8;font-size:20px}.selection-block span:not(.eyebrow){color:#b7c6d6;font-size:11px}
.phase-metric{padding:7px 0;border-bottom:1px solid #ffffff0a;color:#b0bdcc;font-size:11px}.phase-metric strong{color:#f1e6d3;font-variant-numeric:tabular-nums}
.phase-pill{display:inline-block;padding:5px 8px;background:#283748;border:1px solid #526275;border-radius:3px;color:#dec79d}
button{touch-action:manipulation;transition:background-color .12s,border-color .12s,box-shadow .12s;color:var(--ivory)}
.menu-button,.debug-toggle,.mini-button,.secondary-action,.map-control-button{background:linear-gradient(180deg,#273545,#19232f);border:1px solid #566477;color:#dce4eb;border-radius:3px;box-shadow:inset 0 1px #ffffff0b,0 2px 3px #0003;min-height:40px}
.primary-action,.preview-new-game{background:linear-gradient(180deg,#514636,#342e27);border:1px solid #c1a16b;color:#fff0d2;border-radius:3px;min-height:48px;box-shadow:inset 0 1px #f9e3b433,inset 0 -3px #14141470,0 4px 12px #0004;letter-spacing:.13em}
.primary-action{margin-top:4px}.preview-new-game{min-width:240px}
button:focus-visible,summary:focus-visible{outline:2px solid #c9e6ff;outline-offset:3px}
@media(hover:hover){button:not(:disabled):hover{border-color:#c5b18a;box-shadow:inset 0 1px #ffffff18,0 0 0 1px #c4aa7425}.preview-new-game:hover,.primary-action:hover{background:#615039}.roster-row:not(:disabled):hover{background:#253749}}
button:not(:disabled):active{box-shadow:inset 0 3px 8px #0009;border-color:#f2d8a5;background:#33445a}
button:disabled,.primary-action:disabled{opacity:1;color:#83909e;border-color:#35404d;background:#18212b;box-shadow:none;cursor:not-allowed}
.mini-button.active,.secondary-action.active,.debug-toggle.on{background:#2b3d50;border-color:#bba376;color:#fff0d0;box-shadow:inset 3px 0 #c5a777}.debug-toggle.on strong{color:#e2d2ad}
.roster-list{gap:7px;max-height:310px;scrollbar-color:#62748a #111923;scrollbar-width:thin}
.roster-row{grid-template-columns:36px minmax(0,1fr) auto;gap:4px 8px;min-height:62px;padding:9px;background:#141e2a;border:1px solid #3e4e61;border-radius:3px;color:#e6e9ec;align-items:center}
.roster-row>span:not(.roster-emblem){grid-column:2;font-size:12px;font-weight:650;overflow-wrap:anywhere}.roster-row small{grid-column:2;font-size:10px;color:#aebed0;line-height:1.45;overflow-wrap:anywhere}
.roster-row b{grid-column:3;grid-row:1/3;color:#d4b579;font-size:8px;letter-spacing:.04em}.roster-row.placed b{color:#adcadd}.roster-row.placed{border-left:3px solid #7899b1}
.roster-row.selected{background:#2b3e52;border-color:#e0c38f;box-shadow:inset 3px 0 #e0c38f,0 0 0 1px #bca07130}.roster-row.selected b{color:#fff0d2}
.roster-emblem{grid-column:1;grid-row:1/3;display:grid;place-items:center;width:34px;height:34px;border:1px solid #8c806a;border-radius:4px;background:linear-gradient(145deg,#314052,#151f2b);color:#ead5ad;font-size:18px;font-weight:700;box-shadow:inset 0 0 0 2px #111923}
.roster-emblem svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.5}.roster-emblem text{fill:currentColor;stroke:none;font:700 10px system-ui}
.deployment-progress{padding:4px 0 10px;border-bottom:1px solid #485362}.deployment-progress strong{color:#f2e4c9;font-size:24px;font-variant-numeric:tabular-nums}.deployment-progress span{color:#b5c1cf;font-size:11px}
.reinforcement-row{background:#182331;border-color:#47586b;color:#e3e9ef;border-radius:3px}.reinforcement-row small{color:#afbdcf;font-size:10px}.reinforcement-row.selected{background:#2c3e50;border-color:#d8bb86}
.combat-card{background:#101923;border-color:#645b4b;border-radius:4px}.combat-card h3{color:#e5cfaa}.die{background:#263446;color:#f1e1c3;border-color:#8c7957;box-shadow:inset 0 1px #ffffff20,0 3px 8px #0005}.issue-list{color:#dcb2ab}.warning-note,.combat-handoff-note{color:#e7c991!important}.status-message{border-left:3px solid #b9a073}.status-message p{color:#eee0c5}
.preview-home,.preview-state,.privacy-gate,.game-over-panel{background:radial-gradient(ellipse at 25% 15%,#2b3e55 0,transparent 55%),radial-gradient(ellipse at 90% 90%,#302b24,transparent 45%),#0c131d;color:var(--ivory)}
.preview-home-card,.preview-state-card,.privacy-card,.game-over-card{background:linear-gradient(150deg,#253242f5,#111a27fa 70%);border:1px solid #8b7858;border-radius:5px;box-shadow:inset 0 0 0 5px #111923,inset 0 0 0 6px #67717a55,0 30px 90px #0009;padding:48px 40px}
.preview-home h1,.preview-state h1,.privacy-card h1,.game-over-card h1{color:#f4e8d0;font-weight:400;letter-spacing:.09em;text-shadow:0 2px 10px #0005}.preview-kicker{color:#cfb98e;letter-spacing:.25em}.preview-home-copy,.preview-state-card p,.privacy-card p,.game-over-card p{color:#b9c6d5}.preview-about{color:#aebaca;border-color:#516071}.preview-about summary{color:#e0d1b7;min-height:36px}.preview-home-version{color:#9aabbe}
.preview-brand-mark{width:68px;height:68px;margin-bottom:26px}.preview-loading .preview-state-card{border-color:#8b7858}.preview-fatal .preview-state-card{border-color:#925e5b}.boot-screen{background:#101925;color:#e8dece}
.mobile-advisory,.mobile-game-advisory{background:#292a2d;border-color:#8e7958;color:#ead5ac;border-radius:4px}
footer{background:#0c131c;border-color:#344150;color:#97a7ba}
.deployment-zone{fill:#a6cbe4;stroke:#cae6f6}.deployment-zone:hover{fill-opacity:.24;stroke:#f3e5c7;stroke-width:2}.move-legal:hover,.reachable:hover{fill-opacity:.32;stroke:#f2e9cf}.deployment-zone:focus-visible,.move-option:focus-visible{stroke:#f4e2b7;stroke-width:2.4;outline:none}
@media(pointer:coarse){.menu-button,.mini-button,.secondary-action,.map-control-button,.debug-toggle{min-height:46px;min-width:44px}.roster-row{min-height:68px}.roster-list{gap:8px}.primary-action{min-height:50px}}
@media(min-width:761px){.workspace{grid-template-columns:minmax(0,1fr) 276px}.workspace.panel-collapsed{grid-template-columns:minmax(0,1fr) 0}}
@media(min-width:761px) and (max-width:1100px){.workspace.panel-open{grid-template-columns:minmax(0,1fr) 252px}.topbar{padding:0 12px}.turn-strip span,.resource-strip span{padding:7px 6px;letter-spacing:0}.brand strong{font-size:15px}}
@media(max-width:760px){.preview-home-card,.preview-state-card,.privacy-card,.game-over-card{padding:34px 24px}.workspace.panel-open .side-panel{width:min(300px,85vw)}.turn-strip span{font-size:11px}.resource-strip>span{display:inline-flex;align-items:center;padding:6px;font-size:10px}.resource-strip{flex-wrap:wrap;justify-content:flex-end}.topbar{grid-template-columns:minmax(110px,1fr) minmax(0,1.5fr)}.brand span{font-size:9px}.roster-row small{font-size:11px}.map-control-button{min-height:44px;min-width:44px}}
@media(prefers-reduced-motion:reduce){button,.workspace{transition:none}}

/* Visual Pass B: campaign hierarchy and commander dossier. */
.topbar{height:88px;grid-template-columns:minmax(160px,.8fr) minmax(360px,1.8fr) auto;padding:0 22px;gap:22px}
.brand strong{font-size:20px;font-weight:400}.brand-mark{width:42px;height:42px}.brand span{font-size:9px;letter-spacing:.12em}
.command-hud{justify-content:flex-start;gap:24px;border-left:1px solid #bc9f7140;padding-left:24px}
.command-hud span{padding:0;border:0;background:none;border-radius:0;white-space:normal;letter-spacing:.1em}
.campaign-heading{min-width:0}.campaign-heading .eyebrow{margin-bottom:5px;font-size:9px!important}.campaign-heading>strong{font:400 19px Georgia,serif;color:#eee2cc}
.campaign-turn{border-left:1px solid #ffffff17;padding-left:20px;display:grid;gap:2px}.campaign-turn>span{font-size:9px;color:#a4b3c3}.campaign-turn>strong{font:400 30px Georgia,serif;color:#eee2cc;margin:0}
.campaign-side{display:flex;align-items:center;gap:9px}.campaign-side strong{font-size:10px;letter-spacing:.12em;color:#c6d3e0}
.command-hud .faction-seal{display:grid;place-items:center;width:34px;height:40px;border:1px solid #8298ad;background:#263748;font:18px Georgia,serif;clip-path:polygon(0 0,100% 0,100% 80%,50% 100%,0 80%)}
.campaign-side[data-side="SOVIET"] .faction-seal{background:#4a3033;border-color:#a47b70;color:#e4c7b9}
.resource-strip{gap:10px}.resource-strip>span{background:none;border:0;border-left:1px solid #ffffff18;padding:4px 10px;font-size:10px}.resource-strip>span strong{display:block;font-size:20px;margin:2px 0 0;color:#ecd9af}
.workspace{height:calc(100vh - 122px);min-height:0;gap:12px;padding:12px}.side-panel{gap:12px;padding:12px;background:linear-gradient(115deg,#22303b,#101924 65%)}
.command-title{padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid #ac92615c;font-size:11px!important;letter-spacing:.2em}
.unit-dossier{display:flex;align-items:center;gap:12px}.unit-dossier .roster-emblem{width:56px;height:56px;flex-shrink:0;border-radius:50%}.unit-dossier .roster-emblem svg{width:38px;height:38px}.unit-dossier>div{min-width:0;display:grid;gap:4px}.unit-dossier strong{font:17px Georgia,serif;overflow-wrap:anywhere}.unit-dossier .eyebrow{margin:0;color:#e2d6c1!important}
.unit-readings{display:grid;grid-template-columns:repeat(3,1fr);margin:18px 0 12px;padding:12px 0;border-block:1px solid #ffffff12}.unit-readings div{padding:0 8px;text-align:center;border-right:1px solid #ffffff14}.unit-readings div:last-child{border:0}.unit-readings dt{font-size:10px;color:#b3c0ce}.unit-readings dd{margin:5px 0 0;font-size:24px;font-weight:500;color:#f1dfb9;font-variant-numeric:tabular-nums}
.unit-status{display:grid;grid-template-columns:auto 1fr;gap:9px;font-size:11px}.unit-status strong{text-align:right;font:500 11px system-ui;color:#dce6eb}.command-empty{display:flex;gap:12px;align-items:center}.command-reticle{font:34px Georgia!important;color:#baa074!important}
.deployment-steps{display:flex;list-style:none;padding:0;gap:8px;counter-reset:step;margin:8px 0 12px}.deployment-steps li{counter-increment:step;flex:1;font-size:10px;color:#8f9faf;line-height:1.5}.deployment-steps li:before{content:counter(step,decimal-leading-zero);display:block;font:18px Georgia;color:#8090a0;border-top:2px solid #394858;padding-top:7px;margin-bottom:5px}.deployment-steps .current{color:#f1e3c8}.deployment-steps .current:before{color:#e9cc8d;border-color:#d5b374}.deployment-steps .done:before{color:#bad5e8;border-color:#88a8bf}
.deployment-guidance{padding:10px 12px;background:#0f1b28;border-left:2px solid #b69a68;margin-bottom:12px!important;font-size:12px!important}
.roster-row{grid-template-columns:46px minmax(0,1fr) auto;min-height:76px;padding:10px;gap:5px 10px}.roster-emblem{width:44px;height:44px;border-radius:50%}.roster-emblem svg{width:32px;height:32px}.roster-row>span:not(.roster-emblem){font:16px Georgia,serif;letter-spacing:.02em}.roster-row small{line-height:1.6}.roster-row.selected .roster-emblem{border-color:#e6c88c;background:#3b4650;box-shadow:0 0 0 3px #d9b87515,inset 0 0 0 2px #111923}.roster-row:active{box-shadow:inset 0 3px 10px #0009}.roster-list{max-height:34vh}
.deployment-locations{border:1px solid #5a6e81;border-radius:3px;margin:4px 0 12px;background:#142130}.deployment-locations summary{cursor:pointer;min-height:48px;padding:14px;font-size:12px;color:#e5d4af}.deployment-locations p{padding:0 12px 10px;font-size:11px}.location-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;padding:8px;max-height:230px;overflow:auto}.location-button{min-height:48px;min-width:44px;border:1px solid #718ba2;background:#243a4c;color:#e7eef4;border-radius:3px;font:12px ui-monospace,monospace}.location-button:focus-visible{outline-offset:0}
#ready-button{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:68px;padding:12px 16px;text-align:left;border:1px solid #c8ab75;border-bottom:3px solid #8d7042;background:linear-gradient(110deg,#554a37,#2b2925);box-shadow:inset 0 0 0 3px #181c2280,0 6px 16px #0005;letter-spacing:.04em;flex-shrink:0}
.advance-label{font:19px Georgia,serif;color:#f6e5bd}.advance-label small{display:block;font:9px system-ui;letter-spacing:.1em;margin-bottom:6px;color:#c9bda5}.advance-arrow{display:grid;place-items:center;border:1px solid #bb9c61;border-radius:50%;width:36px;height:36px;font:30px Georgia;color:#f0d59b}#ready-button:disabled{opacity:.5}#ready-button:not(:disabled):active{background:#243749;border-color:#d9ecf7;box-shadow:inset 0 4px 12px #000b}
.preview-home-card{width:min(690px,92vw);padding:64px 52px;text-align:left;position:relative}.preview-home-card:before{content:"";position:absolute;top:20px;left:20px;right:20px;height:1px;background:linear-gradient(90deg,#c1a16b,transparent);pointer-events:none}.preview-home .preview-brand-mark{margin:0 0 32px;width:76px;height:76px}.preview-home h1{font-size:clamp(34px,5vw,54px);max-width:480px;line-height:1.12;margin:20px 0}.preview-home-copy{margin:0 0 30px;max-width:390px}.preview-new-game{min-height:58px;padding:16px 30px;text-align:left}.preview-about{margin:28px 0 0}.preview-about summary{text-align:left}.preview-home-version{justify-content:flex-start}
@media(min-width:761px){.workspace.panel-open{grid-template-columns:minmax(0,1fr) 300px}}
@media(max-width:1150px){.topbar{gap:12px;padding:0 12px;grid-template-columns:150px minmax(280px,1fr) auto}.command-hud{gap:14px;padding-left:14px}.campaign-heading>strong{font-size:16px}.campaign-side strong{display:none}.resource-strip{gap:4px}.resource-strip>span{padding:4px 6px}.menu-button{font-size:10px;padding:8px}.workspace.panel-open{grid-template-columns:minmax(0,1fr) 280px}}
@media(max-width:900px){.topbar{height:auto;min-height:112px;grid-template-columns:1fr auto;padding:10px 12px}.command-hud{grid-row:2;grid-column:1/-1;border-left:0;border-top:1px solid #ffffff12;padding:10px 0 0;justify-content:space-between;overflow:visible}.campaign-heading>strong{font-size:17px}.campaign-side strong{display:block}.campaign-turn{display:flex;align-items:baseline;gap:8px}.campaign-turn>strong{font-size:24px}.workspace{height:calc(100dvh - 150px)}.resource-strip>span{display:block}.brand span{display:none!important}}
@media(max-width:760px){.workspace,.workspace.panel-open{grid-template-columns:minmax(0,1fr);height:calc(100dvh - 140px);min-height:440px}.workspace.panel-open .side-panel{top:138px;bottom:10px;width:min(320px,88vw)}.campaign-side strong{font-size:9px}.campaign-heading>strong{font-size:15px}.preview-home-card{padding:40px 28px}.preview-home h1{font-size:36px}.roster-list{max-height:30vh}.location-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.resource-strip .menu-button{min-height:44px}.campaign-heading .eyebrow{font-size:8px!important}}

/* B1: terrain cards and touch-first deployment confirmation. */
.location-grid{grid-template-columns:repeat(2,minmax(0,1fr));max-height:240px;gap:8px;scroll-padding:6px}
.location-card{display:grid;gap:5px;min-height:108px;padding:12px;text-align:left;align-content:start;background:linear-gradient(145deg,#2a3c4b,#14222f)}
.location-card strong{font:16px Georgia,serif;color:#f0dfba}.location-card span{font:10px/1.4 system-ui;color:#c3d0da}.location-card small{font:10px ui-monospace,monospace;color:#a8b8c6}
.location-card.selected{border:2px solid #e0bd7c;background:#354657;box-shadow:inset 0 0 0 2px #121c27;animation:deployment-select .15s ease-out}.location-card:active{transform:translateY(1px);box-shadow:inset 0 3px 8px #0009}
.deployment-location-heading{display:grid;gap:5px;padding:14px}.deployment-location-heading strong{font:18px Georgia;color:#eee0c6}.deployment-location-heading span{font:11px/1.5 system-ui;color:#b5c3d2}
.deployment-confirm{padding:12px;border-top:1px solid #677588;background:#111e2b}.deployment-confirm p{padding:0 0 8px;font-size:12px}.deployment-confirm button{min-height:52px;letter-spacing:.06em}
.deployment-feedback{padding:12px;border:1px solid #829db0;background:#203747;margin:10px 0;border-radius:4px}.deployment-feedback strong{font-size:11px;letter-spacing:.09em}.deployment-feedback p{margin-top:6px;font-size:12px}.deployment-feedback.invalid{border-color:#c58b80;background:#472f34;color:#f2d8cd}.deployment-feedback.deployed{border-color:#bfa77a;background:#303b3c;color:#f2e4c9}
.roster-row.selected{animation:deployment-select .15s ease-out}.roster-row{min-height:82px}.roster-row small{font-size:11px}.deployment-guidance{font-size:12px!important}
@keyframes deployment-select{from{transform:scale(.98)}to{transform:scale(1)}}
@media(min-width:761px) and (max-width:1150px){.workspace.panel-open{grid-template-columns:minmax(0,1fr) 310px}.side-panel{position:static;min-height:0}.roster-list{max-height:24vh}}
@media(max-width:760px){.workspace.panel-open{display:flex;flex-direction:column;height:calc(100dvh - 140px);min-height:0;gap:6px}.workspace.panel-open .map-card{flex:1 1 45%;min-height:120px;width:100%}.workspace.panel-open .side-panel{position:relative;inset:auto;width:100%;flex:0 1 52%;min-height:0;max-height:52%;border-radius:12px 12px 0 0;box-shadow:0 -5px 22px #0005}.workspace.panel-open .side-panel:before{content:"";display:block;width:38px;height:3px;background:#8596a6;margin:0 auto 4px;border-radius:3px;flex-shrink:0}.workspace.panel-open .side-panel>section{flex-shrink:0}.location-grid{max-height:210px}.roster-list{max-height:200px}.workspace.panel-collapsed{min-height:0}.deployment-steps{margin-block:5px}.location-card{min-height:104px}}
@media(prefers-reduced-motion:reduce){.location-card.selected,.roster-row.selected{animation:none}.location-card:active{transform:none}}

/* B1.1: reserved tablet map space and fixed confirmation dock. */
.side-panel{overflow:hidden;gap:0;padding:0;min-height:0}.command-panel-scroll{flex:1;min-height:0;overflow:auto;padding:12px;display:flex;flex-direction:column;gap:12px;overscroll-behavior:contain}.command-panel-scroll>section{flex-shrink:0}
.side-panel>.deployment-confirm{flex:0 0 auto;margin:0;border-top:1px solid #a68d65;background:linear-gradient(110deg,#263547,#111d2a);box-shadow:0 -6px 18px #0004;padding:12px}.deployment-confirm>p{margin:0;font-size:12px}.deployment-confirm .deployment-feedback{margin:4px 0 8px;padding:8px;max-height:100px;overflow:auto}.deployment-confirm .deployment-feedback p{padding:0;font-size:11px}.deployment-confirm button{min-height:48px}
.location-card{border-top:2px solid #8a7757;min-height:126px;padding:12px;gap:7px}.location-card .card-unit-type{color:#d8bd89;font-size:9px;letter-spacing:.08em;text-transform:uppercase}.location-card strong{font-size:19px}.location-card small{border-top:1px solid #ffffff12;padding-top:6px;color:#adbac7}.location-card.selected{background:linear-gradient(140deg,#425365,#233548);border-color:#e2bd7d}
.deployment-focus-halo{fill:#e9c785;fill-opacity:.16;stroke:#162a3b;stroke-width:7;vector-effect:non-scaling-stroke;pointer-events:none}.deployment-focus-ring{fill:none;stroke:#ffe2a3;stroke-width:3;vector-effect:non-scaling-stroke;pointer-events:none;animation:destination-pulse 1s ease-in-out 2}
@keyframes destination-pulse{50%{stroke:#e7f7ff;stroke-width:5;opacity:.7}}
.menu-button,.map-control-button,.location-button,#confirm-deployment{min-height:44px;min-width:44px}
@media(min-width:761px) and (max-width:1366px){.workspace.panel-open{grid-template-columns:minmax(0,1fr) 310px}.workspace.panel-open .side-panel{position:static;width:auto;min-height:0}.command-panel-scroll{padding:10px}.roster-list{max-height:210px}.location-grid{max-height:260px}.side-panel>.deployment-confirm{padding:10px}}
@media(max-width:760px){.workspace.panel-open .side-panel{display:flex;flex-direction:column;max-height:55%;flex-basis:55%}.workspace.panel-open .side-panel>section{flex-shrink:initial}.side-panel:before{margin:6px auto!important}.command-panel-scroll{padding:8px 10px}.side-panel>.deployment-confirm{padding:8px 10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.deployment-confirm .deployment-feedback{max-height:65px}.deployment-confirm>p{font-size:11px}.deployment-confirm button{min-height:44px}}
@media(prefers-reduced-motion:reduce){.deployment-focus-ring{animation:none}}

/* Counter V2 — muted faction enamel, ivory symbols, isolated data band. */
.counter-v2{color:#f1e8d5}.counter-v2.german .counter-body{fill:#344c60;stroke:#96b1c4}.counter-v2.soviet .counter-body{fill:#62413d;stroke:#c09a83}
.counter-v2 .counter-id{font-size:5px;font-weight:600;fill:#e0ded5;opacity:1;letter-spacing:.01em}.counter-v2 .counter-country{font-family:system-ui,sans-serif;letter-spacing:.06em}.counter-v2 .counter-stats{fill:#f5ead7;font-size:8px;font-weight:700;letter-spacing:0;font-variant-numeric:tabular-nums}.counter-v2 .unit-symbol{stroke:#f1e8d5;stroke-width:2;fill:none}.counter-v2 .unit-mini-label,.counter-v2 .unit-letter-label{fill:#f1e8d5}.counter-v2[data-damage="2"] .unit-symbol{opacity:.65}.counter-v2 .damage-mark{fill:#f4cc9b;font-size:9px;stroke:#1c2028;stroke-width:.5}.counter-v2 .oos-icon{stroke:#f2c69d;stroke-width:1.4}.counter-v2 .stack-badge circle{fill:#111e2b;stroke:#d6bd8c;stroke-width:1}.counter-v2 .stack-badge text{fill:#fff1d6;font-size:7px;font-weight:800}
.counter-v2.selected .counter-body{stroke:#f6d797;stroke-width:2.5}.counter-v2.selected{filter:drop-shadow(0 0 3px #ecc582aa)}.counter-v2:focus-visible .counter-body{stroke:#dbf3ff;stroke-width:3}.counter-v2:active .counter-inset{stroke:#fff2cd;stroke-opacity:1;stroke-width:1.4}
@media(hover:hover){.counter-v2:hover .counter-inset{stroke-opacity:.9}}

/* Combat target routing feedback: canonical enemy hex and counter. */
.counter.attackable-enemy .counter-face{filter:drop-shadow(0 0 3px #c9a86c)}
.counter.selected-combat-target .counter-face{filter:drop-shadow(0 0 5px #f2d69a) drop-shadow(0 0 2px #fff3d7)}
.combat-target-option.selected-combat-target{stroke:#ffe0a1;stroke-width:4;stroke-dasharray:none;fill:rgba(211,170,91,.3)}
.combat-target-option.unavailable-combat-target{fill:rgba(145,69,59,.07);stroke:#95584f;stroke-dasharray:2 5;cursor:not-allowed}
.counter.unavailable-combat-target{opacity:.55;cursor:not-allowed}
.counter.combat-attacker-eligible .counter-body{stroke:#9ac8c2;stroke-width:2;stroke-dasharray:3 3}
.counter.combat-attacker-selected .counter-body{stroke:#b4ede1;stroke-width:3;stroke-dasharray:none}
.counter.combat-attacker-selected .counter-face{filter:drop-shadow(0 0 3px #72b9ae)}
.combat-attacker-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.combat-attacker-chip{display:inline-flex;align-items:center;gap:6px;min-height:44px;max-width:100%;padding:6px 9px;border:1px solid #72b9ae88;border-radius:5px;background:#152b30;color:#e7efe8;font:inherit;font-size:12px;line-height:1.4;white-space:normal;overflow-wrap:anywhere;text-align:left;touch-action:manipulation}
button.combat-attacker-chip{cursor:pointer}button.combat-attacker-chip:active{background:#25433f}button.combat-attacker-chip:focus-visible{outline:2px solid #b4ede1;outline-offset:2px}
.combat-attacker-chip.primary{border-color:#c5a66e;color:#f1ddb5;background:#292a25}
.combat-group-count,.combat-group-hint{font-size:12px;line-height:1.5}.combat-group-hint{color:#b4d8cf;margin:8px 0}
.advance-option{stroke:#a7c69a;fill:rgba(139,181,121,.2)}
.combat-crt-scroll{max-width:100%;overflow-x:auto;margin-top:12px}
.combat-crt{border-collapse:collapse;font-size:11px;white-space:nowrap;width:100%}
.combat-crt caption{text-align:left;padding:8px 0}
.combat-crt th,.combat-crt td{padding:5px;border:1px solid #bda37533;text-align:center}
.combat-modifier-summary,.combat-result-summary{font-size:12px;line-height:1.6;overflow-wrap:anywhere}
.attack-preview .attack-matchup{padding:10px;gap:5px}
.attack-preview .attack-matchup strong{font-size:14px;line-height:1.4}
.attack-preview .attack-odds{margin:8px 0}

/* Combat UX Pass 1: concise preview with secondary tactical controls. */
.attack-matchup{display:grid;gap:10px;padding:16px 12px;background:#0d1822;border:1px solid #9b835755;border-radius:6px;overflow-wrap:anywhere}.attack-matchup>span{color:#c8ad78;font-size:11px;letter-spacing:.16em}.attack-matchup strong{font-family:Georgia,serif;font-size:16px;font-weight:500;color:#eee7d7}.attack-odds{display:flex;justify-content:space-between;gap:12px;margin:14px 0}.attack-odds strong{display:block;font-size:23px;font-variant-numeric:tabular-nums;color:#e9d2a4}.combat-confirm{width:100%;min-height:52px;margin:14px 0}.combat-advanced{border-top:1px solid #bda37533;margin:8px 0}.combat-advanced summary{min-height:44px;display:flex;align-items:center;cursor:pointer;color:#dfc998;touch-action:manipulation}.combat-advanced summary::before{content:'＋';margin-right:8px}.combat-advanced[open] summary::before{content:'−'}.combat-advanced button{min-height:44px;white-space:normal;text-align:left}.combat-advanced button:active,.combat-confirm:active{transform:translateY(1px)}.combat-confirm:disabled{opacity:.45;cursor:not-allowed}.attack-guidance{line-height:1.5}

/* VS2 terrain hierarchy only: existing grid and all hit targets stay intact. */
.terrain-surface[data-world-surface="vs2-002-surface-integration"] + #eastfront-map .production-grid{stroke-opacity:.23}

/* Localization: system CJK fallbacks and text-fit adjustments only. */
:root{--ui-cjk-font:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei","PingFang SC","Hiragino Sans GB","Noto Sans CJK SC","Noto Sans SC",sans-serif;font-family:var(--ui-cjk-font)}
.language-select{font:inherit;font-size:12px;min-height:44px;max-width:120px;padding:6px;border:1px solid var(--line,#596362);border-radius:3px;background:#1b2634;color:#e7dfd0;cursor:pointer}
.preview-home-card>.language-select,.preview-state-card>.language-select,.privacy-card>.language-select,.game-over-card>.language-select{display:block;margin:0 0 16px auto}
html[lang="zh-CN"] :is(h1,h2,h3,button,select,.eyebrow,.campaign-heading,.campaign-heading>strong,.campaign-turn,.campaign-turn>strong,.campaign-side,.map-toolbar strong,.unit-dossier,.attack-matchup strong,.deployment-location-heading,.location-card,.location-card>strong,.preview-kicker){font-family:var(--ui-cjk-font);letter-spacing:.025em}
html[lang="zh-CN"] :is(.panel-block p,.deployment-guidance,.deployment-feedback,.attack-guidance,.combat-card,.privacy-card p){line-height:1.6}
html[lang="zh-CN"] :is(.primary-action,.secondary-action,.mini-button,.location-card,.deployment-confirm p){white-space:normal;overflow-wrap:anywhere;line-height:1.45}
html[lang="zh-CN"] .fit-button{min-width:64px;padding-inline:6px}
html[lang="zh-CN"] .campaign-turn strong{font-size:16px;white-space:nowrap}
html[lang="zh-CN"] :is(.combat-grid,.modifier-list){grid-template-columns:minmax(0,1fr) auto}
html[lang="zh-CN"] .resource-strip{gap:5px}
html[lang="zh-CN"] .resource-strip>span{padding-inline:5px;letter-spacing:0}
@media(min-width:901px) and (max-width:1250px){.resource-strip{flex-wrap:wrap}.topbar{min-height:82px;height:auto;padding-block:5px}.resource-strip .language-select{min-height:44px}}
@media(max-width:760px){.resource-strip .language-select{max-width:100px;font-size:11px;padding-inline:3px}.resource-strip .menu-button{padding-inline:6px}}

/* UA-001: compact presentation controls; no Counter, camera or terrain styles. */
.animation-controls { display:flex; align-items:center; gap:6px; flex-wrap:wrap; font-size:11px; }
.animation-controls label { color:var(--muted,#bbc0bc); }
.animation-controls select { min-height:36px; padding:4px 7px; color:#eee4d1; background:#172431; border:1px solid #7b6b50; border-radius:5px; font:inherit; }
@media (pointer:coarse) { .animation-controls select, .animation-controls button { min-height:44px; } }
@media(max-width:1100px) { .animation-controls label { display:none; } }
.startup-progress{margin:28px auto 0;max-width:400px}
.startup-track{height:6px;overflow:hidden;background:#0d1622;border:1px solid #556171;border-radius:2px}
.startup-fill{display:block;height:100%;width:100%;background:#b39a68;transform-origin:left center;transition:transform 180ms ease-out}
.startup-steps{margin:13px 0 20px;color:#c9b78f;font-size:12px;font-variant-numeric:tabular-nums;letter-spacing:.05em}
.preview-loading .startup-stage{margin:0 0 7px;color:#ede5d5;font-size:16px}
.preview-loading .startup-items{margin:0;color:#a8b4c2;font-size:12px;min-height:2em;font-variant-numeric:tabular-nums}
.startup-progress:not([data-startup-stage="ready"]):not([data-startup-stage="failed"]) .startup-stage{animation:startup-breath 1.8s ease-in-out infinite}
.startup-progress[data-startup-stage="ready"] .startup-fill{transition:none}
@keyframes startup-breath{0%,100%{opacity:1}50%{opacity:.64}}
@media(prefers-reduced-motion:reduce){.startup-fill{transition:none}.startup-progress .startup-stage{animation:none!important}}

/* FOW-002: only the lightweight world-space veil crossfades. */
@keyframes fog-enter { from { opacity:0 } to { opacity:1 } }
@keyframes fog-leave { from { opacity:1 } to { opacity:0 } }
#fog-surface-layer { pointer-events:none; }
@media (prefers-reduced-motion:reduce) { #fog-surface-layer image { animation:none !important; } }

/* UA-003R3: the existing unit button owns both presentations and its hit proxy. */
.model-controls{display:flex;align-items:center;gap:5px;font-size:11px;color:#d8d5c7}.model-controls select{background:#182632;color:#eee5d2;border:1px solid #6e6853;border-radius:4px;padding:4px}
.counter[data-unit-display="model"]{filter:none}
.compact-body{fill:#223746;fill-opacity:.96;stroke:#97aab0;stroke-width:.9}.soviet .compact-body{fill:#513a36;stroke:#b89788}
.compact-category{fill:#d7dedc;font:600 6.2px sans-serif}.compact-stats{fill:#fff0d8;font-family:sans-serif;font-weight:800}
.compact-damage,.compact-oos,.compact-entrench{fill:none;stroke:#f0bd88;stroke-width:1.5}
.counter.selected .compact-body,.counter:focus-visible .compact-body{stroke:#f5d798;stroke-width:2}
.counter.combat-attacker-primary .compact-body{stroke:#f3cf83;stroke-width:2}
.counter.combat-attacker-selected .compact-body{stroke:#79c5b9;stroke-width:2}
.counter.selected-combat-target .compact-body{stroke:#fff0c0;stroke-width:2.5;stroke-dasharray:3 1}
.counter.attackable-enemy .compact-body{stroke:#ddbb7d}
.counter.unavailable-combat-target .compact-body{stroke:#806e68}
.counter-face,.compact-plate{transition:opacity .12s ease}
@media(prefers-reduced-motion:reduce){.counter-face,.compact-plate{transition:none}}

[data-unit-presence-layer]{transition:opacity .12s ease}
@media(prefers-reduced-motion:reduce){[data-unit-presence-layer]{transition:none}}

.compact-stack{font:800 7px sans-serif;fill:#f4e7ce;paint-order:stroke;stroke:#172734;stroke-width:2;stroke-linejoin:round}
.map-controls{flex-wrap:wrap}.model-controls select{min-height:36px}
@media(pointer:coarse){.model-controls select{min-height:44px}}
