:root{color-scheme:dark;--bg:#101316;--panel:#171b1edb;--line:#45403a;--gold:#c4a976;--text:#e0ded7;--muted:#8e969a;--accent:#ba9a61;--accent-dark:#6d5738;--map-bg:#111a20;--font:Georgia,'Times New Roman',serif}
*{box-sizing:border-box}body{margin:0;min-height:100vh;color:var(--text);background:var(--bg);font:14px/1.5 'Segoe UI',Arial,sans-serif}button,input,select{font:inherit}button{cursor:pointer;color:inherit}button:disabled{cursor:wait;opacity:.45}button,input,select{outline-offset:5px}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--gold)}[hidden]{display:none!important}button{border:0;background:none}a{color:var(--gold)}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--font);font-weight:400}img{display:block;max-width:100%}.ambient-bg{position:fixed;inset:0;z-index:-2;background:linear-gradient(180deg,#0e141acd,#121518e8 65%,#111416),url('assets/bridge.webp') center top/cover;opacity:1;pointer-events:none}.topbar{min-height:91px;display:flex;align-items:center;justify-content:space-between;gap:28px;padding:18px 4.5%;border-bottom:1px solid var(--line);background:#111417c4}.brand{display:flex;gap:15px;align-items:center;text-align:left;font-size:13px;font-weight:600;letter-spacing:1.2px;white-space:nowrap}.brand small{display:block;font-size:9px;letter-spacing:1.5px;color:var(--muted);font-weight:400;margin-top:4px}.brand-seal{font-family:var(--font);font-size:28px;color:var(--gold);border:1px solid var(--accent-dark);padding:2px 7px;line-height:1.2}.topbar nav{display:flex;align-self:stretch;gap:32px}.nav-button{padding:13px 0;font-size:13px;color:#9a9fa1;position:relative;white-space:nowrap}.nav-button.active{color:var(--gold)}.nav-button.active:after{content:'';position:absolute;left:0;right:0;bottom:-18px;height:2px;background:var(--gold)}.nav-button span{font-size:10px;margin-left:5px;color:#747c81}.header-actions{display:flex;gap:12px}.icon-button{font-size:10px;letter-spacing:.9px;padding:10px 12px;border:1px solid #393d3e;color:#b7b9b7}.icon-button:hover{border-color:var(--gold)}main{max-width:1580px;margin:auto;padding:0 4.5%}.menu-intro{padding:36px 0 28px;position:relative}.eyebrow{font-size:9px;letter-spacing:1.8px;font-weight:600;color:var(--gold);text-transform:uppercase}.menu-intro h1{font-size:45px;line-height:1.18;letter-spacing:-.9px;margin-top:10px}.menu-intro h1 em{font-style:normal;color:var(--gold)}.intro-copy{position:absolute;right:0;bottom:30px;color:#a3aaa9;font-family:var(--font);font-size:17px;line-height:1.7}.menu-layout{display:grid;grid-template-columns:390px minmax(0,1fr);gap:24px}.panel{background:var(--panel);border:1px solid var(--line);position:relative;box-shadow:inset 0 0 0 3px #11141738}.panel:before,.panel:after{content:'';position:absolute;width:5px;height:5px;border:1px solid #82715b;pointer-events:none}.panel:before{left:5px;top:5px}.panel:after{right:5px;bottom:5px}.panel-heading{padding:17px 20px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #333536;gap:10px}.muted{color:var(--muted)}.small{font-size:11px}.panel-heading>.muted{font-size:8px;letter-spacing:1px}.group-tabs{display:flex;gap:20px;margin:18px 21px 12px;border-bottom:1px solid #303639}.group-tabs button{color:var(--muted);font-size:11px;padding:0 0 10px}.group-tabs button.active{color:var(--gold);border-bottom:1px solid var(--gold)}.faction-list{padding:0 18px;display:grid;grid-template-columns:1fr 1fr;gap:7px;min-height:157px;align-content:start}.faction-button{padding:11px 8px;text-align:left;display:flex;align-items:center;gap:8px;border:1px solid #34393c;font-size:10px;min-height:48px;color:#bac0c0;background:#11161a}.faction-button:hover{border-color:var(--faction)}.faction-button.active{background:#25282a;border-color:var(--gold);color:#ece8dd}.faction-symbol{display:grid;place-items:center;flex-shrink:0;width:23px;height:24px;font-size:14px;color:var(--faction);font-family:var(--font);border-right:1px solid #4e4a40}.faction-button.active:after{content:'•';margin-left:auto;color:var(--gold)}.faction-description{padding:15px 21px 14px;min-height:94px}.faction-description strong{font-family:var(--font);font-size:16px;font-weight:400;color:var(--gold)}.faction-description p{margin-top:6px;font-size:11px;color:#a3abac;line-height:1.6}.setup-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 20px 12px}label{font-size:10px;color:var(--muted);display:block}select,input[type=search]{background:#101619;border:1px solid #3d4345;padding:9px 10px;color:#d3d8d7;width:100%;margin-top:7px;border-radius:0;font-size:11px}select{cursor:pointer}.opponent-picker{margin:0 21px;font-size:10px;color:var(--muted)}.opponent-picker summary{cursor:pointer}.opponent-picker p{margin:8px 0}#opponent-list{max-height:160px;overflow:auto;display:grid;grid-template-columns:1fr 1fr;gap:5px}#opponent-list label{display:flex;gap:5px;align-items:center}.launch-row{margin:20px 20px 8px;display:flex;flex-direction:column;gap:8px}.primary{background:#c0a371;color:#1a1a18;border:1px solid #d5bd92;padding:14px 17px;font-size:10px;font-weight:700;letter-spacing:1px;box-shadow:inset 0 0 0 3px #ae9162}.primary:hover{background:#d5b987}.primary span{float:right}.secondary{border:1px solid #6b6353;background:#202528;padding:10px 14px;font-size:11px;color:#d1c7b4}.secondary:hover{border-color:var(--gold)}.text-button{padding:0;color:var(--muted);font-size:10px}.text-button:hover{color:var(--gold)}.campaign-setup>#rules-button{margin:7px 21px 18px;font-size:10px}.sector-preview .panel-heading{padding:17px 24px}.preview-title{padding:20px 25px 0;display:flex;justify-content:space-between;align-items:center}.preview-title h2{font-size:25px}.status-dot{font-size:8px;color:#a6b99f;letter-spacing:1px;display:flex;gap:7px;align-items:center}.status-dot:before{content:'';width:5px;height:5px;border-radius:50%;background:#94ad82;box-shadow:0 0 8px #97bc7b45}.map-container{background:radial-gradient(ellipse at center,#28434a28,transparent 68%);position:relative;overflow:hidden}.map-container svg{display:block;width:100%;height:100%}.preview-map{height:305px;min-height:230px}.map-caption{padding:0 25px 17px;display:flex;justify-content:space-between;gap:10px;font-size:8px;letter-spacing:.8px;color:#77878c;border-bottom:1px solid #373b3b}.preview-bottom{height:139px;display:flex;justify-content:space-between;overflow:hidden;padding:19px 0 0 25px;gap:12px}.preview-bottom h3{font-size:18px;margin:7px 0}.preview-bottom p:not(.eyebrow){font-size:10px;color:var(--muted)}.portrait-peek{position:relative;width:167px;flex-shrink:0;border-left:1px solid #4e463b}.portrait-peek img{width:100%;height:150px;object-fit:cover;object-position:50% 25%;filter:saturate(.6)}.portrait-peek:after{content:'';position:absolute;inset:0;background:linear-gradient(0deg,#111619,transparent 70%)}.portrait-peek span{position:absolute;bottom:9px;left:10px;right:8px;z-index:1;font-family:var(--font);font-size:12px;color:#c7b693}.theme-strip{display:flex;align-items:center;gap:32px;margin:26px 0 30px;border-top:1px solid #353a3d;padding-top:18px}.theme-options{display:flex;gap:22px}.theme-options button{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:10px}.theme-options .active{color:var(--gold)}.theme-chip{display:block;width:12px;height:12px;border:1px solid #77715f}.imperial{background:#bca276}.chaotic{background:#a74735}.stellar{background:#548e9b}.theme-strip>.small{margin-left:auto}footer{max-width:1580px;margin:0 auto;padding:18px 4.5%;border-top:1px solid #35393a;display:flex;justify-content:space-between;gap:20px;color:#757e80;font-size:8px;letter-spacing:.9px}footer .text-button{font-size:9px}.game-heading{display:flex;justify-content:space-between;align-items:center;padding:27px 0 21px}.game-heading h1{font-size:26px;margin-top:6px}.game-tools{display:flex;gap:8px}.battle-layout{display:grid;grid-template-columns:210px minmax(0,1fr) 207px;gap:15px;margin-bottom:25px}.command-panel .panel-heading{padding:15px}.commander-portrait{position:relative;height:172px;overflow:hidden}.commander-portrait img{width:100%;height:100%;object-fit:cover;object-position:center 25%;filter:saturate(.65)}.commander-portrait:after{content:'';position:absolute;inset:0;background:linear-gradient(0deg,#141b20ed,transparent 70%)}.commander-portrait span{position:absolute;left:15px;bottom:10px;z-index:1;font-size:9px;letter-spacing:1.5px;color:var(--gold)}.commander-copy{padding:13px 15px;border-bottom:1px solid #383b3b}.commander-copy h2{font-size:18px;line-height:1.2}.commander-copy p{font-size:9px;color:var(--muted);margin-top:6px}.turn-card{padding:17px 15px;border-bottom:1px solid #43403a}.reinforcement{display:flex;align-items:center;gap:14px;margin:6px 0 2px}.reinforcement strong{font-family:var(--font);font-weight:400;font-size:42px;line-height:1.3;color:var(--gold)}.reinforcement span{font-size:10px;color:var(--muted)}#reserve-count{margin-bottom:12px}.turn-card .primary{width:100%;padding:12px 8px;font-size:9px}.scoreboard{padding:12px 15px}.score-row{display:flex;align-items:center;gap:8px;padding:7px 0;font-size:9px}.score-row .score-color{height:7px;width:7px;background:var(--faction);flex-shrink:0}.score-row span:nth-child(2){flex:1}.score-row strong{font-size:11px;font-weight:400;font-family:var(--font)}.score-row.dead{opacity:.3}.score-row.current{color:var(--gold)}.score-row em{font-style:normal;font-size:8px;color:var(--gold)}.board-top{display:flex;align-items:center;gap:18px;padding:14px 18px;border-bottom:1px solid #353b3d}.board-top .text-button{margin-left:auto}.battle-map{height:450px}.battle-board{align-self:start;background:#111a20b0}.map-instructions{padding:12px 16px;text-align:center;font-size:11px;color:#bdc7c6;border-top:1px solid #353a3b;background:#1c2328}.combat-result{padding:16px 20px;min-height:93px;border-top:1px solid #373d3e}.combat-result p{font-size:11px;color:var(--muted);margin-top:6px}.dice-roll{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px;font-family:var(--font);font-size:24px}.dice-roll small{font-family:'Segoe UI',sans-serif;font-size:10px;color:var(--muted)}.dice-roll .win{color:#a7bc89}.dice-roll .lose{color:#c5756b}.dice-pip{display:inline-grid;place-items:center;width:19px;height:19px;border:1px solid #728086;color:#d4dedb;font:12px Georgia;margin-right:3px}.intel-panel{display:flex;flex-direction:column;gap:14px}.territory-panel .panel-heading,.log-panel .panel-heading{padding:15px}.planet-illustration{height:116px;background:linear-gradient(135deg,#1b2d33,#11171a);position:relative;overflow:hidden;display:grid;place-items:center}.planet-disc{width:67px;height:67px;border-radius:50%;background:radial-gradient(circle at 28% 28%,#8a9a98,#3c5b65 37%,#162b33 60%,#070c0d 73%);box-shadow:-3px -3px 14px #8dada72e;border:1px solid #596b6f88;transform:rotate(-30deg)}.planet-illustration span{position:absolute;bottom:9px;font-size:7px;letter-spacing:1px;color:#71898d}.territory-copy{padding:14px 15px}.territory-copy h2{font-size:19px}.territory-copy p{font-size:10px;color:var(--muted);margin-top:7px}dl{margin:14px 0 0}dl div{display:flex;justify-content:space-between;font-size:9px;padding-top:8px;border-top:1px solid #353b3b;margin-top:8px}dt{color:var(--muted)}dd{margin:0;color:var(--gold)}.log-panel ol{padding:8px 16px 10px;list-style:none;margin:0;max-height:200px;overflow:auto}.log-panel li{padding:7px 0;border-bottom:1px solid #30383a;color:#929fa0;font-size:9px;line-height:1.6}.log-panel li:first-child{color:#c4cbc9}.sidebar-quote{text-align:center;font-family:var(--font);font-size:14px;color:#777d7c;padding:4px 10px 13px}.region-shape{transition:fill .18s,stroke .18s;cursor:pointer;stroke-width:1.2;stroke-linejoin:round}.region-shape:hover{filter:brightness(1.4)}.region-shape:focus{outline:none;stroke:#fff4d2;stroke-width:3}.region-shape.selected{stroke:#f0d5a3;stroke-width:3}.region-shape.target{stroke:#cfaf75;stroke-width:2;stroke-dasharray:4 3}.cell-grid{pointer-events:none;fill:none;stroke:#a4b6bb;stroke-opacity:.06;stroke-width:.7}.map-starlayer{pointer-events:none}.map-label{font:8px 'Segoe UI',Arial,sans-serif;fill:#9eaeaeb3;letter-spacing:.5px}.army-marker{pointer-events:none}.army-marker text{font:bold 15px Georgia;fill:#eff3e8}.army-marker .army-count{font:10px Georgia;fill:#eff3e8}.star-label{font:8px 'Segoe UI',Arial,sans-serif;fill:#b9c9c595}.star-dot{fill:#f7efd5;opacity:.7}.atlas-grid{stroke:#7099a4;stroke-opacity:.15;stroke-width:1}.atlas-label{font:11px 'Segoe UI',Arial,sans-serif;fill:#bbc8c6}.atlas-axis{font:9px 'Segoe UI',Arial,sans-serif;fill:#657f88}dialog{border:1px solid #75664f;background:#171d21;color:var(--text);padding:24px;width:min(530px,94vw);max-height:90vh;box-shadow:0 25px 100px #000b}dialog::backdrop{background:#080b0edd;backdrop-filter:blur(4px)}dialog h2{font-size:26px;line-height:1.2}dialog p{margin:14px 0;font-size:12px;color:#abb4b6;line-height:1.8}dialog .small{font-size:10px}.wide-dialog{width:min(1080px,94vw)}.dialog-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding-bottom:19px;border-bottom:1px solid #46413a}.dialog-heading .eyebrow{margin:0 0 8px}.close-button{font-size:26px;color:var(--muted);line-height:1;padding:0 4px}.close-button:hover{color:var(--gold)}.hero-controls{display:flex;gap:20px;margin:20px 0}.hero-controls label{width:220px}.hero-controls p{margin-top:27px;margin-left:auto}.hero-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:15px;margin:15px 0}.hero-card{padding:0;display:block;text-align:left;border:1px solid #4c4740;background:#12181c;position:relative}.hero-card:hover{border-color:var(--gold);transform:translateY(-2px)}.hero-card img{height:215px;width:100%;object-fit:cover;object-position:center 25%;filter:saturate(.7)}.hero-card-body{padding:13px}.hero-card .eyebrow{font-size:8px;color:var(--faction)}.hero-card h3{font-size:18px;margin-top:6px;line-height:1.2}.hero-card .rank{font-size:9px;color:var(--muted);margin-top:6px}.hero-card-number{position:absolute;top:10px;right:10px;border:1px solid #bdab8280;background:#111a20b5;padding:3px 5px;font-family:var(--font);font-size:10px;color:#d0bb95}.hero-detail-portrait{width:100%;max-height:350px;object-fit:cover;object-position:center 28%;margin:17px 0}#hero-detail h2{font-size:28px}#hero-detail blockquote{margin:18px 0;font:italic 19px var(--font);color:var(--gold)}.atlas-map{background:#0c171c;border:1px solid #3d4e50;margin:18px 0}.atlas-map svg{width:100%;display:block}.star-table{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;font-size:10px}.star-table div{padding:9px;border:1px solid #2f3d41}.star-table a{display:block;margin-bottom:4px}.setting-row{display:flex;align-items:center;justify-content:space-between;padding:16px 0;border-bottom:1px solid #303b3f;font-size:12px;color:#c3cac8}.setting-row select{width:150px;margin:0}.setting-row input[type=range]{width:150px;accent-color:var(--gold)}input[type=checkbox]{accent-color:var(--gold)}.full-width{width:100%}.rules{padding-left:21px;font-size:12px;color:#b2bdbc}.rules li{padding:9px 0;line-height:1.8}.rules strong{color:#d7c39b}.ending-dialog{width:min(800px,94vw);text-align:center;padding:55px 25px;background:#101416f7}.ending-dialog::backdrop{background:#010204cc;backdrop-filter:grayscale(1) blur(3px)}.ending-dialog h2{font:48px var(--font);color:#b65246;margin:30px 0 15px;letter-spacing:5px}.ending-dialog .ending-note{font-size:10px;color:#737f84;letter-spacing:1px}.ending-dialog p{font-size:13px}.ending-actions{margin-top:30px;display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.ending-dialog.crime h2{font:bold 68px Impact,'Arial Narrow',sans-serif;color:#c64438;letter-spacing:1px;text-shadow:3px 3px #050505}.ending-dialog.crime3d h2{font:bold 57px Georgia;color:#b2c2b3;text-shadow:2px 3px #050505;letter-spacing:-1px}.ending-dialog.crimehd h2{font:bold 60px 'Arial Narrow',Arial,sans-serif;background:#2c2c2c91;padding:12px 0;letter-spacing:-2px;color:#c35f54}.ending-dialog.souls h2{font:57px 'Times New Roman',serif;color:#94372d;letter-spacing:7px;text-shadow:0 0 10px #b2222230}.ending-dialog.pixel{background:#362927;image-rendering:pixelated;border:4px solid #6c5550}.ending-dialog.pixel h2{font:bold 45px 'Courier New',monospace;letter-spacing:-3px;color:#eee;text-shadow:3px 3px #302324}.ending-dialog.pixel .primary{background:#767676;border-color:#ddd;box-shadow:inset 3px 3px #aaa,inset -3px -3px #404040;color:white}.ending-dialog.retro h2{font:bold 46px 'Courier New',monospace;letter-spacing:7px;color:#a2aa83}.ending-dialog.stealth h2{font:38px 'Courier New',monospace;letter-spacing:3px;color:#b0bbc0}.ending-dialog.victory h2{color:var(--gold);font-size:45px}.toast{position:fixed;left:50%;bottom:25px;transform:translateX(-50%);background:#233038;border:1px solid #79715e;padding:12px 20px;color:#d4dccf;font-size:12px;z-index:20;box-shadow:0 5px 30px #000a}
html[data-theme=chaos]{--gold:#dc9566;--accent:#b35b36;--accent-dark:#673b2e;--line:#513931;--panel:#201715df;--map-bg:#271717}html[data-theme=chaos] .ambient-bg{background:linear-gradient(180deg,#270f0ecb,#160f0ff2),url('assets/bridge.webp') center top/cover;filter:sepia(.6)}html[data-theme=chaos] .primary{background:#b55e3c;border-color:#d5845b;box-shadow:inset 0 0 0 3px #934529;color:#f0d7b8}html[data-theme=atlas]{--gold:#94bcc5;--accent:#77a5ad;--accent-dark:#3b606a;--line:#3a5159;--panel:#112027e0;--map-bg:#10252e}html[data-theme=atlas] .ambient-bg{opacity:.55}html[data-theme=atlas] .primary{background:#86aeb6;border-color:#b2ced2;box-shadow:inset 0 0 0 3px #6d929c}
@media(min-width:1500px){.menu-layout{grid-template-columns:430px minmax(0,1fr)}.preview-map{height:345px}.battle-layout{grid-template-columns:230px minmax(0,1fr) 230px}.battle-map{height:510px}.menu-intro h1{font-size:51px}}
@media(max-width:1150px){.topbar{gap:15px;padding:16px 3%}.topbar nav{gap:18px}.brand{font-size:11px}.header-actions{gap:6px}.icon-button{font-size:9px;padding:8px}main{padding:0 3%}.menu-layout{grid-template-columns:340px minmax(0,1fr);gap:15px}.faction-button{font-size:9px}.battle-layout{grid-template-columns:185px minmax(0,1fr)}.intel-panel{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr}.intel-panel .sidebar-quote{display:none}.planet-illustration{display:none}.battle-map{height:440px}.menu-intro h1{font-size:38px}.preview-title h2{font-size:21px}.status-dot{font-size:7px}.theme-strip>.small{display:none}.hero-card img{height:175px}}
@media(max-width:760px){.topbar{flex-wrap:wrap;padding:14px 5%;gap:14px}.brand{font-size:11px}.brand small{font-size:7px}.brand-seal{font-size:22px}.topbar nav{order:3;width:100%;gap:27px}.nav-button{padding:3px 0 7px;font-size:11px}.nav-button.active:after{bottom:-14px}.header-actions{margin-left:auto}.icon-button{font-size:8px;padding:7px}.menu-intro{padding:28px 0 22px}.menu-intro h1{font-size:35px}.intro-copy{position:static;margin-top:15px;font-size:14px}.menu-layout{grid-template-columns:1fr}.sector-preview{grid-row:1}.preview-title{padding:14px 18px 0}.preview-map{height:240px}.preview-bottom{display:none}.panel-heading{padding:14px 18px}.map-caption{padding:0 18px 14px;font-size:7px}.faction-list{grid-template-columns:repeat(3,1fr);min-height:100px}.faction-button{font-size:10px;min-height:47px;padding:8px 6px}.faction-symbol{width:18px;font-size:11px}.faction-description{min-height:80px}.theme-strip{display:block;margin:22px 0}.theme-options{margin-top:15px;gap:20px}.game-heading{align-items:flex-start;gap:10px}.game-heading h1{font-size:20px}.game-tools{flex-direction:column}.game-tools .secondary{font-size:9px;padding:7px}.battle-layout{grid-template-columns:1fr;gap:12px}.battle-board{grid-row:1}.battle-map{height:360px}.command-panel{display:grid;grid-template-columns:110px 1fr}.command-panel .panel-heading{grid-column:1/-1}.commander-portrait{grid-row:2/4;height:150px}.commander-portrait span{font-size:7px;left:7px}.commander-copy{padding:10px 13px}.commander-copy h2{font-size:17px}.turn-card{padding:9px 13px;display:grid;grid-template-columns:1fr auto;gap:5px}.reinforcement{gap:7px;margin:0}.reinforcement strong{font-size:29px}.reinforcement span{font-size:8px}.turn-card>.eyebrow{grid-column:1/-1}.turn-card .primary{grid-column:2;grid-row:2;padding:9px;font-size:8px}.turn-card #reserve-count{margin:0;grid-column:1/-1;font-size:8px}.scoreboard{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:0 15px;padding:9px 12px}.score-row{font-size:8px}.intel-panel{grid-column:auto;grid-template-columns:1fr 1fr;gap:10px}.territory-copy h2{font-size:16px}.log-panel ol{max-height:170px}.hero-grid{grid-template-columns:1fr 1fr;gap:10px}.hero-card img{height:190px}.hero-card h3{font-size:16px}.hero-controls{flex-wrap:wrap;gap:10px}.hero-controls label{width:calc(50% - 5px)}.hero-controls p{margin:0}.star-table{grid-template-columns:1fr 1fr}dialog{padding:20px 16px}dialog h2{font-size:23px}.ending-dialog h2,.ending-dialog.crime h2,.ending-dialog.crimehd h2,.ending-dialog.souls h2{font-size:38px;letter-spacing:2px}.ending-dialog{padding:35px 18px}footer{padding:17px 5%;flex-wrap:wrap;font-size:7px}footer>span:last-child{display:none}.board-top{gap:10px}.board-top>.small{font-size:8px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}.hero-card:hover{transform:none}}
.faction-list{max-height:171px;overflow:auto}.ending-dialog.london h2{color:#ccc5b4}.ending-dialog.gta2 h2{color:#cbae62}.ending-dialog.vice h2{color:#db94b4;font-style:italic}.ending-dialog.san h2{color:#d9dbd6;font-weight:bold;letter-spacing:-3px;text-shadow:2px 3px #000}.ending-dialog.advance h2{color:#c06453;font-size:39px}.ending-dialog.liberty h2{color:#afbfcc}.ending-dialog.vice-stories h2{color:#dab66a}.ending-dialog.iv h2{color:#d3d6d6;font-weight:400}.ending-dialog.episodes h2{color:#cba970}.ending-dialog.chinatown h2{color:#c8b382;letter-spacing:2px}.ending-dialog.online h2{color:#bdbdbd}@media(max-width:760px){.faction-list{max-height:160px}}
.army-marker .army-count{font:bold 15px Georgia}.board-top #zoom-button{margin-left:auto}.board-top #map-stars-button{margin-left:0}.battle-map.zoomed{overflow:auto}.battle-map.zoomed svg{width:135%;min-width:730px;height:auto}@media(max-width:760px){.board-top{gap:7px;padding:12px 10px}.board-top>.small{display:none}.army-marker .army-count{font-size:23px}.army-marker .count-disc{r:17px}.battle-map.zoomed svg{width:730px;height:488px}}
.region-shape{stroke-width:1.8}.region-shape.player-owned{stroke-width:2.6}.region-shape.selected{stroke:#fff;stroke-width:4;filter:brightness(1.25)}.region-shape.target{stroke:#fff;stroke-width:2.8}.army-marker .your-label{font:bold 11px Arial;fill:#102f50}.score-row{font-size:11px}.score-row .score-color{width:11px;height:11px}.score-row.current{font-weight:600}.score-row em{color:#ffe2a0;font-weight:700}.map-label{fill:#d2dad2b0}.in-game .ambient-bg{background:linear-gradient(#070d16e6,#070d16ef),url("assets/galaxy-atlas.svg") center/cover}.battle-board{background:#080e17}.map-container{background:#080e17}.star-label{fill:#e4eaddc0;paint-order:stroke;stroke:#080d14;stroke-width:2px}.atlas-label{fill:#f6eee0;paint-order:stroke;stroke:#080d14;stroke-width:2px}.map-credit{font-size:8px;color:#8da0ae;padding:8px 16px;border-top:1px solid #35414a}.map-credit a{color:#afc3d3}@media(max-width:760px){.army-marker .your-label{font-size:15px}.region-shape.player-owned{stroke-width:3}.score-row{font-size:10px}}
.ending-dialog{width:100vw;max-width:100vw;height:100vh;max-height:100vh;margin:0;padding:0;border:0;background:transparent;box-shadow:none;overflow:hidden}.ending-dialog::backdrop{background:#03070d77;backdrop-filter:grayscale(1) brightness(.45)}#ending-content{position:absolute;left:0;right:0;top:35%;padding:25px 20px;text-align:center;background:linear-gradient(90deg,transparent,#04070ba8 18%,#04070ba8 82%,transparent);animation:ending-arrive .6s ease-out}.ending-dialog h2{margin:0;font-size:clamp(36px,7vw,92px)}.ending-dialog p{margin:10px 0 0}.ending-dialog .ending-note{font-size:10px;opacity:.7;letter-spacing:1.5px;margin-top:16px}.ending-dialog .ending-subtitle{color:#b4bdc0;font-size:12px}.ending-actions{position:absolute;left:20px;right:20px;bottom:15vh;margin:0;z-index:2}.ending-selector{position:absolute;top:22px;right:24px;z-index:3;width:250px;text-align:left;font-size:8px;letter-spacing:1px}.ending-selector select{background:#0e151de0;color:#bbb;border-color:#4f565c}.ending-dialog.crime h2{font-size:clamp(52px,9vw,118px);color:#bd3e36;text-shadow:3px 4px #050505;letter-spacing:-3px}.ending-dialog.crimehd h2{font-size:clamp(50px,8vw,105px);color:#b05753;background:transparent;letter-spacing:-3px;line-height:1}.ending-dialog.crime3d h2{font-size:clamp(50px,8vw,105px);letter-spacing:-2px}.ending-dialog.souls::backdrop{background:#03070b70;backdrop-filter:sepia(.2) brightness(.35)}.ending-dialog.souls h2{font-size:clamp(38px,7vw,90px);letter-spacing:8px;color:#9e372b;font-weight:400;text-shadow:0 0 12px #76231c88}.ending-dialog.souls .ending-subtitle{opacity:0;transition:opacity 1s}.ending-dialog.souls:hover .ending-subtitle{opacity:.7}.ending-dialog.pixel{background:transparent;border:0}.ending-dialog.pixel::backdrop{background:#631b249e;backdrop-filter:brightness(.55)}.ending-dialog.pixel #ending-content{top:24%;background:none}.ending-dialog.pixel h2{font:700 clamp(29px,5vw,57px) 'Courier New',monospace;color:white;text-shadow:4px 4px #301518;letter-spacing:-3px}.ending-dialog.pixel .ending-subtitle{font-family:'Courier New',monospace;color:#fff;font-size:14px}.ending-dialog .pixel-score{color:#fff;font:16px 'Courier New',monospace}.pixel-score strong{color:#f1dc52;font-weight:400}.ending-dialog.pixel .ending-actions{top:53%;bottom:auto;left:50%;right:auto;transform:translateX(-50%);width:min(360px,85vw);display:flex;flex-direction:column;gap:10px}.ending-dialog.pixel .primary,.ending-dialog.pixel .secondary{background:#777;border:2px solid #242424;box-shadow:inset 2px 2px #b7b7b7,inset -2px -2px #424242;color:#fff;text-shadow:2px 2px #343434;font:14px 'Courier New',monospace;letter-spacing:0}.ending-dialog.pixel .secondary:hover{background:#8d8b98}.ending-dialog.victory::backdrop{background:#050a1266;backdrop-filter:brightness(.45)}.ending-dialog.victory h2{color:#e0c17e;font-size:clamp(35px,6.5vw,86px);letter-spacing:3px;text-shadow:0 0 20px #9e661c50}.ending-dialog.mission h2{font-family:Impact,'Arial Narrow',sans-serif;color:#d6aa60;letter-spacing:0}.ending-dialog.mission .ending-subtitle{font-family:Impact,Arial,sans-serif;color:#fff;font-size:25px}.ending-dialog.souls-win h2{font-family:'Times New Roman',serif;color:#d0b56b;font-size:clamp(34px,6vw,76px);letter-spacing:5px}#celebration-canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}.ending-dialog #ending-content{z-index:2;pointer-events:none}.ending-dialog .ending-actions{background:#07101baa;padding:12px;margin:0 auto;max-width:620px;left:0;right:0}.ending-dialog.pixel .ending-actions{left:50%;right:auto;background:none}.ending-dialog .ending-actions button{pointer-events:auto}.ending-dialog .ending-actions .text-button{padding:10px;color:#bfcbd0}@keyframes ending-arrive{from{opacity:0;transform:scale(1.03)}to{opacity:1;transform:scale(1)}}@media(prefers-reduced-motion:reduce){#ending-content{animation:none!important}}@media(max-width:760px){.ending-actions{bottom:10vh}.ending-selector{width:210px;right:16px;top:16px}.ending-dialog .ending-actions{max-width:90vw;flex-wrap:wrap}.ending-dialog.souls h2{letter-spacing:3px}.ending-dialog.crime h2,.ending-dialog.crimehd h2{letter-spacing:-2px}}
@font-face{font-family:PressStart;src:url("assets/fonts/PressStart2P-Regular.ttf") format("truetype");font-display:swap}.ending-dialog.pixel h2{font-family:PressStart,monospace;font-size:clamp(25px,3.7vw,48px);letter-spacing:0}.ending-dialog.pixel .ending-subtitle,.ending-dialog .pixel-score,.ending-dialog.pixel .primary,.ending-dialog.pixel .secondary{font-family:PressStart,monospace;font-size:10px;line-height:1.9}.ending-dialog.pixel .pixel-score{font-size:12px}.sector-location-panel svg{display:block;width:100%;height:auto}.sector-location-panel p{font-size:10px;color:var(--gold);padding:8px 14px}.in-game .ambient-bg{background:linear-gradient(#070d16eb,#070d16f2),url("assets/galaxy-atlas.svg") center/cover}.preview-title h2{font-size:22px}.star-table strong{color:#d7c398;font-weight:400}@media(max-width:1150px){.sector-location-panel{grid-column:1/-1;display:grid;grid-template-columns:1fr 170px}.sector-location-panel .panel-heading{grid-row:1/3}.sector-location-panel p{grid-column:1}.sector-location-panel #sector-location-map{grid-column:2;grid-row:1/3}}
.ending-dialog.crimehd h2{font-family:Impact,"Arial Narrow",sans-serif;font-weight:400;letter-spacing:0}.ending-dialog.iv h2{font-family:"Arial Narrow",Arial,sans-serif;font-weight:400}.ending-dialog.souls .ending-subtitle{visibility:hidden}.ending-dialog.souls-win .ending-subtitle{visibility:hidden}

.battle-board{min-width:0}
.map-art{width:100%;height:100%}.map-feedback{position:absolute;top:0;left:0;pointer-events:none;z-index:1}
.roll-pools{display:flex;align-items:center;gap:13px;margin-top:12px;flex-wrap:wrap}.roll-pools>div{display:flex;gap:4px}.rolling-die{display:inline-block;color:#e3cf9d;font-size:26px;line-height:1.1;animation:dice-tumble var(--roll-duration,.3s) ease-in-out;animation-delay:calc(var(--die-n)*-25ms)}.roll-pools small{color:#91a4af;font-size:9px}.reinforcement-pop{fill:#ffe2a0;paint-order:stroke;stroke:#07111b;stroke-width:3px;font:bold 19px Georgia;text-anchor:middle;pointer-events:none}.battle-event{position:absolute;z-index:2;left:20px;right:20px;top:95px;padding:8px 13px;border:1px solid #8a794e;background:#101b25ed;color:#e3cca0;font-size:10px;text-align:center;pointer-events:none}.ending-dialog #ending-content{animation-duration:var(--ending-duration,.6s)}.ending-dialog h2{animation:ending-title var(--ending-duration,.6s) ease-out}.ending-dialog.souls h2,.ending-dialog.souls-win h2{animation-name:souls-title}.ending-dialog.pixel h2{animation-name:pixel-title}.ending-dialog.retro h2{animation:retro-title var(--ending-duration,.6s) steps(4)}.ending-dialog.stealth #ending-content{border-top:1px solid #67808e;border-bottom:1px solid #67808e}.ending-dialog.stealth h2{animation-name:signal-title}@keyframes dice-tumble{0%{transform:translateY(0) rotate(-20deg)}35%{transform:translateY(-7px) rotate(95deg)}70%{transform:translateY(2px) rotate(190deg)}100%{transform:translateY(0) rotate(360deg)}}@keyframes ending-title{from{opacity:0;transform:scale(1.04)}to{opacity:1;transform:scale(1)}}@keyframes souls-title{from{opacity:0;filter:blur(3px)}to{opacity:1;filter:blur(0)}}@keyframes pixel-title{from{opacity:0;transform:translateY(-7px)}to{opacity:1;transform:translateY(0)}}@keyframes retro-title{0%,35%,70%{opacity:0}20%,50%,100%{opacity:1}}@keyframes signal-title{from{opacity:0;transform:translateX(-4px)}to{opacity:1;transform:translateX(0)}}@media(prefers-reduced-motion:reduce){html:not([data-motion=full]) .ending-dialog h2,html:not([data-motion=full]) .rolling-die{animation:none!important}}@media(max-width:760px){.rolling-die{font-size:21px}.roll-pools{gap:8px}.battle-event{left:12px;right:12px;font-size:9px}}
.heroes-view{padding:35px 0 28px}.heroes-view h1{font-size:32px;line-height:1.2}.hero-summary{font-size:10px;color:#9baab1;line-height:1.55;margin:10px 0 0}.hero-card{height:100%}.hero-card-body{min-height:143px}.heroes-view .hero-controls{padding:0}.heroes-view .hero-card img{height:290px}@media(max-width:760px){.heroes-view h1{font-size:23px}.heroes-view .hero-card img{height:205px}.hero-card-body{min-height:165px}.hero-summary{font-size:9px}}
.seed-control{display:flex;align-items:center;gap:10px;padding:12px 25px;flex-wrap:wrap}.seed-control input{width:135px;border:1px solid #46545c;background:#0a141d;color:#ddd2b9;padding:6px 9px;font-size:11px}.seed-control .small{flex-basis:100%;font-size:9px}.turn-queue{display:flex;gap:7px;overflow:auto;padding:7px 14px;border-bottom:1px solid #35404a;color:#91a3ad;background:#0c1620}.turn-queue span{font-size:8px;white-space:nowrap;flex-shrink:0}.turn-queue .current{color:#ffe2a0}.turn-queue .dead{opacity:.3;text-decoration:line-through}.score-row strong{min-width:20px;text-align:right}.score-row strong small{display:block;color:#8999a2;font:7px Arial}.board-top .status-dot{max-width:65%;overflow:hidden;text-overflow:ellipsis}.sector-preview{align-self:start}@media(max-width:760px){.seed-control{padding:10px 18px}.turn-queue span{font-size:8px}}

/* Readable controls and a full-width tactical table. Scale affects the game, not the browser. */
:root{--ui-scale:1}
:root[data-ui-scale="1.25"]{--ui-scale:1.25}
:root[data-ui-scale="1.5"]{--ui-scale:1.5}
@media(min-width:2200px){:root[data-ui-scale="auto"]{--ui-scale:1.25}}
body{font-size:calc(15px * var(--ui-scale))}
.eyebrow,.small,.panel-heading>.muted,.map-caption,.seed-control .small,footer,footer .text-button{font-size:calc(12px * var(--ui-scale));letter-spacing:.8px}
.nav-button,.icon-button,.primary,.secondary,.text-button,.faction-button,.group-tabs button,.theme-options button,label,select,input[type=search],.seed-control input,.opponent-picker{font-size:calc(13px * var(--ui-scale))}
.faction-description p,.preview-bottom p:not(.eyebrow),.setting-row,.rules,.hero-summary,.hero-card p,.hero-controls p{font-size:calc(14px * var(--ui-scale))}
.faction-list{max-height:260px}.faction-button{min-height:58px}
.setup-fields{gap:12px}.setup-fields select{min-height:44px}
.menu-layout{grid-template-columns:calc(430px * var(--ui-scale)) minmax(0,1fr)}
main,footer{max-width:1880px}.preview-map{height:370px}.preview-bottom{height:170px}
.opponent-actions{display:flex;gap:18px;margin:12px 0}.opponent-actions button{min-height:32px}
#opponent-list{max-height:245px;gap:8px}#opponent-list label{font-size:calc(12px * var(--ui-scale));min-height:32px}
input[type=checkbox]{width:18px;height:18px;accent-color:var(--gold);flex-shrink:0}
.match-mode{margin:14px 20px 0;font-size:calc(12px * var(--ui-scale));color:#d3b980}
dialog:not(.ending-dialog){width:min(680px,94vw);max-height:92dvh}.setting-row{gap:16px;padding:16px 0}.setting-row select{min-width:160px}.setting-row input[type=range]{min-width:150px}
.in-game main{max-width:none;padding:0 clamp(16px,2.2vw,56px)}
.game-heading{gap:20px;padding:20px 0;flex-wrap:wrap}.game-heading h1{font-size:calc(30px * var(--ui-scale))}
.game-tools{gap:10px;align-items:center;flex-wrap:wrap}
.in-game .topbar{min-height:0;padding:0;border:0;background:none;gap:12px}
.in-game .topbar .brand,.in-game #campaign-button{display:none}
.in-game .topbar nav{gap:12px;align-self:center}.in-game .nav-button{padding:10px 6px}.in-game .nav-button.active:after{display:none}
.in-game .header-actions{gap:10px}.in-game .icon-button{padding:10px 12px}
.battle-layout{grid-template-columns:calc(245px * var(--ui-scale)) minmax(0,1fr) calc(230px * var(--ui-scale));gap:18px;align-items:start}
.battle-board{border:2px solid #726047;box-shadow:inset 0 0 0 3px #16130f,0 6px 24px #0008;background:#0b1015}
.battle-board:before,.battle-board:after{width:12px;height:12px;border-color:#c1a36a}
.battle-map{height:auto;aspect-ratio:880/588;min-height:440px;max-height:calc(100dvh - 240px);background:#080d13}
.battle-map.zoomed{height:calc(100dvh - 240px);aspect-ratio:auto;min-height:440px}.battle-map.zoomed .map-art{min-height:100%}
.board-top{gap:14px;flex-wrap:wrap;padding:14px 18px}.board-top .status-dot,.board-top>.small{font-size:calc(12px * var(--ui-scale))}.board-top .status-dot{max-width:100%}
.turn-queue{padding:10px 16px}.turn-queue span{font-size:calc(12px * var(--ui-scale))}
.map-instructions,.combat-result p,.roll-pools small,.battle-event{font-size:calc(14px * var(--ui-scale))}.combat-result{min-height:88px;padding:14px 18px}.dice-pip{width:26px;height:26px;font-size:16px}
.command-panel .panel-heading,.sector-location-panel .panel-heading,.territory-panel .panel-heading{padding:14px 16px}
.commander-portrait{height:calc(270px * var(--ui-scale));background:#080d12}.commander-portrait img{object-fit:contain;object-position:center;filter:none}.commander-portrait:after{background:linear-gradient(0deg,#080d12dd,transparent 20%)}
.commander-portrait span{font-size:calc(11px * var(--ui-scale));left:14px;right:12px;letter-spacing:.7px}
.commander-copy h2{font-size:calc(24px * var(--ui-scale))}.commander-copy p{font-size:calc(13px * var(--ui-scale))}
.turn-card{padding:16px}.reinforcement span{font-size:calc(13px * var(--ui-scale))}.reinforcement strong{font-size:calc(45px * var(--ui-scale))}.turn-card .primary{font-size:calc(12px * var(--ui-scale));padding:14px 9px}#reserve-count{font-size:calc(13px * var(--ui-scale))}
.scoreboard{max-height:calc(400px * var(--ui-scale));overflow:auto;padding:10px 14px}.score-row{font-size:calc(13px * var(--ui-scale));gap:8px;min-height:44px}.score-row strong{font-size:calc(17px * var(--ui-scale))}.score-row strong small,.score-row em{font-size:calc(10px * var(--ui-scale))}
.territory-copy h2{font-size:calc(24px * var(--ui-scale))}.territory-copy p,.territory-copy dl,.sector-location-panel p{font-size:calc(14px * var(--ui-scale))}.territory-copy dt,.territory-copy dd{font-size:calc(13px * var(--ui-scale))}.sector-location-panel p{padding:12px 16px}
.region-shape{stroke:none;stroke-dasharray:none;stroke-linejoin:round}.region-shape.player-owned,.region-shape.selected,.region-shape.target{stroke:none;stroke-dasharray:none}.region-shape:focus{stroke:#fff4d2;stroke-width:3;filter:brightness(1.2)}
.region-underlines,.region-outlines,.ownership-outlines,.action-outlines{fill:none;pointer-events:none;stroke-linejoin:round}
.region-underlines{stroke:#04080c;stroke-width:5}.region-outlines{stroke-width:1.65;stroke-opacity:.92}.ownership-outlines{stroke:#ffe2a0;stroke-width:2.6}.action-outlines{stroke:#fff3cc;stroke-width:3.3}.action-outlines .target{stroke:#fff;stroke-width:2.5}.cell-grid{stroke-opacity:.045}
.in-game .ambient-bg{background:linear-gradient(#080b10ed,#080b10f2),url('assets/galaxy-nebula.webp') center/cover}
.army-marker .army-count{font:bold 23px 'Segoe UI',Arial,sans-serif;fill:#f7eedc}.army-marker .token-symbol{font:bold 8px 'Segoe UI',Arial,sans-serif;fill:#fff;paint-order:stroke;stroke:#081018;stroke-width:.5px}
.army-marker.your-army .army-count{fill:#ffe2a0}.garrison-token{filter:drop-shadow(0 2px 2px #000b)}
.portrait-peek img{object-fit:contain;height:100%;object-position:center;background:#080d12;filter:none}.heroes-view .hero-card img{height:330px;object-fit:contain;object-position:center;background:#080d12}.hero-detail-portrait{object-fit:contain;object-position:center;background:#080d12;max-height:500px}
@media(max-width:1400px){.battle-layout{grid-template-columns:calc(225px * var(--ui-scale)) minmax(0,1fr)}.intel-panel{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:18px}.sector-location-panel{grid-column:auto;display:grid;grid-template-columns:1fr 160px}.sector-location-panel #sector-location-map{grid-column:2;grid-row:1/3}.sector-location-panel p{grid-column:1}.sector-location-panel .panel-heading{grid-row:auto}.game-heading h1{font-size:28px}.menu-layout{grid-template-columns:390px minmax(0,1fr)}}
@media(max-width:760px){:root{--ui-scale:1!important}.menu-layout{grid-template-columns:1fr}.preview-map{height:290px}.menu-intro h1{font-size:35px}.faction-button{font-size:12px}.faction-list{max-height:225px}.topbar{gap:12px}.topbar nav{gap:20px}.brand{font-size:12px}.brand small{font-size:9px}.icon-button{font-size:11px}.small,.eyebrow,.map-caption{font-size:11px}.game-heading{gap:12px;padding:18px 0 12px}.game-heading h1{font-size:25px}.game-tools{flex-direction:row;width:100%;gap:8px}.game-tools .secondary{font-size:12px;padding:10px}.in-game .topbar{width:100%;justify-content:space-between;flex-wrap:wrap}.in-game .topbar nav{width:auto;order:0;gap:10px}.in-game .nav-button{font-size:12px;padding:8px 0}.in-game .icon-button{font-size:11px;padding:8px}.battle-layout{grid-template-columns:1fr;gap:12px}.battle-board{grid-row:1}.battle-map{height:330px;aspect-ratio:auto;min-height:0;max-height:none}.battle-map.zoomed{height:440px;min-height:0;max-height:none}.board-top{gap:10px;padding:12px}.board-top .status-dot{font-size:11px}.board-top>.small{display:none}.board-top .text-button{font-size:12px}.turn-queue span{font-size:11px}.map-instructions,.combat-result p{font-size:13px}.command-panel{grid-template-columns:115px minmax(0,1fr)}.commander-portrait{height:210px;grid-row:2/4}.commander-portrait span{font-size:9px;left:6px}.commander-copy h2{font-size:21px}.commander-copy p{font-size:12px}.turn-card{padding:12px}.turn-card .primary{font-size:11px;padding:12px 6px}.reinforcement strong{font-size:35px}.reinforcement span{font-size:11px}#reserve-count{font-size:11px}.scoreboard{max-height:310px}.score-row{font-size:12px;min-height:44px}.score-row strong{font-size:16px}.intel-panel{grid-template-columns:1fr;gap:12px}.sector-location-panel{grid-template-columns:1fr 135px}.heroes-view .hero-card img{height:240px}.hero-summary{font-size:12px}.setting-row{font-size:13px;gap:8px}.setting-row select{min-width:130px;max-width:165px}.setting-row input[type=range]{min-width:110px}.seed-control .small{font-size:11px}.ending-dialog .ending-actions button{font-size:12px}}

/* Battle controls live in the side column; the desktop board uses the whole viewport. */
.game-heading{margin:0;padding:16px;display:flex;flex-direction:column;align-items:stretch;gap:16px}
.game-heading h1{font-size:calc(23px * var(--ui-scale));line-height:1.2}.game-heading .eyebrow{font-size:calc(11px * var(--ui-scale));line-height:1.6}
.game-tools{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}.game-tools .secondary{font-size:calc(12px * var(--ui-scale));padding:10px 5px}
.in-game .topbar{display:block;grid-column:1/-1;width:100%}.in-game .topbar nav,.in-game .header-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px;order:0;width:100%}.in-game .nav-button,.in-game .icon-button{font-size:calc(12px * var(--ui-scale));padding:10px 3px;white-space:normal}.in-game .nav-button{border:1px solid #44483f}
@media(min-width:1201px){
  body.in-game{overflow:hidden}.in-game main{height:100dvh;padding:12px clamp(16px,2vw,52px)}.in-game #game-view{height:100%}.in-game footer{display:none}
  .battle-layout{height:100%;min-height:0;margin:0;grid-template-rows:minmax(0,1fr);grid-template-columns:calc(235px * var(--ui-scale)) minmax(0,1fr) calc(230px * var(--ui-scale));gap:16px}
  .battle-board{height:100%;min-height:0;display:flex;flex-direction:column}.battle-board>*{flex-shrink:0}
  .battle-map,.battle-map.zoomed{height:0;flex:1;aspect-ratio:auto;max-height:none;min-height:0}
  .command-panel{height:100%;max-height:100%;display:flex;flex-direction:column;overflow:hidden}.command-panel>*{flex-shrink:0}
  .commander-portrait{flex:0 1 calc(270px * var(--ui-scale));min-height:130px}.scoreboard{flex:1;min-height:0;max-height:none;overflow:auto}
  .intel-panel{height:100%;min-height:0;display:flex;flex-direction:column;overflow:auto;gap:14px;grid-column:auto}.intel-panel>section{flex-shrink:0}
  .sector-location-panel{display:block}.sector-location-panel #sector-location-map{display:block}.sector-location-panel p{padding:10px 14px}
  .combat-result{min-height:85px}.map-instructions{padding:10px 14px}
}
@media(max-width:1200px){.game-heading{grid-column:1/-1}.intel-panel{grid-template-columns:1fr 1fr}}
@media(max-width:760px){.intel-panel{grid-template-columns:1fr}.game-heading{padding:14px;gap:12px}.game-heading h1{font-size:23px}.game-tools .secondary,.in-game .nav-button,.in-game .icon-button{font-size:12px}.game-heading .eyebrow{font-size:11px}}
.command-panel .game-heading{border-bottom:1px solid #45403a;padding:14px 16px;gap:0}.command-panel .game-heading h1{margin-top:8px}.game-controls{padding:14px}.combat-panel .panel-heading{padding:14px 16px}.combat-panel .combat-result{border-top:0;min-height:0;padding:14px 16px}
.roll-side{margin-top:14px;padding-bottom:12px;border-bottom:1px solid #3f4545}.combat-result .side-name{font-size:calc(13px * var(--ui-scale));color:#ded9cf;display:flex;gap:8px;align-items:center;line-height:1.4}.side-name .score-color{display:block;width:10px;height:10px;background:var(--faction);flex-shrink:0}.roll-pool{display:flex;gap:4px;flex-wrap:wrap;margin:10px 0}.roll-pool .rolling-die,.settled-die{font-size:calc(29px * var(--ui-scale));color:#e3cf9d;line-height:1.15}.roll-total{display:flex;gap:10px;align-items:center;justify-content:space-between;font-size:calc(13px * var(--ui-scale));color:#a9b2b4}.roll-total strong{font:calc(30px * var(--ui-scale)) Georgia;color:#eee1bd}.combat-result .combat-outcome{font-size:calc(14px * var(--ui-scale));color:var(--gold);margin-top:14px}
.map-art{position:relative}.map-container .sector-sky{position:absolute;inset:0;pointer-events:none}.sector-terrain{position:relative}
.preview-bottom{height:auto;min-height:210px;padding:18px 24px;align-items:center}.portrait-peek{width:150px;border:0}.portrait-peek img{height:auto;object-fit:initial}.portrait-peek:after{background:linear-gradient(0deg,#080d12aa,transparent 30%)}
.heroes-view .hero-card img{width:100%;height:auto;object-fit:initial;background:none;image-rendering:auto;filter:contrast(.94) saturate(.92)}.hero-card{height:auto;align-self:start}.hero-detail-portrait{width:auto;max-width:100%;height:auto;max-height:60dvh;margin:17px auto;object-fit:initial;background:none;filter:contrast(.94) saturate(.92)}
.commander-portrait{height:auto;aspect-ratio:3/4}.commander-portrait img{object-fit:cover;object-position:center 14%;filter:contrast(.94) saturate(.92);image-rendering:auto}
.battle-event[data-kind=elimination]{left:24px;right:24px;top:105px;margin:auto;max-width:850px;padding:18px 24px;font-size:clamp(17px,1.3vw,25px);font-weight:600;border:2px solid #d4b47a;background:#111820f5;box-shadow:0 6px 22px #0009;color:#f3ddb3}.battle-event[data-kind=elimination]:before{content:'ФРАКЦИЯ ВЫБЫЛА';display:block;font:12px 'Segoe UI',sans-serif;letter-spacing:2px;color:#ba9c65;margin-bottom:7px}
.roll-pool svg{display:block;width:calc(30px * var(--ui-scale));height:calc(30px * var(--ui-scale));flex-shrink:0}
.menu-view{max-width:1320px;margin:auto}.menu-layout{grid-template-columns:410px minmax(0,1fr)}.menu-intro{padding:24px 0 20px}.menu-intro h1{font-size:42px}.preview-map{height:auto;aspect-ratio:880/588;min-height:0;max-height:none}
.campaign-setup .theme-strip{display:block;margin:16px 20px;padding-top:16px}.campaign-setup .theme-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-top:10px}.campaign-setup .theme-options button{justify-content:center;padding:8px 6px;border:1px solid #4d4a41}.campaign-setup .theme-options .active{border-color:var(--gold)}.campaign-setup .theme-strip>.small{display:none}
@media(max-width:1100px){.menu-layout{grid-template-columns:340px minmax(0,1fr)}}
@media(max-width:760px){.menu-layout{grid-template-columns:1fr}.menu-intro h1{font-size:35px}.preview-map{height:auto;aspect-ratio:880/588}}
.menu-view{max-width:1800px}.menu-layout{grid-template-columns:410px minmax(0,1fr) 320px;gap:20px}.sector-preview,.hero-choice-panel{align-self:start;min-width:0}.hero-choice-panel>img{width:100%;height:auto;display:block;filter:contrast(.94) saturate(.92);image-rendering:auto}.commander-choice-label{padding:14px 18px 18px}.hero-choice-copy{padding:18px}.hero-choice-copy h2{font-size:25px;line-height:1.2}.hero-choice-copy p{font-size:13px;line-height:1.6;margin-top:10px;color:#aab2b4}.hero-choice-copy #menu-hero-rank{color:var(--gold)}.hero-choice-copy #hero-choice-note{font-size:12px;color:#89989e}.hero-choice-panel .panel-heading{padding:17px 16px}.hero-choice-panel .panel-heading .text-button{font-size:11px}
@media(max-width:1500px){.menu-layout{grid-template-columns:350px minmax(0,1fr) 270px;gap:16px}.hero-choice-copy h2{font-size:23px}}
@media(max-width:1200px){.menu-layout{grid-template-columns:340px minmax(0,1fr)}.campaign-setup{grid-row:1/3}.hero-choice-panel{grid-column:2}.hero-choice-panel>img{max-height:440px;object-fit:cover;object-position:center 12%}}
@media(max-width:760px){.menu-layout{grid-template-columns:1fr}.campaign-setup,.sector-preview,.hero-choice-panel{grid-row:auto;grid-column:auto}.hero-choice-panel>img{max-height:none;object-fit:initial}}
@media(min-width:1201px){.commander-portrait{flex:0 1 auto;min-height:130px}}
@media(max-width:760px){.heroes-view .hero-card img{height:auto}.portrait-peek{display:none}.battle-event[data-kind=elimination]{left:12px;right:12px;padding:14px;font-size:17px}.commander-portrait{height:210px;aspect-ratio:auto}}

/* Six real CSS 3D faces; the front face always matches the engine result. */
.roll-pool{gap:5px;padding:3px 0;overflow:visible}
.die-viewport{--die-size:calc(32px * var(--ui-scale));--die-half:calc(16px * var(--ui-scale));position:relative;display:block;width:calc(40px * var(--ui-scale));height:calc(44px * var(--ui-scale));flex-shrink:0;perspective:calc(260px * var(--ui-scale));animation:none!important}
.die-body{position:absolute;left:4px;top:5px;width:var(--die-size);height:var(--die-size);transform-style:preserve-3d;transform:rotateX(-18deg) rotateY(24deg)}
.die-cube{position:relative;display:block;width:100%;height:100%;transform-style:preserve-3d;transform:rotateX(var(--rx)) rotateY(var(--ry))}
.die-face{--face-color:#e6d8b8;position:absolute;inset:0;display:block;backface-visibility:hidden;border:1px solid #b49b70;border-radius:3px;overflow:hidden}
.roll-pool .die-face svg{width:100%;height:100%;display:block}
.face-1{transform:translateZ(var(--die-half))}.face-6{--face-color:#c2ac81;transform:rotateY(180deg) translateZ(var(--die-half))}
.face-3{--face-color:#d2bc91;transform:rotateY(90deg) translateZ(var(--die-half))}.face-4{--face-color:#d0bb94;transform:rotateY(-90deg) translateZ(var(--die-half))}
.face-2{--face-color:#f0e4c8;transform:rotateX(90deg) translateZ(var(--die-half))}.face-5{--face-color:#c5b18c;transform:rotateX(-90deg) translateZ(var(--die-half))}
.rolling-die .die-cube{animation:die-spin var(--roll-duration,700ms) cubic-bezier(.15,.55,.3,1) both}
.rolling-die .die-body{animation:die-hop var(--roll-duration,700ms) ease-out both}
@keyframes die-spin{from{transform:rotateX(calc(var(--rx) - 720deg)) rotateY(calc(var(--ry) - 1080deg)) rotateZ(-150deg)}to{transform:rotateX(var(--rx)) rotateY(var(--ry)) rotateZ(0)}}
@keyframes die-hop{0%{top:0}35%{top:-7px}70%{top:6px}100%{top:5px}}
.menu-layout>section,.setup-fields>label{min-width:0}.setup-fields{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:760px){.menu-layout{grid-template-columns:minmax(0,1fr)}.setup-fields select{min-width:0}.faction-list{grid-template-columns:repeat(2,minmax(0,1fr))}.faction-button{min-width:0}}

/* Keep three-letter faction marks clear of the divider and increase reading size. */
body{font-size:calc(17px * var(--ui-scale))}
.faction-symbol{width:calc(4ch + 10px);height:calc(26px * var(--ui-scale));font-size:calc(16px * var(--ui-scale));padding-right:10px}
.faction-button{font-size:calc(15px * var(--ui-scale));min-height:64px;line-height:1.35}.faction-button>span:last-of-type{min-width:0;overflow-wrap:normal}
.eyebrow,.small,.panel-heading>.muted,.map-caption,footer,footer .text-button{font-size:calc(14px * var(--ui-scale))}
.nav-button,.icon-button,.primary,.secondary,.text-button,.group-tabs button,.theme-options button,label,select,input[type=search],.seed-control input,.opponent-picker{font-size:calc(15px * var(--ui-scale))}
.faction-description p,.setting-row,.rules,.hero-summary,.hero-card p,.hero-controls p{font-size:calc(16px * var(--ui-scale))}
.faction-description strong{font-size:calc(19px * var(--ui-scale))}.match-mode,#opponent-list label{font-size:calc(14px * var(--ui-scale))}
.menu-intro h1{font-size:46px}.preview-title h2{font-size:29px}.hero-choice-copy h2{font-size:29px}.hero-choice-copy p{font-size:15px}.hero-choice-copy #hero-choice-note{font-size:14px}.hero-choice-panel .panel-heading .text-button{font-size:13px}
.brand{font-size:15px}.brand small{font-size:11px}.hero-card h3{font-size:22px}.hero-card .eyebrow{font-size:calc(12px * var(--ui-scale))}.hero-card .rank{font-size:calc(13px * var(--ui-scale))}
.command-panel .game-heading h1{font-size:calc(27px * var(--ui-scale))}.command-panel .game-heading .eyebrow{font-size:calc(13px * var(--ui-scale))}.commander-copy h2,.territory-copy h2{font-size:calc(28px * var(--ui-scale))}
.commander-copy p,.reinforcement span,#reserve-count,.territory-copy dt,.territory-copy dd,.roll-total{font-size:calc(15px * var(--ui-scale))}
.score-row{font-size:calc(15px * var(--ui-scale));min-height:48px}.score-row strong{font-size:calc(19px * var(--ui-scale))}.score-row strong small,.score-row em{font-size:calc(12px * var(--ui-scale))}
.game-tools .secondary,.in-game .nav-button,.in-game .icon-button,.turn-card .primary,.board-top .status-dot,.board-top>.small,.turn-queue span{font-size:calc(14px * var(--ui-scale))}
.combat-result .side-name{font-size:calc(15px * var(--ui-scale))}.combat-result .combat-outcome,.map-instructions,.territory-copy p,.sector-location-panel p{font-size:calc(16px * var(--ui-scale))}.roll-total strong{font-size:calc(32px * var(--ui-scale))}
dialog h2{font-size:30px}dialog p{font-size:14px}.army-marker .army-count{font-size:25px}.star-label,.map-label{font-size:10px}
@media(max-width:760px){.menu-intro h1{font-size:39px}.faction-button{font-size:14px}.faction-symbol{font-size:15px}.commander-copy h2,.territory-copy h2{font-size:25px}.score-row{font-size:14px}.hero-card h3{font-size:20px}.eyebrow,.small,.map-caption{font-size:13px}.setting-row{font-size:15px}}

/* Each control group has its own treatment within the bridge palette. */
.topbar .nav-button,.topbar .icon-button{font:calc(15px * var(--ui-scale))/1.35 'Segoe UI',Arial,sans-serif;height:54px;padding:7px 12px;border:1px solid #48504c;background:#131a1ad9;box-shadow:none;display:flex;align-items:center;justify-content:center;letter-spacing:0}
.topbar .nav-button:hover,.topbar .icon-button:hover{background:#272e28;border-color:#b39b6c;color:#e8d9b7}.topbar .nav-button.active{background:#282b22;color:#dfc68e;border-color:#8d7e60}.nav-button.active:after{display:none}
body:not(.in-game) .topbar nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:calc(360px * var(--ui-scale));gap:10px;align-self:center}
body:not(.in-game) .topbar .nav-button{width:100%;min-width:0;height:54px;font-weight:600;color:#d0c5ae;border-color:#716249;background:linear-gradient(135deg,#30332c,#19211e);box-shadow:inset 0 1px #dec79733;border-bottom:3px solid #534830}
body:not(.in-game) .topbar .nav-button.active{color:#ffe3a4;background:linear-gradient(135deg,#4a4633,#2d3427);border-color:#c4a976;border-bottom-color:#c4a976}
body:not(.in-game) .topbar .nav-button:hover{background:#3a4033;border-color:#d3b579;color:#fff1d1}
body:not(.in-game) .header-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:calc(224px * var(--ui-scale))}body:not(.in-game) .topbar .icon-button{width:100%;min-width:0;color:#aeb7b3;background:#10191ad9;border-color:#45514e}
#sound-button{flex-direction:column}.audio-state{display:block;font-size:calc(12px * var(--ui-scale));line-height:1.2;margin-top:3px;color:#b9c1b6}
.group-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin-top:16px;margin-bottom:12px;border-bottom:1px solid #77674d;align-items:end}
.group-tabs button{font-size:calc(15px * var(--ui-scale));width:100%;height:calc(40px * var(--ui-scale));min-height:0;padding:8px 5px;border:1px solid #4a514b;border-bottom:0;border-radius:5px 5px 0 0;background:#11181b;color:#9ca6a4;box-shadow:none;position:relative}
.group-tabs button:hover{color:#e5d7b7;background:#222920}.group-tabs button.active{top:1px;height:calc(40px * var(--ui-scale));background:#242a25;border-color:#a78b57;color:#e0c58c;border-bottom:1px solid #242a25}
.faction-list{grid-template-columns:repeat(2,minmax(0,1fr));overflow-x:hidden;gap:6px}
.faction-button{height:calc(56px * var(--ui-scale));min-height:0;padding:8px;box-shadow:none;background:#11181b;border:1px solid #3b4646;font-size:calc(15px * var(--ui-scale));line-height:1.35;min-width:0}
.faction-button.active{background:#292d26;border-color:#bd9f67;color:#ead8b2}.faction-button:hover{border-color:var(--faction)}.faction-button>span:last-of-type{min-width:0;overflow-wrap:anywhere}
.faction-symbol{width:calc(34px * var(--ui-scale));height:calc(26px * var(--ui-scale));font-size:calc(14px * var(--ui-scale));padding-right:6px}
.primary{background:linear-gradient(#cbb383,#ac8e5b);border:1px solid #dcc99d;border-bottom:3px solid #6f5836;box-shadow:inset 0 1px #fff4cf77,0 3px 0 #080d0c;transition:transform .12s}
.primary:active{transform:translateY(2px);box-shadow:inset 0 1px 4px #0005,0 1px 0 #080d0c}
.theme-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;width:100%}.theme-options button{height:calc(48px * var(--ui-scale));min-width:0;justify-content:center;line-height:1.25;border-bottom:1px solid transparent}.theme-options button.active{border-bottom-color:var(--gold)}.theme-chip{flex-shrink:0}
.launch-row>button{height:calc(56px * var(--ui-scale));min-height:0;width:100%}
.game-tools{align-items:stretch;grid-template-columns:repeat(2,minmax(0,1fr))}.in-game .topbar nav,.in-game .header-actions{grid-template-columns:repeat(2,minmax(0,1fr));width:100%;gap:8px}
.game-tools>.secondary,.in-game .topbar .nav-button,.in-game .topbar .icon-button{font:calc(15px * var(--ui-scale))/1.35 'Segoe UI',Arial,sans-serif;letter-spacing:0;height:calc(68px * var(--ui-scale));min-height:0;min-width:0;width:100%;padding:10px 6px;color:#e0d9c9;background:linear-gradient(#343936,#202623);border:1px solid #80715b;border-bottom:3px solid #51432f;box-shadow:inset 0 1px #9b998b55,inset 1px 0 #b0ad9422,0 3px 0 #080d0c,0 5px 6px #0006;display:flex;align-items:center;justify-content:center;text-align:center;transition:transform .12s,background .12s,box-shadow .12s}
.game-tools>.secondary:hover,.in-game .topbar .nav-button:hover,.in-game .topbar .icon-button:hover{background:linear-gradient(#444a43,#2b322c);border-color:#bca374;color:#fff0cb}
.game-tools>.secondary:active,.in-game .topbar .nav-button:active,.in-game .topbar .icon-button:active{transform:translateY(2px);box-shadow:inset 0 1px 4px #0005,0 1px 0 #080d0c}
.ending-actions{align-items:stretch}.ending-actions>button{font:calc(15px * var(--ui-scale))/1.35 'Segoe UI',Arial,sans-serif;letter-spacing:0;min-width:120px;min-height:54px;padding:10px 15px;box-shadow:inset 0 1px #9b998b55,0 3px 0 #080d0c;border-bottom-width:3px}.ending-actions>.secondary{background:linear-gradient(#343936,#202623)}
@media(max-width:1500px){.faction-button{font-size:calc(14px * var(--ui-scale))}}
@media(max-width:760px){.ending-actions>button{min-width:105px}.group-tabs button{font-size:14px}.topbar .nav-button,.topbar .icon-button{font-size:15px}}

.command-mark{pointer-events:none;filter:drop-shadow(0 1px 1px #000)}
.in-game>.ambient-bg{background:#080d12}.in-game footer{display:none}
@media(min-width:1201px) and (max-height:950px){.command-panel .game-heading{padding:10px 12px}.command-panel .game-heading h1{font-size:24px}.commander-copy{padding:10px 12px}.commander-copy h2{font-size:24px}.turn-card{padding:12px}.game-controls{padding:10px}.game-tools>.secondary,.in-game .topbar .nav-button,.in-game .topbar .icon-button{height:58px}.sector-location-panel #sector-location-map{max-height:160px;overflow:hidden}}
@media(max-width:760px),(max-width:1100px) and (pointer:coarse){
  .menu-layout{grid-template-columns:minmax(0,1fr)}.campaign-setup,.sector-preview,.hero-choice-panel{grid-column:auto;grid-row:auto}.hero-choice-panel>img{max-height:none;object-fit:initial}.intro-copy{position:static;margin-top:12px;font-size:14px}.topbar{flex-wrap:wrap}.topbar nav{order:3;width:100%}
  .in-game main{padding:8px}.battle-layout{grid-template-columns:minmax(0,1fr);margin:0;gap:10px}.battle-board{grid-row:2}.command-panel{grid-row:1;display:grid;grid-template-columns:88px minmax(0,1fr);grid-template-areas:'identity identity' 'portrait commander' 'portrait orders' 'scores scores'}
  .command-panel .game-heading{grid-area:identity;padding:10px 12px}.command-panel .game-heading h1{font-size:22px;margin-top:4px}.command-panel .game-heading .eyebrow{font-size:11px}.command-panel>.panel-heading{display:none}
  .commander-portrait{grid-area:portrait;height:auto;min-height:0;aspect-ratio:auto}.commander-portrait span{display:none}.commander-copy{grid-area:commander;padding:8px 12px}.commander-copy h2{font-size:20px}.commander-copy p{font-size:12px}
  .turn-card{grid-area:orders;padding:8px 12px;grid-template-columns:auto minmax(0,1fr);gap:6px}.turn-card .eyebrow{font-size:11px}.turn-card .primary{font-size:13px;min-width:0;padding:9px 5px}.reinforcement{gap:6px}.reinforcement strong{font-size:29px}.reinforcement span{font-size:11px}#reserve-count{font-size:11px;margin:0}
  .scoreboard{grid-area:scores;max-height:170px;overflow:auto;padding:6px 10px}.score-row{font-size:12px;min-height:40px}.score-row strong{font-size:15px}.score-row strong small,.score-row em{font-size:10px}
  .battle-map{height:330px}.battle-map.zoomed{height:420px}.board-top{padding:9px;gap:6px;flex-wrap:wrap}.board-top .status-dot{font-size:12px}.map-instructions{font-size:12px;padding:8px}.turn-queue{padding:7px 9px}.turn-queue span{font-size:11px}
  .game-controls{padding:10px}.game-tools>.secondary,.in-game .topbar .nav-button,.in-game .topbar .icon-button{height:58px}.intel-panel{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}.sector-location-panel{display:none}.combat-panel .panel-heading{padding:10px 12px}.combat-panel .combat-result{padding:10px 12px}
  .roll-side{margin-top:10px}.roll-pool{margin:7px 0}.roll-total strong{font-size:28px}.combat-result .side-name,.roll-total{font-size:14px}.territory-copy h2{font-size:23px}
  .topbar .nav-button,.topbar .icon-button{height:48px}.topbar nav{gap:8px}.group-tabs button{padding:8px 10px}.menu-intro{padding-top:18px}.menu-intro h1{font-size:34px}
  .in-game main{padding-bottom:75px}.in-game #end-turn-button{position:fixed;left:10px;right:10px;bottom:10px;width:calc(100% - 20px);min-height:48px;font-size:15px;z-index:5}
}

/* Portraits reserve their space before loading; full dossiers retain the complete artwork. */
.hero-grid{align-items:start}.hero-card{height:100%;align-self:stretch;overflow:hidden;border:2px solid #71644c;box-shadow:inset 0 0 0 1px #c2ac7944,0 4px 12px #0005}.hero-card:hover{transform:none;border-color:var(--faction)}
.hero-card-art{display:block;position:relative;aspect-ratio:4/5;overflow:hidden;border:7px solid #2d302b;border-bottom:2px solid #9a8154;background:#1b2425;box-shadow:inset 0 0 0 1px #a5916566}
.heroes-view .hero-card img{width:100%;height:100%;object-fit:cover;object-position:center top;filter:contrast(.94) saturate(.92)}
.hero-card-art:after{content:'';position:absolute;inset:4px;border:1px solid #c4a97677;pointer-events:none;clip-path:polygon(0 0,22% 0,22% 1%,1% 1%,1% 22%,0 22%,0 0,100% 0,100% 22%,99% 22%,99% 1%,78% 1%,78% 0,100% 0,100% 100%,78% 100%,78% 99%,99% 99%,99% 78%,100% 78%,100% 100%,0 100%,0 78%,1% 78%,1% 99%,22% 99%,22% 100%,0 100%)}
.hero-card[data-group=chaos]{border-color:#805e55}.hero-card[data-group=chaos] .hero-card-art{border-color:#362622;border-bottom-color:#9d624e}.hero-card[data-group=chaos] .hero-card-art:after{border-color:#d69c7766}
.hero-card[data-group=xenos]{border-color:var(--faction);border-radius:12px 2px}.hero-card[data-group=xenos] .hero-card-art{border-color:#233230;border-bottom-color:var(--faction);border-radius:8px 0 0}.hero-card[data-group=xenos] .hero-card-art:after{border-color:var(--faction)}
.hero-card-insignia{position:absolute;bottom:10px;left:10px;width:38px;height:45px;padding:4px;background:#0c141be6;border:1px solid #ad9460;box-shadow:0 2px 6px #000a}.hero-card-insignia svg{width:100%;height:100%;filter:drop-shadow(0 1px 1px #000)}
.hero-card-body{height:calc(268px * var(--ui-scale));min-height:0;display:grid;grid-template-rows:calc(34px * var(--ui-scale)) calc(54px * var(--ui-scale)) calc(39px * var(--ui-scale)) 1fr;gap:6px;padding:14px;background:linear-gradient(#192025,#10191d)}
.hero-card-body>.eyebrow,.hero-card h3,.hero-card .rank,.hero-summary{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;margin:0}
.hero-card-body>.eyebrow{line-height:1.4;letter-spacing:.8px}.hero-card h3{font-size:calc(22px * var(--ui-scale));line-height:1.22}.hero-card .rank{line-height:1.5}.hero-summary{-webkit-line-clamp:3;line-height:1.5;font-size:calc(16px * var(--ui-scale))}
@media(max-width:760px),(max-width:1100px) and (pointer:coarse){body:not(.in-game) .topbar nav{width:100%;gap:8px}body:not(.in-game) .topbar .nav-button{height:48px;padding:7px 8px}body:not(.in-game) .header-actions{width:210px}.hero-card-body{height:239px;padding:10px;grid-template-rows:30px 65px 36px 1fr;gap:5px}.hero-card h3{font-size:18px;-webkit-line-clamp:3}.hero-card-body>.eyebrow{font-size:11px}.hero-card .rank{font-size:12px}.hero-summary{font-size:13px}.hero-card-art{border-width:4px}.hero-card-insignia{width:28px;height:34px;bottom:7px;left:7px}.hero-card-number{top:7px;right:7px;font-size:9px}}

/* Restore compact desktop type independently from the size of panels and controls. */


:root:not([data-layout="mobile"]) body{font-size:calc(15px * var(--ui-scale))}
:root:not([data-layout="mobile"]) :is(.eyebrow,.small,.panel-heading>.muted,.map-caption,footer,footer .text-button,.match-mode,#opponent-list label){font-size:calc(12px * var(--ui-scale))}
:root:not([data-layout="mobile"]) :is(.nav-button,.icon-button,.primary,.secondary,.text-button,.faction-button,.group-tabs button,.theme-options button,label,select,input[type=search],.seed-control input,.opponent-picker){font-size:calc(13px * var(--ui-scale))}
:root:not([data-layout="mobile"]) :is(.game-tools>.secondary,.in-game .topbar .nav-button,.in-game .topbar .icon-button,.turn-card .primary,.board-top .status-dot,.board-top>.small,.turn-queue span){font-size:calc(12px * var(--ui-scale))}
:root:not([data-layout="mobile"]) :is(.faction-description p,.setting-row,.rules,.hero-summary,.hero-card p,.hero-controls p,.map-instructions,.combat-result p,.combat-result .combat-outcome,.territory-copy p,.sector-location-panel p){font-size:calc(14px * var(--ui-scale))}
:root:not([data-layout="mobile"]) :is(.commander-copy p,.reinforcement span,#reserve-count,.territory-copy dt,.territory-copy dd,.roll-total,.combat-result .side-name,.score-row){font-size:calc(13px * var(--ui-scale))}
:root:not([data-layout="mobile"]) :is(.command-panel .game-heading .eyebrow,.hero-card .rank){font-size:calc(11px * var(--ui-scale))}
:root:not([data-layout="mobile"]) .command-panel .game-heading h1{font-size:calc(23px * var(--ui-scale))}
:root:not([data-layout="mobile"]) :is(.commander-copy h2,.territory-copy h2){font-size:calc(24px * var(--ui-scale))}
:root:not([data-layout="mobile"]) .score-row strong{font-size:calc(17px * var(--ui-scale))}
:root:not([data-layout="mobile"]) :is(.score-row strong small,.score-row em,.hero-card .eyebrow,.audio-state){font-size:calc(10px * var(--ui-scale))}
:root:not([data-layout="mobile"]) .roll-total strong{font-size:calc(30px * var(--ui-scale))}
:root:not([data-layout="mobile"]) .faction-description strong{font-size:calc(17px * var(--ui-scale))}
:root:not([data-layout="mobile"]) .menu-intro h1{font-size:42px}
:root:not([data-layout="mobile"]) :is(.preview-title h2,.hero-choice-copy h2){font-size:25px}
:root:not([data-layout="mobile"]) .hero-choice-copy p{font-size:13px}
:root:not([data-layout="mobile"]) #hero-choice-note{font-size:12px}
:root:not([data-layout="mobile"]) .hero-card h3{font-size:calc(18px * var(--ui-scale))}
:root:not([data-layout="mobile"]) .brand{font-size:13px}
:root:not([data-layout="mobile"]) dialog:not(.ending-dialog) h2{font-size:calc(28px * var(--ui-scale))}

/* Show the complete faction folder; campaign actions belong to its sector preview. */
.campaign-setup .faction-list{max-height:none;min-height:0;overflow:visible}
.campaign-setup .faction-button{height:calc(44px * var(--ui-scale));padding:4px 6px}
.campaign-setup .group-tabs{margin-top:12px;margin-bottom:8px}
.campaign-setup .faction-description{padding-top:12px;padding-bottom:12px;min-height:0}
.sector-preview>.launch-row{flex-direction:row;margin:18px 24px 24px}
.sector-preview>.launch-row>button{flex:1;min-width:0}
.seed-control .status-dot{flex-basis:100%;font-size:calc(12px * var(--ui-scale))}
@media(max-width:1200px){.sector-preview>.launch-row{flex-direction:column}}
@media(max-width:760px),(max-width:1100px) and (pointer:coarse){.campaign-setup .faction-button{height:48px;padding:6px}.sector-preview>.launch-row{margin:14px 18px 18px}}

/* Desktop setup fits the viewport by removing excess spacing, without clipping content. */
@media(min-width:1201px){
  body:not(.in-game) .topbar{min-height:0;padding-top:10px;padding-bottom:10px}
  .menu-intro{padding:14px 0}.menu-layout{align-items:start}
  .campaign-setup .panel-heading,.sector-preview .panel-heading,.hero-choice-panel .panel-heading{padding-top:10px;padding-bottom:10px}
  .campaign-setup .group-tabs{margin-top:8px;margin-bottom:6px}.campaign-setup .group-tabs button,.campaign-setup .group-tabs button.active{height:calc(36px * var(--ui-scale));padding-top:6px;padding-bottom:6px}
  .campaign-setup .faction-list{gap:4px}.campaign-setup .faction-description{padding-top:6px;padding-bottom:6px}.campaign-setup .faction-description strong{line-height:1.25}.campaign-setup .faction-description p{line-height:1.4}
  .campaign-setup .setup-fields{margin-bottom:8px}.campaign-setup .setup-fields label{line-height:1.3}.campaign-setup .setup-fields select{min-height:34px;padding:5px 8px;margin-top:4px;line-height:1.35}
  .campaign-setup .match-mode{margin-top:8px}.campaign-setup .theme-strip{margin-top:8px;margin-bottom:8px;padding-top:8px}.campaign-setup .theme-options{margin-top:6px}.campaign-setup .theme-options button{height:calc(40px * var(--ui-scale));padding-top:4px;padding-bottom:4px}
  .campaign-setup>#rules-button{margin-top:6px;margin-bottom:12px}
  .preview-title{padding-top:14px}.seed-control{padding-top:10px;padding-bottom:10px;gap:6px}
  .preview-map{height:min(calc(570px * var(--ui-scale)),calc(100dvh - 560px * var(--ui-scale)));aspect-ratio:auto}
  .sector-preview>.launch-row{margin-top:12px;margin-bottom:14px}
  .commander-choice-label{padding-top:10px;padding-bottom:10px}.hero-choice-copy{padding:14px 18px}
}
@media(min-width:1501px){.menu-intro h1 br{display:none}.menu-intro h1 em{margin-left:.25em}}

/* Archive dialogs follow menu scale; the atlas is wide rather than the generic narrow modal. */
.brand-icon{width:44px;height:44px;object-fit:contain;flex-shrink:0}
dialog:not(.ending-dialog){width:min(calc(680px * var(--ui-scale)),94vw);max-height:calc(100dvh - 40px);padding:calc(24px * var(--ui-scale));overflow:auto;overscroll-behavior:contain;font-size:calc(15px * var(--ui-scale))}
dialog.wide-dialog:not(.ending-dialog){width:min(calc(1440px * var(--ui-scale)),94vw)}
dialog:not(.ending-dialog) p:not(.eyebrow):not(.small){font-size:calc(14px * var(--ui-scale));line-height:1.6;margin:calc(14px * var(--ui-scale)) 0}
dialog:not(.ending-dialog) .small{font-size:calc(12px * var(--ui-scale));line-height:1.6}
dialog:not(.ending-dialog) .dialog-heading{padding-bottom:calc(16px * var(--ui-scale));gap:calc(16px * var(--ui-scale))}
dialog:not(.ending-dialog) .close-button{min-width:44px;min-height:44px;width:calc(36px * var(--ui-scale));height:calc(36px * var(--ui-scale));font-size:calc(26px * var(--ui-scale));display:grid;place-items:center;flex-shrink:0}
dialog:not(.ending-dialog) :is(.primary,.secondary){min-height:calc(44px * var(--ui-scale))}
dialog:not(.ending-dialog) .setting-row{padding:calc(12px * var(--ui-scale)) 0;gap:calc(16px * var(--ui-scale))}
dialog:not(.ending-dialog) .setting-row :is(select,input[type=range]){width:calc(210px * var(--ui-scale));min-width:0;max-width:55%;flex-shrink:0}
dialog:not(.ending-dialog) .setting-row select{min-height:calc(36px * var(--ui-scale));padding:6px 9px}
dialog:not(.ending-dialog) .rules,dialog:not(.ending-dialog) .rules li{line-height:1.6}
#hero-detail blockquote{font-size:calc(19px * var(--ui-scale));line-height:1.5}
#atlas-dialog .star-table{font-size:calc(13px * var(--ui-scale));grid-template-columns:repeat(2,minmax(0,1fr));gap:calc(8px * var(--ui-scale))}
#atlas-dialog .star-table>div{min-width:0;overflow-wrap:anywhere;padding:calc(10px * var(--ui-scale))}
@media(min-width:1101px){
  #atlas-dialog[open]{display:grid;grid-template-columns:minmax(0,1fr) calc(300px * var(--ui-scale));grid-template-areas:'heading heading' 'map campaign' 'map introduction' 'map note' 'map theatres';column-gap:calc(24px * var(--ui-scale));row-gap:calc(18px * var(--ui-scale));align-items:start}
  #atlas-dialog>.dialog-heading{grid-area:heading}#atlas-campaign-name{grid-area:campaign;color:var(--gold)}#atlas-dialog>p:not([id]):not(.small){grid-area:introduction}#atlas-dialog>.small{grid-area:note}#star-table{grid-area:theatres}#atlas-map{grid-area:map;margin:0}
  #atlas-dialog>p:not(.eyebrow){margin:0}
}
@media(max-width:760px),(max-width:1100px) and (pointer:coarse){
  dialog:not(.ending-dialog){padding:18px 16px;max-height:calc(100dvh - 24px)}
  dialog:not(.ending-dialog) p:not(.eyebrow):not(.small){font-size:16px}
  dialog:not(.ending-dialog) .small{font-size:14px}
  #atlas-dialog .star-table{font-size:15px}
  dialog:not(.ending-dialog) h2{font-size:25px}
  dialog:not(.ending-dialog) .setting-row{font-size:15px;gap:10px}
  dialog:not(.ending-dialog) .setting-row :is(select,input[type=range]){width:150px;max-width:52%}
  dialog:not(.ending-dialog) .setting-row select{min-height:44px}
}

/* Dice orientations stay available on hosts that forbid inline style attributes. */
.die-viewport{--rx:0deg;--ry:0deg}.die-viewport[data-face="2"]{--rx:-90deg}.die-viewport[data-face="3"]{--ry:-90deg}.die-viewport[data-face="4"]{--ry:90deg}.die-viewport[data-face="5"]{--rx:90deg}.die-viewport[data-face="6"]{--ry:180deg}
