:root{--bg:#1b2430;--panel:#1b2430d1;--panel-edge:#ffffff24;--panel-shadow:0 4px 0 #00000040, 0 8px 18px #0000002e;--text:#fbf6ea;--muted:#c4cbd4;--gold:#ffcf3f;--lives:#ff5d5d;--accent:#5fc44a;--accent-dark:#2f7d27;--accent-light:#8ee36f;--active:#3f7cc9;--active-dark:#234d84;--portal:#a46bff;--pad:12px;--radius:16px;color:var(--text);font-family:Fredoka,ui-rounded,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-weight:600}*{box-sizing:border-box}[hidden]{display:none!important}html,body{overscroll-behavior:none;background:var(--bg);height:100%;margin:0;overflow:hidden}#app{height:100dvh;position:fixed;inset:0}#scene{position:absolute;inset:0}#scene canvas{touch-action:none;width:100%;height:100%;display:block}.ico{flex:none;width:22px;height:22px}#hud{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;position:absolute;inset:0}.bar{padding:var(--pad) calc(var(--pad) + env(safe-area-inset-right)) var(--pad) calc(var(--pad) + env(safe-area-inset-left));align-items:center;gap:8px;display:flex;position:absolute;left:0;right:0}.bar.top{padding-top:calc(var(--pad) + env(safe-area-inset-top));top:0}.bar.bottom{padding-bottom:calc(var(--pad) + env(safe-area-inset-bottom));align-items:flex-end;bottom:0}.spacer{flex:1}.stat{border:1.5px solid var(--panel-edge);background:var(--panel);min-height:40px;box-shadow:var(--panel-shadow);-webkit-backdrop-filter:blur(6px);font-variant-numeric:tabular-nums;letter-spacing:.01em;border-radius:999px;align-items:center;gap:7px;padding:4px 14px 4px 9px;font-size:1.15rem;display:flex}.stat.gold span{color:var(--gold);min-width:2.2ch}.stat .label{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:.85rem;font-weight:500}.btn{pointer-events:auto;border:1.5px solid var(--panel-edge);background:var(--panel);min-width:44px;min-height:44px;box-shadow:var(--panel-shadow);color:var(--text);font:inherit;cursor:pointer;touch-action:manipulation;border-radius:14px;justify-content:center;align-items:center;gap:8px;padding:6px 14px;font-size:1.05rem;transition:transform 80ms,box-shadow 80ms,background-color .15s,opacity .15s;display:inline-flex}.btn:active:not(:disabled){transform:translateY(3px);box-shadow:0 1px #00000040,0 3px 8px #00000026}.btn:focus-visible{outline-offset:2px;outline:3px solid #fff}.btn:disabled{cursor:default}.btn.primary{border-color:var(--accent-light);background:linear-gradient(180deg, var(--accent-light) 0%, var(--accent) 55%);box-shadow:0 4px 0 var(--accent-dark), 0 8px 18px #0003;color:#fff;text-shadow:0 2px #00000038}.btn.primary:active:not(:disabled){box-shadow:0 1px 0 var(--accent-dark), 0 3px 8px #00000026}.speed-btn{font-variant-numeric:tabular-nums;padding:6px 12px}.speed-btn.on{background:var(--active);box-shadow:0 4px 0 var(--active-dark), 0 8px 18px #0003;border-color:#79a9e8}.tower-btn{text-align:left;border-radius:18px;gap:10px;min-height:64px;padding:6px 16px 6px 8px}.tower-art{background:radial-gradient(circle at 50% 75%,#ffffff38,#ffffff0a 70%);border-radius:12px;width:50px;height:50px;padding:2px}.tower-info{flex-direction:column;line-height:1.1;display:flex}.tower-info .name{font-size:1.05rem}.cost-wrap{color:var(--gold);align-items:center;gap:4px;font-size:1rem;display:flex}.cost-wrap .ico{width:18px;height:18px}.tower-btn.active{background:var(--active);box-shadow:0 4px 0 var(--active-dark), 0 0 0 4px #ffffff40, 0 8px 18px #0003;border-color:#fff;transform:translateY(-4px)}.tower-btn.unaffordable:not(.active){opacity:.7}.tower-btn.unaffordable:not(.active) .tower-art{filter:grayscale(.85)}.tower-btn.unaffordable .cost-wrap{color:var(--lives)}.hint{color:var(--muted);opacity:0;background:#141a2299;border-radius:999px;align-self:center;padding:6px 12px;font-size:.9rem;font-weight:500;transition:opacity .2s,transform .2s;transform:translateY(6px)}#hud.building .hint{opacity:1;transform:none}.wave-btn{border-radius:18px;min-width:156px;min-height:56px;padding:8px 20px 8px 16px;font-size:1.2rem}.wave-btn .ico{width:24px;height:24px}.wave-btn .ico-busy,.wave-btn.busy .ico-play{display:none}.wave-btn.busy .ico-busy{animation:.9s ease-in-out infinite clash;display:block}.wave-btn.ready{animation:1.6s ease-in-out infinite ready-glow}.wave-btn:disabled{border-color:var(--panel-edge);background:var(--panel);box-shadow:var(--panel-shadow);color:var(--muted);text-shadow:none}@keyframes ready-glow{0%,to{box-shadow:0 4px 0 var(--accent-dark), 0 0 0 0 #8ee36f8c, 0 8px 18px #0003}50%{box-shadow:0 4px 0 var(--accent-dark), 0 0 0 9px #8ee36f00, 0 8px 18px #0003}}@keyframes clash{0%,to{transform:rotate(0)scale(1)}50%{transform:rotate(-12deg)scale(1.12)}}.pulse{animation:.45s ease-out pulse}@keyframes pulse{0%{background:var(--lives);transform:scale(1)}40%{transform:scale(1.18)}to{transform:scale(1)}}#damage{pointer-events:none;opacity:0;position:absolute;inset:0;box-shadow:inset 0 0 90px 24px #ff2828bf}#damage.hit{animation:.6s ease-out damage}@keyframes damage{0%{opacity:1}to{opacity:0}}#banner{pointer-events:none;opacity:0;text-align:center;white-space:nowrap;flex-direction:column;align-items:center;display:flex;position:absolute;top:24%;left:50%;transform:translate(-50%,-50%)}#banner.show{animation:2.1s cubic-bezier(.2,.8,.2,1) both banner}.banner-title{letter-spacing:.02em;color:#fff;-webkit-text-stroke:2px #1e143299;paint-order:stroke fill;text-shadow:0 4px #2814508c,0 10px 28px #00000059;font-size:clamp(2.2rem,7vw,3.6rem);font-weight:700;line-height:1}.banner-sub{background:var(--portal);letter-spacing:.08em;text-transform:uppercase;border-radius:999px;margin-bottom:6px;padding:3px 14px;font-size:.95rem;box-shadow:0 3px #5b2fb0}#banner[data-kind=clear] .banner-sub{background:var(--gold);color:#4a3206;box-shadow:0 3px #a8740e}#banner[data-kind=clear] .banner-title{text-shadow:0 4px #2f7d27cc,0 10px 28px #00000059}@keyframes banner{0%{opacity:0;transform:translate(-50%,-50%)scale(.6)}14%{opacity:1;transform:translate(-50%,-50%)scale(1.06)}22%{transform:translate(-50%,-50%)scale(1)}78%{opacity:1;transform:translate(-50%,-50%)scale(1)}to{opacity:0;transform:translate(-50%,-62%)scale(.96)}}.overlay{padding:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(16px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));text-align:center;background:radial-gradient(#14101e73,#0a0a12c7);justify-content:center;align-items:center;animation:.3s ease-out fade-in;display:flex;position:absolute;inset:0}.overlay[hidden]{display:none}.panel{border:1.5px solid var(--panel-edge);background:linear-gradient(#2c384af5,#1b2430f5);border-radius:24px;flex-direction:column;align-items:center;gap:10px;max-width:400px;padding:24px 32px 26px;display:flex;box-shadow:0 6px #0000004d,0 20px 50px #0006}.panel .title{font-size:2.1rem;font-weight:700;line-height:1.05}.panel .detail{color:var(--muted);font-weight:500;line-height:1.35}.end-panel{margin-top:30px;padding-top:44px;animation:.5s cubic-bezier(.2,.9,.3,1.3) both panel-in;position:relative}.end-badge{background:#3a2328;border:3px solid #ff8a7a;border-radius:50%;width:76px;height:76px;padding:10px;position:absolute;top:-38px;box-shadow:0 5px #0000004d}.badge-win,.victory .badge-lose{display:none}.victory .badge-win{border-color:var(--gold);background:#3b3218;display:block}.victory .title{color:var(--gold)}.end-stats{gap:10px;margin:4px 0 8px;display:flex}.end-stat{font-variant-numeric:tabular-nums;background:#00000040;border-radius:999px;align-items:center;gap:7px;padding:6px 14px;font-size:1.15rem;display:flex}.btn.big{min-height:54px;padding:8px 26px;font-size:1.2rem}@keyframes panel-in{0%{opacity:0;transform:translateY(30px)scale(.85)}to{opacity:1;transform:none}}@keyframes fade-in{0%{opacity:0}}#rotate{z-index:10;background:radial-gradient(ellipse at 50% 30%, #2c3a4e, var(--bg));display:none}@media (orientation:portrait){#rotate{display:flex}}.rotate-icon{width:72px;height:72px;color:var(--gold);animation:2.2s ease-in-out infinite rotate-hint}@keyframes rotate-hint{0%,25%{transform:rotate(0)}55%,85%{transform:rotate(-90deg)}to{transform:rotate(0)}}#fps{left:calc(8px + env(safe-area-inset-left));pointer-events:none;background:#0009;border-radius:4px;padding:2px 6px;font:12px ui-monospace,monospace;position:fixed;top:50%}.icon-btn{padding:6px 10px}#btn-mute .ico-off,#btn-mute.muted .ico-on{display:none}#btn-mute.muted .ico-off{display:block}#btn-mute.muted{color:var(--muted)}.tower-panel{pointer-events:auto;border:1.5px solid var(--panel-edge);background:var(--panel);min-height:64px;box-shadow:var(--panel-shadow);-webkit-backdrop-filter:blur(6px);border-radius:18px;align-items:center;gap:10px;padding:6px 8px;animation:.18s ease-out tp-in;display:flex}.tower-panel[hidden]{display:none}@keyframes tp-in{0%{opacity:0;transform:translateY(8px)}}#hud.inspecting .tower-btn,#hud.inspecting .hint{display:none}.tp-info{flex-direction:column;gap:3px;min-width:0;display:flex}.tp-title{align-items:center;gap:8px;font-size:1.05rem;display:flex}.tp-pips{gap:3px;display:flex}.tp-pips i{background:#ffffff2e;border-radius:50%;width:9px;height:9px;box-shadow:inset 0 0 0 1.5px #ffffff40}.tp-pips i.on{background:var(--gold);box-shadow:0 0 6px #ffcf3f99}.tp-stats{color:var(--muted);flex-wrap:wrap;gap:2px 10px;font-size:.85rem;font-weight:500;display:flex}.tp-stats span{align-items:center;gap:3px;display:inline-flex}.tp-stats b{color:var(--text);font-weight:600}.tp-stats .ico{width:15px;height:15px}.tp-extra:empty{display:none}.tp-extra{color:#9fe6ff}.tp-upgrade,.tp-sell{flex-direction:column;gap:0;min-width:84px;min-height:56px;font-size:.95rem;line-height:1.05}.tp-upgrade{flex-flow:wrap;column-gap:4px;max-width:120px}.tp-upgrade .cost-wrap{color:#fff6c8;font-size:.9rem}.tp-upgrade.unaffordable .cost-wrap{color:#ffd2d2}.tp-upgrade:disabled{filter:grayscale(.6);opacity:.75}.tp-upgrade.maxed .cost-wrap{display:none}.tp-sell .cost-wrap{font-size:.9rem}#loading{z-index:9;background:var(--bg);transition:opacity .35s}#loading.done{opacity:0;pointer-events:none}.load-track{background:#ffffff1f;border-radius:999px;width:220px;height:12px;overflow:hidden}.load-fill{border-radius:inherit;background:linear-gradient(90deg, var(--accent), var(--accent-light));width:0;height:100%;transition:width .15s}.wave-col{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.wave-preview{background:var(--panel);box-shadow:var(--panel-shadow);font-variant-numeric:tabular-nums;border-radius:999px;gap:6px;padding:3px 10px;font-size:.85rem;display:flex}.wave-preview:empty{display:none}.wave-preview .foe{align-items:center;gap:4px;display:inline-flex}.wave-preview .foe i{border-radius:50%;width:11px;height:11px;box-shadow:inset 0 -2px #00000040}.foe-basic i{background:#ef5a4c}.foe-fast i{background:#f6b93b}.foe-tank i{background:#7a5bc4;border-radius:3px!important}.screen{z-index:5}body.on-title #hud,body.on-title #banner{display:none}.title-screen{background:radial-gradient(at 50% 40%,#14101e26,#0a0a12a6)}.title-card{flex-direction:column;align-items:center;gap:18px;animation:.5s cubic-bezier(.2,.9,.3,1.2) both panel-in;display:flex}.logo{align-items:center;gap:12px;display:flex}.logo-art{filter:drop-shadow(0 4px #0000004d);width:72px;height:72px}.logo h1{text-align:left;color:#fff;-webkit-text-stroke:2px #1e14328c;paint-order:stroke fill;text-shadow:0 4px #2814508c,0 10px 28px #00000059;margin:0;font-size:clamp(2.2rem,6.5vw,3.6rem);font-weight:700;line-height:.95}.logo h1 span{color:var(--gold)}.menu{flex-direction:column;align-items:stretch;gap:10px;width:min(340px,80vw);display:flex}.menu-main{width:100%}.menu-label{flex-direction:column;align-items:center;line-height:1.1;display:flex}.menu-label small{opacity:.9;font-size:.8rem;font-weight:500}.menu-label small:empty{display:none}.menu-row{gap:10px;width:100%;display:flex}.menu-row>.btn{flex:1}.title-foot{color:var(--muted);text-shadow:0 1px 2px #00000080;flex-direction:column;gap:2px;font-size:.85rem;font-weight:500;display:flex}.built-by{color:var(--text)}.built-by a{color:var(--gold);border-bottom:1.5px solid #ffcf3f80;padding:6px 2px;font-weight:600;line-height:1;text-decoration:none;display:inline-block}.built-by a:hover,.built-by a:focus-visible{border-bottom-color:var(--gold)}#best-line:empty{display:none}#best-line{color:var(--gold);font-weight:600}.menu-panel{align-items:stretch;width:min(420px,92vw);max-height:100%;animation:.3s cubic-bezier(.2,.9,.3,1.2) both panel-in;overflow-y:auto}.menu-panel .title{text-align:center}.panel .detail.small{text-align:center;font-size:.85rem}.setting{text-align:left;align-items:center;gap:12px;min-height:48px;display:flex}.setting-name{flex:1}.setting input[type=range]{min-width:0;height:44px;accent-color:var(--accent);flex:1.4}.setting output{text-align:right;width:3.2em;color:var(--muted);font-variant-numeric:tabular-nums}.toggle{min-width:72px}.toggle[aria-pressed=true]{background:var(--accent);border-color:var(--accent-light);box-shadow:0 4px 0 var(--accent-dark)}.seg{gap:4px;display:flex}.seg .btn{padding:6px 10px;font-size:.95rem}.seg .btn.on{background:var(--active);box-shadow:0 4px 0 var(--active-dark);border-color:#79a9e8}.btn.danger{color:#ffb0a8}.btn.danger.confirm{color:#fff;background:#b8382d;border-color:#ff8a7a}.steps{text-align:left;flex-direction:column;gap:10px;margin:0;padding:0;font-weight:500;line-height:1.3;list-style:none;display:flex}.steps li{align-items:center;gap:12px;display:flex}.step-ico{background:#ffffff14;border-radius:10px;flex:none;width:38px;height:38px;padding:3px}.step-ico.play,.step-ico.up{color:var(--accent-light);padding:8px}.legend{color:var(--muted);flex-wrap:wrap;justify-content:center;gap:4px 14px;font-size:.85rem;display:flex}.legend span{align-items:center;gap:4px;display:inline-flex}kbd{min-width:1.6em;font:inherit;text-align:center;background:#ffffff1f;border-radius:5px;margin:0 1px;padding:0 5px;font-size:.8rem;display:inline-block;box-shadow:0 2px #00000059}@media (pointer:coarse){.keys{display:none}}#no-webgl{z-index:11;background:var(--bg)}body.reduced-motion *,body.reduced-motion :before,body.reduced-motion :after{transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important}@media (height<=420px){:root{--pad:8px}.stat{min-height:36px;padding:3px 12px 3px 7px;font-size:1rem}.stat .label{display:none}.ico{width:20px;height:20px}.tower-btn{min-height:56px}.wave-btn{min-width:132px;min-height:50px;font-size:1.05rem}.panel{padding:18px 24px 20px}.end-panel{padding-top:40px}.panel .title{font-size:1.7rem}.hint{display:none}.title-card{gap:10px}.logo-art{width:52px;height:52px}.menu-panel{gap:6px;padding:14px 20px 16px}.menu-panel .title{font-size:1.5rem}.steps{gap:6px;font-size:.9rem}.step-ico{width:30px;height:30px}.setting{min-height:44px}.wave-preview{font-size:.75rem}.tower-btn{flex-direction:column;gap:0;padding:4px 8px}.tower-btn .name{display:none}.tower-art{width:34px;height:34px}.tower-panel{gap:6px;min-height:56px}.tower-panel .tower-art{display:none}.tp-stats{font-size:.78rem}.tp-upgrade,.tp-sell{min-width:70px;min-height:50px}}@media (prefers-reduced-motion:reduce){.wave-btn.ready,.wave-btn.busy .ico-busy,.rotate-icon{animation:none}}
