/* Kapmaca (plan 97 §3.5, §7, §8; v2 per plan 102 §3.4): the bingo race. The blue half (side 0) and the orange half
   (side 1) each hold the side's own call banner, score and own 4×4 card. A capture fills the cell in the side's
   colour with a stamp; a wrong tap marks it red and dashed; the winning line turns gold, a beam sweeps through it and
   the half shouts KAPMACA! Colours come from tokens.css (light, dark, high contrast). Only transform, opacity and
   colour animate, and only on inner elements (the cell's face, its stamp, the beam, the banner), so every measured box
   stands still. No filters, no animated shadows; halves are contained. Reduced motion stops everything on the stage. */

#arenaBody:has(> .kapmaca-arena) { display: flex; flex-direction: column; overflow: hidden; padding: 10px 16px 12px; }
.kapmaca-arena { position: relative; display: flex; flex: 1; flex-direction: column; min-height: 0; }
.kapmaca-arena > #arenaPlay.arena-play--kapmaca { display: flex; flex: 1; min-height: 0; margin: 0; padding: 0; overflow: visible; background: transparent; border: 0; box-shadow: none; }

.kapmaca-stage {
  display: grid;
  flex: 1;
  grid-template-rows: auto minmax(0, 1fr);
  gap: 10px;
  min-width: 0;
  min-height: 0;
  touch-action: none;
  -webkit-user-select: none;
  user-select: none;
  font-variant-numeric: tabular-nums;
}

/* ---------- Top bar: call chip and pips · (the referee's mini panda) · the rules and the navy clock capsule ---------- */
.kapmaca-bar { display: grid; grid-template-columns: minmax(0, 1fr) 64px minmax(0, 1fr); align-items: center; gap: 12px; min-height: 48px; pointer-events: none; }
.kapmaca-bar__left { display: flex; align-items: center; gap: 14px; min-width: 0; }
.kapmaca-bar__round { flex: none; margin: 0; padding: 6px 14px; color: var(--ink); background: var(--gold-tint); border: 2px solid var(--gold-base); border-radius: 999px; font-size: 16px; font-weight: 900; white-space: nowrap; }
.kapmaca-pips { display: grid; grid-template-columns: repeat(10, 12px); gap: 4px 5px; margin: 0; padding: 0; list-style: none; }
.kapmaca-pips li { --pa: var(--surface); --pb: var(--surface); width: 12px; height: 12px; background: linear-gradient(90deg, var(--pa) 50%, var(--pb) 50%); border: 2px solid var(--line-strong); border-radius: 50%; transition: transform .25s ease; }
.kapmaca-pips li[data-done] { border-color: var(--ink-3); }
.kapmaca-pips li[data-a="true"] { --pa: var(--player-a); }
.kapmaca-pips li[data-b="true"] { --pb: var(--player-b); }
.kapmaca-pips li.is-current { border-color: var(--ink); transform: scale(1.3); }
.kapmaca-bar__right { display: flex; justify-content: flex-end; align-items: center; gap: 14px; min-width: 0; }
.kapmaca-bar__rule { display: grid; justify-items: end; gap: 1px; margin: 0; color: var(--ink-2); font-size: 13.5px; font-weight: 800; line-height: 1.25; text-align: right; }
.kapmaca-timer { position: relative; display: grid; flex: none; min-width: 120px; justify-items: center; gap: 4px; }
.kapmaca-timer strong { min-width: 5ch; padding: 5px 16px 6px; color: var(--on-inverse, #fff); background: var(--inverse); border: 3px solid var(--bg); border-radius: 999px; box-shadow: var(--shadow-sm); font-size: 24px; font-weight: 900; line-height: 1; text-align: center; }
.kapmaca-timer__track { width: 100%; height: 6px; overflow: hidden; background: var(--surface-3); border-radius: 999px; }
.kapmaca-timer__track i { display: block; width: 100%; height: 100%; background: var(--brand, var(--primary)); transform-origin: left center; }
.kapmaca-timer.is-urgent strong { background: var(--red-base); }
.kapmaca-timer.is-idle .kapmaca-timer__track i { background: var(--line-strong); }

/* ---------- The two halves ---------- */
.kapmaca-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px; min-height: 0; }
.kapmaca-side {
  --side: var(--player-a);
  --side-ink: var(--player-a-ink);
  --side-tint: var(--player-a-tint);
  --side-line: var(--player-a-line);
  --side-solid: var(--player-a-solid);
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
  min-height: 0;
  padding: 10px 12px 12px;
  color: var(--ink);
  background: linear-gradient(180deg, var(--side-tint), var(--surface) 70%);
  border: 2px solid var(--side-line);
  border-radius: 22px;
  contain: layout paint;
  container: kapmacahalf / inline-size;
  transition: border-color .25s ease;
}
.kapmaca-side.side-1 { --side: var(--player-b); --side-ink: var(--player-b-ink); --side-tint: var(--player-b-tint); --side-line: var(--player-b-line); --side-solid: var(--player-b-solid); }
.kapmaca-side.is-winner { border-color: var(--gold-base); }
.kapmaca-side__head { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 12px; min-height: 38px; }
.kapmaca-side__who { display: flex; align-items: center; min-width: 0; gap: 8px; }
.kapmaca-side__name { overflow: hidden; color: var(--side-ink); font-size: clamp(17px, 1.5vw, 21px); font-weight: 900; line-height: 1.15; white-space: nowrap; text-overflow: ellipsis; }
.kapmaca-side__role { flex: none; padding: 1px 8px; color: var(--side-ink); background: var(--surface); border: 1.5px solid var(--side-line); border-radius: 999px; font-size: 12px; font-weight: 800; }
.kapmaca-side__keys { display: inline-flex; align-items: center; gap: 3px; color: var(--ink-2); font-size: 12px; font-weight: 800; }
.kapmaca-side__keys kbd { min-width: 20px; padding: 0 5px; color: var(--side-ink); background: var(--surface); border: 1.5px solid var(--side-line); border-bottom-width: 3px; border-radius: 6px; font: 800 12px/1.35 var(--font-sans); text-align: center; }
.kapmaca-side__keys kbd.is-select { color: var(--ink); border-color: var(--side); }
.kapmaca-side__score { color: var(--ink); font-size: clamp(20px, 1.9vw, 28px); font-weight: 900; line-height: 1.05; white-space: nowrap; }
.kapmaca-side__score.is-up { animation: kapmaca-bump .4s cubic-bezier(.2, 1.5, .4, 1); }

/* The call banner: each half's own call, read only in that half (the stage's hidden live region speaks both).
   Side by side, it always has room for two lines of an open call, so a long call or a status that wraps the
   sentence never pushes one half's card below the other's (the halves' calls often differ in length). */
.kapmaca-call { --kapmaca-call-size: clamp(19px, 1.75vw, 25px); position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 4px 12px; min-height: calc(2.4 * var(--kapmaca-call-size) + 20px); padding: 8px 14px; background: var(--surface); border: 2px solid var(--side-line); border-radius: 16px; }
.kapmaca-call.is-open { border-color: var(--side); border-left-width: 8px; padding-left: 8px; }
.kapmaca-call__tag { padding: 3px 10px; color: var(--side-ink); background: var(--side-tint); border: 1.5px solid var(--side-line); border-radius: 999px; font-size: 13px; font-weight: 900; letter-spacing: .03em; text-transform: uppercase; white-space: nowrap; }
.kapmaca-call.is-open .kapmaca-call__tag { color: var(--on-player-solid); background: var(--side-solid); border-color: var(--side-solid); }
.kapmaca-call__text { margin: 0; color: var(--ink-2); font-size: clamp(16px, 1.4vw, 20px); font-weight: 750; line-height: 1.2; text-wrap: balance; }
.kapmaca-call.is-open .kapmaca-call__text { color: var(--ink); font-size: var(--kapmaca-call-size); font-weight: 900; letter-spacing: -.005em; }
.kapmaca-call__text sup { font-size: .62em; line-height: 0; }
.kapmaca-call.is-new .kapmaca-call__text { animation: kapmaca-call-in .32s cubic-bezier(.2, .9, .3, 1); }
.kapmaca-call.is-new .kapmaca-call__tag { animation: kapmaca-bump .4s cubic-bezier(.2, 1.5, .4, 1); }
.kapmaca-call__status { font-size: 15px; font-weight: 900; white-space: nowrap; }
.kapmaca-call__status:empty { display: none; }
.kapmaca-call__status[data-tone="good"] { color: var(--green-ink); }
.kapmaca-call__status[data-tone="bad"] { color: var(--red-ink); }
.kapmaca-call__status[data-tone="win"] { color: var(--gold-ink); }
.kapmaca-call__status[data-tone="wait"] { color: var(--ink-2); }
.kapmaca-call__status:not(:empty) { animation: kapmaca-bump .34s cubic-bezier(.2, 1.5, .4, 1); }
@keyframes kapmaca-call-in { from { opacity: 0; transform: translateY(6px); } }
/* Measured and visibility-checked elements only scale, never fade, so they read as shown at once. */
@keyframes kapmaca-bump { 0% { transform: scale(.7); } 70% { transform: scale(1.1); } 100% { transform: none; } }

/* ---------- The card: 16 cells, pos = 4·row + col ---------- */
.kapmaca-card { position: relative; display: grid; flex: 1; grid-template-columns: repeat(4, minmax(0, 1fr)); grid-template-rows: repeat(4, minmax(0, 1fr)); gap: 8px; min-height: 0; }
.kapmaca-cell {
  position: relative;
  display: grid;
  place-items: center;
  min-width: 0;
  min-height: 0;
  padding: 4px 6px;
  overflow: visible;
  color: var(--ink);
  background: var(--surface);
  border: 2px solid var(--side-line);
  border-radius: 14px;
  box-shadow: 0 3px 0 var(--side-line);
  font: inherit;
  font-weight: 850;
  line-height: 1.12;
  text-align: center;
  cursor: pointer;
  touch-action: none;
  transition: background-color .18s ease, border-color .18s ease, color .18s ease, opacity .2s ease;
  container-type: inline-size;
}
/* The size step is an upper cap: the longest run between plain spaces (--chars, set by unit-bingo.js) must fit the
   cell's width on one line, so a number never breaks inside itself. .62 em is the widest average advance of any run
   of 7+ characters the card banks deal (Inter 800, tabular figures: a digit .645 em, a comma or point .27 em). */
.kapmaca-cell__face { display: block; max-width: 100%; font-size: min(1em, calc(100cqi / (.62 * var(--chars)))); text-wrap: balance; pointer-events: none; }
.kapmaca-cell[data-size="xl"] { font-size: clamp(22px, min(2.5vw, 4.6vh), 36px); }
.kapmaca-cell[data-size="l"] { font-size: clamp(19px, min(2.05vw, 3.9vh), 30px); }
.kapmaca-cell[data-size="m"] { font-size: clamp(16px, min(1.65vw, 3.2vh), 25px); }
.kapmaca-cell[data-size="s"] { font-size: clamp(14px, min(1.5vw, 2.9vh), 22px); }
.kapmaca-cell[data-size="xs"] { font-size: clamp(12px, min(1.2vw, 2.3vh), 17px); line-height: 1.2; }
.kapmaca-cell sup { font-size: .62em; line-height: 0; }
/* A proportion table in one cell: one column per pair, x above y, ruled like a school table. */
.kapmaca-cell__face.kapmaca-pairs { display: inline-flex; align-items: stretch; font-size: clamp(13px, min(1.25vw, 2.4vh), 20px); font-weight: 850; }
.kapmaca-cell__face.kapmaca-pairs.is-wide { font-size: clamp(11px, min(1.05vw, 2.05vh), 17px); }
.kapmaca-pairs b { padding: 0 .34em; line-height: 1.5; white-space: pre-line; background: linear-gradient(currentColor, currentColor) center / 100% 1.5px no-repeat; }
.kapmaca-pairs b + b { border-left: 1.5px solid currentColor; }
html[data-input="mouse"] .kapmaca-stage[data-phase="call"] .kapmaca-side:not([data-tried="true"]) .kapmaca-cell[data-state="open"]:hover { border-color: var(--side); }
.kapmaca-cell:focus-visible { outline: 4px solid var(--focus); outline-offset: 2px; }
.kapmaca-card.is-bot .kapmaca-cell { cursor: default; pointer-events: none; }
/* The keyboard cursor: a ring around the cell, drawn as a pseudo element so the cell's own border stays its state. */
.kapmaca-cell[data-cursor="true"]::before { position: absolute; inset: -6px; z-index: 2; border: 3px solid var(--side-ink); border-radius: 18px; content: ""; pointer-events: none; }
.kapmaca-stage:not([data-phase="call"]) .kapmaca-cell[data-cursor="true"]::before { opacity: .45; }
/* Between calls and after a side's attempt the open cells rest. */
.kapmaca-stage:not([data-phase="call"]) .kapmaca-cell[data-state="open"], .kapmaca-side[data-tried="true"] .kapmaca-cell[data-state="open"] { opacity: .8; }

/* Captured: the side's solid colour and a stamp; inert from now on. */
.kapmaca-cell[data-state="captured"] { color: var(--on-player-solid); background: var(--side-solid); border-color: var(--side-solid); box-shadow: 0 3px 0 var(--side-ink); cursor: default; }
.kapmaca-cell[data-state="captured"]::after { position: absolute; top: 5px; right: 5px; width: 20px; height: 20px; color: var(--side-solid); background: var(--on-player-solid); border-radius: 50%; content: "✓"; font: 900 13px/20px var(--font-sans); text-align: center; }
.kapmaca-cell.is-pop .kapmaca-cell__face { animation: kapmaca-pop .38s cubic-bezier(.2, 1.6, .4, 1); }
.kapmaca-cell.is-pop::after { animation: kapmaca-stamp .42s .06s cubic-bezier(.2, 1.6, .4, 1) both; }
@keyframes kapmaca-pop { 0% { transform: scale(.72); } 60% { transform: scale(1.14); } 100% { transform: none; } }
@keyframes kapmaca-stamp { 0% { opacity: 0; transform: scale(2.4) rotate(-25deg); } 100% { opacity: 1; transform: none; } }

/* Wrong: red and dashed until the next call opens; the face shakes once. */
.kapmaca-cell[data-state="wrong"] { color: var(--red-ink); background: var(--red-tint); border: 3px dashed var(--red-base); box-shadow: none; opacity: 1; }
.kapmaca-cell.is-shake .kapmaca-cell__face { animation: kapmaca-shake .42s ease-in-out; }
@keyframes kapmaca-shake { 0%, 100% { transform: none; } 20% { transform: translateX(-7px) rotate(-3deg); } 40% { transform: translateX(6px) rotate(2deg); } 60% { transform: translateX(-4px); } 80% { transform: translateX(3px); } }

/* The winning line: gold cells lit one after another, a beam sweeping through their centres, and the shout. */
.kapmaca-cell[data-line="true"] { color: var(--ink); background: var(--gold-fill); border: 3px solid var(--gold-base); box-shadow: 0 3px 0 var(--gold-ink); }
.kapmaca-cell[data-line="true"]::after { color: var(--gold-fill); background: var(--ink); }
.kapmaca-cell[data-line="true"] .kapmaca-cell__face { animation: kapmaca-glow .55s calc(var(--i, 0) * 110ms + .1s) cubic-bezier(.2, 1.5, .4, 1) both; }
@keyframes kapmaca-glow { 0% { transform: scale(1); } 45% { transform: scale(1.22); } 100% { transform: none; } }
.kapmaca-beam { position: absolute; z-index: 3; height: 10px; margin-top: -5px; background: var(--gold-base); border-radius: 5px; opacity: .6; pointer-events: none; transform: rotate(var(--angle, 0rad)); transform-origin: 0 50%; animation: kapmaca-beam .55s .15s cubic-bezier(.3, .9, .3, 1) both; }
.kapmaca-beam[hidden] { display: none; }
@keyframes kapmaca-beam { from { transform: rotate(var(--angle, 0rad)) scaleX(0); } to { transform: rotate(var(--angle, 0rad)) scaleX(1); } }
.kapmaca-banner { position: absolute; top: 52px; right: 12px; left: 12px; z-index: 4; display: grid; place-items: center; margin: 0; pointer-events: none; }
.kapmaca-banner[hidden] { display: none; }
.kapmaca-banner span { padding: 6px 28px 8px; color: var(--ink); background: var(--gold-fill); border: 3px solid var(--gold-base); border-radius: 20px; box-shadow: 0 6px 0 var(--gold-ink); font-size: clamp(30px, 3.4vw, 48px); font-weight: 950; letter-spacing: .04em; line-height: 1; animation: kapmaca-shout .6s cubic-bezier(.2, 1.6, .4, 1) both; }
@keyframes kapmaca-shout { 0% { opacity: 0; transform: scale(.3) rotate(-8deg); } 60% { opacity: 1; transform: scale(1.12) rotate(2deg); } 100% { transform: none; } }

/* Dark theme: the lifted clock capsule. */
html[data-theme="dark"] .kapmaca-timer strong { color: var(--ink); background: var(--surface-3); border-color: var(--line-strong); }

/* ---------- Referee and pause ---------- */
.kapmaca-arena > .referee-region { position: absolute; z-index: 8; pointer-events: none; }
#arenaDialog:not([data-referee-phase="playing"]) .kapmaca-arena > .referee-region, #arenaDialog .kapmaca-arena > .referee-region[data-count] { top: 50%; left: 50%; display: grid; width: min(300px, calc(100% - 24px)); padding: 12px 16px; gap: 6px; background: var(--glass-strong); border: 1px solid var(--line); border-radius: 20px; box-shadow: 0 12px 30px rgba(15, 23, 42, .18); transform: translate(-50%, -50%); }
#arenaDialog:not([data-referee-phase="playing"]) .kapmaca-arena > .referee-region .referee-art, #arenaDialog .kapmaca-arena > .referee-region[data-count] .referee-art { width: 176px; margin: 0 auto; }
#arenaDialog .kapmaca-arena > .referee-region[data-count]:not([data-count="BAŞLA!"]) .referee-art { translate: calc(-.2 * 176px) 0; }
#arenaDialog .kapmaca-arena > .referee-region .referee-message { min-height: 0; font-size: 14px; text-align: center; }
#arenaDialog[data-referee-phase="playing"] .kapmaca-arena > .referee-region:not([data-count]) { top: 0; left: 50%; width: 48px; transform: translateX(-50%); }
#arenaDialog[data-referee-phase="playing"] .kapmaca-arena > .referee-region:not([data-count]) .referee-art { width: 48px; }
#arenaDialog[data-referee-phase="playing"] .kapmaca-arena > .referee-region:not([data-count]) .referee-message { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
#arenaDialog.is-finished .kapmaca-arena > .referee-region { display: none; }
.kapmaca-arena > .arena-paused { position: absolute; top: 50%; left: 50%; z-index: 9; width: min(360px, calc(100% - 32px)); padding: 22px 20px; background: var(--glass-strong); border: 2px solid var(--line-strong); border-radius: 22px; box-shadow: var(--shadow-lg); transform: translate(-50%, -50%); }
.kapmaca-arena > .arena-paused h3 { margin: 0 0 12px; }
.kapmaca-arena.is-paused .kapmaca-stage { opacity: .6; }
.arena-dialog.live-surface .kapmaca-arena > .arena-paused { pointer-events: auto; }
#arenaDialog:has(.kapmaca-arena) > .pregame-plates { overflow: hidden; }

/* ---------- Result ---------- */
.kapmaca-chart__bingo { fill: var(--gold-base); stroke: var(--surface); stroke-width: 2.5; }

/* ---------- High contrast: solid outline once captured, dashed for a wrong tap, ink everywhere ---------- */
body.high-contrast .kapmaca-side, body.high-contrast .kapmaca-call, body.high-contrast .kapmaca-cell { border-color: var(--ink); }
body.high-contrast .kapmaca-cell { box-shadow: none; }
body.high-contrast .kapmaca-cell[data-state="captured"] { border: 3px solid var(--ink); outline: 4px solid var(--ink); outline-offset: -9px; }
body.high-contrast .kapmaca-cell[data-state="captured"]:focus-visible { outline-offset: 2px; }
body.high-contrast .kapmaca-cell[data-state="wrong"] { color: var(--ink); background: #fff; border: 4px dashed var(--ink); }
body.high-contrast .kapmaca-cell[data-line="true"] { border: 4px solid var(--ink); outline: 4px solid var(--ink); outline-offset: -10px; }
body.high-contrast .kapmaca-cell[data-cursor="true"]::before { border-color: var(--ink); }
body.high-contrast .kapmaca-call.is-open { border-color: var(--ink); }
body.high-contrast .kapmaca-stage:not([data-phase="call"]) .kapmaca-cell[data-state="open"], body.high-contrast .kapmaca-side[data-tried="true"] .kapmaca-cell[data-state="open"] { opacity: 1; }
body.high-contrast .kapmaca-beam { background: var(--ink); opacity: .7; }
body.high-contrast .kapmaca-banner span { border-color: var(--ink); box-shadow: 0 6px 0 var(--ink); }

/* ---------- Narrow halves: the status drops under the call ---------- */
@container kapmacahalf (max-width: 520px) {
  .kapmaca-call { grid-template-columns: auto minmax(0, 1fr); padding: 6px 10px; }
  .kapmaca-call.is-open { padding-left: 6px; }
  .kapmaca-call__status { grid-column: 1 / -1; justify-self: end; font-size: 13px; }
  .kapmaca-side__keys { display: none; }
}

/* ---------- Smaller screens ---------- */
@media (max-width: 900px) {
  #arenaBody:has(> .kapmaca-arena) { padding: 8px; }
  .kapmaca-stage { gap: 8px; }
  .kapmaca-bar { grid-template-columns: minmax(0, 1fr) auto; min-height: 0; gap: 8px; }
  .kapmaca-bar__rule, .kapmaca-bar__mid { display: none; }
  .kapmaca-bar__round { padding: 4px 10px; font-size: 14px; }
  .kapmaca-pips { grid-template-columns: repeat(10, 9px); gap: 3px; }
  .kapmaca-pips li { width: 9px; height: 9px; border-width: 1.5px; }
  .kapmaca-timer { min-width: 0; }
  .kapmaca-timer strong { padding: 4px 12px; font-size: 19px; }
  .kapmaca-grid { gap: 8px; }
  .kapmaca-side { gap: 6px; padding: 8px; border-radius: 16px; }
  .kapmaca-side__head { min-height: 30px; gap: 6px; }
  .kapmaca-side__score { font-size: 19px; }
  .kapmaca-call { min-height: calc(2.4 * var(--kapmaca-call-size) + 16px); border-radius: 12px; }
  .kapmaca-call__tag { padding: 2px 8px; font-size: 11px; }
  .kapmaca-card { gap: 5px; }
  .kapmaca-cell { padding: 2px 3px; border-radius: 10px; box-shadow: 0 2px 0 var(--side-line); }
  .kapmaca-cell[data-cursor="true"]::before { inset: -4px; border-width: 2px; border-radius: 13px; }
  .kapmaca-cell[data-state="captured"]::after { top: 2px; right: 2px; width: 14px; height: 14px; font-size: 10px; line-height: 14px; }
  .kapmaca-banner { top: 40px; }
  #arenaDialog[data-referee-phase="playing"] .kapmaca-arena > .referee-region:not([data-count]) { display: none; }
  #arenaDialog:has(.kapmaca-arena) .pregame-plate { overflow: hidden; padding: 6px 10px; }
  #arenaDialog:has(.kapmaca-arena) .pregame-plate__line { font-size: 20px; }
  #arenaDialog:has(.kapmaca-arena) .pregame-plate small { font-size: 11px; }
}
/* Phones: the halves stack; against the computer its card shrinks to a strip under the player's card. */
@media (max-width: 640px) {
  .kapmaca-grid { grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) minmax(0, 1fr); gap: 6px; }
  .kapmaca-stage[data-solo="true"] .kapmaca-grid { grid-template-rows: minmax(0, 1fr) auto; }
  .kapmaca-side { gap: 4px; padding: 6px 8px 8px; }
  .kapmaca-side__head { min-height: 26px; }
  .kapmaca-side__name { font-size: 16px; }
  .kapmaca-side__score { font-size: 17px; }
  .kapmaca-call { min-height: 40px; gap: 2px 8px; }
  .kapmaca-call__text, .kapmaca-call.is-open .kapmaca-call__text { font-size: 15px; }
  .kapmaca-card { grid-template-rows: repeat(4, minmax(46px, 1fr)); }
  .kapmaca-cell[data-size="xl"] { font-size: 22px; }
  .kapmaca-cell[data-size="l"] { font-size: 18px; }
  .kapmaca-cell[data-size="m"] { font-size: 15px; }
  .kapmaca-cell[data-size="s"] { font-size: 13px; }
  .kapmaca-cell[data-size="xs"] { font-size: 10px; }
  .kapmaca-cell__face.kapmaca-pairs, .kapmaca-cell__face.kapmaca-pairs.is-wide { font-size: 11px; }
  .kapmaca-banner span { font-size: 28px; }
  .kapmaca-stage[data-solo="true"] .kapmaca-side.is-bot .kapmaca-call { display: none; }
  .kapmaca-stage[data-solo="true"] .kapmaca-side.is-bot .kapmaca-card { flex: none; grid-template-rows: repeat(4, 26px); gap: 3px; }
  .kapmaca-stage[data-solo="true"] .kapmaca-side.is-bot .kapmaca-cell { padding: 0 2px; border-width: 1.5px; border-radius: 6px; box-shadow: none; font-size: 10px; }
  .kapmaca-stage[data-solo="true"] .kapmaca-side.is-bot .kapmaca-cell__face.kapmaca-pairs { font-size: 8px; }
  .kapmaca-stage[data-solo="true"] .kapmaca-side.is-bot .kapmaca-cell::after { display: none; }
  .kapmaca-stage[data-solo="true"] .kapmaca-side.is-bot .kapmaca-banner { top: 22px; }
}

/* ---------- Reduced motion (setting or OS): nothing on the stage transitions or animates ---------- */
body.reduced-motion .kapmaca-stage, body.reduced-motion .kapmaca-stage *, body.reduced-motion .kapmaca-stage *::before, body.reduced-motion .kapmaca-stage *::after { transition: none !important; animation: none !important; }
@media (prefers-reduced-motion: reduce) {
  body:not(.motion-on) .kapmaca-stage, body:not(.motion-on) .kapmaca-stage *, body:not(.motion-on) .kapmaca-stage *::before, body:not(.motion-on) .kapmaca-stage *::after { transition: none !important; animation: none !important; }
}
