.squad-toolbar{display:flex;flex-wrap:nowrap;align-items:center;gap:6px;margin:8px 0 10px;overflow-x:auto}.squad-toolbar button{font-size:10px;padding:10px 9px;min-height:40px}.squad-toolbar label{display:flex;gap:6px;align-items:center;font-size:10px}.squad-toolbar #end-turn{border-color:#a8b987}.hud>div:first-child{min-width:0}@media(max-width:700px){.squad-toolbar{display:flex;flex-wrap:nowrap}.squad-toolbar label{grid-column:1/-1}.squad-toolbar select{flex:1;max-width:100%}.squad-toolbar button{font-size:9px;padding:8px 3px;letter-spacing:0}}
/* Compact portrait cards: native art is cropped only in UI, never battlefield-scaled. */
.squad{display:flex!important;gap:8px;flex-wrap:wrap}
.actor-card{display:flex!important;align-items:center;gap:9px;padding:8px!important;min-width:156px;text-align:left;letter-spacing:.5px}
.actor-card img{width:48px;height:66px;object-fit:cover;border:1px solid #6a7c70;background:#172427}
.card-details{display:flex;flex-direction:column;gap:3px;min-width:80px;flex:1}
.card-details b{font-size:11px}.card-details small{display:block;font-size:8px!important;letter-spacing:1px;color:#a3b8ad}
.card-stat{display:flex;align-items:center;gap:5px;font-size:9px;line-height:11px}.card-stat meter{width:60px;height:8px;accent-color:#abc194}.card-stat>span:last-child{width:20px;text-align:right}
.actor-card.selected{box-shadow:inset 3px 0 #d7e4b7;background:#354c42}.actor-card.casualty{min-width:135px}.body-icon{color:#bfcec8}.blood-icon{color:#479c87}
#contacts .actor-card{min-width:180px}#contacts .actor-card img{height:60px;width:44px}
@media(max-width:700px){.squad{flex-wrap:nowrap}.squad .actor-card{min-width:0;flex:1;gap:5px;flex-direction:column;padding:6px!important}.squad .actor-card img{height:56px;width:42px}.card-details{min-width:0;width:100%}.card-stat meter{width:100%;min-width:24px}.card-stat{gap:3px}.hud{padding:12px!important}.tile{max-width:94%;right:3%;font-size:9px;letter-spacing:0}.card-details b{font-size:10px}}
button:disabled,select:disabled{opacity:.42;cursor:not-allowed}button.selected{background:#465c54;border-color:#c2d09a}.tactical,.combat-log{background:#1d292e;padding:12px;border:1px solid #43504d}.action-row{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin:7px 0}.action-row button{font-size:10px;padding:10px}.action-row label{display:flex;align-items:center;gap:5px;font-size:11px}select{max-width:220px;padding:8px;background:#172228;color:#d5ddce;border:1px solid #53615e}.active-strip{display:flex;flex-wrap:wrap;gap:10px;align-items:center;border-top:1px solid #43504d;margin-top:10px;padding-top:8px}.active-strip span{display:block;font-size:11px}.active-strip meter{display:block;width:130px;height:8px}.active-strip strong{font-size:15px!important}.mission-actions{border-top:1px solid #43504d;padding-top:10px}#end-turn{background:#485943}#contacts{color:#d4a983;font-size:11px;padding:9px 0;display:flex;gap:8px;flex-wrap:wrap;flex-direction:column;align-items:stretch}#contacts button{font-size:11px}.hostile-card.greyed{filter:grayscale(1);opacity:.5}.hostile-card.dead{opacity:.55}.hostile-card.dead img{filter:grayscale(1)}.hostile-card.dead .card-details b{text-decoration:line-through}.hostile-card.stunned{outline:2px solid #d7c15e}.state-badge{display:inline-block;font-size:8px!important;letter-spacing:1px;padding:2px 5px;border:1px solid;line-height:1.4}.state-badge.dead{color:#d98c7a;border-color:#d98c7a}.state-badge.stunned{color:#e8d16b;border-color:#e8d16b}.state-badge.greyed{color:#9fb2a7;border-color:#9fb2a7}summary{cursor:pointer;padding:9px 0;color:#afc2b1;letter-spacing:1px;font-size:11px}pre{white-space:pre-wrap;max-height:180px;overflow:auto;font:11px/1.7 monospace;color:#c2cdba;margin:0}#result{position:absolute;inset:25% 12% auto;text-align:center;padding:28px;background:#122025f2;border:1px solid #d6c58e;box-shadow:0 10px 80px #000}#result[hidden]{display:none}#result h2{letter-spacing:5px;color:#ddd6a7}dialog{max-width:740px;max-height:85vh;overflow:auto;background:#1d2a30;color:#d5ddcf;border:1px solid #a2b394;line-height:1.7}dialog::backdrop{background:#0009}.hud .squad-panel{min-width:300px}.hud .hostile-panel{min-width:230px}.view-tools button{padding:8px}.tile{max-width:90%;pointer-events:none}@media(max-width:700px){.map-title{display:none}.brief strong{font-size:10px}.build{display:none}.hud{display:flex!important;flex-direction:column;align-items:stretch}.active-strip{min-width:0}button{letter-spacing:0}.view-tools{top:8px;right:8px}#result{inset:25% 4% auto}select{max-width:180px}}
:root{color-scheme:dark;font-family:system-ui,sans-serif;color:#d6dddb;background:#11191f;font-size:13px}*{box-sizing:border-box}body{margin:0}a{color:#b5cabb;text-decoration:none}a:hover{text-decoration:underline}header{height:70px;max-width:1440px;margin:auto;display:flex;align-items:center;justify-content:space-between;padding:0 26px;gap:20px}.brand{font-size:23px;font-weight:800;letter-spacing:3px}.brand small{display:block;font-size:9px;letter-spacing:4px;margin-left:30px;color:#91a09f}.build,.eyebrow{font-size:10px;letter-spacing:2px;color:#99aaa8}main{max-width:1440px;margin:0 auto;padding:0 22px}.brief{background:#202b31;border:1px solid #3d4a4b;padding:16px 22px;display:flex;justify-content:space-between;align-items:center}h1{font-size:22px;letter-spacing:1px;margin:5px 0 0;font-weight:500}.brief strong{display:block;text-align:right;letter-spacing:2px;margin-top:8px}.contact{color:#caad6f;font-size:10px;letter-spacing:1px}.viewport{position:relative;border:1px solid #49514b;background:#2b302a;overflow:hidden}canvas{width:100%;height:clamp(470px,65vh,760px);display:block;touch-action:none;cursor:crosshair}canvas:focus-visible{outline:2px solid #bbcd92;outline-offset:-2px}.map-title{pointer-events:none;position:absolute;top:20px;left:22px;font-size:12px;letter-spacing:2px;text-shadow:0 2px 4px #000}.map-title small{display:block;font-size:9px;color:#c4c8b0;margin-top:7px}.view-tools{position:absolute;top:15px;right:15px;display:flex;align-items:center;gap:5px}button{color:#d6dddb;background:#26343a;border:1px solid #53615e;padding:10px 14px;cursor:pointer;font:inherit;letter-spacing:1px}button:hover{background:#35494b}button:focus-visible{outline:2px solid #e8d19b}output{width:47px;text-align:center;font-size:11px}.tile{position:absolute;bottom:13px;right:18px;background:#152026d9;padding:8px 12px;color:#c8cfbc;font-size:10px;letter-spacing:1px}#status{padding:11px 20px;background:#2c3a3d;color:#d8d4ba;border-left:3px solid #a9b97d;min-height:40px}.hud{padding:19px 22px;display:grid;grid-template-columns:1.6fr 1fr;gap:30px;background:#1c282e;border:1px solid #3b4949}.squad{display:flex;gap:8px;margin-top:12px}.squad button{text-align:left;min-width:100px}.squad small{display:block;font-size:8px;margin-top:8px;color:#a9b6b0}.squad .selected{border-color:#c5cfa5;background:#394b49;box-shadow:inset 0 -3px #bdcc93}.time strong{display:block;font-size:25px;margin-top:6px;font-weight:500}.time strong small{font-size:11px;color:#a9b7ac}.time>small{display:block;font-size:9px;letter-spacing:2px;color:#98a99e;margin-top:7px}meter{width:100%;height:10px;margin-top:7px}meter::-webkit-meter-bar{background:#111c21;border:0;border-radius:0}meter::-webkit-meter-optimum-value{background:#aabd86}.actions{display:flex;flex-direction:column;gap:10px}.actions button:first-child{background:#47584c;border-color:#899577}kbd{font-size:9px;color:#aab6ad;margin-left:10px}footer{display:flex;justify-content:space-between;gap:40px;color:#95a39e;font-size:10px;line-height:1.8;padding:7px 4px}footer p{max-width:650px}footer b{color:#bcbd9c}#grid[aria-pressed=true]{border-color:#d3cc8c}@media(max-width:850px){.build{display:none}.hud{grid-template-columns:1fr 1fr;gap:20px}.actions{grid-column:1/-1;flex-direction:row}.squad button{min-width:75px;padding:9px}.squad{gap:4px}main{padding:0 8px}header{padding:0 14px}footer{display:block}.map-title{top:65px}.view-tools{left:12px;right:auto}.brief{padding:13px}.contact{font-size:8px}.brand{font-size:18px}.hud{padding:14px}}@media(max-width:500px){.hud{grid-template-columns:1fr}.actions{grid-column:auto}.brief h1{font-size:19px}.time strong{display:inline-block;margin-right:10px}.squad button{flex:1}.time{max-width:270px}}
/* Equal half portrait HUD, including six operative rosters. Details live below. */
.hud{display:grid!important;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
.hud>.squad-panel,.hud>.hostile-panel{min-width:0;width:auto}
.squad,#contacts{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;padding:8px 0;margin:0}
.squad .actor-card,#contacts .actor-card{min-width:0;width:100%;gap:5px;padding:6px!important;letter-spacing:0;align-items:center}
.actor-card img,#contacts .actor-card img{width:38px;height:54px;flex:0 0 38px}
.card-details{min-width:0;overflow:hidden;gap:2px}
.card-details b{font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card-details small{margin-top:0;font-size:7px!important;letter-spacing:.35px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card-stat{gap:3px;font-size:9px}.card-stat meter{width:100%;min-width:10px;height:7px}.card-stat>span:last-child{width:18px;flex:0 0 18px}
.state-badge{font-size:11px!important;align-self:flex-start;padding:0 4px;line-height:1.1}
.actor-card:disabled{opacity:.8}.hostile-card.greyed:disabled{opacity:.45;filter:grayscale(1)}
.hostile-card.dead img{filter:grayscale(1)}.hostile-card.dead{position:relative}.hostile-card.dead:after{content:'✕';position:absolute;left:16px;top:14px;font-size:28px;color:#d49183;text-shadow:0 1px 3px #000}
.tu-readout{display:flex;align-items:center;gap:12px;padding:9px 14px;border:1px solid #43504d;background:#1d292e;font-size:11px}.tu-readout meter{width:130px;height:8px}
.operative-details{border:1px solid #43504d;padding:0 14px;background:#1d292e}.operative-details .active-strip{margin:0 0 12px}.active-strip #active{width:100%}
@media(max-width:1100px){.squad .actor-card,#contacts .actor-card{flex-direction:column;gap:3px}.card-details{width:100%}.hud{gap:12px}}
@media(max-width:700px){.hud{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;padding:10px!important}.squad,#contacts{grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}.card-details b{font-size:9px}.actor-card img,#contacts .actor-card img{width:34px;height:46px;flex-basis:auto}.squad .actor-card,#contacts .actor-card{padding:4px!important}.card-details small{font-size:6px!important}.tu-readout{flex-wrap:wrap;font-size:10px}}

/* Faction boundary remains visible at every card count and viewport width. */
.hud{gap:0!important}.squad-panel{padding-right:14px}.hostile-panel{padding-left:14px;border-left:2px solid #81968c}.hud>.squad-panel>.eyebrow{color:#b7cba9}.hud>.hostile-panel>.eyebrow{color:#d3a48d}.hostile-panel>.eyebrow:before{content:'';display:inline-block;width:6px;height:6px;background:#bc806d;margin-right:7px}.card-rank{display:flex;align-items:center;gap:4px}.card-rank small{min-width:0}.heartbeat{flex:0 0 28px;color:#91c68d;line-height:0}.heartbeat svg{width:28px;height:13px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round}.heartbeat.dead{color:#dc8176}.fire-icon,.action-icon,#reload svg{width:20px;height:20px;vertical-align:middle;flex:none}.action-row button{min-height:40px}#reload{width:42px;padding:9px;line-height:0}#reserves{display:flex;align-items:center;gap:4px;padding-right:8px;border-right:1px solid #53615e}#reserves .eyebrow{font-size:9px;margin-right:3px}#reserves button{padding:8px;font-size:9px}.body-actions{border-top:1px solid #43504d;padding-top:7px}.card-rank .heartbeat{animation:none!important}@media(max-width:700px){.squad-panel{padding-right:7px}.hostile-panel{padding-left:7px}.card-rank{flex-wrap:wrap;gap:1px}.heartbeat{flex-basis:22px}.heartbeat svg{width:22px}.action-row{gap:5px}#reserves{flex-wrap:wrap;border:0}}

/* HUD15: headings label their real selector group, without entering rebuilt contents. */
.selector-block>.selector-group{display:flex;flex-direction:column;align-items:flex-start;gap:6px}
.selector-heading{font-size:11px;line-height:1.4;color:#bdcdbf;letter-spacing:.6px}
.selector-group>#weapon,.selector-group>#reserves,.selector-group>#grenade-kind{display:flex;flex-wrap:wrap;align-items:center;gap:4px;border:0;padding:0}
#grenade-kind button:disabled{filter:grayscale(1);background:#252d30;color:#89948f;border-color:#4e5855;box-shadow:none}
/* Desaturate only last-observed contents: the faction border must stay red. */
#contacts .hostile-card{border:2px solid #d96c66}
#contacts .hostile-card.greyed,#contacts .hostile-card.greyed:disabled,#contacts .hostile-card.dead{filter:none;opacity:1;border-color:#d96c66}
#contacts .hostile-card.greyed>*,#contacts .hostile-card.dead>*{filter:grayscale(1);opacity:.5}

/* Batch18: equal faction geometry, unknown values have no live-state input. */
.squad .actor-card,#contacts .actor-card{height:102px;border-width:2px;position:relative}
.stat-placeholder{height:7px;flex:1;min-width:10px;background:#45504d;border-radius:3px}.tu-placeholder{display:block;width:38px;height:6px;background:#45504d;border-radius:3px}.unavailable{color:#7d8984;opacity:.65}.hostile-card .state-badge{position:absolute;right:3px;top:3px}.hostile-card .card-rank{min-height:14px}
@media(max-width:1100px){.squad .actor-card,#contacts .actor-card{height:174px;justify-content:flex-start}}
@media(max-width:700px){.squad .actor-card,#contacts .actor-card{height:161px}.squad .actor-card img,#contacts .actor-card img{width:34px;height:46px;flex:none}.tu-placeholder{width:34px}}
.card-details>b{flex-shrink:0;min-height:12px;line-height:12px}

/* Batch19: one tactical row; selectors keep their related paid actions adjacent. */
.squad-toolbar>button{flex:0 0 auto}
.encounter-control{display:inline-flex;align-items:center;gap:8px;margin:0 14px 10px 0;font-size:11px}
.environment-controls{display:inline-flex;flex-wrap:wrap;gap:8px 14px;align-items:center;margin:0 0 10px;max-width:100%}.environment-controls label{display:flex;align-items:center;gap:8px;font-size:11px}.environment-controls small{color:#99aaa8;font-size:10px}.environment-controls select{max-width:190px}@media(max-width:700px){.environment-controls{display:flex}.environment-controls label{flex:1 1 140px}.environment-controls select{min-width:0;flex:1}.environment-controls small{flex-basis:100%}}
.selector-block>.selector-group{min-width:0;max-width:100%}
.selector-choices,.selector-choices>#weapon,.selector-choices>#grenade-kind,.grenade-actions{display:flex;flex-wrap:nowrap;align-items:center;gap:4px}
.selector-choices{max-width:100%;overflow-x:auto;padding-bottom:3px}
.selector-choices>*,.selector-choices button{flex-shrink:0}
.grenade-actions{border-left:1px solid #53615e;margin-left:3px;padding-left:7px}
.loading{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:24px;text-align:center;background:#172228f5;color:#d6dddb}
.loading[hidden]{display:none}
.loading strong{font-size:13px;letter-spacing:2px}
.loading label{max-width:100%;font-size:12px;overflow-wrap:anywhere;color:#bdcdbf}
.loading progress{width:min(360px,85%);height:18px;accent-color:#b7cba9}
#loading-percent{font-size:12px;font-variant-numeric:tabular-nums;color:#b7cba9}
.loading.failed progress{accent-color:#d98c7a}
@media(max-width:700px){.squad-toolbar{gap:4px}.squad-toolbar>button[id],.squad-toolbar>button[data-mode]{min-width:40px;padding:7px 5px;gap:3px;font-size:11px}.squad-toolbar .action-icon,.squad-toolbar .fire-icon{width:18px;height:18px}.selector-block #grenade-kind button{min-width:34px;padding:6px}.selector-block .grenade-actions button{min-width:40px;padding:6px;gap:3px}}

/* Feedback 14: one equipment block, no duplicate operative readout. */
.selector-block{display:flex;flex-wrap:wrap;gap:12px;padding:8px 0;border-bottom:1px solid #53615e}.selector-block>div{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:0 12px 0 0;border-right:1px solid #53615e}.selector-block>div:last-child{border-right:0}.selector-block button,.action-row button:not(#help):not(#debrief),.squad-toolbar button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:52px;min-height:42px;padding:8px;letter-spacing:0;font-size:12px}#reload{width:auto;line-height:normal}#reserves{padding-right:12px}#reserves button{padding:8px;font-size:12px}.action-cost{font-variant-numeric:tabular-nums;min-width:1ch}.card-portrait{display:flex;flex-direction:column;align-items:center;gap:2px;flex:none}.card-tu{font-size:10px;line-height:12px;white-space:nowrap;font-variant-numeric:tabular-nums}.card-portrait meter{width:38px;height:6px;accent-color:#b7cba9}.actor-card .card-portrait img{flex:none}.card-rank .heartbeat{flex-shrink:0}.selector-block button[aria-pressed=true]{box-shadow:inset 0 -3px #c2d09a}#debrief-report{line-height:1.8}@media(max-width:700px){.selector-block{gap:7px}.selector-block>div{padding-right:7px}.selector-block button{min-width:46px}.card-portrait meter{width:34px}}
