/* 战双PRO · 移动端决斗盘 v2 —— 四层架构（读牌层 / 局势层 / 资源层 / 决策层）
 * ==========================================================================
 * 作用域：#page-battle.bp-compact.board-v2（手机横屏紧凑盘）。
 *   · 桌面盘 bp-large、平板盘完全不受影响（所有选择器都带 board-v2 类）。
 *   · 开关：URL 加 ?bv2=0 关闭；?bv2=1 强制开启（桌面也可预览，供截图/回归用）。
 * 皮肤：取自 ui-reframe.css:166 的升格网络实测值（该文件已把对决盘 --gold 映射为
 *   紫罗兰 #a78bff），主按钮渐变与 #btn-end 同源；冷青 #78e2ee 作高光/当前态。
 * 结构策略：不动 DOM 语义与 JS 依赖——
 *   ① display:contents 展平 .field-wrap/.bottom-wrap/.main-bottom 等旧包裹层，
 *      让叶子块直接成为 .battle-main 的换行项；
 *   ② 用 order + flex-basis 把它们重排成 v2 的八行堆栈（对手 HUD→终局手牌）；
 *   ③ 每行的可见性/密度由 CSS 变量统一调参，便于后续按机型微调。
 * 设计意图（对应讨论结论）：
 *   · 场上卡不再承担阅读 —— 卡面只做位置与状态标记（空格位去边框、数值角标化）；
 *   · 读牌统一交给左侧常驻详情栏（跟随最新操作，见 js/37-board-v2.js）；
 *   · 资源信息全部回到可读字号（≥9px），不再用 6–8px 塞满；
 *   · 近大远小：对手行矮（主要看）、我方行高（主要操作）、手牌最大（第二核心区）。
 * ========================================================================== */

/* 读牌层节点由 js/37 注入：非 board-v2（桌面/竖屏）时必须彻底隐藏，避免裸块出现 */
#page-battle:not(.board-v2) .bv2-reader { display: none !important; }

/* ---------- 令牌 ---------- */
#page-battle.board-v2 {
    --bv2-violet: #a78bff;
    --bv2-violet-hi: #d5c7ff;
    --bv2-violet-dim: #7567a8;
    --bv2-violet-glow: rgba(167,139,255,.22);
    --bv2-cyan: #78e2ee;
    --bv2-line: rgba(139,171,221,.22);
    --bv2-line-2: rgba(167,139,255,.42);
    --bv2-panel: rgba(14,22,38,.92);
    --bv2-panel-2: rgba(12,22,37,.85);
    --bv2-ink: #eaf2ff;
    --bv2-muted: #879ab8;
    --bv2-gap: 3px;
    --bv2-h-top: 32px;
    --bv2-h-oppmeta: 22px;
    --bv2-h-oppres: 22px;
    --bv2-h-opprow: 52px;
    --bv2-h-mid: 22px;
    --bv2-h-myrow: 64px;
    --bv2-h-res: 40px;
    --bv2-actions-w: 76px;
    --bv2-reader-w: 178px;
    /* 固定行合计（含行间距）= 32+22+22+52+22+64+40 + 7*3 = 275，手牌行吃掉剩余高度 */
    --bv2-fixed: 275px;
}

/* ---------- 外壳：左读牌栏 + 主区（+ 0 宽侧栏宿主） ---------- */
#page-battle.board-v2 .game-container {
    display: flex;
    flex-direction: row;
    align-items: stretch;
    gap: var(--bv2-gap);
    padding: 2px 4px 3px;
    overflow: hidden;
}
#page-battle.board-v2 .battle-main {
    flex: 1 1 auto;
    min-width: 0;
    height: 100%;
    display: flex;
    /* 必须显式写 row：bp-compact 原值是 column，只加 flex-wrap 会变成「列方向换行」
       （元素被排到容器右侧画布外，实测 x≈2186 已复现过一次） */
    flex-direction: row;
    flex-wrap: wrap;
    align-content: flex-start;
    gap: var(--bv2-gap);
    padding: 0;
    overflow: hidden;
}

/* 展平旧包裹层：让叶子块参与 .battle-main 的换行布局 */
#page-battle.board-v2 .field-wrap,
#page-battle.board-v2 .bottom-wrap,
#page-battle.board-v2 .main-bottom,
#page-battle.board-v2 .mobile-resource-rail { display: contents !important; }

/* ---------- ① 读牌层：常驻详情栏 ---------- */
#page-battle.board-v2 .bv2-reader {
    flex: 0 0 var(--bv2-reader-w);
    width: var(--bv2-reader-w);
    height: 100%;
    display: flex;
    flex-direction: column;
    gap: 3px;
    padding: 0 0 3px;
    border: 1px solid var(--bv2-line);
    border-radius: 5px;
    background: var(--bv2-panel);
    overflow: hidden;
}
#page-battle.board-v2 .bv2-reader-head {
    flex: 0 0 22px;
    display: flex;
    align-items: center;
    gap: 4px;
    padding: 0 7px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 2px;
    color: var(--bv2-ink);
    white-space: nowrap;
    background: linear-gradient(180deg, rgba(15,25,44,.98), rgba(8,13,24,.96));
    border-bottom: 1px solid rgba(120,226,238,.28);
}
#page-battle.board-v2 .bv2-follow {
    margin-left: auto;
    padding: 1px 7px 1px 6px;
    font-size: 8px;
    font-weight: 700;
    letter-spacing: 0;
    color: #0a0a12;
    background: var(--bv2-cyan);
    clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 100%, 0 100%);
}
#page-battle.board-v2 .bv2-follow.pinned { background: var(--bv2-violet-hi); }
#page-battle.board-v2 .bv2-reader-art {
    flex: 0 0 138px;
    margin: 4px 14px 0;
    border: 1px solid var(--bv2-line-2);
    border-radius: 3px;
    background-color: rgba(6,9,18,.9);
    background-size: cover;
    background-position: center;
    box-shadow: 0 0 18px rgba(167,139,255,.10), 0 4px 14px rgba(0,0,0,.55);
}
#page-battle.board-v2 .bv2-reader-name {
    flex: 0 0 16px;
    padding: 0 7px;
    font-size: 12px;
    font-weight: 700;
    color: #fff;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
#page-battle.board-v2 .bv2-reader-name em {
    font-style: normal;
    font-size: 9px;
    font-weight: 400;
    color: var(--bv2-muted);
    margin-left: 4px;
}
#page-battle.board-v2 .bv2-reader-stats {
    flex: 0 0 20px;
    display: flex;
    gap: 4px;
    padding: 0 7px;
}
#page-battle.board-v2 .bv2-reader-stats span {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 2px;
    font-size: 9px;
    color: var(--bv2-muted);
    border: 1px solid var(--bv2-line);
    border-radius: 3px;
    background: var(--bv2-panel-2);
    clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 100%, 0 100%);
}
#page-battle.board-v2 .bv2-reader-stats b { color: var(--bv2-violet-hi); font-size: 11px; }
#page-battle.board-v2 .bv2-reader-text {
    flex: 1 1 auto;
    min-height: 0;
    margin: 0 6px;
    padding: 5px 6px;
    font-size: 9.5px;
    line-height: 1.5;
    color: var(--bv2-ink);
    border: 1px solid var(--bv2-line);
    border-radius: 3px;
    background: rgba(7,11,20,.7);
    overflow: hidden;
}
#page-battle.board-v2 .bv2-reader-node {
    display: block;
    margin-bottom: 3px;
    font-family: Consolas, 'Courier New', monospace;
    font-size: 8px;
    letter-spacing: 1px;
    color: var(--bv2-violet);
}
#page-battle.board-v2 .bv2-reader-text .kw { color: var(--bv2-violet-hi); font-weight: 700; }
#page-battle.board-v2 .bv2-reader-empty { color: var(--bv2-muted); font-size: 9.5px; line-height: 1.6; }

/* ---------- ② 局势层：顶栏 / 对手信息 / 对手资源 / 战场 ---------- */
/* 顶栏双行：上行「对手名 + 完整阶段链 + 我方名」，下行仅回合 chip（📜 与 v3 角标撤下——
   日志已在中段行，v3 是无信息角标；sub-steps 原在 26px 顶栏里被裁掉） */
#page-battle.board-v2 .top-bar {
    order: 1;
    flex: 0 0 100%;
    height: var(--bv2-h-top);
    padding: 2px 6px;
    overflow: hidden;
    border: 1px solid var(--bv2-line);
    border-bottom: 1px solid rgba(120,226,238,.28);
    border-radius: 4px;
    background: linear-gradient(180deg, rgba(15,25,44,.98), rgba(8,13,24,.96));
}
/* 玩家信息块：单行不折行，超长截断（防「我方」换行后被裁成两行） */
#page-battle.board-v2 .top-bar .player-info { flex-wrap: nowrap; min-width: 0; }
#page-battle.board-v2 .top-bar .player-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#page-battle.board-v2 .stepper-col { min-width: 0; overflow: hidden; }
#page-battle.board-v2 .stepper-col { gap: 1px; }
#page-battle.board-v2 .sub-steps { flex-wrap: nowrap; gap: 4px; }
#page-battle.board-v2 #btn-log-open,
#page-battle.board-v2 .sub-steps .ui-version-tag:not(#turn-chip) { display: none; }
#page-battle.board-v2 #turn-chip {
    font-size: 9px;
    padding: 1px 8px;
    border-radius: 3px;
    border: 1px solid var(--bv2-line-2);
    background: rgba(10,16,29,.9);
    color: var(--bv2-cyan);
    white-space: nowrap;
}
#page-battle.board-v2 .player-name { font-size: 11px; }
#page-battle.board-v2 .phase-item { font-size: 9px; padding: 1px 4px; }
#page-battle.board-v2 .phase-stepper { border: 0; background: transparent; padding: 0; }
#page-battle.board-v2 .phase-item.active { color: var(--bv2-cyan); background: rgba(120,226,238,.12); }
/* 侵蚀在资源层只显示一次（对手在对手信息带、我方在我方资源行），顶栏不再重复 */
#page-battle.board-v2 .top-bar .erosion-chip { display: none; }
/* 版本角标等无信息量的装饰一并去掉 */
#page-battle.board-v2 .sub-steps .ui-version-tag:not(#btn-log-open) { display: none; }

/* 行动引导条 + 低频信息按钮 = 中段一行 */
#page-battle.board-v2 .duel-action-guide {
    order: 5;
    flex: 0 0 calc(52% - var(--bv2-gap));
    height: var(--bv2-h-mid);
    min-height: 0;
    gap: 6px;
    padding: 0 6px;
    border-color: rgba(120,226,238,.22);
    border-radius: 4px;
    background: rgba(12,22,37,.88);
}
#page-battle.board-v2 .duel-guide-state { font-size: 9px; padding: 1px 5px; border-radius: 3px; }
#page-battle.board-v2 .duel-guide-text { font-size: 10px; line-height: 1.3; color: var(--bv2-muted); }
#page-battle.board-v2 .duel-action-guide button { font-size: 10px; min-height: 18px; padding: 1px 7px; }

/* 对手信息带：手牌/牌组/墓地 + 侵蚀（每方各一次） */
#page-battle.board-v2 .info-strip.opp {
    order: 2;
    flex: 0 0 100%;
    height: var(--bv2-h-oppmeta);
    padding: 0 7px;
    gap: 10px;
    border: 1px solid var(--bv2-line);
    border-radius: 4px;
    background: var(--bv2-panel-2);
}
#page-battle.board-v2 .info-strip.opp .cm-box {
    order: 3;
    margin-left: auto;
    padding: 0;
    border: 0;
    background: transparent;
}
#page-battle.board-v2 .info-item { font-size: 10px; gap: 4px; color: var(--bv2-muted); }
#page-battle.board-v2 .info-item b { font-size: 11px; color: var(--bv2-ink); }
/* 手牌扇小卡占位（7×9px 渲染成「?」状噪点）撤下，数字已足够 */
#page-battle.board-v2 .info-strip .hand-fan { display: none; }
#page-battle.board-v2 .cm-label { font-size: 9px; }
#page-battle.board-v2 .cm-value { font-size: 13px; min-width: 14px; color: var(--bv2-violet-hi); }
#page-battle.board-v2 .cm-badge.show { display: inline-block !important; font-size: 9px; padding: 0 6px; }
#page-battle.board-v2 .cm-pip { width: 5px; height: 5px; }
#page-battle.board-v2 .cm-track { gap: 2px; }

/* 对手公开区（费用/信号）：可读字号 + 可辨缩略图。
   加 position:relative 兜住 .opponent-cost-slots .cost-count（style.css:1679 用
   absolute top/right 定位，旧布局里定位祖先是 .opponent-signal-zone 一类的有定位容器，
   展平后含定位块没了，它就跑到了页面右上角——实测 726,4 的「2/2」徽标即此） */
#page-battle.board-v2 .opp-zone-strip {
    position: relative;
    order: 3;
    flex: 0 0 100%;
    height: var(--bv2-h-oppres);
    min-height: 0;
    padding: 1px 7px;
    gap: 6px;
    border: 1px solid var(--bv2-line);
    border-radius: 4px;
    background: var(--bv2-panel-2);
}
#page-battle.board-v2 .opp-zone-strip .cost-count {
    top: 2px;
    right: 5px;
    font-size: 9px;
    color: var(--bv2-violet-hi);
}
#page-battle.board-v2 .ozs-label { font-size: 9px; color: var(--bv2-muted); }
#page-battle.board-v2 .ozs-div { height: 12px; border-color: var(--bv2-line); }
#page-battle.board-v2 .opp-zone-strip .cost-card { width: 14px; height: 19px; }
#page-battle.board-v2 .opp-zone-strip .signal-orb { width: 12px; height: 16px; }

/* 战场行：对手矮（主要看）、我方高（主要操作） */
#page-battle.board-v2 .row-wrap { flex: 0 0 100%; gap: var(--bv2-gap); }
#page-battle.board-v2 .field-wrap > .row-wrap { order: 4; height: var(--bv2-h-opprow); --card-h: 46px; }
#page-battle.board-v2 .divider-row + .row-wrap { order: 6; height: var(--bv2-h-myrow); --card-h: 58px; }
/* 中央分隔行（两条侵蚀 chip 与顶栏/信息带重复）整体撤下 */
#page-battle.board-v2 .divider-row { display: none; }
#page-battle.board-v2 .opp-row,
#page-battle.board-v2 .my-row {
    padding: 1px 4px;
    border: 1px solid var(--bv2-line);
    border-radius: 4px;
    background: rgba(10,18,32,.5);
}
#page-battle.board-v2 .opp-row { background: rgba(20,14,32,.45); }
#page-battle.board-v2 .battle-row { gap: 4px; }
/* 卡位：去掉「五连空格」的视觉噪声——空位完全隐形（定位仍靠 .battle-slot 占位），
   拖拽/高亮/选中时才现形。style.css:1420 与 ui-reframe.css:174/202 仍在画虚线与底色，
   多处权重叠加，故 v2 用 !important 一次性压平（选择器仅在 board-v2 下生效，不影响旧盘）。 */
#page-battle.bp-compact.board-v2 .battle-slot,
#page-battle.board-v2 .battle-slot {
    height: calc(var(--card-h) + 2px);
    width: calc(var(--card-h) * .72 + 2px);
    border: 0 !important;
    border-radius: 3px;
    background: none !important;
    box-shadow: none !important;
    min-height: 0 !important;
}
#page-battle.board-v2 .battle-slot:empty::before,
#page-battle.board-v2 .battle-slot:empty::after { content: none !important; }
#page-battle.board-v2 .battle-slot:not(.occupied):hover { box-shadow: inset 0 0 0 1px rgba(139,171,221,.14) !important; }
#page-battle.board-v2 .battle-slot.highlight,
#page-battle.board-v2 .battle-slot.drop-hover,
#page-battle.board-v2 .battle-slot.selected,
#page-battle.board-v2 .battle-slot.highlight-target,
#page-battle.board-v2 .battle-slot.attack-select,
#page-battle.board-v2 .battle-slot.evolve-target {
    border: 1px solid var(--bv2-cyan) !important;
    box-shadow: 0 0 12px rgba(120,226,238,.25) !important;
    background: rgba(120,226,238,.06) !important;
}
#page-battle.board-v2 .battle-slot .card {
    border: 1px solid rgba(167,139,255,.48);
    border-radius: 3px;
    overflow: hidden;
    box-shadow: 0 2px 6px rgba(0,0,0,.5);
}
#page-battle.board-v2 .battle-slot .card.attacker-selected { border-color: var(--bv2-cyan); box-shadow: 0 0 12px rgba(120,226,238,.35); }
/* 数值角标化：PP/DP 大数字直接压在卡面底部，不依赖读卡面小字 */
#page-battle.board-v2 .battle-slot .card-stats {
    position: absolute;
    left: 0; right: 0; bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 2px;
    height: 13px;
    background: linear-gradient(transparent, rgba(3,6,12,.9) 45%);
    font-size: 9px;
    font-weight: 700;
    color: #fff;
    text-shadow: 0 1px 2px #000;
}
#page-battle.board-v2 .battle-slot .card-pp { color: var(--bv2-violet-hi); font-size: 9px; }
#page-battle.board-v2 .battle-slot .card-dp { font-size: 9px; }
/* 处理区：窄侧槽保留（真实结构），去掉大边框 */
#page-battle.board-v2 .pz-side { flex-basis: 22px !important; min-width: 22px; height: calc(var(--card-h) + 2px); gap: 2px; }
#page-battle.board-v2 .pz-big {
    width: 20px;
    height: calc(var(--card-h) + 2px);
    border: 1px dashed var(--bv2-line);
    border-radius: 3px;
    background: rgba(10,20,34,.6);
}
#page-battle.board-v2 .pz-big .pz-hint { font-size: 7px; letter-spacing: 0; writing-mode: vertical-rl; color: var(--bv2-muted); }
#page-battle.board-v2 .pz-side .zone-label { display: none; }

/* ---------- ③ 资源层：我方一行（侵蚀/牌组/墓地 | 费用 | 信号球） ---------- */
#page-battle.board-v2 .info-strip.my {
    order: 7;
    flex: 0 0 33%;
    height: var(--bv2-h-res);
    padding: 0 7px;
    gap: 8px;
    border: 1px solid var(--bv2-line);
    border-radius: 4px;
    background: var(--bv2-panel-2);
}
#page-battle.board-v2 .info-strip.my .cm-box { margin-left: auto; padding: 0; border: 0; background: transparent; }
#page-battle.board-v2 .cost-bar {
    order: 8;
    flex: 0 0 34%;
    height: var(--bv2-h-res);
    display: flex;
    align-items: center;
    gap: 5px;
    padding: 2px 6px;
    border: 1px solid var(--bv2-line-2);
    border-radius: 4px;
    background: var(--bv2-panel);
    overflow: hidden;
}
#page-battle.board-v2 .cost-bar-label { width: 24px; font-size: 9px; color: var(--bv2-muted); }
#page-battle.board-v2 .cost-bar::after { content: none; }
#page-battle.board-v2 .cost-bar .cost-cards { flex: 1 1 auto; min-width: 0; flex-wrap: nowrap; overflow: hidden; gap: 3px; }
#page-battle.board-v2 .cost-bar .cost-card,
#page-battle.board-v2 .cost-zone .cost-card { width: 22px; height: 29px; flex: 0 0 22px; }
#page-battle.board-v2 .cost-card .cc-name { font-size: 7px; }
#page-battle.board-v2 .cost-cap { display: block; width: auto; font-size: 9px; white-space: nowrap; color: var(--bv2-violet-hi); }
/* 信号条：原实现把它绝对定位在 top:239px（与费用栏叠在一起），v2 要它回到流内。
   注意 mobile-battle-redesign.css:153 的选择器多带一个 .bottom-wrap（权重 1,3,0），
   这里必须同样带上，否则 position:absolute 压不掉。 */
#page-battle.board-v2 .bottom-wrap > .signal-row {
    order: 9;
    /* position 从 absolute 改成 relative 后，旧规则的 top/left/right 偏移仍然生效
       （CSS 是按属性逐条比权重，不是整块替换）——不清零元素会被推出画布外，
       实测偏移正好等于 579+50% 与 231+239px，即上一版截图里 x=867,y=470 的幽灵行。 */
    position: relative;
    top: auto;
    left: auto;
    right: auto;
    z-index: auto;
    flex: 0 0 31%;
    height: var(--bv2-h-res);
    min-width: 0;
    padding: 2px 6px;
    border: 1px solid var(--bv2-line-2);
    border-radius: 4px;
    background: var(--bv2-panel);
    pointer-events: none;
    overflow: hidden;
}
#page-battle.board-v2 .signal-row .zone-label { display: none; }
#page-battle.board-v2 .bottom-wrap > .signal-row .signal-tray {
    pointer-events: auto;
    height: 100%;
    width: 100%;
    min-height: 0;
    padding: 0;
    border: 0;
    background: transparent;
}
#page-battle.board-v2 #signal-tray .signal-orb { width: 18px; height: 24px; margin: 0 1px; }
#page-battle.board-v2 .triple-btn {
    pointer-events: auto;
    position: absolute;
    right: 4px;
    top: 50%;
    transform: translateY(-50%);
    height: 20px;
    font-size: 9px;
    padding: 0 6px;
    white-space: nowrap;
    border-radius: 3px;
    border: 1px solid var(--bv2-line);
    background: rgba(12,14,24,.85);
    color: var(--bv2-muted);
}
#page-battle.board-v2 .triple-btn:not([disabled]) { color: var(--bv2-violet-hi); border-color: var(--bv2-line-2); }

/* ---------- 手牌（第二核心区）+ 动作窄列 ---------- */
#page-battle.board-v2 .hand-zone {
    order: 10;
    flex: 0 0 calc(100% - var(--bv2-actions-w) - var(--bv2-gap));
    height: calc(100% - var(--bv2-fixed));
    min-height: 0 !important;
    padding: 3px 5px;
    border: 1px solid rgba(120,226,238,.26);
    border-radius: 5px;
    background: rgba(8,15,27,.92);
    --card-h: 76px;
}
#page-battle.board-v2 .hand-label { font-size: 9px; color: var(--bv2-muted); }
#page-battle.board-v2 #my-hand { gap: 5px; margin: 0; padding: 0 1px; align-items: center; }
#page-battle.board-v2 #my-hand .hand-card {
    width: calc(var(--card-h) * .7143);
    height: var(--card-h);
    flex: 0 0 calc(var(--card-h) * .7143);
    border-radius: 4px;
    border: 1px solid rgba(139,171,221,.3);
}
#page-battle.board-v2 .hand-sort-btn { top: 2px; right: 4px; font-size: 8px; opacity: .8; }
#page-battle.board-v2 .hand-card.selected { border-color: var(--bv2-cyan); box-shadow: 0 0 10px rgba(120,226,238,.3); }
#page-battle.board-v2 .actions-zone {
    order: 11;
    flex: 0 0 var(--bv2-actions-w);
    width: var(--bv2-actions-w);
    min-width: var(--bv2-actions-w);
    height: calc(100% - var(--bv2-fixed));
    gap: 4px;
    align-content: center;
}
#page-battle.board-v2 .actions-zone .action-btn {
    height: 30px;
    min-height: 0;
    padding: 2px 4px;
    font-size: 11px;
    border-radius: 3px;
    border-color: rgba(139,171,221,.3);
    background: rgba(22,34,56,.72);
    color: var(--bv2-ink);
}
#page-battle.board-v2 .actions-zone .action-btn.primary,
#page-battle.board-v2 .actions-zone #btn-end {
    background: linear-gradient(135deg, #a78bff, #6659c7);
    border-color: transparent;
    color: #fff;
    font-weight: 700;
}
#page-battle.board-v2 .mobile-action-menu {
    right: 4px;
    bottom: calc(100% - var(--bv2-fixed) + 4px);
    border-color: var(--bv2-line-2);
    border-radius: 4px;
    background: rgba(10,16,29,.98);
    width: var(--bv2-actions-w);
}

/* 低频信息按钮（日志/牌组/墓地/对方墓地）：与行动引导条同一行 */
#page-battle.board-v2 .mobile-info-rail {
    order: 5;
    display: flex;
    flex: 0 0 calc(48% - var(--bv2-gap));
    height: var(--bv2-h-mid);
    align-items: center;
    gap: 4px;
    padding: 0;
    overflow: hidden;
}
#page-battle.board-v2 .mobile-info-btn {
    flex: 1 1 0;
    min-width: 0;
    height: 20px;
    padding: 0 4px;
    font-size: 9px;
    border: 1px solid var(--bv2-line);
    border-radius: 3px;
    background: var(--bv2-panel-2);
    color: var(--bv2-muted);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
#page-battle.board-v2 .mobile-info-btn b { color: var(--bv2-violet-hi); font-size: 9px; }
#page-battle.board-v2 .mobile-info-btn:active { color: var(--bv2-cyan); border-color: var(--bv2-cyan); }
#page-battle.board-v2 .cost-summary { display: none; }

/* ---------- 浮层与提示：不遮挡战场 ---------- */
/* 阶段横幅：全屏大字改为顶部窄条（原实现铺满全屏，实测遮挡整个战场） */
#page-battle.board-v2 .phase-announcement { align-items: flex-start; justify-content: center; padding-top: 32px; }
#page-battle.board-v2 .phase-announcement::before { background: none; }
#page-battle.board-v2 .phase-announcement-text {
    font-size: 15px;
    letter-spacing: 3px;
    padding: 4px 16px;
    border-top: 1px solid var(--bv2-line-2);
    border-bottom: 1px solid var(--bv2-line-2);
    background: rgba(8,13,24,.92);
    color: var(--bv2-violet-hi);
    text-shadow: 0 0 12px rgba(167,139,255,.5);
}
#page-battle.board-v2 .phase-announcement-sub {
    position: static;
    margin-top: 4px;
    font-size: 10px;
    color: var(--bv2-muted);
    letter-spacing: 1px;
    text-align: center;
}
/* 攻击目标提示：绝对定位在盘面中央会盖住双方战场，v2 压成手牌上沿的单行条 */
#page-battle.board-v2 .attack-hint-chip,
#page-battle.bp-compact.board-v2 .attack-hint-chip {
    position: absolute;
    left: 50%;
    top: 96px;
    transform: translateX(-50%);
    max-width: 78%;
    font-size: 10px;
    padding: 3px 8px;
    border-radius: 3px;
    border: 1px solid rgba(120,226,238,.3);
    background: rgba(8,13,24,.94);
    color: var(--bv2-cyan);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
#page-battle.board-v2 .toast-container { top: 30px; }
#page-battle.board-v2 .toast-container .toast { font-size: 10px; padding: 5px 8px; }

/* ---------- ④ 决策层：居中大按钮 + 剪角（沿用 js/36 的 ux-overlay 体系） ---------- */
#page-battle.board-v2 ~ .ux-overlay .ux-dialog,
body .ux-overlay .ux-dialog.bv2-skin {
    border-radius: 4px !important;
    clip-path: polygon(0 0, calc(100% - 14px) 0, 100% 14px, 100% 100%, 14px 100%, 0 calc(100% - 14px));
    box-shadow: 0 0 30px rgba(167,139,255,.18), 0 20px 60px #000b !important;
}
.ux-overlay .ux-dialog .confirm-btn.confirm,
.ux-overlay .ux-dialog .mulligan-btn:not(.skip),
.ux-overlay .ux-dialog button.ux-ok {
    background: linear-gradient(135deg, #a78bff, #6659c7) !important;
    border-color: transparent !important;
    color: #fff !important;
    font-weight: 700;
}

/* ---------- 短视口（<350px 高）再压一档 ---------- */
@media (max-height: 350px) {
    #page-battle.board-v2 {
        --bv2-h-top: 24px;
        --bv2-h-oppmeta: 20px;
        --bv2-h-oppres: 20px;
        --bv2-h-opprow: 46px;
        --bv2-h-mid: 20px;
        --bv2-h-myrow: 56px;
        --bv2-h-res: 38px;
        --bv2-fixed: 249px;
    }
    #page-battle.board-v2 .field-wrap > .row-wrap { --card-h: 40px; }
    #page-battle.board-v2 .divider-row + .row-wrap { --card-h: 50px; }
    #page-battle.board-v2 .hand-zone { --card-h: 72px; }
    #page-battle.board-v2 .bv2-reader-art { flex-basis: 118px; }
}
