:root{color-scheme:light;--ink:#304944;--muted:#71847d;--orange:#f99548;--line:#e6eadc}*{box-sizing:border-box}body{margin:0;background:#fffdf5;color:var(--ink);font-family:'Trebuchet MS',Arial,sans-serif;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}.app{max-width:1100px;margin:auto;padding:18px 24px}header{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.identity{display:flex;gap:16px;align-items:center}.identity>img{width:64px;height:64px;object-fit:contain}.eyebrow{font-size:10px;letter-spacing:1.8px;font-weight:bold;color:#82958a}h1{font-size:32px;letter-spacing:-1px;margin:3px 0}.identity p{font-size:13px;color:var(--muted);margin:0}.top-actions{display:flex;gap:8px}button{font:inherit;font-size:14px;font-weight:bold;cursor:pointer;border:1px solid var(--line);background:white;color:var(--ink);border-radius:12px;padding:12px 17px;min-height:44px;transition:background .15s,transform .15s}button:hover:not(:disabled){background:#fff4d7;transform:translateY(-1px)}button:focus-visible{outline:3px solid #429dba;outline-offset:3px}button:disabled{opacity:.44;cursor:default}.primary{background:var(--orange);border-color:#e98536;color:#492b19;box-shadow:0 3px 0 #dc7d34}.primary:hover:not(:disabled){background:#ffa95f}.layout{display:grid;grid-template-columns:minmax(0,1fr) 266px;gap:24px;align-items:start}.battle{min-width:0;background:#fff;border:1px solid var(--line);border-radius:23px;overflow:hidden;box-shadow:0 8px 30px #42543107}.hud{display:flex;gap:20px;align-items:center;padding:17px 20px}.map-name{display:flex;align-items:center;gap:8px;margin-right:auto;max-width:165px;font-size:14px;line-height:1.2}.sun{color:#eeb536;font-size:30px}.stat{display:flex;gap:7px;align-items:center}.stat small,.detail-stats small{display:block;font-size:9px;letter-spacing:1px;color:var(--muted);margin-bottom:2px}.stat b{font-size:21px;white-space:nowrap}.coin{color:#e8b52f;font-size:27px;text-shadow:0 2px #bc8a20}.heart{color:#e9756c;font-size:24px}.flag{color:#6d9dcc;font-size:27px}#board{width:100%;aspect-ratio:16/11;position:relative;background:#b6e796;overflow:hidden}canvas{display:block;touch-action:none}#plot-controls{position:absolute;inset:0;z-index:2;pointer-events:none}.plot-hit{position:absolute;pointer-events:auto;width:11%;aspect-ratio:1;transform:translate(-50%,-50%);padding:0;min-height:0;border:0;background:transparent;border-radius:50%;color:transparent}.plot-hit:hover:not(:disabled){background:#fff3;transform:translate(-50%,-50%)}.plot-hit:focus-visible{outline:3px dashed #328e72;outline-offset:-6px}.battle-footer{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line)}#message{font-size:13px;line-height:1.4;margin:0;flex:1;color:#617d6c;min-height:20px}#speed{font-size:12px;white-space:nowrap}.incoming{display:flex;gap:12px;align-items:center;padding:15px 18px}.incoming>span{font-size:9px;letter-spacing:1px;color:#849087}.incoming>div{display:flex;flex-wrap:wrap;gap:5px;flex:1}.enemy-chip{font-size:10px;border-radius:12px;padding:5px 7px;background:#f4f5ec;color:#697763}#send{font-size:13px;white-space:nowrap}aside{padding:20px;background:#fff;border:1px solid var(--line);border-radius:22px;box-shadow:0 8px 30px #42543105}.panel-heading{display:flex;align-items:center;justify-content:space-between}.help-button{padding:4px;width:32px;height:32px;min-height:32px;border-radius:50%;color:#869886}.build-tip{font-size:12px;line-height:1.4;color:#829287;margin:12px 0 18px;min-height:32px}#shop{display:grid;gap:10px}.tower-card{display:grid;grid-template-columns:50px 1fr;gap:10px;padding:12px;text-align:left;border-radius:15px;position:relative;background:#fafff5}.tower-card img{width:48px;height:48px;object-fit:contain;align-self:center}.tower-card strong{display:block;font-size:15px;margin-bottom:5px}.tower-card small{font-size:10px;font-weight:normal;line-height:1.45;display:block;color:#799077;min-height:30px}.tower-card .price{display:inline-block;margin-top:7px;font-size:12px;color:#af791b}.tower-card[data-type=cannon]{background:#fff7eb}.tower-card[data-type=frost]{background:#f0fbff}.tower-card[data-type=prism]{background:#faf5ff}.tower-card.active{border:2px solid #64a788;padding:11px}#tower-detail h2{font-size:22px;margin:6px 0}#tower-detail p{font-size:13px;line-height:1.6;color:var(--muted)}.detail-stats{display:flex;gap:30px;background:#f7f8f0;padding:15px;border-radius:12px;margin:18px 0}.detail-stats b{font-size:22px}.sell,#upgrade{width:100%;margin-top:10px}.sell{background:#fff9ec;color:#ac7741}footer{display:flex;justify-content:space-between;margin-top:18px;gap:4px}.text-button{font-size:11px;min-height:36px;padding:6px;border:0;background:transparent;color:#819386}.footnote{text-align:center;font-size:11px;color:#96a295;margin:22px 0}dialog{background:#fffdf7;color:var(--ink);border:1px solid #e0e7d5;border-radius:26px;padding:28px;text-align:center;max-width:min(440px,calc(100vw - 28px));width:440px;max-height:92dvh;box-shadow:0 25px 90px #48685540}dialog::backdrop{background:#d1e7d7b8;backdrop-filter:blur(6px)}dialog h2{font-size:26px;letter-spacing:-.7px;margin:12px 0}dialog p{font-size:14px;color:var(--muted);line-height:1.65}.welcome-logo{width:190px;height:190px;object-fit:contain}dialog .primary{width:100%;margin-top:10px}.tip{background:#f4f6e7;border-radius:12px;padding:12px;font-size:12px!important}#modal-actions{display:grid;gap:10px;margin-top:22px}.achievement{display:flex;align-items:center;gap:14px;padding:12px 0;text-align:left;border-bottom:1px solid var(--line)}.achievement img{width:48px;height:48px}.achievement h3{margin:0;font-size:15px}.achievement p{margin:4px 0 0;font-size:12px}.locked{opacity:.42}.map-choice{text-align:left;display:flex;justify-content:space-between;align-items:center;background:#f5faee}.map-choice small{display:block;margin-top:5px;color:var(--muted);font-weight:normal}.stars{font-size:35px;color:#e9b139;letter-spacing:8px;margin:12px 0}#tower-detail[hidden],#shop[hidden]{display:none}@media(max-width:900px){.app{padding:16px}.layout{gap:14px;grid-template-columns:minmax(0,1fr) 220px}aside{padding:14px}.hud{gap:12px;padding:12px}.map-name{max-width:105px;font-size:12px}.stat b{font-size:18px}.stat>span{display:none}.incoming{flex-wrap:wrap}.tower-card{padding:10px;grid-template-columns:40px 1fr}.tower-card img{width:40px;height:40px}.tower-card small{font-size:9px}}@media(max-width:660px){.layout{grid-template-columns:1fr}.app{padding:12px}.identity>img{width:54px;height:54px}.identity{gap:9px}h1{font-size:25px}.identity .eyebrow{font-size:8px}.identity p{display:none}header{margin-bottom:14px}.top-actions button{padding:9px 12px;font-size:12px}.hud{padding:12px;gap:14px}.map-name{max-width:none;flex:1;font-size:11px}.map-name .sun{font-size:22px}.stat b{font-size:17px}.stat small{font-size:8px}.battle-footer{padding:10px 12px}#message{font-size:11px}.incoming{padding:12px;gap:8px}.incoming>span{display:none}.enemy-chip{font-size:9px;padding:4px 5px}#send{font-size:12px;padding:11px 12px}aside{padding:14px}#shop{grid-template-columns:repeat(4,1fr);gap:7px}.tower-card{display:flex;flex-direction:column;align-items:center;text-align:center;padding:10px 4px;gap:4px}.tower-card strong{font-size:12px;margin:0}.tower-card small{display:none}.tower-card .price{margin-top:4px}.tower-card.active{padding:9px 3px}.build-tip{margin:6px 0 12px;min-height:0}footer{margin-top:9px}.footnote{margin:16px 0}.detail-stats{margin:10px 0;padding:10px}.welcome-logo{width:150px;height:150px}}@media(max-height:550px) and (min-width:661px){.app{padding:8px 14px}header{margin-bottom:8px}.identity>img{width:44px;height:44px}h1{font-size:23px}.identity .eyebrow,.identity p,.footnote{display:none}.layout{grid-template-columns:minmax(0,1fr) 200px;max-width:880px;margin:auto}.hud{padding:7px 12px}.map-name{max-width:none}.battle-footer{padding:5px 10px}.incoming{padding:7px 10px}.tower-card{padding:7px;gap:5px}.tower-card small{display:none}.tower-card img{width:32px;height:32px}.build-tip{margin:6px 0;min-height:0}.tower-card strong{font-size:13px}.tower-card .price{margin-top:0}.panel-heading .eyebrow{font-size:9px}aside{padding:10px}footer{margin-top:6px}}

@media(min-width:901px) and (min-height:551px){.app{max-width:clamp(850px,calc((100dvh - 410px)*1.455 + 338px),1100px)}}
