*{margin:0;padding:0;box-sizing:border-box}button,.tower-button,.menu-btn,input[type=button],input[type=submit],[role=button],a.button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}::selection{background:#3cb4f040;color:#fff}::-moz-selection{background:#3cb4f040;color:#fff}.skip-link{position:absolute;left:10px;top:-44px;z-index:1200;padding:10px 14px;border-radius:8px;background:#12314a;color:#d8f4ff;border:1px solid rgba(98,176,226,.7);text-decoration:none;font-weight:700;transition:top .15s ease}.skip-link:focus-visible{top:10px}:focus-visible{outline:2px solid #7ed8ff;outline-offset:2px;box-shadow:0 0 0 2px #1e5a828c}.tower-button:focus-visible,.menu-btn:focus-visible,.modal-close:focus-visible,.modal-nav-btn:focus-visible,.setting-cycle-btn:focus-visible,.footer-link:focus-visible,[role=button]:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid #9ae6ff;outline-offset:3px;box-shadow:0 0 0 3px #20689273}.menu-btn:active,.tower-button:active,.modal-close:active,.upgrade-button:active,#sendWaveBtn:active,#fastForwardBtn:active,.setting-cycle-btn:active,.modal-nav-btn:active,#skipIntroBtn:active{transform:translateY(1px) scale(.985);filter:brightness(1.12)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}@media(max-width:768px)and (orientation:portrait){#orientationWarning{display:flex!important;flex-direction:column;justify-content:center;align-items:center}}body{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;background:#0a1018;display:flex;justify-content:center;align-items:flex-start;min-height:100vh;min-height:100dvh;color:#fff;overflow-x:hidden;overflow-y:auto;padding:10px 0;overscroll-behavior:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;touch-action:manipulation;padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right));padding-top:max(10px,env(safe-area-inset-top));padding-bottom:max(10px,env(safe-area-inset-bottom))}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#050a1480}::-webkit-scrollbar-thumb{background:#2878b44d;border-radius:4px}@media(hover:hover)and (pointer:fine){::-webkit-scrollbar-thumb:hover{background:#3296d266}}html{color-scheme:dark;scrollbar-width:thin;scrollbar-color:rgba(40,120,180,.3) rgba(5,10,20,.5)}#landingPage{position:fixed;top:0;left:0;width:100%;height:100%;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(ellipse 92% 72% at 50% 26%,#306ca05c,#0c1e3200 62%),linear-gradient(180deg,#040810,#0a1828 44%,#0e2438);padding:18px 14px;padding-bottom:max(12px,calc(env(safe-area-inset-bottom) + 12px));overflow-y:auto}#landingPage canvas{position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}.landing-content{position:relative;z-index:1;text-align:center;max-width:min(92vw,470px);margin:0 auto;padding:38px 34px 30px;background:linear-gradient(180deg,#10263e80,#08142257);border:1px solid rgba(125,205,255,.22);border-radius:22px;box-shadow:0 24px 70px #00000080,inset 0 1px #a0e0ff33,0 0 90px #2e76b629;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.endless-modifier-row{margin:8px auto 4px;display:flex;flex-direction:column;gap:6px;width:min(100%,320px)}.endless-modifier-row label{color:#8bbbd3;font-size:11px;font-weight:700;letter-spacing:.8px;text-transform:uppercase}.endless-modifier-row select{width:100%;padding:8px 10px;border-radius:8px;border:1px solid rgba(62,140,188,.45);background:#081a28d1;color:#d7efff;font-size:12px;font-weight:700}#endlessModifierHint,#challengeModeHint{color:#6f9db6;font-size:11px;line-height:1.4;min-height:30px}.game-logo{font-size:60px;font-weight:900;letter-spacing:7px;text-transform:uppercase;background:linear-gradient(180deg,#fff,#cdecff 32%,#7cc0ec,#3f86ba);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:6px;filter:drop-shadow(0 2px 12px rgba(86,196,255,.45)) drop-shadow(0 0 34px rgba(44,124,196,.32))}.game-subtitle{font-size:13px;color:#82c6e8;letter-spacing:6px;margin-bottom:30px;text-transform:uppercase;font-weight:600}.menu-btn{display:block;width:300px;margin:11px auto;padding:15px 20px;font-size:16px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:#dcf2ff;border:1px solid rgba(125,205,255,.34);border-radius:13px;background:linear-gradient(180deg,#204a729e,#0c2238cc);box-shadow:inset 0 1px #b0e4ff42,inset 0 -12px 26px #001c3866,0 6px 22px #00000057;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);cursor:pointer;transition:all .25s ease;position:relative;overflow:hidden;text-shadow:0 1px 2px rgba(0,18,38,.6)}.menu-btn:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(150,225,255,.55),transparent)}.menu-btn:after{content:"";position:absolute;inset:0;background:linear-gradient(115deg,transparent 30%,rgba(190,235,255,.1) 48%,transparent 60%);transform:translate(-120%);transition:transform .6s ease;pointer-events:none}@media(hover:hover)and (pointer:fine){.menu-btn:hover{background:linear-gradient(180deg,#30689ad1,#123250e6);border-color:#9be4ffb3;transform:translateY(-2px);box-shadow:inset 0 1px #c4eeff66,0 0 30px #54caff5c,0 12px 32px #007cb857;color:#fff}.menu-btn:hover:after{transform:translate(120%)}}#playBtn{border-color:#8cd8ff99;background:linear-gradient(180deg,#3076accc,#102e4ce6);box-shadow:inset 0 1px #c8f0ff6b,0 0 28px #56caff52,0 8px 28px #0074b06b;color:#f2fcff;font-size:18px;padding:17px 20px}#landingLeaderboard{position:absolute;right:max(20px,env(safe-area-inset-right));top:50%;transform:translateY(-50%);width:min(260px,28vw);padding:16px 14px;background:#06101ceb;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(56,128,170,.55);border-radius:12px;box-shadow:0 10px 30px #0006;z-index:3}#landingLeaderboardTitle{font-size:13px;font-weight:800;letter-spacing:1px;color:#8ed6f4;text-transform:uppercase;margin-bottom:10px;text-align:center}#landingLeaderboardList .score-entry{padding:8px 10px;font-size:13px;border-radius:6px;margin-bottom:3px}#landingLeaderboardList .score-entry:nth-child(1){background:#ffd7001f;border:1px solid rgba(255,215,0,.3)}#landingLeaderboardList .score-entry:nth-child(2){background:#c0c0c01a;border:1px solid rgba(192,192,192,.25)}#landingLeaderboardList .score-entry:nth-child(3){background:#cd7f321a;border:1px solid rgba(205,127,50,.25)}#creditsFooter{position:absolute;bottom:0;left:0;width:100%;text-align:center;z-index:1;padding:18px 20px;background:linear-gradient(0deg,rgba(5,10,18,.95) 0%,rgba(5,10,18,.6) 70%,transparent 100%)}#creditsFooter .footer-link{color:#60d0f0;text-decoration:underline;font-weight:700}@media(hover:hover)and (pointer:fine){#creditsFooter .footer-link:hover{color:#9feaff}}#installAppBtn{display:none;margin:8px auto 0;padding:6px 12px;border-radius:8px;border:1px solid rgba(70,150,200,.55);background:#0a1c2cd1;color:#bfe9ff;font-size:12px;font-weight:700;letter-spacing:.3px;cursor:pointer;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}@media(hover:hover)and (pointer:fine){#installAppBtn:hover{background:#10283ee6;border-color:#5fb9f0b3}#installAppLaterBtn:hover{background:#0c1e2ecc;border-color:#6eb9e173;color:#bfe9ff}}#updateStamp{position:absolute;right:18px;bottom:14px;z-index:2;color:#8fb5cc;font-size:13px;font-weight:600;letter-spacing:.4px;background:#040c1473;padding:6px 10px;border:1px solid rgba(70,120,150,.45);border-radius:6px}#assetWarmStatus{margin:12px auto 2px;min-height:18px;color:#8fc8e8;font-size:11px;font-weight:600;letter-spacing:.4px;text-align:center}#assetWarmMeter{width:min(280px,86vw);height:9px;margin:2px auto 8px;border:1px solid rgba(125,205,255,.4);border-radius:999px;background:#081624d1;box-shadow:inset 0 1px 3px #00000073,0 0 14px #2e76b640;overflow:hidden;display:none}#assetWarmFill{position:relative;height:100%;width:0%;background:linear-gradient(90deg,#2f8fc2,#57d8f2 55%,#bfe6ff);box-shadow:0 0 12px #78d2ff99;transition:width .18s ease;overflow:hidden}#assetWarmFill:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.45),transparent);transform:translate(-100%);animation:ftd-loadshine 1.4s ease-in-out infinite}@keyframes ftd-loadshine{to{transform:translate(100%)}}#introOverlay{position:fixed;inset:0;z-index:400;display:flex;align-items:center;justify-content:center;background:radial-gradient(ellipse at 50% 40%,#0c2038,#050c18,#020408)}#introCanvas{position:absolute;inset:0;width:100%;height:100%}#introTitle{position:relative;z-index:2;font-size:clamp(26px,6.5vw,72px);font-weight:900;letter-spacing:7px;text-transform:uppercase;color:#c8edff;text-shadow:0 0 30px rgba(70,190,255,.7),0 0 60px rgba(40,140,200,.3),0 4px 8px rgba(0,0,0,.5);opacity:0;transform:translateY(10px)}#skipIntroBtn{position:absolute;top:max(16px,env(safe-area-inset-top));right:max(16px,env(safe-area-inset-right));z-index:3;padding:9px 18px;border:1px solid rgba(125,205,255,.4);border-radius:10px;background:linear-gradient(180deg,#22547acc,#0e2840e0);color:#dcf2ff;font-weight:700;letter-spacing:.8px;cursor:pointer;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);box-shadow:inset 0 1px #aae1ff38;transition:all .2s;font-size:13px}@media(hover:hover)and (pointer:fine){#skipIntroBtn:hover{background:linear-gradient(180deg,#30689ae6,#123250f0);border-color:#9be4ffb3;box-shadow:inset 0 1px #c4eeff57,0 0 22px #54caff4d}}#settingsModal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:200;background:#000000b3;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);align-items:center;justify-content:center}#settingsModal.active{display:flex}.modal-box{background:linear-gradient(180deg,#10263ef0,#081422f2);border:1px solid rgba(125,205,255,.26);border-radius:18px;padding:30px;width:360px;text-align:center;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 24px 70px #0000008c,inset 0 1px #a0e0ff33,0 0 90px #2e76b62e;position:relative;overflow:hidden}.modal-box:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(150,225,255,.5),transparent)}.modal-box h2{color:#a6dcf7;margin-bottom:20px;font-size:24px;text-shadow:0 0 22px rgba(86,196,255,.45);letter-spacing:1px}.setting-row{display:flex;justify-content:space-between;align-items:center;margin:12px 0;color:#80a0b8;padding:6px 8px;border-radius:6px;background:#00142840;border:1px solid rgba(30,80,120,.15)}.setting-row input[type=range]{width:140px;accent-color:#40a0d0}.setting-row input[type=checkbox]{accent-color:#40a0d0;width:18px;height:18px}.setting-row select{width:150px;padding:6px 8px;background:#0c2234eb;border:1px solid rgba(42,96,128,.6);border-radius:8px;color:#d6f2ff}.setting-row .theme-preview{display:inline-flex;align-items:center;gap:8px}.setting-row .theme-swatch{width:18px;height:18px;border-radius:999px;border:1px solid rgba(210,240,255,.45);box-shadow:0 0 0 1px #0c1c2ccc inset}.setting-row .setting-cycle-btn{min-width:96px;padding:6px 10px;background:linear-gradient(180deg,#22547ad9,#0e2840e6);border:1px solid rgba(120,200,255,.4);border-radius:9px;color:#dcf2ff;cursor:pointer;font-weight:700;letter-spacing:.4px;transition:all .2s;box-shadow:inset 0 1px #aae1ff38}@media(hover:hover)and (pointer:fine){.setting-row .setting-cycle-btn:hover{background:#1a4560f2;border-color:#468cb4b3}}.controls-help{margin-top:14px;padding:10px;background:#04101e8f;border:1px solid rgba(40,96,132,.45);border-radius:8px;text-align:left}.controls-help-title{color:#9ad8f2;font-size:12px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;margin-bottom:6px}.controls-help-list{list-style:none;padding:0;margin:0;display:grid;gap:4px}.controls-help-list li{display:flex;justify-content:space-between;align-items:center;color:#9cc4da;font-size:12px;line-height:1.2}.controls-help-list kbd{display:inline-block;padding:2px 6px;border-radius:6px;border:1px solid rgba(80,150,190,.55);background:#0a1c2cd9;color:#d9f3ff;font-size:11px;font-weight:800;min-width:48px;text-align:center;letter-spacing:.2px}.mobile-settings .modal-box{width:min(94vw,420px);padding:22px}.mobile-settings .setting-row{flex-wrap:wrap;gap:8px;justify-content:center}.mobile-settings .setting-row select,.mobile-settings .setting-row input[type=range]{width:100%}.mobile-settings .controls-help-list li{gap:8px;align-items:flex-start}.modal-close{margin-top:20px;padding:11px 30px;background:linear-gradient(180deg,#22547ad9,#0e2840e6);border:1px solid rgba(120,200,255,.4);border-radius:10px;color:#dcf2ff;cursor:pointer;font-size:16px;font-weight:700;letter-spacing:1px;transition:all .25s;backdrop-filter:blur(4px);box-shadow:inset 0 1px #aae1ff3d;position:relative;overflow:hidden}.modal-close:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(150,225,255,.5),transparent)}@media(hover:hover)and (pointer:fine){.modal-close:hover{background:linear-gradient(180deg,#30689aeb,#123250f2);transform:translateY(-1px);border-color:#9be4ffb3;box-shadow:inset 0 1px #c4eeff5c,0 0 24px #54caff52}}.intro-slide{display:none;min-height:120px}.intro-slide.active{display:block;animation:slideFadeIn .3s ease}@keyframes slideFadeIn{0%{opacity:0;transform:translate(12px)}to{opacity:1;transform:translate(0)}}.modal-nav-btn{padding:6px 14px;border-radius:9px;border:1px solid rgba(120,200,255,.4);background:linear-gradient(180deg,#22547ad9,#0e2840e6);color:#dcf2ff;font-size:12px;font-weight:700;cursor:pointer;transition:all .2s;box-shadow:inset 0 1px #aae1ff33}@media(hover:hover)and (pointer:fine){.modal-nav-btn:hover{background:#143750e6;border-color:#50b4e6a6}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#scoresModal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:200;background:#000000b3;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);align-items:center;justify-content:center}#scoresModal.active{display:flex}.scores-list{text-align:left;margin:15px 0;max-height:250px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(60,160,220,.3) transparent}.scores-list::-webkit-scrollbar{width:6px}.scores-list::-webkit-scrollbar-track{background:#0014284d;border-radius:3px}.scores-list::-webkit-scrollbar-thumb{background:#3ca0dc4d;border-radius:3px}.score-entry{display:flex;justify-content:space-between;padding:8px 12px;border-bottom:1px solid rgba(26,48,64,.6);color:#80a0b8;transition:background .2s;border-radius:4px;gap:6px}.score-entry span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}@media(hover:hover)and (pointer:fine){.score-entry:hover{background:#1e50781f}}.score-entry:nth-child(1){color:gold;font-weight:700;text-shadow:0 0 10px rgba(255,215,0,.3)}.score-entry:nth-child(2){color:silver;text-shadow:0 0 8px rgba(192,192,192,.2)}.score-entry:nth-child(3){color:#cd7f32;text-shadow:0 0 8px rgba(205,127,50,.2)}.score-entry.compact{font-size:12px;padding:5px 8px;border-radius:6px}#gameContainer{display:none;position:relative;background:#060e18f2;border:2px solid rgba(30,100,140,.6);border-radius:14px;padding:15px;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);box-shadow:0 0 80px #0078b440,0 0 30px #003c6426,inset 0 0 50px #00000080;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}#gameTitle{text-align:center;font-size:26px;margin-bottom:10px;background:linear-gradient(90deg,#3890b8,#58d0f0,#3890b8);-webkit-background-clip:text;-webkit-text-fill-color:transparent;font-weight:900;letter-spacing:4px;text-transform:uppercase;filter:drop-shadow(0 0 8px rgba(60,180,230,.4))}#gameCanvas{display:block;border:2px solid rgba(20,80,112,.7);cursor:crosshair;border-radius:6px;box-shadow:inset 0 0 40px #000000b3,0 0 20px #00508233;touch-action:none}#battlefieldLayout{display:flex;gap:12px;align-items:flex-start;justify-content:center}#battlefieldMain{flex:1;min-width:0}#gameContainer.duel-enabled #battlefieldLayout{display:grid;width:100%;height:100%;gap:0;align-items:stretch;justify-content:stretch}#gameContainer.duel-enabled #battlefieldMain{flex:1;min-width:0}#opponentPane{display:none;width:320px;background:#081422f2;border:1px solid rgba(70,140,185,.55);border-radius:10px;padding:10px;box-shadow:0 0 24px #00508c33}#duelScoreBar{display:none;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;padding:10px 16px;background:linear-gradient(180deg,#081422fa,#06101cf2);border-bottom:2px solid rgba(40,110,150,.5);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}#gameContainer.duel-enabled #duelScoreBar{display:grid}.score-label{font-size:9px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:#6a9ab5}.score-name{font-size:12px;font-weight:600;color:#8ec8e0;letter-spacing:.5px;text-transform:uppercase}.score-elo{font-size:11px;color:#6a9ab5;font-weight:500}.score-value{font-size:22px;font-weight:900;color:#e8f8ff;text-shadow:0 0 12px rgba(100,200,255,.3);transition:transform .2s ease,color .2s ease,box-shadow .2s ease}.score-value.score-pulse{animation:scorePulse .2s ease-out}.score-value.leading{color:#50ff80;text-shadow:0 0 16px rgba(50,255,100,.4);box-shadow:0 2px 8px #40ff8066}#duelScoreDivider{font-size:18px;font-weight:900;color:#5a9ab5;letter-spacing:3px;text-shadow:0 0 10px rgba(80,160,210,.3);padding:2px 8px;border:1px solid rgba(80,160,210,.25);border-radius:6px;background:#14324666}@keyframes scorePulse{0%{transform:scale(1)}40%{transform:scale(1.18)}to{transform:scale(1)}}#duelScoreLocal{display:flex;flex-direction:column;align-items:flex-end;gap:2px}#duelScoreOpponent{display:flex;flex-direction:column;align-items:flex-start;gap:2px}#opponentStatsStrip{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:8px 10px;background:#06101ceb}.opp-stat{background:#14324b80;border-radius:6px;padding:4px 6px;text-align:center;border:1px solid rgba(60,130,180,.2);display:flex;align-items:center;justify-content:center;gap:4px;font-size:12px;font-weight:700;color:#9fd7ff;font-variant-numeric:tabular-nums}.opp-stat-icon{font-size:10px;color:#5a9ab5;margin-right:3px;font-weight:700}#gameContainer.duel-enabled #opponentPane{display:grid;grid-template-rows:auto auto minmax(0,1fr) auto auto;min-width:0;border-left:2px solid rgba(84,168,220,.55);border-radius:0;border-top:none;border-right:none;border-bottom:none;background:linear-gradient(180deg,#0a1624f7,#060e1afa);padding:0;box-shadow:inset 0 0 30px #00000073;position:relative;overflow:hidden}#gameContainer.duel-spectator #battlefieldMain{display:none}#gameContainer.duel-spectator #battlefieldLayout{grid-template-columns:1fr}#gameContainer.duel-spectator #opponentPane{width:100%;border-left:none}#opponentCanvas{display:block;width:100%;height:auto;aspect-ratio:5/3;max-height:100%;min-height:0;justify-self:stretch;align-self:center;flex:1;border-top:2px solid rgba(98,176,226,.6);border-bottom:2px solid rgba(98,176,226,.6);background-image:linear-gradient(180deg,#142f4a,#0f243b 52%,#0a182b),repeating-linear-gradient(0deg,rgba(92,154,204,.12) 0 1px,transparent 1px 18px),repeating-linear-gradient(90deg,rgba(92,154,204,.12) 0 1px,transparent 1px 18px);image-rendering:auto;box-shadow:inset 0 0 20px #00285080}#gameContainer.duel-enabled #opponentPane:after{content:"";position:absolute;left:0;right:0;top:-35%;height:45%;background:linear-gradient(180deg,#78c8ff00,#78c8ff1a 55%,#78c8ff00);pointer-events:none;z-index:2;animation:oppSweep 4.2s linear infinite}@keyframes oppSweep{0%{transform:translateY(0)}to{transform:translateY(280%)}}#opponentPane.danger{box-shadow:inset 0 0 30px #ff282826}#opponentPane.danger #opponentCanvas{border-color:#ff505080}@keyframes countdownPulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.3);opacity:.8}to{transform:scale(1);opacity:0}}#duelCountdownOverlay.active{display:flex;animation:countdownPulse 1s ease-out}#opponentPane.stale #opponentCanvas{filter:grayscale(.6) brightness(.7);transition:filter .5s}#opponentPane.stale:before{content:"Connection Lost";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:6;color:#ff6060;font-size:14px;font-weight:700;text-shadow:0 0 10px rgba(255,60,60,.5);pointer-events:none}#opponentStatus{margin:8px;font-size:11px;color:#9cc8df;text-align:center;letter-spacing:.3px}#duelChatFeed{position:absolute;left:10px;right:10px;bottom:54px;display:flex;flex-direction:column;gap:6px;pointer-events:none;z-index:4}.duel-chat-bubble{align-self:flex-start;max-width:80%;padding:6px 10px;border-radius:999px;background:#081828eb;border:1px solid rgba(80,150,200,.45);color:#d8efff;font-size:11px;font-weight:700;opacity:0;transform:translateY(6px);transition:opacity .25s ease,transform .25s ease}.duel-chat-bubble.remote{align-self:flex-start}.duel-chat-bubble.local{align-self:flex-end;background:#12344af5}.duel-chat-bubble.visible{opacity:1;transform:translateY(0)}#duelChatBar{display:none;margin:0 8px 8px;gap:6px;flex-wrap:wrap;justify-content:center}#duelChatBar button{padding:6px 10px;border-radius:999px;border:1px solid rgba(70,140,185,.5);background:#0a1828eb;color:#d6efff;font-size:11px;font-weight:700;cursor:pointer}@media(hover:hover)and (pointer:fine){#duelChatBar button:hover{filter:brightness(1.12)}}#duelResultPanel{display:none;margin:8px;padding:12px;border:1px solid rgba(90,160,205,.4);background:#0a1828eb;border-radius:10px;box-shadow:0 4px 24px #00285066}#duelResultPanel.visible{display:block;animation:resultSlideIn .4s ease-out}@keyframes resultSlideIn{0%{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}#duelCollapseOpponentBtn{display:none;align-self:end;margin:8px 8px 0 auto;padding:6px 10px;border-radius:8px;border:1px solid rgba(80,150,200,.55);background:#0a1c2cd1;color:#bfe9ff;font-size:12px;font-weight:700;cursor:pointer;z-index:4}@media(hover:hover)and (pointer:fine){#duelCollapseOpponentBtn:hover{filter:brightness(1.08)}}#gameContainer.duel-opponent-collapsed #opponentCanvas,#gameContainer.duel-opponent-collapsed #opponentStatus,#gameContainer.duel-opponent-collapsed #duelResultPanel,#gameContainer.duel-opponent-collapsed #duelChatBar,#gameContainer.duel-opponent-collapsed #duelChatFeed,#gameContainer.duel-opponent-collapsed #duelCountdownOverlay,#gameContainer.duel-opponent-collapsed #duelConnectionDot,#gameContainer.duel-opponent-collapsed #opponentWaveOverlay{display:none!important}#gameContainer.duel-opponent-collapsed #opponentPane{max-height:56px;overflow:hidden}#duelResultTitle{font-size:18px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;text-align:center;color:#9dd8ff;margin-bottom:8px}#duelResultStats{margin-top:8px;font-size:12px;color:#b9d6ea;line-height:1.5}#duelResultStats strong{color:#d8ecff}#duelResultActions{margin-top:10px;display:flex;justify-content:center;gap:10px;flex-wrap:wrap}#duelRematchBtn{background:linear-gradient(180deg,#3a78a5,#1f496b);border:1px solid rgba(125,190,232,.45);color:#e4f4ff;border-radius:8px;padding:8px 16px;cursor:pointer;font-weight:700;font-size:13px;letter-spacing:.5px;transition:filter .15s,transform .15s}@media(hover:hover)and (pointer:fine){#duelRematchBtn:hover{filter:brightness(1.15);transform:scale(1.03)}}#duelRematchBtn:active{transform:scale(.97)}#duelResultTitle.victory{color:#50ff80;text-shadow:0 0 20px rgba(50,255,100,.4)}#duelResultTitle.defeat{color:#ff6060;text-shadow:0 0 20px rgba(255,60,60,.4)}#duelResultTitle.draw{color:gold;text-shadow:0 0 20px rgba(255,215,0,.4)}#duelResultElo{text-align:center;font-size:20px;font-weight:800;margin:10px 0;color:#a8d8ff;letter-spacing:1px}#duelResultElo.positive{color:#50ff80}#duelResultElo.negative{color:#ff6060}#duelReturnBtn{padding:8px 16px;border-radius:8px;font-weight:700;font-size:13px;cursor:pointer;background:#14283cd9;border:1px solid rgba(60,120,160,.4);color:#a0c0d8;transition:filter .15s,transform .15s}@media(hover:hover)and (pointer:fine){#duelReturnBtn:hover{filter:brightness(1.15);transform:scale(1.03)}}#duelReturnBtn:active{transform:scale(.97)}.duel-stats-table{display:grid;grid-template-columns:1fr auto 1fr;gap:4px 8px;margin-top:6px;text-align:center}.duel-stats-table .stat-label{color:#6a9ab5;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.duel-stats-table .stat-you{color:#50d0ff;font-weight:700}.duel-stats-table .stat-opp{color:#ff9060;font-weight:700}.duel-stats-table .stat-winner{color:#50ff80}#gameContainer.duel-enabled #battlefieldLayout{display:grid;grid-template-columns:3fr minmax(300px,2fr);grid-template-rows:1fr;gap:0;width:100%;height:100%}#gameInfo{display:flex;justify-content:space-between;margin:10px 0;font-size:15px;font-weight:700;gap:8px}.info-item{padding:8px 14px;background:linear-gradient(180deg,#142e48b3,#081626d1);border:1px solid rgba(120,200,255,.28);border-radius:10px;flex:1;text-align:center;color:#bfe6ff;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:inset 0 1px #a0dcff2e,0 3px 12px #00000059}#gameInfo .info-item span{color:#7fe0ff;font-weight:900;text-shadow:0 0 8px rgba(80,200,255,.4)}#timer{font-size:38px;text-align:center;margin:10px 0;color:#58d0f0;text-shadow:0 0 20px rgba(50,170,220,.5),0 0 40px rgba(30,120,180,.2);font-weight:900;letter-spacing:2px}#wavePreview{display:none;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;min-height:24px;margin:2px 0 8px;overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}.wave-preview-badge{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;scroll-snap-align:center}.wave-preview-dot{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-weight:900;color:#f5fbff;border:1px solid rgba(230,245,255,.6);box-shadow:0 0 8px #143c5a59,inset 0 0 6px #0000003d}.wave-preview-modifier-wrap{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:center}.wave-preview-modifier{display:inline-flex;align-items:center;padding:3px 8px;border-radius:999px;background:#07111cd9;border:1px solid rgba(70,140,185,.35);font-size:11px;font-weight:700;color:#b7ddf2;letter-spacing:.2px}.wave-preview-modifier.tone-good{border-color:#58cd8773;color:#9ff0c0}.wave-preview-modifier.tone-danger{border-color:#ff8c6e73;color:#ffd1b8}#waveMutationBanner{display:none;align-items:center;justify-content:center;min-height:34px;margin:0 0 8px}.wave-mutation-chip{display:inline-flex;align-items:center;gap:10px;padding:8px 12px;border-radius:10px;background:#081420eb;border:1px solid color-mix(in srgb,var(--mutation-accent) 52%,rgba(255,255,255,.15));box-shadow:0 6px 18px #00000047;max-width:min(560px,96%)}.wave-mutation-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:999px;background:color-mix(in srgb,var(--mutation-accent) 18%,rgba(8,16,24,.95));border:1px solid color-mix(in srgb,var(--mutation-accent) 55%,rgba(255,255,255,.12));color:var(--mutation-accent);font-size:12px;font-weight:900;letter-spacing:.5px}.wave-mutation-copy{display:flex;flex-direction:column;align-items:flex-start;gap:2px}.wave-mutation-name{color:var(--mutation-accent);font-size:12px;font-weight:800;letter-spacing:.5px;text-transform:uppercase}.wave-mutation-desc{color:#9cc3d9;font-size:11px;line-height:1.25}.wave-mutation-chip.severity-warning{background:#081422e6}.wave-mutation-chip.severity-danger{background:#18140ceb}.wave-mutation-chip.severity-extreme{background:#180c0ef0}#waveTelemetry{display:none;text-align:center;margin:4px 0 6px;color:#9fd9ff;font-size:13px;font-weight:700;letter-spacing:.6px;text-shadow:0 0 14px rgba(70,170,230,.35)}#bossHpWrap{display:none;margin:6px auto 8px;width:min(760px,95%);padding:6px 8px;background:#26080cc7;border:1px solid rgba(210,70,80,.55);border-radius:8px;box-shadow:0 0 20px #b41e2838}#bossHpLabel{text-align:center;font-size:12px;font-weight:800;letter-spacing:.5px;color:#ffd0d0;margin-bottom:4px;text-transform:uppercase}#bossHpTrack{height:12px;background:#140206c7;border:1px solid rgba(255,160,160,.25);border-radius:999px;overflow:hidden}#bossHpFill{height:100%;width:100%;background:linear-gradient(90deg,#ff3030,#ff6a50,#ffb36a);box-shadow:0 0 14px #ff463259;transition:width .12s linear}#towerShop{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;justify-content:center}.tower-button{padding:12px 16px;background:linear-gradient(180deg,#1e486e99,#0c2034d1);border:1px solid rgba(120,200,255,.32);border-radius:11px;color:#d2ecff;cursor:pointer;font-weight:700;transition:all .25s ease;min-width:155px;font-size:14px;box-shadow:inset 0 1px #aae1ff33,0 4px 16px #0006;position:relative;overflow:hidden;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);text-shadow:0 1px 2px rgba(0,18,38,.6)}.tower-button:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(150,225,255,.5),transparent)}@media(hover:hover)and (pointer:fine){.tower-button:hover{background:linear-gradient(180deg,#2c6292cc,#102c48e6);transform:translateY(-2px);border-color:#96e1ffa6;box-shadow:inset 0 1px #beebff52,0 0 24px #50c8ff52,0 8px 26px #006eaa52}}.tower-button.selected{background:linear-gradient(180deg,#286ea0e6,#123454eb);border-color:#78dcffd9;color:#eaf8ff;box-shadow:0 0 26px #50c8ff80,inset 0 0 16px #50c8ff2e}.tower-button.locked{opacity:.45;filter:saturate(.6)}.tower-button:disabled{opacity:.3;cursor:not-allowed}body.high-contrast .tower-button{border-width:3px;color:#fff;background:#040a10fa}body.high-contrast .tower-button.selected{border-color:#fff;box-shadow:0 0 0 2px #ffffff73,0 0 18px #78c8ff47}body.high-contrast #gameInfo .info-item{color:#fff;background:#02060cfa;border-color:#ffffffc7}body.high-contrast #waveTelemetry,body.high-contrast #bossHpLabel,body.high-contrast #opponentStatus{color:#fff}body.high-contrast #soloMinimap{border-color:#ffffffd9;background:#02080ef0}#towerTooltip{position:fixed;display:none;z-index:1200;min-width:220px;max-width:260px;padding:10px 12px;border-radius:10px;border:1px solid rgba(70,150,195,.55);background:#081624f5;box-shadow:0 10px 30px #00000073,0 0 0 1px #78d2ff0f inset;color:#cbe9f8;pointer-events:none;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.tower-tooltip-title{font-size:13px;font-weight:800;letter-spacing:.6px;color:#9fe4ff;margin-bottom:4px}.tower-tooltip-lore{font-size:10.5px;font-style:italic;line-height:1.45;color:#7fa8c4;margin-bottom:8px}.tower-tooltip-row{display:flex;justify-content:space-between;gap:12px;font-size:12px;line-height:1.5;color:#8eb7cf}.tower-tooltip-row strong{color:#ecfbff;font-weight:700}.tower-tooltip-special{margin-top:8px;padding-top:8px;border-top:1px solid rgba(60,120,150,.28);font-size:11px;line-height:1.5;color:#a8d0e6}.upgrade-popup{position:absolute;z-index:50;background:linear-gradient(180deg,#122840eb,#081422f0);border:1px solid rgba(125,205,255,.3);border-radius:14px;padding:14px;box-shadow:0 16px 44px #0009,inset 0 1px #a0e0ff2e,0 0 28px #2e76b633;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);min-width:190px;max-width:280px;pointer-events:auto;transition:opacity .15s ease}#upgradePanel{padding:0;background:transparent;border:none;border-radius:0;min-height:auto;backdrop-filter:none;-webkit-backdrop-filter:none}.upgrade-button{padding:8px 14px;margin:4px;background:linear-gradient(180deg,#22547ad9,#0e2840e6);border:1px solid rgba(120,200,255,.4);border-radius:9px;color:#dcf2ff;cursor:pointer;font-weight:700;font-size:13px;transition:all .25s ease;backdrop-filter:blur(4px);box-shadow:inset 0 1px #aae1ff38}@media(hover:hover)and (pointer:fine){.upgrade-button:hover{background:#1e5a82e6;transform:translateY(-1px);box-shadow:0 4px 12px #00508c4d}}.upgrade-button:disabled{opacity:.3;cursor:not-allowed}.sell-button{background:#50141ed9;border-color:#8c323c80;color:#ffa0a0}@media(hover:hover)and (pointer:fine){.sell-button:hover{background:#6e1e28e6;box-shadow:0 4px 12px #8c1e1e4d}}.repair-button{background:linear-gradient(135deg,#1a5a30,#0a3a1a);border-color:#2a8040;color:#a0ffa0}@media(hover:hover)and (pointer:fine){.repair-button:hover{background:linear-gradient(135deg,#2a7040,#1a5a30)}}.small-text{font-size:11px;color:#6090a8;display:block;margin-top:3px}.tower-icon{font-size:18px;display:block;margin-bottom:2px;color:#4090b0}#restartBtn{display:none;margin:8px auto 0;padding:10px 30px;font-size:16px;font-weight:700;background:linear-gradient(135deg,#1a5a80e6,#104060e6);border:2px solid rgba(64,160,208,.6);border-radius:10px;color:#c0e8ff;cursor:pointer;box-shadow:0 0 24px #288cc859,0 4px 16px #0000004d;transition:all .3s;backdrop-filter:blur(4px);position:relative;overflow:hidden;letter-spacing:1px}#restartBtn:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(80,200,240,.35),transparent)}@media(hover:hover)and (pointer:fine){#restartBtn:hover{transform:translateY(-2px);box-shadow:0 0 32px #288cc873,0 6px 24px #0006}}#menuBtn{display:none;margin:4px auto 0;padding:8px 24px;font-size:14px;background:#12354ad9;border:1px solid rgba(42,96,128,.5);border-radius:8px;color:#80c0e0;cursor:pointer;transition:all .25s;backdrop-filter:blur(4px)}@media(hover:hover)and (pointer:fine){#menuBtn:hover{background:#183c54e6;transform:translateY(-1px)}}#gameOverStats{display:none;margin:10px auto 6px;max-width:760px;max-height:min(54vh,520px);overflow:auto;padding:10px 12px;background:#06101ce6;border:1px solid rgba(132,104,38,.55);border-radius:10px;box-shadow:0 6px 20px #00000059,inset 0 0 18px #8462181f}#gameOverStats h3{margin-bottom:8px;color:#8fd0f0;font-size:16px;letter-spacing:.6px;text-transform:uppercase;text-align:center}#gameOverCinematic{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;opacity:0;transform:scale(1.3);background:radial-gradient(circle at center,#0a10183d,#04080ec7);color:#f05c66;font-size:clamp(30px,5vw,54px);font-weight:900;letter-spacing:2px;text-shadow:0 0 28px rgba(255,70,90,.35);transition:opacity .35s ease,transform .45s ease;z-index:35}#gameOverCinematic.active{opacity:1;transform:scale(1)}.go-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:6px;margin-bottom:8px}.go-stat-item{background:#0a1c2cbf;border:1px solid rgba(30,90,130,.45);border-radius:8px;padding:6px 8px;text-align:center}.go-stat-item span{display:block;color:#7fa8bf;font-size:11px;letter-spacing:.3px}.go-stat-item strong{display:block;color:#d8f2ff;font-size:16px;line-height:1.2;margin-top:2px}.go-stat-kills-wrap{background:#0a1622a6;border:1px solid rgba(28,78,112,.45);border-radius:8px;padding:6px 8px}.go-stat-kills-title{color:#88bed8;font-size:11px;font-weight:700;letter-spacing:.35px;text-transform:uppercase;margin-bottom:6px}.go-stat-kills{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:4px}.go-stat-kill{display:flex;justify-content:space-between;align-items:center;padding:3px 6px;background:#060e18a6;border:1px solid rgba(26,64,92,.45);border-radius:6px;font-size:11px;color:#9fc4d8}.go-stat-kill strong{color:#d8f2ff;font-size:12px}.go-stat-empty{color:#7898ac;font-size:11px;padding:4px 2px}.go-stat-achievements{margin-top:8px;background:#0a1622a6;border:1px solid rgba(86,72,28,.45);border-radius:8px;padding:6px 8px}.go-achievement-row{display:flex;flex-wrap:wrap;gap:6px}.go-achievement-chip{display:inline-block;padding:3px 7px;border-radius:999px;background:#184e6eb8;border:1px solid rgba(80,150,190,.45);color:#d9f4ff;font-size:11px;font-weight:700;letter-spacing:.2px}@media(max-width:768px){#gameOverStats{max-width:calc(100vw - 16px);max-height:48vh;padding:10px}.go-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.go-stat-kills{grid-template-columns:1fr}}#achievementToasts{position:absolute;top:84px;right:10px;z-index:95;display:flex;flex-direction:column;gap:8px;pointer-events:none;max-width:min(280px,42vw)}.achievement-toast{opacity:0;transform:translate(14px);transition:opacity .2s ease,transform .2s ease;background:#06121eeb;border:1px solid rgba(70,170,220,.52);border-radius:10px;padding:9px 10px;box-shadow:0 8px 22px #00000073,0 0 14px #2882b442}.achievement-toast.visible{opacity:1;transform:translate(0)}.achievement-toast-title{font-size:10px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:#84c8ea}.achievement-toast-name{font-size:14px;font-weight:800;letter-spacing:.2px;color:#e8f8ff;margin-top:2px}.achievement-toast-desc{font-size:11px;color:#9ec6d8;margin-top:2px;line-height:1.3}#soundToggle{position:fixed;bottom:10px;right:10px;z-index:50;padding:6px 12px;background:#0a141ed9;border:1px solid rgba(26,80,112,.5);border-radius:6px;color:#80a0b8;cursor:pointer;font-size:12px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:all .2s}@media(hover:hover)and (pointer:fine){#soundToggle:hover{background:#101e2ee6;border-color:#28648c99}}#fpsCounter{display:none;position:absolute;top:12px;right:12px;z-index:85;padding:5px 8px;border-radius:8px;background:#06101ed1;border:1px solid rgba(70,140,190,.58);color:#a9e5ff;font-size:12px;font-weight:800;letter-spacing:.4px;box-shadow:0 4px 12px #00000059}#renderer3dBadge{position:absolute;top:10px;right:10px;padding:4px 12px;background:#143c64d9;border:1px solid rgba(100,180,240,.5);border-radius:6px;color:#a8e0ff;font-size:11px;font-weight:700;letter-spacing:1px;z-index:50;pointer-events:none;opacity:0;transform:translateY(-4px);transition:opacity .25s ease,transform .25s ease;overflow:hidden}#renderer3dBadge.visible{opacity:1;transform:translateY(0)}#renderer3dBadge:after{content:"";position:absolute;top:0;left:0;width:36px;height:100%;background:linear-gradient(90deg,transparent,rgba(220,245,255,.45),transparent);transform:translate(-130%)}#renderer3dBadge.visible:after{animation:rendererBadgeShimmer 1.3s ease-out 2}@keyframes rendererBadgeShimmer{0%{transform:translate(-130%)}to{transform:translate(320%)}}#waveActionRow{display:flex;justify-content:center;align-items:center;gap:8px;margin:4px auto}#sendWaveBtn{display:none;margin:0;padding:9px 24px;font-size:14px;font-weight:700;background:linear-gradient(180deg,#d6963cf0,#965618f5);border:1px solid rgba(255,210,140,.7);border-radius:10px;color:#fff6e6;cursor:pointer;transition:all .3s;letter-spacing:1px;text-transform:uppercase;box-shadow:inset 0 1px #ffe8b866,0 0 18px #ffb45a59}@media(hover:hover)and (pointer:fine){#sendWaveBtn:hover{background:linear-gradient(180deg,#e8a84af7,#a8621efa);transform:translateY(-1px);box-shadow:inset 0 1px #ffeec880,0 0 26px #ffbe6473}}.send-wave-pulse{animation:sendWaveGlow 1.5s ease-in-out infinite}@keyframes sendWaveGlow{0%,to{box-shadow:0 0 15px #c8641e4d}50%{box-shadow:0 0 24px #ffaa508c}}#fastForwardBtn{display:none;margin:0;padding:8px 16px;font-size:13px;font-weight:800;background:linear-gradient(135deg,#123a4f,#0c2432);border:2px solid rgba(90,180,220,.5);border-radius:8px;color:#bdefff;cursor:pointer;transition:all .25s;letter-spacing:1px;text-transform:uppercase;box-shadow:0 0 14px #2878b438}@media(hover:hover)and (pointer:fine){#fastForwardBtn:hover{background:linear-gradient(135deg,#184a63,#103246);transform:translateY(-1px)}}#fastForwardBtn.active{background:linear-gradient(135deg,#1b5f7f,#14455e);border-color:#78dcffbf;box-shadow:0 0 18px #46aadc59}#gameActions{display:flex;gap:8px;justify-content:center;margin-top:8px}#restartGameBtn{padding:8px 20px;font-size:13px;font-weight:700;background:linear-gradient(135deg,#1a4a30,#0a3018);border:1px solid #2a8040;border-radius:6px;color:#a0ffa0;cursor:pointer;transition:all .3s}@media(hover:hover)and (pointer:fine){#restartGameBtn:hover{background:linear-gradient(135deg,#2a5a40,#1a4028);transform:translateY(-1px)}}#quitToMenuBtn{padding:8px 20px;font-size:13px;font-weight:700;background:linear-gradient(135deg,#4a2030,#3a1020);border:1px solid #8a3040;border-radius:6px;color:#ffa0a0;cursor:pointer;transition:all .3s}@media(hover:hover)and (pointer:fine){#quitToMenuBtn:hover{background:linear-gradient(135deg,#5a2838,#4a1828);transform:translateY(-1px)}}#pauseBtn{padding:8px 14px;font-size:16px;font-weight:700;background:linear-gradient(135deg,#2a3040,#1a2030);border:1px solid #4a6080;border-radius:6px;color:#a0c0e0;cursor:pointer;transition:all .3s;line-height:1}@media(hover:hover)and (pointer:fine){#pauseBtn:hover{background:linear-gradient(135deg,#3a4050,#2a3040);transform:translateY(-1px)}}#pauseOverlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:90;background:#050a14c7;display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}.pause-content{text-align:center;pointer-events:none}.pause-content h2{font-size:48px;color:#50d0f0;letter-spacing:8px;text-shadow:0 0 30px rgba(50,180,240,.35);margin-bottom:12px}.pause-content p{font-size:16px;color:#6090b0;letter-spacing:2px}#tutorialGuide{display:none;position:absolute;top:56px;left:50%;transform:translate(-50%);z-index:85;max-width:min(92vw,640px);width:max-content;padding:10px 14px;background:linear-gradient(180deg,#10263eeb,#081422eb);border:1px solid rgba(125,205,255,.4);border-radius:12px;box-shadow:0 12px 30px #00000080,inset 0 1px #a0e0ff2e,0 0 22px #2e76b638;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);text-align:center}#tutorialGuideStep{font-size:11px;font-weight:800;letter-spacing:1.1px;text-transform:uppercase;color:#8fc8e4;margin-bottom:4px}#tutorialGuideText{font-size:14px;font-weight:700;letter-spacing:.3px;color:#d2f2ff}#tutorialSkipBtn{display:none;margin-top:8px;padding:6px 10px;background:#3c1818bf;border:1px solid rgba(180,80,90,.55);border-radius:7px;color:#ffd7db;font-size:11px;font-weight:700;cursor:pointer}@media(hover:hover)and (pointer:fine){#tutorialSkipBtn:hover{background:#541e22d9}}#tutorialPlacementOverlay{display:none;position:absolute;z-index:70;pointer-events:none;grid-template-columns:repeat(25,1fr);grid-template-rows:repeat(15,1fr);gap:0}.tutorial-cell{opacity:0}.tutorial-cell.valid{background:#56d6ff2b;box-shadow:inset 0 0 0 1px #a0f0ff5c;animation:tutorialCellPulse 1.2s ease-in-out infinite}.tutorial-target{animation:tutorialPulse 1.25s ease-in-out infinite!important;box-shadow:0 0 0 2px #6edcffbf,0 0 16px #3caadc73!important}.tutorial-canvas-focus{animation:tutorialPulse 1.25s ease-in-out infinite!important;border-color:#6edcffe6!important;box-shadow:inset 0 0 40px #000000b3,0 0 22px #50bef05c!important}@keyframes tutorialPulse{0%{transform:translateY(0);filter:brightness(1)}50%{transform:translateY(-1px);filter:brightness(1.2)}to{transform:translateY(0);filter:brightness(1)}}@keyframes tutorialCellPulse{0%{opacity:.16}50%{opacity:.32}to{opacity:.16}}.overlay-modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:200;background:#000000b3;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);align-items:center;justify-content:center;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.overlay-modal.active{display:flex}#shortcutOverlayModal .modal-box{width:min(520px,94vw)}#shortcutGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-top:10px;text-align:left}.shortcut-card{padding:10px;border-radius:10px;border:1px solid rgba(50,110,150,.4);background:#081422b8}.shortcut-card strong{display:block;color:#c7eeff;font-size:12px;margin-bottom:4px}.shortcut-card span{display:block;color:#8fb8cf;font-size:12px;line-height:1.35}#screenReaderAnnouncements{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}@media(max-width:1080px){#gameContainer{padding:10px;max-width:100vw;overflow-x:auto}#gameTitle{font-size:22px;margin-bottom:6px}#gameInfo{font-size:13px;gap:4px;flex-wrap:wrap}.info-item{padding:5px 8px;font-size:12px}#timer{font-size:30px;margin:6px 0}#wavePreview{gap:5px;min-height:20px;margin:1px 0 6px}.wave-preview-dot{width:18px;height:18px;font-size:9px}.wave-preview-modifier{font-size:10px;padding:3px 6px}#waveMutationBanner{min-height:30px;margin:0 0 6px}.wave-mutation-chip{padding:7px 10px;gap:8px}.wave-mutation-icon{width:24px;height:24px;font-size:11px}.wave-mutation-name{font-size:11px}.wave-mutation-desc{font-size:10px}.tower-button{min-width:120px;padding:8px 10px;font-size:12px}.small-text{font-size:10px}.tower-icon{font-size:14px}#upgradePanel{padding:8px;font-size:12px}.upgrade-button{padding:6px 10px;font-size:12px}}@media(hover:none)and (pointer:coarse),(max-width:768px){body{align-items:stretch;padding:0;overflow:hidden;height:100vh;height:100dvh;width:100vw}#landingPage{justify-content:flex-start;padding:0;gap:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.landing-content{margin:0 auto;padding:max(env(safe-area-inset-top),12px) 10px 4px;flex-shrink:0}.game-logo{font-size:clamp(20px,6vmin,34px);letter-spacing:2px;margin-bottom:2px;white-space:nowrap}.game-subtitle{font-size:clamp(8px,2vmin,12px);letter-spacing:2px;margin-bottom:clamp(8px,3vmin,16px)}.menu-btn{width:clamp(180px,50vw,260px);min-height:44px;padding:clamp(10px,2.5vmin,14px);font-size:clamp(13px,3vmin,16px);margin:clamp(4px,1.2vmin,8px) auto;border-width:1.5px}#advancedModifiers summary{font-size:12px!important;padding:8px 0!important}#landingLeaderboard{position:static;transform:none;width:min(320px,90vw);margin:8px auto 4px;padding:10px;max-height:30vh;overflow-y:auto}#landingLeaderboardTitle{font-size:11px;margin-bottom:6px}#landingLeaderboardList .score-entry{font-size:11px;padding:6px 8px}#landingLeaderboardList .score-entry.compact{font-size:10px;padding:4px 6px}#assetWarmStatus{font-size:10px;min-height:14px;margin:2px auto 0}#assetWarmMeter{height:6px;margin:2px auto 6px}#creditsFooter{position:relative;padding:8px 10px max(12px,env(safe-area-inset-bottom));background:linear-gradient(0deg,rgba(5,10,18,.97) 0%,rgba(5,10,18,.8) 60%,transparent 100%)}#creditsFooter p{font-size:clamp(8px,1.8vmin,12px);line-height:1.4}#creditsFooter span{font-size:clamp(9px,2vmin,14px)}#updateStamp{position:fixed;right:4px;top:max(2px,env(safe-area-inset-top));bottom:auto;font-size:9px;padding:2px 5px}.modal-box{width:min(92vw,360px)!important;min-width:280px;max-width:min(360px,calc(100vw - 24px));padding:14px}#gameContainer{padding:0;border-radius:0;border:none;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);max-width:100vw;width:100vw;height:100vh;height:100dvh;overflow:hidden;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:0;align-items:stretch;box-shadow:none;position:relative;background:#0a1018}#gameTitle{display:none}#achievementToasts{top:62px;right:6px;max-width:58vw;gap:6px}.achievement-toast{padding:7px 8px}.achievement-toast-name{font-size:12px}.achievement-toast-desc{font-size:10px}#gameInfo{font-size:11px;gap:3px;margin:0;padding:2px 4px;width:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(55px,1fr));align-items:center;background:#040c16eb;border-bottom:1px solid rgba(30,80,120,.35)}.info-item{padding:3px 6px;font-size:11px;border-radius:3px;border-width:1px;min-width:0;text-align:center;background:#06121ed9;border:1px solid rgba(40,100,140,.4)}#timer{position:static;font-size:16px;font-weight:800;color:gold;margin:0;line-height:1;text-align:center;transform:none;flex:0 0 auto;padding:0 6px}#wavePreview{display:none;gap:4px;min-height:18px;margin:0}.wave-preview-dot{width:16px;height:16px;font-size:8px;border-width:1px}.wave-preview-modifier{font-size:9px;padding:2px 5px}#waveMutationBanner{display:none;min-height:0;margin:2px 0 0}.wave-mutation-chip{padding:5px 8px;gap:6px;border-radius:8px;max-width:100%}.wave-mutation-icon{width:20px;height:20px;font-size:10px}.wave-mutation-name{font-size:10px}.wave-mutation-desc{font-size:9px}#waveTelemetry{display:block;font-size:9px;margin:0;line-height:1.1;padding:2px 4px;color:#6a9ab8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}#bossHpWrap{position:absolute;top:0;left:50%;transform:translate(-50%);z-index:55;margin:0;padding:3px 8px;width:min(200px,60vw);background:#040c16e0;border-radius:0 0 8px 8px;border:1px solid rgba(140,40,40,.5);border-top:none}#bossHpLabel{font-size:9px;margin-bottom:2px}#bossHpTrack{height:8px}#sendWaveBtn{position:fixed!important;bottom:max(70px,calc(env(safe-area-inset-bottom) + 60px));right:12px;width:48px!important;height:48px!important;max-width:none;padding:0!important;border-radius:50%!important;font-size:20px!important;display:flex!important;align-items:center;justify-content:center;z-index:60;margin:0!important;min-height:0}#fastForwardBtn{position:fixed!important;bottom:max(70px,calc(env(safe-area-inset-bottom) + 60px));right:64px;width:48px!important;height:48px!important;padding:0!important;border-radius:50%!important;font-size:18px!important;z-index:60;min-height:0}#gameCanvas{min-height:0;height:100%;border-width:0;border-radius:0;margin:0;display:block;max-width:100%;width:100%}#gameContainer.duel-enabled #duelScoreBar{position:fixed;top:0;left:0;right:0;z-index:55;padding:6px 10px;font-size:11px}#gameContainer.duel-enabled #battlefieldLayout{grid-template-columns:1fr;grid-template-rows:3fr 2fr}#gameContainer.duel-enabled #battlefieldMain{min-height:0;padding-top:44px}#gameContainer.duel-enabled #opponentPane{display:grid;border-left:none;border-top:2px solid rgba(40,110,150,.5);max-height:200px;overflow-y:auto}#gameContainer.duel-enabled #opponentPane #duelScoreBar{position:static}#duelCollapseOpponentBtn{display:block}.score-value{font-size:16px}.score-name{font-size:11px;max-width:80px}.opp-stat{font-size:10px}#towerShop{display:flex;flex-direction:row;overflow-x:auto;overflow-y:hidden;gap:4px;margin:0;width:100%;padding:4px 6px;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory;background:#040c16f2;border-top:1.5px solid rgba(30,80,120,.45);min-height:54px;max-height:68px}.tower-button{min-width:80px;max-width:88px;flex-shrink:0;scroll-snap-align:start;padding:4px 5px;font-size:10px;border-radius:6px;min-height:50px;border:1.5px solid rgba(40,110,150,.55);line-height:1.15;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px}.tower-button br{display:none}.small-text{font-size:9px;margin-top:1px}.tower-icon{font-size:12px;margin-bottom:1px}.upgrade-popup{position:fixed;bottom:68px;left:4px;right:4px;max-width:none;width:auto;z-index:70;border-radius:10px;max-height:min(calc(100vh - 120px),45vh);max-height:min(calc(100dvh - 120px),45dvh);overflow-y:auto;min-width:160px;padding:8px;font-size:10px}#upgradePanel{max-height:none;overflow-y:auto;padding:8px 10px;font-size:12px}#upgradePanel h3{font-size:14px!important;margin-bottom:2px!important}#upgradePanel p{font-size:11px!important;margin-bottom:2px!important}.upgrade-button{padding:6px 12px;font-size:11px;margin:2px;min-height:36px}#upgradePanelBackdrop{display:none;position:fixed;inset:0;background:#00000059;z-index:65}#gameActions{position:fixed;top:max(4px,env(safe-area-inset-top));left:4px;z-index:55;display:flex;gap:3px;margin:0;width:auto;padding:0;background:transparent;border-top:none}#gameActions button,#restartGameBtn,#quitToMenuBtn{min-height:44px!important;min-width:44px;font-size:9px!important;padding:3px 4px!important;border-radius:6px;margin:0!important;width:auto}#restartBtn,#menuBtn{font-size:11px;padding:6px 16px}#soundToggle{bottom:auto;top:4px;right:6px;padding:4px 8px;font-size:9px;z-index:60}#fpsCounter{top:6px;right:6px;padding:3px 6px;font-size:10px}#towerShop:before{content:"";position:sticky;left:0;width:16px;min-height:100%;background:linear-gradient(90deg,rgba(4,12,22,.95),transparent);pointer-events:none;z-index:1;flex-shrink:0}#towerShop:after{content:"";position:sticky;right:0;width:16px;min-height:100%;background:linear-gradient(270deg,rgba(4,12,22,.95),transparent);pointer-events:none;z-index:1;flex-shrink:0}.tower-button.selected{box-shadow:0 0 0 2px #3cb4ffb3,0 0 12px #288cc84d}.tower-button:disabled{text-decoration:line-through;opacity:.4}.tower-button.affordable{animation:towerAffordable 2s ease infinite}}@media(hover:none)and (pointer:coarse)and (max-height:400px){#creditsFooter{display:none}}@media(hover:none)and (pointer:coarse)and (max-height:760px){#upgradePanel{min-height:24px;padding:2px 4px}#upgradePanel p{font-size:9px!important}}@media(hover:none)and (pointer:coarse)and (orientation:landscape){#gameContainer{grid-template-rows:auto minmax(0,1fr) auto}#towerShop{max-height:56px;min-height:48px;gap:3px;padding:3px 4px}.tower-button{min-width:64px;max-width:78px;min-height:42px}#soloMinimap{width:100px!important;height:60px!important}#towerShop:before,#towerShop:after{content:none}#gameInfo{grid-template-columns:repeat(4,minmax(0,1fr));gap:3px;padding:2px 6px}.info-item{font-size:10px;padding:3px 4px}#timer{font-size:18px}#waveTelemetry{font-size:10px;margin:1px 0 2px}#towerShop,#gameActions{margin-top:1px}#landingPage{justify-content:flex-start;padding-top:max(6px,env(safe-area-inset-top));overflow-y:auto}.landing-content{margin-top:2vh;padding:4px 10px 0}.game-logo{font-size:clamp(18px,4.2vw,30px);margin-bottom:0}.game-subtitle{font-size:clamp(8px,1.7vw,11px);margin-bottom:6px}.menu-btn{width:min(44vw,280px);padding:8px;font-size:12px;margin:3px auto}#assetWarmStatus{font-size:9px;min-height:12px}#creditsFooter{position:relative;padding:4px 8px}#updateStamp{top:max(2px,env(safe-area-inset-top));right:max(4px,env(safe-area-inset-right));font-size:9px;padding:2px 5px}#gameContainer.duel-enabled #duelScoreBar{position:static;padding:8px 14px}#gameContainer.duel-enabled #battlefieldLayout{grid-template-columns:1fr 1fr;grid-template-rows:1fr}#gameContainer.duel-enabled #opponentPane{border-left:2px solid rgba(40,110,150,.5);border-top:none;min-width:280px}}@media(hover:none)and (pointer:coarse)and (orientation:landscape)and (max-height:520px){#gameContainer{grid-template-rows:auto minmax(0,1fr) auto}#gameInfo{font-size:10px;padding:1px 3px;gap:2px}.info-item{font-size:9px;padding:1px 3px}#timer{font-size:12px;margin:0}#sendWaveBtn{bottom:max(56px,calc(env(safe-area-inset-bottom) + 48px));width:38px!important;height:38px!important;font-size:16px!important}#fastForwardBtn{bottom:max(56px,calc(env(safe-area-inset-bottom) + 48px));right:54px;width:38px!important;height:38px!important;font-size:14px!important}#gameCanvas{min-height:55vh}#towerShop{max-height:44px;min-height:40px;padding:2px 3px;gap:3px}.tower-button{min-width:60px;min-height:36px;font-size:9px}#gameContainer.duel-enabled #battlefieldLayout{grid-template-columns:1fr 1fr;grid-template-rows:1fr}.score-value{font-size:14px}.score-name{font-size:10px;max-width:60px}}@media(hover:none){.menu-btn:hover,.tower-button:hover,.upgrade-button:hover{transform:none}.tower-button,.menu-btn{-webkit-tap-highlight-color:transparent}}body.tiny-viewport #fpsCounter{display:none!important}body.tiny-viewport #soundToggle{top:auto;bottom:max(6px,env(safe-area-inset-bottom));right:6px;padding:3px 6px;font-size:9px}body.tiny-viewport #updateStamp{font-size:8px;padding:2px 4px}@keyframes towerAffordable{0%{border-color:#28a0644d}50%{border-color:#28a064b3}to{border-color:#28a0644d}}
