:root{--sky1:#6cc0ff;--sky2:#cdeeff;--ink:#1d2b4f;--ink-soft:#4d5b80;--card:#fff;--card-glass:#ffffffed;--accent:#ff6b35;--accent-dark:#d9480f;--sun:#ffc233;--good:#2bb673;--bad:#ef476f;--grass:#8fd16a;--grass-alt:#84c85f;--grass-edge:#5c9e43;--fog:#3c4b80;--fog-alt:#44558d;--fog-edge:#24305a;--radius:20px;--press:0 5px 0 #1d2b4f38;--shadow:0 6px 0 #1d2b4f1a,0 16px 34px #1d2b4f24}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{color:var(--ink);background:linear-gradient(180deg,var(--sky1)0%,var(--sky2)70%,#e9f8ff 100%)fixed;overflow-x:hidden;-webkit-tap-highlight-color:transparent;min-height:100vh;margin:0;font-family:Fredoka,ui-rounded,SF Pro Rounded,Segoe UI,system-ui,-apple-system,BlinkMacSystemFont,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}button,input{font:inherit;color:inherit}h1,h2,h3{margin:0;line-height:1.1}p{margin:0}.sky{position:fixed;pointer-events:none;z-index:-2;overflow:hidden;inset:0}.cloud{position:absolute;top:var(--y);opacity:.75;scale:var(--s);animation:drift var(--t)linear var(--o)infinite;will-change:translate;background:#fff;border-radius:64px;width:220px;height:64px;left:0}.cloud:before,.cloud:after{content:"";position:absolute;background:#fff;border-radius:50%}.cloud:before{width:90px;height:90px;top:-44px;left:34px}.cloud:after{width:120px;height:110px;top:-60px;left:90px}@keyframes drift{0%{translate:-260px}to{translate:calc(100vw + 260px)}}#app{max-width:1120px;margin:0 auto;padding:18px 16px 120px}.card{background:var(--card-glass);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.stack{display:grid;gap:14px}.row{display:flex;flex-wrap:wrap;align-items: center;gap:10px}.center{text-align:center;justify-content:center}.muted{color:var(--ink-soft)}.small{font-size:14px}.spacer{flex:1}.btn{box-shadow:var(--press);cursor:pointer;user-select:none;display:inline-flex;background:linear-gradient(#ffffff80,#fff0 55%),#fff;border:0;border-radius:16px;justify-content:center;align-items: center;gap:8px;padding:12px 20px;transition:transform 80ms,box-shadow 80ms,filter .15s;font-size:17px;font-weight:600}.btn:hover{filter:brightness(1.04)}.btn:active:not(:disabled){transform:translateY(4px);box-shadow:0 1px #1d2b4f38}.btn:disabled{opacity:.5;cursor:default}.btn:focus-visible{outline:3px solid var(--sun);outline-offset:2px}.chip:focus-visible{outline:3px solid var(--sun);outline-offset:2px}.cell:focus-visible{outline:3px solid var(--sun);outline-offset:2px}.btn.primary{background:linear-gradient(180deg,#ffffff59,#fff0 55%),var(--accent);color:#fff;box-shadow:0 5px 0 var(--accent-dark)}.btn.primary:active:not(:disabled){box-shadow:0 1px 0 var(--accent-dark)}.btn.go{background:linear-gradient(180deg,#ffffff59,#fff0 55%),var(--good);color:#fff;box-shadow:0 5px #1d8a55}.btn.go:active:not(:disabled){box-shadow:0 1px #1d8a55}.btn.big{border-radius:20px;padding:16px 26px;font-size:21px}.btn.ghost{box-shadow:none;background:#fff9}.btn.icon{padding:10px 13px;font-size:20px}.btn.wide{width:100%}.chip{cursor:pointer;background:#fff;border:3px solid #0000;border-radius:14px;padding:8px 12px;font-weight:500;box-shadow:0 3px #1d2b4f26}.chip.on{border-color:var(--accent);background:#fff4ec}.hero{text-align:center;padding:18px 0 6px}.logo{letter-spacing:1px;color:#fff;text-shadow:0 4px 0 var(--accent),0 8px 0 var(--accent-dark),0 14px 24px #0003;display:inline-block;animation:4s ease-in-out infinite wobble;margin:0;font-size:clamp(54px,13vw,104px);font-weight:700;transform:rotate(-3deg)}@keyframes wobble{50%{transform:rotate(2deg)scale(1.03)}}.tagline{color:var(--ink);margin-top:10px;font-size:20px;font-weight:500}.skyline{display:flex;justify-content:center;gap:6px;margin:14px 0 4px;font-size:clamp(30px,7vw,48px)}.skyline span{display:inline-block;animation:2.4s ease-in-out infinite bob;animation-delay:calc(var(--i)*-.3s)}@keyframes bob{50%{transform:translateY(-8px)}}.home-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:18px;margin-top:18px}@media (max-width:760px){.home-grid{grid-template-columns:1fr}}.field label{display:block;margin-bottom:6px;font-weight:600}.input{outline:none;background:#fff;border:3px solid #dfe7f5;border-radius:14px;width:100%;padding:12px 14px;font-size:18px}.input:focus{border-color:var(--sun)}.input.code{text-transform:uppercase;letter-spacing:6px;text-align:center;font-size:24px;font-weight:700}.avatars{display:flex;flex-wrap:wrap;gap:8px}.avatars .chip{padding:4px 8px;font-size:28px;line-height:1.2}.mode-card{display:grid;background:#fff;border-radius:18px;gap:10px;padding:16px;box-shadow:0 3px #1d2b4f1a}.mode-card h3{font-size:20px}.divider{text-align:center;color:var(--ink-soft);font-size:14px;font-weight:600}.rules-list{display:grid;list-style:none;gap:10px;margin:0;padding:0}.rules-list li{display:flex;align-items: flex-start;gap:10px}.rules-list .n{text-align:center;flex:none;width:32px;font-size:24px;line-height:1}.bld-guide{display:grid;gap:6px;margin-top:4px}.bld-guide div{display:flex;align-items: center;gap:8px;font-size:15px}.bld-guide b{font-weight:600}.lobby{text-align:center;max-width:620px;margin:30px auto}.room-code{letter-spacing:12px;color:var(--accent);display:inline-block;background:#fff;border-radius:24px;margin:10px 0;padding:6px 20px 6px 32px;font-size:clamp(56px,15vw,92px);font-weight:700;box-shadow:0 6px #ffd6c2}.urls{display:grid;gap:6px;margin:10px 0}.url{word-break:break-all;background:#eef4ff;border-radius:10px;padding:8px 12px;font-family:ui-monospace,Menlo,monospace;font-size:16px}.waiting-dots span{display:inline-block;animation:1.2s ease-in-out infinite bob}.waiting-dots span:nth-child(2){animation-delay:.15s}.waiting-dots span:nth-child(3){animation-delay:.3s}.topbar{display:flex;flex-wrap:wrap;align-items: center;gap:10px;margin-bottom:14px}.player-tag{display:flex;background:var(--card-glass);box-shadow:var(--shadow);border-radius:999px;align-items: center;gap:8px;padding:6px 14px 6px 6px;font-weight:600}.player-tag .av{display:grid;background:#fff;border-radius:50%;place-items: center;width:38px;height:38px;font-size:26px}.player-tag .sub{color:var(--ink-soft);display:block;font-size:12px;font-weight:500}.player-tag.away{opacity:.6}.round-badge{background:var(--sun);color:var(--ink);border-radius:999px;padding:8px 16px;font-weight:700;box-shadow:0 4px #d99a00}.status-dot{background:var(--good);display:inline-block;border-radius:50%;width:10px;height:10px}.status-dot.off{background:#aab}:root{--noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .45 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");--grain:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.035' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1.1 -.35'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E");--clouds:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='400'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.008' numOctaves='4' seed='7' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .85 0 0 0 0 .9 0 0 0 0 1 0 0 0 1.6 -.55'/%3E%3C/filter%3E%3Crect width='400' height='400' filter='url(%23n)'/%3E%3C/svg%3E")}.fx-canvas{position:fixed;pointer-events:none;z-index:40;width:100vw;height:100vh;inset:0}.board-wrap{container-type:inline-size;width:100%;max-width:460px;margin:0 auto 2.5%}.board{display:grid;grid-template-columns:repeat(10,1fr);grid-template-rows:repeat(10,1fr);aspect-ratio:1;position:relative;user-select:none;touch-action:manipulation;isolation:isolate;contain:layout style;border-radius:4.5cqw;gap:2px;width:100%;padding:3cqw}.board .layer{display:contents}.board.mine{background:var(--noise),radial-gradient(circle at 30% 20%,#6fb64e,#3f7f31 70%,#2f6527);box-shadow:inset 0 0 0 .8cqw #ffffff1f,inset 0 -1.6cqw 0 #0000002e,0 2cqw 0 #2b5a22,var(--shadow)}.board.mine .cell{background:radial-gradient(circle at 30% 25%,#ffffff38,transparent 60%),var(--noise),linear-gradient(160deg,#a6dc78,#86c95e);box-shadow:inset 0 -.4cqw #00000014}.board.mine .cell.alt{background:radial-gradient(circle at 30% 25%,#fff3,transparent 60%),var(--noise),linear-gradient(160deg,#98d36b,#79bd53)}.board.enemy{background:var(--noise),radial-gradient(circle at 50% 0%,#34477f,#1b2448 75%);box-shadow:inset 0 0 0 .8cqw #ffffff14,inset 0 -1.6cqw 0 #00000040,0 2cqw 0 #121a36,var(--shadow)}.board.enemy .cell{background:radial-gradient(circle at 30% 25%,#a0beff29,transparent 65%),var(--noise),linear-gradient(160deg,#4a5d9c,#3a4a82);box-shadow:inset 0 -.4cqw #0000002e,inset 0 0 0 1px #a0beff14}.board.enemy .cell.alt{background:radial-gradient(circle at 30% 25%,#a0beff24,transparent 65%),var(--noise),linear-gradient(160deg,#44568f,#344377)}.board.enemy{overflow:hidden}.board.enemy:after{content:"";position:absolute;pointer-events:none;z-index:1;background:var(--clouds)0 0/70cqw 70cqw;opacity:.32;animation:45s linear infinite fogdrift;will-change:transform;width:calc(100% + 70cqw);height:calc(100% + 70cqw);top:0;left:0}@keyframes fogdrift{to{transform:translate(-70cqw,-70cqw)}}.cell{position:relative;display:grid;border-radius:1.2cqw;place-items: center;transition:filter .15s,transform .15s;font-size:4.6cqw}.cell .deco{opacity:.6;pointer-events:none;filter:drop-shadow(0 .4cqw 0 #00000026)}.board .cell.can{cursor:pointer}.board.enemy .cell.can{cursor:crosshair}.board.mine .cell.can:hover{filter:brightness(1.12)}.board.enemy .cell.can:hover{filter:brightness(1.45)saturate(1.2);z-index:1;transform:scale(1.06);box-shadow:0 0 2cqw #8cb4ff99}.board.locked .cell{cursor:default}.bld{--c:#ddd;pointer-events:none;z-index:2;position:relative;background:linear-gradient(180deg,#ffffff8c,#fff0 38%),var(--noise),linear-gradient(180deg,color-mix(in srgb,var(--c)82%,white),var(--c)55%,color-mix(in srgb,var(--c)78%,black));display:flex;overflow:hidden;border-radius:2.2cqw;justify-content:center;align-items: center;gap:.8cqw;margin:.3cqw;transition:filter .4s;box-shadow:inset 0 .5cqw #ffffff8c,inset 0 -1.1cqw #0003,1.1cqw 1.4cqw #14320f52,0 .4cqw 1.6cqw #00000040}.bld:before{content:"";position:absolute;pointer-events:none;background:conic-gradient(at 62% 62%,transparent 75%,#fff6c8bf 0)0 0/2.4cqw 2.4cqw;opacity:.55;mix-blend-mode:soft-light;border-radius:.6cqw;inset:22% 12% 18%}.bld:after{content:"";position:absolute;pointer-events:none;background:linear-gradient(#0000002e,#0000),repeating-linear-gradient(90deg,#0000001f 0 1cqw,#0000 1cqw 2cqw);height:14%;min-height:1cqw;top:0;left:0;right:0}.bld.v{flex-direction:column}.bld .em{position:relative;z-index:1;display:grid;background:radial-gradient(circle at 35% 30%,#fff,#eef2f7 70%);border-radius:50%;flex:none;place-items: center;width:8.2cqw;height:8.2cqw;font-size:5.6cqw;line-height:1;box-shadow:0 .5cqw #0000002e,inset 0 -.4cqw #00000014}.bld .nm{position:relative;z-index:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#1d2b4fd9;text-shadow:0 1px #fff9;max-width:calc(100% - 8px);font-size:2.5cqw;font-weight:700;line-height:1}.bld.off{filter:saturate(.3)brightness(.85)}.bld.off .em{animation:1.4s steps(2,end) infinite blink}@keyframes blink{50%{opacity:.45}}.bld.destroyed{filter:none;background:radial-gradient(circle at 30% 40%,#00000059 0 8%,transparent 9%),radial-gradient(circle at 70% 65%,#0000004d 0 10%,transparent 11%),var(--noise),var(--noise),linear-gradient(160deg,#8a8278,#5d5750 60%,#46413c);box-shadow:inset 0 -1cqw #0000004d,.6cqw .8cqw #00000040}.bld.destroyed:before{opacity:1;mix-blend-mode:normal;background:linear-gradient(35deg,#0000 47%,#00000073 48% 51%,#0000 52%),linear-gradient(-50deg,#0000 47%,#00000059 48% 50%,#0000 51%);inset:0}.bld.destroyed:after{display:none}.bld.destroyed .em{filter:grayscale(1);opacity:.75;background:radial-gradient(circle at 35% 30%,#c9c4bd,#9a948c)}.bld.ghost{opacity:.78;z-index:4;outline:.6cqw dashed #fff;outline-offset:-.3cqw;animation:1s ease-in-out infinite hover}@keyframes hover{50%{transform:translateY(-.8cqw)}}.bld.ghost.bad{--c:#ff6b6b;outline-color:#ffe3e3;opacity:.7;animation:none}.bld.reveal{opacity:.7}.bld.reveal.destroyed{opacity:1}.mark{position:relative;pointer-events:none;z-index:3;display:grid;place-items: center;font-size:5.4cqw;line-height:1}.mark .dot{background:radial-gradient(circle at 50% 55%,#0000008c,#00000040 45%,#ffffff2e 62%,#0000 70%);border-radius:50%;width:4.2cqw;height:4.2cqw}.board.enemy .mark .dot{background:radial-gradient(circle,#dce6ffbf 0 22%,#dce6ff2e 24% 55%,#0000 60%)}.mark.warm .dot{animation:1.6s ease-in-out infinite glow;background:radial-gradient(circle,#ffd8a8 0 22%,#ff922b 30%,#ff922b40 55%,#0000 62%);border-radius:50%}@keyframes glow{50%{transform:scale(1.3);opacity:.75}}.mark.hit,.mark.burn{border-radius:1.4cqw;margin:.2cqw}.mark.hit{background:radial-gradient(circle at 50% 70%,#ff781ed9,#be1414a6 55%,#5000008c);box-shadow:0 0 2.4cqw #ff5a1eb3}.mark.burn{background:radial-gradient(circle at 50% 75%,#ff8c288c,#0000 70%)}.mark.hit span,.mark.burn span{animation:.45s ease-in-out infinite alternate flicker;display:inline-block;transform-origin:50% 90%;filter:drop-shadow(0 0 1cqw #ff7800cc)}@keyframes flicker{to{transform:scale(1.12,1.2)rotate(-4deg)}}.mark.repaired{border:.5cqw dashed var(--sun);background:#ffd54f40;border-radius:1.4cqw;margin:.2cqw}.mark.repaired span{animation:2s ease-in-out infinite bob}.mark.aim{z-index:5;position:relative;overflow:hidden;background:radial-gradient(circle,#ff5a5a59,#ff5a5a1f 70%);border-radius:1.2cqw;margin:.3cqw;box-shadow:inset 0 0 0 .4cqw #ff6e6ef2,0 0 1.4cqw #ff4d4d8c}.mark.aim .reticle{position:relative;aspect-ratio:1;animation:2.4s linear infinite reticle;border:.45cqw solid #fff;border-radius:50%;width:58%;box-shadow:0 0 .8cqw #ff4d4de6}.mark.aim .reticle:before,.mark.aim .reticle:after{content:"";position:absolute;background:#fff;border-radius:1px;top:50%;left:50%}.mark.aim .reticle:before{-webkit-mask:linear-gradient(#000 0 30%,#0000 30% 70%,#000 70%);mask:linear-gradient(#000 0 30%,#0000 30% 70%,#000 70%);width:.45cqw;height:140%;translate:-50% -50%}.mark.aim .reticle:after{-webkit-mask:linear-gradient(90deg,#000 0 30%,#0000 30% 70%,#000 70%);mask:linear-gradient(90deg,#000 0 30%,#0000 30% 70%,#000 70%);width:140%;height:.45cqw;translate:-50% -50%}@keyframes reticle{0%{transform:rotate(0)scale(1)}50%{transform:rotate(90deg)scale(.88)}to{transform:rotate(180deg)scale(1)}}.mark.fix{z-index:4;animation:.9s ease-in-out infinite pulse;background:radial-gradient(circle at 35% 30%,#8ff0c4,#20b26b);border-radius:50%;margin:12%;font-size:4cqw;box-shadow:0 0 0 .5cqw #fff,0 0 2cqw #2bb673e6}@keyframes pulse{50%{transform:scale(.85)}}.pending{visibility:hidden}.mark.pop,.bld.pop{animation:.35s cubic-bezier(.2,1.6,.4,1) both pop}@keyframes pop{0%{transform:scale(0);opacity:0}60%{transform:scale(1.4)}}.place-grid{display:grid;grid-template-columns:minmax(0,1fr)360px;align-items: start;gap:20px}@media (max-width:860px){.place-grid{grid-template-columns:1fr}}.tray{display:grid;gap:8px}.tray-item{display:flex;text-align:left;cursor:pointer;background:#fff;border:3px solid #0000;border-radius:16px;align-items: center;gap:10px;width:100%;padding:8px 12px;box-shadow:0 3px #1d2b4f1f}.tray-item.sel{border-color:var(--accent);background:#fff4ec}.tray-item.done{opacity:.6}.tray-item .em{text-align:center;width:36px;font-size:28px}.tray-item .meta{flex:1;min-width:0}.tray-item .meta b{display:block;font-weight:600}.tray-item .meta small{color:var(--ink-soft);font-size:13px}.size-pips{display:flex;gap:3px}.size-pips i{background:var(--c);border:1px solid #00000026;border-radius:3px;width:10px;height:10px}.tray-item .tick{color:var(--good);font-size:20px;font-weight:700}.hint{background:#fff8e1;border-radius:14px;padding:10px 14px;font-size:15px}.battle{display:grid;grid-template-columns:1fr 1fr;align-items: start;gap:20px}@media (max-width:860px){.battle{grid-template-columns:1fr}}.panel-title{display:flex;flex-wrap:wrap;align-items: center;gap:8px;margin-bottom:10px}.panel-title h2{font-size:22px}.panel-title .tip{color:var(--ink-soft);width:100%;font-size:14px}.services{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px;margin-top:12px}.svc{display:flex;background:#fff;border-radius:12px;align-items: center;gap:6px;padding:6px 8px;font-size:13px;box-shadow:0 2px #1d2b4f14}.svc .em{font-size:20px}.svc b{display:block;font-size:13px;font-weight:600}.svc .st{font-size:12px}.svc.working .st,.svc.standing .st{color:var(--good)}.svc.damaged .st,.svc.destroyed .st{color:var(--bad)}.svc.nopower .st,.svc.nowater .st{color:#e67700}.svc.destroyed{opacity:.55}.svc.hidden .st{color:var(--ink-soft)}.meter{overflow:hidden;background:#e3e9f6;border-radius:99px;height:12px}.meter i{display:block;background:linear-gradient(90deg,var(--good),#7bdc9e);border-radius:99px;height:100%;transition:width .6s}.meter.enemy i{background:linear-gradient(90deg,var(--bad),#ff8fa8)}.health{display:grid;gap:4px;margin-top:10px;font-size:13px;font-weight:500}.actionbar{position:fixed;left:50%;bottom:max(14px,env(safe-area-inset-bottom));z-index:20;color:#fff;display:flex;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:#1d2b4feb;border-radius:24px;align-items: center;gap:14px;width:min(760px,100% - 24px);padding:10px 10px 10px 18px;transform:translate(-50%);box-shadow:0 14px 40px #0000004d}.actionbar .counts{display:flex;flex-wrap:wrap;flex:1;gap:16px;font-size:15px;font-weight:500}.pips{display:inline-flex;vertical-align:middle;gap:4px;margin-left:4px}.pips i{background:#ffffff38;border-radius:50%;width:14px;height:14px}.pips i.on{background:var(--sun);box-shadow:0 0 8px var(--sun)}.pips.fix i.on{background:#63e6be;box-shadow:0 0 8px #63e6be}.btn.fire{min-width:150px;padding:14px 26px;font-size:22px}.btn.fire:not(:disabled){animation:1.2s ease-in-out infinite ready}@keyframes ready{50%{transform:scale(1.06)}}.btn.fire:active:not(:disabled){animation:none}.show-over{position:fixed;z-index:30;bottom:20px;left:50%;transform:translate(-50%)}.overlay{position:fixed;z-index:50;display:grid;animation:.3s both fade;background:#141e3c8c;place-items: center;padding:16px;inset:0}@keyframes fade{0%{opacity:0}}.modal{overflow:auto;animation:.45s cubic-bezier(.2,1.4,.4,1) both rise;background:#fff;border-radius:28px;width:100%;max-width:520px;max-height:90vh;padding:26px;box-shadow:0 30px 80px #00000059}@keyframes rise{0%{transform:translateY(40px)scale(.9);opacity:0}}.modal.over{text-align:center}.modal .huge{animation:2s ease-in-out infinite bob;font-size:90px;line-height:1}.modal h2{margin:8px 0;font-size:36px}.confetti{position:fixed;pointer-events:none;z-index:51;overflow:hidden;inset:0}.confetti i{position:absolute;animation:linear forwards fall;border-radius:3px;width:10px;height:16px;top:-20px}@keyframes fall{to{transform:translateY(110vh)rotate(720deg)}}#toasts{position:fixed;z-index:60;display:grid;pointer-events:none;gap:8px;width:min(460px,100% - 24px);top:14px;left:50%;transform:translate(-50%)}@media (min-width:1000px){#toasts{width:340px;top:84px;left:auto;right:16px;transform:none}}@media (max-width:860px){#toasts{top:auto;bottom:calc(max(14px,env(safe-area-inset-bottom)) + 92px);gap:6px}.toast{padding:8px 12px;font-size:14px}#toasts .toast:nth-last-child(n+3){display:none}}.toast{animation:.35s cubic-bezier(.2,1.4,.4,1) both toastIn;border-left:6px solid var(--sun);background:#fff;border-radius:16px;padding:12px 16px;font-weight:500;box-shadow:0 10px 30px #0003}.toast.good{border-left-color:var(--good)}.toast.bad{border-left-color:var(--bad)}.toast.out{animation:.3s forwards toastOut}@keyframes toastIn{0%{transform:translateY(-20px);opacity:0}}@keyframes toastOut{to{transform:translateY(-10px);opacity:0}}.banner{text-align:center;background:#fff3bf;border-radius:14px;margin-bottom:12px;padding:10px 14px;font-weight:500}@media (max-width:520px){#app{padding:12px 12px 130px}.card{padding:14px}.actionbar{gap:8px;padding:8px 8px 8px 14px}.actionbar .counts{gap:4px 10px;font-size:13px}.btn.fire{min-width:0;padding:12px 18px;font-size:19px}.bld .nm{display:none}}body:before{content:"";position:fixed;pointer-events:none;z-index:-1;background:var(--grain);opacity:.1;inset:0}@media (prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important}}.mark.recent:after{content:"";position:absolute;pointer-events:none;border:.4cqw solid #fffc;border-radius:1.2cqw;inset:6%;box-shadow:0 0 1.2cqw #ffffff80}.board.mine .mark.recent:after{border-color:#ff5a3cd9;box-shadow:0 0 1.2cqw #ff5a3c80}.bld.drop{animation:.45s cubic-bezier(.2,1.5,.4,1) both land}@keyframes land{0%{transform:translateY(-4cqw)scale(1.12);opacity:.3}}#callout{position:fixed;z-index:45;pointer-events:none;text-align:center;opacity:0;width:max-content;max-width:calc(100vw - 32px);top:36%;left:50%;translate:-50% -50%}#callout.show{animation:1.7s cubic-bezier(.2,1.3,.4,1) both callout}.callout-title{color:#fff;text-shadow:0 4px 0 var(--accent-dark),0 10px 30px #00000059;font-size:clamp(30px,8vw,62px);font-weight:700;line-height:1.05}#callout.good .callout-title{text-shadow:0 4px #1d8a55,0 10px 30px #00000059}#callout.bad .callout-title{text-shadow:0 4px #a61e4d,0 10px 30px #00000059}.callout-sub{display:inline-block;color:#fff;background:#1d2b4fe0;border-radius:999px;margin-top:10px;padding:6px 16px;font-size:clamp(14px,3.6vw,18px);font-weight:600}@keyframes callout{0%{opacity:0;transform:scale(.4)}14%{opacity:1;transform:scale(1.08)}24%{transform:scale(1)}80%{opacity:1;transform:scale(1)}to{opacity:0;transform:translateY(-24px)scale(1.06)}}.player-tag.fired{box-shadow:0 0 0 3px var(--good),var(--shadow)}.btn.icon.on{box-shadow:inset 0 0 0 2px var(--accent);background:#fff4ec}.btn.fire{position:relative;overflow:hidden}.btn.fire:not(:disabled):after{content:"";position:absolute;animation:2.2s ease-in-out infinite shine;pointer-events:none;background:linear-gradient(100deg,#0000,#ffffff73,#0000);width:40%;top:0;bottom:0;left:0}@keyframes shine{0%{transform:translate(-120%)}60%,to{transform:translate(320%)}}.lobby-grid{display:grid;grid-template-columns:auto 1fr;align-items: center;gap:24px;margin:16px 0 6px}@media (max-width:560px){.lobby-grid{grid-template-columns:1fr}}.qr-box{display:grid;justify-items:center;gap:10px}.qr{box-shadow:0 6px 0 #dfe7f5,var(--shadow);background:#fff;border-radius:22px;width:200px;padding:14px}.qr svg{display:block;width:100%;height:auto}.lobby .room-code{margin:4px 0;font-size:clamp(48px,12vw,80px)}.lobby .url{display:inline;word-break:break-all;background:#eef4ff;border-radius:8px;padding:2px 8px;font-family:ui-monospace,Menlo,monospace;font-size:15px}.lobby details{margin-top:2px}.lobby details .url{display:block;margin-top:6px}.lobby summary{cursor:pointer}.lobby .waiting{margin-top:14px}.tabs{display:none}@media (max-width:860px){.tabs{display:flex;box-shadow:var(--shadow);position:sticky;z-index:15;background:#fffc;border-radius:18px;gap:6px;margin:0 0 12px;padding:5px;top:8px}.tab{cursor:pointer;display:flex;background:0 0;border:0;border-radius:14px;flex:1;justify-content:center;align-items: center;gap:6px;padding:11px 8px;transition:background .2s,box-shadow .2s;font-size:16px;font-weight:600}.tab.on{box-shadow:0 3px 0 #1d2b4f26,inset 0 0 0 2px var(--accent);background:#fff}.tab-badge{background:var(--sun);border-radius:999px;padding:1px 8px;font-size:13px}.tab-badge.hot{background:var(--bad);color:#fff;animation:.9s ease-in-out infinite pulse}.battle[data-tab=enemy]>section:nth-child(2),.battle[data-tab=mine]>section:first-child{display:none}}
