/* The campaign is a viewport-sized game; menus remain normal documents. */
body.in-campaign{height:100dvh;min-height:0;overflow:hidden;display:flex;flex-direction:column}
.in-campaign header{height:46px;min-height:46px;width:100%;max-width:none;margin:0;padding:5px 16px;gap:12px}
.in-campaign header>a{font-size:22px;gap:8px}.in-campaign .ball{width:31px;height:31px;font-size:8px}.in-campaign .brand-small{font-size:8px;margin-top:2px}.in-campaign .build{font-size:9px}.in-campaign footer{display:none}
.in-campaign main{width:100%;max-width:1600px;padding:8px 12px 12px;min-height:0;flex:1;display:flex;flex-direction:column;overflow:hidden}
.in-campaign .run-top{margin:0 0 9px;gap:14px;flex:0 0 auto;min-height:57px}.in-campaign .run-top h1{font-size:27px;line-height:1.05;margin-top:3px}.in-campaign .run-top .eyebrow{font-size:9px;letter-spacing:1px}.in-campaign .progress{margin-top:8px;gap:3px;max-width:240px}.in-campaign .run-actions{gap:5px;max-width:none;flex-wrap:wrap;flex-direction:row;align-items:center}.in-campaign .run-actions button{padding:7px 9px;font-size:11px;min-height:34px}.in-campaign .run-actions .primary{background:#36493c;color:#d3e9c2;border-color:#708961}
.in-campaign .layout{flex:1;min-height:0;grid-template-columns:266px minmax(0,1fr);gap:12px;display:grid}.in-campaign .layout>.side{min-height:0;overflow:auto;gap:9px;scrollbar-width:thin}.in-campaign .layout>div{min-height:0;overflow:hidden}.in-campaign .layout>div>.panel{height:100%;min-height:0;max-height:100%;overflow:auto}
.in-campaign .panel-head{padding:9px 12px}.in-campaign .panel-head h3{font-size:20px}.in-campaign .team-list{padding:0 9px 5px;display:block}.in-campaign .unit{padding:6px 0;gap:8px;min-height:63px}.in-campaign .unit .avatar{width:37px;height:45px}.in-campaign .unit .avatar canvas{width:37px;height:45px}.in-campaign .unit-title{font-size:11px;gap:4px}.in-campaign .unit-title>span{max-width:146px}.in-campaign .unit-title small{font-size:9px;white-space:nowrap}.in-campaign .unit-traits{display:none}.in-campaign .unit-stats{font-size:9px;line-height:1.4;margin-top:3px}.in-campaign .unit-stats>span:last-child{max-width:116px}.in-campaign .unit-details{padding:2px 0;font-size:9px;margin:0}.in-campaign .order-controls{display:inline-flex;margin:1px 0 0 4px;gap:3px}.in-campaign .order-controls button{padding:1px 5px;font-size:9px;min-height:19px}.in-campaign .order-controls button[data-action=unequip]{max-width:60px;font-size:8px}.in-campaign .empty-slot{padding:6px;margin-top:4px;font-size:10px}
.in-campaign .synergies{padding:7px 10px;display:flex;flex-wrap:wrap;gap:5px}.in-campaign .trait{padding:4px 5px;border:1px solid #3a4d59;border-radius:3px;display:flex;gap:5px;margin:0;font-size:10px}.in-campaign .trait small{font-size:9px}.in-campaign .trait-desc{display:none}.in-campaign .side .note{display:none}.synergy-link{width:100%;background:none;border:0;padding:3px 0;font-size:10px;text-align:left;color:#d9bc87}
.in-campaign .map-panel,.route-inspector .map-panel{display:flex;flex-direction:column;overflow:hidden!important;padding:11px 15px}.in-campaign .map-title,.route-inspector .map-title{flex:0 0 auto;margin:0 0 5px}.in-campaign .map-title h2,.route-inspector .map-title h2{font-size:25px!important;line-height:1.05}.in-campaign .map-title p,.route-inspector .map-title p{font-size:10px;margin:3px 0}.in-campaign .step-badge{font-size:9px;padding:4px 6px}.in-campaign .flash,.route-inspector .flash{flex:0 0 auto;padding:5px 9px;margin:0 0 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:10px;line-height:1.4}
.in-campaign .branch-map,.route-inspector .branch-map{height:auto;min-height:0;flex:1;margin:0;position:relative}.in-campaign .branch-map svg,.route-inspector .branch-map svg{height:100%;width:100%}.in-campaign .route-node,.route-inspector .route-node{width:84px;height:44px;gap:1px}.in-campaign .route-node>span,.route-inspector .route-node>span{width:30px;height:30px;font-size:17px}.in-campaign .route-node>small,.route-inspector .route-node>small{font-size:8px;max-width:82px;line-height:1.05;padding:1px 3px}.route-node canvas{width:29px;height:29px;image-rendering:pixelated}.route-node .item-icon{width:22px;height:22px}.in-campaign .node-legend,.route-inspector .node-legend{flex:0 0 auto;font-size:9px;gap:4px 11px;padding-top:6px;margin-top:4px}.in-campaign .map-instruction,.route-inspector .map-instruction{flex:0 0 auto;font-size:9px;line-height:1.3;margin:5px 0 0}
.in-campaign .battle-panel{display:flex;flex-direction:column;overflow:hidden!important}.in-campaign .battle-head{flex:0 0 auto;padding:10px 15px}.in-campaign .battle-head h2{font-size:25px}.in-campaign .duel-benches{flex:0 0 auto;padding:6px 14px}.in-campaign .bench>div{margin-top:2px}.in-campaign .bench-unit .avatar,.in-campaign .bench-unit .avatar canvas{height:31px!important;width:28px!important}.in-campaign .bench-unit small{font-size:7px}.in-campaign .demo-note,.in-campaign .prep-note{padding:6px 13px;font-size:10px;line-height:1.4;flex:0 0 auto}.in-campaign .arena{height:auto;min-height:170px;flex:1}.in-campaign .sprite-position{bottom:15px}.in-campaign .fighter-label{top:11px;font-size:24px}.in-campaign .fighter-label small{font-size:9px}.in-campaign .battle-toolbar{padding:8px 12px;flex:0 0 auto}.in-campaign .battle-toolbar button{padding:7px 10px;font-size:11px}.in-campaign .combat-log{height:60px;min-height:0;padding:5px 12px;overflow:auto;flex:0 0 auto}.in-campaign .combat-log p{font-size:10px;line-height:1.35;margin:2px 0}.in-campaign .reward{padding:8px 13px;flex:0 0 auto;gap:10px}.in-campaign .reward h3{font-size:23px}.in-campaign .reward p{font-size:10px;line-height:1.4;margin:3px 0}.in-campaign .reward button{font-size:11px;padding:8px 11px}
.in-campaign .offer-panel{padding:18px;display:flex;flex-direction:column}.in-campaign .offer-panel>h2{font-size:28px;margin-top:6px}.in-campaign .offer-panel>p{font-size:12px;margin:7px 0}.in-campaign .offer-grid{gap:10px;margin:12px 0;grid-template-columns:repeat(3,minmax(0,1fr));min-height:0;overflow:auto;flex:1;align-content:center}.in-campaign .offer-card{min-height:150px;padding:10px 8px}.in-campaign .offer-card .avatar{width:64px;height:72px;margin:0 auto 6px}.in-campaign .offer-card .avatar canvas{width:64px;height:72px}.in-campaign .offer-card h3{font-size:23px}.in-campaign .offer-card p{font-size:10px;margin:5px 0 8px}.in-campaign .offer-card>span{font-size:10px}.in-campaign .offer-panel>.text-button{flex:0 0 auto;align-self:flex-start}
.in-campaign .story-panel,.in-campaign .chapter-complete{padding:20px}.in-campaign .story-speaker{margin:8px 0;gap:15px}.in-campaign .story-speaker canvas{width:105px;height:105px}.in-campaign .story-speaker h2{font-size:32px}.in-campaign .story-lines{margin:13px 0}.in-campaign .story-lines p{font-size:13px;line-height:1.65;margin:11px 0}.in-campaign .chapter-complete h2{font-size:35px;margin:12px 0}.in-campaign .next-map{margin:17px 0;padding:16px}.in-campaign .outcome{padding:24px 18px}.in-campaign .outcome h2{font-size:42px}.in-campaign .outcome p{font-size:13px;line-height:1.55;margin:12px auto}.in-campaign .end-team{margin:15px 0;gap:12px}.in-campaign .end-unit .avatar,.in-campaign .end-unit canvas{width:64px;height:73px}
.item-icon{display:inline-block;width:40px;height:40px;object-fit:contain;image-rendering:pixelated;flex-shrink:0;vertical-align:middle}.item-icon.small{width:19px;height:19px}.item-icon.large{width:62px;height:62px}.gear-icon{display:inline-flex;align-items:center;gap:3px}.item-offer>.item-icon{margin:5px auto 14px}
#bag-dialog,#shop-dialog,#squad-dialog,#map-dialog{width:min(680px,calc(100% - 20px));max-width:680px;max-height:90dvh;padding:15px;overflow:hidden}#bag-dialog .dialog-top,#shop-dialog .dialog-top,#squad-dialog .dialog-top,#map-dialog .dialog-top{padding-bottom:9px;border-bottom:1px solid var(--line)}#bag-dialog .dialog-content,#shop-dialog .dialog-content,#squad-dialog .dialog-content{max-height:calc(90dvh - 77px);overflow:auto;scrollbar-width:thin}#bag-dialog .bag-list,#shop-dialog .bag-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px}.bag-list button.item-entry{padding:10px;gap:7px;align-items:flex-start}.item-entry-head{display:flex;gap:9px;align-items:center;width:100%}.item-entry-head strong{font-size:12px}.item-entry-head .item-icon{width:32px;height:32px}.item-entry>span{font-size:11px}.bag-targets{grid-template-columns:repeat(3,minmax(0,1fr))}.bag-help{font-size:11px;line-height:1.6;margin:10px 0}.route-inspector{height:min(76dvh,660px)}.route-inspector>.map-panel{height:100%}#squad-dialog .side{display:block;width:100%}#squad-dialog .side>.panel{margin:9px 0}#squad-dialog .note{display:none}.in-campaign #squad-dialog .team-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px}.in-campaign #squad-dialog .unit-title>span{max-width:none}.in-campaign #squad-dialog .unit{min-height:83px}.in-campaign #squad-dialog .unit .avatar,.in-campaign #squad-dialog .unit .avatar canvas{width:48px;height:57px}.in-campaign .storage-warning{flex:0 0 auto;padding:5px 8px;font-size:10px;margin-bottom:4px}
@media(max-width:900px){.in-campaign .layout{grid-template-columns:224px minmax(0,1fr)}.in-campaign .run-top h1{font-size:23px}.in-campaign .run-actions button{font-size:10px;padding:6px 7px}.in-campaign .unit-stats>span:last-child{max-width:85px}.in-campaign .unit-title>span{max-width:117px}.in-campaign .map-instruction{display:none}}
@media(max-width:760px){.in-campaign header{height:43px;min-height:43px;padding:4px 10px}.in-campaign header>a{font-size:19px}.in-campaign .build{font-size:8px;letter-spacing:.5px}.in-campaign .brand-small{font-size:7px}.in-campaign main{padding:7px 8px 8px}.in-campaign .run-top{display:flex;flex-direction:column;align-items:stretch;gap:7px;margin-bottom:7px;min-height:0}.in-campaign .run-top h1{font-size:24px;overflow-wrap:normal}.in-campaign .run-top .eyebrow{font-size:8px}.in-campaign .progress{display:none}.in-campaign .run-actions{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px}.in-campaign .run-actions button{min-height:34px;font-size:9px;padding:5px 2px;line-height:1.25}.in-campaign .run-actions .secondary-action{display:none}.in-campaign .layout{display:block;min-height:0}.in-campaign .layout>.side{display:none}.in-campaign .layout>div{height:100%}.in-campaign .map-panel,.route-inspector .map-panel{padding:8px}.in-campaign .map-title h2,.route-inspector .map-title h2{font-size:21px!important}.in-campaign .map-title p,.route-inspector .map-title p{font-size:9px;line-height:1.3}.in-campaign .route-node,.route-inspector .route-node{width:65px;height:42px}.in-campaign .route-node>span,.route-inspector .route-node>span{width:29px;height:29px}.in-campaign .route-node>small,.route-inspector .route-node>small{font-size:7px;max-width:65px}.in-campaign .node-legend,.route-inspector .node-legend{font-size:8px;gap:4px 7px}.in-campaign .flash,.route-inspector .flash{font-size:9px}.in-campaign .duel-benches{flex-direction:row;gap:5px;padding:5px 7px}.in-campaign .bench>span{font-size:9px}.in-campaign .bench>div{gap:1px}.in-campaign .bench-unit{min-width:23px}.in-campaign .bench-unit .avatar,.in-campaign .bench-unit .avatar canvas{width:23px!important;height:27px!important}.in-campaign .bench-unit small{font-size:5px}.in-campaign .bench:last-child{text-align:right}.in-campaign .bench>div{justify-content:flex-start}.in-campaign .fighter-label{font-size:20px;left:10px}.in-campaign .fighter-label.right{right:10px}.in-campaign .fighter-label small{font-size:8px;line-height:1.5}.in-campaign .fighter-label .bar{width:120px}.in-campaign .sprite-position{bottom:9px;width:180px;height:210px}.in-campaign .sprite-position.player{left:-10px}.in-campaign .sprite-position.enemy{right:-10px}.in-campaign .combat-log{height:48px}.in-campaign .battle-toolbar{padding:7px 8px;gap:6px}.in-campaign .battle-toolbar button{font-size:10px;padding:7px}.in-campaign .battle-toolbar span{font-size:9px;max-width:95px}.in-campaign .reward{flex-direction:row;align-items:center;padding:7px 9px}.in-campaign .reward h3{font-size:21px}.in-campaign .reward p{font-size:9px}.in-campaign .reward button{padding:7px;font-size:10px;max-width:145px}.in-campaign .offer-panel{padding:12px 9px}.in-campaign .offer-panel>h2{font-size:24px}.in-campaign .offer-panel>p{font-size:10px;line-height:1.4;margin:5px 0}.in-campaign .offer-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin:9px 0;align-content:center}.in-campaign .offer-card{display:flex;min-height:150px;padding:8px 4px;gap:0;text-align:center}.in-campaign .offer-card .avatar{width:54px;height:60px;margin:0 auto 4px;grid-row:auto}.in-campaign .offer-card .avatar canvas{width:54px;height:60px}.in-campaign .offer-card h3{font-size:19px}.in-campaign .offer-card p{font-size:9px;line-height:1.4;margin:4px 0 8px}.in-campaign .offer-card>span{font-size:9px}.in-campaign .item-offer>.item-icon{width:42px;height:42px;margin-bottom:10px}.in-campaign .story-panel,.in-campaign .chapter-complete{padding:16px 12px}.in-campaign .story-speaker{gap:8px}.in-campaign .story-speaker canvas{width:78px;height:89px}.in-campaign .story-speaker h2{font-size:27px}.in-campaign .story-lines{padding-left:11px;margin:10px 0}.in-campaign .story-lines p{font-size:12px;line-height:1.6;margin:9px 0}.in-campaign .chapter-complete h2{font-size:30px}.in-campaign .chapter-complete>p{font-size:12px}.in-campaign .next-map{padding:13px;margin:14px 0}.in-campaign .outcome h2{font-size:34px}.in-campaign .outcome p{font-size:11px}.in-campaign .end-team{gap:8px}.in-campaign .end-unit{width:83px;font-size:11px}.in-campaign .end-unit .avatar,.in-campaign .end-unit canvas{width:52px;height:59px}.in-campaign .run-summary{gap:5px;margin:12px 0}.in-campaign .run-summary span{padding:5px 7px;font-size:10px}#bag-dialog,#shop-dialog,#squad-dialog,#map-dialog{padding:12px;width:calc(100% - 16px)}#bag-dialog .bag-list,#shop-dialog .bag-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.bag-list button.item-entry{padding:8px}.item-entry-head{gap:5px}.item-entry-head strong{font-size:11px}.item-entry-head .item-icon{width:29px;height:29px}.item-entry>span{font-size:10px}.bag-targets{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.in-campaign #squad-dialog .unit{min-height:91px}.in-campaign #squad-dialog .unit .avatar,.in-campaign #squad-dialog .unit .avatar canvas{width:31px;height:42px}.in-campaign #squad-dialog .unit-title>span{font-size:10px}.in-campaign #squad-dialog .unit-stats{font-size:8px}.in-campaign #squad-dialog .order-controls{display:flex;margin:3px 0 0}.in-campaign #squad-dialog .unit-details{font-size:8px}}
@media(max-width:760px){.in-campaign .run-actions{grid-template-columns:repeat(4,minmax(0,1fr))}.in-campaign .run-actions .secondary-action{display:block}}
@media(max-height:620px){.in-campaign .run-top{margin-bottom:5px}.in-campaign .route-node,.route-inspector .route-node{height:34px}.in-campaign .route-node>span,.route-inspector .route-node>span{width:24px;height:24px;font-size:14px}.route-node canvas{width:23px;height:23px}.in-campaign .map-title p{display:none}.in-campaign .map-instruction{display:none}.in-campaign .combat-log{height:34px}.in-campaign .sprite-position{height:165px;width:180px;bottom:0}.in-campaign .sprite-position canvas{height:165px;width:180px}.in-campaign .arena{min-height:125px}.in-campaign .story-speaker canvas{height:60px;width:60px}.in-campaign .story-lines p{margin:6px 0;font-size:11px}.in-campaign .story-panel{padding:12px}.in-campaign .offer-card{min-height:135px}.in-campaign .offer-card .avatar,.in-campaign .offer-card .avatar canvas{height:48px;width:43px}}
