:root {
  --bg:#05080b; --panel:rgba(9,15,20,.96); --panel2:rgba(17,26,33,.96);
  --line:rgba(255,255,255,.12); --text:#f4f7f8; --muted:#aeb9bf;
  --green:#54d64d; --yellow:#ffd84a; --red:#ff3535; --blue:#1e70ff;
}
*{box-sizing:border-box} html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif} body{min-height:100dvh;overflow-x:hidden} button{font:inherit}
.app-shell{min-height:100dvh;display:grid;grid-template-columns:minmax(0,1fr) 340px;background:radial-gradient(circle at 35% 15%,rgba(28,78,116,.22),transparent 34%),radial-gradient(circle at 75% 45%,rgba(119,17,17,.12),transparent 28%),linear-gradient(145deg,#071019,#030608 70%)}
.game-column{min-width:0;min-height:100dvh;display:flex;flex-direction:column;align-items:center;padding:8px 10px 14px}.topbar{width:min(100%,940px);display:flex;align-items:center;justify-content:space-between;gap:12px;padding:4px 0 8px}.top-left-group{display:flex;align-items:center;gap:10px;min-width:0}.brand{display:flex;align-items:baseline;gap:9px;letter-spacing:.08em;white-space:nowrap}.brand strong{font-size:16px}.brand span{color:var(--muted);font-size:11px}.top-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;min-width:0}.visitor-pill{height:34px;display:flex;align-items:center;gap:7px;padding:0 11px;border:1px solid var(--line);border-radius:10px;background:rgba(14,24,31,.9);white-space:nowrap}.visitor-pill span{font-size:9px;color:var(--muted);letter-spacing:.1em}.visitor-pill strong{font-size:14px;color:#fff4a7}
.small-btn,.secondary-btn,.primary-btn,.support-btn{border:1px solid var(--line);border-radius:10px;color:white;cursor:pointer;transition:transform .15s ease,filter .15s ease,background .15s ease}.small-btn:hover,.secondary-btn:hover,.primary-btn:hover,.support-btn:hover{filter:brightness(1.12)}.small-btn:active,.secondary-btn:active,.primary-btn:active,.support-btn:active{transform:translateY(1px) scale(.99)}.small-btn{height:34px;padding:0 10px;background:#111a21;font-size:12px}.icon-btn{min-width:36px;font-size:18px;padding:0 8px}.primary-btn{padding:13px 20px;background:linear-gradient(180deg,#1fae47,#137833);font-weight:800;letter-spacing:.04em}.secondary-btn{width:100%;padding:11px 14px;background:#17232c;font-weight:700;margin-top:12px}.support-btn{width:100%;margin-top:8px;padding:12px 14px;background:linear-gradient(180deg,#f0cf49,#a78316);color:#101214;font-weight:900;box-shadow:0 8px 24px rgba(240,207,73,.13)}
.game-frame{position:relative;width:min(100%,940px);flex:1 1 auto;min-height:0;display:flex;justify-content:center;align-items:center;perspective:1000px}canvas{display:block;max-width:100%;max-height:calc(100dvh - 76px);width:auto;height:auto;aspect-ratio:941/1672;border-radius:16px;box-shadow:0 30px 80px rgba(0,0,0,.65),0 0 0 1px rgba(255,255,255,.08),inset 0 0 45px rgba(0,0,0,.42);touch-action:none;user-select:none;background:#070b0f}
.overlay-card{position:absolute;inset:0;display:none;align-items:center;justify-content:center;padding:20px;pointer-events:none}.overlay-card.visible{display:flex;pointer-events:auto}.overlay-panel{width:min(92%,470px);text-align:center;padding:24px 18px;border-radius:18px;background:rgba(5,10,14,.92);border:1px solid rgba(255,255,255,.16);box-shadow:0 20px 60px rgba(0,0,0,.55);backdrop-filter:blur(8px)}.eyebrow{margin-bottom:7px;font-size:9px;letter-spacing:.14em;color:#91a1aa}.overlay-panel h1,.overlay-panel h2{margin:0 0 10px}.overlay-panel p{color:#d0d9dd;line-height:1.45}.legend{display:grid;gap:7px;margin:14px 0 18px;text-align:left;font-size:13px}.dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:7px}.dot.infected{background:var(--red);box-shadow:0 0 10px rgba(255,53,53,.6)}.dot.survivor{background:var(--green);box-shadow:inset -4px 0 0 var(--yellow)}.dot.mounted{background:#a76d3b;box-shadow:0 0 0 2px var(--red)}
.wave-banner{position:absolute;top:14%;left:50%;transform:translate(-50%,-12px) scale(.96);opacity:0;pointer-events:none;z-index:4;padding:9px 16px;border:1px solid rgba(255,255,255,.18);border-radius:999px;background:rgba(8,14,18,.92);font-weight:900;letter-spacing:.08em;transition:.22s}.wave-banner.visible{opacity:1;transform:translate(-50%,0) scale(1)}.city-toast{position:absolute;left:50%;bottom:6%;transform:translateX(-50%);opacity:0;pointer-events:none;z-index:5;padding:9px 13px;border-radius:10px;background:rgba(6,12,16,.9);border:1px solid rgba(255,255,255,.14);font-size:12px;transition:.2s}.city-toast.visible{opacity:1}
.hud-panel{min-height:100dvh;padding:18px;border-left:1px solid var(--line);background:linear-gradient(180deg,rgba(8,14,18,.98),rgba(8,13,17,.95));box-shadow:-20px 0 50px rgba(0,0,0,.2)}.hud-title-row{display:flex;align-items:center;justify-content:space-between;gap:10px}.hud-title{font-size:12px;letter-spacing:.13em;font-weight:900}.status-dot{display:flex;align-items:center;gap:6px;font-size:9px;color:#8ea0a8}.status-dot i{width:7px;height:7px;border-radius:50%;background:#4ddb63;box-shadow:0 0 12px #4ddb63}.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:14px 0}.stat{padding:11px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}.stat span{display:block;color:var(--muted);font-size:9px;letter-spacing:.08em}.stat strong{display:block;margin-top:3px;font-size:22px}.meter-block{margin:13px 0}.meter-label{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;font-size:10px;color:var(--muted);letter-spacing:.04em}.meter-label strong{color:#fff}.meter{height:10px;border-radius:999px;background:#202b31;overflow:hidden;border:1px solid rgba(255,255,255,.07)}.meter-fill{height:100%;width:100%;background:linear-gradient(90deg,#30b84d,#95df57);transition:width .2s ease}.wall-fill{width:0;background:linear-gradient(90deg,#c4c2b8,#f0e9d5)}.city-card,.threat-card,.flag-status-card,.progress-card,.rules-card{margin-top:12px;padding:12px;border:1px solid var(--line);border-radius:12px;background:rgba(16,25,31,.87)}.city-card span,.threat-card span{display:block;color:var(--muted);font-size:9px;letter-spacing:.1em}.city-card strong{display:block;margin-top:5px;font-size:15px}.city-card small{display:block;margin-top:4px;color:var(--muted);line-height:1.35}.threat-card{display:flex;align-items:center;justify-content:space-between}.threat-card span{display:inline}.threat-card strong{font-size:12px}.progress-head{display:flex;justify-content:space-between;gap:10px;font-size:11px}.progress-card p,.rules-card p,.version-note{color:var(--muted);font-size:12px;line-height:1.45}.rules-card h3{margin:0 0 8px;font-size:14px}.rules-card p{margin:5px 0}.version-note{margin-top:14px;text-align:center}.mobile-help{display:none;color:var(--muted);font-size:12px;padding-top:8px;text-align:center}
.support-dialog{position:fixed;inset:0;z-index:100;display:none;align-items:center;justify-content:center;padding:16px;background:rgba(0,0,0,.78);backdrop-filter:blur(6px);color:#fff}.support-dialog.visible{display:flex}.modal-panel{position:relative;width:min(calc(100vw - 32px),430px);background:#0d171d;border:1px solid var(--line);border-radius:18px;padding:24px;box-shadow:0 30px 90px rgba(0,0,0,.75);text-align:center}.modal-close{position:absolute;right:10px;top:7px;border:0;background:transparent;color:#fff;cursor:pointer;font-size:28px}.pix-box{margin:14px 0;padding:14px;border-radius:12px;background:#111f27;border:1px solid var(--line);word-break:break-all;user-select:text}.pix-box span{display:block;font-size:9px;letter-spacing:.12em;color:var(--muted);margin-bottom:5px}.pix-box strong{display:block;font-size:clamp(20px,6vw,27px);letter-spacing:.04em}.pix-hint{display:block;margin-top:7px;color:var(--muted);font-size:11px}#copyFeedback{display:block;min-height:18px;margin-top:8px;color:#82e58b}
@media(max-width:980px){.app-shell{display:block;min-height:100dvh}.game-column{min-height:auto;padding:8px}.topbar{width:100%;padding:4px 2px 8px}.game-frame{width:100%;height:calc(100dvh - 118px);flex:none}canvas{max-width:100%;max-height:100%;border-radius:12px}.hud-panel{min-height:auto;border-left:0;border-top:1px solid var(--line);padding:14px}.mobile-help{display:block}.rules-card,.version-note{display:none}.hud-title{margin-top:0}}
@media(max-width:650px){.brand strong{font-size:12px}.brand span{display:none}.top-left-group{gap:6px}.visitor-pill{padding:0 7px}.visitor-pill span{font-size:7px}.small-btn{font-size:10px;padding:0 8px}.game-frame{height:calc(100dvh - 108px)}.hud-panel{padding-bottom:calc(16px + env(safe-area-inset-bottom))}.stat-grid{grid-template-columns:repeat(4,1fr)}.stat{padding:9px 7px;text-align:center}.stat span{font-size:8px}.stat strong{font-size:18px}.support-btn{position:sticky;bottom:8px;z-index:8;box-shadow:0 8px 28px rgba(0,0,0,.42),0 0 0 1px rgba(255,216,74,.25)}}
@media(max-width:420px){.brand{max-width:110px;overflow:hidden}.visitor-pill strong{font-size:12px}.top-actions{gap:4px}.visitor-pill{height:32px}.small-btn{height:32px}#visualBtn{max-width:104px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}

.start-actions{display:grid;gap:8px;justify-items:stretch}.start-actions .secondary-btn{margin-top:0}.continue-btn{background:linear-gradient(180deg,#21415a,#142a3b)}.save-hint{display:block;margin-top:10px;color:#9fb0b8;font-size:11px;line-height:1.35}

.startup-status{display:block;margin-top:10px;padding:9px 10px;border-radius:9px;background:#3b1111;border:1px solid #7b2a2a;color:#ffd2d2;font-size:11px;line-height:1.35}

.flag-status-card{display:grid;grid-template-columns:1fr 1fr;gap:8px}.flag-status-card>div{padding:8px 9px;border-radius:9px;background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.07)}.flag-status-card span{display:block;color:var(--muted);font-size:8px;letter-spacing:.05em}.flag-status-card strong{display:block;margin-top:3px;font-size:18px}.flag-status-card>div:first-child strong{color:#8ee98b}.flag-status-card>div:last-child strong{color:#ff6969}

/* ===== v0.3.6 • campanha por estado/cidade ===== */
.state-alert-btn{position:absolute;right:4.5%;top:27%;z-index:7;display:flex;align-items:center;gap:9px;padding:9px 11px;border:1px solid rgba(255,255,255,.22);border-radius:12px;background:rgba(75,13,18,.92);color:#fff;box-shadow:0 10px 28px rgba(0,0,0,.38),0 0 24px rgba(255,52,52,.18);cursor:pointer;text-align:left}.state-alert-btn[hidden]{display:none}.state-alert-btn span:last-child{display:grid;gap:1px}.state-alert-btn strong{font-size:11px;letter-spacing:.09em}.state-alert-btn small{font-size:8px;color:#ffd3d3;letter-spacing:.05em}.state-alert-pulse{width:11px;height:11px;border-radius:50%;background:#ff3a3a;box-shadow:0 0 0 0 rgba(255,58,58,.75);animation:statePulse 1.2s infinite}@keyframes statePulse{0%{box-shadow:0 0 0 0 rgba(255,58,58,.7)}70%{box-shadow:0 0 0 12px rgba(255,58,58,0)}100%{box-shadow:0 0 0 0 rgba(255,58,58,0)}}

.state-campaign-overlay{position:absolute;inset:0;z-index:20;display:none;align-items:center;justify-content:center;padding:12px;background:rgba(2,6,9,.86);backdrop-filter:blur(7px)}.state-campaign-overlay.visible{display:flex}.state-campaign-panel{width:min(96%,760px);max-height:96%;overflow:auto;border:1px solid rgba(255,255,255,.15);border-radius:18px;background:linear-gradient(180deg,rgba(12,20,25,.98),rgba(5,10,13,.98));box-shadow:0 32px 90px rgba(0,0,0,.72);padding:14px}.state-campaign-head{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;padding:4px 2px 12px;border-bottom:1px solid rgba(255,255,255,.08)}.state-campaign-head>div:nth-child(2){display:grid}.state-campaign-head span{font-size:8px;letter-spacing:.14em;color:#96a6ae}.state-campaign-head strong{font-size:19px;letter-spacing:.08em}.state-back-btn{border:1px solid rgba(255,255,255,.12);border-radius:9px;background:#15232b;color:#fff;padding:8px 10px;font-weight:800;font-size:10px;cursor:pointer}.state-progress-pill{display:grid;justify-items:end;gap:0}.state-progress-pill strong{font-size:17px;color:#93e990}.state-progress-pill small{font-size:7px;letter-spacing:.1em;color:#93a3aa}.state-map-screen{padding:12px 0 0}.state-map-copy{display:grid;gap:4px;text-align:center;margin-bottom:8px}.state-map-copy strong{font-size:13px}.state-map-copy span{font-size:10px;color:#aeb9bf}.bahia-map{position:relative;width:min(100%,510px);aspect-ratio:420/560;margin:0 auto;border-radius:16px;overflow:hidden;background:radial-gradient(circle at 70% 26%,rgba(255,69,69,.16),transparent 28%),linear-gradient(145deg,#0b1720,#05090d 65%);border:1px solid rgba(255,255,255,.08);box-shadow:inset 0 0 70px rgba(0,0,0,.45)}.bahia-map::before{content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);background-size:28px 28px;pointer-events:none}.bahia-silhouette{position:absolute;inset:4% 8%;width:84%;height:92%;filter:drop-shadow(0 22px 24px rgba(0,0,0,.38))}.state-city-node{position:absolute;transform:translate(-50%,-50%);display:grid;justify-items:center;gap:4px;background:transparent;border:0;color:#fff;cursor:pointer;min-width:74px;padding:8px 6px}.state-city-node i{width:15px;height:15px;border-radius:50%;background:#424a4f;border:2px solid rgba(255,255,255,.55);box-shadow:0 0 0 4px rgba(255,255,255,.04)}.state-city-node span{font-size:9px;font-weight:850;text-shadow:0 2px 4px #000;white-space:nowrap}.state-city-node.active i{background:#ff3333;box-shadow:0 0 0 0 rgba(255,51,51,.65);animation:statePulse 1.2s infinite}.state-city-node.active span{color:#ffdede}.state-city-node.safe i{background:#45c95b;border-color:#ffe366;box-shadow:0 0 13px rgba(69,201,91,.45)}.state-city-node.safe span{color:#b8f3be}.state-city-node.safe{cursor:default;pointer-events:none}.state-city-node.state-capital-node span{font-size:8px;letter-spacing:.06em}.state-city-node.state-capital-node i{width:18px;height:18px;border-color:rgba(255,215,105,.9)}.state-city-node.state-capital-node.active i{background:#ffb12c;animation:statePulse 1s infinite;box-shadow:0 0 0 0 rgba(255,177,44,.72)}.state-city-node.state-capital-node.safe i{background:#3ccf61;border-color:#ffd447}.state-city-node.locked{opacity:.42;cursor:not-allowed;pointer-events:none}.state-city-node.locked i{background:#2a3034}.state-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin:10px 0 2px;color:#9eabb2;font-size:9px}.legend-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px}.legend-dot.active{background:#ff3333}.legend-dot.safe{background:#45c95b}.legend-dot.locked{background:#555f65}.legend-dot.boss{background:#ffb12c}

.city-battle-screen{padding-top:12px}.city-battle-copy{text-align:center}.city-battle-copy span{font-size:8px;letter-spacing:.13em;color:#9aabb3}.city-battle-copy h2{margin:3px 0 4px;font-size:24px}.city-battle-copy p{margin:0 auto 10px;max-width:520px;color:#b7c2c7;font-size:10px;line-height:1.4}.city-battlefield{position:relative;width:min(100%,620px);aspect-ratio:16/10;margin:0 auto;overflow:hidden;border-radius:16px;background:radial-gradient(circle at 78% 22%,rgba(255,63,63,.18),transparent 24%),linear-gradient(155deg,#243a2f 0 56%,#48252a 56% 100%);border:1px solid rgba(255,255,255,.1);box-shadow:inset 0 0 60px rgba(0,0,0,.35)}.city-battlefield::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(25deg,rgba(255,255,255,.018) 0 1px,transparent 1px 20px);pointer-events:none}.battle-road{position:absolute;background:#6c6d69;box-shadow:inset 0 0 0 2px rgba(255,255,255,.06);opacity:.68}.road-a{width:120%;height:11%;left:-10%;top:47%;transform:rotate(-7deg)}.road-b{width:10%;height:110%;left:56%;top:-5%;transform:rotate(11deg)}.battle-building{position:absolute;width:11%;height:16%;border-radius:5px;background:linear-gradient(145deg,#7b6f5f,#443e36);box-shadow:7px 9px 0 rgba(0,0,0,.22)}.b1{left:13%;top:17%}.b2{left:28%;top:65%;width:13%}.b3{right:11%;top:18%;height:19%}.battle-wall{position:absolute;left:6%;bottom:17%;width:28%;height:5%;border-radius:8px;background:linear-gradient(180deg,#d7d1bf,#897f68);box-shadow:0 6px 0 rgba(0,0,0,.18), inset 0 2px 0 rgba(255,255,255,.35)}.battle-base{position:absolute;left:8%;bottom:10%;display:grid;justify-items:center;padding:6px 9px;border:1px solid rgba(255,255,255,.13);border-radius:8px;background:#173b25;box-shadow:0 8px 18px rgba(0,0,0,.25);min-width:68px}.battle-base span{font-size:20px}.battle-base small{font-size:7px;font-weight:900;color:#eaf6d4}.base-defenders{position:absolute;left:50%;transform:translateX(-50%);top:-24px;display:flex;gap:6px}.defender{position:relative;width:14px;height:22px;display:block}.defender::before{content:"";position:absolute;left:2px;top:0;width:10px;height:10px;border-radius:50%;background:#d0b69f;box-shadow:0 2px 0 #1f5f35}.defender::after{content:"";position:absolute;left:1px;top:9px;width:12px;height:13px;border-radius:4px;background:linear-gradient(#33b253,#13692e);border:1px solid rgba(255,255,255,.2)}.local-infected-layer,.local-shot-layer{position:absolute;inset:0}.local-infected{position:absolute;transform:translate(-50%,-50%);width:37px;height:49px;border:0;background:transparent;cursor:pointer;touch-action:manipulation}.local-infected .head{position:absolute;left:11px;top:0;width:15px;height:15px;border-radius:50%;background:#c4a99b;box-shadow:0 2px 0 #84222a}.local-infected .body{position:absolute;left:8px;top:13px;width:21px;height:24px;border-radius:5px 5px 3px 3px;background:linear-gradient(#e03d43,#8e151c);border:1px solid rgba(255,255,255,.12)}.local-infected .body::after{content:"★";position:absolute;inset:3px 0 auto;text-align:center;color:#ff2020;font-size:14px;text-shadow:0 0 2px #fff}.local-infected .legs{position:absolute;left:10px;top:35px;width:17px;height:13px;border-left:6px solid #8e151c;border-right:6px solid #8e151c}.local-infected .tag{position:absolute;left:50%;top:-10px;transform:translateX(-50%);padding:1px 5px;border-radius:999px;background:rgba(0,0,0,.55);font-size:7px;font-weight:900;letter-spacing:.08em;color:#fff;white-space:nowrap}.local-infected.boss{width:55px;height:70px;z-index:2}.local-infected.boss .head{left:17px;top:1px;width:21px;height:21px;box-shadow:0 2px 0 #5f0e14}.local-infected.boss .body{left:12px;top:18px;width:31px;height:34px;background:linear-gradient(#ff5d61,#8b1016)}.local-infected.boss .body::after{content:"✦";font-size:18px;color:#fff2b2;top:4px}.local-infected.boss .legs{left:16px;top:51px;width:23px;height:17px;border-left:8px solid #8b1016;border-right:8px solid #8b1016}.local-infected.boss.attacking{filter:drop-shadow(0 0 10px rgba(255,91,91,.55))}.local-infected.final-boss{width:66px;height:84px}.local-infected.final-boss .tag{background:rgba(255,177,44,.86);color:#2c1200}.local-infected.final-boss .head{left:21px;width:24px;height:24px}.local-infected.final-boss .body{left:15px;top:22px;width:36px;height:39px;background:linear-gradient(#ffb441,#b34514)}.local-infected.final-boss .body::after{content:"✹";font-size:20px;color:#fff9d2}.local-infected.final-boss .legs{left:19px;top:59px;width:25px;height:18px;border-left:9px solid #b34514;border-right:9px solid #b34514}.local-infected.attacking{filter:drop-shadow(0 0 6px rgba(255,91,91,.35))}.local-infected:hover{filter:brightness(1.12)}.local-infected.rescued{pointer-events:none;animation:rescuedFade 2s forwards}.local-infected.rescued .body{background:linear-gradient(#32ad52,#176b34)}.local-infected.rescued .body::after{content:"◆";color:#f3d642}.local-infected.rescued .legs{border-color:#176b34}.local-infected.rescued .head{box-shadow:0 2px 0 #f3d642}.local-shot{position:absolute;height:4px;transform-origin:left center;border-radius:3px;background:linear-gradient(90deg,rgba(245,228,115,.95),rgba(245,228,115,0));box-shadow:0 0 8px rgba(245,228,115,.75);pointer-events:none}.local-impact{position:absolute;width:18px;height:18px;border-radius:50%;background:radial-gradient(circle,#fff7a6 0 22%,rgba(255,189,75,.95) 24%,rgba(255,189,75,0) 70%);transform:translate(-50%,-50%);pointer-events:none;animation:impactPop .25s forwards}.battle-base.hit{animation:baseHit .28s ease}.battle-base.safe{box-shadow:0 8px 18px rgba(0,0,0,.25),0 0 0 2px rgba(86,208,101,.35)}@keyframes rescuedFade{0%{opacity:1}65%{opacity:1}100%{opacity:0;transform:translate(-50%,-58%) scale(.92)}}@keyframes impactPop{0%{opacity:1;transform:translate(-50%,-50%) scale(.4)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.25)}}@keyframes baseHit{0%,100%{transform:translateX(0)}25%{transform:translateX(-2px)}75%{transform:translateX(2px)}}.city-battle-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:10px}.city-battle-footer>div{display:grid}.city-battle-footer span{font-size:8px;color:#9caab1;letter-spacing:.08em}.city-battle-footer strong{font-size:18px;color:#f3d642}

.state-hud-card{margin-top:12px;padding:12px;border:1px solid var(--line);border-radius:12px;background:linear-gradient(145deg,rgba(20,43,30,.88),rgba(13,25,31,.9));display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center}.state-hud-card span{display:block;color:#9fb0b7;font-size:8px;letter-spacing:.09em}.state-hud-card>div:first-child strong{font-size:15px}.state-hud-progress{text-align:right}.state-hud-progress strong{display:block;font-size:17px;color:#8ee98b}.state-hud-progress small{font-size:8px;color:#9fb0b7}.state-open-btn{grid-column:1/-1;border:1px solid rgba(255,255,255,.12);border-radius:9px;background:#173b25;color:#fff;padding:8px;font-size:9px;font-weight:900;letter-spacing:.05em;cursor:pointer}.state-open-btn:hover{filter:brightness(1.12)}

@media(max-width:650px){.state-alert-btn{right:3%;top:25%;padding:7px 8px}.state-alert-btn strong{font-size:9px}.state-alert-btn small{font-size:7px}.state-campaign-overlay{padding:5px}.state-campaign-panel{width:100%;max-height:100%;border-radius:12px;padding:9px}.state-campaign-head{gap:7px}.state-campaign-head strong{font-size:15px}.state-back-btn{padding:7px 8px;font-size:9px}.bahia-map{width:min(88vw,420px);max-height:67dvh}.state-city-node{min-width:62px;padding:7px 4px}.state-city-node span{font-size:8px}.city-battlefield{width:100%;aspect-ratio:10/13;max-height:68dvh}.city-battle-copy h2{font-size:20px}.local-infected{width:45px;height:58px}.local-infected .head{left:14px;width:17px;height:17px}.local-infected .body{left:10px;top:15px;width:25px;height:28px}.local-infected .legs{left:12px;top:41px;width:21px;height:15px}.local-infected.boss{width:62px;height:78px}.local-infected.boss .head{left:20px;width:22px;height:22px}.local-infected.boss .body{left:14px;top:19px;width:34px;height:38px}.local-infected.boss .legs{left:18px;top:56px;width:24px;height:17px}.local-infected.final-boss{width:72px;height:92px}.local-infected.final-boss .head{left:23px;width:25px;height:25px}.local-infected.final-boss .body{left:16px;top:24px;width:39px;height:42px}.local-infected.final-boss .legs{left:20px;top:65px;width:27px;height:18px}.city-battle-footer{align-items:stretch;flex-wrap:wrap}.city-battle-footer .state-back-btn{max-width:100%;margin-left:auto}}

/* v0.4.0 — mapas reais enviados pelo usuário */
.bahia-map.bahia-map-image{aspect-ratio:941/1672;background-size:cover!important;background-position:center!important;background-repeat:no-repeat!important;max-height:72vh;width:min(100%,430px)}
.bahia-map.bahia-map-image .bahia-silhouette{display:none}
.bahia-map.bahia-map-image::before{background:linear-gradient(rgba(0,0,0,.03),rgba(0,0,0,.08));z-index:0}
.bahia-map.bahia-map-image .state-city-node{z-index:2}
.bahia-map.bahia-map-image .state-city-node:not(.state-capital-node) span{display:none}
.city-battlefield.with-city-map{width:min(100%,430px);aspect-ratio:941/1672;max-height:72vh;background-size:cover!important;background-position:center!important;background-repeat:no-repeat!important}
.city-battlefield.with-city-map::before{background:linear-gradient(rgba(0,0,0,.02),rgba(0,0,0,.10))}
.city-battlefield.with-city-map .battle-road,.city-battlefield.with-city-map .battle-building{display:none}
.city-battlefield.with-city-map .battle-wall{left:5%;bottom:12%;width:32%;z-index:2}
.city-battlefield.with-city-map .battle-base{left:7%;bottom:6%;z-index:4}
.city-battlefield.with-city-map .local-shot-layer,.city-battlefield.with-city-map .local-infected-layer{z-index:5}
@media(max-width:650px){.bahia-map.bahia-map-image{width:min(92vw,390px);max-height:70dvh}.city-battlefield.with-city-map{width:min(92vw,390px);max-height:70dvh}}

/* v0.4.1 — modo aparição/desaparição das cidades */
.local-infected.hidden-target{opacity:0!important;pointer-events:none!important;transform:translate(-50%,-50%) scale(.62)!important;filter:none!important}
.local-infected.target-pop{animation:targetPop .16s ease-out}
.local-infected .hit-count{position:absolute;left:50%;bottom:-11px;transform:translateX(-50%);padding:1px 5px;border-radius:999px;background:rgba(3,7,10,.78);border:1px solid rgba(255,255,255,.16);font-size:7px;font-weight:900;color:#fff;white-space:nowrap;letter-spacing:.04em}
.local-infected.boss .hit-count{bottom:-13px;background:rgba(86,14,18,.88);border-color:rgba(255,197,87,.55);color:#ffeaa0}
.local-infected.final-boss .hit-count{background:rgba(129,55,9,.9)}
@keyframes targetPop{0%{opacity:0;transform:translate(-50%,-50%) scale(.62)}100%{opacity:1;transform:translate(-50%,-50%) scale(1)}}
.city-battle-footer strong.timer-danger{color:#ff5757;animation:timerPulse .45s infinite alternate}
@keyframes timerPulse{from{opacity:1}to{opacity:.55}}
.city-battlefield.with-city-map .battle-base,.city-battlefield.with-city-map .battle-wall{opacity:.56;pointer-events:none}

/* RED INFECTION 0.4.5 — efeitos do colapso e campanha RS */
.story-fx{position:absolute;inset:0;z-index:18;pointer-events:none;overflow:hidden}.story-red-flash,.story-blackout{position:absolute;inset:0;opacity:0;transition:opacity .22s ease}.story-red-flash{background:radial-gradient(circle at center,rgba(255,30,30,.08),rgba(150,0,0,.46));mix-blend-mode:screen}.story-blackout{background:#000}.story-red-flash.visible{opacity:1}.story-blackout.visible{opacity:1}.story-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.96);display:grid;gap:6px;width:min(82%,560px);padding:16px 18px;border-radius:14px;background:rgba(5,8,11,.82);border:1px solid rgba(255,255,255,.14);text-align:center;opacity:0;transition:.24s ease;box-shadow:0 18px 55px rgba(0,0,0,.55)}.story-message.visible{opacity:1;transform:translate(-50%,-50%) scale(1)}.story-message small{font-size:8px;letter-spacing:.18em;color:#ff8d8d}.story-message strong{font-size:clamp(18px,3.2vw,34px);letter-spacing:.05em}.story-message span{font-size:11px;color:#d7dfe5;line-height:1.45}.rs-map-image{background-size:cover!important;background-position:center!important;background-repeat:no-repeat!important}.rs-map-image .state-city-node span{display:none!important}.rs-map-image .state-city-node.active span{display:block!important;background:rgba(0,0,0,.68);padding:3px 6px;border-radius:6px}.rs-map-image .state-city-node.safe span{display:block!important;background:rgba(0,60,18,.68);padding:3px 6px;border-radius:6px}
@media(max-width:650px){.story-message{width:88%;padding:12px 13px}.story-message strong{font-size:20px}.story-message span{font-size:10px}}

/* RED INFECTION 0.4.7 — responsividade 9:16, overlays menores e personagens melhorados */
.game-frame{
  width:min(100%,calc((100dvh - 78px) * 0.5628));
  aspect-ratio:941/1672;
  height:auto;
  flex:0 0 auto;
  position:relative;
  overflow:hidden;
}
.game-frame canvas{
  position:absolute;
  inset:0;
  width:100%!important;
  height:100%!important;
  max-width:none!important;
  max-height:none!important;
  object-fit:contain;
}
.story-fx{border-radius:16px}
.story-message{
  top:8%;
  left:50%;
  width:min(58%,360px);
  padding:8px 10px;
  gap:2px;
  border-radius:10px;
  background:rgba(4,8,12,.52);
  backdrop-filter:blur(3px);
  box-shadow:0 8px 26px rgba(0,0,0,.28);
}
.story-message small{font-size:6px;letter-spacing:.14em}
.story-message strong{font-size:clamp(12px,1.9vw,17px);line-height:1.15}
.story-message span{font-size:8px;line-height:1.25;color:rgba(238,245,249,.88)}
.wave-banner{top:8%;padding:6px 10px;font-size:9px;background:rgba(8,14,18,.72);backdrop-filter:blur(3px)}
.city-toast{bottom:3%;font-size:9px;padding:6px 9px;background:rgba(6,12,16,.72)}
.overlay-panel{background:rgba(5,10,14,.78);backdrop-filter:blur(5px)}
.overlay-panel p{font-size:12px;line-height:1.35}
.legend{font-size:11px}

/* Personagens locais mais legíveis sem ficarem gigantes */
.local-infected .head{background:linear-gradient(#c7aa98,#8d685f);box-shadow:0 2px 0 #661218,0 0 0 1px rgba(0,0,0,.35)}
.local-infected .head::before{content:"";position:absolute;left:3px;top:5px;width:3px;height:3px;border-radius:50%;background:#ffdf72;box-shadow:6px 0 0 #ffdf72}
.local-infected .body{border-radius:6px 6px 3px 3px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.25),0 3px 6px rgba(0,0,0,.25)}
.local-infected .body::before{content:"";position:absolute;left:-6px;top:4px;width:5px;height:17px;border-radius:4px;background:#a6151c;box-shadow:27px 0 0 #a6151c;transform:rotate(8deg)}
.local-infected .legs{filter:drop-shadow(0 2px 1px rgba(0,0,0,.28))}
.local-infected.boss{filter:drop-shadow(0 0 10px rgba(255,72,72,.32))}
.defender::before{background:linear-gradient(#d2b499,#a98872);box-shadow:0 2px 0 #244c31,0 0 0 1px rgba(0,0,0,.25)}
.defender::after{background:linear-gradient(#4ab86a,#155e35);box-shadow:inset 0 0 0 1px rgba(244,222,75,.24)}

@media(max-width:980px){
  .game-column{padding:6px 6px 10px}
  .topbar{width:min(100%,520px)}
  .game-frame{width:min(100%,calc((100dvh - 112px) * 0.5628));height:auto;aspect-ratio:941/1672}
  .hud-panel{width:100%}
}
@media(max-width:650px){
  .game-frame{width:min(100%,calc((100dvh - 102px) * 0.5628));height:auto;aspect-ratio:941/1672}
  .story-message{top:7%;width:62%;padding:6px 7px}
  .story-message strong{font-size:12px}
  .story-message span{font-size:7px}
  .city-battlefield.with-city-map,.bahia-map.bahia-map-image{width:min(95vw,420px);max-height:76dvh}
}
@media(max-width:430px){
  .game-frame{width:100%;height:auto;aspect-ratio:941/1672}
  .story-message{width:66%;top:6%}
  .wave-banner{top:7%;font-size:8px;max-width:72%;text-align:center}
}


/* RED INFECTION 0.4.9 — ação mais rápida, enquadramento 9:16 e mensagens compactas */
.story-message{
  left:4%!important; top:5%!important; transform:none!important;
  width:min(43%,250px)!important; max-width:250px!important;
  padding:6px 8px!important; gap:1px!important; border-radius:9px!important;
  background:rgba(3,7,10,.38)!important; border-color:rgba(255,255,255,.10)!important;
  backdrop-filter:blur(2px)!important; box-shadow:0 6px 18px rgba(0,0,0,.20)!important;
  text-align:left!important;
}
.story-message.visible{transform:none!important}
.story-message small{font-size:5px!important;letter-spacing:.11em!important}
.story-message strong{font-size:10px!important;line-height:1.12!important}
.story-message span{font-size:6.5px!important;line-height:1.18!important;color:rgba(245,248,250,.82)!important}
.wave-banner{top:5.5%!important;max-width:54%;white-space:normal;text-align:center;background:rgba(5,10,14,.55)!important;font-size:8px!important;padding:5px 8px!important}
.city-toast{background:rgba(4,9,12,.58)!important;backdrop-filter:blur(2px)}
/* mapa vertical usa o máximo da área disponível; o zoom interno é controlado no JS */
.game-frame{width:min(100%,calc((100dvh - 66px) * .5628))!important;max-width:620px!important}
/* alvos locais um pouco menores visualmente, mas com hitbox generosa */
.local-infected{transform:translate(-50%,-50%) scale(.93)}
.local-infected.boss{transform:translate(-50%,-50%) scale(.96)}
.local-infected.hidden-target{transform:translate(-50%,-50%) scale(.55)!important}
.state-alert-btn.sc-ready{border-color:rgba(255,215,70,.58);box-shadow:0 0 0 0 rgba(255,215,70,.5);animation:scBeacon .7s infinite alternate}
@keyframes scBeacon{from{filter:brightness(1);transform:scale(1)}to{filter:brightness(1.35);transform:scale(1.035)}}
@media(max-width:650px){
  .story-message{left:3%!important;top:4%!important;width:42%!important;padding:5px 6px!important}
  .story-message strong{font-size:9px!important}.story-message span{font-size:6px!important}
  .game-frame{width:min(100%,calc((100dvh - 88px) * .5628))!important;max-width:none!important}
  .city-battle-copy p{font-size:9px;line-height:1.25;margin:.3em 0 .5em}
}


/* RED INFECTION 0.5.0 — contra-ataque / sistema inspirado em shooters verticais */
.counterattack-card,.reinforcement-card{padding:12px;border-radius:13px;background:linear-gradient(180deg,rgba(13,23,29,.92),rgba(7,13,18,.94));border:1px solid rgba(96,183,255,.18);display:grid;gap:9px}
.counterattack-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.counterattack-head span,.reinforcement-card>span{font-size:8px;letter-spacing:.12em;color:#9fb1bd;font-weight:800}.counterattack-head strong{font-size:9px;color:#ffe37a;text-align:right}
.counterattack-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.counterattack-grid>div{padding:7px 8px;border-radius:9px;background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.055)}.counterattack-grid span{display:block;font-size:7px;color:#97a9b4}.counterattack-grid strong{display:block;margin-top:3px;font-size:13px;color:#fff}
.reinfection-meter{height:9px!important}.reinfection-fill{width:0%;background:linear-gradient(90deg,#ffd447,#ff8a36 55%,#ff3948)!important}.counterattack-card small,.reinforcement-card small{font-size:8px;line-height:1.3;color:#91a1ac}
.reinforcement-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.reinforcement-actions button{border:1px solid rgba(255,255,255,.12);background:rgba(35,72,94,.45);color:#e9f6ff;border-radius:8px;padding:7px 3px;font-size:7px;font-weight:900;cursor:pointer}.reinforcement-actions button:hover{background:rgba(48,119,158,.55)}
@media(max-width:980px){.counterattack-card,.reinforcement-card{max-width:520px;width:100%;margin-inline:auto}}


/* =========================================================
   RED INFECTION 0.5.2 — LAYOUT RESPONSIVO 9:16 DEFINITIVO
   O palco e os mapas mantêm a proporção 941x1672 e nunca
   criam rolagem horizontal/vertical durante a partida.
   ========================================================= */
html,body{width:100%;height:100%;max-width:100%;overflow:hidden!important;overscroll-behavior:none}
body{min-height:100dvh!important}
.app-shell{height:100dvh!important;min-height:0!important;max-height:100dvh!important;overflow:hidden!important}
.game-column{height:100dvh!important;min-height:0!important;max-height:100dvh!important;overflow:hidden!important}
.topbar{flex:0 0 auto;min-width:0}
.game-frame{
  flex:1 1 auto!important;
  min-height:0!important;
  height:auto!important;
  width:min(100%,calc((100dvh - 58px)*.562799))!important;
  max-width:640px!important;
  aspect-ratio:941/1672!important;
  overflow:hidden!important;
  contain:layout paint;
}
.game-frame>canvas{
  width:100%!important;height:100%!important;
  max-width:100%!important;max-height:100%!important;
  aspect-ratio:941/1672!important;
  object-fit:contain!important;
}
.hud-panel{height:100dvh;max-height:100dvh;overflow-y:auto;overflow-x:hidden;scrollbar-width:none}
.hud-panel::-webkit-scrollbar{display:none}

/* Campanhas estaduais/cidades ficam inteiramente dentro do palco. */
.state-campaign-overlay{overflow:hidden!important;padding:6px!important}
.state-campaign-panel{
  display:flex!important;flex-direction:column!important;
  width:min(100%,720px)!important;height:min(100%,100dvh)!important;
  max-width:100%!important;max-height:100%!important;
  overflow:hidden!important;padding:8px!important;
}
.state-campaign-head{flex:0 0 auto!important;padding:2px 2px 7px!important}
.state-map-screen:not([hidden]),.city-battle-screen:not([hidden]){
  display:flex!important;flex:1 1 auto!important;min-height:0!important;
  flex-direction:column!important;overflow:hidden!important;
}
.state-map-screen{padding-top:6px!important}
.state-map-copy{flex:0 0 auto!important;margin-bottom:4px!important}
.state-map-copy span{line-height:1.18!important}
.state-legend{flex:0 0 auto!important;margin:5px 0 0!important;gap:7px!important}
.bahia-map.bahia-map-image{
  flex:1 1 auto!important;min-height:0!important;
  width:auto!important;height:auto!important;
  max-width:100%!important;max-height:100%!important;
  align-self:center!important;aspect-ratio:941/1672!important;
  background-size:contain!important;background-position:center!important;
  background-repeat:no-repeat!important;background-color:#03080c!important;
  overflow:hidden!important;
}
.city-battle-copy{flex:0 0 auto!important;margin:0!important}
.city-battle-copy h2{margin:2px 0!important}
.city-battle-copy p{margin:0 0 4px!important;line-height:1.2!important}
.city-battlefield.with-city-map{
  flex:1 1 auto!important;min-height:0!important;
  width:auto!important;height:auto!important;
  max-width:100%!important;max-height:100%!important;
  align-self:center!important;aspect-ratio:941/1672!important;
  background-size:contain!important;background-position:center!important;
  background-repeat:no-repeat!important;background-color:#03080c!important;
  overflow:hidden!important;contain:layout paint;
}
.city-battle-footer{flex:0 0 auto!important;margin-top:5px!important;gap:6px!important}
.local-infected-layer,.local-shot-layer{overflow:hidden!important;clip-path:inset(0 round 14px)}
.state-city-node{max-width:34%;min-width:0!important;padding:5px 3px!important}
.state-city-node span{max-width:100%;overflow:hidden;text-overflow:ellipsis}

@media(max-width:980px){
  .app-shell{display:block!important}
  .game-column{padding:3px!important}
  .topbar{width:100%!important;min-height:39px!important;padding:2px 1px 4px!important}
  .game-frame{
    width:min(calc(100vw - 6px),calc((100dvh - 48px)*.562799))!important;
    max-width:none!important;margin:0 auto!important;
  }
  /* Em celular o painel lateral não empurra o jogo nem cria barras. O Pix vira botão flutuante. */
  .hud-panel{display:contents!important}
  .hud-panel>*{display:none!important}
  .hud-panel #supportBtn{
    display:block!important;position:fixed!important;right:7px!important;bottom:7px!important;
    z-index:90!important;width:auto!important;margin:0!important;padding:7px 9px!important;
    font-size:9px!important;pointer-events:auto!important;border-radius:9px!important;
  }
  .mobile-help{display:none!important}
}
@media(max-width:650px){
  .top-left-group{min-width:0!important;overflow:hidden}
  .brand{min-width:0!important;max-width:118px!important;overflow:hidden}
  .brand strong{font-size:11px!important;white-space:nowrap}
  .brand span{display:none!important}
  .top-actions{flex:0 0 auto!important;gap:3px!important}
  .small-btn{height:30px!important;padding:0 6px!important;font-size:9px!important}
  #visualBtn{display:none!important}
  .visitor-pill{height:30px!important;padding:0 6px!important}
  .visitor-pill span{display:none!important}
  .game-frame{width:min(calc(100vw - 6px),calc((100dvh - 43px)*.562799))!important}
  .state-campaign-overlay{padding:2px!important}
  .state-campaign-panel{border-radius:10px!important;padding:5px!important}
  .state-campaign-head{gap:4px!important;padding-bottom:4px!important}
  .state-campaign-head strong{font-size:12px!important}
  .state-progress-pill strong{font-size:13px!important}
  .state-back-btn{padding:5px 6px!important;font-size:8px!important}
  .state-map-copy strong{font-size:10px!important}.state-map-copy span{font-size:7px!important}
  .state-legend{font-size:7px!important;gap:5px!important}
  .state-city-node i{width:12px!important;height:12px!important}
  .state-city-node span{font-size:7px!important}
  .city-battle-copy span{font-size:6px!important}.city-battle-copy h2{font-size:15px!important}
  .city-battle-copy p{display:none!important}
  .city-battle-footer span{font-size:6px!important}.city-battle-footer strong{font-size:13px!important}
  .city-battle-footer{flex-wrap:nowrap!important;align-items:center!important}
  .local-infected{width:34px!important;height:46px!important;transform:translate(-50%,-50%) scale(.88)!important}
  .local-infected.boss{width:49px!important;height:64px!important;transform:translate(-50%,-50%) scale(.90)!important}
  .local-infected.final-boss{width:56px!important;height:72px!important}
}
@media(max-width:430px){
  .game-frame{width:min(calc(100vw - 4px),calc((100dvh - 41px)*.562799))!important}
  .story-message{left:2%!important;top:3%!important;width:38%!important;max-width:150px!important}
  .wave-banner{top:3.5%!important;max-width:48%!important}
  /* O beacon NAO recebe coordenadas fixas no celular. left/top sao calculados
     pelo JS a partir da posicao real do estado dentro do canvas. */
  .state-alert-btn{right:auto!important;bottom:auto!important;transform:translate(-50%,-50%)!important;transform-origin:center!important}
}

@media(max-width:420px){.counterattack-grid{grid-template-columns:1fr 1fr}.counterattack-grid>div:last-child{grid-column:1/-1}}


/* RED INFECTION 0.5.4 — MAPA INTEIRO / SEM RECORTE
   Todas as artes nacionais, estaduais e locais são 9:16. O palco mantém
   essa mesma proporção e nenhum background usa cover. */
.game-frame{aspect-ratio:941/1672!important;overflow:hidden!important;background:#020609!important}
.game-frame>canvas{inset:0!important;width:100%!important;height:100%!important;object-fit:contain!important;transform:none!important}
.bahia-map.bahia-map-image,.city-battlefield.with-city-map{
  aspect-ratio:941/1672!important;
  background-size:contain!important;
  background-position:center center!important;
  background-repeat:no-repeat!important;
  overflow:hidden!important;
}
@media(max-width:980px){
  .game-frame{width:min(calc(100vw - 6px),calc((100dvh - 48px)*.562799))!important;height:auto!important;max-width:none!important}
}
@media(max-width:650px){
  .game-frame{width:min(calc(100vw - 4px),calc((100dvh - 43px)*.562799))!important;height:auto!important}
  .bahia-map.bahia-map-image,.city-battlefield.with-city-map{width:auto!important;height:100%!important;max-width:100%!important;max-height:100%!important}
}


/* ===== HOTFIX 0.5.5 — MINA CLICÁVEL + SOLDADOS VISÍVEIS ===== */
.mine-action-btn{
  position:absolute;
  z-index:19;
  transform:translate(-50%,-50%);
  width:78px;
  height:78px;
  border-radius:50%;
  border:3px solid #d9ffff;
  background:radial-gradient(circle at 38% 32%,rgba(117,255,255,.98),rgba(0,122,155,.96) 48%,rgba(1,28,38,.98) 74%);
  color:#fff;
  box-shadow:0 0 0 8px rgba(74,236,255,.18),0 0 34px rgba(63,235,255,.92),0 12px 26px rgba(0,0,0,.55);
  cursor:pointer;
  pointer-events:auto;
  display:grid;
  place-content:center;
  text-align:center;
  animation:mineActionPulse .72s infinite alternate ease-in-out;
  touch-action:manipulation;
  -webkit-tap-highlight-color:transparent;
}
.mine-action-btn[hidden]{display:none!important}
.mine-action-btn strong{font-size:14px;line-height:1;letter-spacing:.04em}
.mine-action-btn span{font-size:9px;line-height:1;margin-top:5px;font-weight:900;letter-spacing:.12em}
@keyframes mineActionPulse{
  from{scale:.92;box-shadow:0 0 0 5px rgba(74,236,255,.18),0 0 20px rgba(63,235,255,.65),0 10px 22px rgba(0,0,0,.5)}
  to{scale:1.06;box-shadow:0 0 0 14px rgba(74,236,255,.04),0 0 44px rgba(63,235,255,1),0 14px 32px rgba(0,0,0,.6)}
}
@media(max-width:650px){
  .mine-action-btn{width:68px;height:68px}
  .mine-action-btn strong{font-size:12px}
  .mine-action-btn span{font-size:8px}
}


/* ===== 0.5.6 SPRITES — personagens reais 2D com fallback local ===== */
.local-infected{
  background-image:url('assets/sprites/infected-normal.png?v=0600');
  background-repeat:no-repeat;
  background-position:center;
  background-size:contain;
  filter:drop-shadow(0 6px 5px rgba(0,0,0,.42));
  animation:localSpriteBob .34s ease-in-out infinite alternate;
}
.local-infected.boss,.local-infected.final-boss{
  background-image:url('assets/sprites/infected-brute.png?v=0600');
}
.local-infected .head,.local-infected .body,.local-infected .legs{display:none!important}
.local-infected .tag{top:-7px}
.local-infected .hit-count{bottom:-8px}
.local-infected.boss .hit-count,.local-infected.final-boss .hit-count{bottom:-9px}
.local-infected.target-pop{animation:targetPop .16s ease-out, localSpriteBob .30s ease-in-out .16s infinite alternate}
.local-infected.rescued{
  background-image:url('assets/sprites/soldier.png?v=0600');
  background-repeat:no-repeat;
  background-position:center;
  background-size:contain;
  filter:drop-shadow(0 0 12px rgba(65,225,105,.82)) saturate(1.12) brightness(1.06);
  animation:rescuedFade 1.05s forwards, localSpriteBob .30s ease-in-out infinite alternate;
}

@keyframes localSpriteBob{from{margin-top:-1px}to{margin-top:2px}}

/* Soldados da base local também viram sprites, não bonecos CSS. */
.base-defenders{top:-32px;gap:2px}
.defender{
  width:26px;height:30px;
  background:url('assets/sprites/soldier.png?v=0600') center/contain no-repeat;
  filter:drop-shadow(0 4px 3px rgba(0,0,0,.45));
  animation:defenderReady .55s ease-in-out infinite alternate;
}
.defender::before,.defender::after{display:none!important}
@keyframes defenderReady{from{transform:translateY(0)}to{transform:translateY(-2px)}}

@media(max-width:650px){
  .local-infected{width:48px!important;height:58px!important}
  .local-infected.boss{width:64px!important;height:76px!important}
  .local-infected.final-boss{width:72px!important;height:86px!important}
  .defender{width:24px;height:28px}
}


/* ===== RED INFECTION 0.5.7 — PERSONAGENS MAIORES =====
   Aumenta a leitura dos sprites sem alterar o enquadramento 9:16. */
.local-infected{
  width:52px!important;
  height:66px!important;
  transform:translate(-50%,-50%) scale(1)!important;
}
.local-infected.boss{
  width:72px!important;
  height:90px!important;
  transform:translate(-50%,-50%) scale(1)!important;
}
.local-infected.final-boss{
  width:82px!important;
  height:102px!important;
}
.local-infected.hidden-target{
  transform:translate(-50%,-50%) scale(.58)!important;
}
.defender{
  width:31px!important;
  height:37px!important;
}
@media(max-width:650px){
  .local-infected{
    width:55px!important;
    height:69px!important;
    transform:translate(-50%,-50%) scale(1)!important;
  }
  .local-infected.boss{
    width:76px!important;
    height:94px!important;
    transform:translate(-50%,-50%) scale(1)!important;
  }
  .local-infected.final-boss{
    width:86px!important;
    height:106px!important;
  }
  .defender{
    width:29px!important;
    height:35px!important;
  }
}


/* ===== RED INFECTION 0.6.0 — MOBILE PERFORMANCE ===== */
@media(max-width:780px){
  /* blur/backdrop costuma ser caro em celulares; removido só no mobile */
  .overlay-panel,.support-dialog,.state-campaign-overlay,.wave-banner,.city-toast,
  .story-message,.hud-panel{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
  canvas{box-shadow:0 14px 36px rgba(0,0,0,.50),0 0 0 1px rgba(255,255,255,.06)!important}
  .local-infected,.defender{filter:none!important}
  .mine-action-btn{box-shadow:0 0 0 6px rgba(74,236,255,.12),0 0 18px rgba(63,235,255,.62),0 8px 16px rgba(0,0,0,.42)!important}
}


/* ===== 0.6.3 — DIFICULDADE + CAMPANHA CONTÍNUA ===== */
.difficulty-picker{display:grid;gap:6px;margin:12px auto 4px;max-width:360px;padding:9px 10px;border-radius:12px;background:rgba(3,11,16,.48);border:1px solid rgba(255,255,255,.10)}
.difficulty-picker>span{font-size:8px;letter-spacing:.16em;color:#9fb0b8;font-weight:900}
.difficulty-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.difficulty-actions button{border:1px solid rgba(255,255,255,.15);border-radius:8px;background:#101c23;color:#d7e2e7;padding:8px 10px;font-weight:900;font-size:10px;cursor:pointer}
.difficulty-actions button.active{background:linear-gradient(180deg,#245e38,#153a24);color:#ffe85e;border-color:rgba(255,232,94,.55);box-shadow:0 0 0 2px rgba(255,232,94,.08)}
.difficulty-picker small{font-size:8px;line-height:1.35;color:#a8b7be}
.difficulty-hud{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.08)}
.difficulty-hud span{font-size:8px;letter-spacing:.10em;color:#9eacb3}.difficulty-hud strong{font-size:11px;color:#ffe45b}
@media(max-width:650px){.difficulty-picker{margin-top:8px;padding:7px 8px}.difficulty-actions button{padding:7px 8px}}


/* ===== 0.6.6 — PLATAFORMA DE MÍSSIL ===== */
.missile-action-btn{
  position:absolute;
  z-index:20;
  transform:translate(-50%,-50%);
  width:104px;
  height:72px;
  border-radius:18px;
  border:3px solid #ffe47a;
  background:
    linear-gradient(155deg,rgba(91,112,83,.98),rgba(24,35,30,.98) 52%,rgba(8,14,14,.99));
  color:#fff;
  box-shadow:0 0 0 7px rgba(255,202,72,.15),0 0 32px rgba(255,110,45,.72),0 14px 28px rgba(0,0,0,.56);
  cursor:pointer;
  pointer-events:auto;
  display:grid;
  place-content:center;
  text-align:center;
  animation:missilePlatformPulse .46s infinite alternate ease-in-out;
  touch-action:manipulation;
  -webkit-tap-highlight-color:transparent;
  overflow:visible;
}
.missile-action-btn[hidden]{display:none!important}
.missile-action-btn::before{
  content:"";
  position:absolute;
  left:48%;
  top:-18px;
  width:13px;
  height:42px;
  border-radius:8px 8px 4px 4px;
  transform:rotate(28deg);
  transform-origin:bottom center;
  background:linear-gradient(90deg,#d9e0d5,#758078 50%,#262d29);
  border:2px solid rgba(255,239,172,.86);
  box-shadow:0 0 10px rgba(255,101,49,.5);
}
.missile-action-btn::after{
  content:"";
  position:absolute;
  left:14px;right:14px;bottom:8px;height:9px;
  border-radius:50%;
  background:rgba(255,196,56,.42);
  box-shadow:0 0 12px rgba(255,180,42,.72);
}
.missile-action-btn strong{font-size:14px;line-height:1;letter-spacing:.05em;z-index:1}
.missile-action-btn span{font-size:9px;line-height:1;margin-top:6px;font-weight:900;letter-spacing:.08em;color:#ffe88e;z-index:1}
@keyframes missilePlatformPulse{
  from{scale:.94;filter:brightness(.94)}
  to{scale:1.06;filter:brightness(1.18)}
}
@media(max-width:650px){
  .missile-action-btn{width:88px;height:62px;border-radius:15px}
  .missile-action-btn::before{top:-15px;width:11px;height:35px}
  .missile-action-btn strong{font-size:12px}
  .missile-action-btn span{font-size:8px}
}


/* ===== RED INFECTION 0.6.7 — BEACON DO ESTADO SOBRE O MAPA =====
   O botão de entrada não fica mais preso no alto da tela.
   Ele é uma bolinha pulsante colocada diretamente sobre o estado liberado. */
.state-alert-btn{
  right:auto!important;
  bottom:auto!important;
  width:52px!important;
  height:52px!important;
  min-width:52px!important;
  padding:0!important;
  border-radius:50%!important;
  display:grid!important;
  place-items:center!important;
  gap:0!important;
  transform:translate(-50%,-50%)!important;
  transform-origin:center!important;
  background:radial-gradient(circle at 38% 32%,rgba(255,103,92,.98),rgba(142,13,20,.97) 58%,rgba(53,4,8,.98))!important;
  border:2px solid rgba(255,235,202,.92)!important;
  box-shadow:0 0 0 5px rgba(255,54,54,.17),0 0 26px rgba(255,43,43,.88),0 8px 18px rgba(0,0,0,.48)!important;
  animation:stateBeaconBreathe .58s infinite alternate ease-in-out!important;
  overflow:visible!important;
  text-align:center!important;
}
.state-alert-btn[hidden]{display:none!important}
.state-alert-btn>span:last-child{
  display:grid!important;
  place-items:center!important;
  gap:0!important;
  position:relative!important;
  z-index:2!important;
  pointer-events:none!important;
}
.state-alert-btn strong{
  font-size:13px!important;
  line-height:1!important;
  letter-spacing:.04em!important;
  color:#fff!important;
  text-shadow:0 2px 4px rgba(0,0,0,.8)!important;
}
.state-alert-btn small{
  margin-top:3px!important;
  font-size:6px!important;
  line-height:1!important;
  letter-spacing:.08em!important;
  color:#ffe6b2!important;
}
.state-alert-pulse{
  position:absolute!important;
  inset:-7px!important;
  width:auto!important;
  height:auto!important;
  border-radius:50%!important;
  background:transparent!important;
  border:2px solid rgba(255,76,67,.72)!important;
  box-shadow:0 0 0 0 rgba(255,64,55,.58)!important;
  animation:stateBeaconRing .9s infinite ease-out!important;
  pointer-events:none!important;
}
.state-alert-btn.sc-ready{
  border-color:#ffe878!important;
  background:radial-gradient(circle at 38% 32%,rgba(255,197,70,.98),rgba(173,64,13,.98) 58%,rgba(67,20,3,.98))!important;
  box-shadow:0 0 0 5px rgba(255,208,67,.16),0 0 28px rgba(255,175,36,.92),0 8px 18px rgba(0,0,0,.48)!important;
}
.state-alert-btn.sc-ready .state-alert-pulse{
  border-color:rgba(255,229,92,.82)!important;
  animation-name:stateBeaconRingGold!important;
}
@keyframes stateBeaconBreathe{
  from{scale:.92;filter:brightness(.96)}
  to{scale:1.08;filter:brightness(1.16)}
}
@keyframes stateBeaconRing{
  0%{transform:scale(.72);opacity:.95;box-shadow:0 0 0 0 rgba(255,64,55,.52)}
  100%{transform:scale(1.48);opacity:0;box-shadow:0 0 0 13px rgba(255,64,55,0)}
}
@keyframes stateBeaconRingGold{
  0%{transform:scale(.72);opacity:.95;box-shadow:0 0 0 0 rgba(255,218,72,.52)}
  100%{transform:scale(1.48);opacity:0;box-shadow:0 0 0 13px rgba(255,218,72,0)}
}
@media(max-width:650px){
  .state-alert-btn{
    width:44px!important;
    height:44px!important;
    min-width:44px!important;
    transform:translate(-50%,-50%)!important;
  }
  .state-alert-btn strong{font-size:11px!important}
  .state-alert-btn small{font-size:5.5px!important}
}


/* ===== 0.6.9 — BEACON RESPONSIVO REAL ===== */
.state-alert-btn{
  position:absolute!important;
  right:auto!important;
  bottom:auto!important;
  margin:0!important;
  will-change:left,top,transform!important;
}
@media(max-width:430px){
  .state-alert-btn{
    right:auto!important;
    bottom:auto!important;
    transform:translate(-50%,-50%)!important;
    transform-origin:center!important;
  }
}


/* ===== RED INFECTION 0.6.10 — CORRECAO DEFINITIVA BEACON MOBILE =====
   NUNCA fixe top/right do botao de estado em media query. O JS converte
   coordenadas do mapa 941x1672 para o tamanho real do canvas em qualquer tela. */
.state-alert-btn{
  right:auto!important;
  bottom:auto!important;
}
@media(max-width:650px){
  .state-alert-btn{
    right:auto!important;
    bottom:auto!important;
    /* left/top ficam exclusivamente sob controle do JS (inline style). */
  }
}

/* ==========================================================
   RED INFECTION 0.6.13 — OPERAÇÃO ESPECIAL / INFILTRAÇÃO CE + ARTES
   ========================================================== */
.special-op-beacon{position:absolute;z-index:16;transform:translate(-50%,-50%);display:grid;place-items:center;min-width:68px;padding:7px 8px;border:2px solid #ffbf45;border-radius:999px;background:rgba(70,13,9,.94);color:#fff;box-shadow:0 0 0 0 rgba(255,92,57,.58),0 8px 20px rgba(0,0,0,.45);cursor:pointer;animation:specialBeaconPulse 1s infinite;touch-action:manipulation}.special-op-beacon[hidden]{display:none!important}.special-op-beacon strong{font-size:15px;line-height:1;color:#ffe88a}.special-op-beacon span{font-size:6px;letter-spacing:.1em;font-weight:900;margin-top:2px}.special-op-overlay{position:absolute;inset:0;z-index:40;display:none;align-items:center;justify-content:center;padding:8px;background:rgba(1,4,6,.93);backdrop-filter:blur(6px)}.special-op-overlay.visible{display:flex}.special-op-panel{display:flex;flex-direction:column;width:min(98%,820px);height:min(96%,650px);padding:10px;border:1px solid rgba(255,194,75,.28);border-radius:16px;background:linear-gradient(180deg,#0c171b,#05090c);box-shadow:0 25px 80px rgba(0,0,0,.72);overflow:hidden}.special-op-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.special-op-head>div{display:grid}.special-op-head small{font-size:7px;letter-spacing:.14em;color:#ffaf72}.special-op-head strong{font-size:16px;letter-spacing:.06em}.special-op-head button,.special-op-actions button{border:1px solid rgba(255,255,255,.14);border-radius:8px;background:#17262d;color:#fff;padding:7px 10px;font-size:8px;font-weight:900;cursor:pointer}.special-op-instructions{text-align:center;font-size:9px;color:#d8e2e6;padding:4px 6px}.special-op-hud{display:grid;grid-template-columns:auto minmax(90px,1fr) auto auto;align-items:center;gap:7px;font-size:7px;font-weight:900;letter-spacing:.06em}.special-op-hud>i{display:block;height:7px;border-radius:99px;background:#20292d;overflow:hidden}.special-op-hud>i em{display:block;width:0;height:100%;background:linear-gradient(90deg,#53d668,#ffd342 55%,#ff3d3d);transition:width .12s linear}.special-op-hud #specialObjective{color:#ffe078}.special-op-hud #specialCountdown{font-size:12px;color:#fff}.special-op-field{--special-bg:none;position:relative;flex:1;min-height:0;margin-top:6px;border-radius:13px;overflow:hidden;outline:none;border:1px solid rgba(255,255,255,.1);background:linear-gradient(180deg,rgba(3,7,9,.28),rgba(5,9,13,.70)),var(--special-bg),linear-gradient(160deg,#172328,#0b1215 60%,#121b1e);background-size:cover,cover,auto;background-position:center,center,center;box-shadow:inset 0 0 70px rgba(0,0,0,.56);touch-action:none}.special-op-field::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.15),rgba(0,0,0,.34)),repeating-linear-gradient(90deg,transparent 0 9%,rgba(255,255,255,.025) 9.2% 9.5%),repeating-linear-gradient(0deg,transparent 0 13%,rgba(255,255,255,.02) 13.2% 13.5%);pointer-events:none}.special-op-field[data-mode="restored"]::before{background:linear-gradient(180deg,rgba(10,35,15,.16),rgba(0,0,0,.28)),repeating-linear-gradient(90deg,transparent 0 9%,rgba(255,255,255,.02) 9.2% 9.5%),repeating-linear-gradient(0deg,transparent 0 13%,rgba(255,255,255,.018) 13.2% 13.5%)}.special-route{position:absolute;background:rgba(35,42,47,.70);border:1px solid rgba(255,255,255,.05);box-shadow:inset 0 0 20px rgba(0,0,0,.25);backdrop-filter:blur(1px)}.special-route.route-a{left:-4%;top:46%;width:108%;height:14%;transform:rotate(-4deg)}.special-route.route-b{left:58%;top:-5%;width:12%;height:110%;transform:rotate(7deg)}.special-cover{position:absolute;width:14%;height:19%;border-radius:4px;background:linear-gradient(145deg,rgba(74,77,72,.88),rgba(37,42,39,.92));box-shadow:6px 8px 0 rgba(0,0,0,.28)}.special-cover.c1{left:17%;top:14%}.special-cover.c2{left:35%;bottom:13%;width:17%}.special-cover.c3{right:10%;top:36%;height:16%}.special-agent{position:absolute;left:10%;top:88%;z-index:8;transform:translate(-50%,-50%);display:grid;justify-items:center;transition:left .07s linear,top .07s linear;pointer-events:none}.special-agent span{display:block;width:20px;height:27px;border-radius:7px 7px 4px 4px;background:linear-gradient(#4ce17b,#14713a);border:2px solid #f1dc70;box-shadow:0 0 13px rgba(76,225,123,.45)}.special-agent span::before{content:"";position:absolute;width:12px;height:12px;margin-left:2px;margin-top:-10px;border-radius:50%;background:#caa58f;border:2px solid #1d4f31}.special-agent small,.special-device small,.special-extraction small{font-size:6px;font-weight:900;color:#fff;text-shadow:0 2px 3px #000;white-space:nowrap;margin-top:2px}.special-device,.special-extraction{position:absolute;z-index:4;display:grid;justify-items:center;transform:translate(-50%,-50%)}.special-device{left:88%;top:14%;color:#ffd84a}.special-extraction{left:10%;top:88%;color:#75dcff}.special-device span,.special-extraction span{font-size:25px;filter:drop-shadow(0 0 9px currentColor)}.special-infected{position:absolute;z-index:6;transform:translate(-50%,-50%);width:27px;height:38px;pointer-events:none;background:url('assets/sprites/infected-normal.png') center/contain no-repeat;filter:drop-shadow(0 3px 3px rgba(0,0,0,.55))}.special-infected::before{content:"";position:absolute;left:50%;top:50%;width:var(--vision,38%);aspect-ratio:1;border:1px solid rgba(255,65,65,.20);border-radius:50%;transform:translate(-50%,-50%);background:radial-gradient(circle,rgba(255,35,35,.11),rgba(255,35,35,.035) 48%,transparent 68%);opacity:.62}.special-infected.hot::before{opacity:1;background:radial-gradient(circle,rgba(255,38,38,.24),rgba(255,38,38,.08) 50%,transparent 70%)}.special-infected.hot{filter:drop-shadow(0 0 8px rgba(255,47,47,.8))}.special-op-actions{display:flex;justify-content:center;gap:8px;padding-top:6px}.special-op-actions #specialInstallBtn{background:#7f5810;border-color:#ffd552;color:#fff4b5}.special-op-actions #specialRetryBtn{background:#6f1818;border-color:#ff6969}.special-op-legend{padding-top:5px;text-align:center;font-size:7px;letter-spacing:.08em;color:#9fb0b8}.special-op-legend b{color:#ffe078}.special-op-legend span{color:#cdd8dc}.special-pulse{position:absolute;left:88%;top:14%;width:10px;height:10px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none}.special-pulse.active{animation:specialPulseWave 1.5s ease-out forwards;background:rgba(112,255,160,.9)}
@keyframes specialBeaconPulse{0%,100%{box-shadow:0 0 0 0 rgba(255,92,57,.58),0 8px 20px rgba(0,0,0,.45)}50%{box-shadow:0 0 0 11px rgba(255,92,57,0),0 8px 20px rgba(0,0,0,.45)}}
@keyframes specialPulseWave{0%{width:10px;height:10px;box-shadow:0 0 10px #8affb3;opacity:1}100%{width:1100px;height:1100px;box-shadow:0 0 80px #8affb3;opacity:0}}
@media(max-width:650px){.special-op-panel{width:99%;height:98%;padding:6px;border-radius:10px}.special-op-head strong{font-size:12px}.special-op-instructions{font-size:7px;padding:3px}.special-op-hud{grid-template-columns:auto minmax(65px,1fr) auto auto;gap:4px;font-size:6px}.special-op-hud #specialCountdown{font-size:10px}.special-agent span{width:18px;height:24px}.special-infected{width:25px;height:35px}.special-op-beacon{min-width:58px;padding:6px}.special-op-beacon strong{font-size:13px}}


/* ===== RED INFECTION 0.6.14 — APRESENTAÇÃO PÚBLICA + LEGIBILIDADE ===== */
/* Aumento leve das mensagens para leitura de jogador final, sem alterar a área útil do mapa. */
.story-message small{font-size:6.5px!important}
.story-message strong{font-size:11.5px!important;line-height:1.16!important}
.story-message span{font-size:7.4px!important;line-height:1.24!important}
.wave-banner{font-size:9px!important;padding:6px 10px!important}
.city-toast{font-size:10px!important;padding:7px 10px!important}
.rules-card h3{font-size:12px;letter-spacing:.06em}
.rules-card p{font-size:10px;line-height:1.42}
.version-note{font-size:9px;line-height:1.35;color:#9fb0b8}
@media(max-width:650px){
  .story-message strong{font-size:10.5px!important}
  .story-message span{font-size:7px!important}
  .wave-banner{font-size:8.5px!important}
  .city-toast{font-size:9.5px!important}
}

/* ===== RED INFECTION 0.6.16 — CAPA DE ENTRADA + MENU PRINCIPAL ===== */
.launch-overlay{position:fixed!important;inset:0!important;z-index:250!important;padding:0!important;background:#020506;align-items:stretch!important;justify-content:stretch!important}
.launch-cover{position:relative;width:100%;height:100%;min-height:100dvh;overflow:auto;display:flex;align-items:flex-end;justify-content:center;background:#040708}
.launch-cover-bg{position:absolute;inset:0;background-image:url('assets/ui/red-infection-capa-9x16.png?v=0615');background-repeat:no-repeat;background-position:center center;background-size:cover;filter:saturate(1.04) contrast(1.02)}
.launch-shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.06) 0%,rgba(0,0,0,.10) 38%,rgba(1,4,6,.72) 67%,rgba(1,4,6,.97) 100%),linear-gradient(90deg,rgba(0,0,0,.18),transparent 22%,transparent 78%,rgba(0,0,0,.18))}
.launch-content{position:relative;z-index:2;width:min(92%,520px);margin:0 auto max(22px,env(safe-area-inset-bottom));padding:18px 18px 16px;text-align:center;border:1px solid rgba(255,255,255,.14);border-radius:18px;background:rgba(3,8,11,.78);box-shadow:0 22px 70px rgba(0,0,0,.68);backdrop-filter:blur(8px)}
.launch-kicker{font-size:10px;font-weight:900;letter-spacing:.24em;color:#ffd84a;margin-bottom:3px}.launch-content h1{margin:0;font-size:clamp(34px,8vw,58px);line-height:.92;letter-spacing:.055em;color:#fff;text-shadow:0 3px 18px #000,0 0 22px rgba(255,38,38,.32)}
.launch-tagline{margin:10px auto 12px;max-width:460px;color:#eef3f5;font-size:13px;line-height:1.42;text-shadow:0 2px 6px #000}.launch-status{display:flex;flex-wrap:wrap;justify-content:center;gap:5px;margin-bottom:10px}.launch-status span{padding:5px 7px;border-radius:999px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.10);font-size:7px;font-weight:900;letter-spacing:.06em;color:#dce6e9}
.launch-difficulty{margin:8px auto!important;padding:7px 8px!important;background:rgba(0,0,0,.38)!important}.launch-actions{margin-top:8px}.launch-play{font-size:16px;padding:14px 22px;box-shadow:0 0 0 1px rgba(255,221,72,.18),0 10px 28px rgba(22,157,62,.26)}.launch-link-btn{margin-top:9px;border:0;background:transparent;color:#dce6e9;text-decoration:underline;text-underline-offset:3px;font-size:9px;font-weight:900;letter-spacing:.08em;cursor:pointer}.launch-how{display:grid;gap:5px;margin-top:9px;padding:9px 10px;border-radius:10px;background:rgba(5,10,13,.86);border:1px solid rgba(255,255,255,.09);font-size:10px;line-height:1.35;color:#cbd7dc;text-align:left}.launch-how strong{color:#ffe26a;letter-spacing:.10em}.launch-how[hidden]{display:none!important}
.pause-menu{position:absolute;inset:0;z-index:220;display:none;align-items:center;justify-content:center;padding:16px;background:rgba(1,4,6,.82);backdrop-filter:blur(7px)}.pause-menu.visible{display:flex}.pause-menu-panel{width:min(90%,380px);padding:22px 18px;text-align:center;border-radius:16px;background:linear-gradient(180deg,#0d171d,#070c10);border:1px solid rgba(255,255,255,.16);box-shadow:0 28px 80px rgba(0,0,0,.72)}.pause-menu-panel h2{margin:0 0 7px;font-size:25px}.pause-menu-panel p{margin:0 0 12px;color:#aebcc2;font-size:12px}.pause-menu-panel .secondary-btn{margin-top:8px}.pause-danger{background:linear-gradient(180deg,#4c1d1d,#2c1010)!important;border-color:rgba(255,91,91,.28)!important;color:#ffd5d5!important}
@media(max-width:650px){.launch-cover-bg{background-position:center top}.launch-content{width:min(94%,430px);margin-bottom:max(8px,env(safe-area-inset-bottom));padding:12px 12px 11px;border-radius:14px;backdrop-filter:blur(5px)}.launch-kicker{font-size:8px}.launch-content h1{font-size:34px}.launch-tagline{font-size:10px;margin:7px auto 8px}.launch-status{margin-bottom:5px}.launch-status span{font-size:6px;padding:4px 5px}.launch-difficulty{margin:5px auto!important}.launch-difficulty small{font-size:7px}.launch-play{padding:11px 18px;font-size:14px}.launch-link-btn{margin-top:6px}.save-hint{font-size:8px;margin-top:6px}.pause-menu-panel{width:88%;padding:18px 14px}.pause-menu-panel h2{font-size:21px}}


/* ===== RED INFECTION 0.6.19 — CAPA 9:16 RESPONSIVA / CTA FIXO ===== */
.cover-gate{
  position:fixed;inset:0;z-index:500;display:none;align-items:center;justify-content:center;
  padding:max(6px,env(safe-area-inset-top)) max(6px,env(safe-area-inset-right)) max(6px,env(safe-area-inset-bottom)) max(6px,env(safe-area-inset-left));
  background:#020304;overflow:hidden;box-sizing:border-box;
}
.cover-gate.visible{display:flex}
.cover-gate-media{
  position:relative;
  width:min(calc(100vw - 12px),calc((100dvh - 12px) * 9 / 16),560px);
  aspect-ratio:9/16;
  max-height:calc(100dvh - 12px);
  flex:0 0 auto;
  display:block;
  overflow:hidden;
  background:#020304;
  border-radius:clamp(0px,1.2vw,14px);
  box-shadow:0 18px 60px rgba(0,0,0,.72);
}
.cover-gate-media>img{
  position:absolute;inset:0;display:block;width:100%;height:100%;
  object-fit:contain;object-position:center center;background:#020304;
}
.cover-gate-vignette{
  position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.02) 55%,rgba(0,0,0,.30) 72%,rgba(0,0,0,.82) 100%);
}
.cover-gate-cta{
  position:absolute;z-index:3;left:50%;bottom:clamp(12px,2.4%,22px);transform:translateX(-50%);
  width:auto;max-width:78%;display:grid;justify-items:center;gap:6px;text-align:center;
}
.cover-gate-call{display:none!important}
.cover-mission-btn{
  display:inline-flex!important;align-items:center;justify-content:center;width:auto;min-width:0;min-height:0;
  border:1px solid rgba(255,227,107,.72);border-radius:9px;padding:8px 14px;
  background:rgba(8,74,35,.88);color:#fff;font-size:clamp(9px,2.1vw,11px);line-height:1;
  font-weight:900;letter-spacing:.055em;text-align:center;
  box-shadow:0 5px 14px rgba(0,0,0,.44);
  cursor:pointer;animation:none!important;touch-action:manipulation;-webkit-tap-highlight-color:transparent;
}
.cover-mission-btn:hover{background:rgba(10,92,42,.94);border-color:#ffe36b}
.cover-mission-btn:active{transform:translateY(1px)}
.cover-continue-btn{
  width:82%;border:1px solid rgba(255,255,255,.34);border-radius:11px;padding:10px 14px;background:rgba(4,10,13,.82);
  color:#fff;font-size:clamp(9px,2.4vw,11px);font-weight:900;letter-spacing:.08em;cursor:pointer;backdrop-filter:blur(5px);
}
.cover-continue-btn[hidden]{display:none!important}.cover-gate-cta small{font-size:8px;color:#d6e0e4;text-shadow:0 2px 7px #000;letter-spacing:.06em}.cover-gate:not(.visible){pointer-events:none}
@keyframes coverMissionPulse{0%,100%{transform:scale(1);box-shadow:0 0 0 5px rgba(255,218,64,.09),0 0 26px rgba(31,224,94,.30),0 14px 32px rgba(0,0,0,.62)}50%{transform:scale(1.025);box-shadow:0 0 0 10px rgba(255,218,64,.02),0 0 44px rgba(31,224,94,.56),0 16px 34px rgba(0,0,0,.68)}}
@media(max-width:650px){
  .cover-gate{padding:0;background:#020304}
  .cover-gate-media{width:min(100vw,calc(100dvh * 9 / 16));max-height:100dvh;border-radius:0;box-shadow:none}
  .cover-gate-media>img{object-fit:contain!important;object-position:center center!important}
  .cover-gate-cta{bottom:max(10px,calc(env(safe-area-inset-bottom) + 6px));width:auto;max-width:82%;gap:5px}
  .cover-mission-btn{min-height:0;padding:8px 12px;font-size:10px;border-radius:9px}
  .cover-continue-btn{padding:9px 10px;font-size:10px}
  .cover-gate-cta small{font-size:7px}
}
@media(min-width:651px) and (max-height:720px){
  .cover-gate-media{width:min(calc((100dvh - 12px) * 9 / 16),480px)}
  .cover-gate-cta{bottom:10px;width:auto;max-width:78%}
  .cover-mission-btn{min-height:0;padding:7px 12px;font-size:10px}
}


\n\n/* ===== RED INFECTION 0.6.17 — DERROTA / INFECÇÃO ===== */
.infected-defeat-overlay{position:absolute;inset:0;z-index:120;display:none;align-items:center;justify-content:center;padding:18px;background:radial-gradient(circle at center,rgba(120,0,0,.28),rgba(5,0,0,.94) 68%);backdrop-filter:blur(3px);overflow:hidden}
.infected-defeat-overlay.visible{display:flex;animation:defeatFlash .36s ease-out both}
.infected-defeat-overlay::before{content:"";position:absolute;inset:-10%;background:repeating-linear-gradient(0deg,rgba(255,0,0,.04) 0 2px,transparent 2px 6px);animation:defeatScan .24s linear infinite;pointer-events:none}
.infected-defeat-card{position:relative;z-index:2;width:min(92%,680px);text-align:center;padding:26px 18px 22px;border:2px solid rgba(255,55,55,.78);border-radius:16px;background:linear-gradient(180deg,rgba(30,0,0,.94),rgba(7,0,0,.96));box-shadow:0 0 0 7px rgba(255,0,0,.06),0 0 42px rgba(255,0,0,.42),0 24px 80px rgba(0,0,0,.72);animation:defeatShake .42s ease-out}
.infected-defeat-headline{margin-bottom:10px;font-size:clamp(13px,2.2vw,24px);font-weight:1000;letter-spacing:.12em;color:#ffb0b0;text-transform:uppercase;text-shadow:0 0 10px rgba(255,0,0,.38)}
.infected-defeat-glitch{font-weight:1000;font-size:clamp(34px,8vw,82px);line-height:.95;letter-spacing:.045em;color:#ff2b2b;text-shadow:0 0 10px rgba(255,0,0,.75),4px 0 #3d0000,-3px 0 #fff1f1;text-transform:uppercase}
.infected-defeat-sub{margin-top:12px;font-weight:1000;font-size:clamp(19px,4vw,36px);letter-spacing:.12em;color:#fff;text-transform:uppercase}
.infected-defeat-detail{max-width:560px;margin:12px auto 0;font-size:clamp(11px,1.8vw,15px);line-height:1.45;color:#efcaca}
#infectedDefeatRetry{margin-top:20px;min-width:210px;padding:13px 22px;border:2px solid #ff5a5a;border-radius:10px;background:linear-gradient(180deg,#a60000,#610000);color:#fff;font-size:clamp(13px,2vw,18px);font-weight:1000;letter-spacing:.08em;cursor:pointer;box-shadow:0 8px 26px rgba(0,0,0,.45),0 0 18px rgba(255,0,0,.25)}
#infectedDefeatRetry:hover{transform:translateY(-1px);filter:brightness(1.12)}
@keyframes defeatFlash{0%{opacity:0;background:#ff0000}35%{opacity:1}100%{background:radial-gradient(circle at center,rgba(120,0,0,.28),rgba(5,0,0,.94) 68%)}}
@keyframes defeatShake{0%{transform:translateX(0) scale(.88)}20%{transform:translateX(-12px) scale(1.03)}38%{transform:translateX(10px) scale(1)}55%{transform:translateX(-6px)}72%{transform:translateX(4px)}100%{transform:translateX(0)}}
@keyframes defeatScan{from{transform:translateY(-4px)}to{transform:translateY(4px)}}
@media(max-width:650px){.infected-defeat-card{padding:22px 12px 18px}.infected-defeat-headline{font-size:clamp(12px,4vw,18px)}.infected-defeat-glitch{font-size:clamp(30px,10vw,52px)}.infected-defeat-sub{font-size:clamp(17px,6vw,28px)}#infectedDefeatRetry{width:88%;min-width:0}}


/* ===== RED INFECTION 0.6.21 — CTA DISCRETO + PRIORIDADE FINAL ===== */
#coverGate .cover-gate-cta{
  bottom:max(8px,calc(env(safe-area-inset-bottom) + 5px))!important;
  width:auto!important;
  max-width:70%!important;
  gap:4px!important;
}
#coverGate #coverStartBtn.cover-mission-btn{
  display:inline-flex!important;
  width:auto!important;
  min-width:0!important;
  max-width:190px!important;
  min-height:0!important;
  height:auto!important;
  padding:6px 9px!important;
  margin:0!important;
  border-radius:7px!important;
  border-width:1px!important;
  font-size:8px!important;
  line-height:1.15!important;
  letter-spacing:.035em!important;
  font-weight:800!important;
  white-space:normal!important;
  box-shadow:0 3px 9px rgba(0,0,0,.42)!important;
  animation:none!important;
  transform:none!important;
}
#coverGate #coverStartBtn.cover-mission-btn:hover,
#coverGate #coverStartBtn.cover-mission-btn:focus,
#coverGate #coverStartBtn.cover-mission-btn:active{
  animation:none!important;
  transform:none!important;
  box-shadow:0 3px 9px rgba(0,0,0,.42)!important;
}
#coverGate .cover-gate-cta small{
  font-size:6px!important;
  opacity:.78;
}
@media(max-width:650px){
  #coverGate .cover-gate-cta{max-width:74%!important;bottom:max(7px,calc(env(safe-area-inset-bottom) + 4px))!important}
  #coverGate #coverStartBtn.cover-mission-btn{max-width:172px!important;padding:5px 8px!important;font-size:7.5px!important;border-radius:7px!important}
  #coverGate .cover-gate-cta small{font-size:5.5px!important}
}

/* ===== RED INFECTION 0.6.22 — CTA RESISTÊNCIA ULTRADISCRETO ===== */
#coverGate .cover-gate-cta{
  width:auto!important;
  max-width:none!important;
  gap:2px!important;
  bottom:max(6px,calc(env(safe-area-inset-bottom) + 3px))!important;
}
#coverGate #coverStartBtn.cover-mission-btn{
  display:inline-flex!important;
  width:auto!important;
  min-width:0!important;
  max-width:150px!important;
  min-height:0!important;
  height:auto!important;
  padding:4px 7px!important;
  margin:0!important;
  border-radius:6px!important;
  border:1px solid rgba(255,227,107,.58)!important;
  background:rgba(7,54,27,.82)!important;
  color:#fff!important;
  font-size:7px!important;
  line-height:1.12!important;
  letter-spacing:.025em!important;
  font-weight:800!important;
  white-space:normal!important;
  text-align:center!important;
  box-shadow:0 2px 6px rgba(0,0,0,.36)!important;
  animation:none!important;
  transition:none!important;
  transform:none!important;
}
#coverGate #coverStartBtn.cover-mission-btn:hover,
#coverGate #coverStartBtn.cover-mission-btn:focus,
#coverGate #coverStartBtn.cover-mission-btn:active{
  background:rgba(7,54,27,.88)!important;
  box-shadow:0 2px 6px rgba(0,0,0,.36)!important;
  animation:none!important;
  transform:none!important;
}
#coverGate .cover-gate-cta small{display:none!important}
@media(max-width:650px){
  #coverGate .cover-gate-cta{bottom:max(5px,calc(env(safe-area-inset-bottom) + 2px))!important}
  #coverGate #coverStartBtn.cover-mission-btn{
    max-width:138px!important;
    padding:3px 6px!important;
    font-size:6.5px!important;
    border-radius:5px!important;
  }
}

/* ===== RED INFECTION 0.6.23 — CTA RESISTÊNCIA MICRO / MOBILE ===== */
#coverGate #coverStartBtn.cover-mission-btn{
  width:auto!important;
  min-width:0!important;
  max-width:none!important;
  min-height:0!important;
  height:auto!important;
  padding:3px 6px!important;
  font-size:6px!important;
  line-height:1!important;
  letter-spacing:0!important;
  border-radius:5px!important;
  white-space:nowrap!important;
  box-shadow:0 1px 4px rgba(0,0,0,.32)!important;
}
@media(max-width:650px){
  #coverGate .cover-gate-cta{
    bottom:max(4px,calc(env(safe-area-inset-bottom) + 2px))!important;
    width:auto!important;
    max-width:none!important;
  }
  #coverGate #coverStartBtn.cover-mission-btn{
    width:auto!important;
    max-width:none!important;
    padding:2px 5px!important;
    font-size:5px!important;
    line-height:1!important;
    border-radius:4px!important;
    white-space:nowrap!important;
  }
}


/* ===== RED INFECTION 0.6.24 — CTA ESTÁVEL + MOBILE PERFORMANCE ===== */
#coverGate #coverStartBtn.cover-mission-btn{
  width:auto!important;
  min-width:clamp(150px,38vw,220px)!important;
  max-width:min(78vw,220px)!important;
  min-height:34px!important;
  padding:clamp(7px,1.5vw,10px) clamp(12px,3vw,18px)!important;
  font-size:clamp(10px,2.6vw,13px)!important;
  line-height:1.1!important;
  letter-spacing:.025em!important;
  border-radius:8px!important;
  white-space:nowrap!important;
  animation:none!important;
  transform:none!important;
}
@media(max-width:650px){
  #coverGate #coverStartBtn.cover-mission-btn{
    min-width:clamp(148px,52vw,190px)!important;
    max-width:72vw!important;
    min-height:32px!important;
    padding:7px 12px!important;
    font-size:clamp(9.5px,3.0vw,12px)!important;
  }
}
@media(max-width:390px){
  #coverGate #coverStartBtn.cover-mission-btn{
    min-width:145px!important;
    max-width:76vw!important;
    font-size:10px!important;
    padding:7px 10px!important;
  }
}

/* aparelhos fracos: menos efeitos CSS em elementos animados */
@media(max-width:430px){
  .local-infected,.defender,.special-infected{filter:none!important}
  .wave-banner,.city-toast,.story-message{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
}


/* ===== RED INFECTION 0.6.25 — APOIO A CADA 3 ESTADOS ===== */
.campaign-support-prompt{position:fixed;inset:0;z-index:120;display:none;place-items:center;padding:18px;background:rgba(4,6,8,.78);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.campaign-support-prompt.visible{display:grid}
.campaign-support-card{width:min(92vw,430px);padding:22px 20px 18px;border:1px solid rgba(255,218,79,.42);border-radius:18px;background:linear-gradient(180deg,rgba(11,23,28,.98),rgba(5,10,13,.99));box-shadow:0 20px 70px rgba(0,0,0,.72),0 0 32px rgba(255,206,61,.10);text-align:center;color:#fff}
.campaign-support-card small{display:block;margin-bottom:6px;font-size:10px;font-weight:900;letter-spacing:.16em;color:#ffd84a}
.campaign-support-card h2{margin:0;font-size:clamp(22px,5vw,31px);line-height:1.02;color:#fff;text-shadow:0 3px 16px rgba(0,0,0,.65)}
.campaign-support-card p{margin:10px auto 14px;max-width:340px;font-size:clamp(13px,3.5vw,16px);line-height:1.35;color:#dbe5e9}
.campaign-support-card button{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:10px 18px;border:1px solid #ffe078;border-radius:10px;background:linear-gradient(180deg,#1f6b3d,#124828);color:#fff8bd;font-size:12px;font-weight:950;letter-spacing:.06em;cursor:pointer;box-shadow:0 8px 22px rgba(0,0,0,.34)}
.campaign-support-card button:active{transform:translateY(1px)}
.campaign-support-card>span{display:block;margin-top:10px;font-size:10px;color:#94a6ad}
@media(max-width:650px){.campaign-support-prompt{padding:12px}.campaign-support-card{width:min(90vw,360px);padding:18px 15px 14px;border-radius:14px}.campaign-support-card h2{font-size:clamp(20px,6vw,25px)}.campaign-support-card p{font-size:13px}.campaign-support-card button{min-height:39px;padding:9px 15px;font-size:11px}}
\n\n/* ===== 0.6.27 — ESTABILIDADE MOBILE / COMBATE ===== */
.local-infected{z-index:7!important;min-width:44px;min-height:54px;-webkit-user-select:none;user-select:none}
.local-infected.rescued{opacity:1!important;filter:drop-shadow(0 0 14px rgba(65,225,105,.95)) saturate(1.25) brightness(1.12)!important;animation:rescuedFade 1.2s forwards!important}
.local-infected.rescued::after{content:"RECUPERADO";position:absolute;left:50%;top:-17px;transform:translateX(-50%);padding:2px 5px;border-radius:7px;background:rgba(14,104,49,.92);color:#fff7a8;font:900 6px/1 system-ui;letter-spacing:.04em;white-space:nowrap;pointer-events:none}
.mine-action-btn,.missile-action-btn{z-index:24!important;pointer-events:auto!important;-webkit-user-select:none;user-select:none}
@media(max-width:650px){
  .local-infected{min-width:52px!important;min-height:62px!important}
  .mine-action-btn,.missile-action-btn{touch-action:manipulation!important}
}


/* ==========================================================
   RED INFECTION 0.6.28 — INFILTRAÇÃO / AGENTE CONSISTENTE
   ========================================================== */
.special-agent{
  width:36px!important;
  height:48px!important;
  display:grid!important;
  place-items:center!important;
  justify-items:center!important;
}
.special-agent span{
  position:relative!important;
  display:block!important;
  width:34px!important;
  height:42px!important;
  border:0!important;
  border-radius:0!important;
  background:url('assets/sprites/soldier.png?v=0628') center/contain no-repeat!important;
  box-shadow:none!important;
  filter:drop-shadow(0 0 8px rgba(64,230,105,.65)) drop-shadow(0 4px 3px rgba(0,0,0,.55))!important;
}
.special-agent span::before,
.special-agent span::after{
  content:none!important;
  display:none!important;
}
.special-agent small{
  margin-top:-2px!important;
  padding:1px 4px!important;
  border-radius:999px!important;
  background:rgba(4,18,10,.78)!important;
  color:#ffe45c!important;
  font-size:6px!important;
  letter-spacing:.08em!important;
}
@media(max-width:650px){
  .special-agent{width:34px!important;height:46px!important}
  .special-agent span{width:32px!important;height:40px!important}
}


/* ===== RED INFECTION 0.6.33 — FIM DO CAPÍTULO / MAPA BLOQUEADO APÓS SP ===== */
.campaign-lock-overlay{position:absolute;inset:0;z-index:210;display:none;place-items:center;padding:16px;background:linear-gradient(180deg,rgba(2,5,7,.34),rgba(2,5,7,.78));backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.campaign-lock-overlay.visible{display:grid}
.campaign-lock-card{width:min(88%,420px);padding:24px 20px 19px;text-align:center;border-radius:18px;background:linear-gradient(180deg,rgba(12,19,24,.96),rgba(5,9,12,.97));border:1px solid rgba(255,218,79,.28);box-shadow:0 28px 90px rgba(0,0,0,.72),0 0 0 1px rgba(255,255,255,.035)}
.campaign-lock-icon{font-size:46px;line-height:1;margin-bottom:6px;filter:drop-shadow(0 0 12px rgba(255,207,70,.25))}
.campaign-lock-card>small{display:block;color:#f0c951;font-size:8px;font-weight:900;letter-spacing:.16em}
.campaign-lock-card h2{margin:7px 0 9px;color:#fff;font-size:clamp(24px,5.4vw,34px);line-height:.98;letter-spacing:.03em}
.campaign-lock-card p{margin:0 auto 14px;max-width:340px;color:#c0ccd1;font-size:12px;line-height:1.45}
.campaign-lock-card .primary-btn{width:100%;max-width:320px;margin:0 auto;padding:11px 14px;font-size:11px}
.campaign-lock-card .secondary-btn{width:auto;min-width:150px;margin:8px auto 0;padding:8px 13px;font-size:9px}
.campaign-lock-card>span{display:block;margin-top:10px;color:#83939a;font-size:8px;letter-spacing:.04em}
@media(max-width:650px){.campaign-lock-overlay{padding:10px}.campaign-lock-card{width:min(88vw,350px);padding:18px 14px 14px;border-radius:14px}.campaign-lock-icon{font-size:38px}.campaign-lock-card h2{font-size:clamp(22px,6vw,28px)}.campaign-lock-card p{font-size:11px}.campaign-lock-card .primary-btn{max-width:285px;min-height:40px;padding:9px 12px;font-size:10px}.campaign-lock-card .secondary-btn{min-width:132px;padding:7px 11px;font-size:8px}}

/* 0.6.33 modal Pix acima do bloqueio */
.support-dialog{z-index:320!important}
