:root{color:#16201b;background:#eef1ec;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;min-height:100dvh;overscroll-behavior-y:contain;-webkit-tap-highlight-color:transparent}html,body,#root{height:100%;overflow:hidden}button,input{font:inherit}button{min-height:40px;border:0;border-radius:6px;color:#f8faf6;background:#2d5f4d;cursor:pointer;touch-action:manipulation}button:hover{background:#244d3f}button:disabled{cursor:not-allowed;opacity:.5}input{min-height:40px;border:1px solid #bdc8bf;border-radius:6px;padding:0 12px;background:#fff}h1,p{margin-top:0}.auth-shell{display:grid;min-height:100vh;place-items:center;padding:20px}.auth-panel{width:min(100%,460px);padding:24px;border:1px solid #d4ddd6;border-radius:8px;background:#fbfcfa}.handle-onboarding{display:grid;gap:12px}.form-error{margin:0;color:#9d3d35}.public-profile-shell{min-height:100dvh;padding:28px}.quick-match-page{display:grid;align-content:start;gap:16px}.quick-match-status{display:flex;align-items:center;gap:10px;min-height:46px;padding:12px 14px;border:1px solid #d4ddd6;border-radius:8px;background:#fbfcfa}.quick-match-dot{width:10px;height:10px;flex:none;border-radius:50%;background:#8c9990}.quick-match-dot.searching{background:#2d7cd3;box-shadow:0 0 0 4px #2d7cd32e}.profile-private-note{color:#66746b}.profile-heading{display:flex;align-items:center;gap:12px}.profile-avatar{display:grid;width:56px;height:56px;flex:none;place-items:center;border-radius:50%;background:#2d5f4d;color:#fff;font-size:1.35rem;font-weight:800}.profile-rename{display:grid;gap:8px;max-width:460px;padding:16px;border:1px solid #d4ddd6;border-radius:8px;background:#fbfcfa}.profile-rename>div{display:grid;grid-template-columns:1fr auto;gap:8px}.brand{margin-bottom:8px;color:#2d5f4d;font-weight:800;letter-spacing:0}.login-row,.code-row{display:grid;grid-template-columns:1fr auto;gap:10px;margin-bottom:10px}.secondary{width:100%;color:#1d3129;background:#dfe8e1}.secondary:hover{background:#d3dfd7}.app-shell{display:grid;grid-template-columns:220px minmax(0,1fr);min-height:100vh;height:100dvh;overflow:hidden;min-height:100dvh}.sidebar{display:flex;flex-direction:column;gap:28px;padding:24px;border-right:1px solid #d4ddd6;background:#fbfcfa}.muted{color:#66746b;font-size:.94rem}nav{display:grid;gap:8px}.nav-button{justify-content:flex-start;width:100%;padding:0 12px;color:#21372f;background:transparent;text-align:left}.nav-button:hover,.nav-button.active{color:#f8faf6;background:#2d5f4d}.content{padding:28px;min-width:0;min-height:0;overflow:auto;scrollbar-gutter:stable}.content-battle{padding:20px 24px;overflow:hidden}.page{display:grid;gap:22px;max-width:1120px}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.page-header h1{margin-bottom:6px;font-size:2rem;line-height:1.1}.page-header p{max-width:760px;color:#526058}.metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.metric{padding:16px;border:1px solid #d4ddd6;border-radius:8px;background:#fbfcfa}.metric span{display:block;margin-bottom:8px;color:#66746b}.metric strong{font-size:1.35rem}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}.game-card{display:grid;gap:8px;align-content:start}.ico{width:1em;height:1em;flex:none;vertical-align:-.14em}.card-face{display:grid;grid-template-rows:4fr 1fr;aspect-ratio:4 / 5;overflow:hidden;border:2px solid var(--rarity-color, #c5d2ca);border-radius:10px;background:#fbfcfa;color:#16201b;-webkit-user-select:none;user-select:none}.card-art-wrap{container-type:inline-size;position:relative;overflow:hidden}[data-rarity=common]{--rarity-color: #9aa3a8}[data-rarity=uncommon]{--rarity-color: #4c9a52}[data-rarity=rare]{--rarity-color: #3f74c4}[data-rarity=epic]{--rarity-color: #8a52c4}[data-rarity=legendary]{--rarity-color: #d4b13f}.card-art{position:absolute;inset:0;display:grid;place-items:center;background:var(--rarity-color, #aab2ad)}.card-art-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.card-art-icon{position:relative;width:86%;height:86%;object-fit:contain}.card-art-glyph{position:relative;color:#fffffff2;font-size:34cqi;font-weight:800;letter-spacing:.03em;text-shadow:0 1px 4px rgb(0 0 0 / .35)}.card-pip{position:absolute;display:inline-flex;align-items:center;gap:.16em;padding:.14em .42em;border-radius:999px;background:#121a16bd;color:#f8faf6;font-size:13cqi;font-weight:800;line-height:1}.card-pip.cost{top:5%;left:5%}.card-pip.cost .ico{color:#7fd1ff}.card-pip.damage{bottom:5%;left:5%}.card-pip.damage .ico{color:#ffb24d}.card-pip.hp{bottom:5%;right:5%}.card-pip.hp .ico{color:#ff8585}.card-info{display:grid;gap:3px;align-content:center;padding:5px 6px;border-top:1px solid #e0e7e1;background:#f4f7f3}.card-name{color:#1d3129;font-size:.82rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-footer{display:flex;justify-content:space-around;gap:4px}.card-stat{display:inline-flex;align-items:center;gap:4px;color:#3a4c43;font-size:.82rem;font-weight:700}.card-stat .ico{color:#708274}.battle-page{position:relative;display:grid;grid-template-columns:minmax(320px,1fr) minmax(260px,360px);gap:18px;align-items:stretch;max-width:1100px;min-height:calc(100dvh - 56px);overflow:hidden}.battle-stage{display:grid;gap:8px;align-content:center;min-width:0;min-height:0;width:min(100%,calc((100dvh - 290px) * var(--cols, 5) / var(--rows, 5)),780px);margin-inline:auto}.ghost-btn{min-height:32px;padding:0 12px;border:1px solid #c5d2ca;border-radius:999px;color:#21372f;background:#fbfcfa;font-size:.84rem;font-weight:600}.ghost-btn:hover:not(:disabled){background:#eef4f0}.hero-line{padding:8px 10px;border:1px solid #c5d2ca;border-radius:6px;background:#fbfcfa;text-align:center;font-size:.92rem}.hero-line.enemy{background:#f5f0ed}.hero-line.hit{animation:hit-flash .52s ease;border-color:#b94d42}.board-wrap{position:relative;width:min(100%,calc((100dvh - 230px)*.6),420px);aspect-ratio:3 / 5;margin:0 auto}.board{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(5,1fr);gap:6px;width:100%;height:100%}.unit-layer{--cols: 3;--rows: 5;--gap: 6px;position:absolute;inset:0;pointer-events:none}.unit-token{position:absolute;top:0;left:0;width:calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols));height:calc((100% - (var(--rows) - 1) * var(--gap)) / var(--rows));padding:4px;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap))));transition:transform var(--move-ms, .34s) cubic-bezier(.34,.1,.2,1);will-change:transform}.unit-token-inner{width:100%;height:100%}.unit-token-inner.striking{animation:unit-strike var(--strike-ms, .64s) both}@keyframes unit-strike{0%{transform:translate(0);animation-timing-function:cubic-bezier(.55,0,.85,.25)}40%{transform:translate(var(--lunge-x, 0),var(--lunge-y, 0));animation-timing-function:linear}50%{transform:translate(var(--lunge-x, 0),var(--lunge-y, 0));animation-timing-function:cubic-bezier(.22,.9,.32,1)}to{transform:translate(0)}}.unit-token.lunging{z-index:5}.unit-token.dying .unit-token-inner{transform-origin:center;animation:unit-die var(--death-ms, var(--move-ms, .34s)) ease forwards}@keyframes unit-die{to{opacity:0;transform:scale(.5) rotate(8deg)}}.damage-popup{position:absolute;top:0;left:0;z-index:10;width:calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols));height:calc((100% - (var(--rows) - 1) * var(--gap)) / var(--rows));display:grid;place-items:center;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap))));pointer-events:none}.damage-popup-text{color:#b94d42;font-size:clamp(.95rem,3.4vw,1.35rem);font-weight:800;text-shadow:0 1px 2px rgb(248 250 246 / .9),0 0 2px rgb(248 250 246 / .9);animation:damage-float var(--popup-ms, .9s) ease-out forwards}.damage-popup.hero .damage-popup-text{color:#9d3d35}.damage-popup-text{position:relative;z-index:1}.damage-burst{position:absolute;width:82%;height:82%;color:#ff7a2f;filter:drop-shadow(0 1px 2px rgb(0 0 0 / .3));animation:burst-pop .6s ease-out forwards}.damage-popup.hero .damage-burst{color:#ff5a3c}@keyframes burst-pop{0%{opacity:0;transform:scale(.3) rotate(-14deg)}35%{opacity:.95;transform:scale(1.1) rotate(0)}to{opacity:0;transform:scale(1.55) rotate(10deg)}}@keyframes damage-float{0%{opacity:0;transform:translateY(8px) scale(.7)}25%{opacity:1;transform:translateY(0) scale(1.12)}to{opacity:0;transform:translateY(-28px) scale(1)}}.cell-notice{position:absolute;top:0;left:0;z-index:12;width:calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols));height:calc((100% - (var(--rows) - 1) * var(--gap)) / var(--rows));display:grid;place-items:center;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap))));pointer-events:none}.cell-notice>span{width:max-content;max-width:200px;padding:.32em .6em;border-radius:6px;background:#121a16db;color:#f8faf6;font-size:.72rem;font-weight:600;text-align:center;animation:notice-float 1.05s ease-out forwards}@keyframes notice-float{0%{opacity:0;transform:translateY(6px)}15%{opacity:1;transform:translateY(0)}65%{opacity:1}to{opacity:0;transform:translateY(-18px)}}.board-cell{position:relative;display:grid;place-items:stretch;min-height:0;height:100%;overflow:hidden;padding:4px;border:1px solid #b8c7bd;color:#24352e;background:#f8faf6;touch-action:manipulation;transition:transform .16s ease,background .16s ease,border-color .16s ease}.board-cell:hover{background:#edf4ef;transform:translateY(-1px)}.board-cell.spawn{border-color:#2d5f4d;background:#dbe8de}.board-cell.drop-ok,.board-cell.drop-ok:hover{border-color:#2f7fd0;background:#d3e6fb;box-shadow:inset 0 0 0 2px #2f7fd0;transform:translateY(-1px)}.board-cell.drop-bad,.board-cell.drop-bad:hover{border-color:#b94d42;background:#f4ddd9}.board.locked .board-cell{cursor:default}.board.locked .board-cell:hover{transform:none;background:#f8faf6}.board.locked .board-cell.spawn:hover{background:#dbe8de}.resolve-banner{display:grid;grid-auto-flow:column;gap:8px;place-content:center;place-items:center;padding:6px 12px;border-radius:999px;background:#2d5f4d;color:#f8faf6;font-size:.86rem;font-weight:700;justify-self:center}.resolve-banner:before{content:"";width:12px;height:12px;border:2px solid rgb(248 250 246 / .4);border-top-color:#f8faf6;border-radius:50%;animation:spin .72s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.timer{min-width:80px;padding:10px 12px;border-radius:6px;color:#f8faf6;background:#2d5f4d;text-align:center;font-weight:700}.battle-side{display:grid;gap:12px;min-width:0}.battle-hud{display:grid;grid-template-columns:82px 1fr auto;gap:10px;align-items:stretch}.turn-timer{display:grid;place-items:center;min-height:46px;border-radius:6px;color:#f8faf6;background:#2d5f4d;font-size:1.25rem;font-weight:800}.turn-timer.warning{animation:pulse .7s ease-in-out infinite alternate;background:#9d3d35}.turn-plate{display:grid;gap:3px;align-content:center;padding:8px 12px;border:1px solid #d4ddd6;border-radius:8px;background:#fbfcfa}.turn-plate span{color:#2f68a3;font-weight:700}.turn-plate .battle-phase{color:#6f3aa9;font-size:.82rem;font-weight:800;text-transform:uppercase}.mana-bar{position:relative;height:26px;overflow:hidden;border:1px solid #9ab9d4;border-radius:6px;background:#d9ecfb}.mana-bar div{height:100%;background:#2f7fd0;transition:width .22s ease}.mana-bar span{position:absolute;inset:0;display:grid;place-items:center;color:#0f2c4b;font-size:.86rem;font-weight:800}.hand{display:flex;flex-wrap:wrap;gap:10px}.hand-card{min-height:0;padding:0;border:0;border-radius:12px;background:transparent;transition:transform .14s ease;touch-action:none;cursor:grab}.hand-card:active:not(:disabled){cursor:grabbing}.hand-card:hover:not(:disabled){background:transparent;transform:translateY(-3px)}.hand-card.active{outline:3px solid #2f7fd0;outline-offset:1px}.hand-card.planned{opacity:.4}.card-drag-ghost{position:fixed;z-index:40;transform:translate(-50%,-50%) rotate(-3deg);padding:.4em .8em;border-radius:8px;background:#181a16e6;color:#f8faf6;font-size:.8rem;font-weight:700;white-space:nowrap;pointer-events:none;box-shadow:0 8px 20px #10141266}.card-drag-ghost.valid{background:#2f7fd0f0}.hand-card.drawn{animation:card-draw .62s cubic-bezier(.2,.85,.3,1)}@keyframes card-draw{0%{opacity:0;transform:translate(85%) translateY(-4%) rotate(7deg) scale(.9)}to{opacity:1;transform:none}}.deck-stack{position:relative;display:grid;gap:2px;place-content:center;place-items:center;aspect-ratio:4 / 5;border:1px solid #244d3f;border-radius:10px;background:#2d5f4d;color:#f8faf6;box-shadow:3px 3px #24503f,6px 6px #1b4032}.battle-hud .deck-stack{width:52px;margin-right:6px}.deck-draw-fly{position:absolute;inset:0;z-index:2;border:1px solid #244d3f;border-radius:10px;background:#2d5f4d;animation:deck-draw-fly var(--deck-draw-ms, .62s) cubic-bezier(.2,.85,.3,1) forwards;pointer-events:none}@keyframes deck-draw-fly{0%{opacity:1;transform:none}to{opacity:0;transform:translate(-150%,130%) rotate(-9deg) scale(.92)}}.deck-stack strong{font-size:1.3rem}.deck-stack span{font-size:.68rem;opacity:.75}.deck-stack.empty{opacity:.55;box-shadow:none}.hand-hint{grid-column:1 / -1;margin:0;color:#66746b;font-size:.88rem;text-align:center}.compact-hand{display:grid;grid-template-columns:repeat(auto-fill,minmax(82px,100px));justify-content:center;gap:10px}.battle-metrics{width:min(100%,460px)}.battle-log{display:grid;gap:6px;width:100%;max-height:150px;overflow:auto;padding:12px;border:1px solid #d4ddd6;border-radius:8px;background:#fbfcfa}.battle-status{display:grid;gap:4px;min-height:48px;padding:10px 12px;border:1px solid #d4ddd6;border-radius:8px;background:#fbfcfa;color:#526058;font-size:.92rem}.unit-badge{container-type:inline-size;position:relative;display:block;width:100%;height:100%;border-radius:6px;overflow:hidden;line-height:1;animation:unit-pop .18s ease-out}.unit-badge .card-art{border-radius:6px}.unit-pip{position:absolute;display:inline-flex;align-items:center;gap:.1em;padding:.08em .3em;border-radius:999px;background:#121a16c7;color:#f8faf6;font-size:20cqi;font-weight:800;line-height:1}.unit-pip.steps{top:4%;left:4%}.unit-pip.attacks{top:4%;right:4%}.unit-pip.damage{bottom:4%;left:4%}.unit-pip.hp{bottom:4%;right:4%}.unit-pip.damage .ico{color:#ffb24d}.unit-pip.hp .ico{color:#ff8585}.unit-pip.steps .ico,.unit-pip.attacks .ico{color:#cfe0d4}.unit-badge:after{content:"";position:absolute;inset:0;border-radius:6px;pointer-events:none}.unit-badge.friendly:after{border:2px solid #2f7fd0}.unit-badge.enemy:after{border:2px solid #d6402b}.unit-badge.enemy{box-shadow:0 0 0 1.5px #ff5a42}.unit-badge.acting{outline:2px solid #2f7fd0}.unit-badge.targeted{animation:hit-flash .52s ease;outline:2px solid #b94d42}.planned-unit{display:grid;position:absolute;inset:4px;gap:2px;place-items:center;border-radius:5px;padding:4px;color:#254636;background:#cde3d2e6;font-size:.72rem;font-weight:800;z-index:2}.planned-unit strong{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@keyframes unit-pop{0%{opacity:.4;transform:scale(.94)}to{opacity:1;transform:scale(1)}}@keyframes pulse{0%{transform:scale(1)}to{transform:scale(1.04)}}.battle-log p{margin:0;color:#526058;font-size:.92rem}.result-backdrop{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:20px;background:#121a165c}.result-panel{display:grid;gap:8px;width:min(100%,320px);padding:18px;border:1px solid #c8d2ca;border-radius:8px;background:#fbfcfa;color:#16201b;text-align:center}.result-panel strong{font-size:1.35rem}.result-panel b{color:#2d5f4d;font-size:1.1rem}@keyframes hit-flash{0%{filter:brightness(1)}45%{filter:brightness(1.25)}to{filter:brightness(1)}}@media(max-width:760px){.app-shell{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid #d4ddd6}nav,.metrics{grid-template-columns:1fr 1fr}.content{padding:18px}.battle-page{grid-template-columns:1fr;min-height:auto;overflow:visible}.board-wrap{width:min(100%,calc((100dvh - 360px)*.6),360px)}.page-header,.login-row,.code-row{display:grid;grid-template-columns:1fr}}@supports (padding: env(safe-area-inset-top)){.content{padding-top:max(28px,env(safe-area-inset-top));padding-bottom:max(28px,env(safe-area-inset-bottom))}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.card-open{padding:0;border:0;min-height:0;background:transparent;border-radius:8px;cursor:pointer;transition:transform .12s ease}.card-open:hover{background:transparent;transform:translateY(-2px)}.card-open:focus-visible{outline:2px solid #2d5f4d;outline-offset:2px}.card-detail-backdrop{position:fixed;inset:0;z-index:30;display:grid;place-items:center;padding:20px;background:#121a166b}.card-detail-panel{position:relative;width:min(100%,560px);max-height:min(90dvh,720px);padding:20px;overflow:auto;border:1px solid #c8d2ca;border-radius:10px;background:#fbfcfa;color:#16201b}.card-detail-close{position:absolute;top:8px;right:8px;width:34px;min-height:34px;padding:0;font-size:1.4rem;line-height:1;color:#1d3129;background:#e7ede9}.card-detail-close:hover{background:#d3dfd7}.card-detail-body{display:grid;grid-template-columns:180px 1fr;gap:18px;align-items:start}.card-detail-face{display:grid;gap:8px}.card-detail-art{position:relative;aspect-ratio:4 / 5;overflow:hidden;border:1px solid #c8d2ca;border-radius:8px;background:#e7ede9}.card-detail-art>.card-art{position:absolute;inset:0}.card-detail-token{display:grid;aspect-ratio:4 / 5;place-items:center;padding:12px;border:1px solid #c8d2ca;border-radius:8px;background:repeating-linear-gradient(-45deg,#e3e9e5 0 8px,#d5ded8 8px 16px);color:#405249;font-size:.88rem;font-weight:800;text-align:center}.card-detail-tags{display:grid;gap:4px;margin:0;text-align:center}.card-detail-rarity{justify-self:center;padding:2px 10px;border-radius:999px;font-size:.8rem;font-weight:600;color:#fff;background:var(--rarity-color, #9aa3a8)}.card-detail-stance{justify-self:center;padding:2px 8px;border-radius:999px;background:#f5dfda;color:#7b302b;font-size:.78rem;font-weight:700}.card-detail-stance.defense{background:#dce9f4;color:#285c91}.card-detail-info{display:grid;gap:14px;align-content:start}.card-detail-name{margin:0;font-size:1.3rem}.card-detail-stats{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;margin:0}.card-detail-stat{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 10px;border:1px solid #e0e6e1;border-radius:6px;background:#f3f6f3}.card-detail-stat dt{display:inline-flex;align-items:center;gap:6px;color:#45564d;font-size:.9rem}.card-detail-stat dt .ico{width:16px;height:16px}.card-detail-stat dd{margin:0;font-weight:700;font-variant-numeric:tabular-nums}.card-detail-section h3{margin:0 0 6px;font-size:.95rem;color:#1d3129}.card-detail-section p{margin:0}.card-detail-statuses ul{display:grid;gap:6px;margin:0;padding:0;list-style:none}.card-detail-statuses li{display:grid;gap:2px;padding:6px 8px;border-left:3px solid #8060a7;border-radius:4px;background:#f2edf7}.card-detail-statuses small{color:#536058;font-size:.78rem}.card-detail-action{min-height:40px;border:0;border-radius:8px;background:#2d5f4d;color:#f8faf6;font-weight:800}.card-detail-action:disabled{opacity:.5}.coverage-schemes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.coverage-scheme{display:grid;gap:5px}.coverage-scheme>strong{font-size:.86rem}.coverage-grid{display:grid;grid-template-columns:repeat(var(--cov-cols, 5),1fr);gap:3px;padding:6px;border:1px dashed #c2ccc4;border-radius:6px;background:#f3f6f3}.coverage-cell{aspect-ratio:1;border-radius:3px;background:#e2e8e3}.coverage-cell.unit{background:#2d5f4d}.coverage-cell.covered{background:#7eacd0;box-shadow:inset 0 0 0 1px #2b699c8c}.coverage-cell.unit.covered{background:#2d5f4d}@media(max-width:760px){.card-detail-body{grid-template-columns:1fr}.card-detail-face{justify-self:center;width:min(180px,60%)}.coverage-schemes{grid-template-columns:1fr}}.battle-v4{position:relative;display:grid;grid-template-columns:minmax(320px,1.9fr) minmax(340px,1fr);gap:22px;align-items:start;width:min(100%,1440px);margin-inline:auto;min-height:calc(100dvh - 56px)}.battle-empty{display:grid;place-items:center;min-height:calc(100dvh - 120px)}.board-v4-wrap{position:relative;z-index:1;width:100%;aspect-ratio:var(--cols) / var(--rows);overflow:visible}.board-v4{display:grid;grid-template-columns:repeat(var(--cols),1fr);grid-template-rows:repeat(var(--rows),1fr);gap:5px;width:100%;height:100%}.unit-layer-v4{--gap: 5px;isolation:isolate}.unit-layer-v4 .unit-token{z-index:2;display:grid;place-items:center;padding:0;pointer-events:auto;cursor:help}.unit-layer-v4 .unit-token-inner{width:90%;height:90%}.unit-layer-v4 .unit-token.spawning .unit-token-inner{animation:unit-spawn var(--spawn-ms, .36s) cubic-bezier(.22,.9,.32,1) both}@keyframes unit-spawn{0%{opacity:0;transform:translateY(18%) scale(.55)}65%{opacity:1;transform:translateY(-4%) scale(1.06)}to{opacity:1;transform:translateY(0) scale(1)}}.cell-v4{position:relative;display:grid;place-items:center;width:90%;height:90%;align-self:center;justify-self:center;padding:0;border:1px solid #cfdbd3;border-radius:8px;background:#f4f8f5;aspect-ratio:1;min-width:0}.cell-v4:disabled{cursor:default;opacity:1}.cell-v4.ok{border-color:#3f9d5f;background:#dff3e4;box-shadow:inset 0 0 0 2px #7fca97}.cell-v4.inspect-coverage{border-color:#b97825;background-color:#fff5dd;background-image:repeating-linear-gradient(-45deg,rgb(235 174 70 / .28) 0 5px,transparent 5px 10px);box-shadow:inset 0 0 0 2px #be7c21b8}.cell-v4.ok.inspect-coverage{border-color:#3f9d5f;box-shadow:inset 0 0 0 2px #be7c21b8,0 0 0 2px #7fca97}.planned-preview{position:absolute;inset:0;border-radius:8px;overflow:hidden;box-shadow:inset 0 0 0 2px #2f7fd0;background:#2f7fd029;opacity:.62;pointer-events:none}.planned-preview-art{position:absolute;inset:0}.planned-preview-art .card-art{width:100%;height:100%;border:0;border-radius:0}.planned-preview-stats{position:absolute;top:4%;left:4%;display:inline-flex;gap:5px;padding:1px 5px;border-radius:6px;background:#eef3efeb;color:#16201b;font-size:.62rem;font-weight:800}.planned-preview-stats>span{display:inline-flex;align-items:center;gap:2px}.planned-preview-stats .ico{width:10px;height:10px;flex:none}.planned-badge{position:absolute;left:50%;bottom:5%;transform:translate(-50%);padding:1px 8px;border-radius:999px;background:#2f68a3;color:#fff;font-size:.58rem;font-weight:800;letter-spacing:.02em}.planned-badge.spell{background:#8a4bc0}.planned-target{position:absolute;z-index:3;width:calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols));height:calc((100% - (var(--rows) - 1) * var(--gap)) / var(--rows));transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap))));border-radius:8px;box-shadow:inset 0 0 0 2px #8a4bc0e6,0 0 10px #8a4bc059;background:#8a4bc029;pointer-events:none}.planned-target-art{position:absolute;top:4%;right:4%;width:38%;aspect-ratio:1;border:2px solid #8a4bc0;border-radius:6px;overflow:hidden;background:#fff;box-shadow:0 2px 6px #34164e66}.planned-target-art .card-art{width:100%;height:100%;border:0;border-radius:0}.log-target-ring{position:absolute;z-index:12;width:calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols));height:calc((100% - (var(--rows) - 1) * var(--gap)) / var(--rows));transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap))));border-radius:8px;box-shadow:inset 0 0 0 3px #1d8f9e,0 0 14px #1d8f9e8c;pointer-events:none;animation:log-ring-pulse .8s ease-in-out infinite alternate}@keyframes log-ring-pulse{0%{box-shadow:inset 0 0 0 3px #1d8f9e,0 0 8px #1d8f9e66}to{box-shadow:inset 0 0 0 3px #29b3c4,0 0 18px #1d8f9eb3}}.spell-cast-float{position:absolute;z-index:11;display:grid;place-items:center;width:calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols));height:calc((100% - (var(--rows) - 1) * var(--gap)) / var(--rows));transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap))));pointer-events:none}.spell-cast-float-art{width:62%;aspect-ratio:1;border:2px solid #8a4bc0;border-radius:8px;overflow:hidden;background:#fff;box-shadow:0 4px 14px #34164e73;animation:spell-cast-rise var(--spell-cast-ms, .95s) ease-out both}.spell-cast-float-art .card-art{width:100%;height:100%;border:0;border-radius:0}@keyframes spell-cast-rise{0%{opacity:0;transform:translateY(28%) scale(.7)}22%{opacity:1;transform:translateY(0) scale(1.04)}70%{opacity:1;transform:translateY(-34%) scale(1)}to{opacity:0;transform:translateY(-58%) scale(.94)}}.plan-summary{display:grid;gap:6px;padding:8px 10px;border:1px solid #cfdbd3;border-radius:10px;background:#f7faf7;font-size:.78rem}.plan-summary-selected{margin:0;color:#2f68a3}.plan-summary-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;color:#16201b}.plan-summary-head span{color:#6b7d75;font-size:.72rem}.plan-summary-list{display:grid;gap:4px;margin:0;padding:0;list-style:none}.plan-summary-list li{display:flex;align-items:center;gap:6px}.plan-summary-kind{flex:none}.plan-summary-kind.spell{color:#8a4bc0}.plan-summary-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700}.plan-summary-cost{flex:none;color:#2f68a3;font-weight:800}.plan-summary-remove{flex:none;width:22px;height:22px;padding:0;border:1px solid #cfdbd3;border-radius:6px;background:#fff;color:#8a2f2f;font-size:.8rem;font-weight:800;line-height:1;cursor:pointer}.plan-summary-remove:disabled{opacity:.5;cursor:default}.plan-summary-clear{justify-self:start}.unit-v4{container-type:inline-size;position:relative;display:grid;place-items:center;width:100%;height:100%;border-radius:8px;overflow:hidden;box-shadow:0 0 0 2px #2d9d5f}.unit-v4.enemy{box-shadow:0 0 0 2px #d0443c}.unit-v4.inspected,.unit-layer-v4 .unit-token:focus-visible .unit-v4{box-shadow:0 0 0 2px var(--unit-side-outline, #2d9d5f),0 0 0 4px #ffc34d,0 0 12px #ffbc3db8}.unit-v4.enemy.inspected,.unit-layer-v4 .unit-token:focus-visible .unit-v4.enemy{--unit-side-outline: #d0443c}.unit-v4.spell-target{box-shadow:0 0 0 2px var(--unit-side-outline, #2d9d5f),0 0 0 4px #8a4bc0,0 0 12px #8a4bc099}.unit-v4.enemy.spell-target{--unit-side-outline: #d0443c}.unit-v4.acting{filter:brightness(1.12) saturate(1.08)}.unit-v4.targeted{animation:unit-targeted .42s ease-out}.unit-v4.waiting{animation:unit-waited var(--unit-waited-ms, .76s) ease-out both}.unit-wait-badge{position:absolute;z-index:4;left:50%;bottom:calc(100% + 5px);animation:wait-badge-float var(--unit-waited-ms, .76s) ease both;width:max-content;max-width:min(170px,46vw);padding:3px 6px;border:1px solid rgb(208 222 237 / .9);border-radius:5px;transform:translate(-50%);background:#1d364ef0;box-shadow:0 2px 8px #0c1b2a57;color:#fff;font-size:clamp(.57rem,2.1cqi,.72rem);font-weight:700;line-height:1.15;text-align:center;pointer-events:none}@keyframes unit-waited{0%{filter:brightness(1)}28%{filter:brightness(1.16) saturate(.82)}to{filter:brightness(.94) saturate(.88)}}@keyframes wait-badge-float{0%{opacity:0;transform:translate(-50%) translateY(6px)}16%{opacity:1;transform:translate(-50%) translateY(0)}72%{opacity:1;transform:translate(-50%) translateY(-2px)}to{opacity:0;transform:translate(-50%) translateY(-7px)}}@keyframes unit-targeted{45%{filter:brightness(1.28) saturate(1.35);box-shadow:0 0 0 3px #ffb24d,0 0 14px #ff7a2fd9}}.unit-layer-v4 .damage-popup{z-index:20;grid-template-columns:auto auto;gap:.12rem;justify-content:center}.unit-layer-v4 .damage-popup>.ico{z-index:1;width:clamp(1.2rem,4vw,2rem);height:clamp(1.2rem,4vw,2rem);color:#ff6c39;filter:drop-shadow(0 1px 2px rgb(0 0 0 / .28));animation:burst-pop .6s ease-out forwards}.unit-layer-v4 .damage-popup.heal>.ico,.unit-layer-v4 .damage-popup.heal .damage-popup-text{color:#2d9d5f}.unit-layer-v4 .damage-popup.status{grid-template-columns:1fr}.unit-layer-v4 .damage-popup.status .damage-popup-text{color:#7a3fb3;font-size:clamp(.72rem,2.6vw,1rem);white-space:nowrap}.cell-effect-pulse{position:absolute;top:0;left:0;z-index:1;width:calc((100% - (var(--cols) - 1) * var(--gap)) / var(--cols));height:calc((100% - (var(--rows) - 1) * var(--gap)) / var(--rows));border-radius:8px;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap))));background:#c9362f61;box-shadow:inset 0 0 0 2px #b42a266b,0 0 12px #c9362f52;animation:cell-effect-wave var(--area-pulse-ms, .68s) ease-out forwards}.cell-effect-pulse.ability-death{background:#c9362f80;box-shadow:inset 0 0 0 2px #ff685894,0 0 16px #da372c7a}.cell-effect-pulse.ability-spawn{background:#3e97d652;box-shadow:inset 0 0 0 2px #76d1ff75,0 0 12px #3e97d65c;animation-name:cell-spawn-wave}@keyframes cell-effect-wave{0%{opacity:0;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap)))) scale(.76)}32%{opacity:1;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap)))) scale(1)}to{opacity:0;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap)))) scale(1.04)}}@keyframes cell-spawn-wave{0%{opacity:0;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap)))) scale(.42)}48%{opacity:1;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap)))) scale(1.03)}to{opacity:0;transform:translate(calc(var(--col) * (100% + var(--gap))),calc(var(--row) * (100% + var(--gap)))) scale(.88)}}.unit-v4-art{position:absolute;inset:0}.unit-v4-art>.card-art{width:100%;height:100%;border:0;border-radius:0}.unit-v4-stat{position:absolute;z-index:1;display:inline-flex;align-items:center;gap:.1em;padding:.08em .28em;border-radius:999px;background:#14201bd1;color:#fff;font-size:17cqi;font-weight:800;font-variant-numeric:tabular-nums;line-height:1;text-align:center}.unit-v4-stat .ico{width:1em;height:1em;flex:0 0 auto}.unit-v4-steps{left:3%;top:3%}.unit-v4-attacks{right:3%;top:3%}.unit-v4-dmg{left:3%;bottom:3%}.unit-v4-hp{right:3%;bottom:3%}.unit-v4-steps .ico,.unit-v4-attacks .ico{color:#cfe0d4}.unit-v4-dmg .ico{color:#ffb24d}.unit-v4-hp .ico{color:#ff8585}.unit-v4-stance{position:absolute;z-index:2;left:50%;bottom:3%;display:grid;place-items:center;width:1.45em;height:1.45em;border-radius:50%;transform:translate(-50%);background:#9d3d35e6;color:#fff;font-size:16cqi;line-height:1}.unit-v4-stance-count{margin-left:1px;font-size:.86em;font-weight:800}.unit-v4.stance-defense .unit-v4-stance{background:#2f68a3eb}.unit-v4-status{position:absolute;z-index:2;left:50%;top:50%;padding:0 3px;border-radius:6px;transform:translate(-50%,-50%);background:#7a3ca0e6;color:#fff;font-size:.62rem;font-weight:800}.unit-inspector{position:fixed;z-index:60;display:grid;gap:9px;width:min(224px,calc(100vw - 16px));max-height:min(280px,calc(100dvh - 16px));overflow-y:auto;padding:10px;border:1px solid #b9c6bd;border-radius:10px;background:#fbfdfafa;box-shadow:0 8px 24px #12251c42;color:#21372f;font-size:.78rem;line-height:1.25}.unit-inspector.bottom{right:8px;bottom:8px;left:8px;width:min(440px,calc(100vw - 16px));margin:0 auto}.unit-inspector-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}.unit-inspector-stance{flex:none;padding:3px 6px;border-radius:999px;background:#f5dfda;color:#7b302b;font-size:.7rem;font-weight:800}.unit-inspector-stance.defense{background:#dce9f4;color:#285c91}.unit-inspector-stats{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:0}.unit-inspector-stats>div{display:flex;align-items:center;justify-content:space-between;gap:5px;padding:4px 5px;border-radius:6px;background:#edf3ee}.unit-inspector-stats dt{color:#52645a;font-size:.68rem}.unit-inspector-stats dd{display:inline-flex;align-items:center;gap:3px;margin:0;font-weight:800}.unit-inspector-stats .ico{width:.9rem;height:.9rem}.unit-inspector-statuses{display:grid;gap:5px}.unit-inspector-statuses>strong{font-size:.72rem}.unit-inspector-statuses ul{display:grid;gap:6px;margin:0;padding:0;list-style:none}.unit-inspector-statuses li{display:grid;gap:2px;padding:5px;border-left:3px solid #8060a7;border-radius:4px;background:#f2edf7}.unit-inspector-statuses small{color:#536058;font-size:.69rem}.tower-row{position:relative;display:grid;grid-template-columns:repeat(var(--cols, 5),minmax(0,1fr));gap:5px}.tower-slot{min-width:0;display:grid;place-items:center}.tower{box-sizing:border-box;width:100%;aspect-ratio:1;padding:0;border:0;border-radius:6px;background:transparent;color:inherit;cursor:pointer;font:inherit;text-align:center}.tower:focus-visible{outline:2px solid #ffc34d;outline-offset:2px}.tower.dead{display:grid;place-items:center;opacity:.35;cursor:default;filter:grayscale(1);border:1px solid #b9c8bf;background:#eef3ef}.tower-token{position:relative;z-index:2;width:90%;transition:filter .16s ease}.tower.dead{width:90%}.tower-token.lunging{z-index:5}.tower-token-inner{display:grid;width:100%;height:100%;place-items:center}.tower-v4{box-shadow:0 0 0 2px #54778f}.tower-v4 .unit-v4-art>.card-art{background:radial-gradient(circle at 50% 85%,#24384a,#101b25)}.tower-ruin{padding:.25rem;color:#42524a;font-size:clamp(.55rem,2.1vw,.72rem);font-weight:800;line-height:1.1}.battle-sidebar-controls{display:grid;gap:8px}.battle-player-names{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:8px;align-items:center;color:#42524a;text-align:center}.battle-player-names span{overflow:hidden;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.battle-surrender{width:100%;background:#9d3d35}.battle-surrender:hover:not(:disabled){background:#7f302a}.hand-v4{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.hand-card-v4{position:relative;display:grid;gap:2px;padding:4px;border:1px solid #cfdbd3;border-radius:10px;background:#fbfcfa;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;overflow:hidden}.hand-card-v4:active:not(:disabled){cursor:grabbing}.hand-card-v4.drawn{animation:card-draw-v4 var(--deck-draw-ms, .62s) cubic-bezier(.2,.85,.3,1)}@keyframes card-draw-v4{0%{opacity:0;transform:translate(45%,-115%) rotate(6deg) scale(.82)}55%{opacity:1}to{opacity:1;transform:none}}.card-drag-ghost{position:fixed;z-index:50;transform:translate(-50%,-120%);padding:4px 10px;border-radius:8px;background:#2d5f4df0;color:#f8faf6;font-size:.72rem;font-weight:800;pointer-events:none;box-shadow:0 4px 14px #14201b66}.card-drag-ghost.valid{background:#3f9d5ff5}.hand-card-v4.active{border-color:#2f7fd0;box-shadow:0 0 0 2px #9cc4ea}.hand-card-v4.planned{opacity:.4}.hand-card-v4.poor{opacity:.55;filter:grayscale(.5)}.hand-card-art{display:block;aspect-ratio:1;border-radius:6px;overflow:hidden}.hand-card-art>.card-art{width:100%;height:100%;border:0;border-radius:0}.hand-card-name{font-size:.66rem;font-weight:700;color:#21372f;line-height:1.05;text-align:center;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hand-card-stats{position:relative;z-index:1;display:grid;grid-template-columns:1fr 1fr;gap:1px 5px;justify-items:center;padding:2px 3px;border-radius:6px;background:#eef3ef;color:#16201b;font-size:.7rem;font-weight:800;line-height:1.1}.hand-card-stats>span{display:inline-flex;align-items:center;gap:2px}.hand-card-stats .ico{width:11px;height:11px;flex:none}.hand-card-stats.spell{display:block;text-align:center;color:#6a3a94;background:#f0e9f6;font-size:.6rem;text-transform:uppercase;letter-spacing:.03em}.hand-card-cost{position:absolute;right:3px;top:3px;min-width:16px;padding:0 3px;border-radius:6px;background:#2f7fd0;color:#fff;font-size:.72rem;font-weight:800;text-align:center}.resolve-btn{min-height:42px;border:0;border-radius:10px;background:#2d5f4d;color:#f8faf6;font-size:.95rem;font-weight:800;cursor:pointer}.resolve-btn:disabled{opacity:.5}.resolve-btn.ready{background:#9d6b2d}.ready-hint{margin:-6px 0 0;color:#6b7d75;font-size:.78rem;text-align:center}.dashboard-actions,.invite-actions,.invite-link-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.invite-page{max-width:680px}.invite-page h1{margin:4px 0 8px}.invite-link-row{margin:20px 0 10px}.invite-link-row input{flex:1 1 360px;min-width:0;padding:10px 12px;border:1px solid #cbd7cf;border-radius:9px;background:#fff;color:#33433b}.invite-meta,.invite-warning,.dashboard-message{color:#6b7d75;font-size:.9rem}.invite-warning{margin:18px 0}.battle-log{list-style:none;margin:0;padding:8px;border:1px solid #e0e7e2;border-radius:8px;background:#fafbfa;color:#4a5a52;font-size:.72rem;line-height:1.5;max-height:140px;overflow-y:auto}.play-log{display:grid;gap:2px;list-style:none;padding-left:0}.play-log-empty{color:#7d8c84}.play-log-entry{display:flex;align-items:center;gap:6px;width:100%;padding:3px 6px;border:0;border-radius:6px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.play-log-entry:hover,.play-log-entry.active{background:#dff0f2;box-shadow:inset 0 0 0 1px #9ed2d9}.play-log-side{flex:none;width:8px;height:8px;border-radius:50%}.play-log-side.mine{background:#2d9d5f}.play-log-side.enemy{background:#d0443c}.play-log-turn{flex:none;min-width:22px;color:#7d8c84;font-weight:700}.play-log-kind{flex:none}.play-log-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700}@media(min-width:1200px)and (min-height:800px){.battle-v4 .battle-log{max-height:min(320px,32dvh)}}@media(max-width:1050px){.battle-v4{grid-template-columns:minmax(300px,1.6fr) minmax(260px,1fr);gap:14px}}@media(max-width:720px){.content-battle{overflow:auto}.battle-v4{grid-template-columns:1fr}.battle-stage{width:min(100%,calc((100dvh - 250px) * var(--cols, 5) / var(--rows, 5)))}}.friends-page{display:grid;gap:14px}.friend-search,.friend-search-result,.friend-row,.friends-columns{display:flex;gap:10px}.friend-search{max-width:520px}.friend-search input{flex:1;min-width:0}.friend-search-result,.friend-section{border:1px solid #d4ddd6;border-radius:12px;padding:12px;background:#fbfcfa}.friend-search-result{align-items:center;max-width:520px}.friends-columns{align-items:start;flex-wrap:wrap}.friend-section{display:grid;gap:10px;min-width:min(100%,280px);flex:1 1 280px}.friend-section h2{margin:0;font-size:1rem}.friend-row{align-items:center;justify-content:space-between;flex-wrap:wrap}.friend-row>div{display:flex;gap:6px;flex-wrap:wrap}
