:root{color-scheme:dark;font-family:"Malgun Gothic","Segoe UI",sans-serif;color:#f5f0d9;background:#07191a}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 50% 40%,#234338,#07191a 70%)}button{font:inherit;color:inherit;border:0;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}button:focus-visible{outline:3px solid #fff2a4;outline-offset:2px}button:disabled{cursor:default;filter:saturate(.35);opacity:.5}button:not(:disabled):active{transform:translateY(2px)}.app{width:100%;max-width:560px;height:100dvh;margin:auto;display:grid;grid-template-rows:76px minmax(240px,1fr) 242px;box-shadow:0 0 90px #0008;overflow:hidden;border-inline:1px solid #466354}.hud{z-index:3;display:flex;align-items:center;gap:13px;padding:8px 13px;background:linear-gradient(135deg,#17484d,#092a30 65%);border-bottom:3px solid #426460;box-shadow:0 4px 9px #07171380}.hud h1{font-size:24px;line-height:1.03;letter-spacing:-1.5px;white-space:pre-line;margin:0 auto 0 0;color:#f5d280;font-weight:900;text-shadow:0 2px #392817,2px 0 #392817,-2px 0 #392817,0 -2px #392817,0 4px #071d1e;transform:rotate(-3deg)}.resource{display:flex;align-items:center;gap:5px;font-size:21px;font-variant-numeric:tabular-nums}.heart{color:#fa715e;font-size:28px;filter:drop-shadow(0 2px 1px #601e21)}.coin{display:inline-flex;align-items:center;justify-content:center;width:23px;height:26px;border:2px solid #f9d584;border-radius:50%;font-weight:900;font-size:14px;color:#fff2a7;background:linear-gradient(135deg,#ffda69,#c78a23);box-shadow:1px 2px #78501d}.wave-block{font-size:10px;font-weight:800;white-space:nowrap;border-left:1px solid #46615b;padding-left:12px}.wave-block strong{font-size:14px;color:#ffdb80;margin-left:3px}#wave-track{display:flex;gap:3px;margin-top:9px}#wave-track i{width:7px;height:7px;border:1px solid #668682;border-radius:50%;background:#09272a}#wave-track i.done{border-color:#ffe392;background:#e5b44e}.metal{border:1px solid #688483;border-radius:9px;background:linear-gradient(#34585f,#16393f);box-shadow:inset 0 2px #ffffff12,0 3px #051e24;min-height:44px;padding:8px 12px;font-weight:800}#pause{font-size:21px;width:43px;padding:8px;flex-shrink:0}.battlefield{position:relative;min-height:0;overflow:hidden;background:#405a36}canvas{width:100%;height:100%;display:block;touch-action:manipulation}#map-label{position:absolute;top:12px;left:12px;padding:6px 9px;background:#102c24b8;border:1px solid #9daf6840;border-radius:5px;color:#e3e1bc;font-size:10px;pointer-events:none}.command-dock{z-index:3;padding:10px 12px 0;background:linear-gradient(120deg,#144047,#092b31);border-top:3px solid #47736f;box-shadow:0 -5px 16px #09272680;border-radius:17px 17px 0 0;margin-top:-8px}.tower-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}.tower-card{display:flex;align-items:center;gap:2px;text-align:left;height:85px;padding:3px 5px 5px 1px;border:2px solid #426d70;border-radius:12px;background:radial-gradient(ellipse at top,#2a5960,#13363d 85%);box-shadow:inset 0 2px 4px #fff1,0 3px #071f26}.tower-card.active{border-color:#ffe6a1;box-shadow:0 0 10px #e9bc5788,inset 0 0 8px #ffcf4440,0 3px #796335}.tower-card .sprite{width:56%;height:82px;flex-shrink:0}.card-copy{display:flex;flex-direction:column;gap:8px;min-width:0}.card-copy b{font-size:13px;white-space:nowrap;letter-spacing:-.5px}.price{font-size:16px;font-weight:800;white-space:nowrap}.price .coin{width:16px;height:18px;font-size:10px;vertical-align:-2px;border-width:1px;margin-right:4px}.sprite{display:block;background-repeat:no-repeat}.sprite.arrow{background-position:0 0}.sprite.cannon{background-position:33.333333% 0}.sprite.frost{background-position:66.666667% 0}.command-row{display:flex;align-items:center;gap:8px;margin-top:11px;height:56px}.selection-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}.selection-info strong{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.selection-info span{font-size:10px;color:#a9c1b9;line-height:1.35}.gold-button{display:flex;align-items:center;justify-content:center;gap:7px;min-height:48px;border:2px solid #ffe9a0;border-radius:10px;padding:8px 14px;color:#422a0d;font-weight:900;background:linear-gradient(#ffe297,#f6c351 45%,#dc9b2e);box-shadow:inset 0 2px #fff4bb,0 3px #795823,0 4px 7px #061d2170;font-size:13px;white-space:nowrap}.tower-actions{display:flex;gap:6px}.tower-actions button{padding:8px 10px;font-size:12px}.tower-actions[hidden],#next[hidden]{display:none}.speed-button{padding:8px;width:42px;flex-shrink:0}footer{display:flex;align-items:center;gap:12px;margin-top:6px;font-size:9px;color:#829f98;letter-spacing:.7px}footer #best{margin-left:auto}.text-button{min-height:32px;padding:4px 0;background:transparent;color:#abc3b8;font-size:10px}.overlay{position:absolute;inset:0;display:grid;place-items:center;padding:25px;background:linear-gradient(#092a2325,#0d252358);z-index:2}.overlay[hidden]{display:none}.overlay-card{max-width:320px;width:100%;padding:24px 18px 20px;text-align:center;border:1px solid #b3bb7960;border-radius:18px;background:linear-gradient(135deg,#163e35f5,#102b28f5);box-shadow:0 15px 45px #0a1717a0,inset 0 1px #d5d99b22}.eyebrow{font-size:10px;letter-spacing:4px;color:#c5d399}.overlay h2{margin:10px 0 12px;font-size:24px;letter-spacing:-1px;color:#ffe3a2}.overlay p{font-size:12px;line-height:1.8;color:#c1d0b9;margin:0}.overlay .gold-button{width:100%;margin-top:10px}.intro-towers{height:86px;display:flex;justify-content:center}.intro-towers .sprite{height:90px;width:68px}#toast{position:absolute;left:50%;bottom:15px;transform:translateX(-50%);padding:9px 14px;border:1px solid #b5c68f88;border-radius:18px;background:#13332deb;color:#f3edc7;font-size:11px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s}#toast.visible{opacity:1}#wave-banner{position:absolute;top:25%;left:0;right:0;text-align:center;pointer-events:none;color:#fff0b9;font-weight:900;font-size:26px;letter-spacing:3px;text-shadow:0 3px 4px #12271c,2px 0 #12271c,-2px 0 #12271c;opacity:0}#wave-banner.show{animation:banner 1.8s ease both}@keyframes banner{0%{opacity:0;transform:scale(.8)}18%,70%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1.08)}}@media(max-width:400px){.hud{gap:8px;padding:7px 9px}.hud h1{font-size:21px}.resource{font-size:18px;gap:3px}.wave-block{padding-left:7px}#wave-track{gap:2px}#wave-track i{width:6px;height:6px}#pause{width:38px}.command-dock{padding:9px 8px 0}.tower-options{gap:7px}.card-copy b{font-size:12px}.price{font-size:14px}.tower-card .sprite{width:51%}.tower-actions button{padding:8px 7px}.selection-info strong{font-size:12px}.gold-button{padding:8px 10px}.command-row{gap:6px}}@media(max-height:650px){.app{height:auto;min-height:100dvh;grid-template-rows:68px minmax(300px,1fr) 242px}.battlefield{height:calc(100dvh - 310px);min-height:300px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}#wave-banner.show{opacity:1}}
.app{position:relative}#next.floating{position:absolute;right:14px;bottom:221px;z-index:4;min-height:40px;font-size:12px}.intro-towers[hidden]{display:none}
#inspect{color:#ffdc8c;padding:0;min-height:16px;text-align:left;font-size:10px;line-height:1.2;width:fit-content}#inspect[hidden]{display:none}.selection-info{gap:3px}#class-dialog{width:min(94vw,520px);max-height:86dvh;padding:16px;border:1px solid #829d7e;border-radius:18px;background:#12352f;color:#eee5c6;overflow:auto;box-shadow:0 20px 70px #0009}#class-dialog::backdrop{background:#041c1cd9}#class-dialog header{display:flex;align-items:center;justify-content:space-between;gap:12px;position:sticky;top:-16px;background:#12352f;padding:5px 0;z-index:1}#class-dialog h2{font-size:20px;margin:0}#class-dialog h3{font-size:14px;margin:8px 0;color:#ffdd91}.class-sheet{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid #58766b55}.class-sheet img{width:65px;height:92px;object-fit:contain;flex-shrink:0}.class-sheet p,.class-sheet li,.class-note,.buff-note{font-size:12px;line-height:1.65;margin:4px 0}.class-sheet ul{padding-left:16px;margin:5px 0}.class-sheet small{color:#9befd1}.class-note{color:#b4c8bb}.buff-note{color:#a7f4cc}
.tower-options{grid-template-columns:repeat(4,minmax(0,1fr));gap:5px}.tower-card{height:85px;display:grid;grid-template-columns:1fr;padding:2px;text-align:center;position:relative}.tower-card .sprite{position:absolute;width:42px;height:58px;left:0;top:5px}.card-copy{margin-left:32px;gap:9px}.card-copy b{font-size:11px}.price{font-size:12px}.price .coin{display:none}.sprite.knight,.sprite.rogue,.sprite.mage,.sprite.support{background-size:contain;background-position:center}.sprite.knight{background-image:url('./assets/toy-v1/units/knight.png');background-size:contain;background-position:center bottom}.sprite.rogue{background-image:url('./assets/toy-v1/towers/rogue.png');background-size:contain;background-position:center bottom}.sprite.mage{background-image:url('./assets/toy-v1/towers/mage.png');background-size:contain;background-position:center bottom}.sprite.support{background-image:url('./assets/toy-v1/towers/support.png');background-size:contain;background-position:center bottom}.selection-info span{font-size:10px;overflow-wrap:anywhere}.tower-actions button{padding-inline:6px}.command-row{gap:5px}.hud .resource{font-size:16px}.intro-towers .sprite{width:60px}
@media(min-width:600px){.app{width:max(340px,calc((100dvh - 280px)*.857143));max-width:560px}}
.hud{gap:8px;padding:8px 9px}.hud h1{flex:0 0 62px;font-size:22px;word-break:keep-all;overflow-wrap:normal}.resource{font-size:18px;gap:3px}.wave-block{padding-left:7px;font-size:9px}.wave-block strong{font-size:12px}#wave-track{gap:2px}#wave-track i{width:6px;height:6px}#pause{width:38px}
html[lang="en"] .hud h1{font-size:16px;letter-spacing:-.6px}@media(max-width:360px){.hud{gap:5px;padding-inline:7px}.hud h1{flex-basis:52px;font-size:20px}.resource{font-size:16px}.wave-block{padding-left:5px}.wave-block strong{font-size:11px}#pause{width:34px}.coin{width:20px;height:23px}.heart{font-size:24px}}
.selection-info{position:relative}#inspect::after{content:"";position:absolute;inset:0}
.tower-card .tower-portrait{position:absolute;width:48px;height:76px;left:0;top:3px;pointer-events:none}.class-sheet .tower-portrait{width:65px;height:92px;flex:0 0 65px;object-fit:contain}.intro-towers .tower-portrait{width:60px;height:86px}
#open-codex{width:100%;margin-top:12px}#open-codex[hidden]{display:none}
#codex-dialog{width:min(94vw,600px);max-height:88dvh;padding:16px;border:1px solid #829d7e;border-radius:18px;background:#12352f;color:#eee5c6;overflow:hidden;box-shadow:0 20px 70px #0009}#codex-dialog[open]{display:flex;flex-direction:column}#codex-dialog::backdrop{background:#041c1ce8}#codex-dialog header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-shrink:0}#codex-title{margin:0;font-size:22px}#codex-dialog nav{display:flex;gap:8px;padding:12px 0;flex-shrink:0}#codex-dialog nav button{flex:1}#codex-dialog [aria-pressed=true]{border-color:#ffe09b;color:#ffe09b;background:#34554a}#codex-body{overflow:auto;overscroll-behavior:contain;min-height:0;padding-right:4px}#codex-body h3{color:#ffdd91;margin:6px 0;font-size:16px}#codex-body .class-sheet>div{min-width:0;overflow-wrap:anywhere}#codex-body .monster-portrait{width:65px;height:82px;flex:0 0 65px}#codex-body .class-sheet{align-items:flex-start}
#game{touch-action:none;cursor:grab}#game.dragging{cursor:grabbing}#map-controls{position:absolute;bottom:10px;left:10px;display:flex;gap:3px;z-index:1}#map-controls[hidden]{display:none}#map-controls button{min-width:36px;min-height:36px;border:1px solid #8faa8477;background:#15382de8;border-radius:7px;font-size:15px}#map-home{font-size:11px!important;padding:0 8px}
#boss-hud{position:absolute;top:42px;left:12px;right:12px;pointer-events:none;z-index:1;display:grid;gap:5px}#boss-hud[hidden]{display:none}.boss-meter{background:#281b25e8;border:1px solid #cb8169;border-radius:7px;padding:5px 8px;display:grid;grid-template-columns:1fr auto;gap:3px 8px;font-size:10px}.boss-meter span{grid-column:1/-1;color:#ffda9f}.boss-meter progress{width:100%;height:8px;align-self:center;accent-color:#ef795a}.boss-meter small{font-variant-numeric:tabular-nums;font-size:9px}
/* Main lobby: Trailguard artwork, independent from the reference game's assets. */
@font-face{font-family:TrailguardTitle;src:url('./assets/fonts/BlackHanSans-Regular.ttf') format('truetype');font-display:swap}
[hidden]{display:none!important}
.lobby{max-width:480px;height:100dvh;min-height:620px;margin:auto;display:grid;grid-template-rows:72px minmax(0,1fr) 76px;background:#203c35;border-inline:1px solid #748c60;box-shadow:0 0 90px #0009;overflow:hidden}
.lobby svg,.skill-bar svg,#lobby-dialog svg{width:24px;height:24px;flex-shrink:0}
.lobby-top{display:flex;align-items:center;gap:10px;background:linear-gradient(120deg,#1b423b,#102e2e);border-bottom:3px solid #8a9160;padding:10px 12px;z-index:2;box-shadow:0 4px 14px #0005}
.player-badge{display:flex;align-items:center;gap:7px;min-width:0;margin-right:auto}.player-badge>svg{width:33px;height:39px;color:#f4cf76;filter:drop-shadow(0 2px #0006)}.player-badge div{display:grid;gap:5px}.player-badge b{font-size:12px;white-space:nowrap}.player-badge small{font-size:9px;color:#a8c2af;letter-spacing:1px}
.lobby-wallet{display:flex;align-items:center;gap:5px;padding:6px 8px;border:1px solid #577260;background:#071e2180;border-radius:7px;font-size:12px;font-variant-numeric:tabular-nums}.lobby-wallet .coin{width:17px;height:20px;font-size:10px}.blood-wallet{color:#ffa4b8}.blood-wallet svg{width:18px;height:22px;fill:#a62a49}.lobby-settings{background:transparent;padding:5px;color:#c6d2bd;min-width:34px;min-height:44px}
.lobby-content{min-height:0;overflow:auto;overscroll-behavior:contain;background:linear-gradient(#132f2730,#0e352936),url('./assets/toy-v1/ui/lobby.png') center/cover}
.lobby-home{position:relative;min-height:100%;display:flex;align-items:center;flex-direction:column;padding:20px 26px 18px;isolation:isolate}
.lobby-home:before{content:'';position:absolute;inset:0 19%;z-index:-1;background:linear-gradient(90deg,#b18b5655,#d0b278aa 16%,#e4c994bb 50%,#d0b278aa 84%,#b18b5655);border-inline:3px solid #b1a27155;box-shadow:0 0 20px #28311d44}
.lobby-wordmark{text-align:center;text-shadow:0 3px 3px #162919,2px 0 #263b24,-2px 0 #263b24;z-index:1}.lobby-wordmark>span{font-size:10px;letter-spacing:5px;color:#e5e3b8}.lobby-wordmark h1{font-family:TrailguardTitle,sans-serif;font-weight:400;margin:5px 0;color:#ffe7a1;font-size:40px;letter-spacing:-1px;line-height:1.25}.lobby-wordmark p{font-size:11px;letter-spacing:2px;margin:5px 0;color:#e7edc5}
.lobby-shortcuts{position:absolute;top:120px;left:13px;right:13px;display:flex;justify-content:space-between;pointer-events:none;z-index:2}.lobby-shortcuts button{pointer-events:auto;display:flex;flex-direction:column;align-items:center;gap:5px;background:linear-gradient(#315647,#162f2c);border:2px solid #82976a;border-radius:10px;padding:9px 7px;color:#f8df9b;box-shadow:0 4px #192c22}.lobby-shortcuts span{font-size:10px;font-weight:700}.lobby-shortcuts svg{width:28px;height:28px}
.lobby-party{position:relative;display:flex;align-items:flex-end;justify-content:center;width:100%;height:clamp(120px,24dvh,225px);margin:auto 0 8px;padding:10px 30px 0}.lobby-party .tower-portrait{position:relative;z-index:1;width:29%;height:90%;object-fit:contain;filter:drop-shadow(0 12px 7px #122b26bb);margin-inline:-4%;}.lobby-party .tower-portrait:nth-child(3){height:115%;z-index:2}.lobby-party .tower-portrait:nth-child(4){height:100%}.party-light{position:absolute;bottom:0;width:90%;height:70%;border-radius:50%;background:radial-gradient(ellipse,#f9e2a57a,transparent 70%)}
.leader-badge{display:flex;align-items:center;gap:7px;padding:7px 12px;border:1px solid #b6b484;border-radius:20px;background:#17382eea;font-size:11px;color:#f0dfb0;min-height:38px;margin-bottom:auto;z-index:2}.leader-badge svg{width:18px;height:18px}.leader-badge b{margin-left:6px;font-size:20px}
.expedition-card{display:flex;align-items:center;justify-content:space-between;width:100%;margin-top:18px;padding:12px 17px;background:linear-gradient(120deg,#153b30f5,#19392af2);border:1px solid #cfba76;border-radius:12px;box-shadow:0 4px #18322288,inset 0 1px #ffefbc33}.expedition-card>div{display:grid;gap:4px}.expedition-card span{font-size:10px;letter-spacing:1px;color:#c9d5b0}.expedition-card strong{font-size:13px;letter-spacing:2px;color:#f5e8ba}.expedition-card strong b{font-size:32px;font-family:TrailguardTitle,sans-serif;font-weight:400;color:#ffdf7f}.expedition-card small{font-size:12px;color:#a8bfa9}.expedition-badge svg{width:40px;height:40px;color:#c6c794}
.resume-note{font-size:10px;color:#e1e7cc;text-align:center;line-height:1.6;margin:10px 0;text-shadow:0 1px 3px #142719}.lobby-play{width:100%;min-height:60px;font-size:21px;font-family:TrailguardTitle,sans-serif;font-weight:400;border-radius:12px;box-shadow:inset 0 2px #fff3c0,0 5px #775629,0 7px 10px #0004}.lobby-play>b{margin-left:auto;font-size:28px}.lobby-play>svg{width:27px;height:27px}.lobby-play>span{flex:1}
.lobby-nav{display:grid;grid-template-columns:repeat(5,1fr);background:linear-gradient(#345046,#172f2c);border-top:3px solid #7b8b65;z-index:2;padding-bottom:env(safe-area-inset-bottom,0)}.lobby-nav button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;background:transparent;border-right:1px solid #6d7f5f66;color:#b3c3a6;font-size:11px;font-weight:800;position:relative}.lobby-nav button:last-child{border:0}.lobby-nav svg{width:27px;height:27px}.lobby-nav [aria-current=page]{color:#ffe198;background:linear-gradient(#55694a,#304831);box-shadow:inset 0 3px #ffdd87}.lobby-nav [aria-current=page] svg{filter:drop-shadow(0 2px #13281d)}
.lobby-shop{height:100%;display:flex;flex-direction:column;background:linear-gradient(#173e35f5,#0e2826f5);padding:19px 16px 10px}.shop-heading{flex-shrink:0}.shop-heading>span{font-size:9px;letter-spacing:3px;color:#a4beab}.shop-heading h2{font:26px TrailguardTitle,sans-serif;color:#f5daa0;margin:8px 0}.shop-heading p{font-size:11px;color:#b9cdb9;line-height:1.7;margin:5px 0 13px}.shop-list{overflow:auto;min-height:0;padding:0 3px 6px 0;display:grid;gap:10px}.shop-card{display:flex;align-items:center;min-height:140px;padding:12px 10px;border:1px solid #6b8967;border-radius:12px;background:linear-gradient(120deg,#345349,#1b3732);box-shadow:inset 0 1px #ffffff12}.shop-card.owned{border-color:#bbad69}.shop-art{width:91px;flex-shrink:0;display:grid;place-items:center;height:115px;border-radius:8px;background:radial-gradient(ellipse,#948d4c55,transparent 75%)}.shop-art .tower-portrait{width:88px;height:115px;object-fit:contain}.shop-art>svg{width:50px;height:50px;color:#f4ca80;filter:drop-shadow(0 4px #071e2280)}.shop-art.skills>svg{color:#a8e7e5}.shop-copy{padding-left:8px;flex:1;min-width:0}.shop-copy>small{font-size:8px;letter-spacing:2px;color:#b4c6aa}.shop-copy h3{margin:4px 0;font-size:15px;color:#ffe6b0}.shop-copy p{font-size:11px;line-height:1.6;color:#c3d2be;margin:5px 0 8px}.shop-copy button{min-height:37px;padding:5px 12px;font-size:11px;display:flex;align-items:center;justify-content:center;gap:4px;width:100%}.shop-copy button svg{width:16px;height:18px}.blood-button{border:1px solid #ffa6b8;border-radius:7px;background:linear-gradient(#984961,#642b42);color:#fff1d9;box-shadow:0 3px #30182c;font-weight:800}.shop-footnote{font-size:9px;text-align:center;line-height:1.7;color:#9cb7a5;margin:10px 0 0}
#lobby-dialog{width:min(94vw,430px);border:1px solid #a8af7a;border-radius:15px;background:#16392f;color:#ede2bd;padding:18px;max-height:85dvh;overflow:auto}#lobby-dialog::backdrop{background:#051c1ce3}#lobby-dialog header{display:flex;align-items:center;justify-content:space-between;gap:8px}#lobby-dialog h2{font:23px TrailguardTitle,sans-serif;margin:0}#lobby-dialog p{font-size:12px;line-height:1.8;color:#c2d2b7}.reward-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-top:18px}.reward-grid>div{display:flex;align-items:center;flex-direction:column;gap:7px;padding:10px 0;background:#092824;border-radius:8px;color:#ffa1b8}.reward-grid strong{font-size:23px}.reward-grid span{font-size:10px;color:#d8dec1}.settings-list{display:grid;gap:10px;margin-top:20px}
.save-alert{position:fixed;z-index:20;top:12px;left:50%;transform:translateX(-50%);width:min(94vw,500px);background:#44222a;border:1px solid #f49494;padding:12px;box-shadow:0 5px 25px #0009;border-radius:10px;display:flex;gap:12px;align-items:center;font-size:12px}.save-alert button{flex-shrink:0}
.skill-bar{display:flex;align-items:center;gap:5px;margin-bottom:8px}.skill-bar button{display:flex;align-items:center;gap:3px;background:#173934;border:1px solid #72997e;border-radius:7px;min-height:38px;padding:4px 5px;font-size:9px;flex:1}.skill-bar button>svg{width:17px;height:20px;color:#b5e6df}.skill-bar small{font-size:8px;color:#d6ca92;margin-left:auto}.battle-blood{display:flex;align-items:center;gap:3px;color:#ffa2bb;font-size:11px;font-weight:800}.battle-blood svg{width:16px;height:21px}.command-dock{padding-top:8px}.app{grid-template-rows:76px minmax(240px,1fr) 248px}#next.floating{bottom:265px}
@media(min-width:600px){.app{width:max(360px,calc((100dvh - 324px)*.857143))}}
@media(max-height:720px){.lobby-home{padding-top:10px;padding-bottom:12px}.lobby-wordmark h1{font-size:32px}.lobby-party{height:130px}.lobby-shortcuts{top:90px}.lobby-play{min-height:51px;font-size:19px}.expedition-card{margin-top:10px;padding:8px 14px}.resume-note{margin:7px 0}.lobby{grid-template-rows:65px minmax(0,1fr) 65px}}
@media(max-height:650px){.battlefield{height:calc(100dvh - 324px);min-height:300px}.app{height:auto;grid-template-rows:76px minmax(300px,1fr) 248px}}
@media(max-width:390px){.lobby-top{gap:5px;padding-inline:8px}.player-badge>svg{width:25px}.player-badge b{font-size:10px}.lobby-wallet{padding:5px;font-size:11px}.lobby-home{padding-inline:18px}.lobby-wordmark h1{font-size:32px}.shop-art{width:72px}.shop-art .tower-portrait{width:70px}.shop-copy h3{font-size:14px}.skill-bar button>span{font-size:8px}.skill-bar button{padding-inline:3px}.skill-bar{gap:3px}}
.skill-bar button{display:grid;grid-template-columns:17px minmax(0,1fr);grid-template-rows:14px 11px;gap:1px 3px;text-align:left;min-width:0}.skill-bar button>svg{grid-row:1/3}.skill-bar button>span{white-space:nowrap;font-size:9px;letter-spacing:-.6px}.skill-bar button>small{grid-column:2;margin:0;font-size:8px}.battle-blood{min-width:28px}

/* stage picker (2026-09-23) */
.stage-picker{display:flex;gap:6px;justify-content:center;margin:6px 0}
.stage-picker button{flex:1;min-height:40px;font-size:12px;padding:6px 2px;white-space:nowrap}
.stage-picker button:disabled{opacity:.45}

/* mercenary bar (2026-09-23) */
.merc-bar{display:flex;gap:5px;align-items:center;margin:-2px 0 7px}.merc-bar[hidden]{display:none}.merc-bar>span{font-size:10px;white-space:nowrap;color:#f5e3a8;min-width:42px}.merc-bar button{flex:1;display:flex;flex-direction:row;justify-content:center;align-items:center;gap:4px;min-height:32px;padding:3px 5px;border:1px solid #9fb88a88;border-radius:8px;background:#15382de8;font-size:11px;font-weight:800}.merc-bar button i{width:10px;height:10px;border-radius:50%;display:inline-block}.merc-bar button small{color:#ffe08a;font-size:10px}

/* compact boss meter (2026-09-23): small corner panel instead of full-width */
#boss-hud{left:auto!important;right:8px!important;top:8px!important;width:min(190px,46%);gap:3px!important;opacity:.9}#boss-hud .boss-meter{font-size:9px;padding:3px 6px;background:#10231dcc;border-radius:6px}#boss-hud .boss-meter progress{height:5px;width:100%}#boss-hud .boss-meter small{display:none}
/* adaptive layout (2026-09-23): dock sizes to its content, battlefield takes the rest; nothing cut at any window height */
.app{height:100dvh!important;min-height:0!important;grid-template-rows:auto minmax(0,1fr) auto!important}
.battlefield{height:auto!important;min-height:0!important}
.command-dock{padding-bottom:max(6px,env(safe-area-inset-bottom))}
@media(max-height:820px){.tower-card{height:66px}.tower-card .sprite{height:62px}.skill-bar{margin-bottom:5px}.skill-bar button{min-height:30px}.merc-bar{margin-bottom:5px}.merc-bar button{min-height:28px}.command-row{margin-top:6px;height:48px}.command-row .gold-button{min-height:42px}footer{margin-top:2px}}
@media(max-height:660px){footer{display:none}.hud{padding-block:4px}.tower-card{height:56px}.tower-card .sprite{height:52px}.card-copy{gap:3px}}
@media(max-height:520px){.skill-bar{display:none}.hud h1{font-size:18px}}

.tower-card{overflow:hidden}
/* V3 compact layout */
.command-dock{padding:8px 8px max(8px,env(safe-area-inset-bottom))!important}
.dock-row{display:flex;gap:6px;align-items:stretch}
.dock-row .tower-options{flex:1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px}
.dock-row .tower-card{height:60px!important;flex-direction:column;justify-content:center;align-items:center;gap:0;padding:2px!important}
.dock-row .tower-card .sprite,.dock-row .tower-card canvas{width:auto!important;height:36px!important}
.dock-row .card-copy{flex-direction:row;gap:4px;align-items:center}.dock-row .card-copy b{font-size:10px}.dock-row .price{font-size:11px}
.dock-row #next{min-width:74px;padding:4px 8px;font-size:12px;white-space:normal;line-height:1.15}.dock-row #speed{width:40px;min-height:auto}
.sel-card{position:absolute;left:8px;right:8px;bottom:50px;z-index:2;display:flex;gap:8px;align-items:center;padding:8px 10px;background:#0f2a25f0;border:1px solid #6d8f7a;border-radius:12px;box-shadow:0 6px 14px #0008}
.sel-card[hidden]{display:none}.sel-card .selection-info{flex:1;min-width:0}.sel-card .tower-actions button{padding:6px 9px;font-size:12px}
.battlefield #skill-bar{position:absolute;top:38px;left:8px;z-index:1;display:flex;flex-direction:column;gap:4px;margin:0;width:auto}
.battlefield #skill-bar button{width:auto;min-height:30px;padding:3px 6px;flex:none}.battlefield #skill-bar button.unowned{display:none}
.battlefield #skill-bar .battle-blood{font-size:10px;background:#10231dcc;border-radius:6px;padding:2px 5px}
.overlay-footer{display:flex!important;justify-content:center;gap:12px;margin-top:10px}
.evolve-list{display:grid;gap:8px}.evolve-card.locked{opacity:.6}.lock-note{color:#ffb4a0;font-size:11px}.evolve-card .gold-button{margin-top:6px;width:100%}
.dock-row .tower-card{flex-direction:column!important;padding:1px 2px!important}
.dock-row .tower-card canvas.tower-portrait{height:34px!important;width:30px!important}
.dock-row .card-copy{flex-direction:column!important;gap:0!important;line-height:1.05}
.dock-row .card-copy b{font-size:10px!important;white-space:nowrap}.dock-row .price{font-size:10px!important}.dock-row .price .coin{display:none}

.chapter-tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin:6px 0 4px}.chapter-tabs button{min-height:32px;font-size:11px;padding:4px 2px}
.stage-picker{display:grid!important;grid-template-columns:repeat(5,1fr);gap:4px}.stage-picker button{min-height:34px!important;font-size:13px!important}.stage-picker small{font-size:9px;margin-left:2px}

.lobby-nav{display:grid!important;grid-template-columns:repeat(6,1fr)!important}.lobby-nav button span{font-size:10px}
/* ===== V3.1: fonts, tower dock redesign, boss ceremony ===== */
@font-face{font-family:"Black Han Sans";src:url("assets/fonts/BlackHanSans-Regular.ttf");font-display:swap}
@font-face{font-family:"Bungee";src:url("assets/fonts/Bungee-Regular.ttf");font-display:swap}
.dock-row .tower-card,.tower-card{--acc:#e8c26a;height:58px!important;display:grid!important;grid-template-columns:40px 1fr!important;grid-template-rows:1fr!important;align-items:center!important;gap:4px!important;padding:3px 6px 3px 2px!important;border-radius:12px!important;border:2px solid #0b0f0c!important;background:linear-gradient(160deg,#3b3a2e,#1e211b 70%)!important;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--acc) 55%,transparent),0 3px 0 #0b0f0c!important;text-align:left!important;overflow:hidden!important;position:relative!important;transition:transform .12s,box-shadow .12s}
.tower-card[data-type=knight]{--acc:#e6b34a}.tower-card[data-type=rogue]{--acc:#7fd66a}.tower-card[data-type=mage]{--acc:#a88bff}.tower-card[data-type=support]{--acc:#62dbe8}
.tower-card::before{content:"";position:absolute;inset:0 auto 0 0;width:44px;background:radial-gradient(circle at 50% 70%,color-mix(in srgb,var(--acc) 45%,transparent),transparent 70%);pointer-events:none}
.dock-row .tower-card canvas.tower-portrait,.tower-card canvas.tower-portrait,.dock-row .tower-card .sprite,.tower-card .sprite{position:relative!important;left:auto!important;top:auto!important;width:38px!important;height:50px!important;object-fit:contain;grid-column:1;filter:drop-shadow(0 0 1px #000) drop-shadow(0 0 1px #000)}
.tower-card .card-copy{grid-column:2;display:flex!important;flex-direction:column!important;align-items:flex-start!important;gap:3px!important;min-width:0;position:static!important}
.tower-card .card-copy b{font-family:"Black Han Sans",sans-serif;font-weight:400;font-size:14px!important;line-height:1!important;color:#fff7dc;text-shadow:0 1px 0 #000,0 0 6px color-mix(in srgb,var(--acc) 60%,transparent);white-space:nowrap;overflow:visible}
.tower-card .price{display:inline-flex!important;align-items:center;gap:3px;padding:1px 6px 1px 2px;border-radius:9px;background:#0c0f0bcc;border:1px solid #000;font:700 11px/1.2 sans-serif;color:#ffe08a;position:static!important}
.tower-card .price .coin{width:13px!important;height:13px!important;font-size:8px!important;line-height:13px!important}
.tower-card.active{transform:translateY(-3px);box-shadow:inset 0 0 0 2px var(--acc),0 0 12px var(--acc),0 4px 0 #0b0f0c!important}
.tower-card:disabled{filter:grayscale(.7) brightness(.7)}
@media(max-width:420px){.dock-row .tower-card,.tower-card{grid-template-columns:30px 1fr!important;padding-right:3px!important}.tower-card .card-copy b{font-size:12px!important}.tower-card canvas.tower-portrait{width:30px!important;height:44px!important}}
#ceremony{position:absolute;inset:0;z-index:40;display:grid;place-items:center;overflow:hidden;background:radial-gradient(ellipse at 50% 55%,#3a0b0bcc,#050305f2 70%);cursor:pointer;animation:cer-fade 4.6s ease forwards}
#ceremony .rays{position:absolute;inset:-50%;background:repeating-conic-gradient(from 0deg,#ffcf5a18 0 8deg,transparent 8deg 20deg);animation:cer-spin 9s linear infinite}
#ceremony .stripe{position:absolute;left:-10%;right:-10%;height:120px;top:58%;background:linear-gradient(90deg,transparent,#c21d1d 12%,#ff3b2f 50%,#c21d1d 88%,transparent);transform:skewY(-6deg) scaleX(0);transform-origin:left;animation:cer-wipe .5s .35s cubic-bezier(.2,.9,.2,1) forwards;box-shadow:0 0 0 4px #000,0 0 40px #ff3b2f88}
#ceremony .stripe.b{top:calc(58% + 118px);height:34px;background:linear-gradient(90deg,transparent,#111 10%,#1c1c1c 90%,transparent);animation-delay:.5s}
#ceremony img{position:absolute;bottom:26%;height:52%;max-width:92%;object-fit:contain;filter:drop-shadow(0 0 2px #000) drop-shadow(0 0 2px #000) drop-shadow(0 0 30px #ff5a2a);opacity:0;transform:translateX(60%) scale(1.25);animation:cer-in .55s .15s cubic-bezier(.2,.9,.2,1) forwards,cer-breathe 2.4s .8s ease-in-out infinite}
#ceremony .txt{position:absolute;top:58%;left:0;right:0;transform:skewY(-6deg);text-align:center;padding-top:10px}
#ceremony .eyebrow{font-family:"Bungee",sans-serif;font-size:clamp(11px,2.6vw,16px);letter-spacing:.18em;color:#ffe08a;text-shadow:0 2px 0 #000;opacity:0;animation:cer-up .4s .6s forwards}
#ceremony .title{font-family:"Black Han Sans",sans-serif;font-size:clamp(18px,5vw,30px);color:#fff;text-shadow:0 3px 0 #000;opacity:0;animation:cer-up .4s .75s forwards}
#ceremony .name{font-family:"Black Han Sans",sans-serif;font-size:clamp(30px,9vw,58px);line-height:1;color:#fff4c2;-webkit-text-stroke:2px #000;paint-order:stroke fill;text-shadow:0 5px 0 #000,0 0 24px #ffb13b;opacity:0;animation:cer-slam .45s .95s cubic-bezier(.3,1.6,.5,1) forwards}
#ceremony .sub{position:absolute;top:calc(58% + 122px);left:0;right:0;transform:skewY(-6deg);text-align:center;font-family:"Bungee",sans-serif;font-size:12px;letter-spacing:.3em;color:#bbb;opacity:0;animation:cer-up .4s 1.2s forwards}
#ceremony .flash{position:absolute;inset:0;background:#fff;opacity:0;animation:cer-flash .5s .95s}
@keyframes cer-fade{0%{opacity:0}6%{opacity:1}88%{opacity:1}100%{opacity:0}}
@keyframes cer-spin{to{transform:rotate(360deg)}}
@keyframes cer-wipe{to{transform:skewY(-6deg) scaleX(1)}}
@keyframes cer-in{to{opacity:1;transform:none}}
@keyframes cer-breathe{50%{transform:scale(1.03)}}
@keyframes cer-up{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes cer-slam{from{opacity:0;transform:scale(2.4);filter:blur(6px)}to{opacity:1;transform:none;filter:none}}
@keyframes cer-flash{0%{opacity:.8}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){#ceremony *{animation-duration:.01s!important}}
#map-controls{display:none!important}
/* V3.1 dock cards, final layout: vertical (portrait / name), price badge on the corner */
.dock-row .tower-card,.tower-card{grid-template-columns:1fr!important;grid-template-rows:38px 16px!important;justify-items:center!important;align-content:center!important;gap:1px!important;padding:2px!important;height:62px!important}
.tower-card::before{inset:0;width:auto;background:radial-gradient(circle at 50% 40%,color-mix(in srgb,var(--acc) 40%,transparent),transparent 65%)}
.dock-row .tower-card canvas.tower-portrait,.tower-card canvas.tower-portrait,.dock-row .tower-card .sprite,.tower-card .sprite{grid-column:1!important;grid-row:1!important;width:30px!important;height:38px!important}
.dock-row .tower-card .card-copy,.tower-card .card-copy{grid-column:1!important;grid-row:2!important;margin:0!important;align-items:center!important;gap:0!important;flex-direction:column!important}
.dock-row .tower-card .card-copy b,.tower-card .card-copy b{font-size:12px!important;letter-spacing:0!important}
.tower-card .price{position:absolute!important;top:2px;right:2px;padding:0 4px!important;font-size:10px!important;line-height:14px!important;border-radius:7px}
.tower-card .price::before{content:"G ";color:#ffcf4a;font-weight:900}
/* V3.5 responsive: on wide screens the game column grows with the height so the map fills the screen */
@media (min-aspect-ratio:3/4){.app{width:100%!important;max-width:min(100vw,calc(100dvh * .95))!important}}
@media (min-aspect-ratio:1/1){.app{width:100%!important;max-width:min(100vw,calc(100dvh * 1.25))!important}}
/* V3.6 pause/intro card cleanup: one primary action, secondary actions in a row, compact settings chips, no duplicate "main" button */
.overlay-card{display:flex!important;flex-direction:column;align-items:stretch;gap:10px;padding:22px 20px 16px!important;max-width:360px;margin:auto}
.overlay-card .eyebrow{order:0;text-align:center}.overlay-card h2{order:1;text-align:center;margin:0}.overlay-card p{order:2;text-align:center;margin:0 0 6px}.overlay-card .intro-towers{order:3}
.overlay-card #begin{order:4;min-height:52px;font-size:17px}
.overlay-card #open-codex,.overlay-card #overlay-home{order:5;min-height:40px;font-size:14px}
.overlay-card .overlay-footer{order:6;display:flex!important;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:6px;padding-top:12px;border-top:1px solid #ffffff1a}
.overlay-footer #restart{display:none!important}
.overlay-footer .text-button{padding:6px 12px;border-radius:999px;background:#0b1512aa;border:1px solid #ffffff22;font-size:13px}
.overlay-footer #best{padding:6px 12px;border-radius:999px;background:#ffd36a1a;border:1px solid #ffd36a44;color:#ffe08a;font-size:12px;letter-spacing:.06em}
.overlay-card #overlay-home{background:transparent;border:1px solid #ffffff2a;border-radius:12px;color:#d8cfb3}
.lobby-nav{grid-template-columns:repeat(5,1fr)!important}/* V3.7 heroes tab removed */
/* V3.9 tower info card: smaller and docked to the bottom edge of the battlefield */
.sel-card{bottom:4px!important;left:50%!important;right:auto!important;transform:translateX(-50%);width:min(94%,380px);padding:5px 8px!important;gap:6px!important;border-radius:10px!important}
.sel-card #inspect{font-size:11px!important;padding:0!important;min-height:0!important}
.sel-card #selection{font-size:14px!important;line-height:1.2}
.sel-card #detail{font-size:11px!important;line-height:1.2}
.sel-card .tower-actions{gap:5px!important}
.sel-card .tower-actions button{padding:5px 9px!important;font-size:13px!important;min-height:36px!important;min-width:64px}
/* V3.11 battlefield overlays live in a thin top strip (MapView.padTop=34) so they never cover the map */
#map-label{top:5px!important;left:6px!important;padding:4px 8px!important;font-size:11px!important;line-height:16px}
.battlefield #skill-bar{top:4px!important;left:auto!important;right:6px!important;flex-direction:row!important;align-items:center;gap:4px!important}
.battlefield #skill-bar button{min-height:26px!important;padding:2px 6px!important}
#boss-hud{top:36px!important}
/* ===== V3.13 hype moments + stage clear screen ===== */
.hype{position:absolute;left:50%;top:34%;transform:translate(-50%,-50%);z-index:30;pointer-events:none;text-align:center;font-family:"Black Han Sans",sans-serif;color:#fff4c2;-webkit-text-stroke:1.5px #000;paint-order:stroke fill;text-shadow:0 4px 0 #000,0 0 18px #ffb13b;animation:hype-pop 1.2s cubic-bezier(.2,1.4,.4,1) forwards;white-space:nowrap}
.hype em{display:block;font-style:normal;font-family:"Bungee",sans-serif;font-size:14px;color:#ffe08a;-webkit-text-stroke:1px #000;margin-top:2px}
.hype-combo{top:26%}.hype-combo b{display:block;font-size:44px;line-height:1;font-family:"Bungee",sans-serif}.hype-combo span{font-size:22px}
.hype-combo.tier1 b{color:#ffd36a}.hype-combo.tier2 b{color:#ff9a3c}.hype-combo.tier3 b,.hype-combo.tier4 b{color:#ff4f4f;text-shadow:0 4px 0 #000,0 0 26px #ff4f4f}
.hype-wave{top:44%;font-size:30px;animation-duration:1.7s}.hype-wave.perfect{color:#bff6ff;text-shadow:0 4px 0 #000,0 0 22px #62dbe8}
.hype-boss{top:40%;font-size:46px;color:#ffdf6a;animation:hype-slam 2.2s cubic-bezier(.3,1.6,.5,1) forwards}.hype-boss em{font-family:"Black Han Sans",sans-serif;font-size:20px}
.hype-early{top:62%;font-size:22px;color:#9fe8ff}
.hype-pop{top:52%;font-size:18px;color:#f4e7b6;animation-duration:.7s}
@keyframes hype-pop{0%{opacity:0;transform:translate(-50%,-50%) scale(.3)}15%{opacity:1;transform:translate(-50%,-50%) scale(1.15)}30%{transform:translate(-50%,-50%) scale(1)}80%{opacity:1}100%{opacity:0;transform:translate(-50%,-80%) scale(1)}}
@keyframes hype-slam{0%{opacity:0;transform:translate(-50%,-50%) scale(3);filter:blur(6px)}12%{opacity:1;transform:translate(-50%,-50%) scale(1);filter:none}85%{opacity:1}100%{opacity:0;transform:translate(-50%,-60%) scale(1.05)}}
.hype-coin{position:absolute;left:50%;top:46%;width:16px;height:16px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff6c8,#ffd36a 45%,#b8860b);border:1px solid #6b4a10;z-index:29;pointer-events:none;animation:coin-fly 1.2s ease-out forwards}
@keyframes coin-fly{0%{transform:translate(-50%,-50%) scale(.5);opacity:1}60%{transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(1)}100%{transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy) + 120px)) scale(.8);opacity:0}}
.battlefield.hype-pulse{animation:bf-pulse .45s ease-out}.battlefield.hype-flash::after{content:"";position:absolute;inset:0;background:#fff;z-index:28;pointer-events:none;animation:bf-flash .6s ease-out forwards}
@keyframes bf-pulse{30%{transform:scale(1.015)}}@keyframes bf-flash{0%{opacity:.75}100%{opacity:0}}
#clear-screen{position:absolute;inset:0;z-index:45;display:grid;place-items:center;background:radial-gradient(ellipse at 50% 40%,#2c4a1ccc,#050905f0 75%);animation:cer-fade-in .4s ease both}
#clear-screen .confetti{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.clear-card{position:relative;width:min(88%,340px);padding:22px 20px 16px;border-radius:18px;background:linear-gradient(170deg,#23392c,#101c16);border:2px solid #ffd36a88;box-shadow:0 0 0 4px #000,0 18px 40px #000a;text-align:center;overflow:hidden;animation:clear-in .6s cubic-bezier(.2,1.4,.4,1) both}
.clear-rays{position:absolute;inset:-60%;background:repeating-conic-gradient(#ffd36a14 0 10deg,transparent 10deg 24deg);animation:cer-spin 12s linear infinite;pointer-events:none}
.clear-card>*{position:relative}.clear-card small{font:700 11px/1 "Bungee",sans-serif;letter-spacing:.12em;color:#cfe3c0}
.clear-card h2{margin:6px 0 4px;font-family:"Black Han Sans",sans-serif;font-weight:400;font-size:46px;color:#fff4c2;-webkit-text-stroke:2px #000;paint-order:stroke fill;text-shadow:0 5px 0 #000,0 0 24px #ffb13b}
.clear-stars{display:flex;justify-content:center;gap:6px;margin:4px 0 12px}.clear-stars span{font-size:44px;color:#3a3a32;-webkit-text-stroke:2px #000;opacity:0;animation:star-in .5s cubic-bezier(.3,1.8,.5,1) forwards}.clear-stars span.on{color:#ffd36a;text-shadow:0 0 18px #ffb13b}.clear-stars span:nth-child(2){transform:translateY(-8px);font-size:54px}
@keyframes star-in{0%{opacity:0;transform:scale(3) rotate(-30deg)}100%{opacity:1;transform:scale(1)}}
@keyframes clear-in{0%{opacity:0;transform:scale(.6) translateY(30px)}100%{opacity:1;transform:none}}@keyframes cer-fade-in{from{opacity:0}to{opacity:1}}
.clear-card dl{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:0 0 14px}.clear-card dl div{background:#0b1512aa;border:1px solid #ffffff1a;border-radius:10px;padding:6px}.clear-card dt{font-size:11px;color:#b9c8b0}.clear-card dd{margin:2px 0 0;font:400 16px "Black Han Sans",sans-serif;color:#fff4c2}
.clear-card .clear-next{width:100%;min-height:50px;font-size:17px}.clear-card .clear-home{margin-top:6px}
@media (prefers-reduced-motion:reduce){.hype,.hype-coin,.clear-card,.clear-stars span{animation-duration:.01s!important}}
/* ===== V3.14 difficulty/challenge row, next-wave preview, jackpot ===== */
.mode-row{display:flex;justify-content:center;gap:6px;flex-wrap:wrap;margin:6px 0 2px}
.mode-row button{min-height:32px;padding:4px 12px;border-radius:999px;border:1px solid #ffffff33;background:#0e1d18cc;color:#d8cfb3;font:700 13px/1 sans-serif}
.mode-row button.on{background:linear-gradient(#ffe08a,#e7a93a);color:#2b1a05;border-color:#000}
.mode-row button.challenge{border-color:#ff6b6b88;color:#ffc2c2}.mode-row button.challenge.on{background:linear-gradient(#ff8a7a,#c0392b);color:#fff}.mode-row button:disabled{opacity:.4}
.stage-picker button small{font-size:8px;color:#ffd36a;letter-spacing:-1px}
#wave-preview{position:absolute;top:36px;left:50%;transform:translateX(-50%);z-index:3;display:flex;gap:4px;align-items:center;padding:3px 8px;border-radius:999px;background:#0b1512d9;border:1px solid #ffffff22;font-size:11px;color:#e3e1bc;pointer-events:none;white-space:nowrap;max-width:94%;overflow:hidden}
#wave-preview[hidden]{display:none}#wave-preview b{color:#ffe08a;font-family:"Bungee",sans-serif;font-weight:400;margin-right:2px}#wave-preview span{padding:1px 5px;border-radius:6px;background:#ffffff12}#wave-preview .pv-boss{background:#c0392b;color:#fff}
.hype-golden{top:38%}.hype-golden b{display:block;font-family:"Bungee",sans-serif;font-size:40px;color:#ffe27a;text-shadow:0 4px 0 #000,0 0 30px #ffd36a}.hype-golden span{font-size:20px}
.clear-extra{margin:-6px 0 12px;font-size:12px;color:#ffe08a}
/* V3.15 short screens (e.g. 375x667): keep the play button visible without scrolling */
@media (max-height:760px){.lobby-party{height:84px!important;padding-top:0!important;margin-bottom:2px!important}.lobby-party .tower-portrait,.lobby-party canvas,.lobby-party img{max-height:84px}.lobby-wordmark h1{font-size:30px!important;margin:0!important}.lobby-wordmark p{display:none}.lobby-shortcuts button{transform:scale(.85)}.expedition-card{padding:8px 12px!important}.resume-note{margin:4px 0!important}.stage-picker button{min-height:30px!important}.mode-row{margin:4px 0 0!important}.lobby-play{min-height:48px!important}}
@media (max-height:680px){.lobby-party{display:none!important}.lobby-shortcuts{display:none!important}}
/* ===== V2 M1: touch targets, briefing, tutorial coach, gate danger ===== */
.stage-picker button{min-width:44px!important;min-height:44px!important}
.chapter-tabs button,.mode-row button{min-height:44px!important}
.briefing{display:flex;flex-direction:column;gap:3px;margin:4px 12px 6px;padding:8px 10px;border-radius:10px;background:#0b1512cc;border:1px solid #ffffff1f;font-size:12px;color:#e3e1bc;text-align:left}
.briefing b{color:#ffe08a;margin-right:4px}
.lock-note{margin:2px 0 0;font-size:12px;color:#cfd8c0;text-align:center}
#tutor{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);z-index:35;width:min(94%,420px);display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:14px;background:#10231cf2;border:2px solid #ffd36a;box-shadow:0 0 0 3px #000,0 8px 20px #000a;color:#fff4d6;font-size:14px;line-height:1.35;animation:tutor-in .3s ease both}
#tutor[hidden]{display:none}#tutor p{margin:0;flex:1}
#tutor .tutor-skip{min-height:44px;padding:0 12px;border-radius:10px;background:#0b1512;border:1px solid #ffffff33;color:#d8cfb3;font-size:13px;white-space:nowrap}
@keyframes tutor-in{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}
.tutor-hi{position:relative;z-index:36;box-shadow:0 0 0 3px #ffd36a,0 0 18px #ffd36a!important;animation:tutor-pulse 1s ease-in-out infinite}
@keyframes tutor-pulse{50%{box-shadow:0 0 0 5px #ffd36a,0 0 28px #ffd36a}}
.resource.danger{animation:danger-blink .8s steps(2) infinite}.resource.danger strong{color:#ff6b6b}
@keyframes danger-blink{50%{filter:drop-shadow(0 0 8px #ff4f4f)}}
@media (prefers-reduced-motion:reduce){.tutor-hi,.resource.danger,#tutor{animation:none!important}}
#overlay-text b{color:#ffe08a}#overlay-text small{color:#b9c8b0}

/* V2 M1 fix: tutor bubble must not block controls underneath (only Skip is clickable) */
#tutor{pointer-events:none}#tutor .tutor-skip{pointer-events:auto}
/* V2 M1 fix: briefing/lock-note made the lobby taller; keep the start button pinned in view (sticky inside .lobby-content) */
.lobby-home #lobby-play{position:sticky;bottom:6px;z-index:5;box-shadow:0 -10px 18px #0b1512cc,0 0 0 3px #000}
/* 2026-09-28 quick slots (bottom-right of the battlefield) */
.battlefield #skill-bar{top:4px!important;right:6px!important;left:auto!important}
.quick-slots{position:absolute;right:8px;bottom:10px;z-index:6;display:flex;flex-direction:column-reverse;gap:10px;pointer-events:none}
.quick-slots[hidden]{display:none}
.quick-slots .qs{pointer-events:auto;position:relative;width:50px;height:50px;border-radius:50%;padding:0;display:grid;place-items:center;background:radial-gradient(circle at 35% 30%,#fff6d8 0,#ffd36a 38%,#c9892b 100%);border:3px solid #3b2410;box-shadow:0 0 0 2px #ffe9a8,0 4px 10px #0008;color:#3b2410;overflow:hidden;cursor:pointer}
.quick-slots .qs-frost{background:radial-gradient(circle at 35% 30%,#f2fdff 0,#8fe3ff 40%,#2e8fc2 100%)}
.quick-slots .qs-rally{background:radial-gradient(circle at 35% 30%,#fff0f0 0,#ff9a8a 40%,#c2453a 100%)}
.quick-slots .qs svg{width:24px;height:24px;margin-top:-10px;position:relative;z-index:1}
.quick-slots .qs b{position:absolute;bottom:7px;left:0;right:0;font-size:10px;font-weight:800;text-align:center;z-index:1;letter-spacing:-.4px}
.quick-slots .qs-ring{position:absolute;inset:0;border-radius:50%;background:conic-gradient(#0b1512d9 calc(var(--cd,0)*360deg),transparent 0);z-index:2;pointer-events:none}
.quick-slots .qs small{position:absolute;inset:0;display:grid;place-items:center;font:900 20px/1 sans-serif;color:#fff;text-shadow:0 2px 3px #000;z-index:3;pointer-events:none}
.quick-slots .qs:disabled{cursor:default;filter:saturate(.75)}
.quick-slots .qs.ready{animation:qs-ready 1.6s ease-in-out infinite}
@keyframes qs-ready{50%{box-shadow:0 0 0 2px #ffe9a8,0 0 16px 4px #ffe08acc,0 4px 10px #0008}}
@media (prefers-reduced-motion:reduce){.quick-slots .qs.ready{animation:none}}
/* 2026-09-28 HUD: stage title replaces the logo during battle; the duplicate map label is hidden */
#title.stage-title{display:flex;flex-direction:column;justify-content:center;font-size:17px;line-height:1.05;white-space:nowrap}
#title.stage-title small{font-size:11px;color:#ffe08a;letter-spacing:.5px}
.battlefield #map-label{display:none}

.quick-slots .qs:not(.ready){opacity:.82}

/* UI pass 2026-09-28: stage choice visible above the sticky start button */
.lobby-home .chapter-tabs{order:1}.lobby-home .stage-picker{order:2}.lobby-home .lock-note{order:3}.lobby-home .mode-row{order:4}.lobby-home .resume-note{order:5}.lobby-home .briefing{order:6}.lobby-home #lobby-play{order:9}
.lobby-home .lobby-party{height:clamp(110px,18dvh,170px)}
.lobby-home .chapter-tabs{margin-top:10px}
/* 2026-09-28 tile codex */
.cx-group{margin:10px 0 14px}.cx-group-title{display:flex;align-items:center;gap:8px;margin:0 0 8px;font-size:14px;color:#ffe08a}.cx-group-title small{font-size:11px;color:#b4c8bb}
.cx-group-title::before{content:'';width:10px;height:10px;border-radius:3px;background:var(--gc)}
.g1{--gc:#9fb4c4;--gc2:#3e5566}.g2{--gc:#6fb6ff;--gc2:#244a86}.g3{--gc:#ffc44d;--gc2:#8a4e12}
.cx-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.cx-tile{position:relative;aspect-ratio:3/4;padding:0;border-radius:12px;border:2px solid var(--gc);background:radial-gradient(circle at 50% 35%,#ffffff22,transparent 60%),linear-gradient(180deg,var(--gc2),#10231f);box-shadow:inset 0 0 0 2px #0006,0 3px 6px #0006;overflow:hidden;cursor:pointer;display:flex;flex-direction:column}
.cx-tile .cx-art{flex:1;display:grid;place-items:center;min-height:0}
.cx-tile .cx-art>*{max-width:92%;max-height:100%;width:auto!important;height:100%!important;object-fit:contain}
.cx-tile .cx-name{display:block;background:#000a;color:#fff;font-size:10px;line-height:1.2;padding:4px 2px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cx-tile:active{transform:scale(.96)}
.cx-detail{position:sticky;top:0}
#codex-body:has(.cx-detail:not([hidden])) .cx-group,#codex-body:has(.cx-detail:not([hidden])) .class-note{display:none}
.cx-back{margin:4px 0 10px;min-height:34px;padding:0 14px}
.cx-detail-head{display:flex;gap:12px;align-items:flex-start}.cx-detail-head>:first-child{width:96px;height:124px;flex-shrink:0;object-fit:contain}
.cx-detail h3{margin:0 0 4px}.cx-grade{display:inline-block;padding:2px 8px;border-radius:99px;font-size:11px;background:var(--gc2);border:1px solid var(--gc);color:#fff}
.cx-stats{display:grid;grid-template-columns:1fr 1fr;gap:4px 10px;margin:8px 0 0}.cx-stats div{display:flex;justify-content:space-between;font-size:12px;border-bottom:1px solid #58766b55}.cx-stats dt{color:#b4c8bb}.cx-stats dd{margin:0;color:#ffe08a;font-weight:700}
.cx-extra,.cx-branch{font-size:12px;color:#cfe0d3}.cx-detail ul{padding-left:16px;font-size:12px;line-height:1.6}
.cx-skins h4{margin:12px 0 6px;color:#ffdd91}.cx-skin-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.cx-skin{aspect-ratio:1;border-radius:10px;border:2px solid #58766b;background:#0f2a25;display:grid;place-items:center;align-content:center;gap:2px;font-size:12px}
.cx-skin.on{border-color:#ffd36a;box-shadow:0 0 0 2px #ffd36a55}.cx-skin.locked{opacity:.55}.cx-skin em{font-style:normal;font-size:10px;color:#b4c8bb}

/* 2026-09-28 start screen: "midnight toy room" palette (night indigo + lamp amber + candy pink), replaces the old forest-green shell */
.lobby{--n0:#141131;--n1:#1f1a4a;--n2:#2c2566;--n3:#3b3280;--amb:#ffc766;--amb2:#f39a3d;--pink:#ff9ec4;--mint:#8fe3cf;--cream:#fff3dc;--line:#8a7fd0;background:var(--n0);border-inline:1px solid #3b3280;color:var(--cream)}
.lobby .lobby-top{background:linear-gradient(180deg,#261f5a,#1a1545);border-bottom:2px solid #5a4fb0;box-shadow:0 6px 18px #0008}
.lobby .player-badge>svg{color:var(--amb)}.lobby .player-badge small{color:#b9b0ea}
.lobby .lobby-wallet{background:#0d0b27b3;border:1px solid #5a4fb0;border-radius:999px;padding:6px 10px}
.lobby .lobby-settings{color:var(--cream)}
.lobby .lobby-content{background:radial-gradient(ellipse at 50% 38%,#ffd58a22,transparent 55%),linear-gradient(#141131aa,#14113122 35%,#141131cc),url('./assets/toy-v1/ui/lobby.png') center/cover}
.lobby .lobby-home:before{inset:0;border:0;box-shadow:none;background:radial-gradient(ellipse 60% 45% at 50% 30%,#ffe3a01f,transparent 70%)}
.lobby .lobby-wordmark{text-shadow:0 3px 0 #2c2566,0 0 18px #ff9ec455}
.lobby .lobby-wordmark>span{color:#cfc6ff}.lobby .lobby-wordmark h1{color:var(--cream);-webkit-text-stroke:1px #2c2566}
.lobby .lobby-wordmark p{color:#ffd9e8}
.lobby .party-light{background:radial-gradient(ellipse,#ffc76688,transparent 70%)}
.lobby .lobby-shortcuts button{background:linear-gradient(#3b3280,#241e5c);border:2px solid #8a7fd0;border-radius:16px;color:var(--cream);box-shadow:0 4px #120f33,inset 0 1px #ffffff22}
.lobby .lobby-shortcuts button svg{color:var(--pink)}
.lobby .expedition-card{background:linear-gradient(120deg,#2c2566f2,#1f1a4af2);border:2px solid #ffc76699;border-radius:18px;box-shadow:0 5px #0d0b27,inset 0 1px #ffffff22}
.lobby .expedition-card span{color:#d9d3ff}.lobby .expedition-card strong b{color:var(--amb)}.lobby .expedition-badge svg{color:var(--pink)}
.lobby .metal{background:linear-gradient(#3b3280,#261f5a);border:1px solid #6f64c4;border-radius:14px;color:var(--cream);box-shadow:inset 0 1px #ffffff1f,0 3px #0d0b27}
.lobby .metal:disabled{background:#1f1a4a;color:#8d86c4;opacity:.6}
.lobby .gold-button{background:linear-gradient(#ffe2a0,#ffc766 45%,#f39a3d);border:2px solid #fff0c9;border-radius:14px;color:#3a2210;box-shadow:inset 0 2px #fff6d8,0 3px #9a5a1c,0 4px 8px #0006}
.lobby .chapter-tabs .gold-button{background:linear-gradient(#ffc2dc,#ff9ec4 50%,#e2679a);border-color:#ffe3ef;color:#3a1028;box-shadow:inset 0 2px #fff0f6,0 3px #8a2e58}
.lobby .stage-picker button small{color:var(--amb)}
.lobby .lock-note,.lobby .resume-note{color:#cfc6ff;text-shadow:0 1px 2px #000}
.lobby .mode-row button{background:#1f1a4acc;border:1px solid #6f64c4;color:#e6e0ff}
.lobby .mode-row button.on{background:linear-gradient(#b5f2e2,#8fe3cf 50%,#4fb9a0);color:#0e2a24;border-color:#e6fff8}
.lobby .briefing{background:#141131d9;border:1px solid #5a4fb0;color:#ece8ff;border-radius:14px}
.lobby .briefing b,.lobby .briefing strong{color:var(--amb)}
.lobby .lobby-home #lobby-play{border-radius:18px;font-size:22px;box-shadow:0 -10px 18px #141131cc,0 0 0 3px #1f1a4a,0 5px #9a5a1c}
.lobby .lobby-nav{background:linear-gradient(#261f5a,#141131);border-top:2px solid #5a4fb0}
.lobby .lobby-nav button{color:#a79fdc;border-right:1px solid #3b328066}
.lobby .lobby-nav button[aria-current=page]{color:var(--amb);background:radial-gradient(ellipse at 50% 100%,#ffc76633,transparent 70%)}
.lobby .lobby-nav button[aria-current=page]::before{background:var(--amb)!important}
#upgrade.evo-locked{font-size:11px;white-space:normal;line-height:1.2;background:#2c2566;color:#ffd9e8;border-color:#8a7fd0;opacity:1}

/* 2026-09-28 codex unlock state */
.cx-tile.locked .cx-art{filter:grayscale(.85) brightness(.55)}.cx-tile.locked{border-style:dashed}
.cx-lock{position:absolute;top:4px;left:4px;right:4px;z-index:1;font-style:normal;font-size:9px;font-weight:800;padding:2px 4px;border-radius:99px;background:#000b;color:#ffd9e8;text-align:center}
.cx-tile:not(.locked) .cx-lock{color:#b5f2e2}
.cx-lockbadge{display:block;margin-top:6px;font-size:11px;font-weight:700}.cx-lockbadge.no{color:#ffb3c7}.cx-lockbadge.yes{color:#8fe3cf}

/* 2026-09-28 opening movie */
#opening{position:fixed;inset:0;z-index:999;background:#07061a;display:grid;place-items:center;overflow:hidden;animation:opIn .5s ease}
#opening.out{opacity:0;transition:opacity .45s}
#opening video{width:100%;height:100%;object-fit:cover}
#opening .op-shade{position:absolute;inset:auto 0 0 0;height:34%;background:linear-gradient(transparent,#07061ae6)}
#opening .op-cap{position:absolute;left:18px;right:18px;bottom:max(64px,calc(env(safe-area-inset-bottom) + 56px));margin:0;text-align:center;color:#fff3dc;font:700 18px/1.5 TrailguardTitle,sans-serif;text-shadow:0 2px 6px #000,0 0 18px #2c2566;opacity:0;transform:translateY(8px);transition:opacity .35s,transform .35s}
#opening .op-cap.on{opacity:1;transform:none}
#opening .op-skip{position:absolute;top:max(14px,env(safe-area-inset-top));right:14px;padding:8px 14px;border-radius:999px;border:1px solid #ffffff55;background:#0008;color:#fff;font-weight:700;font-size:13px;min-height:40px}
@keyframes opIn{from{opacity:0}to{opacity:1}}
