:root{--bg-color:#0d1117;--text-color:#e6edf3;--glow-color:#58a6ff;--glow-color-active:#ff7b72;--board-bg:#161b22cc;--border-color:#30363d}*{box-sizing:border-box;margin:0;padding:0}body{min-width:320px;min-height:100vh;color:var(--text-color);background-color:#000;justify-content:center;align-items:center;margin:0;font-family:Courier New,Courier,monospace;display:flex}#root{background-color:#0d1117;flex-direction:column;width:100%;max-width:450px;height:100dvh;margin:0 auto;display:flex;position:relative;overflow:hidden;box-shadow:0 0 30px #58a6ff26}.map-wrapper{aspect-ratio:8/11;background:#09090f;border:1px solid #1e1e3a;border-radius:10px;max-width:calc(72.7273vh - 58.1818px);height:100%;max-height:calc(100vh - 80px);position:relative;overflow:hidden;box-shadow:0 0 30px #4fc3f70f,inset 0 0 40px #0006}.map-grid{width:100%;height:100%;display:grid}.map-cell{cursor:default;background-image:radial-gradient(circle,#ffffff06 1px,#0000 1px);background-size:8px 8px;border:1px solid #0d0d1a;justify-content:center;align-items:center;transition:background .1s;display:flex;position:relative}.path-cell{background:#0b150a;border-color:#0f1e0c}.start-cell{background:#071a07;border-color:#0f2e0f;overflow:visible}.end-cell{background:#1a0707;border-color:#2e0f0f}.empty-cell{background-color:#09090f}.empty-buyable{cursor:pointer;background-color:#09090f}.empty-buyable:hover{background-color:#10102a}.empty-buyable:hover .buy-hint{color:#ffffff4d}.tower-cell{cursor:pointer;background-color:#07070e}.tower-cell:hover{background-color:#0e0e20}.selected-cell{box-shadow:inset 0 0 0 2px #ffca28a6}.buy-hint{color:#ffffff1a;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:1rem;transition:color .1s}.path-arrow{color:#64b45059;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:.55rem;line-height:1}.path-corner{pointer-events:none;background:#64b45033;border-radius:50%;width:5px;height:5px}.start-pulse{pointer-events:none;border:1.5px solid #4caf5080;border-radius:50%;width:80%;height:80%;animation:2s ease-out infinite start-ring;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.4)}.start-pulse.delay1{animation-delay:1s}@keyframes start-ring{0%{opacity:.8;transform:translate(-50%,-50%)scale(.3)}to{opacity:0;transform:translate(-50%,-50%)scale(1.8)}}.start-icon{color:#4caf50b3;z-index:1;pointer-events:none;font-size:.65rem;position:relative}.end-target{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.end-ring{border:1.5px solid #ef535066;border-radius:50%;width:65%;height:65%;animation:2s ease-in-out infinite alternate end-pulse;position:absolute}@keyframes end-pulse{0%{box-shadow:none;border-color:#ef535040}to{border-color:#ef5350b3;box-shadow:0 0 8px #ef53504d}}.end-cross-h,.end-cross-v{background:#ef53504d;position:absolute}.end-cross-h{width:55%;height:1px}.end-cross-v{width:1px;height:55%}.tower-sprite{border-radius:6px;justify-content:center;align-items:center;width:72%;height:72%;transition:box-shadow 80ms;display:flex;position:relative;background:0 0!important}.tower-lv0{border:1.5px solid #4fc3f740;background:#4fc3f714!important}.tower-lv1{border:1.5px solid #ab47bc40;background:#ab47bc14!important}.tower-lv2{border:1.5px solid #ff704340;background:#ff704314!important}.tower-sprite.firing{animation:.18s ease-out tower-pulse}@keyframes tower-pulse{0%{transform:scale(1)}35%{transform:scale(1.5)}to{transform:scale(1)}}.tower-spawn{animation:.4s cubic-bezier(.34,1.56,.64,1) tower-spawn}@keyframes tower-spawn{0%{opacity:0;transform:scale(0)rotate(-20deg)}to{opacity:1;transform:scale(1)rotate(0)}}.tower-icon{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.tower-icon-lv1{background:#4fc3f7;border-radius:50%;width:42%;height:42%;box-shadow:0 0 8px #4fc3f7,0 0 2px #fff}.tower-icon-lv2{background:#ab47bc;border-radius:2px;width:38%;height:38%;transform:rotate(45deg);box-shadow:0 0 10px #ab47bc,0 0 3px #e040fb}.tower-icon-lv3{clip-path:polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);filter:drop-shadow(0 0 4px #ff9800);background:#ff7043;width:52%;height:52%}.range-circle{pointer-events:none;z-index:5;background:#ffca280a;border:1.5px solid #ffca2880;border-radius:50%;animation:.2s ease-out range-in;position:absolute}@keyframes range-in{0%{opacity:0;transform:translate(-50%,-50%)scale(.6)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}.laser-overlay{pointer-events:none;z-index:12;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.laser-beam{animation:.12s ease-out forwards laser-fade}@keyframes laser-fade{0%{opacity:1;stroke-width:1.2px}to{opacity:0;stroke-width:.1px}}.enemy-wrap{pointer-events:none;z-index:10;justify-content:center;align-items:center;width:24px;height:24px;display:flex;position:absolute;transform:translate(-50%,-50%)}.enemy-wrap.hit-flash>*{filter:brightness(5)!important;transform:scale(1.35)!important}.enemy-hp-bar{background:#ffffff14;border-radius:1px;width:100%;height:2px;position:absolute;bottom:-5px;left:0}.enemy-hp-fill{background:#4caf50;border-radius:1px;height:100%;transition:width .1s}.es-basic{background:0 0;border:2px solid #ef5350;border-radius:50%;width:18px;height:18px;box-shadow:0 0 8px #ef535088,0 0 2px #ef5350}.es-fast{filter:drop-shadow(0 0 4px #ffca28cc)drop-shadow(0 0 2px #ff8f00);background:0 0;border-top:16px solid #ffca28;border-left:9px solid #0000;border-right:9px solid #0000;width:0;height:0;position:relative}.es-fast:after{content:"";border-top:11px solid #09090f;border-left:6px solid #0000;border-right:6px solid #0000;width:0;height:0;position:absolute;top:-14px;left:-6px}.es-armored{background:0 0;border:2px solid #78909c;border-radius:2px;justify-content:center;align-items:center;width:16px;height:16px;display:flex;box-shadow:0 0 6px #546e7a88,inset 0 0 4px #546e7a33}.es-armored-inner{background:#90a4ae;border-radius:50%;width:5px;height:5px;box-shadow:0 0 4px #90a4ae}.es-tank{background:0 0;border:3px solid #a1887f;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;display:flex;box-shadow:0 0 10px #8d6e6399,0 0 3px #a1887f}.es-tank-inner{background:0 0;border:2px solid #bcaaa4;border-radius:50%;width:9px;height:9px;box-shadow:0 0 5px #bcaaa466}.es-elite{clip-path:polygon(50% 0%,100% 25%,100% 75%,50% 100%,0% 75%,0% 25%);width:20px;height:20px;box-shadow:none;background:0 0;border:0;justify-content:center;align-items:center;display:flex;position:relative}.es-elite:before{content:"";clip-path:polygon(50% 0%,100% 25%,100% 75%,50% 100%,0% 75%,0% 25%);filter:drop-shadow(0 0 5px #7e57c2);background:0 0;border:2px solid #ce93d8;position:absolute;inset:0;box-shadow:0 0 10px #ab47bcbb,0 0 4px #ce93d8}.es-elite{clip-path:none;background:0 0;border:0;width:20px;height:20px;position:relative}.es-elite:before{content:"";clip-path:polygon(50% 2%,98% 26%,98% 74%,50% 98%,2% 74%,2% 26%);width:20px;height:20px;box-shadow:none;background:#ce93d822;border:none;position:absolute;top:0;left:0}.es-elite-inner{z-index:1;background:0 0;border:1.5px solid #ce93d8;border-radius:50%;width:10px;height:10px;position:relative;box-shadow:0 0 8px #ab47bccc,0 0 14px #7e57c266}.es-boss{justify-content:center;align-items:center;width:28px;height:28px;display:flex;position:relative}.es-boss-spin{border:2px solid #ff6f00;border-color:#ff6f00 #d32f2f #ff6f00 #0000;border-radius:50%;width:28px;height:28px;animation:1s linear infinite boss-spin;position:absolute;box-shadow:0 0 10px #d32f2f88}.es-boss-mid{background:0 0;border:2px solid #ef9a9a;border-radius:2px;width:16px;height:16px;position:absolute;transform:rotate(45deg);box-shadow:0 0 8px #d32f2faa}.es-boss-core{background:#ff1744;border-radius:50%;width:7px;height:7px;position:absolute;box-shadow:0 0 10px #ff1744,0 0 20px #d32f2f66}@keyframes boss-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.explosion{pointer-events:none;z-index:20;width:50px;height:50px;position:absolute;transform:translate(-50%,-50%)}.explosion-core{background:radial-gradient(circle,#fff 0%,#ffd54f 25%,#ff7b72 55%,#0000 75%);width:100%;height:100%;animation:.35s cubic-bezier(.175,.885,.32,1.275) forwards explode-core;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(0)}.explosion-ring{border:3px solid #ffd54f;border-radius:50%;width:100%;height:100%;animation:.45s ease-out forwards explode-ring;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.4)}@keyframes explode-core{0%{opacity:1;transform:translate(-50%,-50%)scale(0)}to{opacity:0;transform:translate(-50%,-50%)scale(1.8)}}@keyframes explode-ring{0%{opacity:1;border-width:8px;transform:translate(-50%,-50%)scale(.4)}to{opacity:0;border-width:0;transform:translate(-50%,-50%)scale(2.4)}}.damage-number{pointer-events:none;z-index:25;color:#ffffffbf;text-shadow:0 1px 4px #000;white-space:nowrap;font-size:.72rem;font-weight:800;animation:.9s ease-out forwards dmg-float;position:absolute;transform:translate(-50%,-50%)}.damage-number.damage-crit{color:#ffd54f;text-shadow:0 0 12px #ffa000e6,0 1px 4px #000;font-size:1rem;animation:.9s ease-out forwards dmg-crit}@keyframes dmg-float{0%{opacity:1;transform:translate(-50%,-50%)}to{opacity:0;transform:translate(-50%,-260%)}}@keyframes dmg-crit{0%{opacity:1;transform:translate(-50%,-50%)scale(1.5)}25%{transform:translate(-50%,-80%)scale(1)}to{opacity:0;transform:translate(-50%,-300%)}}.projectile{display:none}.upgrade-panel{background:#0f0f18;border-top:1px solid #1e1e2e;flex-direction:column;gap:8px;padding:12px 16px 14px;animation:.2s cubic-bezier(.34,1.56,.64,1) up-in;display:flex}@keyframes up-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.up-header{justify-content:space-between;align-items:center;display:flex}.up-tower-info{align-items:center;gap:8px;display:flex}.up-tower-dot{border-radius:3px;flex-shrink:0;width:10px;height:10px;display:inline-block}.up-tower-name{color:#e8e8e8;font-size:.9rem;font-weight:600}.up-tower-stats{color:#555;font-size:.72rem}.up-close{color:#444;cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 6px;font-size:.9rem;transition:color .1s}.up-close:hover{color:#aaa}.up-status{text-align:center;padding:6px 0;font-size:.8rem}.up-status.max{color:#ff7043}.up-status.no-coins{color:#ef9a9a}.up-cost-hint{color:#444;text-align:center;font-size:.7rem}.up-question{justify-content:center;align-items:center;gap:10px;min-height:40px;padding:4px 0;display:flex}.up-question.shake{animation:.35s q-shake}@keyframes q-shake{0%,to{transform:translate(0)}25%{transform:translate(-8px)}75%{transform:translate(8px)}}.up-q-text{color:#e8e8e8;letter-spacing:2px;font-size:1.5rem;font-weight:700}.up-q-answer{color:#ffd54f;text-align:left;letter-spacing:1px;min-width:40px;font-size:1.5rem;font-weight:700}.up-correct{color:#69f0ae;font-size:1rem;font-weight:700;animation:.3s cubic-bezier(.34,1.56,.64,1) correct-pop}.up-wrong{color:#ef5350;font-size:.9rem}@keyframes correct-pop{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.up-numpad{flex-direction:column;align-items:center;gap:6px;display:flex}.up-numpad-row{gap:6px;display:flex}.up-key{color:#e8e8e8;cursor:pointer;-webkit-user-select:none;user-select:none;background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;width:52px;height:44px;font-size:1rem;font-weight:600;transition:background .1s,transform 80ms}.up-key:hover{background:#24243e}.up-key:active{background:#2e2e4e;transform:scale(.9)}.up-key-confirm{color:#69f0ae;background:#1a3a1a;border-color:#2a5a2a}.up-key-confirm:hover{background:#1e4a1e}.up-key-del{color:#ef9a9a}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{color:#e8e8e8;background:#09090f;width:100%;height:100%;font-family:Inter,Segoe UI,system-ui,sans-serif;font-size:14px;overflow:hidden}#root,.app{flex-direction:column;height:100%;display:flex}.screen-shake{animation:.45s cubic-bezier(.36,.07,.19,.97) both screen-shake}@keyframes screen-shake{0%,to{transform:translate(0)rotate(0)}10%{transform:translate(-8px,-8px)rotate(-1.5deg)}20%{transform:translate(8px,8px)rotate(1.5deg)}30%{transform:translate(-8px,8px)rotate(-1deg)}40%{transform:translate(8px,-8px)rotate(1deg)}60%{transform:translate(-4px,-4px)rotate(-.5deg)}80%{transform:translate(4px,4px)rotate(.5deg)}}.hud{background:#0d0d18;border-bottom:1px solid #16162a;flex-shrink:0;align-items:center;height:44px;padding:0 12px;display:flex;position:relative}.hud-stat{flex-direction:column;align-items:center;padding:0 14px;display:flex}.hud-label{letter-spacing:.12em;color:#3a3a55;text-transform:uppercase;font-size:.52rem}.hud-value{color:#e8e8e8;font-size:.9rem;font-weight:700;line-height:1.1}.hud-gold{color:#ffd54f;text-shadow:0 0 10px #ffd54f80}.hud-lives{align-items:center;gap:2px;display:flex}.heart{background:#ef5350;border-radius:50%;width:6px;height:6px;display:inline-block;box-shadow:0 0 4px #ef535099}.heart.heart-shake{animation:.3s ease-out heart-pop}@keyframes heart-pop{0%{transform:scale(1)}40%{background:#fff;transform:scale(0)}to{transform:scale(1)}}.hud-lives-overflow{color:#ef5350;margin-left:2px;font-size:.65rem}.hud-divider{background:#16162a;flex-shrink:0;width:1px;height:20px}.mute-btn{color:#555;cursor:pointer;background:0 0;border:1px solid #1e1e2e;border-radius:6px;margin-left:auto;padding:2px 8px;font-size:.9rem;transition:color .15s,border-color .15s}.mute-btn:hover{color:#aaa;border-color:#333}.wave-banner{color:#4fc3f7;letter-spacing:.05em;text-shadow:0 0 8px #4fc3f766;font-size:.72rem;position:absolute;right:12px}.map-area{flex:1;justify-content:center;align-items:center;min-height:0;padding:8px;display:flex;overflow:hidden}.bottom-bar{background:#0d0d18;border-top:1px solid #16162a;flex-shrink:0;align-items:center;gap:20px;height:36px;padding:0 14px;display:flex}.bottom-hint{color:#3a3a55;align-items:center;gap:5px;font-size:.7rem;display:flex}.hint-key{color:#666;background:#14142a;border:1px solid #22223a;border-radius:3px;padding:1px 5px;font-size:.6rem}.tower-legend{color:#3a3a55;align-items:center;gap:6px;margin-left:auto;font-size:.65rem;display:flex}.legend-dot{border-radius:2px;width:7px;height:7px;display:inline-block}.legend-dot.lv1{background:#4fc3f7;box-shadow:0 0 4px #4fc3f7}.legend-dot.lv2{background:#ab47bc;box-shadow:0 0 4px #ab47bc}.legend-dot.lv3{background:#ff7043;box-shadow:0 0 4px #ff7043}.wave-start-banner{pointer-events:none;z-index:50;flex-direction:column;justify-content:center;align-items:center;gap:0;animation:1.4s forwards banner-show;display:flex;position:fixed;inset:0}@keyframes banner-show{0%{opacity:0;transform:scale(.7)}15%{opacity:1;transform:scale(1.05)}70%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(1.1)}}.wave-start-label{letter-spacing:.4em;color:#4fc3f7cc;text-shadow:0 0 20px #4fc3f7;text-transform:uppercase;margin-bottom:4px;font-size:.9rem;font-weight:900}.wave-start-title{letter-spacing:.1em;color:#ffffff80;margin-top:6px;font-size:.85rem;font-weight:600}.wave-start-number{color:#fff;text-shadow:0 0 20px #4fc3f7,0 0 50px #4fc3f7,0 0 80px #a371f7;letter-spacing:-2px;font-size:5rem;font-weight:900;line-height:1}.overlay{z-index:200;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#000c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.overlay-panel{text-align:center;background:#09090ff2;border:1px solid #2a2a3e;border-radius:16px;flex-direction:column;align-items:center;gap:14px;padding:44px 64px;animation:.3s cubic-bezier(.34,1.56,.64,1) panel-in;display:flex}@keyframes panel-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.overlay-panel.victory{border-color:#69f0ae4d;box-shadow:0 0 40px #69f0ae26}.overlay-panel.gameover{border-color:#ef53504d;box-shadow:0 0 40px #ef535026}.overlay-panel.victory .overlay-title{color:#69f0ae;text-shadow:0 0 20px #69f0ae}.overlay-panel.gameover .overlay-title{color:#ef5350;text-shadow:0 0 20px #ef5350}.overlay-title{letter-spacing:.05em;font-size:1.8rem;font-weight:800}.overlay-score{color:#ffd54f;text-shadow:0 0 20px #ffd54f99;font-size:2.4rem;font-weight:900}.overlay-btn{color:#e8e8e8;cursor:pointer;letter-spacing:.06em;background:#14142a;border:1px solid #2a2a3e;border-radius:8px;margin-top:8px;padding:10px 40px;font-size:.9rem;transition:background .15s,border-color .15s,box-shadow .15s}.overlay-btn:hover{background:#1e1e3e;border-color:#4a4a6e;box-shadow:0 0 16px #a371f74d}
