body.game-window{height:var(--app-height,100dvh);display:grid;grid-template-rows:56px minmax(0,1fr) 28px;overflow:hidden}.game-window #main{width:100%;max-width:1450px;margin:0 auto;padding:18px 24px;display:flex;flex-direction:column;gap:12px;min-height:0;overflow:hidden}
@media(max-width:800px){.site-header{padding:6px 12px}.brand{font-size:14px;max-width:115px;line-height:1.1}.site-header .quiet{font-size:11px;padding:5px 7px}.game-window #main{padding:12px;gap:8px}.play-panel{grid-template-columns:1fr;grid-template-rows:clamp(55px,calc(var(--app-height,100dvh) * .4 - 170px),200px) minmax(0,1fr);gap:14px}.scene img{object-position:center 60%!important}.copy-panel{padding:0;gap:14px}.reading{gap:10px}.reading p{font-size:14px}.reading .fine{font-size:11px}h1{font-size:29px}h2{font-size:20px}.actions{gap:6px}.actions button{padding:9px 12px}.introduction .scene{min-height:100px}.introduction h1{font-size:29px}.introduction .secondary{font-size:13px}.survival-hud{gap:7px;grid-template-columns:1.8fr 1fr 1fr}.survival-hud>div{padding:7px 9px}.survival-hud strong{font-size:21px}.survival-hud small{font-size:9px}.support-stat small{display:block}.survival-hud span{font-size:10px}.support-stat progress{margin-top:3px;height:5px}.budget-strip{font-size:9px;align-items:center;padding:2px 0;min-height:28px}.budget-strip span:last-child{max-width:110px;text-align:right}.journey-action strong{font-size:14px}.journey-action span{font-size:11px}.notice{padding:6px 10px!important}.steps{gap:10px;font-size:15px}.big-money{font-size:34px}.lock-layout{grid-template-columns:1fr;grid-template-rows:minmax(120px,1fr) auto;gap:12px}.lock-picture{grid-template-columns:1fr;grid-template-rows:1fr}.lock-backdrop{display:none}.lock-copy{gap:10px}.lock-copy h1{font-size:25px}.lock-explanation{font-size:13px}.lock-meters{gap:9px;grid-template-columns:1fr 1fr}.lock-meters label{font-size:11px}#lock-status{min-height:32px;font-size:12px}.lock-top{font-size:11px}.lock-top strong{font-size:18px}.lock-controls{display:none}.mode{padding:5px 2px;min-height:32px;font-size:11px}.lock-actions button{font-size:14px}.lock-meters progress{height:12px}footer{padding:0 12px;font-size:9px}dialog{padding:22px}.dialog-page{gap:12px}.dialog-page p{font-size:14px}}
@media(max-height:670px) and (max-width:800px){body.game-window{grid-template-rows:48px minmax(0,1fr) 23px}.game-window #main{padding:8px 10px;gap:6px}.play-panel{gap:8px}.copy-panel{gap:8px}.reading{gap:6px}.reading h1{font-size:23px}.reading h2{font-size:17px}.reading p{font-size:12px}.reading .eyebrow{font-size:9px}.reading .fine{font-size:10px}.actions{gap:5px}.actions button{padding:6px 10px;min-height:40px}.journey-action strong{font-size:13px}.journey-action span{font-size:10px}.survival-hud>div{padding:4px 8px}.survival-hud strong{font-size:18px}.survival-hud span{font-size:9px}.introduction .scene{min-height:55px}.introduction .secondary{font-size:12px}.steps{font-size:13px;gap:9px}.lock-copy{gap:6px}.lock-copy h1{font-size:22px}.lock-explanation{font-size:12px}.lock-layout{grid-template-rows:minmax(90px,1fr) auto;gap:7px}.lock-actions button{min-height:42px}.lock-top strong{font-size:16px}.lock-meters progress{height:10px}.mode{min-height:29px}.budget-strip{min-height:23px}}
@media(max-height:520px) and (min-width:650px){body.game-window{grid-template-rows:44px minmax(0,1fr) 23px}.game-window #main{padding:8px 14px;gap:5px}.play-panel{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);grid-template-rows:1fr;gap:18px}.copy-panel{justify-content:flex-start;gap:8px}.reading{gap:5px}.reading h1{font-size:24px}.reading h2{font-size:18px}.reading p{font-size:12px}.reading .fine{font-size:10px}.reading .eyebrow{font-size:9px}.actions{flex-direction:row;gap:6px}.actions button{padding:7px 9px;min-height:42px}.journey-action strong{font-size:12px}.journey-action span{font-size:9px}.survival-hud{gap:8px}.survival-hud>div{padding:3px 10px}.survival-hud strong{font-size:18px}.survival-hud span{font-size:10px}.budget-strip{min-height:23px}.steps{font-size:12px;gap:8px}.lock-layout{grid-template-columns:1fr 1.1fr;grid-template-rows:1fr;gap:18px}.lock-backdrop{display:none}.lock-picture{display:flex}.lock-drawing{width:100%}.lock-copy{gap:6px}.lock-copy h1{font-size:22px}.lock-explanation{font-size:11px}.lock-controls{display:none}.lock-meters{grid-template-columns:1fr 1fr;gap:8px}.lock-meters label{font-size:11px}.lock-meters progress{height:10px}#lock-status{min-height:28px;font-size:11px}.lock-actions button{padding:6px 8px;min-height:40px}.mode{min-height:29px;padding:3px 0;font-size:11px}.dialog-page{gap:7px}.dialog-page p{font-size:12px}.dialog-page h2{font-size:22px}.menu-actions{grid-template-columns:1fr 1fr}.dialog-nav{margin-top:0}.dialog-nav button{min-height:35px;padding:5px 10px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
html:has(body.game-window){height:100%;overflow:hidden}.sr-only{top:0;left:0}footer .quiet{padding:0 5px;min-height:0;height:100%;font-size:10px}
@media(min-width:801px) and (min-height:521px) and (max-height:700px){.game-window #main{gap:8px;padding:12px 20px}.copy-panel{gap:12px;padding:0}.reading{gap:10px}.reading h1{font-size:29px}.reading p{font-size:14px}.reading .fine{font-size:11px}.actions{gap:6px}.journey-action{padding:7px 12px;min-height:48px}.journey-action strong{font-size:14px}.journey-action span{font-size:11px}.survival-hud strong{font-size:23px}.lock-copy{gap:10px}.lock-copy h1{font-size:28px}.lock-explanation{font-size:14px}.lock-controls{display:none}.lock-meters{gap:10px}}
.journey-strips{display:grid;grid-template-columns:1.15fr 1fr;gap:10px;flex-shrink:0}.support-strip{display:flex;flex-direction:column;justify-content:center;min-width:0;padding:3px 9px;min-height:36px;border-color:var(--lilac);background:#f1e9f1}.support-strip span{font-size:9px;color:var(--muted)}.support-strip strong{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.journey-strips .budget-strip{flex-direction:column;justify-content:center;align-items:flex-start;gap:1px;min-height:36px;padding:2px 5px}.journey-strips .budget-strip span:last-child{max-width:none;text-align:left;font-size:9px}.support-list{list-style:none;padding:0;margin:0;display:grid;gap:12px}.support-list li{border-left:3px solid var(--line);padding:8px 12px}.support-list .reached{border-color:#899785}.support-list .current{border-color:var(--fox);background:#f1e9f1}.support-list h3{margin:2px 0 5px;font-size:17px;line-height:1.2}.support-list p{font-size:13px}.support-state{font:10px Consolas,monospace;text-transform:uppercase;color:var(--muted)}.support-list small{display:block;margin-top:5px;color:var(--fox);font-size:11px}
@media(max-width:800px){.journey-strips{gap:6px}.support-strip strong{font-size:11px}.journey-strips .budget-strip{font-size:9px}.journey-strips .budget-strip span:last-child{font-size:8px}.support-list h3{font-size:15px}.support-list p{font-size:12px}}
@media(max-height:670px) and (max-width:800px){.journey{grid-template-rows:55px minmax(0,1fr)}.support-strip,.journey-strips .budget-strip{min-height:32px;padding:2px 5px}}
@media(max-height:520px) and (min-width:650px){.journey{grid-template-rows:1fr}.support-list{gap:6px}.support-list li{padding:4px 10px}.support-list h3{font-size:14px;margin:1px 0 3px}.support-list p{font-size:11px}.support-list small{margin-top:2px;font-size:10px}}
.job-picker{font-size:12px;display:grid;gap:6px}.job-picker select{font:inherit;font-size:16px;min-height:46px;width:100%;padding:8px 12px;border:1px solid var(--fox);border-radius:5px;color:var(--slate);background:var(--cream)}#job-detail{display:grid;gap:10px}.job-perk{padding:10px 12px;background:#f1e9f1;border-left:3px solid var(--fox);font-size:14px}.job-perk strong{font-size:11px;text-transform:uppercase;letter-spacing:.03em}@media(max-height:670px){#job-detail{gap:6px}.job-perk{padding:7px 10px}.job-picker select{min-height:42px;font-size:14px}}
@media(max-height:520px) and (min-width:650px){dialog:has(.support-list){padding:18px 24px}dialog:has(.support-list) #dialog-content{gap:12px}}
/* Campaign layouts: short screens, large choices, and visible consequences. */
.campaign-hud{grid-template-columns:1.8fr 1.3fr 1fr 1fr}.journey-strips{grid-template-columns:1.1fr 1.1fr auto}.team-strip{font-size:12px;padding:4px 12px;min-height:36px}.camp-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.camp-actions button{padding:9px}.camp-actions strong{font-size:13px}.camp-actions span{font-size:10px}.scene{position:relative}.supporter-badge{position:absolute;bottom:18px;left:18px;right:18px;background:#fbf7eff2;padding:12px;display:flex;gap:12px;align-items:center;border:1px solid var(--line);border-radius:8px}.portrait{display:grid;place-items:center;flex-shrink:0;width:40px;height:40px;border-radius:50%;background:var(--lilac);font-weight:700;color:var(--fox)}.supporter-badge strong,.supporter-badge span:not(.portrait){display:block}.supporter-badge div>span{font-size:12px}.reward{display:grid;gap:5px;background:#e4eddf;padding:12px;border-left:3px solid #71886b;font-size:14px}.actions small{display:block;font-size:12px;margin-top:5px}.meeting-progress{display:flex;align-items:center;gap:8px}.meeting-progress>span{width:28px;height:28px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;font-size:12px}.meeting-progress .good{background:#dfe8d9;border-color:#71886b}.meeting-progress .miss{background:#f2ded2;border-color:#b57953}.meeting-progress .current{border-color:var(--fox);box-shadow:0 0 0 2px #e8d8f0}.meeting-progress small{font-size:11px}.question{font-size:20px}.meeting-panel .answer{min-height:54px}.meeting-panel .scene:has(.coffee-table),.meeting-panel .scene:has(.planning-board),.meeting-panel .scene:has(.agenda-board),.meeting-panel .scene:has(.city-hall){display:grid;place-items:center;background:#e5e0d6;padding:20px}.coffee-table{display:flex;flex-direction:column;align-items:center;width:100%;gap:14px}.coffee-table p{max-width:280px;font-size:16px;text-align:center}.coffee-cup{position:relative;width:150px;height:145px;background:#faf7ee;border:5px solid #777e76;border-radius:8px 8px 65px 65px;overflow:hidden}.coffee-cup>div{position:absolute;bottom:0;width:100%;background:#9c7254;transition:height .3s}.coffee-saucer{width:205px;height:10px;border-radius:50%;background:#828479}.steam{font-size:35px;line-height:1;color:#727e78;opacity:.3}.steam.steaming{animation:steam 2s ease-in-out infinite}@keyframes steam{50%{transform:translateY(-7px);opacity:.8}}.agenda-board{width:100%;display:grid;gap:12px}.agenda-person{display:grid;grid-template-columns:40px 1fr;gap:4px 12px;padding:12px;background:#fbf7ef;border:1px solid #c9c8bb;border-radius:8px}.agenda-person .portrait{grid-row:1/4}.agenda-person small,.agenda-person progress,.agenda-person>span:last-child{grid-column:2}.agenda-person>span:last-child{font-size:11px}.agenda-person.heard{background:#e2ecdc}.city-hall{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%}.city-hall .room{min-height:90px;text-align:center;background:#fbf7ef;border-bottom:6px solid #afaaa0}.city-hall .visited{background:#e8d8f0;border-color:var(--fox)}.planning-board{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%;text-align:center}.planning-board>div{padding:15px 5px;border-bottom:4px solid var(--fox);background:#fbf7ef}.planning-board article{grid-column:1/-1;padding:30px 20px;background:#faf7ee;transform:rotate(-2deg);box-shadow:2px 5px 0 #b5b3a7}.planning-board p{grid-column:1/-1;font-size:12px}.work-top{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px}.work-top strong{font-size:18px}.work-top span{text-align:right}.canal-works .scene,.build-panel .scene{display:flex;align-items:center;background:#dfe4dc}.scene svg{width:100%;height:100%;display:block}.works-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.works-actions button{font-size:13px}.water-flow{animation:flow 2s linear infinite}@keyframes flow{to{stroke-dashoffset:-44}}.district-tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.district-tabs button{font-size:12px;min-height:38px;padding:7px;text-align:center}.district-tabs .selected{background:var(--fox);color:white}.campaign .copy-panel,.meeting-panel .copy-panel,.build-panel .copy-panel,.canal-works .copy-panel{gap:16px}.campaign .reading,.meeting-panel .reading,.build-panel .reading,.canal-works .reading{gap:12px}.campaign h1,.meeting-panel h1,.build-panel h1,.canal-works h1{font-size:clamp(26px,3vw,40px)}
@media(max-width:800px){.campaign-hud{gap:5px;grid-template-columns:1.45fr 1.15fr .8fr .8fr}.campaign-hud>div{padding:6px}.campaign-hud strong{font-size:18px}.campaign-hud small{font-size:9px}.campaign-hud span{font-size:9px}.journey-strips{gap:4px;grid-template-columns:1.1fr 1.2fr auto}.journey-strips strong{font-size:10px}.team-strip{font-size:10px;padding:3px 5px}.supporter-badge{bottom:6px;left:6px;right:6px;padding:6px;font-size:12px;gap:7px}.supporter-badge div>span{font-size:10px}.supporter-badge .portrait{width:28px;height:28px;font-size:11px}.campaign h1,.meeting-panel h1,.build-panel h1,.canal-works h1{font-size:26px}.campaign .copy-panel,.meeting-panel .copy-panel,.build-panel .copy-panel,.canal-works .copy-panel{gap:10px}.campaign .reading,.meeting-panel .reading,.build-panel .reading,.canal-works .reading{gap:8px}.camp-actions{gap:4px}.camp-actions button{padding:6px}.camp-actions strong{font-size:11px}.camp-actions span{font-size:9px}.question{font-size:16px}.meeting-panel .scene:has(.coffee-table),.meeting-panel .scene:has(.planning-board),.meeting-panel .scene:has(.agenda-board),.meeting-panel .scene:has(.city-hall){padding:10px}.coffee-table{gap:5px;display:grid;grid-template-columns:90px 1fr}.coffee-table .steam,.coffee-saucer{display:none}.coffee-cup{width:75px;height:70px;border-width:3px}.coffee-table p{font-size:13px;text-align:left}.agenda-board{grid-template-columns:repeat(3,1fr);gap:5px}.agenda-person{display:flex;flex-direction:column;align-items:center;text-align:center;padding:8px 4px;gap:4px;font-size:12px}.agenda-person .portrait{display:none}.agenda-person small{font-size:10px}.agenda-person>span:last-child{font-size:9px}.community .actions{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.community .actions button{font-size:12px;padding:8px}.city-hall{gap:6px}.city-hall .room{min-height:44px;font-size:12px;padding:8px;border-bottom-width:3px}.council{grid-template-rows:minmax(164px,1fr) auto}.planning-board{gap:8px;font-size:12px}.planning-board article{padding:12px;grid-column:1/-1}.planning-board>div{padding:6px}.planning-board p{display:none}.work-top{font-size:10px}.work-top strong{font-size:13px}.works-actions{gap:6px}.works-actions button{font-size:12px;min-height:44px}.district-tabs{gap:4px}.district-tabs button{font-size:10px}.build-panel .actions button{font-size:13px}.build-panel .actions span{font-size:11px}.build-panel .reading p,.canal-works .reading p{font-size:13px}}
@media(max-width:800px) and (max-height:670px){.campaign-hud strong{font-size:15px}.campaign-hud small{font-size:8px}.campaign-hud span{font-size:8px}.campaign-hud>div{padding:4px}.campaign-hud .support-stat progress{margin-top:2px;height:3px}.supporter-badge{padding:3px;bottom:3px;left:3px;right:3px}.supporter-badge .portrait{display:none}.supporter-badge div{display:flex;gap:6px;align-items:center}.supporter-badge div>span{font-size:9px}.campaign h1,.meeting-panel h1,.build-panel h1,.canal-works h1{font-size:22px}.campaign .reading,.meeting-panel .reading,.build-panel .reading,.canal-works .reading{gap:6px}.campaign .copy-panel,.meeting-panel .copy-panel,.build-panel .copy-panel,.canal-works .copy-panel{gap:7px}.campaign .reading p,.meeting-panel .reading p{font-size:12px}.campaign .notice,.meeting-panel .notice{font-size:11px;padding:5px 8px!important}.camp-actions strong{font-size:10px}.camp-actions span{font-size:8px}.camp-actions button{padding:5px 3px;min-height:42px}.planning .scene{display:none}.planning{grid-template-rows:1fr;justify-content:center}.meeting-panel{grid-template-rows:minmax(65px,1fr) auto}.meeting-panel .answer{font-size:12px;min-height:40px;padding:7px}.meeting-progress>span{width:22px;height:22px}.meeting-progress small{font-size:9px}.coffee-cup{height:54px;width:58px}.coffee-table{grid-template-columns:65px 1fr}.coffee-table p{font-size:11px}.meeting-panel .scene:has(.coffee-table){padding:7px}.community{grid-template-rows:minmax(108px,1fr) auto}.community .agenda-person small{font-size:9px}.community .agenda-person strong{font-size:10px}.council{grid-template-rows:minmax(164px,1fr) auto}.council .copy-panel{gap:0}.canal .planning-board article{padding:8px;font-size:11px}.canal .planning-board>div{font-size:10px}.canal .scene{min-height:100px}.reward{padding:7px;font-size:12px}.work-top strong{font-size:11px}.build-panel .reading p,.canal-works .reading p{font-size:11px}.build-panel .actions button{padding:7px}.build-panel .journey-action strong{font-size:12px}.build-panel .journey-action span{font-size:10px}.canal-works .scene{min-height:70px}}
@media(max-height:520px) and (min-width:650px){.campaign-hud strong{font-size:17px}.campaign-hud>div{padding:3px 8px}.campaign h1,.meeting-panel h1,.build-panel h1,.canal-works h1{font-size:23px}.campaign .reading,.meeting-panel .reading,.build-panel .reading,.canal-works .reading{gap:5px}.campaign .copy-panel,.meeting-panel .copy-panel,.build-panel .copy-panel,.canal-works .copy-panel{gap:7px}.campaign .actions,.meeting-panel .actions,.build-panel .actions,.canal-works .actions{flex-direction:column}.campaign .actions{gap:5px}.camp-actions button{min-height:36px}.campaign .actions>button{min-height:35px;padding:5px 8px}.campaign .notice{font-size:11px;padding:4px 8px!important}.supporter-badge{bottom:8px;left:8px;right:8px;padding:5px;font-size:12px}.supporter-badge .portrait{width:28px;height:28px;font-size:11px}.meeting-panel .scene:has(.coffee-table),.meeting-panel .scene:has(.planning-board),.meeting-panel .scene:has(.agenda-board),.meeting-panel .scene:has(.city-hall){padding:10px}.coffee-table{display:grid;grid-template-columns:85px 1fr}.coffee-cup{width:75px;height:80px}.coffee-table .steam,.coffee-saucer{display:none}.coffee-table p{font-size:12px}.agenda-board{gap:5px}.agenda-person{padding:5px;gap:1px 8px;font-size:12px}.agenda-person .portrait{width:25px;height:25px}.agenda-person small{font-size:10px}.city-hall{gap:6px}.city-hall .room{min-height:45px;font-size:12px;padding:5px}.meeting-panel .answer{font-size:12px;min-height:38px;padding:6px}.community .actions{display:flex;flex-direction:row}.community .actions button{font-size:11px;padding:5px;min-height:38px}.planning-board{gap:8px;font-size:12px}.planning-board article{padding:12px}.planning-board>div{padding:5px}.planning-board p{font-size:10px}.planning .journey-action strong{font-size:12px}.planning .journey-action span{font-size:10px}.work-top strong{font-size:13px}.district-tabs button{min-height:30px;padding:4px}.build-panel .journey-action strong{font-size:12px}.build-panel .journey-action span{font-size:10px}.works-actions button{font-size:11px;min-height:36px;padding:6px}.canal-works .reading p,.build-panel .reading p{font-size:11px}.reward{font-size:11px;padding:6px}dialog{padding:16px 22px}#dialog-content{gap:10px}.menu-actions{gap:5px}.menu-actions button{min-height:34px;padding:5px 10px}}
@media(prefers-reduced-motion:reduce){.water-flow,.steam.steaming{animation:none}.coffee-cup>div{transition:none}}
@media(max-width:800px) and (max-height:670px){.funding-offer .scene{display:none}.funding-offer{grid-template-rows:1fr}.funding-offer .actions button{font-size:13px}.funding-offer .actions small{font-size:11px}.funding-offer .big-money{font-size:29px}}
@media(min-width:801px) and (max-height:700px){.funding-offer h1{font-size:27px}.funding-offer .big-money{font-size:30px}.funding-offer .actions button{font-size:13px;padding:8px}.funding-offer .actions small{font-size:11px}.funding-offer .reading{gap:7px}.funding-offer .reading p{font-size:12px}.funding-offer .copy-panel{gap:9px}}
@media(max-height:520px) and (min-width:650px){.planning .scene,.funding-offer .scene{display:none}.planning,.funding-offer{display:block}.planning .copy-panel,.funding-offer .copy-panel{height:100%;display:grid;grid-template-columns:1fr 1.2fr;gap:22px;align-items:start}.planning .actions,.funding-offer .actions{gap:5px}.funding-offer .big-money{font-size:28px}.funding-offer .actions small{font-size:11px}.build-panel .actions{gap:5px}.build-panel .actions button{padding:5px 8px;min-height:36px}.build-panel .reading{gap:4px}.build-panel .reading h1{font-size:22px}.build-panel .copy-panel{gap:5px}.build-panel .notice{padding:5px 8px!important}}
@media(max-height:520px) and (min-width:650px){.build-panel .reserve-line{font-size:9px}.build-panel .reading>p:not(.eyebrow):not(.notice):not(.reserve-line){font-size:10px}.build-panel .reading h1{font-size:20px}.build-panel .journey-action span{font-size:9px}.build-panel .actions button{padding:4px 7px}}
.just-built svg{animation:build-in .5s ease-out}@keyframes build-in{from{opacity:.5;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}h1:focus{outline:none}@media(prefers-reduced-motion:reduce){.just-built svg{animation:none}}
@media(max-height:520px) and (min-width:650px){.funding-offer h1{font-size:22px}.funding-offer .reading{gap:4px}.funding-offer .reading p{font-size:11px}.funding-offer .reading .fine{font-size:9px}.funding-offer .big-money{font-size:25px}}

/* The same valley persists across the campaign, including the saved-game start page. */
.scene:has(.living-scene){display:flex;flex-direction:column;background:#e5e8e1}.living-scene{display:flex;flex-direction:column;flex:1;min-height:0;width:100%}.living-scene svg{flex:1;min-height:0;width:100%;height:100%}.scene-caption{padding:16px 18px 5px;display:grid;gap:4px}.scene-caption span{font:10px Consolas,monospace;text-transform:uppercase;letter-spacing:.05em;color:#64735f}.scene-caption strong{font-size:16px;line-height:1.25}.scene-support{display:flex;gap:12px;align-items:center;padding:5px 18px 12px;font-size:11px}.scene-support progress{flex:1;min-width:0}.scene:has(.living-scene) .supporter-badge{position:static;margin:0 12px 12px;padding:8px 10px;flex-shrink:0}.campaign-train{animation:campaign-travel 9s linear infinite}.campaign-ally{animation:campaign-arrive .35s ease-out}@keyframes campaign-travel{to{transform:translateX(295px)}}@keyframes campaign-arrive{from{opacity:.2}to{opacity:1}}
@media(max-width:800px){.scene-caption{padding:7px 10px 0;gap:2px}.scene-caption span{display:none}.scene-caption strong{font-size:12px}.scene-support{padding:3px 10px 6px;font-size:9px;gap:8px}.scene:has(.living-scene) .supporter-badge{margin:0 7px 6px;padding:4px 7px;gap:7px}.scene:has(.living-scene) .supporter-badge .portrait{width:24px;height:24px;font-size:10px}.scene:has(.living-scene) .supporter-badge strong{font-size:11px}.scene:has(.living-scene) .supporter-badge div>span{font-size:9px}}
@media(max-height:670px) and (max-width:800px){.scene:has(.living-scene) .supporter-badge{display:none}.scene-support{display:none}.scene-caption{padding:4px 8px 0}.scene-caption strong{font-size:10px}}
@media(prefers-reduced-motion:reduce){.campaign-train,.campaign-ally{animation:none}}

/* The generated cast is shared between portraits and collected team miniatures. */
.supporter-portrait{object-fit:cover!important;object-position:center!important;border-radius:50%;border:2px solid #b8a6b9;background:#fbf7ef;flex-shrink:0}.scene .supporter-badge .supporter-portrait{width:54px;height:54px}.card-portrait{width:116px;height:116px;align-self:center}.team-roster{display:grid;grid-template-columns:repeat(14,minmax(0,1fr));gap:4px;padding:8px 16px 0;flex-shrink:0}.team-token{aspect-ratio:1;min-width:0;border-radius:50%;border:1px solid #b6b8a9;background:#d9ddcf;overflow:hidden;display:block}.team-token img,.team-token svg{display:block;width:100%;height:100%;object-fit:cover;fill:#a9afa2}.team-token.recruited{border:2px solid #92738a;animation:team-join .4s ease-out}.team-token.waiting{opacity:.55}@keyframes team-join{from{opacity:.3;transform:scale(.85)}to{opacity:1;transform:scale(1)}}
@media(max-width:800px){.team-roster{gap:3px;padding:6px 8px 0}.scene .supporter-badge .supporter-portrait{width:34px;height:34px}.card-portrait{width:88px;height:88px}}
@media(max-height:670px) and (max-width:800px){.team-roster{padding:3px 6px 0;gap:2px}.card-portrait{width:65px;height:65px}}
@media(max-height:520px) and (min-width:650px){.card-portrait{width:58px;height:58px}}
@media(prefers-reduced-motion:reduce){.team-token.recruited{animation:none}}

@media(max-height:520px) and (min-width:650px){.scene-caption{padding:5px 9px 0;gap:2px}.scene-caption span{display:none}.scene-caption strong{font-size:11px}.scene-support{padding:2px 9px 4px;font-size:9px}.team-roster{padding:4px 9px 0;gap:2px}.scene:has(.living-scene) .supporter-badge{margin:0 7px 6px;padding:4px 6px;gap:6px;font-size:10px}.scene .supporter-badge .supporter-portrait{width:28px;height:28px}.scene:has(.living-scene) .supporter-badge div>span{font-size:9px}}

@media(max-width:800px){.introduction .scene img{object-position:80% 50%!important}}

/* Text starts at the panel top; action stacks keep their bottom anchor. */
@media(max-height:520px) and (min-width:650px){.planning .actions,.funding-offer .actions{align-self:end}}

@media(min-width:801px) and (min-height:521px) and (max-height:700px){
 .campaign .reading{gap:8px}.campaign .reading p{font-size:13px}.campaign .notice{font-size:12px}.campaign h1{font-size:28px}
}
@media(max-width:800px){
 .funding-offer .actions button{font-size:13px;padding:8px 10px}.funding-offer .actions small{font-size:11px;margin-top:3px}
}
@media(max-width:800px) and (max-height:670px){
 .funding-offer .reading{gap:5px}.funding-offer .actions{gap:5px}.funding-offer .actions button{padding:6px 8px;font-size:12px}.funding-offer .actions small{font-size:10px}
}
@media(max-height:520px) and (min-width:650px){
 .copy-panel{padding:0}
 .campaign-hud .resource-bar{height:6px;margin:2px 0}.campaign-hud strong{font-size:15px}.campaign-hud span,.campaign-hud small{font-size:9px}
 .camp-actions button{padding:4px;min-height:36px}.camp-actions strong{font-size:11px}.camp-actions span{font-size:9px}
}

@media(max-width:800px) and (max-height:670px){
 .play-panel.planning>.scene,.play-panel.funding-offer>.scene{display:none}
}
@media(min-width:801px) and (min-height:521px) and (max-height:700px){
 .funding-offer .reading p{font-size:12px}.funding-offer .reading{gap:6px}.funding-offer h1{font-size:26px}
}
@media(max-height:520px) and (min-width:650px){
 .play-panel{grid-template-columns:minmax(0,.65fr) minmax(0,1.35fr)}
 .play-panel.planning>.scene,.play-panel.funding-offer>.scene{display:none}
 .campaign:not(.planning):not(.funding-offer) .actions:not(:has(.camp-actions)){flex-direction:row}
 .campaign .reading{gap:4px}.campaign .reading p{font-size:11px;line-height:1.4}.campaign .reading .eyebrow{font-size:9px}.campaign .reading .fine{font-size:10px}
 .campaign h1{font-size:21px}.campaign .copy-panel{gap:5px}
 .build-panel .actions{flex-direction:row}.build-panel .actions>button{flex:1;min-width:0}
}

/* Generated scenery fills the existing frame; the cast lives only in the roster. */
.living-scene .valley-picture{flex:1;min-height:0;position:relative;width:100%;overflow:hidden;background:#d8dcd6}
.living-scene .valley-picture img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:center!important}

.setup-pickers{display:grid;grid-template-columns:1fr 1fr;gap:12px;min-width:0}.setup-pickers>label{min-width:0}.practice-games{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.practice-games button{min-height:44px}

dialog:has(.practice-games) #dialog-content{gap:10px;padding-top:16px}dialog:has(.practice-games) .practice-games{margin-top:0}dialog:has(.practice-games) p{font-size:13px}dialog:has(.practice-games) .practice-games button{font-size:14px;line-height:1.2;padding:8px 10px}
@media(max-height:520px) and (min-width:650px){dialog:has(.practice-games){width:min(740px,calc(100vw - 24px));padding:12px 22px}dialog:has(.practice-games) #dialog-content{gap:7px;padding-top:12px}dialog:has(.practice-games) h2{font-size:22px}dialog:has(.practice-games) .practice-games{grid-template-columns:repeat(3,1fr);gap:5px}dialog:has(.practice-games) .practice-games button{min-height:36px;padding:6px 8px}dialog:has(.practice-games) .job-picker{gap:3px}dialog:has(.practice-games) select{min-height:38px;padding:5px 8px}}
/* No title/navigation strip: the campaign starts at the top of the viewport. */
body.game-window{grid-template-rows:minmax(0,1fr) 28px}
.campaign-tools{position:relative;z-index:6}
.campaign-tools summary{cursor:pointer;list-style:none;font-size:18px;line-height:24px;width:32px;text-align:center;border-radius:5px}
.campaign-tools summary::-webkit-details-marker{display:none}
.campaign-tools nav{position:absolute;right:0;bottom:30px;display:grid;gap:4px;width:170px;padding:8px;background:#fbf7ef;border:1px solid var(--line);border-radius:8px;box-shadow:0 4px 20px #343d4633}
footer .campaign-tools .quiet{padding:8px 10px;min-height:36px;font-size:12px;text-align:left}
.campaign-tools button[hidden]{display:none}
@media(max-height:670px){body.game-window{grid-template-rows:minmax(0,1fr) 23px}.campaign-tools summary{line-height:21px}}
