:root{--ink:#1d1a33;--ink-2:#2d2850;--panel:#1d1a33e0;--panel-edge:#4a4380;--cream:#fff6e5;--cream-2:#f1e3c8;--muted:#b9b3d9;--orange:#ef7d45;--orange-dark:#b9532a;--purple:#7b5cd6;--purple-dark:#4f3a9a;--green:#66c46c;--red:#ff5d6c;--gold:#ffc23d;--cyan:#4fd6ff;--pink:#ff7ad9;--radius:14px;--font:ui-rounded, "SF Pro Rounded", "Arial Rounded MT Bold", "Trebuchet MS", system-ui, sans-serif;--ui-scale:1}*{box-sizing:border-box}html,body{background:var(--ink);height:100%;color:var(--cream);font-family:var(--font);-webkit-font-smoothing:antialiased;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:none;margin:0;overflow:hidden}#game{background:radial-gradient(at 50% 120%,#6b3f8f 0%,#0000 60%),radial-gradient(at 20% -10%,#2f5a8f 0%,#0000 55%),linear-gradient(#1b1838 0%,#2a2252 55%,#3a2a5e 100%);position:fixed;inset:0}#game:before{content:"";opacity:.8;pointer-events:none;background-image:radial-gradient(1.5px 1.5px at 12% 18%,#fff 50%,#0000 51%),radial-gradient(1px 1px at 28% 8%,#fff 50%,#0000 51%),radial-gradient(1.5px 1.5px at 44% 22%,#ffe7b0 50%,#0000 51%),radial-gradient(1px 1px at 63% 12%,#fff 50%,#0000 51%),radial-gradient(2px 2px at 78% 26%,#cde7ff 50%,#0000 51%),radial-gradient(1px 1px at 90% 9%,#fff 50%,#0000 51%),radial-gradient(1px 1px at 6% 52%,#fff 50%,#0000 51%),radial-gradient(1.5px 1.5px at 95% 58%,#fff 50%,#0000 51%),radial-gradient(1px 1px at 52% 4%,#fff 50%,#0000 51%);position:absolute;inset:0}#view{width:100%;height:100%;display:block;position:absolute;inset:0}body.placing #view{cursor:crosshair}#world-ui,#ui{pointer-events:none;position:absolute;inset:0}#ui .popup,#ui .tip,#ui .screen{pointer-events:auto}[hidden]{display:none!important}.btn{--bg:var(--cream);--edge:var(--cream-2);--shadow:#9c8a6a;appearance:none;font:inherit;color:var(--ink);background:var(--bg);box-shadow:inset 0 -4px 0 var(--edge), 0 4px 0 var(--shadow), 0 8px 18px #00000040;cursor:pointer;border:0;border-radius:12px;outline:none;justify-content:center;align-items:center;gap:8px;padding:11px 20px 12px;font-size:17px;font-weight:800;text-decoration:none;transition:transform 80ms,box-shadow 80ms,filter .15s;display:inline-flex;position:relative}.btn:hover{filter:brightness(1.06);transform:translateY(-1px)}.btn:active{box-shadow:inset 0 -2px 0 var(--edge), 0 1px 0 var(--shadow), 0 3px 8px #00000040;transform:translateY(3px)}.btn:focus-visible,.tower-opt:focus-visible,.upgrade:focus-visible,.map-card:focus-visible,.tower-btn:focus-visible,input:focus-visible{outline:3px solid var(--gold);outline-offset:3px}.btn.primary{--bg:var(--orange);--edge:#d8652f;--shadow:var(--orange-dark);color:#fff;text-shadow:0 2px #0003}.btn.ghost{--bg:#ffffff1a;--edge:#ffffff0d;--shadow:#0000004d;color:var(--cream)}.btn.danger{--bg:#ffd9d9;--edge:#f4b9b9;--shadow:#b56a6a;color:#7a1d2a}.btn.big{padding:14px 34px 16px;font-size:22px}.btn.small{border-radius:10px;padding:8px 12px 9px;font-size:14px}.btn:disabled{filter:grayscale(.7)brightness(.7);cursor:default;transform:none}.link{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;font-size:13px;text-decoration:underline}kbd{font:inherit;color:inherit;opacity:.85;background:#0000002e;border-radius:5px;padding:1px 5px;font-size:11px;font-weight:800}kbd.p,body[data-input=touch] kbd.k,body[data-input=pad] kbd.k{display:none}body[data-input=pad] kbd.p{display:inline}.ico{flex:none;display:inline-block}.ico.coin{background:radial-gradient(circle at 35% 30%, #fff3b0 0 18%, var(--gold) 40%, #d9901a 100%);border-radius:50%;width:1em;height:1em;box-shadow:inset 0 0 0 2px #b8730f,0 1px #0000004d}.ico.heart{background:linear-gradient(135deg, #ffd6f3 0%, var(--pink) 45%, #b8389a 100%);clip-path:polygon(50% 0,100% 38%,50% 100%,0 38%);filter:drop-shadow(0 0 6px #ff7ad9b3);width:.9em;height:1.15em}.hud{pointer-events:none;padding:max(10px, env(safe-area-inset-top)) max(12px, env(safe-area-inset-right)) max(10px, env(safe-area-inset-bottom)) max(12px, env(safe-area-inset-left));position:absolute;inset:0}.hud>*{pointer-events:auto}.hud-top{pointer-events:none;align-items:center;gap:10px;display:flex}.hud-top>*{pointer-events:auto}.hud-top .grow{pointer-events:none;flex:1}.stat{background:var(--panel);border:2px solid var(--panel-edge);border-radius:999px;align-items:center;gap:8px;padding:6px 16px 6px 12px;font-size:20px;font-weight:900;transition:transform .15s;display:inline-flex;box-shadow:0 4px #00000040}.stat b{font-variant-numeric:tabular-nums;min-width:2ch}.stat.wave{color:var(--muted);gap:6px;font-size:15px}.stat.wave b{color:var(--cream);min-width:0;font-size:20px}.stat.wave span{font-weight:800}.stat.wave i{font-style:normal}.stat.lives.low{border-color:var(--red);animation:.8s ease-in-out infinite alternate low}.stat.bump{transform:scale(1.25)}.stat.gold.deny{animation:.35s deny}@keyframes low{to{box-shadow:0 4px #00000040,0 0 18px #ff5d6ccc}}@keyframes deny{25%{border-color:var(--red);transform:translate(-6px)}75%{border-color:var(--red);transform:translate(6px)}}.btn.icon{border-radius:50%;width:48px;height:48px;padding:0;font-size:17px}.btn.icon.fast{--bg:var(--gold);--edge:#e9a91f;--shadow:#a8720a}.pause-ico{border-left:5px solid var(--ink);border-right:5px solid var(--ink);width:14px;height:16px}.turn{gap:6px;display:flex}.turn svg.flip{transform:scaleX(-1)}.build-dock{left:max(12px, env(safe-area-inset-left));bottom:max(10px, env(safe-area-inset-bottom));pointer-events:none;flex-direction:column;align-items:flex-start;gap:8px;display:flex;position:absolute}.build-dock>*{pointer-events:auto}.build-bar{background:var(--panel);border:2px solid var(--panel-edge);border-radius:18px;gap:8px;padding:8px;display:flex;box-shadow:0 5px #00000040}.tower-btn{appearance:none;width:70px;color:var(--cream);font:inherit;cursor:pointer;background:#ffffff12;border:2px solid #0000;border-radius:12px;flex-direction:column;align-items:center;padding:2px 2px 4px;transition:transform .1s,background .15s;display:flex;position:relative}.tower-btn:hover{background:#ffffff24;transform:translateY(-2px)}.tower-btn.active,.tower-btn.armed{border-color:var(--gold);background:#ffc23d2e}.build-dock.target .build-bar{border-color:var(--gold);box-shadow:0 5px #00000040,0 0 0 4px #ffc23d40}.build-dock.target .tower-btn:not(.poor){animation:1.2s ease-in-out infinite nudge}.build-dock.target .tower-btn:nth-child(2){animation-delay:.1s}.build-dock.target .tower-btn:nth-child(3){animation-delay:.2s}.build-dock.target .tower-btn:nth-child(4){animation-delay:.3s}@keyframes nudge{50%{transform:translateY(-3px)}}.build-info{background:var(--panel);border:2px solid var(--panel-edge);border-radius:14px;width:280px;max-width:calc(100vw - 24px);padding:8px 12px;animation:.12s ease-out pop-in;box-shadow:0 5px #00000040;pointer-events:none!important}.build-info .info-head{align-items:baseline;gap:8px;display:flex}.build-info .info-head b{font-size:16px}.build-info .role{text-transform:uppercase;letter-spacing:.05em;color:var(--cyan);flex:1;font-size:11px;font-weight:800}.build-info p{color:var(--muted);margin:3px 0 0;font-size:13px;line-height:1.3}.build-info em{color:var(--gold);margin-top:4px;font-size:12px;font-style:normal;font-weight:800;display:block}.hud.side-bar .build-dock{flex-direction:row-reverse;align-items:center;top:50%;bottom:auto;translate:0 -50%}.hud.side-bar .build-bar{flex-direction:column}.hud.side-bar .build-info{width:230px}.tower-btn.poor{opacity:.45}.tower-btn img{width:52px;height:52px}.tower-btn kbd,.tower-opt kbd{position:absolute;top:4px;left:4px}.cost{color:var(--gold);align-items:center;gap:4px;font-size:14px;font-weight:900;display:inline-flex}.wave-box{right:max(12px, env(safe-area-inset-right));bottom:max(10px, env(safe-area-inset-bottom));align-items:center;gap:10px;display:flex;position:absolute}.preview{background:var(--panel);border:2px solid var(--panel-edge);border-radius:14px;gap:6px;padding:5px 8px;display:flex}.preview:empty{display:none}.chip{align-items:center;gap:2px;font-size:14px;font-weight:900;display:inline-flex}.chip img{width:32px;height:32px}.chip.elite{color:var(--gold)}.btn.pulse{animation:1.4s ease-in-out infinite pulse}@keyframes pulse{50%{box-shadow:inset 0 -4px 0 #d8652f, 0 4px 0 var(--orange-dark), 0 0 0 6px #ef7d4559, 0 8px 22px #ef7d4580}}.popup{background:var(--panel);border:2px solid var(--panel-edge);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);z-index:5;border-radius:18px;width:320px;max-width:calc(100vw - 16px);padding:10px;position:absolute;overflow-y:auto;box-shadow:0 6px #0000004d,0 16px 40px #00000059}.popup.left{left:max(12px, env(safe-area-inset-left))}.popup.right{right:max(12px, env(safe-area-inset-right))}.popup.open.left{animation:.18s ease-out slide-left}.popup.open.right{animation:.18s ease-out slide-right}@keyframes slide-left{0%{opacity:0;transform:translate(-30px)}}@keyframes slide-right{0%{opacity:0;transform:translate(30px)}}@keyframes pop-in{0%{opacity:0;transform:scale(.85)translateY(10px)}}.popup-head{align-items:center;gap:8px;margin-bottom:8px;font-size:16px;display:flex}.popup-head>b{flex:1;padding-left:4px}.head-icon{width:46px;height:46px}.head-text{flex-direction:column;flex:1;line-height:1.2;display:flex}.head-text b{font-size:18px}.head-text span{color:var(--muted);font-size:12px;font-weight:700}.close{appearance:none;color:var(--cream);cursor:pointer;background:#ffffff1a;border:0;border-radius:50%;width:30px;height:30px;font-size:20px;line-height:1}.popup-row{gap:8px;display:flex}.popup-row.small{justify-content:space-between;margin-top:8px}.tower-opt,.upgrade{appearance:none;min-width:0;color:var(--cream);font:inherit;cursor:pointer;background:#ffffff12;border:2px solid #ffffff14;border-radius:12px;flex-direction:column;flex:1 1 0;align-items:center;padding:4px 4px 6px;transition:transform .1s,background .15s,border-color .15s;display:flex;position:relative}.tower-opt:hover:not(:disabled),.upgrade:hover:not(:disabled),.tower-opt:focus-visible,.upgrade:focus-visible{border-color:var(--gold);background:#ffffff29;transform:translateY(-2px)}.tower-opt:disabled,.upgrade:disabled{opacity:.45;cursor:default}.tower-opt img{width:58px;height:58px}.tower-opt .name{white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:11.5px;font-weight:800;overflow:hidden}.popup-info{color:var(--muted);min-height:2.6em;margin:8px 4px 2px;font-size:13px;line-height:1.3}.popup-info b{color:var(--cream)}.popup-row.upgrades{flex-direction:column;gap:6px}.upgrade{text-align:left;grid-template-rows:auto auto;grid-template-columns:48px 1fr auto;align-items:center;column-gap:8px;padding:5px 8px 5px 5px;display:grid}.upgrade img{grid-row:span 2;width:48px;height:48px}.upgrade .name{align-self:end;font-size:15px;font-weight:900}.upgrade .blurb{color:var(--muted);grid-area:2/2;align-self:start;font-size:11.5px;line-height:1.25}.upgrade .cost{grid-area:1/3/span 2}.upgrade kbd{position:absolute;top:3px;left:3px}.upgrade.branch-a{border-color:#ffc23d73}.upgrade.branch-b{border-color:#4fd6ff73}.choose{color:var(--gold);margin:0 4px 6px;font-size:12px;font-weight:700}.maxed{text-align:center;color:var(--muted);flex:1;margin:6px 0;font-weight:800}.stats{flex-wrap:wrap;gap:4px 12px;margin:0 4px 10px;font-size:14px;font-weight:900;display:flex}.stats span{align-items:baseline;gap:5px;display:inline-flex}.stats i{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-style:normal;font-weight:700}.stats .warn{color:#ffb0b8;font-size:12px}.banner{text-align:center;opacity:0;position:absolute;top:26%;left:50%;transform:translate(-50%,-50%);pointer-events:none!important}.banner h2{letter-spacing:.02em;color:var(--cream);text-shadow:0 4px 0 var(--purple-dark), 0 8px 24px #00000080;white-space:nowrap;margin:0;font-size:clamp(34px,6vw,64px);font-weight:900}.banner p{color:var(--gold);text-shadow:0 2px #0006;margin:4px 0 0;font-size:18px;font-weight:800}.banner.small h2{font-size:clamp(26px,4vw,40px)}.banner.show{animation:2s ease-out forwards banner}@keyframes banner{0%{opacity:0;transform:translate(-50%,-50%)scale(.6)}12%{opacity:1;transform:translate(-50%,-50%)scale(1.08)}20%{transform:translate(-50%,-50%)scale(1)}80%{opacity:1}to{opacity:0;transform:translate(-50%,-60%)scale(1)}}.tip{background:var(--cream);width:min(520px,100vw - 24px);color:var(--ink);text-align:center;z-index:4;border-radius:16px;padding:12px 16px 8px;position:absolute;top:76px;left:50%;translate:-50%;box-shadow:0 5px #9c8a6a,0 14px 30px #00000059;pointer-events:none!important}.tip.show{animation:.25s ease-out pop-in}.tip p{margin:0 0 4px;font-size:16px;font-weight:800;line-height:1.35}.tip .link{color:#7a7196;pointer-events:auto}.tip.low{text-align:left;align-items:center;gap:12px;padding:8px 14px;display:flex}.tip.low p{margin:0;font-size:14px;line-height:1.3}.tip.low .link{white-space:nowrap}.vignette{opacity:0;position:absolute;inset:0;box-shadow:inset 0 0 120px 30px #ff2846bf;pointer-events:none!important}.vignette.on{animation:.6s ease-out hurt}@keyframes hurt{0%{opacity:1}}.float-text{white-space:nowrap;pointer-events:none;text-shadow:0 2px #0000008c,0 0 8px #00000059;font-size:16px;font-weight:900;position:absolute;top:0;left:0}.float-text.gold{color:var(--gold)}.float-text.hurt{color:var(--red);font-size:24px}.float-text.swarm{color:#fff;text-shadow:0 3px 0 var(--purple-dark), 0 0 16px #ffc23de6;font-size:26px}.debug{background:#00000080;border-radius:6px;padding:2px 8px;font-size:12px;position:absolute;top:70px;left:50%;transform:translate(-50%);pointer-events:none!important}.screen{z-index:10;justify-content:center;align-items:center;padding:16px;display:flex;position:absolute;inset:0;overflow:auto}.screen-loading{background:var(--ink)}.screen-pause,.screen-results,.screen-settings,.screen-credits,.screen-maps{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#14112899;animation:.2s fade}.screen-title{background:linear-gradient(90deg,#1411288c 0%,#14112800 70%);justify-content:flex-start;padding-left:max(5vw,24px)}@keyframes fade{0%{opacity:0}}.center{text-align:center;flex-direction:column;align-items:center;width:100%;max-width:520px;margin:auto;display:flex}.screen-title .center{text-align:left;align-items:flex-start;max-width:440px;margin:auto 0}.center.wide{max-width:980px}.panel{background:var(--panel);border:2px solid var(--panel-edge);border-radius:24px;padding:24px 28px;animation:.22s ease-out pop-in;box-shadow:0 8px #0000004d,0 24px 60px #0006}h1{text-shadow:0 3px 0 var(--purple-dark);margin:0 0 12px;font-size:34px;font-weight:900}.muted{color:var(--muted);margin:-4px 0 14px;font-weight:700}.logo{text-transform:uppercase;letter-spacing:.02em;flex-direction:column;margin-bottom:18px;font-size:54px;font-weight:900;line-height:.88;display:flex}.logo.big{font-size:clamp(54px,9vw,96px)}.logo span:first-child{background:linear-gradient(180deg, #fff 0%, #ffd6f3 40%, var(--pink) 100%);color:#0000;filter:drop-shadow(0 5px #7a2a6e)drop-shadow(0 12px 20px #ff7ad959);-webkit-background-clip:text;background-clip:text}.logo span:last-child{background:linear-gradient(180deg, #fff 0%, #ffe7a8 45%, var(--orange) 100%);color:#0000;filter:drop-shadow(0 5px #8a3a17)drop-shadow(0 12px 20px #ef7d4559);-webkit-background-clip:text;background-clip:text;margin-left:.5em}.tagline{color:var(--cream);text-shadow:0 2px 6px #0009;max-width:380px;margin:0 0 22px;font-size:18px;font-weight:700}.menu{flex-direction:column;gap:14px;min-width:240px;display:flex}.menu.row{flex-flow:wrap;justify-content:center;margin-top:18px}.foot{color:var(--muted);margin-top:26px;font-size:12px}.bar{background:#ffffff1a;border-radius:999px;width:260px;height:14px;margin:6px 0 16px;overflow:hidden}.bar i{background:linear-gradient(90deg, var(--pink), var(--orange));width:0;height:100%;transition:width .1s;display:block}.maps{grid-template-columns:repeat(3,1fr);gap:16px;width:100%;display:grid}.map-card{appearance:none;width:100%;font:inherit;color:var(--cream);text-align:left;cursor:pointer;background:linear-gradient(160deg,#4f9d5a 0%,#2f6a4a 55%,#6b4a3a 100%);border:3px solid #ffffff1f;border-radius:20px;flex-direction:column;gap:4px;min-height:210px;padding:18px;transition:transform .12s,border-color .15s;display:flex;position:relative;overflow:hidden;box-shadow:0 6px #0000004d}.map-card.snow{color:var(--ink);background:linear-gradient(160deg,#cfe3ff 0%,#8ea6dd 50%,#4f5a99 100%)}.map-card:nth-child(2){background:linear-gradient(160deg,#5aa7c9 0%,#3f7f6a 55%,#6b4a3a 100%)}.map-card:hover:not(:disabled){border-color:var(--gold);transform:translateY(-4px)rotate(-.5deg)}.map-card.locked{filter:grayscale(.8)brightness(.6);cursor:default}.map-card .num{opacity:.18;font-size:110px;font-weight:900;position:absolute;top:-14px;right:12px}.map-card .name{text-shadow:0 2px #00000040;font-size:26px;font-weight:900}.map-card.snow .name{text-shadow:none}.map-card .blurb{opacity:.9;min-height:2.6em;font-size:14px;font-weight:700}.map-card .meta{opacity:.75;text-transform:uppercase;letter-spacing:.05em;font-size:12px;font-weight:800}.map-card .stars{gap:6px;margin-top:auto;padding-top:10px;display:flex}.stars i,.big-stars i{clip-path:polygon(50% 0,61% 35%,98% 35%,68% 57%,79% 91%,50% 70%,21% 91%,32% 57%,2% 35%,39% 35%);background:#0000004d;width:26px;height:26px}.stars i.on{background:linear-gradient(180deg, #fff3b0, var(--gold) 60%, #e08a12)}.map-card .best{font-size:13px;font-weight:800}.field{border-bottom:1px solid #ffffff14;justify-content:space-between;align-items:center;gap:20px;width:100%;padding:10px 0;font-size:17px;font-weight:800;display:flex}.field input[type=range]{width:180px;accent-color:var(--orange)}.btn.toggle{min-width:84px}.keys{color:var(--muted);margin-top:18px;font-size:12px;line-height:1.8}.keys p{margin:0}.hidden-back{display:none}.big-stars{gap:14px;margin:4px 0 14px;display:flex}.big-stars i{width:64px;height:64px}.big-stars i.pop{background:linear-gradient(180deg, #fff3b0, var(--gold) 60%, #e08a12);filter:drop-shadow(0 0 10px #ffc23dcc);animation:.4s cubic-bezier(.3,1.8,.5,1) star-pop}@keyframes star-pop{0%{transform:scale(.2)rotate(-40deg)}}.score-row{justify-content:center;gap:24px;display:flex}.score-row div{flex-direction:column;display:flex}.score-row span{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:12px;font-weight:800}.score-row b{font-variant-numeric:tabular-nums;font-size:26px}.new-best{color:var(--gold);margin:12px 0 0;font-weight:900;animation:.8s ease-in-out infinite alternate pulse-text}@keyframes pulse-text{to{transform:scale(1.08)}}.panel.lost h1{color:#ffc0c8}#rotate{display:none}@media (orientation:portrait) and (pointer:coarse){#rotate{z-index:100;background:var(--ink);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:20px;padding:24px;font-size:18px;font-weight:800;display:flex;position:fixed;inset:0}.rotate-phone{border:5px solid var(--cream);border-radius:12px;width:54px;height:90px;animation:1.6s ease-in-out infinite turn}}@keyframes turn{40%,to{transform:rotate(-90deg)}}@media (height<=520px){.stat{padding:4px 12px 4px 9px;font-size:16px}.stat.wave b{font-size:16px}.btn.icon{width:40px;height:40px;font-size:14px}.build-bar{gap:5px;padding:5px}.tower-btn{width:54px}.tower-btn img{width:38px;height:38px}.btn{padding:8px 14px 9px;font-size:15px}.btn.big{padding:10px 24px 12px;font-size:18px}.chip img{width:24px;height:24px}.popup{width:270px;padding:7px}.tower-opt img{width:42px;height:42px}.upgrade{grid-template-columns:36px 1fr auto}.upgrade img{width:36px;height:36px}.upgrade .blurb{font-size:10.5px}.popup-info{min-height:0;font-size:12px}.stats{margin-bottom:6px;font-size:12px}.logo.big{font-size:48px}.tagline{margin-bottom:12px;font-size:15px}.menu{gap:10px}.panel{padding:14px 18px}h1{margin-bottom:8px;font-size:26px}.maps{gap:10px}.map-card{min-height:150px;padding:12px}.map-card .name{font-size:20px}.big-stars i{width:44px;height:44px}.tip{padding:8px 12px 4px;top:58px}.tip.low{padding:6px 10px}.tip.low p{font-size:13px}.tip p{font-size:14px}.keys{display:none}}
