/* Battle board: both seats keep the same top-to-bottom reading order. */
.battle-page.battle-board{width:min(1080px,100%);margin:0 auto;padding:30px 34px 46px;display:flex;flex-direction:column;gap:18px;color:var(--ink)}
.battle-board .battle-header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0;padding:0 0 6px;border:0}
.battle-board .battle-header h2{font-size:clamp(22px,3vw,32px);line-height:1.2;margin:0 0 7px;color:var(--forest)}
.battle-header-right{display:flex;align-items:center;gap:12px}
.battle-board .round-clock{min-width:58px;text-align:center;border:1px solid var(--line);border-radius:8px;padding:5px 9px;background:var(--surface)}
.battle-board .round-clock span{font-size:23px;line-height:1.05;color:var(--forest)}
.battle-board .round-clock small{font-size:8px;letter-spacing:1.2px;color:var(--muted);display:block}
.battle-side{width:100%;padding:18px 20px 20px;background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 4px 18px #173c2d06}
.battle-opponent{border-top:3px solid #947343}
.battle-player{border-bottom:3px solid var(--forest)}
.battle-side-heading{display:flex;align-items:center;justify-content:space-between;gap:14px}
.battle-side-heading>div>small{font-size:9px;font-weight:750;letter-spacing:1.7px;color:var(--muted)}
.battle-side-heading h3{margin:3px 0 0;font-size:18px;line-height:1.2;color:var(--forest)}
.battle-side-resources{display:flex;align-items:center;gap:15px;text-align:right}
.battle-board .life-number{font-size:25px;font-weight:800;color:var(--forest);white-space:nowrap}
.battle-board .life-number small{font-size:9px;color:var(--muted);font-weight:650}
.battle-board .troop-number{font-size:12px;font-weight:650;color:var(--ink)}
.battle-board .life-track{height:5px;background:var(--surface-soft);margin:11px 0;border-radius:5px;overflow:hidden}
.battle-board .life-track span{height:100%;display:block;background:var(--forest);border-radius:5px;transition:width .35s ease}
.battle-opponent .life-track span{background:#9a7540}
.battle-side-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 13px}
.battle-board .bonus-chip{font-size:10px;color:var(--muted);border:0;padding:0;background:none}
.battle-side-meta>small{font-size:10px;text-align:right;color:var(--muted)}
.battle-side .hand{display:grid;grid-template-columns:repeat(4,minmax(110px,1fr));gap:12px;width:min(640px,100%);margin:auto;padding:0;overflow:visible;opacity:1}
.battle-side .card-click{width:100%;min-width:0;margin:0;display:block;transition:transform .18s ease}
.battle-side .hero-card{width:100%;aspect-ratio:.78;min-height:0;box-shadow:0 3px 10px #173c2d13}
.battle-side .hero-card.selected{outline:3px solid var(--brass);outline-offset:3px;box-shadow:0 0 0 5px #9a754026}
.battle-side .hero-card.played{filter:grayscale(.65);opacity:.48}
.battle-player .card-click:enabled:hover{transform:translateY(-4px)}
.battle-side .card-name{font-size:15px}
.battle-side .card-stats b{font-size:20px}
.battle-side .card-stats small{font-size:8px}
.battle-board .arena.battlefield{position:relative;display:block;width:100%;height:360px;min-height:360px;margin:0;overflow:hidden;border:1px solid #647452;border-radius:15px;background:linear-gradient(#173c2da8,#3a46358c),url('./assets/art/battle-steppe.webp') center 58%/cover;box-shadow:inset 0 0 45px #10291f7a}
.battlefield #battle-canvas{display:block;width:100%;height:100%;position:absolute;inset:0}
.battle-army-readout{position:absolute;z-index:1;display:flex;flex-direction:column;gap:4px;max-width:31%;pointer-events:none;color:var(--inverse);text-shadow:0 1px 4px #10291f}
.battle-army-readout>small:first-child{font-size:8px;letter-spacing:1.4px;font-weight:750;color:#f6ebcdba}
.battle-army-readout>b{font-size:15px;line-height:1.15}
.battle-army-readout>span{font-size:14px;font-weight:800;font-variant-numeric:tabular-nums}
.battle-army-readout>small:last-child{font-size:10px;line-height:1.4;color:#f2dfaf}
.enemy-army-readout{right:17px;top:15px;text-align:right;align-items:flex-end}
.own-army-readout{left:17px;bottom:15px}
.battle-phase{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;max-width:90%;border:1px solid #f4e6bc34;border-radius:30px;background:#10291fd1;padding:7px 15px;font-size:11px;font-weight:650;white-space:nowrap;color:#f4e6bc;box-shadow:0 3px 15px #0002}
.battle-reveal{position:absolute;z-index:3;left:50%;top:50%;transform:translate(-50%,-50%);width:min(620px,calc(100% - 30px));padding:16px 18px;background:#fffaf0f7;border:1px solid #d6c69c;border-radius:11px;box-shadow:0 8px 32px #10291f66}
.battle-reveal[hidden]{display:none}
.battle-result-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;color:var(--forest)}
.battle-result-title b{font-size:15px}
.battle-result-title span{font-size:11px;color:var(--muted)}
.battle-result-teams{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.battle-result-team>div{display:flex;flex-direction:column;gap:3px;margin-bottom:9px}
.battle-result-team small{font-size:8px;letter-spacing:1.3px;color:var(--muted);font-weight:750}
.battle-result-team>div>b{font-size:14px;color:var(--ink)}
.battle-result-team dl{display:grid;grid-template-columns:repeat(2,1fr);gap:9px 12px;margin:0}
.battle-result-team dl>div{border-top:1px solid var(--line);padding-top:5px}
.battle-result-team dt{font-size:10px;color:var(--muted)}
.battle-result-team dd{font-size:17px;font-weight:800;margin:2px 0 0;color:var(--forest);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.battle-result-team [data-stat="damage"]{color:#9b593b}
.battle-last-result{padding:19px 21px;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--brass);border-radius:12px}
.battle-skill-summary{margin:0;padding:13px 16px;border-left:3px solid var(--battle-accent,var(--brass));border-radius:0 8px 8px 0;background:var(--surface-soft);font-size:12px;line-height:1.6}
.battle-skill-summary>b{color:var(--forest);font-size:14px}
.battle-skill-summary p{margin:5px 0 2px}
.battle-skill-summary small{display:block;font-size:10px;color:var(--muted)}
.battle-controls{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(220px,.75fr);gap:25px;margin:0;padding:21px;background:var(--surface);border:1px solid var(--line);border-radius:13px}
.battle-troop-control>div:first-child label{font-size:14px;font-weight:750;color:var(--forest)}
.battle-troop-control>div:first-child small{font-size:10px;color:var(--muted)}
.battle-board .troop-input{display:flex;align-items:center;gap:15px;margin:14px 0 12px}
.battle-board .troop-input output{min-width:66px;font-size:23px;font-weight:850;text-align:right;color:var(--forest);font-variant-numeric:tabular-nums}
.battle-board #troop-range{width:100%;accent-color:var(--forest);cursor:pointer}
.battle-board .troop-shortcuts{display:flex;gap:7px;flex-wrap:wrap;margin:0 0 13px}
.battle-board .troop-shortcuts button{background:var(--surface-soft);border:1px solid var(--line);border-radius:5px;color:var(--ink);padding:6px 9px;font-size:11px;font-weight:650;cursor:pointer}
.battle-board .troop-shortcuts button:enabled:hover{background:#e0d3b8;border-color:var(--brass)}
.battle-board .boost{display:flex;align-items:flex-start;gap:8px;margin:0 0 9px;font-size:11px;line-height:1.5;color:var(--ink)}
.battle-board .boost input{accent-color:var(--forest);margin-top:2px}
.battle-board #reserve-label{font-size:10px;color:var(--muted)}
.commit-panel{display:flex;flex-direction:column;justify-content:center;gap:11px;padding-left:22px;border-left:1px solid var(--line)}
.battle-board .attack-preview{display:flex;flex-direction:column;gap:5px;border:0;background:none;padding:0;text-align:left}
.battle-board .attack-preview>span{font-size:11px;color:var(--muted)}
.battle-board .attack-preview strong{font-size:clamp(27px,3vw,37px);line-height:1.1;color:var(--forest);font-weight:850;font-variant-numeric:tabular-nums}
.battle-board .attack-preview>small{font-size:9px;line-height:1.5;color:var(--muted)}
.battle-board .commit-panel .btn{width:100%;padding:13px 12px;font-size:13px}
.commit-hint{font-size:9px;line-height:1.5;color:var(--muted)}
.battle-board.is-resolving .battle-controls{opacity:.65;pointer-events:none}
.battle-finished{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px}
.battle-finished h3{font-size:22px;margin:0 0 8px;color:var(--forest)}
.battle-finished p{font-size:12px;color:var(--muted)}
.battle-board .stage-head{margin:4px 0 -9px}
.battle-board .stage-head h3{font-size:17px}
.battle-board .stage-head small{color:var(--muted);font-size:11px}
.battle-board .battle-log{display:flex;flex-direction:column;gap:8px}
.battle-board .log-row{padding:0;border:1px solid var(--line);background:var(--surface);border-radius:8px;overflow:hidden}
.battle-board .log-row summary{display:grid;grid-template-columns:minmax(130px,1fr) auto auto;gap:13px;align-items:center;padding:14px 16px;font-size:11px;color:var(--muted);cursor:pointer}
.battle-board .log-row summary b{color:var(--forest);font-size:12px}
.battle-damage{font-weight:800;color:#9b593b;white-space:nowrap}
.battle-board .log-detail{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin:0;padding:0 17px 16px}
.battle-board .log-detail>div>small{font-size:8px;letter-spacing:1.2px;font-weight:700;color:var(--muted);display:block;margin-bottom:4px}
.battle-board .log-detail>div>b{color:var(--forest);font-size:14px}
.battle-board .log-detail p{font-size:11px;line-height:1.65;margin:7px 0;color:var(--ink)}
.battle-board .log-detail .cancelled{color:#9b593b;font-weight:650}
.battle-waiting{text-align:center;max-width:600px;margin:auto}
@media(max-width:800px){
 .battle-page.battle-board{padding:23px 20px 35px;gap:15px}
 .battle-board .battle-header h2{font-size:23px}
 .battle-side{padding:15px}
 .battle-side .hand{gap:9px}
 .battle-board .arena.battlefield{height:340px;min-height:340px}
 .battle-controls{gap:18px;padding:18px;grid-template-columns:minmax(0,1.1fr) minmax(180px,.9fr)}
 .commit-panel{padding-left:18px}
}
@media(max-width:540px){
 .battle-page.battle-board{padding:15px 10px 25px;gap:10px}
 .battle-board .battle-header{align-items:flex-start;gap:7px}
 .battle-board .battle-header h2{font-size:20px;max-width:205px}
 .battle-board .battle-header>div>small{font-size:10px}
 .battle-header-right{gap:5px;flex-wrap:wrap;justify-content:flex-end;max-width:130px}
 .battle-header-right>.badge{font-size:9px;padding:5px 8px}
 .battle-header-right .btn{padding:5px 8px;font-size:9px}
 .battle-board .round-clock{min-width:43px;padding:3px 6px}
 .battle-board .round-clock span{font-size:19px}
 .battle-board .round-clock small{font-size:6px}
 .battle-side{padding:10px 9px 12px;border-radius:11px}
 .battle-side-heading h3{font-size:16px}
 .battle-side-heading>div>small{font-size:8px;letter-spacing:1px}
 .battle-side-resources{flex-direction:column;gap:2px;align-items:flex-end}
 .battle-board .life-number{font-size:22px}
 .battle-board .troop-number{font-size:10px}
 .battle-side-meta>small{max-width:56%;font-size:9px}
 .battle-side .hand{grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;width:100%}
 .battle-side .hero-card{height:145px;aspect-ratio:auto;border-width:1px;border-radius:6px}
 .battle-side .card-body{padding:5px 4px 6px}
 .battle-side .card-name{font-size:10px;line-height:1.15;min-height:23px;margin:0 0 3px}
 .battle-side .card-stats{padding:3px 0;margin:0}
 .battle-side .card-stats>div{flex-direction:column;align-items:center;gap:1px}
 .battle-side .card-stats>div+div{padding-left:3px}
 .battle-side .card-stats b{font-size:13px}
 .battle-side .card-stats small{font-size:5.5px;letter-spacing:0}
 .battle-side .card-top{left:4px;right:4px;top:4px;gap:3px}
 .battle-side .card-top .cost,.battle-side .card-top .level{font-size:7px;padding:3px}
 .battle-side .card-top .cost>span{font-size:6px}
 .battle-board .arena.battlefield{height:220px;min-height:220px;border-radius:11px}
 .battle-army-readout{max-width:35%;gap:3px}
 .battle-army-readout>small:first-child{font-size:6px;letter-spacing:.6px}
 .battle-army-readout>b{font-size:11px}
 .battle-army-readout>span{font-size:11px}
 .battle-army-readout>small:last-child{font-size:8px}
 .enemy-army-readout{right:11px;top:11px}
 .own-army-readout{left:11px;bottom:11px}
 .battle-phase{font-size:9px;padding:6px 9px;white-space:normal;text-align:center;width:max-content;max-width:90%}
 .battle-reveal{padding:12px;width:calc(100% - 22px)}
 .battle-result-title{align-items:flex-start;flex-direction:column;gap:3px;margin-bottom:11px}
 .battle-result-title b{font-size:13px}
 .battle-result-title span{font-size:9px}
 .battle-result-teams{gap:13px}
 .battle-result-team dl{gap:8px}
 .battle-result-team>div>b{font-size:12px}
 .battle-result-team dt{font-size:9px}
 .battle-result-team dd{font-size:14px}
 .battle-controls{grid-template-columns:1fr;gap:10px;padding:13px}
 .battle-board .troop-input{margin:8px 0;gap:10px}
 .battle-board .troop-input output{font-size:20px}
 .battle-board .troop-shortcuts{gap:5px;margin-bottom:9px}
 .battle-board .troop-shortcuts button{padding:5px 8px;font-size:9px}
 .battle-board .boost{font-size:10px;margin-bottom:5px}
 .battle-board #reserve-label{font-size:9px}
 .commit-panel{border-left:0;border-top:1px solid var(--line);padding:11px 0 0;gap:8px}
 .battle-board .attack-preview{display:grid;grid-template-columns:1fr auto;gap:3px 9px}
 .battle-board .attack-preview strong{font-size:26px;grid-column:2;grid-row:1 / span 2;align-self:center;text-align:right}
 .battle-board .attack-preview>span{font-size:10px}
 .battle-board .attack-preview>small{font-size:8px;grid-column:1}
 .battle-board .commit-panel .btn{padding:10px;font-size:12px}
 .battle-skill-summary{padding:9px 11px;font-size:10px;line-height:1.45}
 .battle-skill-summary>b{font-size:12px}
 .battle-skill-summary small{font-size:9px}
 .battle-last-result{padding:14px}
 .battle-finished{flex-direction:column;align-items:flex-start}
 .battle-board .log-row summary{grid-template-columns:1fr auto;gap:7px 9px;padding:12px}
 .battle-board .log-row summary>span:first-of-type{grid-row:2}
 .battle-board .log-detail{gap:13px;padding:0 12px 12px}
 .battle-board .log-detail p{font-size:10px}
}
@media(prefers-reduced-motion:reduce){
 .battle-board *{animation:none!important;transition:none!important;scroll-behavior:auto}
}
