/* ================================================================
   芙一把 Bingo 战 样式
   「雾与河」主题 · 红队(蜃玫瑰) VS 蓝队(水湖蓝)
   ================================================================ */

.bingo-screen, .bingo-player, .bingo-admin {
    max-width: 980px;
    background: rgba(255,255,255,0.92);
    border: 1px solid rgba(72,153,203,0.35);
    box-shadow: 8px 8px 0 rgba(0,0,0,0.25);
    padding: 22px 18px 30px;
    margin-bottom: 40px;
}

/* ---- 页头 ---- */
.bingo-title {
    font-size: 2rem;
    font-weight: 800;
    letter-spacing: 6px;
    color: var(--lc-blue-deep, #2A5F85);
    text-shadow: 0 0 18px rgba(72, 153, 203, 0.25);
    margin-bottom: 4px;
}
.bingo-status-badge {
    display: inline-block;
    padding: 4px 18px;
    border-radius: 20px;
    background: var(--lc-card, #EEF4F9);
    border: 1px solid rgba(72, 153, 203, 0.25);
    color: var(--lc-ink-2, #69687C);
    font-size: 0.9rem;
}
.bingo-status-badge.active { color: #3F7148; border-color: rgba(87,153,102,0.55); background: rgba(87,153,102,0.10); }
.bingo-status-badge.collecting { color: var(--lc-gold-deep, #9B7B3F); border-color: rgba(232,212,168,0.8); background: rgba(232,212,168,0.25); }
.bingo-status-badge.finished { color: var(--lc-purple-dark, #7C6BA6); border-color: rgba(148,130,188,0.6); background: rgba(148,130,188,0.12); }
.bingo-round-line {
    color: var(--lc-ink-2, #69687C);
    font-size: 0.8rem;
    margin-top: 4px;
}

/* ---- 比分板 ---- */
.bingo-scoreboard {
    display: flex;
    align-items: stretch;
    gap: 8px;
    justify-content: center;
}
.team-panel {
    flex: 1;
    max-width: 340px;
    border-radius: 14px;
    padding: 14px 20px;
    text-align: center;
    border: 2px solid rgba(72, 153, 203, 0.20);
    transition: all .25s;
    background: var(--lc-card, #EEF4F9);
}
.team-panel.winner { animation: bingo-win-glow 1.6s ease-in-out infinite alternate; }
@keyframes bingo-win-glow {
    from { box-shadow: 0 0 12px rgba(72,153,203,.35); }
    to   { box-shadow: 0 0 34px rgba(148,130,188,.7); }
}
.team-a { background: linear-gradient(135deg, rgba(201,107,132,0.16), rgba(201,107,132,0.06)); border-color: rgba(201,107,132,0.5); }
.team-b { background: linear-gradient(135deg, rgba(72,153,203,0.18), rgba(72,153,203,0.06)); border-color: rgba(72,153,203,0.55); }
.team-name { font-size: 1.15rem; font-weight: 700; color: var(--lc-ink); letter-spacing: 2px; }
.team-a .team-name { color: #A94F68; }
.team-b .team-name { color: #2A5F85; }
.team-score { font-size: 3.4rem; font-weight: 900; line-height: 1.1; color: var(--lc-blue-deep); }
.team-a .team-score { color: #A94F68; }
.team-b .team-score { color: #2A5F85; }
.team-goal { font-size: .8rem; color: var(--lc-ink-2); }
.vs-badge {
    align-self: center;
    font-size: 1.4rem;
    font-weight: 900;
    color: var(--lc-purple-dark, #7C6BA6);
    padding: 0 4px;
}

/* ---- 收集区 ---- */
.bingo-collect {
    border: 1px solid rgba(72, 153, 203, 0.22);
    border-radius: 14px;
    padding: 16px;
    background: linear-gradient(135deg, rgba(72,153,203,0.08), rgba(148,130,188,0.10));
}
.collect-title {
    color: var(--lc-blue-deep, #2A5F85);
    text-align: center;
    font-weight: 700;
    font-size: 1.05rem;
    margin-bottom: 10px;
}
.collect-input-row { display: flex; gap: 8px; }
.collect-input-row .form-control {
    background: #FFFFFF;
    border-color: rgba(72, 153, 203, 0.30);
    color: var(--lc-ink, #2C3544);
}
.bingo-btn-primary {
    background: linear-gradient(135deg, var(--lc-blue, #4899CB), var(--lc-purple, #9482BC));
    border: none;
    font-weight: 700;
    color: #fff;
    white-space: nowrap;
}
.bingo-btn-primary:hover { background: linear-gradient(135deg, var(--lc-blue-dark, #3A7FAE), var(--lc-purple-dark, #7C6BA6)); color:#fff; }
.bingo-suggestions {
    position: absolute;
    z-index: 1000;
    background: rgba(255,255,255,0.98);
    border: 1px solid rgba(72, 153, 203, 0.30);
    border-radius: 0 0 10px 10px;
    max-height: 220px;
    overflow-y: auto;
    width: 100%;
    display: none;
    box-shadow: 0 10px 26px rgba(44,53,68,0.16);
}
.bingo-suggestion-item {
    padding: 8px 14px;
    cursor: pointer;
    color: var(--lc-ink, #2C3544);
    border-bottom: 1px solid rgba(72, 153, 203, 0.10);
    font-size: .95rem;
}
.bingo-suggestion-item:hover { background: rgba(72,153,203,0.10); color: var(--lc-blue-dark); }
.bingo-collect-msg, .guess-msg { font-size: .9rem; margin-top: 6px; }
.bingo-collect-msg.ok, .guess-msg.ok { color: #3F7148; }
.bingo-collect-msg.err, .guess-msg.err { color: var(--lc-dark-red, #A94F68); }
.collect-progress { margin-top: 10px; color: var(--lc-ink-2); font-size: .85rem; }
.collect-progress .progress { background: #E4ECF4; }
.collect-progress .progress-bar { background: linear-gradient(90deg, var(--lc-blue), var(--lc-purple)); }

/* ---- 棋盘 ---- */
.bingo-board-wrap { position: relative; }
.bingo-board {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 8px;
    max-width: 640px;
    margin: 0 auto;
}
.bingo-cell {
    aspect-ratio: 1 / 1;
    border-radius: 12px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    border: 2px solid rgba(72, 153, 203, 0.25);
    background: #FFFFFF;
    transition: all .18s;
    position: relative;
    padding: 4px;
    text-align: center;
    min-height: 0;
    box-shadow: 0 2px 8px rgba(44,53,68,0.05);
}
.bingo-cell .cell-num {
    position: absolute;
    top: 4px;
    left: 8px;
    font-size: .7rem;
    color: var(--lc-blue-dark, #3A7FAE);
    font-weight: 700;
}
.bingo-cell .cell-main {
    font-size: .78rem;
    color: var(--lc-ink-2, #69687C);
    line-height: 1.2;
    word-break: break-all;
}
.bingo-cell .cell-tag {
    font-size: .62rem;
    color: var(--lc-purple, #9482BC);
    margin-top: 2px;
}
.bingo-cell:hover:not(.disabled) {
    border-color: var(--lc-blue, #4899CB);
    transform: translateY(-2px);
    box-shadow: 0 4px 14px rgba(72,153,203,0.25);
}
.bingo-cell.empty { background: #FFFFFF; }
.bingo-cell.owner-a {
    background: linear-gradient(135deg, rgba(201,107,132,0.85), rgba(169,79,104,0.60));
    border-color: rgba(201,107,132,0.9);
}
.bingo-cell.owner-b {
    background: linear-gradient(135deg, rgba(72,153,203,0.85), rgba(42,95,133,0.65));
    border-color: rgba(72,153,203,0.9);
}
.bingo-cell.owner-a .cell-main, .bingo-cell.owner-b .cell-main { color: #fff; font-weight: 700; font-size: .85rem; }
.bingo-cell.owner-a .cell-num, .bingo-cell.owner-b .cell-num { color: rgba(255,255,255,0.8); }
.bingo-cell.owner-a .cell-tag, .bingo-cell.owner-b .cell-tag { color: rgba(255,255,255,0.92); }
.bingo-cell.disabled { cursor: default; opacity: .85; }
.bingo-cell.tried-a { border-color: rgba(201,107,132,0.5); }
.bingo-cell.tried-b { border-color: rgba(72,153,203,0.5); }
.bingo-cell.selected {
    border-color: var(--lc-gold, #E8D4A8) !important;
    box-shadow: 0 0 0 3px rgba(232,212,168,0.6);
}

/* 图例 */
.bingo-legend { display: flex; gap: 18px; justify-content: center; font-size: .85rem; color: var(--lc-ink-2); flex-wrap: wrap; }
.legend-cell { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; }
.legend-cell.legend-a { color: #A94F68; }
.legend-cell.legend-b { color: #2A5F85; }
.cell-mini { width: 16px; height: 16px; border-radius: 4px; display: inline-block; border: 1px solid rgba(72,153,203,0.3); }
.cell-empty { background: #FFFFFF; }
.cell-owner-a { background: #C96B84; border-color: #C96B84; }
.cell-owner-b { background: #4899CB; border-color: #4899CB; }

/* ---- 角色池 ---- */
.bingo-pool-wrap { }
.bingo-pool-title { color: var(--lc-ink-2); font-size: .9rem; margin-bottom: 8px; }
.bingo-pool { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; }
.pool-chip {
    padding: 4px 12px;
    border-radius: 16px;
    background: var(--lc-card, #EEF4F9);
    border: 1px solid rgba(72, 153, 203, 0.25);
    color: var(--lc-ink, #2C3544);
    font-size: .82rem;
    cursor: pointer;
    transition: all .15s;
}
.pool-chip:hover { border-color: var(--lc-blue); color: var(--lc-blue-dark); }
.pool-chip.claimed-a { background: rgba(201,107,132,0.22); color:#A94F68; border-color: rgba(201,107,132,0.45); }
.pool-chip.claimed-b { background: rgba(72,153,203,0.22); color:#2A5F85; border-color: rgba(72,153,203,0.45); }

/* ---- 推断流 ---- */
.bingo-feed-wrap { }
.bingo-feed-title { color: var(--lc-ink-2); font-size: .9rem; margin-bottom: 8px; }
#cellDetailWrap { border: 1px solid rgba(232,212,168,0.6); border-radius: 12px; padding: 10px; background: rgba(232,212,168,0.12); }
#cellDetailWrap .bingo-feed-title { color: var(--lc-gold-deep, #9B7B3F); }
#cellDetailWrap .bingo-feed { border-color: rgba(232,212,168,0.25); background: rgba(255,255,255,0.6); }
.bingo-feed {
    max-height: 300px;
    overflow-y: auto;
    background: #FFFFFF;
    border: 1px solid rgba(72, 153, 203, 0.16);
    border-radius: 12px;
    padding: 10px;
}
.feed-item {
    padding: 8px 10px;
    border-radius: 8px;
    margin-bottom: 6px;
    background: var(--lc-card, #EEF4F9);
    font-size: .83rem;
    border-left: 3px solid rgba(72, 153, 203, 0.35);
    color: var(--lc-ink);
}
.feed-item.team-a { border-left-color: #C96B84; }
.feed-item.team-b { border-left-color: #4899CB; }
.feed-item .feed-head { display: flex; gap: 8px; flex-wrap: wrap; align-items: baseline; margin-bottom: 4px; }
.feed-item .feed-player { font-weight: 700; color: var(--lc-blue-deep); }
.feed-item .feed-cell { color: var(--lc-ink-2); }
.feed-item .feed-guess { font-weight: 600; }
.feed-item .feed-correct { color: #3F7148; font-weight: 700; }
.feed-item .feed-wrong { color: #A94F68; }
.feed-feedback { display: flex; flex-wrap: wrap; gap: 6px; }
.fb-tag { font-size: .74rem; }
.fb-name { color: var(--lc-ink-2); margin-right: 4px; }
.fb-value { color: var(--lc-ink); }
.fb-state-match { color: #3F7148; font-weight: 700; }
.fb-state-close { color: #B89B55; font-weight: 600; }
.fb-state-miss { color: #A94F68; }

/* ---- 获胜横幅 ---- */
.bingo-winner {
    background: linear-gradient(135deg, rgba(232,212,168,0.35), rgba(216,168,188,0.25));
    border: 2px solid var(--lc-gold, #E8D4A8);
    border-radius: 14px;
    padding: 20px;
    text-align: center;
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--lc-gold-deep, #9B7B3F);
    margin-top: 14px;
    animation: winner-glow 2s ease-in-out infinite alternate;
}

/* 1v1 对局页：结束时用「居中浮层」展示结果 + 再来一局。
   cast.css 为 2v2 大屏把 .bingo-winner 设成底部悬浮条（absolute + z-index:30），
   在 1v1 页会盖住下方按钮、且被棋盘格子压住；这里用 id 选择器提升优先级改为居中浮层，
   按钮放在横幅内部，任何情况下都不会被遮挡。 */
.duel-screen #duelResult {
    position: fixed;
    left: 50%;
    top: 50%;
    bottom: auto;
    transform: translate(-50%, -50%);
    z-index: 200;
    width: min(560px, 92vw);
    max-width: 92vw;
    margin: 0;
    border-radius: 16px;
    /* 不透明底色：浮层盖在棋盘上，避免棋盘格子透出影响阅读 */
    background: linear-gradient(135deg, #FAF2DF, #F4E6EC);
    box-shadow: 0 14px 44px rgba(0, 0, 0, .45);
}
.duel-screen #duelAfter { margin-top: 14px; }

/* ---- 选手页 ---- */
.player-badge {
    display: inline-block;
    padding: 5px 20px;
    border-radius: 20px;
    font-weight: 700;
    border: 1px solid rgba(72, 153, 203, 0.3);
    background: var(--lc-card, #EEF4F9);
    color: var(--lc-ink-2);
}
.player-badge.team-a { background: rgba(201,107,132,0.18); color: #A94F68; border-color: rgba(201,107,132,0.5); }
.player-badge.team-b { background: rgba(72,153,203,0.18); color: #2A5F85; border-color: rgba(72,153,203,0.5); }
.player-hint { text-align: center; color: var(--lc-ink-2); font-size: .9rem; margin-bottom: 8px; }
.guess-panel {
    border: 1px solid rgba(72, 153, 203, 0.25);
    border-radius: 14px;
    padding: 14px;
    margin: 12px 0;
    background: linear-gradient(135deg, rgba(72,153,203,0.08), rgba(148,130,188,0.10));
}
.guess-panel-head { display: flex; justify-content: space-between; align-items: center; font-weight: 700; color: var(--lc-blue-deep); margin-bottom: 4px; }
.guess-panel-sub { color: var(--lc-ink-2); font-size: .82rem; margin-bottom: 8px; }
/* 角色池：只有角色（2026-10-01 去掉输入框与折叠标题），点击即选中。
   2026-10-03：选角色区挪到右栏后，右栏桌面档本身可滚动 → 限高放宽到 46vh，
   让 25 个角色一屏基本看全、不用再在 200px 的小框里滚。 */
.guess-pool-toggle {
    display: flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    user-select: none;
    font-size: .85rem;
    font-weight: 700;
    color: var(--lc-blue-deep, #2A5F85);
    padding: 6px 10px;
    margin-bottom: 8px;
    border-radius: 10px;
    background: #FFFFFF;
    border: 1px solid rgba(72, 153, 203, 0.28);
}
.guess-pool-toggle:hover { border-color: var(--lc-blue, #4899CB); }
.guess-pool-toggle:focus-visible { outline: 2px solid var(--lc-blue, #4899CB); outline-offset: 2px; }
.guess-pool-count { color: var(--lc-ink-2, #69687C); font-weight: 400; }
.guess-pool-arrow { margin-left: auto; transition: transform .18s; }
.guess-pool-toggle.open .guess-pool-arrow { transform: rotate(180deg); }
.guess-pool-select[hidden] { display: none; }
.guess-pool-select {
    display: flex;
    flex-wrap: wrap;
    align-content: flex-start;
    gap: 5px;
    margin-bottom: 10px;
    max-height: none;
    overflow-y: auto;
    overscroll-behavior: contain;
    padding: 8px;
    border-radius: 10px;
    background: rgba(255, 255, 255, 0.78);
    border: 1px solid rgba(72, 153, 203, 0.20);
}
.guess-pool-select .pool-chip { font-size: .78rem; padding: 4px 11px; }
/* 笔记本档（≤1500px）右栏较窄、一行放不下几个角色 → 字号再收一档，
   保证 25 个角色仍能一屏看全、不用下拉。 */
@media (max-width: 1500px) {
    .guess-pool-select .pool-chip { font-size: .72rem; padding: 3px 9px; }
}
.guess-pool-select .pool-chip.selected { background: var(--lc-blue, #4899CB); color: #fff; border-color: var(--lc-blue-dark); }

/* ---- 管理页 ---- */
.bingo-admin-banner {
    border-radius: 12px;
    padding: 12px 18px;
    text-align: center;
    font-weight: 600;
    border: 1px solid rgba(72, 153, 203, 0.25);
    background: var(--lc-card, #EEF4F9);
    color: var(--lc-ink-2);
}
.bingo-admin-banner.active { color: #3F7148; border-color: rgba(87,153,102,0.55); }
.bingo-admin-banner.collecting { color: var(--lc-gold-deep, #9B7B3F); border-color: rgba(232,212,168,0.8); }
.bingo-admin-banner.finished { color: var(--lc-purple-dark, #7C6BA6); border-color: rgba(148,130,188,0.6); }
.seat-card, .seat-link-card {
    background: var(--lc-card, #EEF4F9);
    border: 1px solid rgba(72, 153, 203, 0.16);
    border-radius: 10px;
    padding: 10px;
}
.seat-title { font-size: .85rem; color: var(--lc-blue-deep); margin-bottom: 6px; font-weight: 600; }
.seat-qr-row { display: flex; align-items: flex-start; gap: 10px; }
.seat-qr {
    flex: 0 0 auto;
    width: 116px;
    height: 116px;
    background: #FFFFFF;
    border: 1px solid rgba(72, 153, 203, 0.30);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: .7rem;
    color: var(--lc-ink-2);
    text-align: center;
    overflow: hidden;
}
.seat-qr img { width: 100% !important; height: 100% !important; display: block; }
.seat-qr canvas { width: 100% !important; height: 100% !important; }
.seat-qr-side { flex: 1 1 auto; min-width: 0; }
.seat-qr-tip { font-size: .72rem; color: var(--lc-ink-2); margin-top: 6px; line-height: 1.5; }
@media (max-width: 576px) { .seat-qr-row { flex-direction: column; } }
.seat-card .form-select, .seat-card .form-control,
.seat-link-card .form-select, .seat-link-card .form-control {
    background: #FFFFFF;
    border-color: rgba(72, 153, 203, 0.30);
    color: var(--lc-ink, #2C3544);
}
.admin-board { max-width: 460px; }
.admin-board .bingo-cell { cursor: default; }
.admin-board .bingo-cell.empty { background: #FFFFFF; }
.admin-pool .pool-chip { cursor: default; }

@media (max-width: 576px) {
    .bingo-title { font-size: 1.4rem; letter-spacing: 3px; }
    .team-score { font-size: 2.4rem; }
    .bingo-board { gap: 5px; }
    .bingo-cell .cell-main { font-size: .66rem; }
    .bingo-cell.owner-a .cell-main, .bingo-cell.owner-b .cell-main { font-size: .7rem; }
    .collect-input-row { flex-direction: column; }
}

/* ================================================================
   2026-09-16 线上功能合并
   三栏布局 / 公开角色池 / 推断记录 / 对角拆分 / 「正在推断」focus
   芙一把 1v1 自由匹配（duel）
   颜色已适配「雾与河」浅色主题（远程原为深色）
   ================================================================ */

/* 远程新规则内部引用 --bing-* 令牌，映射到本地浅色主题 */
.bingo-screen, .bingo-player, .bingo-admin {
    --bing-muted: #69687C;
    --bing-text: #2C3544;
    --bing-a: #A94F68;
    --bing-b: #2A5F85;
}

/* 三栏布局需要更宽的容器 */
.bingo-screen, .bingo-player { max-width: none; }

/* ---- 三栏布局 ---- */
/* 选手页（/guess、/bingo/player）：左「所选格子的猜测」· 棋盘 · 右「选角色」。
   右栏比左栏宽（选角色要一行放得下更多角色、一屏看全），两侧合计 580px 不变。 */
.bingo-layout {
    display: grid;
    grid-template-columns: 240px minmax(0, 1fr) 340px;
    gap: 14px;
    align-items: start;
}
.bingo-col { min-width: 0; }
.bingo-panel-title {
    font-size: .92rem;
    font-weight: 700;
    color: var(--lc-blue-deep, #2A5F85);
    margin-bottom: 8px;
    letter-spacing: 1px;
}
@media (max-width: 1150px) {
    .bingo-layout { grid-template-columns: 1fr; }
    .bingo-col-left, .bingo-col-right { order: 2; }
    .bingo-col-center { order: 1; }
}

/* ---- 左栏：公开角色池 ---- */
.public-pool {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    max-height: 560px;
    overflow-y: auto;
    padding: 8px;
    border-radius: 12px;
    background: var(--lc-card, #EEF4F9);
    border: 1px solid rgba(72, 153, 203, 0.25);
}
.public-pool-chip {
    padding: 3px 10px;
    border-radius: 14px;
    background: #FFFFFF;
    border: 1px solid rgba(72, 153, 203, 0.30);
    color: var(--lc-ink, #2C3544);
    font-size: .78rem;
    cursor: pointer;
    transition: all .15s;
}
.public-pool-chip:hover { border-color: var(--lc-blue, #4899CB); color: var(--lc-blue-deep, #2A5F85); }
.pool-search { margin-bottom: 8px; }
.pool-count { color: var(--lc-ink-2, #69687C); font-weight: 400; font-size: .82rem; }
.pool-empty { color: var(--lc-ink-2, #69687C); font-size: .85rem; padding: 6px; }

/* ---- 左栏（1v1）：所选格子的猜测情况 ---- */
/* 2026-10-01：猜测区挪到本列表下方后，这里不再自己滚（否则左栏出现嵌套滚动条），
   交给左栏/页面统一滚动。 */
.cell-detail-list {
    max-height: none;
    overflow: visible;
    padding: 8px;
    border-radius: 12px;
    background: var(--lc-card, #EEF4F9);
    border: 1px solid rgba(72, 153, 203, 0.25);
}
.cell-detail-info {
    background: #FFFFFF;
    border-radius: 8px;
    padding: 6px 8px;
    margin-bottom: 8px;
    font-size: .8rem;
    color: var(--lc-ink, #2C3544);
    border-left: 3px solid rgba(72, 153, 203, 0.35);
}
.cell-detail-info.mine { border-left-color: #3F7148; }
.cell-detail-info.theirs { border-left-color: rgba(169, 79, 104, 0.65); }
.cell-detail-info.focusing { border-left-color: #C98A2E; }
.cell-detail-info.team-a { border-left-color: #C96B84; }
.cell-detail-info.team-b { border-left-color: #4899CB; }

/* /bingo 观众页：格子只为「查看该格猜测记录」而可点，给出可点反馈 */
.bingo-screen .bingo-board .bingo-cell { cursor: pointer; }
.bingo-screen .bingo-board .bingo-cell:hover { border-color: var(--lc-blue, #4899CB); }

/* ---- 右栏：推断记录 ---- */
.records-team {
    border-radius: 12px;
    padding: 8px;
    margin-bottom: 12px;
}
.records-a { background: rgba(201, 107, 132, 0.12); border: 1px solid rgba(201, 107, 132, 0.45); }
.records-b { background: rgba(72, 153, 203, 0.12); border: 1px solid rgba(72, 153, 203, 0.45); }
.records-head { font-weight: 700; color: var(--lc-ink, #2C3544); margin-bottom: 6px; font-size: .88rem; letter-spacing: 1px; }
.record-empty { color: var(--lc-ink-2, #69687C); font-size: .8rem; padding: 4px; }
.record-item {
    background: #FFFFFF;
    border-radius: 8px;
    padding: 6px 8px;
    margin-bottom: 6px;
    border-left: 3px solid rgba(72, 153, 203, 0.25);
    overflow: hidden;
}
.record-item.ok { border-left-color: #3F7148; }
.record-item.miss { border-left-color: rgba(169, 79, 104, 0.5); }
.record-head { display: flex; gap: 6px; align-items: baseline; font-size: .8rem; }
.record-char { font-weight: 700; color: var(--lc-ink, #2C3544); }
.record-cell { color: var(--lc-ink-2, #69687C); }
.record-player { color: var(--lc-ink-2, #69687C); }
.record-result { margin-left: auto; }
.record-fields { display: flex; flex-wrap: wrap; gap: 4px 12px; margin-top: 4px; font-size: .72rem; }
.rec-field b { color: var(--lc-ink-2, #69687C); font-weight: 600; margin-right: 3px; }
.rec-field i { font-style: normal; color: var(--lc-ink, #2C3544); }

/* ---- 棋盘：对角拆分 / 正在推断 ---- */
.bingo-board-wrap { position: relative; }
.bingo-cell.tried-a .cell-main { color: var(--lc-dark-red, #A94F68); font-weight: 700; }
.bingo-cell.tried-b .cell-main { color: var(--lc-blue-deep, #2A5F85); font-weight: 700; }
.bingo-cell.tried-a.guessing {
    box-shadow: 0 0 0 2px rgba(201, 107, 132, .35), 0 0 18px rgba(201, 107, 132, .35);
    animation: bingo-guess-pulse-a 1.4s ease-in-out infinite alternate;
}
.bingo-cell.tried-b.guessing {
    box-shadow: 0 0 0 2px rgba(72, 153, 203, .35), 0 0 18px rgba(72, 153, 203, .35);
    animation: bingo-guess-pulse-b 1.4s ease-in-out infinite alternate;
}
@keyframes bingo-guess-pulse-a {
    from { border-color: rgba(201, 107, 132, .6); }
    to { border-color: rgba(201, 107, 132, 1); }
}
@keyframes bingo-guess-pulse-b {
    from { border-color: rgba(72, 153, 203, .6); }
    to { border-color: rgba(72, 153, 203, 1); }
}
.bingo-cell.split { padding: 0; background: #FFFFFF; }
.bingo-cell.split .split-half {
    position: absolute;
    inset: 0;
    display: flex;
    font-size: .68rem;
    font-weight: 800;
    line-height: 1.15;
    padding: 5px;
    word-break: break-all;
}
.bingo-cell.split .split-a {
    clip-path: polygon(0 0, 100% 0, 0 100%);
    background: linear-gradient(135deg, rgba(201, 107, 132, .55), rgba(201, 107, 132, .12));
    color: #A94F68;
    align-items: flex-start;
    justify-content: flex-start;
    padding-right: 26%;
}
.bingo-cell.split .split-b {
    clip-path: polygon(100% 0, 100% 100%, 0 100%);
    background: linear-gradient(135deg, rgba(72, 153, 203, .12), rgba(72, 153, 203, .55));
    color: #2A5F85;
    align-items: flex-end;
    justify-content: flex-end;
    padding-left: 26%;
    text-align: right;
}
.bingo-cell.split .split-half.focus { text-shadow: 0 0 10px currentColor; }
.bingo-cell.mine { box-shadow: inset 0 0 0 2px rgba(72, 153, 203, .45); }

/* ---- 芙一把 1v1 自由匹配（duel）：大厅 / 匹配中 ---- */
.duel-lobby {
    max-width: 560px;
    margin: 40px auto;
    padding: 34px 26px;
    text-align: center;
    border-radius: 16px;
    border: 1px solid rgba(232, 212, 168, .9);
    background: linear-gradient(135deg, rgba(232, 212, 168, .25), rgba(148, 130, 188, .12));
}
.duel-match-btn { font-size: 1.3rem; padding: 14px 46px; }
.duel-lobby-sub { color: var(--lc-ink-2, #69687C); font-size: .95rem; margin-bottom: 16px; }
.duel-nick-input { max-width: 320px; margin: 0 auto 16px; text-align: center; }
.duel-waiting-text { font-size: 1.15rem; color: var(--lc-ink, #2C3544); font-weight: 600; }
.duel-dots::after { content: '…'; animation: duel-dots 1.2s steps(4, end) infinite; }
@keyframes duel-dots {
    0% { content: ''; }
    25% { content: '.'; }
    50% { content: '..'; }
    75% { content: '...'; }
}

/* ---- 游客端（大屏）：棋盘放大 + 字号加大，方便远处观看 ---- */
/* /bingo 观看页：左「所点格子的猜测」· 中棋盘 · 右「双方推断记录」 */
.bingo-screen > .bingo-layout { grid-template-columns: 240px minmax(0, 1fr) 300px; }
.bingo-screen .bingo-board { max-width: 100%; gap: 12px; }
.bingo-screen .bingo-cell { border-width: 3px; border-radius: 14px; }
.bingo-screen .bingo-cell .cell-num { font-size: .95rem; top: 6px; left: 10px; }
.bingo-screen .bingo-cell .cell-main { font-size: 1.25rem; }
.bingo-screen .bingo-cell.owner-a .cell-main,
.bingo-screen .bingo-cell.owner-b .cell-main { font-size: 1.25rem; }
.bingo-screen .bingo-cell.split .split-half { font-size: 1rem; padding: 10px; }
.bingo-screen .public-pool-chip { font-size: .9rem; padding: 4px 12px; }
.bingo-screen .records-head { font-size: 1rem; }
.bingo-screen .record-head { font-size: .9rem; }
.bingo-screen .record-fields { font-size: .82rem; gap: 5px 14px; }
.bingo-screen .bingo-feed-title, .bingo-screen .bingo-panel-title { font-size: 1.05rem; }
@media (max-width: 1150px) {
    .bingo-screen .bingo-layout { grid-template-columns: 1fr; }
    /* 例外：整屏锁定的 /bingo 观看页不参与窄屏堆叠。
       堆叠会与 .bingo-screen 的 100vh 锁定冲突——栅格第一行是 minmax(0,1fr)，
       页头/比分板占满高度后中栏被压成 0 高，棋盘直接消失（1024×700 实测：
       .bingo-col-center 高度 0）。该页三栏维持横排，并把 order 归零
       （媒体查询里的 order 是给堆叠用的，横排时必须按 DOM 顺序：猜测 · 棋盘 · 记录）。 */
    html.tho-desktop .bingo-screen > .bingo-layout { grid-template-columns: 210px minmax(0, 1fr) 280px; }
    html.tho-desktop .bingo-screen > .bingo-layout > .bingo-col { order: 0; }
}

/* ---------------- 手机端收尾（必须留在大屏规则之后！） ----------------
   上面「游客端（大屏）」把 .bingo-screen 的格子字号放大到 1.25rem（20px），
   那是给投影/大屏看的。手机进的是同一套 .bingo-screen 标记，而这一节与
   文件中部 @media (max-width:576px) 里的 .bingo-cell .cell-main 相比，
   选择器特异性更高（(0,3,1) > (0,2,1)），所以中部那条 .66rem 根本压不住它。
   同一个坑还有第二层：媒体查询不增加特异性，两条同特异性的规则由源顺序决胜，
   因此本节必须写在文件末尾，写在中部同样会被后面的 1.25rem 覆盖（已踩过一次）。
   实测（390x844，单格 56px、内容区 46px）：1.25rem 时 25 格中 6 格文字顶出格子；
   360x844 时 6 格直接被裁。改为下面的尺寸后，含「梅露兰·普莉兹姆利巴」这类
   最长角色名在内全部 25 格都装得下（见 .migration-staging/probe_bingo_mobile.js）。 */
@media (max-width: 576px) {
    .bingo-screen .bingo-cell { padding: 2px; }
    .bingo-screen .bingo-cell .cell-main { font-size: .62rem; line-height: 1.05; }
    .bingo-screen .bingo-cell.owner-a .cell-main,
    .bingo-screen .bingo-cell.owner-b .cell-main { font-size: .66rem; }
    .bingo-screen .bingo-cell .cell-num { font-size: .55rem; top: 2px; left: 4px; }
    .bingo-screen .bingo-cell.split .split-half { font-size: .58rem; padding: 2px; }
}

/* 320–360px 极窄屏再降一档：棋盘只剩 ~258px，单格内容区 32px，
   最长角色名按上面一档仍会顶出 ~10px。 */
@media (max-width: 360px) {
    .bingo-screen .bingo-cell .cell-main { font-size: .56rem; line-height: 1.02; }
    .bingo-screen .bingo-cell.owner-a .cell-main,
    .bingo-screen .bingo-cell.owner-b .cell-main { font-size: .6rem; }
}

/* ===========================================================================
   低性能设备适配（/bingo 专用，作用域 body.game-screen）
   目标：本页尽量少动画。最贵的是全站那层"背景扫光"（.bg-light-riser 的
   mask-position 动画 —— 每帧重绘整个视口），其次是一堆无限循环的装饰动画。
   只停"装饰性 / 无限循环"的部分，功能性交互（按钮反馈、JS 刷新）不受影响。
   =========================================================================== */
body.game-screen .bg-light-riser { animation: none !important; display: none !important; }
body.game-screen .page-veil { display: none !important; }

/* 无限循环的装饰动画：全部只播一次/直接停掉（保留静态配色信息） */
body.game-screen * { animation-iteration-count: 1 !important; }
body.game-screen .team-panel.winner,
body.game-screen .winner-card,
body.game-screen .duel-dots::after { animation: none !important; }
body.game-screen .duel-dots::after { content: '…'; }

/* 系统级"减少动态效果"时，本页彻底静态 */
@media (prefers-reduced-motion: reduce) {
    body.game-screen *, body.game-screen *::before, body.game-screen *::after {
        animation: none !important; transition: none !important;
    }
}

.duel-ai-fab {
    position: relative;              /* 只作为弹层的定位参照，自身仍在文档流里 */
    display: flex;
    flex-direction: column;
    align-items: flex-end;           /* 右对齐：右边缘 = 内容框右边界 */
    margin: 0 0 8px;                 /* 与页头/棋盘留 8px，不贴不叠 */
    pointer-events: none;            /* 只有按钮/弹层本身接收点击 */
}
.duel-ai-fab > * { pointer-events: auto; }
.duel-ai-fab-btn {
    font-size: 12px;
    line-height: 1;
    padding: 6px 10px;
    border-radius: 999px;
    border: 1px solid var(--lc-line, #D9D6CB);
    background: var(--lc-paper, #FBFAF6);
    color: var(--lc-ink, #35334A);
    box-shadow: 0 1px 4px rgba(0, 0, 0, .12);
    white-space: nowrap;
}
.duel-ai-fab-btn:hover { background: #F1EEE6; }
.duel-ai-menu {
    position: absolute;
    top: 100%;
    right: 0;                        /* 弹层右边缘与按钮（=框右边界）对齐 */
    margin-top: 6px;
    background: var(--lc-paper, #FBFAF6);
    border: 1px solid var(--lc-line, #D9D6CB);
    border-radius: 10px;
    box-shadow: 0 6px 18px rgba(0, 0, 0, .16);
    padding: 8px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-width: 132px;
    z-index: 5;                      /* 只压在自己下方的棋盘上，且远低于导航栏 */
}
.duel-ai-menu-title { font-size: 11px; color: var(--lc-ink-2, #69687C); }
.duel-ai-tier { font-size: 12px; padding: 5px 8px; text-align: left; }
.duel-ai-menu-msg { font-size: 11px; color: #B4552D; min-height: 12px; }
@media (max-width: 420px) {
    .duel-ai-fab { margin-bottom: 6px; }
    .duel-ai-fab-btn { padding: 5px 8px; }
    .duel-ai-menu { min-width: 116px; max-width: 62vw; }
}

}
