:root{color-scheme:dark;--bg:#0b111c;--panel:#121e2d;--line:#2a3b4f;--ink:#f0f2ec;--muted:#a4b4c6;--gold:#f2cf83;--ice:#8ed8e4;--coral:#f4a58e;font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif}
*{box-sizing:border-box}html{min-width:280px;background:var(--bg)}body{margin:0;color:var(--ink);background:radial-gradient(ellipse at 50% 0,#1b2c40 0,#0b111c 68%);min-height:100vh}
button,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{font:inherit;cursor:pointer;color:inherit;border:1px solid var(--line)}button:disabled{cursor:default}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible{outline:3px solid #fff4cb;outline-offset:3px}
.game-shell{width:min(100%,460px);padding:10px 12px max(12px,env(safe-area-inset-bottom));margin:auto;display:grid;gap:8px}.topbar{display:flex;gap:6px;align-items:center;min-width:0}.icon-button{width:44px;height:44px;flex:0 0 44px;display:inline-flex;justify-content:center;align-items:center;border:1px solid #34475c;border-radius:13px;background:#152335;font-size:23px}.back{font-size:34px;line-height:1}.brand{flex:1;min-width:0;padding-left:2px}h1,h2,p{margin:0}h1{font-size:20px;letter-spacing:2px;line-height:1.3;font-weight:800;white-space:nowrap}.brand p{font-size:10px;letter-spacing:1px;color:var(--muted);margin-top:2px}
.stats{display:grid;grid-template-columns:1fr 1fr 1fr;background:#142133;border:1px solid var(--line);border-radius:14px;padding:7px 0}.stats>div{padding:0 10px;display:flex;align-items:center;justify-content:space-between;gap:3px}.stats>div+div{border-left:1px solid var(--line)}.stats>div>span{font-size:10px;line-height:1.45;width:24px;color:#b7c3cf}.stats strong{font-size:23px;line-height:1;font-variant-numeric:tabular-nums;color:var(--gold)}.stats strong span{font-size:11px;color:var(--muted);font-weight:500}.stats .danger{color:var(--coral)}
.map-card{background:#101b2a;border:1px solid var(--line);border-radius:18px;overflow:hidden}.map-kicker{position:relative;z-index:2;display:flex;gap:8px;justify-content:space-between;padding:8px 11px 0;font-size:10px;color:#b3c4d6;letter-spacing:.2px}#map-route{color:var(--gold)}.battlefield{position:relative;width:100%;aspect-ratio:4 / 3}#map-canvas{display:block;width:100%;height:100%}.slots{position:absolute;inset:0;pointer-events:none}
.slot{position:absolute;width:44px;height:44px;left:var(--x);top:var(--y);transform:translate(-50%,-50%);background:#1a2b3c;border:1.5px solid #6d8196;border-radius:50%;color:#d9e2ec;font-size:21px;font-weight:750;pointer-events:auto;display:flex;align-items:center;justify-content:center;gap:2px;line-height:1;box-shadow:0 2px 8px #06111b99}.slot::after{content:'+';position:absolute;font-size:10px;bottom:2px;color:#aab7c4}.slot.built::after{display:none}.slot.built{flex-direction:column;gap:1px;background:#203348}.slot .slot-top{font-size:12px;font-weight:800;color:#ebf0f6;display:flex;gap:4px;align-items:center}.slot .tower-glyph{font-size:17px;color:var(--gold)}.slot .slot-level{font-size:9px;color:#c2d0df;letter-spacing:1px}.slot.frost .tower-glyph{color:var(--ice)}.slot.cannon .tower-glyph{color:var(--coral)}.slot[aria-pressed="true"]{border:3px solid var(--gold);background:#283b4a;box-shadow:0 0 0 3px #f2cf831a}
.message{min-height:31px;padding:7px 11px;background:#162537;color:#d4dfec;font-size:11px;line-height:1.5;border-top:1px solid #25394b}.message.warning{color:#ffc9a7}

.preview-card,.tower-card{border:1px solid var(--line);background:#121f2e;border-radius:14px;padding:10px 11px;min-width:0}.section-title{display:flex;align-items:center;gap:5px;justify-content:space-between}.section-title h2{font-size:12px;letter-spacing:.3px}.section-title>span{font-size:10px;color:var(--muted);white-space:nowrap}
.enemy-preview{display:flex;gap:7px;flex-wrap:wrap;margin-top:7px}.enemy-chip{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:4px 7px;border-radius:7px;background:#213046;border:1px solid #3b4c61;white-space:nowrap}.enemy-chip .enemy-glyph{color:#f4b69c;font-size:13px}.enemy-chip .enemy-info{color:#b6c5d4;font-size:10px}.wave-hint{color:#b5c2d0;font-size:10px;margin-top:7px;line-height:1.5}
.route-picker{display:grid;grid-template-columns:1fr 1fr;gap:8px}.route-button{min-height:52px;border-radius:12px;background:#152437;padding:7px 6px;display:flex;flex-direction:column;align-items:center;gap:3px}.route-button strong{font-size:13px;letter-spacing:1px}.route-button span{font-size:10px;color:#b8c6d5}.route-button.selected{border:2px solid var(--gold);background:#34322d;padding:6px 5px}.route-button.selected strong{color:#ffe2a4}#copper-route.selected{border-color:var(--ice);background:#153643}#copper-route.selected strong{color:#b7f0f8}.route-button:disabled{opacity:.68}.route-button.selected:disabled{opacity:1}
.tower-card{min-height:137px}.tower-description{margin-top:6px;font-size:10px;line-height:1.55;color:#bdcbd9;min-height:17px}.tower-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin-top:7px}.build-button{min-height:62px;padding:5px 3px;border-radius:10px;background:#1e3044;display:flex;flex-direction:column;align-items:center;gap:3px}.build-button strong{font-size:12px;color:var(--gold)}.build-button span{font-size:12px;font-weight:700}.build-button small{font-size:9px;color:#bbcad9}.build-button:disabled{background:#172536;border-color:#2c3c4e;color:#91a1b4}.build-button:disabled strong{color:#aeb9c4}.build-button:disabled small{color:#8294a8}
.tower-options.upgrade-options{grid-template-columns:1fr}.upgrade-button{min-height:54px;padding:7px 10px;border-radius:11px;background:#253d50;display:flex;flex-direction:column;justify-content:center;gap:4px;align-items:flex-start}.upgrade-button strong{font-size:12px;color:#ffe1a0}.upgrade-button span{font-size:10px;color:#c0d0de;text-align:left;line-height:1.5}.upgrade-button:disabled{background:#1a2a3b}.upgrade-button:disabled strong{color:#aab9c8}
.action-bar{display:flex;gap:7px;padding:7px;margin:0 -3px;background:#0c1724ef;border:1px solid #324454;border-radius:16px;position:sticky;bottom:max(7px,env(safe-area-inset-bottom));z-index:10;box-shadow:0 4px 24px #050a12aa}.primary-button{min-height:46px;border-radius:11px;background:var(--gold);border:1px solid #ffe1a8;color:#22271f;font-weight:800;font-size:14px;display:flex;align-items:center;justify-content:center;gap:15px;padding:8px 12px;flex:1}.primary-button span{font-size:19px}.primary-button:disabled{color:#94a4b4;border-color:#415063;background:#25384c}.small-button{min-width:50px;min-height:46px;background:#1a2b3e;border-radius:11px;font-size:13px;font-weight:700}.small-button:disabled{color:#718599;background:#152332;border-color:#28394a}.small-button.is-paused{border-color:var(--ice);color:#baf3ff}.footnote{color:#8d9fb4;font-size:10px;text-align:center;padding-bottom:3px;line-height:1.5}
dialog{width:min(400px,calc(100vw - 24px));max-height:calc(100dvh - 32px);overflow-y:auto;margin:auto;padding:17px;border-radius:20px;border:1px solid #59708a;color:var(--ink);background:#132335;box-shadow:0 20px 80px #0009}dialog::backdrop{background:#050b15d9;backdrop-filter:blur(5px)}.dialog-top{display:flex;justify-content:space-between;align-items:center;gap:10px}.dialog-top h2{font-size:19px;letter-spacing:2px}.dialog-lead{font-size:15px;color:var(--gold);margin-top:14px}.instructions{padding-left:21px;margin:16px 0 12px;font-size:12px;color:#c4d1df;line-height:1.8}.instructions li{margin-bottom:9px}.instructions strong{color:#f0f2ec}.manual-note{font-size:11px;line-height:1.8;color:#aabed2;margin:12px 0 17px;padding:12px;background:#0e1b2a;border-radius:11px}.manual-note p+p{margin-top:8px}.wide{width:100%}.eyebrow{font-size:11px;color:var(--gold);letter-spacing:3px}
.result-symbol{font-size:52px;line-height:1;color:var(--gold);text-align:center;margin:15px 0 11px}.result-title{text-align:center;font-size:26px;letter-spacing:4px}.result-subtitle{color:#c0cddd;text-align:center;font-size:12px;margin:9px 0 19px;line-height:1.7}.result-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.result-metrics div{background:#1e3249;border-radius:12px;padding:12px 3px;text-align:center}.result-metrics strong{display:block;font-size:22px;color:#ffe0a1;font-variant-numeric:tabular-nums}.result-metrics span{display:block;color:#b3c4d6;font-size:10px;margin-top:5px}.result-leaks{font-size:11px;text-align:center;margin:15px 0 8px;color:#eac1a9;line-height:1.7}.result-tip{font-size:11px;line-height:1.8;color:#b5c6d8;margin:12px 0 18px;background:#0e1c2b;border-radius:10px;padding:10px 12px}.secondary-button{background:#1c3045;border-radius:11px;min-height:44px;margin-top:8px;font-size:12px}.noscript{margin:12px;padding:12px;color:#ffd0a5}
@media(max-width:370px){.game-shell{padding:7px 9px 12px;gap:7px}h1{font-size:18px;letter-spacing:1px}.brand p{font-size:9px;letter-spacing:0}.stats>div{padding:0 8px}.stats strong{font-size:21px}.map-kicker{font-size:9px;padding:7px 9px 0}.preview-card,.tower-card{padding:9px}.tower-card{min-height:130px}.enemy-preview{gap:5px}.enemy-chip{font-size:10px;padding:3px 5px;gap:3px}.enemy-info{font-size:9px!important}}
@media(min-width:600px){.game-shell{padding-top:24px;padding-bottom:24px}.battlefield{max-height:320px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
