/* BSF teaching surface: layout only; answer/evidence gates remain in match.js.
 * #mt (the host shell) carries the standard .stage .poll skin (dark navy, winBar, chip) from index.html's
 * own stylesheet -- this file only adds the glue needed for that shell to host MATCH's inner board, plus
 * the board's own typography and layout. Font sizing is container-relative to #mt (container-type:size,
 * set by .stage .poll), not to .match-component itself, so cqh/cqi here never chase their own flex content. */
.stage .poll.matchbox .mchrome { display:contents; }   /* keeps the chip's .grip/.minib, and the wbar, as direct flex items of #mt so fitChip's own measurement and the shared .wbar absolute-position rule both still apply unchanged */
.stage .poll.matchbox.mini .mbody { display:none; }
.stage .poll.matchbox .mbody { flex:1; min-height:0; display:flex; flex-direction:column; overflow:auto; }   /* overflow:auto is a fallback only -- A6 requires scrollHeight<=clientHeight at every build */

.match-component { display:flex; flex-direction:column; flex:1; min-height:0; font-size:clamp(13px, 3.1cqh, 22px); line-height:1.3; }
.match-component *{ box-sizing:border-box; }
.match-dense { font-size:clamp(12px, 2.7cqh, 19px); }
.match-frame-title { margin:0 0 .5em; font-size:.85em; font-weight:700; color:#8CD6F1; flex:none; }
.match-component[data-mode="full"] .match-frame-title { padding-right:20cqh; }   /* clears the host's absolute .wbar (3 buttons at 5.6cqh + gaps + inset) in full mode; window mode's reservation moves to the workspace column below (lead fix A) */

.match-body { display:flex; flex-direction:column; flex:1; min-height:0; gap:.8em; }
.match-context { flex:1; min-height:0; overflow:auto; }
.match-context p { margin:0 0 .5em; }
.match-context-scripture, .match-scripture-pair-header { font-size:1em; line-height:1.35; }
.match-source-ref { font-weight:700; font-size:.78em; color:#F5B335; }
.match-context-question { font-weight:800; font-size:1.1em; border-left:4px solid #E8683F; padding:.3em 0 .3em .65em; }
.match-context-answer { padding:.5em .7em; background:rgba(255,255,255,.08); border-left:4px solid #1582A3; }
.match-context-caption { font-size:.8em; opacity:.85; }
.match-scripture-pair { margin-bottom:.55em; }
.match-scripture-pair-columns { display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.match-scripture-pair-side { min-width:0; }
.match-scripture-pair-side + .match-scripture-pair-side { border-left:1px solid rgba(255,255,255,.2); padding-left:14px; }
.match-scripture-side-label { display:block; font-weight:700; font-size:.78em; margin-bottom:.3em; }
.match-scripture-pair-side:first-child .match-scripture-side-label { color:#F5B335; }
.match-scripture-pair-side + .match-scripture-pair-side .match-scripture-side-label { color:#8CD6F1; }

.match-button { font:inherit; font-size:max(13px, .78em); padding:.45em .7em; border:1px solid rgba(255,255,255,.4); border-radius:.5em; color:#fff; background:rgba(255,255,255,.08); cursor:pointer; min-height:2.2em; line-height:1.2; }
.match-button:disabled { opacity:.5; cursor:default; }
.match-button:focus-visible, .match-tile:focus-visible { outline:3px solid #E8683F; outline-offset:2px; }

.match-workspace { flex:1; min-height:0; display:grid; align-content:start; gap:.7em; }
.match-found { display:flex; flex-wrap:wrap; gap:.3em; font-size:max(12px, .78em); background:rgba(255,255,255,.08); padding:.5em .65em; border-radius:.5em; }
.match-found span { border-left:1px solid rgba(255,255,255,.3); padding-left:.4em; }
.match-board { display:grid; gap:.6em; padding:.6em; background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.18); border-radius:.6em; }
.match-row { display:grid; grid-template-columns:minmax(6em, 20%) 1fr; gap:.6em; align-items:stretch; }
.match-row-ghost { display:grid; gap:.5em; }
.match-row-actions { display:flex; flex-direction:column; justify-content:center; gap:.35em; }
.match-cells { display:grid; grid-template-columns:1fr 1fr; gap:.5em; }
.match-cell { border:2px dashed rgba(255,255,255,.35); border-radius:.55em; min-height:3.6em; padding:.3em; display:flex; flex-direction:column; justify-content:center; align-items:stretch; gap:.25em; }
.match-board-scaffold .match-cell { border-color:rgba(255,255,255,.22); min-height:4.4em; }
.match-cell-heading { min-height:1em; font-size:.75em; font-weight:700; color:#8CD6F1; }
.match-row-confirmed .match-cell { border-style:solid; border-color:#8CD6F1; background:rgba(140,214,241,.12); }
.match-tile { display:inline-flex; align-items:center; justify-content:center; padding:.4em .55em; border:2px solid #1582A3; border-radius:.5em; background:#8CD6F1; font:inherit; font-size:1em; font-weight:700; color:#12324a; max-width:100%; white-space:normal; text-align:center; overflow-wrap:anywhere; }
.match-tile:is(button) { touch-action:none; cursor:grab; user-select:none; }
.match-tile:disabled { cursor:default; background:rgba(255,255,255,.15); border-color:rgba(255,255,255,.3); color:rgba(255,255,255,.6); }
.match-tray { display:flex; align-items:center; flex-wrap:wrap; gap:.6em; padding:.5em; min-height:0; border:2px dashed #E8683F; border-radius:.55em; background:rgba(232,104,63,.12); }
.match-selected { outline:3px solid #E8683F; }
.match-dragging { position:relative; z-index:10; cursor:grabbing; box-shadow:0 10px 25px rgba(0,0,0,.4); pointer-events:none; }
.match-evidence { font-size:.78em; line-height:1.25; margin:0; color:#8CD6F1; }

.match-summary-frame .match-body { gap:.9em; }
.match-summary { display:grid; gap:.3em; }
.match-summary-head { display:grid; grid-template-columns:1fr 1fr; gap:8px; font-size:.78em; padding:0 .5em; color:#8CD6F1; }
.match-summary-row { display:grid; grid-template-columns:1fr 1fr; border:1px solid rgba(255,255,255,.25); border-radius:.5em; overflow:hidden; }
.match-summary-cell { padding:.3em .5em; font-size:.85em; line-height:1.18; min-width:0; }
.match-summary-cell + .match-summary-cell { border-left:1px solid rgba(255,255,255,.25); }
.match-summary-cell > span { display:block; font-weight:700; }
.match-summary-cell small { display:inline; font-size:.85em; line-height:1.18; }
.match-summary-cell small + small::before { content:' · '; }
.match-unconfirmed { grid-column:1/-1; padding:2px 9px; background:rgba(245,179,53,.22); font-size:.78em; }
.match-circle-righteousness { display:inline-block; border:2px solid #E8683F; border-radius:50%; padding:1px 4px; }
.match-summary-cell > span.match-circle-righteousness { display:table; width:fit-content; max-width:100%; }
.match-strike-adam { background:rgba(232,104,63,.1); text-decoration:line-through; text-decoration-thickness:2px; text-decoration-color:#E8683F; }

.match-foot { flex:none; display:flex; align-items:center; flex-wrap:wrap; gap:.6em; padding-top:.4em; }
.match-status { margin:0; min-height:1.3em; font-size:max(12px, .8em); font-weight:600; flex:1; min-width:0; }
.match-status:empty { display:none; }
.match-summary-count { font-size:.78em; white-space:nowrap; background:#1582A3; color:#fff; border-radius:999px; padding:.3em .6em; flex:none; }
.match-foot-actions { display:flex; flex-wrap:wrap; gap:.5em; flex:none; }

/* Controls card: static document flow, no fixed height -- #mcb sits under its own .mctl window row, not inside #mt.
 * Director visual review 2026-11-06 (OPUS-VISUAL-REVIEW.md, fix C): the card is its own dark island, reusing the
 * tested window palette, rather than re-theming the component for the light host -- the light host was giving
 * #8CD6F1/#F5B335 text and an 8%-white .match-button near-invisible contrast on white. */
.match-controls-card .mbody { flex:none; background:#1F2A31; color:#fff; border-radius:12px; padding:14px 16px; margin-top:8px; }
.match-controls-card .match-component { font-size:clamp(16px, 1.5vw, 20px); }
.match-controls-card { padding-bottom:64px; }   /* clears the floating Notes pill, which otherwise covers the card's caption line */

/* Director visual review 2026-11-06 (OPUS-VISUAL-REVIEW.md, fix A): window/full read side-by-side at a legible
 * floor -- the stacked single column at clamp(12px,2.7cqh,19px) left half of every line empty and measured 13-15px
 * in the room-screen captures. 18px is the floor root measured as fitting F1 (the densest frame) in the ~520px
 * window rect without scrolling or cropping; do not lower it, and do not restore the old context max-height clamp
 * (deleted above) which caused the A6 overflow failures this replaces. */
.match-component[data-mode="window"],
.match-component[data-mode="full"] { font-size:max(18px, 1.55cqw); }
.match-component[data-mode="window"].match-dense,
.match-component[data-mode="full"].match-dense { font-size:max(17px, 1.42cqw); }

.match-component[data-mode="window"] .match-body,
.match-component[data-mode="full"] .match-body {
  display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:0 1.4em; flex:1; min-height:0; align-items:start; }
.match-component[data-mode] .match-summary-frame .match-body,
.match-component.match-summary-frame[data-mode] .match-body { grid-template-columns:minmax(0,2fr) minmax(0,3fr); }

.match-component[data-mode="window"] .match-context,
.match-component[data-mode="full"] .match-context,
.match-component[data-mode="window"][data-match-phase="board"] .match-context,
.match-component[data-mode="full"][data-match-phase="board"] .match-context {
  max-height:none; overflow:visible; flex:none; }
.match-component[data-mode="window"] .match-workspace,
.match-component[data-mode="full"] .match-workspace { min-height:0; overflow:visible; }

/* bar reservation now belongs on the right column's first line */
.match-component[data-mode="window"] .match-context > :first-child { padding-right:0; }
.match-component[data-mode="window"] .match-workspace > :first-child { margin-right:20cqh; }

.match-source-ref, .match-scripture-side-label, .match-cell-heading,
.match-summary-head, .match-evidence { font-size:max(14px, .8em); }
.match-summary-cell small, .match-found, .match-status { font-size:max(14px, .8em); }

@container (max-width:700px) {
  .match-row, [data-match-phase=evidence] .match-workspace { grid-template-columns:1fr; }
  .match-row-actions { flex-direction:row; justify-content:space-between; }
}

/* Board mode (L09 nine-row cumulative board, OPUS-CONTRACT-DELTA.md section 2).
 * Entirely separate markup from the classic .match-body/.match-workspace tree above
 * (uses .match-board2-* class names throughout), so none of the classic frame-grid
 * rules apply here; only the shared .match-component/.match-tile/.match-button/
 * .match-foot and type-floor rules are reused. */
.match-component[data-match-phase="board2"] .match-board2-body {
  display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:0 1.2em; flex:1; min-height:0; align-items:start;
}
.match-board2-col-board, .match-board2-col-right { display:flex; flex-direction:column; min-height:0; gap:.5em; }
.match-board2-headings { display:grid; grid-template-columns:1fr 1fr; gap:.5em; font-weight:700; }
.match-board2-heading { font-size:max(14px, .78em); }
.match-board2-heading-adam { color:#F5B335; }
.match-board2-heading-christ { color:#8CD6F1; }
.match-board2-grid { display:grid; grid-template-rows:repeat(9, minmax(2.6em, auto)); gap:.3em; }
.match-board2-row { display:grid; grid-template-columns:1fr 1fr; gap:.4em; }
.match-board2-row-next .match-board2-cell { border-color:rgba(232,104,63,.6); }
.match-board2-cell { border:2px dashed rgba(255,255,255,.35); border-radius:.5em; min-height:2.6em; padding:.3em; display:flex; align-items:center; justify-content:center; gap:.3em; }
.match-board2-cell-strike { background:rgba(232,104,63,.1); }
.match-board2-cell-strike .match-tile { text-decoration:line-through; text-decoration-thickness:2px; text-decoration-color:#E8683F; }
.match-board2-tray-wrap { display:flex; flex-direction:column; gap:.4em; }
.match-board2-tray-label { margin:0; font-size:max(12px, .78em); font-weight:700; }
.match-board2-tray { display:grid; grid-template-columns:1fr 1fr; gap:.4em; }
.match-board2-pager, .match-board2-source-pager { display:flex; gap:.5em; }
.match-board2-source { flex:1; min-height:0; }
.match-board2-source p { margin:0 0 .5em; }
.match-board2-source-indicator { margin:0 0 .3em; font-size:max(12px, .78em); opacity:.85; }

@container (max-width:700px) {
  .match-component[data-match-phase="board2"] .match-board2-body { grid-template-columns:1fr; }
}

/* Window mode, non-summary: footer under the board only, context gets 60% */
.match-component[data-mode="window"]:not(.match-summary-frame):not([data-match-phase="board2"]) {
  display:grid;
  grid-template-columns:minmax(0,3fr) minmax(0,2fr);
  grid-template-rows:minmax(0,1fr) auto;
  column-gap:1.4em;
}
.match-component[data-mode="window"]:not(.match-summary-frame):not([data-match-phase="board2"]) .match-body { display:contents; }
.match-component[data-mode="window"]:not(.match-summary-frame):not([data-match-phase="board2"]) .match-context {
  grid-column:1; grid-row:1 / -1; align-self:start; min-height:0; }
.match-component[data-mode="window"]:not(.match-summary-frame):not([data-match-phase="board2"]) .match-workspace {
  grid-column:2; grid-row:1; min-height:0; align-self:start; }
.match-component[data-mode="window"]:not(.match-summary-frame):not([data-match-phase="board2"]) .match-foot {
  grid-column:2; grid-row:2; }

/* Evidence note spans the whole row, not the narrow actions column */
.match-row > .match-evidence { grid-column:1 / -1; }

/* Keep normal-window Scripture paragraph separation while leaving the shared
   bottom join-banner reservation clear; line height and type floors stay fixed. */
.match-component[data-mode="window"] .match-context p { margin-bottom:.4em; }
/* Give primary words room instead of breaking Righteousness across letters. */
.match-component[data-mode="window"] .match-row { grid-template-columns:minmax(4.5em,17%) 1fr; }
.match-tile { overflow-wrap:normal; }

/* Below the 1280x720 window size only: scale the type floors with the shell (#mt is the size container) */
@container (max-width: 1170px) {
  .stage .poll.matchbox .match-component {
    --u: min(1px, 100cqw / 1200, 100cqh / 505);
  }
  .stage .poll.matchbox .match-component[data-mode="window"],
  .stage .poll.matchbox .match-component[data-mode="full"] {
    font-size: max(13px, calc(18 * var(--u)));
  }
  .stage .poll.matchbox .match-component[data-mode="window"].match-dense,
  .stage .poll.matchbox .match-component[data-mode="full"].match-dense {
    font-size: max(12px, calc(17 * var(--u)));
  }
  .stage .poll.matchbox .match-source-ref,
  .stage .poll.matchbox .match-scripture-side-label,
  .stage .poll.matchbox .match-cell-heading,
  .stage .poll.matchbox .match-summary-head,
  .stage .poll.matchbox .match-evidence,
  .stage .poll.matchbox .match-summary-cell small,
  .stage .poll.matchbox .match-found,
  .stage .poll.matchbox .match-status {
    font-size: max(11px, calc(14 * var(--u)), .8em);
  }
  .stage .poll.matchbox .match-button {
    font-size: max(11px, calc(13 * var(--u)), .78em);
  }
  .stage .poll.matchbox .match-scripture-pair-columns { gap: calc(14 * var(--u)); }
}

/* Cumulative board owns its layout; legacy window grids must not constrain it. */
.match-component[data-match-phase="board2"] { font-family:"Source Sans 3",system-ui,sans-serif; }
.match-board2-col-board, .match-board2-col-right { min-width:0; }
.match-board2-cell .match-tile { padding:.16em .3em; line-height:1.12; }
.match-board2-col-right .match-foot { gap:.4em; }
.match-board2-col-right .match-status { flex-basis:100%; }
.match-controls-card .match-component[data-match-phase="board2"] { font-size:16px; }
.match-controls-card .match-board2-col-board { max-width:100%; }


/* Reserve shared window chrome independently of which tray/source block is empty. */
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-col-right { padding-top:2em; }
.stage .poll.matchbox .match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) { font-size:max(17px,1.55cqw); }
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-col-board { height:100%; }
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-grid { flex:1; grid-template-rows:repeat(9,minmax(0,1fr)); }
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-cell { min-height:0; }
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-cell .match-tile { font-size:max(17px,1.75cqw); }

.match-board2-verse { color:#8CD6F1; font-weight:700; font-size:.8em; vertical-align:super; }

/* With a tray, its short heading reserves the bar horizontally; do not waste
   a second line of height above every available card at short window heights. */
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-col-right.match-board2-has-tray { padding-top:0; }
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-tray-label { margin-right:20cqh; }

/* Constrain the single board row to the shell, not its intrinsic card height. */
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-body { grid-template-rows:minmax(0,1fr); align-items:stretch; }
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-grid { min-height:0; }
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-cell { padding:0; }
.match-component[data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-cell .match-tile { font-size:max(17px,1.65cqw); padding:.1em .3em; line-height:1.12; }

/* layout:"bank" (OPUS-DESIGN.md section B): opt-in single-column stack -- bank,
 * then headings, then the 9-row table, then a one-line footer. No source pane/
 * pager exists in this mode. Scoped entirely to [data-board-layout="bank"] so
 * every rule above (both the default two-column board2 body and the classic
 * frame grid) is untouched for pages that do not set layout:"bank". */
.match-component[data-board-layout="bank"] .match-board2-body-bank {
  grid-template-columns:none; display:flex; flex-direction:column; gap:.35em; flex:1; min-height:0;
}
.match-component[data-board-layout="bank"] .match-board2-bank-slot { flex:none; min-height:0; }
/* Header label + pager inline on one row (was two stacked rows), to claw back
 * vertical budget for the 9-row table at the 610px floor. */
.match-component[data-board-layout="bank"] .match-board2-tray-wrap { gap:.25em; }
.match-component[data-board-layout="bank"] .match-board2-tray-header { display:flex; align-items:baseline; justify-content:space-between; gap:.5em; margin-right:20cqh; }
.match-component[data-board-layout="bank"] .match-board2-tray-label { margin:0; margin-right:0; }
.match-component[data-board-layout="bank"] .match-board2-pager { flex:none; gap:.35em; }
.match-component[data-board-layout="bank"] .match-board2-tray { grid-template-columns:1fr 1fr; grid-template-rows:repeat(2, auto); gap:.3em; }
.match-component[data-board-layout="bank"] .match-board2-bank-annotations { display:flex; flex-wrap:wrap; gap:.4em; margin-right:20cqh; }
.match-component[data-board-layout="bank"] .match-board2-headings { flex:none; }
.match-component[data-board-layout="bank"] .match-board2-grid {
  flex:1; min-height:0; grid-template-rows:repeat(9, minmax(auto, 1fr)); gap:.2em;
}
.match-component[data-board-layout="bank"] .match-board2-cell { min-height:0; overflow-wrap:normal; padding:.15em; }
.match-component[data-board-layout="bank"] .match-board2-cell .match-tile {
  white-space:normal; overflow-wrap:normal; word-break:normal; text-overflow:unset; overflow:visible;
}
.match-component[data-board-layout="bank"] .match-foot { flex:none; flex-wrap:nowrap; gap:.4em; padding-top:.2em; }
.match-component[data-board-layout="bank"] .match-foot .match-status {
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}

/* The generic board2 window/full rule (above) pins every row to minmax(0,1fr),
 * which clips a two-line label (results.json: 610-partial/-full and
 * 610-full-driver-window all flagged match-board2-cell scrollHeight >
 * clientHeight on "Gift of grace overflowed to many"). That rule has higher
 * specificity than a single-attribute override, so bank mode needs its own
 * [data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"])
 * selector to win and let a long label's row grow instead of clipping it. */
.match-component[data-board-layout="bank"][data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-grid {
  grid-template-rows:repeat(9, minmax(auto, 1fr));
}
/* Bank children must fill Controls too: the legacy body uses align-items:start. */
.match-component[data-board-layout="bank"] .match-board2-body-bank{align-items:stretch}
.match-component[data-board-layout="bank"] .match-board2-grid,.match-component[data-board-layout="bank"] .match-board2-headings{width:100%}
/* The half-slide table must scale with its own width on large projectors too.
 * Legacy full-width board ratios left its type at17px even at1920x1080. */
.stage .poll.matchbox .match-component[data-board-layout="bank"][data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]){font-size:max(17px,2.5cqw)}
.stage .poll.matchbox .match-component[data-board-layout="bank"][data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-tile{font-size:max(17px,2.5cqw)}
.stage .poll.matchbox .match-component[data-board-layout="bank"] .match-board2-heading{font-size:max(14px,.9em)}
.stage .poll.matchbox .match-component[data-board-layout="bank"] .match-board2-tray-label{font-size:max(14px,.8em)}
.stage .poll.matchbox .match-component[data-board-layout="bank"] .match-summary-count{font-size:max(12px,.75em)}

/* Group mode (OPUS-CONTRACT.md section 4b): a per-step restricted view inside
 * the same bank shell. Scoped entirely to [data-board-group] so every rule
 * above (classic board2, plain bank) is untouched for a page without group. */
.match-component[data-board-group] .match-board2-body-group { display:flex; flex-direction:column; gap:.35em; flex:1; min-height:0; }
.match-component[data-board-group] .match-board2-tray-group { grid-template-columns:repeat(3, 1fr); grid-template-rows:repeat(2, auto); gap:.35em; }
.match-component[data-board-group] .match-board2-cell-fixed { border:2px solid rgba(255,255,255,.45); background:rgba(255,255,255,.12); }
.match-component[data-board-group] .match-board2-cell-fixed .match-tile { background:transparent; border:none; color:#fff; font-weight:700; padding:.1em; }
.match-component[data-board-group] .match-board2-cell-live { border:2px dashed rgba(232,104,63,.85); }
.match-component[data-board-group] .match-board2-cell-future { border:2px dashed rgba(255,255,255,.18); }
.match-component[data-board-group] .match-board2-grid { flex:1; min-height:0; grid-template-rows:repeat(9, minmax(auto, 1fr)); gap:.2em; }
.match-component[data-board-group] .match-board2-cell { min-height:0; padding:.15em; overflow-wrap:normal; }
.match-component[data-board-group][data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) .match-board2-cell .match-tile { font-size:max(17px, 1.65cqw); }
.stage .poll.matchbox .match-component[data-board-group][data-match-phase="board2"]:is([data-mode="window"],[data-mode="full"]) { font-size:max(17px, 1.65cqw); }

/* Full screen only: left Scripture pane (38fr) beside the tray+board (62fr). */
.match-component[data-board-group][data-mode="full"] .match-board2-body { display:grid; grid-template-columns:38fr 62fr; gap:2cqw; align-items:start; }
.match-component[data-board-group][data-mode="full"] .match-board2-group-scripture { min-width:0; font-size:max(18px, 1.6cqw); line-height:1.35; }
.match-component[data-board-group][data-mode="full"] .match-board2-group-right { display:flex; flex-direction:column; gap:.5em; min-width:0; }
.match-component[data-board-group][data-mode="full"] .match-board2-group-right .match-board2-cell .match-tile { font-size:max(18px, 1.5cqw); }
.match-component[data-board-group][data-mode="full"] .match-board2-group-scripture strong { font-weight:700; }
/* Root pilot repair: give the nine rows a bounded share of the actual window.
 * The old bank's higher-specificity 2.5cqw tile type must not inflate this
 * full-width, two-column mode until its bottom rows disappear. */
.match-component[data-board-group] .match-board2-grid{grid-template-rows:repeat(9,minmax(0,1fr))}
.match-component[data-board-group] .match-board2-row{min-height:0}
.match-component[data-board-group][data-mode="full"] .match-board2-body-group{grid-template-rows:minmax(0,1fr) auto;align-items:stretch}
.match-component[data-board-group][data-mode="full"] .match-board2-group-right{height:100%;min-height:0}
.match-component[data-board-group][data-mode="full"] .match-foot{grid-column:1/-1}
.stage .poll.matchbox .match-component[data-board-group][data-match-phase="board2"][data-mode="full"] .match-tile{font-size:max(20px,1.75cqw)}
.stage .poll.matchbox .match-component[data-board-group][data-match-phase="board2"][data-mode="window"] .match-tile{font-size:max(17px,1.65cqw)}
.poll.matchbox.group-layout>.rs{display:none}
