:root{color-scheme:dark;--bg:#111e21;--panel:#1b2b2e;--panel2:#233538;--border:#3c4c49;--text:#f2ecd9;--muted:#a6b6af;--gold:#edbd6c;--green:#93c7a0;--red:#ed856f;--blue:#83bdca;--purple:#bbb0da}*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:Arial,Helvetica,sans-serif}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,a:focus-visible,canvas:focus-visible{outline:3px solid var(--gold);outline-offset:3px}button{transition:background .15s,border-color .15s,transform .15s}button:hover:not(:disabled){filter:brightness(1.1)}[hidden]{display:none!important}#app{max-width:1920px;min-height:100dvh;margin:auto;display:flex;flex-direction:column}#topbar{height:91px;display:flex;align-items:center;gap:30px;padding:0 30px;border-bottom:1px solid var(--border);background:#18272a}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--text);flex-shrink:0}.brand-symbol{position:relative;font:bold 36px Georgia,serif;color:var(--gold);width:39px;height:44px;border:1px solid #7c7458;text-align:center;line-height:42px;transform:skewY(-5deg)}.brand-symbol span{position:absolute;font:12px Arial;right:-4px;top:-6px;background:#18272a;padding:2px}.brand strong{display:block;font-size:24px;letter-spacing:4px;line-height:1.1}.brand small{display:block;color:var(--gold);font-size:8px;letter-spacing:3.5px;margin-top:6px}.mission-head{padding-left:26px;border-left:1px solid var(--border);min-width:185px}.eyebrow{font-size:9px;font-weight:700;letter-spacing:2px;color:var(--gold)}.mission-head b{display:block;font:italic 18px Georgia,serif;margin-top:8px;font-weight:normal}.resources{display:flex;gap:32px;align-items:center;margin-left:auto}.resource{display:flex;align-items:center;gap:10px;min-width:77px}.resource>span{font-size:26px}.resource small{font-size:8px;letter-spacing:1.5px;color:var(--muted);display:block;margin-bottom:6px}.resource b{font-size:21px;line-height:1;font-variant-numeric:tabular-nums}.life>span{color:var(--red);font-size:25px}.supply>span,.supply b{color:var(--gold)}.wave>span{color:var(--blue)}.integrity-track{height:3px;background:#3b4b49;margin-top:7px;width:95px}.integrity-track i{display:block;height:100%;width:100%;background:var(--green)}.top-actions{display:flex;gap:7px}.icon-button{height:36px;width:36px;border:1px solid var(--border);background:transparent;font-size:21px;border-radius:50%;position:relative}.off-mark{font-size:12px;position:absolute;right:4px;bottom:5px;background:var(--panel)}#main{display:grid;grid-template-columns:minmax(0,1fr) 286px;flex:1;min-height:0}#battlefield{display:flex;flex-direction:column;padding:20px 24px 12px;min-width:0;background:radial-gradient(ellipse at 50% 55%,#314d4d 0,#172b2e 67%,#132326 100%)}.map-heading{display:flex;justify-content:space-between;align-items:center;font-size:9px;letter-spacing:1.4px;color:#d9d8c4;gap:15px;min-height:26px}.map-heading>div{display:flex;align-items:center;gap:9px}.map-sub{color:var(--muted);font-size:8px}.live-dot{width:5px;height:5px;border-radius:100%;background:var(--green);box-shadow:0 0 8px #93c7a066}#waveState{color:var(--gold);font-size:9px;letter-spacing:1px;text-align:right}#stage{position:relative;display:flex;align-items:center;justify-content:center;flex:1;min-height:0;padding:10px 0}canvas{display:block;width:100%;height:auto;aspect-ratio:1000/640;max-height:calc(100dvh - 230px);object-fit:contain;border-radius:5px;touch-action:manipulation;filter:drop-shadow(0 16px 20px #06111266);cursor:crosshair}.battle-footer{display:flex;align-items:center;justify-content:space-between;min-height:61px;border-top:1px solid #7a92802e;gap:20px}#hint{line-height:1.6;font-size:11px;color:#c1cbc2;max-width:620px}#hint b{display:block;font-size:8px;letter-spacing:1.5px;color:var(--gold);margin-bottom:3px}#hint span{display:block}.speed{display:flex;gap:3px;flex-shrink:0;background:#132528;padding:3px;border:1px solid var(--border);border-radius:4px}.speed button{width:33px;height:29px;background:transparent;border:0;font-size:11px;font-weight:bold;color:var(--muted);border-radius:2px}.speed button.active{background:var(--gold);color:#253032}#side{padding:20px 18px 14px;background:linear-gradient(110deg,#223337,#192b2e);border-left:1px solid var(--border);display:flex;flex-direction:column;gap:14px}.side-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}.sector-badge{font:italic 22px Georgia;color:#778e86}.section-label{display:flex;justify-content:space-between;font-size:10px;color:#d9e0d5}.muted{color:var(--muted);font-size:9px}#palette{display:grid;gap:8px}.card{display:grid;grid-template-columns:48px 1fr auto;align-items:center;width:100%;padding:9px 9px 9px 5px;background:#2a3b3b;border:1px solid #56645a;border-radius:5px;text-align:left;gap:7px;position:relative;box-shadow:0 3px 0 #0c1b1b44}.card.armed{background:#394738;border-color:var(--gold);box-shadow:inset 3px 0 var(--gold)}.tower-icon{width:48px;height:49px;display:block}.card b{display:block;font-size:12px;margin-bottom:5px}.card small{font-size:9px;color:#bccbc0;line-height:1.5;display:block}.card .cost{font-size:14px;color:var(--gold);font-weight:bold;align-self:start;margin-top:4px}.card .key{position:absolute;bottom:7px;right:9px;font-size:8px;color:#acb9ac}.card.poor .cost{color:#e29580}.card.poor{background:#253234;border-color:#414e49}#towerPanel:empty{display:none}.selection{padding:13px;border:1px solid #72816d;border-radius:4px;background:#2d3c34}.selection .eyebrow{font-size:8px}.selection h3{font-size:14px;margin:7px 0}.selection p{font-size:10px;line-height:1.6;color:#becbc0;margin:5px 0 8px}.selection .stats{display:flex;gap:12px;margin:10px 0;font-size:9px;color:#b7c9ba}.stats b{font-size:14px;color:var(--text);display:block;margin-bottom:3px}.upgrade{display:block;width:100%;text-align:left;border:1px solid #5a6b54;background:#364532;padding:8px;margin:6px 0;border-radius:3px}.upgrade b{font-size:10px}.upgrade .price{float:right;color:var(--gold);font-size:11px}.upgrade small{display:block;font-size:9px;color:#bacaac;margin-top:4px}.sell{display:block;width:100%;margin-top:9px;background:transparent;border:0;border-top:1px solid #62745666;padding:9px 0 0;color:#d9b29e;font-size:10px;text-align:left}.targeting{display:flex;gap:3px;margin-top:7px}.targeting button{background:#23322e;border:1px solid #586851;color:#becbc0;padding:5px 7px;font-size:9px;flex:1}.targeting button.active{background:#d5ba7c;color:#26312a;border-color:#d5ba7c}.intel{padding-top:14px;border-top:1px solid var(--border)}.intel .eyebrow{color:var(--muted);font-size:8px}.intel h3{font:italic 19px Georgia;margin:8px 0 10px}.intel p{font-size:10px;color:#bdc8bd;line-height:1.65;margin:9px 0 0}.enemy-list{display:flex;flex-wrap:wrap;gap:5px}.enemy-chip{border:1px solid #58655a;border-radius:3px;padding:4px 5px;font-size:9px;color:#dbe2d3;background:#293b37}.enemy-chip i{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:4px}.command-bottom{margin-top:auto;padding-top:3px}.ability-button{display:flex;align-items:center;text-align:left;gap:10px;width:100%;padding:10px;border:1px solid #746b53;border-radius:4px;background:#353d32}.ability-icon{font-size:32px;color:var(--gold);line-height:1}.ability-button b{font-size:11px}.ability-button small{display:block;font-size:9px;color:#c0c8b6;margin-top:4px}.ability-button>strong{margin-left:auto;color:var(--gold);font-size:13px}.ability-button.armed{border-color:var(--red);background:#584039}.launch-button{margin-top:9px;width:100%;display:flex;justify-content:space-between;align-items:center;padding:13px 12px;background:var(--gold);border:1px solid #ffdfa1;color:#28322b;font-weight:700;font-size:12px;border-radius:4px;box-shadow:0 3px 0 #8b7848}.launch-button small{display:block;font-weight:400;font-size:9px;margin-top:4px}.launch-button span:last-child{font-size:22px}.command-note{font:italic 10px Georgia;color:#a8b7a8;text-align:center;margin:12px 0 0}.app-footer{height:31px;display:flex;align-items:center;justify-content:space-between;padding:0 26px;border-top:1px solid #394b43;color:#8ea498;font-size:8px;letter-spacing:1.3px;gap:10px}.app-footer i{font-style:normal;color:#697f73;margin:0 4px}.wave-banner{position:absolute;top:35px;left:50%;transform:translate(-50%,-10px);opacity:0;transition:opacity .25s,transform .25s;pointer-events:none;text-align:center;background:#192b28ed;border:1px solid #bca775;padding:14px 30px;min-width:270px;box-shadow:0 8px 20px #10272055;border-radius:4px;font:italic 23px Georgia;color:var(--text)}.wave-banner small{display:block;font:8px Arial;letter-spacing:3px;color:var(--gold);margin-bottom:6px}.wave-banner.show{opacity:1;transform:translate(-50%,0)}#toast{position:absolute;bottom:24px;left:50%;transform:translateX(-50%);padding:10px 18px;border:1px solid #ad9466;border-radius:4px;background:#172c2bf2;color:var(--text);font-size:11px;pointer-events:none;opacity:0;text-align:center;max-width:90%;transition:opacity .15s}#toast.show{opacity:1}.pause-tag{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:flex;align-items:center;gap:16px;background:#182b29ee;border:1px solid #b4a274;padding:18px 25px;border-radius:4px;pointer-events:none;font-size:32px;color:var(--gold)}.pause-tag span{font:bold 11px Arial;letter-spacing:2px;white-space:nowrap}.pause-tag small{display:block;font:10px Arial;letter-spacing:0;color:#b6c5b9;margin-top:7px}#overlay{position:fixed;inset:0;z-index:10;background:#091a1bd9;backdrop-filter:blur(6px);align-items:center;justify-content:center;padding:24px;overflow:auto}.panel{width:min(790px,100%);padding:40px;border:1px solid #6c7961;background:linear-gradient(135deg,#2a3c35,#172b2d 65%);border-radius:7px;box-shadow:0 30px 100px #03151688;position:relative}.panel::before{content:"";position:absolute;top:-1px;left:40px;width:70px;height:3px;background:var(--gold)}.panel h1{font:52px/.98 Georgia,serif;letter-spacing:-2px;margin:17px 0;color:#f3eddb}.panel h1 em{color:var(--gold);font-weight:normal}.panel .intro{font-size:13px;line-height:1.8;max-width:490px;color:#c2cfbf}.briefing-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:30px;margin-top:27px}.briefing-objective{border-left:2px solid var(--gold);padding-left:17px;font:italic 20px/1.5 Georgia;color:#e1dec4}.briefing-objective small{display:block;font:9px Arial;letter-spacing:1.5px;color:#9bad9e;margin-bottom:8px}.difficulty-label{font-size:9px;letter-spacing:2px;color:var(--muted);margin:30px 0 10px}.diff-row{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}.diff-option{padding:12px 7px;background:#243932;border:1px solid #526553;border-radius:3px;color:#d9e0cc;text-align:center}.diff-option b{display:block;font-size:11px}.diff-option small{display:block;font-size:8px;margin-top:5px;color:#9dae9d}.diff-option.active{background:#45523b;border-color:var(--gold);color:var(--gold)}.panel-actions{display:flex;align-items:center;gap:20px;margin-top:25px}.primary{background:var(--gold);border:1px solid #fbd899;padding:13px 24px;color:#28352a;font-weight:bold;font-size:12px;border-radius:4px}.secondary{background:#2a4039;border:1px solid #64775e;padding:12px 18px;font-size:11px;border-radius:4px}.panel .fine{font-size:10px;line-height:1.7;color:#b4c1b0}.panel .fine strong{color:var(--gold)}.result-stats{display:flex;gap:30px;margin:25px 0}.result-stats b{font:28px Georgia;display:block;color:var(--gold);margin-bottom:6px}.result-stats span{font-size:9px;color:var(--muted)}.medal{font-size:32px;color:var(--gold);letter-spacing:9px;margin-top:15px}.setting-row{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);padding:14px 0;font-size:12px}.setting-row small{display:block;color:var(--muted);font-size:10px;margin-top:5px}.setting-row input{accent-color:var(--gold);width:20px;height:20px}.controls-list{font-size:11px;line-height:2;color:#c1ceba}.controls-list b{color:var(--gold);display:inline-block;min-width:105px}.reduced-motion *{transition:none!important;scroll-behavior:auto!important}@media(min-width:1500px){#main{grid-template-columns:minmax(0,1fr) 320px}#side{padding:24px}#battlefield{padding:24px 34px 12px}}@media(max-width:1150px){#topbar{gap:18px;padding:0 20px}.mission-head{display:none}.resources{gap:22px}#battlefield{padding:15px 15px 10px}.map-sub{display:none}#main{grid-template-columns:minmax(0,1fr) 270px}.battle-footer{gap:10px}.speed button{width:27px}#hint{font-size:10px}}@media(max-width:800px){#topbar{height:75px;padding:0 14px;gap:14px}.brand strong{font-size:17px;letter-spacing:2px}.brand small{font-size:6px;letter-spacing:2px}.brand-symbol{width:29px;height:34px;font-size:27px;line-height:32px}.resources{gap:14px}.resource>span{display:none}.resource{min-width:auto}.resource b{font-size:16px}.resource small{font-size:7px;letter-spacing:1px}.integrity-track{width:66px}.top-actions{gap:4px}.icon-button{width:30px;height:30px;font-size:17px}#main{grid-template-columns:1fr}#side{border-left:0;border-top:1px solid var(--border);display:grid;grid-template-columns:1fr 1fr;padding:15px;gap:12px}.side-title{display:none}.section-label{grid-column:1/-1}#palette{grid-column:1/-1;grid-template-columns:repeat(3,1fr);gap:7px}.card{grid-template-columns:36px 1fr;gap:4px;padding:8px 6px}.tower-icon{width:36px;height:42px}.card b{font-size:10px}.card small{font-size:8px}.card .cost{grid-column:2;margin-top:0;font-size:11px}.card .key{display:none}.intel{border:0;padding:4px 6px}.command-bottom{margin:0;padding:0}#towerPanel:not(:empty){grid-column:1/-1}.selection{display:grid;grid-template-columns:1fr 1fr;gap:0 15px}.selection>header{grid-column:1/-1}.selection .targeting,.selection .sell{grid-column:1/-1}.app-footer{font-size:7px;padding:0 15px}.app-footer>span:last-child{display:none}canvas{max-height:none}#stage{padding:6px 0}#battlefield{padding:10px 10px 0}.battle-footer{min-height:62px}.map-heading{font-size:8px}.map-heading #waveState{font-size:8px}.panel{padding:27px}.panel h1{font-size:43px}.briefing-grid{gap:20px}.pause-tag{padding:12px 16px}.pause-tag small{display:none}}@media(max-width:480px){.brand-symbol,.brand small{display:none}.brand strong{font-size:14px;letter-spacing:1.5px}.brand{gap:0}#topbar{gap:11px;padding:0 10px;height:66px}.resources{gap:12px}.resource small{font-size:6px}.resource b{font-size:15px}.top-actions .icon-button{width:27px;height:27px}.top-actions{gap:3px}.integrity-track{width:54px}.wave{display:none}#hint{font-size:9px;line-height:1.45}#hint b{font-size:7px}.speed button{width:25px}.card{display:flex;flex-wrap:wrap;gap:3px;justify-content:center;text-align:center}.tower-icon{width:44px;height:44px}.card>span:nth-child(2){width:100%}.card small{font-size:8px}.card .cost{margin-top:4px}.card b{font-size:10px;margin-bottom:3px}.briefing-grid{grid-template-columns:1fr;margin-top:15px;gap:14px}.briefing-objective{font-size:17px}.panel{padding:24px 20px}.panel h1{font-size:38px;margin:15px 0}.panel .intro{font-size:11px}.difficulty-label{margin-top:22px}.diff-row{gap:5px}.diff-option{padding:10px 3px}.diff-option b{font-size:10px}.diff-option small{font-size:7px}.panel-actions{flex-wrap:wrap;gap:12px;margin-top:20px}.wave-banner{top:8px;padding:10px 18px;font-size:19px;min-width:210px}.wave-banner small{font-size:7px}.app-footer{letter-spacing:.7px}.selection{display:block}.result-stats{gap:20px}.resource.supply{min-width:48px}}
@media(min-width:801px){canvas{width:min(100%,calc((100dvh - 230px) * 1.5625));max-height:none;}}
.sprite-icon{background-image:url('./assets/web/towers-v3.webp');background-size:300% 100%;background-repeat:no-repeat;filter:drop-shadow(0 2px 2px #091b1b55)}.sprite-0{background-position:0 50%}.sprite-1{background-position:50% 50%}.sprite-2{background-position:100% 50%}
.pad-navigator{display:none}@media(max-width:800px){.pad-navigator{display:flex;align-items:center;justify-content:center;gap:16px;margin-bottom:8px}.pad-navigator button{min-width:48px;min-height:44px;border:1px solid #586b5d;background:#263d36;border-radius:4px;color:var(--gold);font-size:20px}.pad-navigator span{font-size:10px;min-width:165px;text-align:center;color:var(--muted)}}

/* Boss state is persistent and readable during the interrupt decision. */
.boss-hud{position:absolute;right:14px;top:14px;width:min(330px,46%);padding:12px 14px;background:rgba(25,35,36,.96);border:1px solid #d1a363;border-radius:5px;box-shadow:0 5px 20px #10252455;pointer-events:none;color:#f4ead4;z-index:2}
.boss-hud[hidden],.boss-interrupt[hidden]{display:none}
.boss-heading{display:flex;justify-content:space-between;gap:8px;font-size:11px;letter-spacing:.08em}.boss-heading span{font-size:9px;color:#edbd6c}
.boss-health,.boss-interrupt{height:5px;background:#0f2021;margin-top:8px;border-radius:3px;overflow:hidden}.boss-health i,.boss-interrupt i{display:block;height:100%;background:#cf7160;transition:width .1s linear}.boss-interrupt i{background:#f4c767}
#bossInstruction{font-size:10px;line-height:1.4;margin-top:7px;color:#dfd8c9}.boss-hud[data-phase=windup]{border-color:#ffc368}.boss-hud[data-phase=stagger]{border-color:#78d6aa}.boss-hud[data-phase=stagger] .boss-heading span{color:#78d6aa}
@media(max-width:600px){.boss-hud{top:4px;right:4px;width:47%;padding:6px 8px}.boss-heading{font-size:8px}.boss-heading span{font-size:7px}#bossInstruction{font-size:8px;margin-top:4px}.boss-health,.boss-interrupt{margin-top:5px;height:3px}}

/* Active combat controls retain text contrast even when no wave can be called. */
.launch-button:disabled{opacity:1;background:#344742;color:#dfe5d5;border-color:#65756a;box-shadow:none}
@media(min-width:801px){.card b{font-size:13px}.card small{font-size:11px}.intel p{font-size:12px;line-height:1.6}.enemy-chip{font-size:10px}.section-label{font-size:11px}.command-note{font-size:11px}.card{min-height:78px}.intel h2{font-size:22px}}
@media(min-width:801px){.eyebrow{font-size:10px}.map-heading{font-size:10px}.card .key{font-size:10px}.app-footer{font-size:9px;letter-spacing:1px}#hint b{font-size:9px}#hint{font-size:12px}}

/* Combat-first layout: keep the illustrated field dominant and details contextual. */
.intel-toggle{display:none}
.close-selection{float:right;width:28px;height:28px;padding:0;border:1px solid #6c806d;border-radius:4px;background:#233831;color:#e5dec5;font-size:19px;line-height:1}
@media(min-width:801px){
 #app{height:100dvh;min-height:600px;max-width:none}
 #topbar{height:60px;min-height:60px;padding:0 22px;gap:24px;box-shadow:0 3px 12px #06131355;z-index:2}
 .brand strong{font-size:20px;letter-spacing:3px}.brand-symbol{height:35px;width:32px;font-size:29px;line-height:33px}.brand small{font-size:7px;margin-top:3px}
 .mission-head{padding-left:20px}.mission-head b{font-size:16px;margin-top:3px}.mission-head .eyebrow{font-size:8px}
 .resource b{font-size:20px}.resource small{font-size:8px;margin-bottom:4px}.integrity-track{margin-top:4px}
 #main{display:flex;flex-direction:column;position:relative}
 #battlefield{position:relative;flex:1;padding:0;overflow:hidden;background:#183b40}
 .map-heading,.app-footer{display:none}
 #stage{padding:0;min-height:0}
 canvas{width:min(100%,calc((100dvh - 166px) * 1.5625));max-height:none;border-radius:0;filter:none}
 .battle-footer{position:absolute;right:16px;top:12px;z-index:3;min-height:0;border:0;pointer-events:none}
 #hint{display:none}.speed{pointer-events:auto;background:#172e2cf2;border-color:#9c9874;box-shadow:0 3px 8px #0c252b55}
 .speed button{width:35px;height:30px}
 #side{position:relative;flex-direction:row;align-items:center;justify-content:center;gap:16px;height:106px;min-height:106px;padding:12px 24px;border-left:0;border-top:2px solid #96866a;background:linear-gradient(#314741,#203530);box-shadow:0 -4px 14px #0d252b55;z-index:4}
 .side-title,.section-label,.command-note{display:none}
 #palette{display:flex;gap:10px;min-width:0;flex:0 1 690px}
 .card{min-height:78px;flex:1;min-width:0;grid-template-columns:48px 1fr auto;padding:8px;gap:6px;background:linear-gradient(#42584b,#2b4139);border:1px solid #8c9272;border-bottom:3px solid #182d27;border-radius:7px;box-shadow:inset 0 1px #c7c59b55,0 3px 5px #12282055}
 .card b{font-size:13px}.card small{font-size:10px;line-height:1.4}.card .cost{font-size:15px}.card .key{bottom:8px;font-size:9px}
 .card.armed{background:linear-gradient(#647153,#394d39);border-color:#f0cd80;box-shadow:inset 0 0 0 1px #f0cd80,0 0 14px #ecc67b22}
 .card.poor{background:linear-gradient(#354941,#283a33)}
 .command-bottom{display:flex;align-items:stretch;gap:10px;padding:0;margin:0;flex:0 1 405px}
 .ability-button{width:160px;min-width:115px;padding:10px;box-shadow:inset 0 1px #c7c59b33,0 3px 0 #152b24;border-radius:6px}
 .ability-icon{font-size:27px}.ability-button small{font-size:9px;max-width:96px;line-height:1.4}.ability-button>strong{font-size:13px}
 .launch-button{margin:0;min-width:150px;max-width:190px;padding:12px;line-height:1.5;box-shadow:inset 0 1px #fff0bf,0 3px 0 #816437;border-radius:6px}
 .launch-button:disabled{box-shadow:inset 0 1px #afc0a533,0 3px 0 #152b24}
 .intel-toggle{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-width:54px;background:#213c35;border:1px solid #869272;border-radius:6px;font-size:18px;color:#e8d49a;padding:8px}
 .intel-toggle small{font-size:8px;letter-spacing:1px}.intel-toggle[aria-expanded=true]{background:#586a48;border-color:#f0cd80}
 .intel{display:none;position:absolute;bottom:118px;right:24px;width:300px;padding:18px;background:#20372ff5;border:1px solid #a39f75;border-radius:7px;box-shadow:0 10px 25px #081b2580}
 #side.intel-open .intel{display:block}.intel h3{font-size:22px}.intel p{font-size:12px}
 #towerPanel:not(:empty){position:absolute;right:24px;bottom:118px;width:310px;max-height:calc(100dvh - 225px);overflow:auto;border-radius:7px;box-shadow:0 10px 25px #081b2580}
 .selection{padding:17px;border-color:#ada578;background:linear-gradient(120deg,#354c3bfa,#20372ffa);border-radius:7px}
 .selection h3{font-size:18px}.selection .stats{font-size:10px;justify-content:space-between}.selection p{font-size:11px}.upgrade{padding:10px}.upgrade b{font-size:12px}.upgrade small{font-size:10px}.targeting button{min-height:32px;font-size:10px}.sell{font-size:11px;min-height:32px}
 .wave-banner{top:16px}.boss-hud{top:58px}
}
@media(min-width:801px) and (max-width:1150px){
 #side{gap:8px;padding:10px 12px}#palette{gap:6px}.card{grid-template-columns:38px 1fr;padding:7px;gap:4px}.card .tower-icon{width:38px;height:46px}.card b{font-size:11px}.card small{font-size:9px}.card .cost{grid-column:2;font-size:12px;margin-top:0}.card .key{right:6px;bottom:7px;font-size:8px}.command-bottom{gap:6px;flex-basis:345px}.ability-button{width:130px;padding:8px;gap:6px}.ability-button>strong{display:none}.launch-button{min-width:135px;font-size:11px}.intel-toggle{min-width:44px}.speed button{width:30px}
}
.action-hint{display:none}
@media(min-width:801px){.action-hint{display:block;position:absolute;bottom:12px;left:50%;transform:translateX(-50%);max-width:80%;padding:10px 16px;background:#19382fed;border:1px solid #b9a77b;border-radius:5px;box-shadow:0 3px 10px #122a3355;color:#f5eaca;font-size:12px;pointer-events:none;text-align:center}}

/* Manhattan operations map and mission flow. */
body[data-mission="soho"]{--mission-accent:#d89b6f}body[data-mission="times-square"]{--mission-accent:#db78a8}body[data-mission="seaport"]{--mission-accent:#6fc2c9}body[data-mission="union-square"]{--mission-accent:#9ab774}body[data-mission="penn-station"]{--mission-accent:#d49b64}body[data-mission="rockefeller"]{--mission-accent:#85a9d0}body[data-mission="chinatown"]{--mission-accent:#d56758}
.campaign-panel{width:min(1120px,100%);padding:30px;overflow:hidden;background:linear-gradient(140deg,#263b35 0,#14272a 72%)}
.campaign-panel::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,transparent 49.8%,#e8c0780a 50%,transparent 50.2%),repeating-linear-gradient(0deg,transparent 0 39px,#dce5d205 40px)}
.campaign-panel>*{position:relative;z-index:1}.campaign-header{display:flex;align-items:flex-end;justify-content:space-between;gap:28px;padding-bottom:22px;border-bottom:1px solid #7f90705c}.campaign-header h1{font-size:48px;margin:11px 0 6px}.campaign-header .intro{max-width:610px;margin:0}.mode-switch{display:flex;padding:4px;background:#112528;border:1px solid #4b625b;border-radius:7px;flex:none}.mode-switch button{min-width:140px;padding:10px 14px;border:0;border-radius:4px;background:transparent;text-align:left;color:#9fb1aa}.mode-switch button.active{background:#4d604e;color:#fff0c8;box-shadow:inset 0 0 0 1px #e8c078}.mode-switch b,.mode-switch small{display:block}.mode-switch small{font-size:8px;letter-spacing:.5px;margin-top:4px;color:inherit;opacity:.8}.campaign-body{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(300px,.85fr);gap:28px;min-height:470px;margin-top:24px}.campaign-route{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-content:start;position:relative;padding:8px 0 8px 20px}.campaign-route::before{content:"";position:absolute;left:6px;top:20px;bottom:20px;width:2px;background:linear-gradient(#d06855,#e8bd71 40%,#79bfc1);box-shadow:0 0 15px #e5bd7355}.mission-card{--mission-art:none;min-height:98px;display:grid;grid-template-columns:102px minmax(0,1fr);align-items:stretch;position:relative;overflow:hidden;padding:0;text-align:left;background:#233735;border:1px solid #4e625b;border-radius:6px;box-shadow:0 5px 12px #07191944}.mission-card:nth-child(1),.mission-card:nth-child(4),.mission-card:nth-child(7){grid-column:1}.mission-card:nth-child(2),.mission-card:nth-child(3),.mission-card:nth-child(5),.mission-card:nth-child(6){grid-column:2}.mission-card:nth-child(2){grid-row:1}.mission-card:nth-child(3){grid-row:2}.mission-card:nth-child(4){grid-row:3}.mission-card:nth-child(5){grid-row:3}.mission-card:nth-child(6){grid-row:4}.mission-card:nth-child(7){grid-row:5}.mission-card::before{content:"";position:absolute;left:-20px;top:50%;width:9px;height:9px;border-radius:50%;background:#ddb86f;border:2px solid #182d2e;box-shadow:0 0 0 3px #ddb86f44;transform:translateY(-50%)}.mission-card-art{background-image:linear-gradient(90deg,transparent 45%,#223735),var(--mission-art),linear-gradient(135deg,#4b625c,#172a2e);background-size:cover;background-position:center;filter:saturate(.76) contrast(1.05)}.mission-card-copy{min-width:0;padding:12px 10px}.mission-card-copy small{display:block;color:#b5c4b9;font-size:7px;letter-spacing:1.2px;text-transform:uppercase}.mission-card-copy b{display:block;margin:7px 0 5px;font:italic 16px Georgia;color:#f0ead9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mission-card-copy em{display:block;color:#94a9a1;font:normal 8px Arial}.mission-card .mission-medals{position:absolute;right:8px;bottom:7px;font-size:10px}.mission-card.selected{background:#3c5042;border-color:#edc578;box-shadow:inset 0 0 0 1px #edc578,0 8px 20px #081a1a66}.mission-card.selected .mission-card-art{filter:saturate(1) contrast(1.05)}.mission-medals{color:#efc875;letter-spacing:2px;white-space:nowrap}.mission-dossier{padding:5px 0 0}.dossier-art{--mission-art:none;height:145px;position:relative;margin-bottom:20px;border:1px solid #78846b;border-radius:6px;background-image:linear-gradient(0deg,#172b2ce6,transparent 72%),var(--mission-art),linear-gradient(135deg,#47605c,#172a2e);background-size:cover;background-position:center;box-shadow:0 12px 24px #07191b66}.dossier-art::before{content:"";position:absolute;inset:0;background:linear-gradient(125deg,transparent 55%,#efc87a1f)}.dossier-art span{position:absolute;right:14px;bottom:7px;font:italic 50px Georgia;color:#f0ce8855}.mission-dossier h2{font:italic 31px Georgia;margin:8px 0 10px;color:#f4edda}.mission-dossier>p{font-size:11px;line-height:1.65;color:#bdcbbf;margin:0 0 15px}.dossier-objective{padding:11px 13px;border-left:2px solid #e7bc70;background:#233934;font:italic 14px/1.35 Georgia}.dossier-objective small{display:block;font:7px Arial;letter-spacing:1.4px;color:#9db0a4;margin-bottom:5px}.boss-file{display:grid;grid-template-columns:1fr auto;align-items:center;gap:3px 12px;padding:12px 0;border-bottom:1px solid #53625a;border-top:1px solid #53625a;margin-top:14px}.boss-file span{font-size:7px;letter-spacing:1.4px;color:#d1816e}.boss-file b{grid-row:1/3;grid-column:2;font:italic 16px Georgia;color:#ecc174}.boss-file small{font-size:9px;color:#9eb0a7}.dossier-record{display:flex;align-items:center;gap:9px;margin-top:14px}.dossier-record>b{font-size:9px;color:#b8c6bb}.dossier-record>span[aria-hidden]{font:28px Georgia;color:#e8c078}.mission-dossier .panel-actions{margin-top:18px}.mission-dossier .primary{width:100%}
.mission-briefing{width:min(980px,100%);padding:0;display:grid;grid-template-columns:minmax(290px,.9fr) minmax(410px,1.25fr);overflow:hidden}.mission-briefing::before{left:0;width:42%;height:3px}.briefing-art{--mission-art:none;min-height:580px;position:relative;background-image:linear-gradient(0deg,#132729e8 0,transparent 55%),var(--mission-art),linear-gradient(135deg,#405b56,#14282c);background-size:cover;background-position:center}.briefing-art::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 55%,#182c2de8)}.briefing-number{position:absolute;left:24px;bottom:18px;z-index:1;font:italic 76px Georgia;color:#f0cb7a55}.briefing-back{position:absolute;z-index:2;left:18px;top:18px;padding:9px 12px;border:1px solid #b2ad83;background:#15292bd9;border-radius:4px;color:#efe5ca;font-size:10px}.briefing-copy{padding:36px 38px;align-self:center}.briefing-copy h1{font-size:46px}.mission-briefing .briefing-grid{grid-template-columns:1fr;gap:12px;margin-top:20px}.mission-briefing .briefing-objective{font-size:18px}.confirm-panel h1,.result-panel h1{font-size:42px}.command-note b,.command-note span{display:block}.command-note b{font:7px Arial;letter-spacing:1.2px;color:#d9b96e;margin-bottom:4px}
@media(max-width:900px){.campaign-panel{padding:24px}.campaign-header{align-items:flex-start}.campaign-header h1{font-size:40px}.campaign-body{grid-template-columns:1fr}.mission-dossier{display:grid;grid-template-columns:180px 1fr;gap:0 18px}.dossier-art{grid-row:1/7;height:100%;min-height:240px}.mission-dossier .eyebrow,.mission-dossier h2,.mission-dossier>p,.dossier-objective,.boss-file,.dossier-record,.mission-dossier .panel-actions{grid-column:2}.mission-dossier .panel-actions{margin-top:14px}.mission-briefing{grid-template-columns:260px 1fr}.briefing-copy{padding:30px}.briefing-copy h1{font-size:38px}}
@media(max-width:680px){#overlay{padding:10px;align-items:flex-start}.campaign-panel{padding:20px 15px}.campaign-header{display:block}.campaign-header h1{font-size:36px}.mode-switch{margin-top:16px;width:100%}.mode-switch button{min-width:0;flex:1}.campaign-body{margin-top:16px;gap:20px}.campaign-route{grid-template-columns:1fr;padding-left:18px}.mission-card,.mission-card:nth-child(n){grid-column:1;grid-row:auto}.mission-card{min-height:84px;grid-template-columns:86px 1fr}.mission-card-copy{padding:10px}.mission-card-copy b{font-size:14px}.mission-dossier{display:block;padding:0 2px}.dossier-art{height:130px;min-height:0}.mission-dossier .eyebrow,.mission-dossier h2,.mission-dossier>p,.dossier-objective,.boss-file,.dossier-record,.mission-dossier .panel-actions{display:revert}.mission-briefing{display:block}.briefing-art{min-height:180px;height:180px}.briefing-art::after{background:linear-gradient(0deg,#182c2de8,transparent 70%)}.briefing-number{font-size:52px}.briefing-copy{padding:24px 20px}.briefing-copy h1{font-size:36px}.mission-briefing .diff-row{grid-template-columns:1fr 1fr}.confirm-panel h1,.result-panel h1{font-size:34px}.result-stats{flex-wrap:wrap}.panel-actions .primary,.panel-actions .secondary{min-height:44px}}
#bossTrait{font-size:9px;line-height:1.35;color:#a8dbe8;margin-top:4px}#bossTrait:empty{display:none}@media(max-width:600px){#bossTrait{font-size:7px}}

/* Upgrade choices share their actual battlefield silhouettes. */
.specialization-icon{display:block;float:left;width:42px;height:42px;margin:0 9px 0 0;background-image:url('./assets/web/tower-specializations.webp');background-size:300% 200%;background-repeat:no-repeat}
.upgrade{min-height:62px;display:flow-root}.chosen{min-height:46px;line-height:1.6;display:flow-root}.chosen .specialization-icon{width:46px;height:46px}

/* Keep operations in reading order and the selected briefing within reach. */
.campaign-body{min-height:0}
.campaign-route{align-content:start;gap:12px;padding:0}
.campaign-route::before,.mission-card::before{display:none}
.mission-card:nth-child(n){grid-column:auto;grid-row:auto}
.mission-card{min-height:104px}
.mission-card-copy small{font-size:9px;letter-spacing:.8px}
.mission-card-copy em{font-size:10px}
.mission-card-copy b{font-size:17px}
.mission-card .mission-medals{font-size:12px}
.mode-switch small{font-size:10px}
.mission-dossier>p{font-size:12px}
.dossier-objective small,.boss-file span{font-size:9px}
.boss-file small,.dossier-record>b{font-size:11px}
.resume-session{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;margin-top:18px;border:1px solid #a89c6b;border-radius:6px;background:#34493c}
@media(max-width:680px){
 .campaign-body{display:flex;flex-direction:column;gap:22px}
 .mission-dossier{order:-1;display:grid;grid-template-columns:78px minmax(0,1fr);gap:5px 12px}
 .mission-dossier .dossier-art{grid-column:1;grid-row:1/4;height:90px;min-height:0;margin:0}
 .dossier-art span{font-size:30px;right:8px}
 .mission-dossier .eyebrow,.mission-dossier h2,.mission-dossier>p{grid-column:2}
 .mission-dossier h2{font-size:26px;margin:0}
 .mission-dossier>p{font-size:11px;line-height:1.45;margin:0}
 .mission-dossier .dossier-objective,.mission-dossier .boss-file,.mission-dossier .dossier-record,.mission-dossier .panel-actions{grid-column:1/-1}
 .mission-dossier .dossier-objective{margin-top:6px}
 .mission-dossier .boss-file{margin-top:5px;padding:9px 0}
 .mission-dossier .dossier-record{margin-top:3px}
 .mission-dossier .panel-actions{margin-top:8px;display:flex}
 .campaign-route{gap:8px}
 .mission-card{min-height:80px}
 .mission-card-copy b{font-size:16px}
 .resume-session{flex-direction:column;align-items:stretch;gap:10px;padding:12px}
 .resume-session button{min-height:44px}
}
@media(prefers-reduced-motion:reduce){button{transition:none}}
.mobile-review-bar{display:none}
@media(max-width:680px){
 .mission-dossier .boss-file{display:grid;grid-template-columns:1fr auto;gap:4px 10px}
 .mission-dossier .dossier-record{display:flex;align-items:center;gap:9px}
 .campaign-panel{padding-bottom:90px}
 .mobile-review-bar{display:flex;position:fixed;left:10px;right:10px;bottom:0;z-index:12;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px calc(12px + env(safe-area-inset-bottom));background:#1b302ef5;border:1px solid #84916a;border-radius:8px 8px 0 0;box-shadow:0 -8px 24px #07191966}
 .mobile-review-bar>span{font:italic 17px Georgia;color:#f4ecd5;min-width:0}
 .mobile-review-bar .primary{min-height:44px;padding:12px 18px;white-space:nowrap;font-size:12px}
}
.resume-session{width:100%;text-align:left;font-size:13px;min-height:58px}
.resume-session small{font-size:11px;color:#d7dfca;line-height:1.5}
@media(max-width:680px){
 /* A backdrop filter creates a containing block for fixed descendants, making
    the review bar scroll with the dialog instead of staying on screen. */
 #overlay{backdrop-filter:none;background:#0d2022f5}
}
.build-preview .primary{width:100%;min-height:44px;font-size:13px;padding:12px 10px}
.build-preview .secondary{min-height:38px}
.build-preview p{line-height:1.5}
.build-preview .coverage-warning{color:#f2cf87;border-left:2px solid #e6bb6b;padding-left:10px}

/* Touch play: keep primary commands easy to reach without keyboard shortcuts. */
button{touch-action:manipulation}
@media(max-width:800px){
 #topbar{padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right))}
 .top-actions .icon-button{width:44px;height:44px}
 #topbar{gap:6px}.resources{gap:8px}.brand strong{font-size:12px}
 .speed button{width:44px;height:44px}
 .battle-footer{flex-wrap:wrap;justify-content:center;padding:6px 0}
 #hint{flex-basis:100%;text-align:center}
 #side{display:flex;flex-direction:column;align-items:stretch;padding:10px 10px max(10px,env(safe-area-inset-bottom));gap:10px}
 #palette{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));order:0}
 .section-label,.command-note{display:none}
 .command-bottom{order:1;display:flex;gap:8px}
 .ability-button,.launch-button{flex:1;min-width:0;min-height:48px;margin:0}
 #towerPanel{order:2}.intel{order:3}
 .selection .targeting button,.selection .sell,.selection .close-selection,.build-preview .secondary{min-height:44px}
 .selection .targeting button{font-size:11px}
 .app-footer{display:none}
}
@media(pointer:coarse) and (orientation:landscape) and (max-height:600px){
 #app{height:auto;min-height:100dvh}
 #topbar{height:52px;min-height:52px}
 #main{display:grid;grid-template-columns:minmax(0,1fr) 260px;align-items:start}
 #battlefield{position:sticky;top:0;padding:0;overflow:visible}
 #stage{padding:0}
 canvas{width:min(100%,calc((100dvh - 104px) * 1.5625));max-height:none}
 .map-heading,#hint,.pad-navigator,.action-hint{display:none}
 .battle-footer{position:static;min-height:48px;justify-content:center;padding:2px;pointer-events:auto}
 .speed button{width:44px;height:44px}
 #side{display:flex;flex-direction:column;align-items:stretch;height:auto;min-height:0;padding:8px;gap:8px;border-top:0;border-left:1px solid var(--border)}
 #palette{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;flex:none}
 .card{display:flex;flex-direction:column;min-height:80px;padding:5px;gap:3px;text-align:center}
 .card .tower-icon{width:32px;height:32px}.card b{font-size:10px}.card small,.card .key{display:none}.card .cost{font-size:12px}
 .command-bottom{display:flex;flex-wrap:wrap;flex:none;gap:6px}
 .ability-button,.launch-button{width:auto;flex:1;min-width:100px;min-height:48px;padding:8px;margin:0}
 .intel-toggle{display:none}.intel{display:block;position:static;width:auto;padding:8px;order:3}
 #towerPanel:not(:empty){position:static;width:auto;max-height:none;order:2}
 .selection .targeting button,.selection .sell,.selection .close-selection{min-height:44px}
 .top-actions .icon-button{width:44px;height:44px}
 .app-footer,.side-title,.section-label,.command-note{display:none}
 #overlay{align-items:flex-start}
}
@media(pointer:coarse) and (orientation:landscape) and (max-height:600px){
 .ability-button>strong{display:block}
}
@media(max-width:360px){
 #topbar{padding-left:6px;padding-right:6px;gap:4px}
 .brand strong{font-size:10px;letter-spacing:.5px}
 .resources{gap:5px}.resource.supply{min-width:38px}
 .resource b{font-size:13px}.integrity-track{width:46px}
 .top-actions{gap:0}
}
/* Touch hardening: no long-press text selection or callout on game chrome, no pull-to-refresh mid wave. Inputs and copy inside dialogs stay selectable. */
#app{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}html,body{overscroll-behavior:none}#overlay p,#overlay h1{-webkit-user-select:text;user-select:text}
/* Portrait phones: keep the open build or tower panel pinned in view. In normal flow it lands below the Deploy bar, under mobile Safari's toolbar, which hides the Build button. Only the Build confirmation is pinned: pinning the card prompt would cover the cards, and pinning a selected tower would cover Deploy right after every build. */
@media(max-width:800px) and (orientation:portrait){#towerPanel:has(#confirmBuild){position:sticky;bottom:calc(env(safe-area-inset-bottom,0px) + 8px);z-index:6;max-height:62dvh;overflow:auto;border-radius:7px;box-shadow:0 -10px 24px #081b25d9}}

/* Readable authored-wave briefing stays visible beside the battlefield. */
.wave-plan{display:flex;gap:16px;align-items:center;flex:none;padding:9px 18px;background:#182e2c;border-bottom:1px solid #7c805d;color:#d8e1cf;min-height:64px;font-size:11px;line-height:1.5}
.wave-plan[hidden]{display:none}.plan-heading{flex:none;min-width:78px;border-right:1px solid #62735a;padding-right:14px}.plan-heading b{display:block;color:#efd18f;font-size:11px;letter-spacing:1.4px}.plan-heading span{font-size:10px;color:#aebfaf}.plan-content{min-width:0}.plan-routes{display:flex;gap:6px 18px;flex-wrap:wrap}.plan-route strong{color:#e6e4cf;margin-right:5px}.plan-route.new-entry strong{color:#ffb48b}.plan-counters{margin-top:3px;color:#adbfad;font-size:10px}.plan-counters>b{font-size:8px;letter-spacing:1px;color:#dfc38b;margin-right:6px}.plan-schedule{border-top:1px solid #65765b;padding-top:10px}.plan-schedule>small{font-size:8px;letter-spacing:.6px;color:#cfba8c}.plan-schedule p{margin:9px 0}.plan-schedule b,.plan-schedule span{display:block}.plan-schedule span{font-size:11px;color:#c0cebf}
@media(min-width:801px){#battlefield:has(.wave-plan:not([hidden])) canvas{width:min(100%,calc((100dvh - 230px) * 1.5625))}#battlefield:has(.wave-plan:not([hidden])) .battle-footer{top:78px}.intel{max-height:calc(100dvh - 240px);overflow:auto}}
@media(max-width:800px){.wave-plan{padding:8px 10px;gap:9px;font-size:10px;align-items:flex-start}.plan-heading{min-width:62px;padding-right:8px}.plan-heading b{font-size:9px}.plan-heading span{font-size:9px}.plan-routes{gap:4px}.plan-route{display:block;width:100%}.plan-counters{font-size:9px;line-height:1.5}}
@media(pointer:coarse) and (orientation:landscape) and (max-height:600px){.wave-plan{padding:6px 8px;font-size:9px}.plan-counters{font-size:8px}.plan-heading{min-width:58px}.plan-routes{gap:2px 10px}.plan-route{width:auto}#battlefield:has(.wave-plan:not([hidden])) canvas{width:min(100%,calc((100dvh - 184px) * 1.5625))}.battle-footer{position:static}}

/* Arcade stage select: artwork, selection and play take priority over briefing copy. */
.arcade-select{--arcade-gold:#ffd16b;padding:28px;background:radial-gradient(ellipse at 95% 0,#295b5266,transparent 55%),#122626;border:1px solid #61776a;box-shadow:0 24px 100px #0009}
.arcade-select::after{background:repeating-linear-gradient(0deg,transparent 0 3px,#ffffff02 4px);opacity:.6}
.arcade-select .campaign-header{align-items:center;padding-bottom:20px;border-bottom:1px solid #6b887844}
.arcade-select .campaign-header h1{font:950 clamp(30px,4.4vw,54px)/.95 Impact,'Arial Black',sans-serif;letter-spacing:1px;margin:9px 0 0;color:#f7f3df}
.arcade-select .campaign-header h1 em{font-style:normal;color:var(--arcade-gold)}
.arcade-select .eyebrow{color:#d5bd80;font-size:10px;letter-spacing:2px}
.arcade-score{font:bold 27px/1 monospace;color:var(--arcade-gold);white-space:nowrap}.arcade-score small{color:#819b92;font-size:16px}
.arcade-toolbar{display:flex;justify-content:space-between;align-items:center;gap:16px;margin:18px 0}
.arcade-select .mode-switch{margin:0;border:1px solid #547166;border-radius:5px;padding:3px;background:#0c1e20}
.arcade-select .mode-switch button{min-width:112px;text-align:center;text-transform:uppercase;font-size:11px;font-weight:900;letter-spacing:1px;min-height:42px}
.arcade-select .mode-switch button.active{background:var(--arcade-gold);color:#152829;box-shadow:none}
.arcade-select .resume-session{width:auto;min-height:48px;margin:0;padding:8px 14px;flex-direction:column;align-items:flex-start;gap:3px;background:#203e38;border-color:#54786a;color:#b8e5cd}
.arcade-select .resume-session b{font-size:11px;letter-spacing:1px}.arcade-select .resume-session small{font-size:10px;color:#a8bfb5}
.arcade-select .campaign-body{grid-template-columns:minmax(0,1.45fr) minmax(285px,1fr);gap:26px;margin-top:0}
.arcade-select .campaign-route{grid-template-columns:1fr 1fr;gap:12px}
.arcade-select .mission-card{min-height:108px;grid-template-columns:94px minmax(0,1fr);border:1px solid #456459;background:#1d3532;border-radius:5px;box-shadow:0 4px 0 #091a1b}
.arcade-select .mission-card-art{background-image:linear-gradient(90deg,transparent 65%,#1d3532),var(--mission-art);filter:saturate(.85)}
.arcade-select .mission-card-copy{padding:14px 9px 26px}.arcade-select .mission-card-copy small{font:900 9px monospace;letter-spacing:1px;color:#99b1a7}
.arcade-select .mission-card-copy b{font:900 13px/1.15 Arial,sans-serif;text-transform:uppercase;white-space:normal;overflow:visible;margin:8px 0 0;color:#f3edd5}
.arcade-select .mission-card.selected{border-color:var(--arcade-gold);box-shadow:inset 0 0 0 1px var(--arcade-gold),0 4px 0 #907139,0 0 20px #ffd16b15;background:#31483b}
.arcade-select .mission-card.selected .mission-card-art{filter:saturate(1.12)}
.arcade-select .mission-card:hover{border-color:#a9c7b8;transform:translateY(-2px)}
.arcade-select .mission-card.selected:hover{border-color:var(--arcade-gold)}
.arcade-select .mission-dossier{display:block;padding:0;min-width:0}
.arcade-select .dossier-art{height:220px;margin-bottom:17px;border-color:#637c65;border-radius:5px;background-image:linear-gradient(0deg,#102728aa,transparent 65%),var(--mission-art);background-position:center;background-size:cover}
.arcade-select .dossier-art span{font:900 60px/.9 Impact,'Arial Black',sans-serif;color:#fff0c2;bottom:12px;right:14px;text-shadow:3px 3px #142623}
.arcade-select .mission-dossier h2{font:900 26px/1.08 Arial,sans-serif;margin:8px 0 13px;color:#f6f0dc}
.arcade-stage-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;color:#a9c2b6;font-size:10px}.arcade-stage-meta .mission-medals{font-size:18px}
.arcade-difficulty{display:flex;justify-content:space-between;align-items:center;margin-top:18px;padding-top:14px;border-top:1px solid #456459;color:#b2c9bc;font-size:11px;text-transform:uppercase;font-weight:bold;letter-spacing:1px}
.arcade-difficulty select{font:700 12px Arial;color:#f2ecd3;background:#203b35;border:1px solid #5d7a69;border-radius:4px;padding:10px 28px 10px 12px;min-height:44px}
.arcade-select .mission-dossier .panel-actions{margin-top:14px}
.arcade-select .primary{display:flex;align-items:center;justify-content:space-between;gap:20px;background:var(--arcade-gold);color:#142625;font:900 17px Arial;letter-spacing:1px;min-height:58px;border:1px solid #ffe4a5;border-bottom:5px solid #b6853c;border-radius:5px}
.arcade-select .primary:hover{background:#ffdf92;transform:translateY(-1px)}
@media(max-width:900px) and (min-width:681px){.arcade-select .campaign-body{grid-template-columns:minmax(0,1fr) minmax(260px,.85fr)}.arcade-select .mission-card{grid-template-columns:64px minmax(0,1fr)}.arcade-select .mission-card-copy b{font-size:11px}.arcade-select .dossier-art{height:200px}}
@media(max-width:680px){
 .arcade-select{padding:18px 14px 94px}.arcade-select .campaign-header{display:flex;padding-bottom:15px;gap:12px}.arcade-select .campaign-header h1{font-size:32px}.arcade-score{font-size:20px}.arcade-score small{font-size:12px}
 .arcade-toolbar{gap:8px;flex-wrap:wrap;margin:12px 0 18px}.arcade-select .mode-switch button{min-width:94px;font-size:10px}.arcade-select .resume-session{padding:7px 10px}
 .arcade-select .campaign-body{display:flex;gap:20px}.arcade-select .mission-dossier{display:grid;grid-template-columns:86px minmax(0,1fr);gap:5px 12px;order:-1}
 .arcade-select .dossier-art{grid-column:1;grid-row:1/4;width:86px;height:95px;min-height:0;margin:0}.arcade-select .dossier-art span{font-size:34px;bottom:8px;right:8px}
 .arcade-select .mission-dossier .eyebrow{grid-column:2;font-size:9px;letter-spacing:1px}.arcade-select .mission-dossier h2{grid-column:2;font-size:21px;margin:0}.arcade-stage-meta{grid-column:2;flex-wrap:wrap;justify-content:flex-start;font-size:9px}.arcade-stage-meta .mission-medals{font-size:14px}
 .arcade-difficulty{grid-column:1/-1;margin-top:7px;padding-top:10px}.arcade-select .mission-dossier .panel-actions{display:none}
 .arcade-select .campaign-route{gap:10px}.arcade-select .mission-card{grid-template-columns:1fr;min-height:144px}.arcade-select .mission-card-art{height:76px;background-image:var(--mission-art);background-position:center}.arcade-select .mission-card-copy{padding:8px 9px 22px}.arcade-select .mission-card-copy b{font-size:12px;margin-top:4px}.arcade-select .mission-card .mission-medals{font-size:11px}
 .arcade-select .mobile-review-bar{background:#122b28f5;border-color:#5e7965}.arcade-select .mobile-review-bar>span{font:900 12px Arial;text-transform:uppercase}.arcade-select .mobile-review-bar .primary{font-size:14px;min-height:50px}
}

/* Five defenses and a charged crowd-control burst, kept in a compact arcade tray. */
.weapon-icon{display:inline-block;background-image:url('./assets/web/weapons-v2.webp');background-size:200% 100%;background-repeat:no-repeat;flex-shrink:0;filter:drop-shadow(0 3px 3px #0007)}
.weapon-rail{background-position:0 50%}.weapon-tesla{background-position:100% 50%}
.upgrade .weapon-icon,.chosen .weapon-icon{width:44px;height:44px;float:left;margin-right:7px}
.resource.score{min-width:78px}.resource.score b{color:#ffe19a}.resource.score #liveCombo{font-size:8px;letter-spacing:.5px;margin:4px 0 0;white-space:nowrap}.combo-active{color:#ffb36c!important;font-weight:900}
.overdrive-button{background:linear-gradient(90deg,#70602f66 var(--charge,0%),transparent var(--charge,0%)),#243c37}
.overdrive-button.charged{border-color:#ffd16b;box-shadow:inset 0 0 12px #ffc85e22,0 0 10px #ffd16b25}.overdrive-button.charged b,.overdrive-button.charged strong{color:#ffdf80}
.overdrive-button:disabled{opacity:.68}.overdrive-button strong{display:block!important}
.arcade-select .mode-switch{display:flex;min-width:0}.arcade-select .mode-switch button{min-width:98px;padding:8px 12px}
.daily-rules{display:flex;flex-direction:column;gap:8px;padding-top:14px;margin-top:16px;border-top:1px solid #456459;font-size:11px;color:#b8cdbc;line-height:1.5}.daily-rules b{color:#ffd16b;font-size:10px;letter-spacing:1px}.text-button{background:transparent;border:0;color:#ffe0a0;text-align:left;padding:8px 0;font-size:11px;min-height:36px}.share-link{max-width:100%;min-width:0;background:#19332d;color:#f3e8bd;padding:10px;border:1px solid #839c78}
.arcade-result h1{font-family:Impact,'Arial Black',sans-serif;letter-spacing:1px}.result-score{font:900 56px/1.2 monospace;color:#ffd16b;margin-top:22px}.result-score small{font:900 10px Arial;display:block;color:#a3b8aa;letter-spacing:3px}.arcade-result .result-stats b{font-family:monospace}.arcade-result .panel-actions{flex-wrap:wrap;gap:10px}
@media(min-width:801px){
 #side{gap:10px;padding:10px 14px;height:116px;min-height:116px}
 #palette{flex:1 1 570px;gap:6px}.card{display:grid;grid-template-columns:40px 1fr;min-height:90px;padding:7px;gap:4px}.card .tower-icon{width:40px;height:46px}.card b{font-size:11px;line-height:1.2}.card small{display:none}.card .cost{grid-column:2;font-size:12px;margin:0}.card .key{font-size:8px;bottom:7px;right:7px}
 .command-bottom{flex:0 1 400px;gap:6px}.ability-button{width:110px;min-width:92px;padding:7px;gap:4px}.ability-button b{font-size:11px}.ability-button small{font-size:8px}.ability-icon{font-size:20px}.ability-button>strong{display:none}.overdrive-button>strong{font-size:10px}.launch-button{min-width:115px;width:130px;font-size:11px;padding:9px}.intel-toggle{min-width:40px;padding:6px}
 #battlefield canvas{width:min(100%,calc((100dvh - 176px) * 1.5625))}#battlefield:has(.wave-plan:not([hidden])) canvas{width:min(100%,calc((100dvh - 240px) * 1.5625))}
 #towerPanel:not(:empty),.intel{bottom:126px}
}
@media(max-width:1050px) and (min-width:801px){.card{display:flex;flex-direction:column;justify-content:center;text-align:center;gap:2px}.card .tower-icon{width:36px;height:35px}.card .cost{font-size:11px}.card .key{display:none}.command-bottom{flex-basis:370px}.ability-button{min-width:86px}.resources{gap:18px}}
@media(max-width:800px){
 #palette{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:5px;flex:none}.card{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;min-height:86px;padding:5px 2px;gap:3px}.card .tower-icon{width:40px;height:40px}.card b{font-size:10px;line-height:1.1;margin:0}.card small,.card .key{display:none}.card .cost{font-size:11px;margin:0}
 .command-bottom{display:grid;grid-template-columns:38px 1fr 1fr 1.1fr;gap:5px;flex:none}.ability-button,.launch-button{width:auto;min-width:0;padding:7px 5px;min-height:52px;font-size:10px}.ability-button b{font-size:10px}.ability-button small{display:none}.ability-button .ability-icon{font-size:18px}.ability-button>strong{display:none}.overdrive-button>strong{font-size:10px}.intel-toggle{min-width:0;padding:4px}.intel-toggle small{font-size:7px}
 .resource.score{min-width:44px}.resource.score #liveCombo{font-size:6px;margin-top:3px}.resources{gap:8px}.resource.score b{font-size:14px}
}
@media(max-width:680px){.arcade-select .mode-switch{width:100%}.arcade-select .mode-switch button{min-width:0;flex:1;padding:8px 6px;font-size:9px}.daily-rules{grid-column:1/-1;margin-top:8px;padding-top:10px;gap:3px}.daily-rules .text-button{padding:5px 0}.arcade-result .result-score{font-size:44px}.arcade-result .result-stats{gap:15px}.arcade-result .result-stats b{font-size:23px}.arcade-result .panel-actions button{flex:1;min-width:110px}.arcade-select .mobile-review-bar .primary{white-space:nowrap;font-size:12px;padding:12px}.arcade-select .mobile-review-bar>span{font-size:10px}}
@media(max-width:400px){.resource.score{min-width:40px}#topbar{gap:6px;padding:0 7px}.brand strong{font-size:10px;letter-spacing:.5px}.resource b{font-size:13px}.resources{gap:6px}.resource.supply{min-width:35px}.integrity-track{width:44px}.card b{font-size:9px}.card .tower-icon{width:35px;height:35px}}
@media(max-width:800px){.command-bottom .intel-toggle{display:flex}.intel{display:none}#side.intel-open .intel{display:block}.command-bottom .ability-button{justify-content:center}.command-bottom .ability-button .ability-icon{display:none}}

/* Mobile combat: give the map and the five build choices priority, with a compact,
   thumb-sized command dock that stays visible while the player scrolls the tray. */
@media(max-width:800px){
 #main{gap:0}
 #battlefield{min-height:0}
 #stage{padding:4px 4px 0}
 #battlefield canvas{max-height:none;touch-action:manipulation}
 .map-heading{min-height:34px;padding:7px 10px;font-size:9px}
 .pad-navigator{min-height:48px;gap:10px;padding:3px 10px}
 .pad-navigator button{width:48px;height:44px;font-size:22px}
 .battle-footer{min-height:50px;gap:8px;padding:3px 8px}
 #hint{display:none}
 #side{gap:8px;padding:8px 8px calc(86px + env(safe-area-inset-bottom))}
 #palette{gap:6px}
 .card{min-height:78px;border-radius:7px}
 .card .tower-icon{width:42px;height:42px}
 .command-bottom{position:fixed;left:0;right:0;bottom:0;z-index:15;grid-template-columns:54px 1fr 1fr 1.15fr;gap:6px;padding:8px max(8px,env(safe-area-inset-right)) calc(8px + env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left));background:linear-gradient(180deg,#172a2af2,#101f22fa);border-top:1px solid #82917c;box-shadow:0 -8px 24px #071518aa;backdrop-filter:blur(8px)}
 .ability-button,.launch-button{min-height:54px;border-radius:7px;font-size:11px}
 .ability-button b{font-size:11px}
 .command-bottom .ability-button .ability-icon{display:block;font-size:20px}
 .ability-button>strong{display:block;font-size:10px}
 .intel-toggle{min-height:54px;border-radius:7px}
 #towerPanel:not(:empty){margin-bottom:8px}
 #towerPanel:has(#confirmBuild){position:sticky;bottom:calc(74px + env(safe-area-inset-bottom));max-height:min(42dvh,340px);overflow:auto}
}
@media(max-width:800px) and (orientation:portrait){
 #battlefield canvas{width:min(100%,calc((100dvh - 370px) * 1.5625))}
}
@media(max-width:400px){
 .command-bottom{grid-template-columns:48px 1fr 1fr 1.1fr;gap:4px;padding-left:6px;padding-right:6px}
 .ability-button,.launch-button{padding:6px 3px;font-size:10px}
 .ability-button b{font-size:10px}
 #palette{gap:4px}
 .card{min-height:72px}
}
