:where(.v2-game-surface) {
  --v2-canvas: var(--pearl, #f7f2e8);
  --v2-surface: #ffffff;
  --v2-surface-raised: #fffdf8;
  --v2-ink: var(--midnight, #121927);
  --v2-muted: #5f6876;
  --v2-line: #cbd3dc;
  --v2-line-strong: #8794a4;
  --v2-accent: var(--coral, #c63e58);
  --v2-cyan: var(--cyan, #0b6e80);
  --v2-gold: var(--gold, #8a5b00);
  --v2-green: var(--green, #1b6b4c);
  --v2-danger: #a42d3f;
  --v2-radius-small: 10px;
  --v2-radius-medium: 16px;
  --v2-radius-large: 24px;
  --v2-shadow-small: 0 2px 0 rgba(18, 25, 39, 0.09), 0 8px 20px rgba(18, 25, 39, 0.08);
  --v2-shadow-large: 0 4px 0 rgba(18, 25, 39, 0.1), 0 18px 44px rgba(18, 25, 39, 0.12);
  position: relative;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  gap: 16px;
  inline-size: 100%;
  max-inline-size: 100%;
  min-block-size: 100%;
  padding: clamp(14px, 3vw, 28px);
  overflow: hidden auto;
  color: var(--v2-ink);
  background: var(--v2-canvas);
  color-scheme: light;
  font-family: ui-rounded, "SF Pro Rounded", "Avenir Next", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  line-height: 1.3;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  overscroll-behavior: contain;
}

:where(.v2-game-surface, .v2-game-surface *) {
  box-sizing: border-box;
}

.v2-controller-context { grid-column: 1 / -1; min-inline-size: 0; }
.game-context.v2-context-active { padding: 0; border: 0; background: transparent; box-shadow: none; }
.game-context.v2-context-active::before,
.game-context.v2-context-active::after,
.game-context.v2-context-active > :not(.v2-controller-context) { display: none; }
.v2-controller-context .v2-game-surface {
  min-block-size: 0;
  max-block-size: 34rem;
  border: 1px solid var(--v2-line);
  border-radius: var(--v2-radius-large);
}

.v2-game-surface::before,
.v2-game-surface::after {
  position: absolute;
  z-index: -1;
  inline-size: min(22vw, 220px);
  aspect-ratio: 1;
  border: 2px solid rgba(11, 110, 128, 0.12);
  border-radius: 50%;
  content: "";
  pointer-events: none;
}

.v2-game-surface::before {
  inset-block-start: -8%;
  inset-inline-end: -6%;
}

.v2-game-surface::after {
  inset-block-end: -10%;
  inset-inline-start: -8%;
  border-color: rgba(198, 62, 88, 0.12);
}

.v2-surface-header,
.v2-interaction-header {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px 24px;
  position: relative;
  z-index: 2;
}

.v2-heading-block {
  display: grid;
  gap: 5px;
  max-inline-size: 58rem;
}

.v2-surface-eyebrow {
  margin: 0;
  color: var(--v2-gold);
  font-size: clamp(0.72rem, 1.6vw, 0.92rem);
  font-weight: 800;
  letter-spacing: 0.09em;
  text-transform: uppercase;
}

.v2-surface-title,
.v2-interaction-title {
  margin: 0;
  max-inline-size: 24ch;
  color: var(--v2-ink);
  font-size: clamp(1.55rem, 4vw, 3.25rem);
  font-weight: 850;
  line-height: 1.05;
  text-wrap: balance;
}

.v2-surface-prompt,
.v2-interaction-help {
  margin: 0;
  max-inline-size: 62ch;
  color: var(--v2-muted);
  font-size: clamp(0.94rem, 1.8vw, 1.2rem);
  font-weight: 600;
}

.v2-status-strip,
.v2-legend,
.v2-score-strip,
.v2-surface-footer,
.v2-interaction-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

.v2-badge {
  display: inline-flex;
  min-block-size: 28px;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border: 1px solid var(--v2-line);
  border-radius: 999px;
  color: var(--v2-ink);
  background: var(--v2-surface);
  font-size: 0.78rem;
  font-variant-numeric: tabular-nums;
  font-weight: 780;
  white-space: nowrap;
}

.v2-badge-detail {
  color: var(--v2-muted);
  font-weight: 650;
}

.v2-tone-accent,
.v2-tone-coral { --v2-tone: var(--v2-accent); }
.v2-tone-cyan { --v2-tone: var(--v2-cyan); }
.v2-tone-gold { --v2-tone: var(--v2-gold); }
.v2-tone-green { --v2-tone: var(--v2-green); }
.v2-tone-ink { --v2-tone: var(--v2-ink); }
.v2-tone-neutral { --v2-tone: var(--v2-line-strong); }

.v2-badge[class*="v2-tone-"] {
  border-inline-start: 5px solid var(--v2-tone);
}

.v2-surface-body,
.v2-interaction-body {
  position: relative;
  z-index: 1;
  flex: 1 1 auto;
  min-block-size: 0;
}

.v2-surface-footer,
.v2-interaction-footer {
  position: relative;
  z-index: 2;
  margin-block-start: auto;
}

.v2-score-strip {
  inline-size: 100%;
}

.v2-score-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 2px 12px;
  flex: 1 1 150px;
  min-inline-size: 0;
  padding: 10px 12px;
  border: 1px solid var(--v2-line);
  border-inline-start: 7px solid var(--v2-tone);
  border-radius: var(--v2-radius-small);
  background: var(--v2-surface);
  box-shadow: var(--v2-shadow-small);
}

.v2-score-name,
.v2-score-detail {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.v2-score-name { font-weight: 760; }
.v2-score-value { font-size: 1.25rem; font-variant-numeric: tabular-nums; }
.v2-score-detail { grid-column: 1 / -1; color: var(--v2-muted); font-size: 0.74rem; }

.v2-grid-layout,
.v2-map-layout,
.v2-dice-score-layout,
.v2-auction-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(160px, 0.28fr);
  gap: clamp(12px, 2.2vw, 28px);
  block-size: 100%;
  min-block-size: 0;
}

.v2-board-sidebar {
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-inline-size: 0;
}

.v2-material-callout,
.v2-code-reveal,
.v2-word-result,
.v2-public-meld,
.v2-discard-pile {
  display: grid;
  justify-items: center;
  gap: 8px;
  padding: 12px;
  border: 1px solid var(--v2-line);
  border-radius: var(--v2-radius-medium);
  background: var(--v2-surface);
  box-shadow: var(--v2-shadow-small);
}

.v2-material-callout-label {
  color: var(--v2-muted);
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.07em;
  text-transform: uppercase;
}

.v2-token {
  display: inline-grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  gap: 5px;
  min-inline-size: 0;
  color: var(--v2-ink);
}

.v2-token-mark {
  display: grid;
  place-items: center;
  min-inline-size: 30px;
  min-block-size: 30px;
  padding-inline: 4px;
  border: 2px solid var(--v2-tone);
  border-radius: 50%;
  background: var(--v2-surface);
  font-size: 0.68rem;
  font-weight: 850;
  text-transform: uppercase;
}

.v2-token-label {
  overflow: hidden;
  font-size: 0.72rem;
  font-weight: 750;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.v2-card-material {
  position: relative;
  display: grid;
  grid-template-rows: auto 1fr auto;
  inline-size: clamp(52px, 12vw, 82px);
  aspect-ratio: 0.7;
  padding: 7px;
  overflow: hidden;
  border: 1px solid #9da9b6;
  border-radius: var(--v2-radius-small);
  color: var(--v2-ink);
  background: #fffef9;
  box-shadow: 0 2px 0 rgba(18, 25, 39, 0.12), 0 7px 16px rgba(18, 25, 39, 0.11);
  font-variant-numeric: tabular-nums;
}

.v2-card-rank { font-size: 1rem; font-weight: 900; }
.v2-card-suit { place-self: center; font-size: clamp(1.45rem, 6vw, 2.5rem); line-height: 1; }
.v2-card-suit-label { color: var(--v2-muted); font-size: 0.55rem; font-weight: 800; text-transform: uppercase; }
[data-classic-card] .v2-card-suit-label { color: inherit; font-size: 1rem; font-weight: 900; text-transform: none; text-align: end; line-height: 1; }

.v2-card-material.is-hidden {
  place-items: center;
  color: #fff;
  background: var(--v2-ink);
  border-color: #334154;
}

.v2-card-back-mark {
  display: grid;
  place-items: center;
  inline-size: 82%;
  block-size: 82%;
  border: 2px solid #fff;
  border-radius: 7px;
  font-size: clamp(0.45rem, 1.3vw, 0.68rem);
  font-weight: 850;
  letter-spacing: 0.08em;
}

.v2-die {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 1fr);
  inline-size: clamp(52px, 12vw, 82px);
  aspect-ratio: 1;
  padding: 10px;
  border: 2px solid var(--v2-tone);
  border-radius: var(--v2-radius-medium);
  background: var(--v2-surface);
  box-shadow: var(--v2-shadow-small);
}

.v2-die-pip {
  place-self: center;
  inline-size: clamp(5px, 1.3vw, 10px);
  aspect-ratio: 1;
  border-radius: 50%;
  background: transparent;
}

.v2-die-pip[data-on="true"] { background: var(--v2-ink); }
.v2-die[data-held="true"] { outline: 4px solid var(--v2-gold); outline-offset: 3px; }

.v2-progress-meter {
  position: relative;
  inline-size: 100%;
  min-block-size: 12px;
  overflow: hidden;
  border: 1px solid var(--v2-line-strong);
  border-radius: 999px;
  background: var(--v2-surface);
}

.v2-progress-fill {
  display: block;
  inline-size: var(--v2-progress, 0%);
  min-block-size: 12px;
  background: var(--v2-cyan);
}

.v2-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--v2-muted);
  font-size: 0.7rem;
  font-weight: 700;
}

.v2-legend-mark {
  display: grid;
  place-items: center;
  min-inline-size: 24px;
  min-block-size: 24px;
  border: 2px solid var(--v2-tone);
  border-radius: 7px;
  color: var(--v2-ink);
  background: var(--v2-surface);
  font-size: 0.64rem;
  font-weight: 900;
}

/* Public race board */
.v2-race-board {
  min-block-size: 0;
  padding: clamp(10px, 2vw, 22px);
  border: 1px solid var(--v2-line);
  border-radius: var(--v2-radius-large);
  background: var(--v2-surface-raised);
  box-shadow: var(--v2-shadow-large);
}

.v2-race-track {
  display: grid;
  grid-template-columns: repeat(6, minmax(44px, 1fr));
  gap: clamp(5px, 1vw, 10px);
  margin: 0;
  padding: 0;
  list-style: none;
}

.v2-race-node {
  position: relative;
  display: grid;
  place-items: center;
  min-inline-size: 44px;
  min-block-size: 68px;
  padding: 5px;
  border: 2px solid var(--v2-line);
  border-radius: var(--v2-radius-small);
  background: var(--v2-surface);
  text-align: center;
}

.v2-race-node[data-state="active"] { border-color: var(--v2-gold); border-width: 4px; }
.v2-race-node[data-state="recent"] { box-shadow: 0 0 0 4px color-mix(in srgb, var(--v2-cyan) 28%, transparent); }
.v2-race-node[data-kind="start"] { border-style: dashed; background: color-mix(in srgb, var(--v2-gold) 10%, var(--v2-surface)); }
.v2-race-node[data-kind="step"] { border-color: var(--v2-green); background: color-mix(in srgb, var(--v2-green) 12%, var(--v2-surface)); }
.v2-race-node[data-kind="slide"] { border-color: var(--v2-accent); background: color-mix(in srgb, var(--v2-accent) 11%, var(--v2-surface)); }
.v2-race-node[data-kind="fork"] { border-color: var(--v2-cyan); }
.v2-race-node[data-kind="finish"] { border-color: var(--v2-gold); border-width: 3px; }
.v2-game-surface[data-rapid="true"] .v2-race-board { border-color: color-mix(in srgb, var(--v2-gold) 58%, var(--v2-line)); }
.v2-race-node-number { font-size: 0.72rem; font-variant-numeric: tabular-nums; font-weight: 850; }
.v2-race-node-label { color: var(--v2-muted); font-size: 0.6rem; font-weight: 700; }
.v2-race-node-tokens { display: flex; justify-content: center; }
.v2-race-node-tokens .v2-token-label { display: none; }
.v2-race-node-tokens .v2-token + .v2-token { margin-inline-start: -10px; }

/* Shared grids */
.v2-board-grid,
.v2-coordinate-grid {
  display: grid;
  grid-template-columns: repeat(var(--v2-grid-columns, 1), minmax(0, 1fr));
  grid-template-rows: repeat(var(--v2-grid-rows, 1), minmax(0, 1fr));
  gap: clamp(2px, 0.4vw, 5px);
  inline-size: min(100%, 80vh);
  max-block-size: 100%;
  aspect-ratio: var(--v2-grid-columns, 1) / var(--v2-grid-rows, 1);
  margin-inline: auto;
  padding: clamp(5px, 1vw, 12px);
  border: 2px solid var(--v2-ink);
  border-radius: var(--v2-radius-medium);
  background: var(--v2-ink);
  box-shadow: var(--v2-shadow-large);
}

.v2-board-cell,
.v2-grid-cell {
  position: relative;
  display: grid;
  place-items: center;
  min-inline-size: 0;
  min-block-size: 0;
  overflow: hidden;
  border: 1px solid var(--v2-line);
  border-radius: 5px;
  color: var(--v2-ink);
  background: var(--v2-surface);
  font-variant-numeric: tabular-nums;
}

.v2-grid-row { display: contents; }

.v2-grid-cell { min-inline-size: 44px; min-block-size: 44px; }
.v2-grid-button { inline-size: 100%; block-size: 100%; min-inline-size: 44px; min-block-size: 44px; border-radius: 5px; }
.v2-cell-mark { font-size: clamp(0.7rem, 2vw, 1.35rem); }
.v2-cell-status { color: var(--v2-muted); font-size: clamp(0.42rem, 1.1vw, 0.66rem); font-weight: 850; text-transform: uppercase; }
.v2-board-cell[data-state="hit"] { border: 3px solid var(--v2-danger); }
.v2-board-cell[data-state="miss"] { border: 3px dashed var(--v2-cyan); }
.v2-board-cell[data-state="sunk"] { outline: 3px double var(--v2-ink); outline-offset: -5px; }
.v2-word-grid .v2-board-cell { aspect-ratio: 1; }
.v2-word-grid .v2-cell-mark { font-size: clamp(0.78rem, 2.6vw, 1.7rem); font-weight: 900; text-transform: uppercase; }

/* Code board */
.v2-code-board { display: grid; align-content: start; gap: 8px; }
.v2-code-row {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  border: 1px solid var(--v2-line);
  border-radius: var(--v2-radius-medium);
  background: var(--v2-surface);
  box-shadow: var(--v2-shadow-small);
}
.v2-code-row-number { color: var(--v2-muted); font-variant-numeric: tabular-nums; font-weight: 850; }
.v2-code-pegs { display: flex; flex-wrap: wrap; gap: 7px; }
.v2-code-peg {
  display: grid;
  place-items: center;
  min-inline-size: 44px;
  min-block-size: 44px;
  border: 4px solid var(--v2-tone);
  border-radius: 50%;
  background: var(--v2-surface-raised);
}
.v2-code-peg-mark { font-size: 0.72rem; font-weight: 900; }
.v2-code-peg-label { color: var(--v2-muted); font-size: 0.48rem; font-weight: 800; }
.v2-code-feedback { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 5px; }
.v2-code-reveal { margin-block-end: 12px; border-color: var(--v2-gold); }

/* Dice scoring */
.v2-dice-score-layout { align-items: start; }
.v2-dice-tray { display: flex; flex-wrap: wrap; justify-content: center; gap: clamp(8px, 2vw, 18px); padding: 16px; }
.v2-score-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px; }
.v2-category-score {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 2px 8px;
  padding: 11px;
  border: 1px solid var(--v2-line);
  border-radius: var(--v2-radius-small);
  background: var(--v2-surface);
}
.v2-category-score[data-state="used"] { border-style: dashed; color: var(--v2-muted); }
.v2-category-name { font-weight: 750; }
.v2-category-value { font-size: 1.15rem; font-variant-numeric: tabular-nums; }
.v2-category-status { grid-column: 1 / -1; color: var(--v2-muted); font-size: 0.68rem; }
.v2-dice-values { display: grid; grid-template-columns: repeat(var(--v2-grid-columns, 2), minmax(0, 1fr)); gap: 2px 4px; }
.v2-dice-values > span { white-space: nowrap; }
.v2-dice-waiting { margin: 0; align-self: center; font-weight: 750; text-align: center; color: var(--v2-ink); }

/* Five Dice is a complete table, not a narrow list below the television edge. */
html .v2-public-diceScore[data-mode="tv"] {
  display: grid;
  block-size: 100%; min-block-size: 0; overflow: hidden;
  padding: clamp(10px, 2.2vh, 32px); gap: clamp(8px, 1.4vh, 24px);
  grid-template-rows: auto minmax(0, 1fr) auto;
}
html .v2-public-diceScore[data-mode="tv"] .v2-surface-body { min-block-size: 0; }
html .v2-public-diceScore[data-mode="tv"] .v2-dice-score-layout {
  grid-template-columns: minmax(0, 1fr); grid-template-rows: minmax(50px, .8fr) minmax(0, 1.2fr) auto;
  align-items: stretch; gap: clamp(6px, 1vh, 18px);
}
html .v2-public-diceScore[data-mode="tv"] .v2-dice-tray {
  align-items: center; flex-wrap: nowrap; min-block-size: 0; padding: 8px;
  border: 2px solid var(--v2-line); border-radius: var(--v2-radius-medium);
  background: var(--v2-surface);
}
html .v2-public-diceScore[data-mode="tv"] .v2-die { inline-size: clamp(44px, 10vh, 180px); }
html .v2-public-diceScore[data-mode="tv"] .v2-score-cards {
  grid-template-columns: repeat(var(--dice-category-columns, 4), minmax(0, 1fr)); min-block-size: 0; gap: clamp(4px, .7vw, 14px);
}
html .v2-public-diceScore[data-mode="tv"] .v2-category-score { padding: clamp(5px, .8vw, 20px); min-block-size: 0; align-content: center; }
html .v2-public-diceScore[data-mode="tv"] .v2-surface-title { font-size: clamp(24px, 3vw, 112px); }
html .v2-public-diceScore[data-mode="tv"] .v2-dice-waiting { font-size: clamp(20px, 2.8vw, 100px); line-height: 1.15; padding: 8px; max-inline-size: 48ch; }
html .v2-public-diceScore[data-mode="tv"] .v2-category-name { font-size: clamp(12px, 1.6vw, 80px); line-height: 1.12; }
html .v2-public-diceScore[data-mode="tv"] .v2-category-status { font-size: clamp(10px, 1.2vw, 64px); line-height: 1.15; overflow-wrap: anywhere; }
html .v2-public-diceScore[data-mode="tv"] .v2-category-value { font-size: clamp(18px, 1.5vw, 64px); }
html .v2-public-diceScore[data-mode="tv"] .v2-surface-footer { margin: 0; }
html .v2-public-diceScore[data-mode="tv"] .v2-score-strip { display: flex; flex-wrap: nowrap; }
html .v2-public-diceScore[data-mode="tv"] .v2-score-item { flex: 1; min-inline-size: 0; padding: clamp(4px, .7vw, 20px); }
html .v2-public-diceScore[data-mode="tv"] .v2-score-name { white-space: normal; overflow-wrap: anywhere; font-size: clamp(11px, 1.35vw, 64px); }
html .v2-public-diceScore[data-mode="tv"] .v2-score-value { font-size: clamp(18px, 2vw, 80px); }
@media (max-height: 600px) {
  html .v2-public-diceScore[data-mode="tv"] .v2-dice-score-layout {
    grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); grid-template-rows: minmax(0, 1fr) auto;
  }
  html .v2-public-diceScore[data-mode="tv"] .v2-dice-tray { grid-column: 1; grid-row: 1 / 3; flex-wrap: wrap; gap: 8px; align-content: center; }
  html .v2-public-diceScore[data-mode="tv"] .v2-score-cards { grid-column: 2; grid-row: 1; }
  html .v2-public-diceScore[data-mode="tv"] .v2-dice-score-layout > .v2-badge { grid-column: 2; grid-row: 2; }
  html .v2-public-diceScore[data-mode="tv"] .v2-die { inline-size: 44px; }
  html .v2-public-diceScore[data-mode="tv"] .v2-category-score { padding: 4px; gap: 1px; }
  html .v2-public-diceScore[data-mode="tv"] .v2-category-status { font-size: 9px; }
  html .v2-public-diceScore[data-mode="tv"] .v2-score-item { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; padding: 4px; gap: 3px; }
  html .v2-public-diceScore[data-mode="tv"] .v2-score-value { font-size: 16px; }
  html .v2-public-diceScore[data-mode="tv"] .v2-score-name { font-size: 10px; }
}
/* The private tray and scorecard below already carry the active player's dice.
   Keep this phone overview to turn identity and shared totals, not a second table. */
#controller:has(.v2-five-dice-controller) .v2-public-diceScore[data-mode="controller-context"] .v2-surface-body { display: none; }
#controller:has(.v2-five-dice-controller) .v2-public-diceScore[data-mode="controller-context"] { max-block-size: none; gap: 8px; padding: 10px; }
#controller:has(.v2-five-dice-controller) .v2-public-diceScore .v2-score-strip { display: grid; grid-template-columns: repeat(var(--dice-public-columns, 2), minmax(0, 1fr)); gap: 4px; }
#controller:has(.v2-five-dice-controller) .v2-public-diceScore .v2-score-item { padding: 5px; gap: 2px; border-inline-start-width: 3px; grid-template-columns: minmax(0, 1fr); }
#controller:has(.v2-five-dice-controller) .v2-public-diceScore .v2-score-name { font-size: 11px; }
#controller:has(.v2-five-dice-controller) .v2-public-diceScore .v2-score-value { font-size: 16px; }

/* Card table */
.v2-card-table {
  display: grid;
  grid-template-columns: minmax(170px, 0.28fr) minmax(0, 1fr);
  gap: clamp(12px, 2vw, 24px);
  min-block-size: 360px;
  padding: clamp(12px, 2vw, 24px);
  border: 2px solid #526173;
  border-radius: var(--v2-radius-large);
  background: #e8f1ed;
  box-shadow: var(--v2-shadow-large);
}
.v2-card-facts {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.v2-card-fact {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-block-size: 44px;
  padding: 5px 8px;
  border: 1px solid var(--v2-line);
  border-radius: var(--v2-radius-small);
  background: var(--v2-surface);
}
.v2-card-fact-label { color: var(--v2-muted); font-size: 0.72rem; font-weight: 800; text-transform: uppercase; }
.v2-player-seats { display: grid; align-content: center; gap: 8px; }
.v2-player-seat {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 5px 8px;
  padding: 9px;
  border: 1px solid var(--v2-line);
  border-inline-start: 6px solid var(--v2-tone);
  border-radius: var(--v2-radius-small);
  background: var(--v2-surface);
}
.v2-player-seat[data-state="active"] { outline: 3px solid var(--v2-gold); outline-offset: 2px; }
.v2-player-status { grid-column: 1 / -1; color: var(--v2-muted); font-size: 0.68rem; font-weight: 700; }
.v2-card-table-center { display: flex; flex-wrap: wrap; align-content: center; align-items: center; justify-content: center; gap: 14px; }
.v2-public-card-group { display: flex; align-items: center; justify-content: center; gap: 6px; }
.v2-public-card-group .v2-card-material + .v2-card-material { margin-inline-start: -18px; }
.v2-card-history {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 8px;
  padding: 0;
  margin: 0;
  list-style: none;
}
.v2-card-history-item {
  display: grid;
  gap: 3px;
  padding: 9px 11px;
  border: 1px solid var(--v2-line);
  border-inline-start: 5px solid var(--v2-cyan);
  border-radius: var(--v2-radius-small);
  background: var(--v2-surface);
}
.v2-card-history-item[data-state="truth"] { border-inline-start-color: var(--v2-green); }
.v2-card-history-item[data-state="bluff"] { border-inline-start-color: var(--v2-coral); }
.v2-card-history-item[data-state="banner"] { border-inline-start-color: var(--v2-gold); }
.v2-card-history-label { font-size: 0.78rem; }
.v2-card-history-detail { color: var(--v2-muted); font-size: 0.68rem; font-weight: 700; }

/* Economy map */
.v2-economy-map {
  position: relative;
  min-block-size: clamp(330px, 56vh, 660px);
  overflow: hidden;
  border: 2px solid #526173;
  border-radius: var(--v2-radius-large);
  background: #e7f0ed;
  box-shadow: var(--v2-shadow-large);
}
.v2-economy-map::before {
  position: absolute;
  inset: 8%;
  border: 3px dashed rgba(11, 110, 128, 0.35);
  border-radius: 45% 55% 48% 52%;
  content: "";
}
.v2-map-node {
  position: absolute;
  inset-inline-start: var(--v2-x);
  inset-block-start: var(--v2-y);
  display: grid;
  min-inline-size: clamp(74px, 10vw, 130px);
  max-inline-size: 150px;
  padding: 8px;
  border: 2px solid var(--v2-tone);
  border-radius: var(--v2-radius-small);
  background: var(--v2-surface);
  box-shadow: var(--v2-shadow-small);
  transform: translate(-50%, -50%);
}
[dir="rtl"] .v2-map-node { transform: translate(50%, -50%); }
.v2-map-node[data-state="active"] { outline: 4px solid var(--v2-gold); outline-offset: 2px; }
.v2-map-node-label { overflow: hidden; font-size: clamp(0.65rem, 1.4vw, 0.92rem); text-overflow: ellipsis; white-space: nowrap; }
.v2-map-node-value,
.v2-map-node-owner { color: var(--v2-muted); font-size: clamp(0.52rem, 1vw, 0.68rem); }
.v2-map-node-tokens { display: flex; margin-block-start: 4px; }
.v2-map-node-tokens .v2-token-label { display: none; }
.v2-route-list { display: grid; gap: 7px; }
.v2-route-item { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 5px; padding: 8px; border: 1px solid var(--v2-line); border-radius: var(--v2-radius-small); background: var(--v2-surface); font-size: 0.72rem; font-weight: 750; }
.v2-route-item[data-state="active"] { border: 3px solid var(--v2-green); }
.v2-route-status { grid-column: 1 / -1; color: var(--v2-muted); font-size: 0.62rem; }

/* Auction */
.v2-auction-layout { grid-template-columns: minmax(220px, 0.38fr) minmax(0, 1fr); }
.v2-auction-lot {
  display: grid;
  align-content: center;
  justify-items: center;
  gap: 10px;
  min-block-size: 260px;
  padding: clamp(18px, 3vw, 36px);
  border: 2px solid var(--v2-gold);
  border-radius: var(--v2-radius-large);
  background: var(--v2-surface-raised);
  box-shadow: var(--v2-shadow-large);
  text-align: center;
}
.v2-auction-lot-mark { display: grid; place-items: center; inline-size: 96px; aspect-ratio: 1; border: 3px double var(--v2-gold); border-radius: 50%; color: var(--v2-gold); font-size: 0.78rem; font-weight: 900; letter-spacing: 0.08em; }
.v2-auction-lot-title { margin: 0; font-size: clamp(1.3rem, 3vw, 2.4rem); }
.v2-auction-lot-description { margin: 0; color: var(--v2-muted); }
.v2-bidder-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; }
.v2-bidder-status { display: grid; gap: 8px; padding: 12px; border: 1px solid var(--v2-line); border-inline-start: 6px solid var(--v2-tone); border-radius: var(--v2-radius-medium); background: var(--v2-surface); box-shadow: var(--v2-shadow-small); }
.v2-bidder-status[data-state="locked"] { border-style: double; border-width: 3px; border-inline-start-width: 7px; }
.v2-bidder-lock { font-size: 0.78rem; }
.v2-bidder-amount { color: var(--v2-gold); font-size: 1.3rem; font-variant-numeric: tabular-nums; font-weight: 900; }

/* Controller interaction foundation */
.v2-interaction-body { display: grid; align-content: start; gap: 14px; }
.v2-choice-grid {
  display: grid;
  grid-template-columns: repeat(var(--v2-grid-columns, 1), minmax(0, 1fr));
  gap: 10px;
  inline-size: 100%;
}

.v2-action,
.v2-number-input {
  min-inline-size: 44px;
  min-block-size: 44px;
  border-radius: var(--v2-radius-medium);
  font: inherit;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}

.v2-range-input {
  inline-size: 100%;
  min-block-size: 44px;
  accent-color: var(--v2-coral);
  touch-action: pan-x;
}

.v2-bid-value {
  display: grid;
  place-items: center;
  min-inline-size: 72px;
  min-block-size: 52px;
  border: 2px solid var(--v2-ink);
  border-radius: 14px;
  background: var(--v2-gold);
  color: var(--v2-ink);
  font-size: 1.55rem;
  font-weight: 900;
  box-shadow: 0 3px 0 var(--v2-ink);
}

.v2-exact-bid-composer,
.v2-failaka-options {
  display: grid;
  gap: 12px;
}

.v2-action {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 4px 8px;
  padding: 11px 13px;
  border: 2px solid var(--v2-line-strong);
  color: var(--v2-ink);
  background: var(--v2-surface);
  box-shadow: var(--v2-shadow-small);
  cursor: pointer;
  text-align: start;
  transition: transform 120ms cubic-bezier(0.23, 1, 0.32, 1), box-shadow 120ms ease-out, border-color 120ms ease-out;
}

.v2-action.v2-tone-accent,
.v2-action.v2-tone-coral { border-color: var(--v2-accent); background: var(--v2-accent); color: #fff; }
.v2-action.v2-tone-cyan { border-color: var(--v2-cyan); }
.v2-action.v2-tone-gold { border-color: var(--v2-gold); }
.v2-action.v2-tone-green { border-color: var(--v2-green); }
.v2-action:active:not(:disabled) { transform: scale(0.97); box-shadow: none; }
.v2-action:disabled { opacity: 0.48; cursor: not-allowed; }
.v2-action[aria-pressed="true"],
.v2-action[aria-selected="true"],
.v2-action[data-state="selected"] { outline: 4px solid var(--v2-gold); outline-offset: 2px; }
.v2-action-label { min-inline-size: 0; overflow-wrap: anywhere; font-weight: 820; }
.v2-action-detail { grid-column: 1 / -1; color: currentColor; font-size: 0.72rem; opacity: 0.78; }
.v2-action-shortcut { place-self: center end; min-inline-size: 24px; padding: 2px 5px; border: 1px solid currentColor; border-radius: 6px; font-size: 0.65rem; text-align: center; }

.v2-material-action { justify-items: center; text-align: center; }
.v2-material-action .v2-token,
.v2-material-action .v2-card-material,
.v2-material-action .v2-die { grid-column: 1 / -1; }
.v2-piece-picker,
.v2-resource-grid,
.v2-map-actions { align-items: stretch; }

.v2-code-composer-slots,
.v2-code-palette,
.v2-tile-rack,
.v2-card-hand,
.v2-interactive-dice-tray {
  display: flex;
  align-items: stretch;
  gap: 9px;
  padding: 8px 4px 14px;
  overflow-x: auto;
  scroll-padding-inline: 8px;
  scroll-snap-type: inline proximity;
  -webkit-overflow-scrolling: touch;
}

.v2-code-slot {
  display: grid;
  grid-template-rows: auto 1fr;
  place-items: center;
  flex: 0 0 58px;
  min-block-size: 70px;
  border: 3px solid var(--v2-tone);
  border-radius: var(--v2-radius-medium);
  background: var(--v2-surface);
}
.v2-code-slot[data-state="empty"] { border-style: dashed; }
.v2-code-slot-number { color: var(--v2-muted); font-size: 0.6rem; font-weight: 850; }
.v2-code-slot-mark { font-size: 1.25rem; font-weight: 900; }
.v2-code-palette { display: grid; overflow: visible; }
.v2-private-codeComposer .v2-code-composer-slots { gap:6px; padding-inline:0; }
.v2-private-codeComposer button.v2-code-slot { flex:1 0 44px; min-inline-size:44px; min-block-size:64px; color:var(--v2-ink); cursor:pointer; padding:4px; }
.v2-code-glyph { inline-size:32px; block-size:32px; flex-shrink:0; }
.v2-code-palette button { min-inline-size:44px; min-block-size:74px; }
.v2-private-codeComposer .v2-code-palette button { display:flex; flex-direction:column-reverse; justify-content:center; align-items:center; gap:4px; padding:8px 4px; }
.v2-private-codeComposer .v2-code-palette .v2-action-label { font-size:14px; line-height:1.25; overflow-wrap:normal; word-break:normal; }
.v2-private-codeComposer .v2-code-palette[hidden],.v2-private-codeComposer .v2-code-composer-slots[hidden],.v2-private-codeComposer .v2-composer-controls[hidden] { display:none!important; }
.v2-code-peg .v2-code-glyph { inline-size:clamp(24px,3vw,60px); block-size:clamp(24px,3vw,60px); }

.v2-composer-status {
  flex: 1 1 100%;
  min-block-size: 22px;
  margin: 0;
  color: var(--v2-muted);
  font-size: 0.76rem;
  font-weight: 760;
}

.v2-composer-controls {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));
  gap: 8px;
  inline-size: 100%;
}

.v2-fleet-craft-picker { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.v2-fleet-board-scroll { max-inline-size: 100%; max-block-size: min(55dvh, 480px); overflow: auto; overscroll-behavior: contain; border-radius: var(--v2-radius-medium); }
.v2-fleet-board-scroll .v2-coordinate-grid {
  inline-size: max(100%, calc(var(--v2-grid-columns, 8) * 48px + 24px));
  max-block-size: none; grid-template-columns: repeat(var(--v2-grid-columns, 8), minmax(44px, 1fr));
  grid-template-rows: repeat(var(--v2-grid-rows, 8), minmax(44px, 1fr));
}
.v2-fleet-combat-grid .v2-grid-button { padding: 3px; font-size: 13px; }
.v2-fleet-combat [hidden] { display: none !important; }
.v2-fleet-combat-grid .v2-action[data-state="hit"] { color: #8d2e19; background: #ffe6d7; border-color: #a93820; }
.v2-fleet-combat-grid .v2-action[data-state="selected"] { border-color: var(--v2-cyan); background: #d8eee6; }
.v2-fleet-sonar-report { margin: 0; padding: 10px; border: 2px solid var(--v2-cyan); border-radius: var(--v2-radius-small); background: var(--v2-surface); font-weight: 750; }
#controller .game-context.kind-fleet_grid .v2-fleet-boards,
#controller .game-context.kind-fleet_grid .v2-hidden-grid,
#controller .game-context.kind-fleet_grid .v2-legend { display: none; }
#controller .game-context.kind-fleet_grid .v2-grid-layout { display: block; block-size: auto; }
#controller .game-context.kind-fleet_grid .v2-board-sidebar { display: flex; flex-direction: row; flex-wrap: wrap; }
#controller .game-context.kind-fleet_grid .v2-game-surface { max-block-size: none; gap: 6px; padding: 10px; }
.v2-fleet-placement-grid,
.v2-word-draft-grid,
.v2-failaka-placement-grid {
  inline-size: min(100%, 520px);
  overflow: auto;
  overscroll-behavior-inline: contain;
}
.v2-fleet-placement-grid .v2-action,
.v2-word-draft-grid .v2-action,
.v2-failaka-placement-grid .v2-action {
  min-inline-size: 44px;
  min-block-size: 44px;
  padding: 3px;
  border-radius: 5px;
  box-shadow: none;
  font-size: 0.62rem;
  text-align: center;
}
.v2-fleet-placement-grid .v2-action-label,
.v2-word-draft-grid .v2-action-label { place-self: center; }
.v2-word-composer .v2-interaction-title{font-size:clamp(22px,4vw,30px)}
.v2-word-composer .v2-interaction-help{font-size:14px;line-height:1.4}
.v2-word-viewport{overflow:auto;max-block-size:320px;min-block-size:120px;overscroll-behavior:contain;border:2px solid var(--v2-line);border-radius:16px}
.v2-word-composer .v2-word-draft-grid{min-inline-size:calc(var(--v2-grid-columns)*48px);grid-template-columns:repeat(var(--v2-grid-columns),44px);grid-auto-rows:44px;gap:4px;padding:4px;overflow:visible}
.v2-word-composer .v2-word-draft-grid button{min-inline-size:44px;min-block-size:44px;padding:2px}
.v2-word-composer .v2-word-draft-grid .v2-action-label{font-size:19px;line-height:1.1}
.v2-word-composer .v2-word-accepted-tile{font-size:22px;display:grid;place-items:center;min-inline-size:44px;min-block-size:44px}
.v2-word-composer .v2-tile-rack{padding:4px 0;gap:6px;overflow:auto;flex-wrap:nowrap}
.v2-word-composer .v2-tile-rack button{flex:0 0 50px;min-inline-size:50px;min-block-size:54px;padding:6px;font-size:25px}
.v2-word-composer .v2-tile-rack .v2-action-label{font-size:25px;line-height:1.1}
.v2-word-mode{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.v2-word-mode button{min-block-size:44px;padding:6px}
.v2-word-composer [hidden]{display:none!important}
.v2-fleet-placement-grid .v2-action[data-state="selected"] { color: #fff; background: var(--v2-cyan); }
.v2-word-draft-grid .v2-action[data-state="selected"] { border-color: var(--v2-gold); background: #fff5d8; }

.v2-tile-button { flex: 0 0 64px; min-block-size: 72px; scroll-snap-align: center; }
.v2-tile-button .v2-action-label { place-self: center; font-size: 1.35rem; text-transform: uppercase; }
.v2-tile-points { position: absolute; inset-block-end: 5px; inset-inline-end: 7px; font-size: 0.62rem; font-variant-numeric: tabular-nums; font-weight: 850; }

.v2-interactive-dice-tray .v2-action { flex: 0 0 88px; scroll-snap-align: center; }
.v2-five-dice-controller .v2-interactive-dice-tray {
  display: grid; grid-template-columns: repeat(5, minmax(44px, 1fr));
  gap: 4px; padding: 4px 0; overflow: visible;
}
.v2-five-dice-controller .v2-interactive-dice-tray .v2-action {
  min-inline-size: 44px; min-block-size: 62px; padding: 4px;
}
.v2-five-dice-controller .v2-interactive-dice-tray .v2-action-label { font-size: .6rem; }
.v2-five-dice-controller .v2-interactive-dice-tray .v2-die { inline-size: min(100%, 58px); }
.v2-five-dice-controller .v2-interaction-body { display: grid; gap: 8px; }
.v2-five-dice-controller .v2-interaction-footer { display: block; min-block-size: 0; }
.v2-five-dice-scorecard {
  max-block-size: min(34dvh, 270px); overflow-y: auto;
  overscroll-behavior-block: contain; scroll-padding-block: 5px; padding: 4px;
}
.v2-five-dice-scorecard .v2-action { min-block-size: 70px; }
.v2-card-hand { min-block-size: 158px; }
.v2-card-button { flex: 0 0 82px; padding: 7px; scroll-snap-align: center; }
.v2-composer-card-hand .v2-card-button[aria-pressed="true"] {
  border-color: var(--v2-cyan);
  transform: translateY(-8px);
  box-shadow: 0 0 0 3px rgba(38, 205, 218, 0.2), var(--v2-shadow-large);
}
.v2-card-selection-actions { min-block-size: 44px; }
.v2-card-button .v2-action-label { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
.v2-card-button .v2-card-material { inline-size: 100%; }

/* Eights is a material card table, not a vertical menu of legal commands. */
[data-hearts-private] { min-block-size: 0; }
[data-hearts-private] .v2-interaction-body { display: flex; flex-direction: column; gap: 10px; }
[data-hearts-private] .v2-hearts-hand { flex-wrap: nowrap; overflow-x: auto; touch-action: pan-x; }
[data-hearts-private] .v2-card-button { flex: 0 0 88px; min-block-size: 128px; touch-action: pan-x; }
.v2-hearts-pass-preview { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; }
.v2-hearts-pass-preview .v2-material-action { min-block-size: 104px; padding: 4px; }
.v2-hearts-pass-preview .v2-card-material { inline-size: 60px; }
.v2-hearts-pass-preview .v2-action-label { position: absolute; inline-size: 1px; block-size: 1px; overflow: hidden; clip-path: inset(50%); }
.v2-hearts-empty-slot { display: grid; place-items: center; min-block-size: 104px; border: 2px dashed var(--v2-line); border-radius: 12px; color: var(--v2-muted); font-size: 28px; }
.v2-hearts-empty-hand { padding: 16px; background: #E5F1E4; border-radius: 16px; }
[data-hearts-public] .v2-hearts-table { display: grid; grid-template-rows: minmax(0,1fr) auto; gap: 8px; min-block-size: 0; }
.v2-hearts-scene { display: grid; grid-template-rows: auto minmax(0,1fr); gap: 8px; min-block-size: 0; background: #E7EEDC; border: 1px solid #D3BC8F; border-radius: 18px; padding: 10px; }
.v2-hearts-trick-caption { margin: 0; text-align: center; font-size: clamp(14px,2vw,48px); font-weight: 850; }
.v2-hearts-trick-row { display: flex; align-items: stretch; justify-content: center; gap: 8px; min-block-size: 0; }
.v2-hearts-played-card { flex: 1 1 0; min-inline-size: 0; display: grid; grid-template-rows: minmax(0,1fr) auto; gap: 4px; min-block-size: 0; }
.v2-hearts-face-well { container-type: size; display: grid; place-items: center; min-block-size: 0; }
.v2-hearts-face-well .v2-card-material { inline-size: min(100cqw,calc(100cqh*.68)); block-size: auto; aspect-ratio: .68; max-block-size: 100%; container-type: size; }
.v2-hearts-face-well .v2-card-rank { font-size: 22cqh; line-height: 1; }
.v2-hearts-face-well .v2-card-suit { font-size: 38cqh; line-height: 1; }
.v2-hearts-face-well .v2-card-suit-label { font-size: 22cqh; }
.v2-hearts-card-owner { text-align: center; font-size: clamp(12px,1.8vw,40px); font-weight: 750; overflow-wrap: anywhere; }
.v2-hearts-waiting { align-self: center; text-align: center; font-size: clamp(22px,3vw,64px); max-inline-size: 30ch; margin: auto; }
.v2-hearts-scores { display: grid; grid-template-columns: repeat(var(--hearts-seats,3),minmax(0,1fr)); gap: 6px; }
.v2-hearts-seat { display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 2px 6px; align-items: center; text-align: center; padding: 8px; background: #FFFBF0; border: 1px solid #D5C5A5; border-radius: 12px; min-inline-size: 0; }
.v2-hearts-seat[data-active=true] { border: 3px solid #176C65; background: #E5F1E4; }
.v2-hearts-seat-name { font-size: clamp(14px,1.8vw,40px); overflow-wrap: anywhere; }
.v2-hearts-seat-total { font-size: clamp(24px,3vw,72px); line-height: 1; }
.v2-hearts-seat-detail,.v2-hearts-seat-ready { font-size: clamp(12px,1.4vw,32px); }
.v2-hearts-seat-detail,.v2-hearts-seat-ready { grid-column: 1 / -1; }
.v2-hearts-legend,.v2-hearts-result { margin: 0; font-size: clamp(12px,1.6vw,32px); }
.v2-controller-context [data-hearts-public] { min-block-size: 0; max-block-size: none; padding: 10px; gap: 6px; }
.v2-controller-context [data-hearts-public] .v2-surface-title { font-size: 20px; }
.v2-controller-context [data-hearts-public] .v2-surface-prompt { font-size: 12px; }
.v2-controller-context [data-hearts-public] .v2-hearts-trick-row { overflow-x: auto; justify-content: flex-start; min-block-size: 110px; }
.v2-controller-context [data-hearts-public] .v2-hearts-played-card { flex: 0 0 68px; block-size: 110px; }
.v2-controller-context [data-hearts-public] .v2-hearts-card-owner { font-size: 11px; }
.v2-controller-context [data-hearts-public] .v2-hearts-seat { padding: 4px; }
.v2-controller-context [data-hearts-public] .v2-hearts-seat-name { font-size: 12px; }
.v2-controller-context [data-hearts-public] .v2-hearts-seat-total { font-size: 20px; }
.v2-controller-context [data-hearts-public] .v2-hearts-seat-detail,.v2-controller-context [data-hearts-public] .v2-hearts-seat-ready { font-size: 10px; }
.v2-controller-context [data-hearts-public] .v2-hearts-legend,.v2-controller-context [data-hearts-public] .v2-hearts-result { font-size: 12px; }
[data-eights-table] { min-block-size: 0; }
[data-eights-table] .v2-eights-empty-hand { display: grid; place-content: center; justify-items: center; gap: 4px; min-block-size: 128px; background: #E5F1E4; border-radius: 16px; }
[data-eights-table] .v2-eights-empty-count { font-size: 48px; line-height: 1; }
[data-eights-warm=true] { color: #BE3B20; }
[data-eights-table] .v2-crazy-eights-hand { flex-wrap: nowrap; overflow-x: auto; touch-action: pan-x; padding-block: 12px; }
[data-eights-table] .v2-card-button { flex: 0 0 88px; min-block-size: 128px; touch-action: pan-x; }
[data-eights-table] .v2-crazy-eights-suits { display: grid; gap: 8px; }
[data-eights-table] .v2-crazy-eights-suit-grid .v2-action { min-block-size: 48px; }
[data-eights-table] .v2-composer-status { margin: 0; }
[data-eights-table] .v2-interaction-body { display: flex; flex-direction: column; gap: 8px; }
[data-eights-table] .v2-interaction-footer .v2-action { min-block-size: 56px; }
[data-eights-public] .v2-eights-table { display: grid; gap: 10px; min-block-size: 0; }
[data-eights-public] .v2-eights-piles { display: flex; justify-content: center; align-items: stretch; gap: 10%; min-block-size: 0; }
[data-eights-public] .v2-eights-discard,
[data-eights-public] .v2-eights-stock { display: grid; grid-template-rows: minmax(0,1fr) auto; justify-items: center; min-block-size: 0; gap: 8px; }
[data-eights-public] .v2-eights-called,
[data-eights-public] .v2-eights-stock-label { margin: 0; text-align: center; font-weight: 850; font-size: clamp(14px,1.8vw,48px); }
[data-eights-public] .v2-eights-card-back { display: grid; place-items: center; inline-size: 88px; aspect-ratio: .68; border: 3px double #D3A548; border-radius: 12px; background: #176C65; color: #F8D990; font-size: 44px; box-shadow: 0 4px 0 #D9CBB0; }
[data-eights-public] .v2-eights-seats { display: grid; grid-template-columns: repeat(var(--eights-seat-columns,4),minmax(0,1fr)); gap: 8px; }
[data-eights-public] .v2-eights-seat { display: grid; gap: 4px; padding: 8px; border: 1px solid #D5C5A5; border-radius: 12px; background: #FFFBF0; text-align: center; min-inline-size: 0; overflow-wrap: anywhere; }
[data-eights-public] .v2-eights-seat[data-active=true] { border: 3px solid #176C65; background: #E5F1E4; }
[data-eights-public] .v2-eights-seat strong { font-size: clamp(14px,2vw,54px); }
[data-eights-public] .v2-eights-seat span { font-size: clamp(12px,1.5vw,40px); }
.v2-controller-context [data-eights-public] { padding: 12px; max-block-size: none; min-block-size: 0; gap: 8px; }
.v2-controller-context [data-eights-public] .v2-surface-title { font-size: 20px; }
.v2-controller-context [data-eights-public] .v2-eights-seats { grid-template-columns: repeat(var(--eights-seat-columns,4),minmax(0,1fr)); gap: 4px; }
.v2-controller-context [data-eights-public] .v2-eights-seat { padding: 4px; gap: 2px; }
.v2-controller-context [data-eights-public] .v2-eights-seat strong { font-size: 12px; }
.v2-controller-context [data-eights-public] .v2-eights-seat span { font-size: 10px; }
.v2-controller-context [data-eights-public] .v2-eights-piles { min-block-size: 0; }
.v2-controller-context [data-eights-public] .v2-card-material,
.v2-controller-context [data-eights-public] .v2-eights-card-back { inline-size: 60px; block-size: 88px; }
.v2-controller-context [data-eights-public] .v2-eights-called,
.v2-controller-context [data-eights-public] .v2-eights-stock-label { font-size: 12px; }
.v2-controller-context [data-eights-public] .v2-eights-receipt { font-size: 12px; margin: 0; }

.v2-meld-table { display: grid; gap: 8px; }
.v2-meld-group { display: grid; grid-template-columns: minmax(70px, 0.22fr) 1fr; align-items: center; gap: 10px; padding: 10px; border: 1px solid var(--v2-line); border-radius: var(--v2-radius-medium); background: var(--v2-surface); }
.v2-meld-title { margin: 0; font-size: 0.8rem; }

.v2-claim-card { margin: 0; padding: 18px; border: 2px solid var(--v2-cyan); border-radius: var(--v2-radius-large); background: var(--v2-surface); box-shadow: var(--v2-shadow-large); font-size: clamp(1.1rem, 4vw, 1.8rem); font-weight: 800; text-align: center; }
.v2-claimant { display: block; margin-block-start: 10px; color: var(--v2-muted); font-size: 0.75rem; font-style: normal; }
.v2-claim-actions .v2-action { min-block-size: 72px; font-size: 1.05rem; text-align: center; }

.v2-route-builder-path { display: flex; align-items: center; gap: 4px; margin: 0; padding: 10px; overflow-x: auto; list-style: none; }
.v2-route-builder-stop { display: flex; align-items: center; }
.v2-route-builder-stop:not(:last-child)::after { margin-inline: 4px; color: var(--v2-cyan); content: "—"; font-weight: 900; }

.v2-bid-composer { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; padding: 14px; border: 1px solid var(--v2-line); border-radius: var(--v2-radius-large); background: var(--v2-surface); box-shadow: var(--v2-shadow-small); }
.v2-input-label,
.v2-input-help { grid-column: 1 / -1; }
.v2-input-label { font-size: 0.8rem; font-weight: 800; }
.v2-input-help { margin: 0; color: var(--v2-muted); font-size: 0.7rem; }
.v2-number-input { inline-size: 100%; padding: 10px 12px; border: 2px solid var(--v2-line-strong); color: var(--v2-ink); background: var(--v2-surface-raised); font-size: 16px; font-variant-numeric: tabular-nums; }

.v2-action:focus-visible,
.v2-number-input:focus-visible {
  outline: 4px solid var(--v2-cyan);
  outline-offset: 3px;
}

.v2-visually-hidden {
  position: absolute !important;
  inline-size: 1px !important;
  block-size: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  clip-path: inset(50%) !important;
  border: 0 !important;
  white-space: nowrap !important;
}

[dir="rtl"] .v2-action { text-align: start; }
[dir="rtl"] .v2-card-hand,
[dir="rtl"] .v2-tile-rack,
[dir="rtl"] .v2-code-composer-slots { direction: rtl; }

@media (hover: hover) and (pointer: fine) {
  .v2-action:hover:not(:disabled) {
    border-color: var(--v2-cyan);
    transform: translateY(-2px);
    box-shadow: var(--v2-shadow-large);
  }
}

/* Compact iPhone controllers, including the 320 pt acceptance width. */
@media (max-width: 360px) {
  .v2-game-surface { gap: 12px; padding: 12px; }
  .v2-surface-title,
  .v2-interaction-title { font-size: clamp(1.35rem, 7vw, 1.85rem); }
  .v2-grid-layout,
  .v2-map-layout,
  .v2-dice-score-layout,
  .v2-auction-layout,
  .v2-card-table { grid-template-columns: 1fr; }
  .v2-board-sidebar { flex-direction: row; flex-wrap: wrap; }
  .v2-action { padding: 10px; }
  .v2-composer-controls { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .v2-fleet-placement-grid .v2-action,
  .v2-word-draft-grid .v2-action,
  .v2-failaka-placement-grid .v2-action { padding: 2px; font-size: 0.54rem; }
  .v2-code-row { grid-template-columns: auto minmax(0, 1fr); }
  .v2-code-feedback { grid-column: 1 / -1; justify-content: flex-start; }
  .v2-race-track { grid-template-columns: repeat(4, minmax(44px, 1fr)); }
  .v2-game-surface[data-mode="controller-context"] {
    min-block-size: 0;
    max-block-size: 34rem;
    padding: 10px;
    border-radius: 18px;
  }
  .v2-game-surface[data-mode="controller-context"] .v2-race-node { min-block-size: 54px; }
  .v2-game-surface[data-mode="controller-context"] .v2-board-sidebar { display: none; }
  .v2-card-table { min-block-size: 0; }
  .v2-player-seats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .v2-economy-map { min-block-size: 360px; }
  .v2-bid-composer { grid-template-columns: 1fr; }
  .v2-bid-composer .v2-action { inline-size: 100%; }
}

/* Court Shift uses the same original card family and a stable private action dock. */
[data-court-private] {min-block-size:0;}
.v2-court-private-table {display:grid;gap:8px;background:#e7eedc;border:1px solid #d3bc8f;border-radius:16px;padding:10px;min-inline-size:0;}
.v2-court-private-table h3,.v2-court-private-table p {margin:0;font-size:1rem;}
.v2-court-private-combination {display:grid;grid-template-columns:repeat(var(--court-cards,2),minmax(0,1fr));gap:5px;}
.v2-court-private-combination .v2-card-material {inline-size:100%;max-inline-size:66px;block-size:auto;aspect-ratio:.68;justify-self:center;align-self:start;}
.v2-court-dock {position:sticky;inset-block-end:0;display:grid;gap:8px;inline-size:100%;min-inline-size:0;padding:8px 0 max(8px,env(safe-area-inset-bottom));border-block-start:2px solid var(--v2-line);background:var(--v2-canvas);z-index:4;}
.v2-court-controls {display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;}
.v2-court-controls .v2-action {min-block-size:48px;}
.v2-court-table-actions {grid-column:1/-1;display:flex;gap:8px;}
.v2-court-table-actions .v2-action {flex:1 1 0;}
.v2-court-hand {flex-wrap:nowrap;overflow-x:auto;touch-action:pan-x;min-inline-size:0;padding:8px;border-radius:18px;background:#173f45;}
.v2-court-hand .v2-card-button {flex:0 0 86px;padding:3px;display:grid;background:transparent;}
.v2-court-hand .v2-card-button:disabled {opacity:1;filter:none;}
.v2-court-hand .v2-card-material {inline-size:76px;aspect-ratio:.68;}
.v2-court-hand [aria-pressed=true] {outline:3px solid #157c65;outline-offset:-2px;transform:translateY(-4px);}
.v2-court-empty-hand {color:#fff8ea;text-align:center;font-size:1.4rem;margin:auto;padding:24px;}
.v2-game-surface[data-mode=tv][data-court-public] {block-size:100%;min-block-size:100%;}
.v2-court-tv-table {display:grid;grid-template-rows:minmax(0,1fr) auto;gap:10px;block-size:100%;min-block-size:0;}
.v2-court-tv-scene {display:grid;grid-template-rows:auto minmax(0,1fr);gap:8px;background:#e7eedc;border:2px solid #d3bc8f;border-radius:18px;padding:10px;min-block-size:0;}
.v2-court-combination-owner {text-align:center;margin:0;font-size:clamp(16px,2.2vw,48px);font-weight:850;}
.v2-court-tv-faces {container-type:size;display:grid;grid-template-columns:repeat(var(--court-cards,1),minmax(0,1fr));gap:8px;min-block-size:0;min-inline-size:0;}
.v2-game-surface[data-mode=tv][data-court-public] .v2-court-tv-faces .v2-card-material {inline-size:min(calc((100cqw - 8px * (var(--court-cards,1) - 1)) / var(--court-cards,1)),calc(100cqh*.68));block-size:auto;aspect-ratio:.68;max-block-size:100%;container-type:size;align-self:center;justify-self:center;padding:clamp(2px,.4vw,7px);border-radius:clamp(4px,1vw,12px);}
.v2-court-tv-faces .v2-card-rank,.v2-court-tv-faces .v2-card-suit-label {font-size:22cqh;line-height:1;}
.v2-court-tv-faces .v2-card-suit {font-size:38cqh;line-height:1;}
.v2-court-open-table {place-self:center;text-align:center;font-size:clamp(18px,2.6vw,58px);max-inline-size:30ch;grid-column:1/-1;}
.v2-court-tv-seats {display:grid;grid-template-columns:repeat(var(--court-seats,4),minmax(0,1fr));gap:6px;}
.v2-court-tv-seat {display:grid;align-content:center;gap:3px;padding:8px;border:1px solid #d5c5a5;border-radius:12px;background:#fffbf0;text-align:center;min-inline-size:0;}
.v2-court-tv-seat[data-active=true] {border:3px solid #176c65;background:#e5f1e4;}
.v2-court-seat-name {font-size:clamp(14px,1.7vw,40px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-inline-size:0;}
.v2-court-seat-status,.v2-court-shift-held {font-size:clamp(12px,1.3vw,30px);}
.v2-court-tv-legend {margin:0;font-size:clamp(12px,1.5vw,32px);}
.v2-controller-context [data-court-public] {min-block-size:0;max-block-size:none;padding:10px;gap:6px;}
.v2-controller-context [data-court-public] .v2-surface-title {font-size:20px;}
.v2-controller-context [data-court-public] .v2-court-tv-scene,.v2-controller-context [data-court-public] .v2-court-tv-legend {display:none;}
.v2-controller-context [data-court-public] .v2-court-tv-seats {display:flex;overflow-x:auto;touch-action:pan-x;gap:4px;}
.v2-controller-context [data-court-public] .v2-court-tv-seat {padding:4px;flex:0 0 104px;}
.v2-controller-context [data-court-public] .v2-court-seat-name {font-size:12px;}
.v2-controller-context [data-court-public] .v2-court-seat-status,.v2-controller-context [data-court-public] .v2-court-shift-held {font-size:10px;}
@media(max-height:600px){.v2-game-surface[data-mode=tv][data-court-public]{padding:12px;gap:8px;}.v2-game-surface[data-mode=tv][data-court-public] .v2-surface-title{font-size:26px;}.v2-court-tv-seat{padding:4px;}.v2-court-seat-name{font-size:13px;}.v2-court-seat-status,.v2-court-shift-held{font-size:11px;}}

/* Truth or Bluff: stable private hand, sealed claim, public full-card reveal. */
.v2-sadiq-private-table {display:grid;gap:8px;background:#e7eedc;border:1px solid #d3bc8f;border-radius:16px;padding:10px;min-inline-size:0;}
.v2-sadiq-private-table p {margin:0;font-size:1rem;}
.v2-sadiq-reveals {display:grid;grid-template-columns:repeat(var(--sadiq-cards,1),minmax(0,1fr));gap:5px;}
.v2-sadiq-reveals .v2-card-material {inline-size:100%;max-inline-size:66px;block-size:auto;aspect-ratio:.68;align-self:start;justify-self:center;}
.v2-sadiq-dock {position:sticky;inset-block-end:0;display:grid;gap:8px;min-inline-size:0;padding:8px 0 max(8px,env(safe-area-inset-bottom));background:var(--v2-canvas);border-block-start:2px solid var(--v2-line);z-index:4;}
.v2-sadiq-controls {display:grid;gap:8px;}
.v2-sadiq-controls p {margin:0;font-size:14px;}
.v2-sadiq-controls .v2-action {min-block-size:52px;}
.v2-sadiq-hand {display:flex;gap:8px;overflow-x:auto;padding:10px 4px 14px;min-inline-size:0;touch-action:pan-x;}
.v2-sadiq-hand .v2-card-button {flex:0 0 84px;min-block-size:124px;min-inline-size:84px;max-inline-size:84px;padding:0;background:transparent;border:0;touch-action:pan-x;}
.v2-sadiq-hand .v2-card-material {inline-size:100%;block-size:auto;aspect-ratio:.68;}
.v2-sadiq-hand .v2-card-button[aria-pressed=true] {transform:translateY(-7px);outline:3px solid #be3b20;outline-offset:2px;border-radius:12px;}
.v2-sadiq-hand .v2-card-button:disabled {opacity:1;}
.v2-sadiq-empty {color:var(--v2-ink);font-size:20px;text-align:center;inline-size:100%;}
.v2-game-surface[data-mode=tv][data-sadiq-public] {block-size:100%;min-block-size:100%;}
.v2-game-surface[data-mode=tv][data-sadiq-public] .v2-surface-body {flex:1 1 0;}
.v2-sadiq-tv-table {display:grid;grid-template-rows:minmax(0,1fr) auto;gap:8px;block-size:100%;min-block-size:0;}
.v2-sadiq-tv-scene {display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:8px;background:#e7eedc;border:2px solid #d3bc8f;border-radius:18px;padding:10px;min-block-size:0;}
.v2-sadiq-tv-claim {margin:0;font-size:clamp(20px,2.6vw,60px);text-align:center;}
.v2-sadiq-tv-faces {container-type:size;display:grid;grid-template-columns:repeat(var(--sadiq-cards,1),minmax(0,1fr));gap:8px;min-block-size:0;min-inline-size:0;}
.v2-game-surface[data-mode=tv][data-sadiq-public] .v2-sadiq-tv-faces .v2-card-material {inline-size:min(calc((100cqw - 8px * (var(--sadiq-cards,1) - 1)) / var(--sadiq-cards,1)),calc(100cqh*.68));block-size:auto;aspect-ratio:.68;max-block-size:100%;container-type:size;align-self:center;justify-self:center;padding:clamp(2px,.4vw,7px);border-radius:clamp(4px,1vw,12px);}
.v2-sadiq-tv-faces .v2-card-rank,.v2-sadiq-tv-faces .v2-card-suit-label {font-size:22cqh;line-height:1;}
.v2-sadiq-tv-faces .v2-card-suit {font-size:38cqh;line-height:1;}
.v2-sadiq-tv-faces .v2-card-material.is-hidden {grid-template-rows:1fr;background:#176c65;border-color:#d3a548;color:#f8d990;}
.v2-sadiq-tv-faces .v2-card-back-mark {font-size:38cqh;line-height:1;border-color:#f8d990;}
.v2-sadiq-tv-empty {font-size:clamp(20px,3vw,68px);text-align:center;align-self:center;grid-column:1/-1;}
.v2-sadiq-tv-receipt,.v2-sadiq-tv-legend {margin:0;font-size:clamp(12px,1.5vw,32px);text-align:center;}
.v2-claim-countdown {display:inline-block;margin-inline-start:12px;font-variant-numeric:tabular-nums;font-weight:800;color:#a93810;}
.v2-sadiq-tv-seats {display:grid;grid-template-columns:repeat(var(--sadiq-seats,3),minmax(0,1fr));gap:6px;}
.v2-sadiq-tv-seat {display:grid;align-content:center;gap:3px;padding:8px;border:1px solid #d5c5a5;border-radius:12px;background:#fffbf0;text-align:center;min-inline-size:0;font-size:clamp(13px,1.8vw,32px);}
.v2-sadiq-tv-seat[data-active=true] {border:3px solid #176c65;background:#e5f1e4;}
.v2-controller-context [data-sadiq-public] .v2-sadiq-tv-scene,.v2-controller-context [data-sadiq-public] .v2-sadiq-tv-legend {display:none;}
.v2-controller-context [data-sadiq-public] .v2-sadiq-tv-seats {display:flex;overflow-x:auto;touch-action:pan-x;gap:4px;}
.v2-controller-context [data-sadiq-public] .v2-sadiq-tv-seat {padding:4px;flex:0 0 104px;font-size:12px;}
.v2-controller-context [data-sadiq-public] {min-block-size:0;max-block-size:none;padding:10px;gap:6px;}
.v2-controller-context [data-sadiq-public] .v2-surface-title {font-size:20px;}
@media(max-height:600px){.v2-game-surface[data-mode=tv][data-sadiq-public]{padding:12px;gap:8px;}.v2-game-surface[data-mode=tv][data-sadiq-public] .v2-surface-title{font-size:26px;}.v2-sadiq-tv-seat{padding:4px;font-size:12px;}}
@media(max-height:600px){
  .v2-sadiq-tv-seat{display:flex;justify-content:center;align-items:center;gap:6px;min-block-size:27px;padding:3px;font-size:12px;}
  .v2-sadiq-tv-seat strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-inline-size:65%;}
  .v2-sadiq-tv-seat span{white-space:nowrap;font-size:11px;}
  .v2-sadiq-tv-scene{gap:4px;padding:6px;}
  .v2-sadiq-tv-claim{font-size:18px;}
  .v2-sadiq-tv-receipt{font-size:11px;}
}

/* High Card Duel: original numbered flag cards and a simultaneous face-off. */
.v2-duel-private-table {display:grid;gap:8px;padding:10px;border:1px solid #d3bc8f;border-radius:16px;background:#e7eedc;min-inline-size:0;}
.v2-duel-private-table h3,.v2-duel-private-table p {margin:0;font-size:1rem;}
.v2-duel-phone-faces {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;}
.v2-duel-phone-well {display:grid;gap:4px;justify-items:center;min-inline-size:0;text-align:center;}
.v2-duel-phone-well .v2-card-material {inline-size:68px;block-size:auto;aspect-ratio:.68;}
.v2-duel-phone-well .v2-card-material.is-hidden {grid-template-rows:1fr;background:#176c65;border-color:#d3a548;color:#f8d990;}
.v2-duel-phone-well .v2-card-back-mark {font-size:1.8rem;line-height:1;border-color:#f8d990;}
.v2-duel-phone-well>span {font-size:13px;overflow-wrap:anywhere;}
.v2-duel-dock {position:sticky;inset-block-end:0;display:grid;gap:8px;min-inline-size:0;padding:8px 0 max(8px,env(safe-area-inset-bottom));background:var(--v2-canvas);border-block-start:2px solid var(--v2-line);z-index:4;}
.v2-duel-dock>.v2-action {min-block-size:52px;}
.v2-duel-dock>p {margin:0;font-size:14px;}
.v2-duel-hand {display:flex;gap:8px;overflow-x:auto;min-inline-size:0;touch-action:pan-x;background:#183e46;border-radius:22px;padding:12px 8px 14px;}
.v2-duel-hand .v2-card-button {flex:0 0 84px;min-block-size:124px;min-inline-size:84px;max-inline-size:84px;padding:0;background:transparent;border:0;touch-action:pan-x;}
.v2-duel-hand .v2-card-material {inline-size:100%;block-size:auto;aspect-ratio:.68;}
.v2-duel-hand .v2-card-button[aria-pressed=true] {transform:translateY(-5px);outline:3px solid #be3b20;outline-offset:2px;border-radius:12px;}
.v2-duel-hand .v2-card-button:disabled {opacity:1;}
.v2-duel-empty {inline-size:100%;text-align:center;padding:20px;color:#fffcf4;}
.v2-game-surface[data-mode=tv][data-duel-public] {block-size:100%;min-block-size:100%;}
.v2-game-surface[data-mode=tv][data-duel-public] .v2-surface-body {flex:1 1 0;}
.v2-duel-tv-table {display:grid;grid-template-rows:minmax(0,1fr) auto;gap:8px;block-size:100%;min-block-size:0;}
.v2-duel-tv-scene {display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;gap:6px;padding:8px;border:2px solid #d3bc8f;border-radius:18px;background:#e7eedc;min-block-size:0;}
.v2-duel-tv-matchup {margin:0;text-align:center;font-size:clamp(18px,2.5vw,56px);}
.v2-duel-tv-comparison-label {margin:0;text-align:center;font-size:clamp(14px,1.7vw,38px);}
.v2-duel-tv-faces {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;min-block-size:0;min-inline-size:0;}
.v2-duel-tv-well {container-type:size;display:grid;grid-template-rows:minmax(0,1fr) auto;gap:4px;min-block-size:0;min-inline-size:0;}
.v2-game-surface[data-mode=tv][data-duel-public] .v2-duel-tv-well .v2-card-material {inline-size:min(100cqw,calc((100cqh - 28px)*.68));block-size:auto;aspect-ratio:.68;max-block-size:100%;container-type:size;justify-self:center;align-self:center;padding:clamp(2px,.4vw,7px);}
.v2-duel-tv-well .v2-card-rank,.v2-duel-tv-well .v2-card-suit-label {font-size:22cqh;line-height:1;}
.v2-duel-tv-well .v2-card-suit {font-size:38cqh;line-height:1;}
.v2-duel-tv-well .v2-card-material.is-hidden {grid-template-rows:1fr;background:#176c65;border-color:#d3a548;color:#f8d990;}
.v2-duel-tv-well .v2-card-back-mark {font-size:38cqh;line-height:1;border-color:#f8d990;}
.v2-duel-card-owner {text-align:center;font-size:clamp(12px,1.4vw,28px);line-height:1.1;}
.v2-duel-tv-receipt,.v2-duel-tv-legend {margin:0;text-align:center;font-size:clamp(12px,1.4vw,30px);}
.v2-duel-tv-seats {display:grid;grid-template-columns:repeat(var(--duel-seats,4),minmax(0,1fr));gap:4px;}
.v2-duel-tv-seat {padding:5px 6px;min-inline-size:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:center;background:#fffbf0;border:1px solid #d5c5a5;border-radius:10px;font-size:clamp(12px,1.3vw,28px);}
.v2-duel-tv-seat[data-active=true] {border:2px solid #176c65;background:#e5f1e4;}
.v2-controller-context [data-duel-public] {min-block-size:0;max-block-size:none;padding:10px;gap:6px;}
.v2-controller-context [data-duel-public] .v2-surface-title {font-size:20px;}
.v2-controller-context [data-duel-public] .v2-duel-tv-scene,.v2-controller-context [data-duel-public] .v2-duel-tv-legend {display:none;}
.v2-controller-context [data-duel-public] .v2-duel-tv-seats {display:flex;overflow-x:auto;touch-action:pan-x;gap:4px;}
.v2-controller-context [data-duel-public] .v2-duel-tv-seat {flex:0 0 110px;font-size:12px;}
@media(max-height:600px){.v2-game-surface[data-mode=tv][data-duel-public]{padding:10px;gap:6px;}.v2-game-surface[data-mode=tv][data-duel-public] .v2-surface-title{font-size:24px;}.v2-duel-tv-scene{gap:3px;padding:5px;}.v2-duel-tv-matchup{font-size:17px;}.v2-duel-tv-comparison-label,.v2-duel-tv-receipt{font-size:11px;}.v2-duel-tv-seat{padding:3px;font-size:11px;}}
@media(max-height:600px){
  .v2-duel-tv-scene{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) auto;}
  .v2-duel-tv-matchup{grid-column:1;align-self:center;}
  .v2-duel-tv-comparison-label{grid-column:2;align-self:center;}
  .v2-duel-tv-faces,.v2-duel-tv-receipt{grid-column:1/-1;}
  .v2-game-surface[data-mode=tv][data-duel-dense=true] .v2-duel-tv-table{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);grid-template-rows:minmax(0,1fr);}
  .v2-game-surface[data-mode=tv][data-duel-dense=true] .v2-duel-tv-seats{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:minmax(0,1fr);}
  .v2-game-surface[data-mode=tv][data-duel-dense=true] .v2-duel-tv-seat{display:grid;place-items:center;padding:1px;font-size:11px;line-height:1.1;}
}

/* Rummy's public table and private dock share original paper/ink materials. */
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] {block-size:100%;min-block-size:100%;}
[data-rummy-private="true"] .v2-interaction-body { min-block-size: 0; }
.v2-rummy-private-table { display:grid; gap:12px; min-inline-size:0; }
.v2-rummy-draw-piles { display:flex; gap:12px; min-inline-size:0; align-items:start; }
.v2-rummy-stock { display:grid; gap:6px; justify-items:center; flex:0 0 84px; font-weight:800; text-align:center; }
.v2-rummy-stock .v2-action { padding:4px; }
.v2-rummy-stock .v2-eights-card-back { inline-size:68px; block-size:100px; }
.v2-rummy-discard-fan { display:flex; gap:8px; overflow-x:auto; min-inline-size:0; padding:4px 4px 12px; }
.v2-rummy-discard-fan .v2-action { padding:3px; display:grid; gap:3px; flex:0 0 76px; }
.v2-rummy-discard-fan .v2-card-material { inline-size:68px; aspect-ratio:2/3; }
.v2-rummy-draw-piles .v2-action > .v2-action-label { display:none; }
.v2-rummy-private-melds { display:grid; gap:10px; }
.v2-rummy-meld-target,.v2-rummy-tv-meld { background:var(--v2-paper,#fff8ea); border:2px solid var(--v2-line); border-radius:16px; padding:10px; min-inline-size:0; }
.v2-rummy-meld-target h3,.v2-rummy-tv-meld h3 { margin:0 0 6px; font-size:1rem; }
.v2-rummy-meld-cards { display:flex; gap:5px; overflow-x:auto; min-inline-size:0; }
.v2-rummy-meld-cards .v2-card-material { inline-size:56px; flex:0 0 56px; aspect-ratio:2/3; }
.v2-rummy-dock { position:sticky; inset-block-end:0; z-index:4; display:grid; grid-template-columns:1fr auto; gap:8px; background:var(--v2-paper,#fff8ea); border-block-start:2px solid var(--v2-line); padding:8px 0 max(8px,env(safe-area-inset-bottom)); }
.v2-rummy-dock .v2-composer-status,.v2-rummy-dock .v2-rummy-selected-actions,.v2-rummy-hand { grid-column:1/-1; }
.v2-rummy-dock .v2-composer-status { margin:0; font-size:1rem; }
.v2-rummy-hand { flex-wrap:nowrap; overflow-x:auto; min-inline-size:0; padding:8px; border-radius:18px; background:#173f45; touch-action:pan-x; }
.v2-rummy-hand .v2-card-button { flex:0 0 86px; padding:3px; display:grid; background:transparent; }
.v2-rummy-hand .v2-card-button:disabled {opacity:1;filter:none;}
.v2-rummy-hand .v2-card-material { inline-size:76px; aspect-ratio:2/3; }
.v2-rummy-hand .v2-action-label { display:none; }
.v2-rummy-hand [aria-pressed="true"] { outline:3px solid #157c65; outline-offset:-2px; transform:translateY(-4px); }
.v2-rummy-required { background:#f5c857; color:#173f45; font-size:.75rem; font-weight:900; border-radius:8px; }
.v2-rummy-tv-table { display:grid; gap:12px; min-inline-size:0; }
.v2-rummy-tv-piles { display:flex; justify-content:center; gap:22px; align-items:start; }
.v2-rummy-tv-discard { display:grid; justify-items:center; gap:6px; font-weight:800; }
.v2-rummy-tv-discard .v2-card-material { inline-size:76px; aspect-ratio:2/3; }
.v2-rummy-tv-melds { display:grid; grid-template-columns:repeat(var(--rummy-meld-columns,2),minmax(0,1fr)); gap:10px; }
.v2-rummy-meld-summary {display:none; margin:0; font-size:clamp(15px,1.9vw,34px); font-weight:850;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-table {grid-template-rows:minmax(0,1fr) auto; block-size:100%; min-block-size:0;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-piles {display:none;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-melds {grid-template-rows:repeat(var(--rummy-meld-rows,1),minmax(0,1fr)); min-block-size:0;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-meld {display:grid; grid-template-rows:auto minmax(0,1fr); min-block-size:0; padding:6px;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-meld-cards {container-type:size; min-block-size:0; justify-content:center;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-meld-cards .v2-card-material {inline-size:min(12cqw,calc(100cqh*.68)); flex-basis:min(12cqw,calc(100cqh*.68)); block-size:auto; max-block-size:100%; container-type:size;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-meld-cards .v2-card-rank {font-size:22cqh;line-height:1;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-meld-cards .v2-card-suit {font-size:38cqh;line-height:1;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-meld-cards .v2-card-suit-label {font-size:22cqh;line-height:1;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] [data-rummy-dense="true"] .v2-rummy-meld-cards {display:none;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] [data-rummy-dense="true"] .v2-rummy-meld-summary {display:block;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] [data-rummy-dense="true"] h3 {font-size:clamp(12px,1.5vw,28px);margin:0;}
.v2-rummy-tv-empty { text-align:center; font-size:clamp(1.1rem,2vw,2rem); padding:20px; }
.v2-rummy-tv-seats { display:grid; grid-template-columns:repeat(var(--rummy-seats,3),minmax(0,1fr)); gap:8px; }
.v2-rummy-tv-seat { display:grid; gap:5px; background:#fff8ea; border:2px solid var(--v2-line); border-radius:14px; padding:10px; font-size:clamp(.9rem,1.6vw,2rem); }
.v2-rummy-tv-seat[data-active="true"] { background:#e5f1e4; border-color:#157c65; }
.v2-rummy-tv-legend { margin:0; font-size:clamp(.9rem,1.5vw,1.8rem); text-align:center; }
.v2-rummy-tv-scene {display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:12px;min-block-size:0;}
.v2-rummy-tv-focus {display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:6px;min-block-size:0;min-inline-size:0;background:#e7eedc;border:2px solid #d3bc8f;border-radius:18px;padding:10px;text-align:center;}
.v2-rummy-tv-focus h3,.v2-rummy-tv-focus p {margin:0;font-size:clamp(14px,2vw,38px);}
.v2-rummy-focus-cards {container-type:size;display:grid;grid-template-columns:repeat(var(--rummy-focus-columns,3),minmax(0,1fr));grid-template-rows:repeat(var(--rummy-focus-rows,1),minmax(0,1fr));gap:4px;min-block-size:0;min-inline-size:0;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-focus-cards .v2-card-material {inline-size:min(calc((100cqw - 4px * (var(--rummy-focus-columns,3) - 1)) / var(--rummy-focus-columns,3)),calc((100cqh - 4px * (var(--rummy-focus-rows,1) - 1)) / var(--rummy-focus-rows,1)*.68));block-size:auto;aspect-ratio:.68;max-block-size:100%;container-type:size;justify-self:center;align-self:center;padding:clamp(2px,.4vw,7px);border-radius:clamp(4px,1vw,12px);}
.v2-rummy-focus-cards .v2-card-rank {font-size:22cqh;line-height:1;}
.v2-rummy-focus-cards .v2-card-suit {font-size:38cqh;line-height:1;}
.v2-rummy-focus-cards .v2-card-suit-label {font-size:22cqh;line-height:1;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-meld {display:flex;flex-direction:column;justify-content:center;gap:2px;overflow:hidden;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-meld h3 {font-size:clamp(12px,1.2vw,26px);line-height:1.1;margin:0;white-space:nowrap;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-meld .v2-rummy-meld-cards {display:none;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-meld .v2-rummy-meld-summary {display:block;font-size:clamp(14px,1.6vw,32px);line-height:1.1;white-space:nowrap;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] [data-rummy-dense="true"] .v2-rummy-tv-meld h3 {display:none;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] [data-rummy-dense="true"] .v2-rummy-tv-meld {padding:2px 5px;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-melds[data-rummy-dense="true"] {gap:2px;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-melds[data-rummy-dense="true"] .v2-rummy-tv-meld {padding:0 3px;border-width:1px;border-radius:7px;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-melds[data-rummy-dense="true"] .v2-rummy-meld-summary {font-size:clamp(12px,1.25vw,28px);line-height:1.05;}
@media(max-height:600px) {
 .v2-game-surface[data-mode="tv"][data-rummy-public="true"] {padding:12px;gap:8px;}
 .v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-surface-title {font-size:26px;}
 .v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-seat {padding:4px;font-size:12px;gap:2px;}
 .v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-seat span {display:none;}
 .v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-meld h3 {display:none;}
 .v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-piles {font-size:12px;}
 .v2-game-surface[data-mode="tv"][data-rummy-public="true"][data-rummy-dense="true"] .v2-rummy-tv-piles {display:none;}
 .v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-legend {font-size:12px;}
}
.v2-controller-context [data-rummy-public] {min-block-size:0;max-block-size:none;padding:10px;gap:6px;}
.v2-controller-context [data-rummy-public] .v2-surface-title {font-size:20px;}
.v2-controller-context [data-rummy-public] .v2-rummy-tv-piles,
.v2-controller-context [data-rummy-public] .v2-rummy-tv-scene,
.v2-controller-context [data-rummy-public] .v2-rummy-tv-legend {display:none;}
.v2-controller-context [data-rummy-public] .v2-rummy-tv-seats {grid-template-columns:repeat(2,minmax(0,1fr));}
.v2-controller-context [data-rummy-public] .v2-rummy-tv-seat {padding:4px;font-size:12px;}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-tv-discard .v2-card-material { inline-size:clamp(36px,5vw,100px); block-size:clamp(54px,7.5vw,150px); aspect-ratio:2/3; }
.v2-rummy-stock .v2-eights-card-back { display:grid; place-items:center; border:3px double #d3a548; border-radius:12px; background:#176c65; color:#f8d990; font-size:36px; box-shadow:0 3px 0 #d9cbb0; }
.v2-game-surface[data-mode="tv"][data-rummy-public="true"] .v2-rummy-stock .v2-eights-card-back {inline-size:clamp(36px,5vw,100px); block-size:clamp(54px,7.5vw,150px);}
.v2-game-surface[data-mode="tv"][data-rummy-public="true"][data-rummy-dense="true"] .v2-rummy-tv-piles .v2-card-material,
.v2-game-surface[data-mode="tv"][data-rummy-public="true"][data-rummy-dense="true"] .v2-eights-card-back {display:none;}
@media(max-width:500px) { .v2-rummy-tv-melds {grid-template-columns:1fr;} .v2-rummy-tv-seats {grid-template-columns:repeat(2,minmax(0,1fr));} }

/* Ten-foot composition at 1280 x 720. */
@media (min-width: 1280px) and (min-height: 720px) {
  .v2-game-surface[data-mode="tv"] {
    gap: 24px;
    /* The TV shell already owns the viewport and reserves its top bar. Sizing
       this child to 100vh made flex centering lift the title above the stage. */
    min-block-size: 100%;
    block-size: 100%;
    padding: 36px 52px;
  }
  .v2-game-surface[data-mode="tv"] .v2-surface-title { font-size: clamp(2.7rem, 4vw, 4.4rem); }
  .v2-game-surface[data-mode="tv"] .v2-surface-prompt { font-size: 1.45rem; }
  .v2-game-surface[data-mode="tv"] .v2-badge { min-block-size: 38px; padding: 8px 15px; font-size: 1rem; }
  .v2-game-surface[data-mode="tv"] .v2-token-mark { min-inline-size: 44px; min-block-size: 44px; font-size: 0.9rem; }
  .v2-game-surface[data-mode="tv"] .v2-token-label { font-size: 0.95rem; }
  .v2-game-surface[data-mode="tv"] .v2-score-value { font-size: 1.7rem; }
  .v2-game-surface[data-mode="tv"] .v2-race-node { min-block-size: 90px; }
  .v2-game-surface[data-mode="tv"][data-rapid="true"] .v2-race-track { grid-template-columns: repeat(9, minmax(70px, 1fr)); }
  .v2-game-surface[data-mode="tv"][data-rapid="true"] .v2-race-node { min-block-size: 76px; }
  .v2-game-surface[data-mode="tv"] .v2-card-material { inline-size: clamp(76px, 7vw, 112px); }
  .v2-game-surface[data-mode="tv"] .v2-die { inline-size: clamp(78px, 7vw, 112px); }
  .v2-game-surface[data-mode="tv"] .v2-cell-status { font-size: 0.74rem; }
}

/* 1080p and larger TVs retain readable detail without wasting the upper field. */
@media (min-width: 1920px) and (min-height: 1080px) {
  .v2-game-surface[data-mode="tv"] { gap: 32px; padding: 54px 78px; }
  .v2-game-surface[data-mode="tv"] .v2-surface-title { font-size: 5.2rem; }
  .v2-game-surface[data-mode="tv"] .v2-surface-prompt { font-size: 1.75rem; }
  .v2-game-surface[data-mode="tv"] .v2-race-track { gap: 14px; }
  .v2-game-surface[data-mode="tv"] .v2-race-node { min-block-size: 118px; }
  .v2-game-surface[data-mode="tv"][data-rapid="true"] .v2-race-track { grid-template-columns: repeat(9, minmax(96px, 1fr)); }
  .v2-game-surface[data-mode="tv"][data-rapid="true"] .v2-race-node { min-block-size: 104px; }
  .v2-game-surface[data-mode="tv"] .v2-player-seat { padding: 16px; }
  .v2-game-surface[data-mode="tv"] .v2-economy-map { min-block-size: 720px; }
  .v2-game-surface[data-mode="tv"] .v2-map-node { min-inline-size: 150px; max-inline-size: 190px; padding: 13px; }
}

@media (prefers-reduced-motion: reduce) {
  .v2-game-surface,
  .v2-game-surface *,
  .v2-game-surface *::before,
  .v2-game-surface *::after {
    scroll-behavior: auto !important;
    animation: none !important;
    transition-duration: 0.01ms !important;
  }
  .v2-action:active:not(:disabled),
  .v2-action:hover:not(:disabled) { transform: none; }
}

@media (prefers-contrast: more) {
  .v2-game-surface { --v2-line: #657181; --v2-line-strong: #263344; }
  .v2-action,
  .v2-board-cell,
  .v2-player-seat { border-width: 3px; }
}

/* Pearl expedition: the same owned sea / ivory stock as native, with real
   destinations in the playfield and private inventory kept off the TV. */
.v2-pearl-sea{position:relative;min-inline-size:0;min-block-size:220px;border:2px solid #D9C7A9;border-radius:24px;overflow:hidden;background:#176C65 url('/pearl-sea-world.jpg') center/cover;color:#183E46}
.v2-pearl-heading,.v2-pearl-reveal,.v2-pearl-depth{position:absolute;margin:0;padding:8px 12px;border-radius:12px;background:#FFF4DE;color:#183E46;line-height:1.3;text-align:center;white-space:pre-line}
.v2-pearl-heading{inset:8px 8px auto;font-size:16px;min-block-size:36px}
.v2-pearl-reveal{inset:auto 8px 8px;font-size:13px}
.v2-pearl-depth{inset-inline-start:50%;inset-block-start:calc(26% + var(--pearl-depth,0)*32%);transform:translateX(-50%);font-size:16px;font-weight:700}
.v2-pearl-roster{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;min-inline-size:0}
.v2-pearl-world-divers{position:absolute;inset:22% 8px 24%;display:grid;grid-template-columns:repeat(var(--pearl-crew-columns,4),minmax(0,1fr));grid-auto-rows:minmax(0,1fr);gap:4px;direction:ltr}
.v2-pearl-diver-lane{position:relative;min-block-size:0}
.v2-pearl-world-token{position:absolute;inset-inline-start:50%;inset-block-start:calc(var(--pearl-crew-depth,0)*30%);transform:translateX(-50%);display:grid;place-content:center;inline-size:clamp(28px,5.2vh,110px);block-size:clamp(28px,5.2vh,110px);border:2px solid #183E46;border-radius:50%;background:#FFF4DE;color:#183E46;text-align:center;white-space:pre-line;font-size:clamp(11px,1.6vh,36px);font-weight:750;line-height:1.1}
.v2-pearl-seat{display:flex;flex-direction:column;justify-content:center;gap:2px;min-inline-size:0;padding:8px;border-radius:12px;background:#FFF4DE;color:#183E46;text-align:center;font-size:14px;overflow-wrap:anywhere}
.v2-pearl-seat strong{font-weight:750}.v2-pearl-seat span:last-child{font-size:.85em}
[data-pearl-public]>.v2-surface-body{display:grid;gap:8px;min-inline-size:0}
[data-pearl-public][data-mode=tv]{block-size:100%;min-block-size:100%;display:flex;flex-direction:column;overflow:hidden}
[data-pearl-public][data-mode=tv]>.v2-surface-header{flex:0 0 auto}
[data-pearl-public][data-mode=tv]>.v2-surface-body{flex:1;min-block-size:0;grid-template-rows:minmax(0,1fr) auto}
[data-pearl-public][data-mode=tv] .v2-pearl-sea{block-size:100%;min-block-size:0}
[data-pearl-public][data-mode=tv] .v2-pearl-heading{font-size:clamp(18px,3.3vh,80px);padding:10px 16px}
[data-pearl-public][data-mode=tv] .v2-pearl-reveal{font-size:clamp(15px,2.6vh,64px);padding:12px}
[data-pearl-public][data-mode=tv] .v2-pearl-depth{font-size:clamp(18px,3vh,72px)}
[data-pearl-public][data-mode=tv] .v2-pearl-seat{font-size:clamp(12px,2.1vh,48px);padding:6px}
[data-pearl-private] .v2-interaction-body{display:grid;gap:8px;min-inline-size:0}
[data-pearl-private] .v2-pearl-air,[data-pearl-private] .v2-pearl-scoring{margin:0;font-size:14px;line-height:1.4;color:#183E46}
[data-pearl-private] .v2-pearl-sea{min-block-size:250px}
[data-pearl-private] .v2-pearl-heading{font-size:14px;line-height:1.2;padding:6px 8px;block-size:46px;display:flex;align-items:center;justify-content:center}
[data-pearl-private] [data-pearl-decision]{position:absolute;inset-inline:8px;inline-size:calc(100% - 16px);min-block-size:48px;margin:0;padding:8px;border-radius:12px;font-size:16px;background:#BE3B20;color:#FFFCF4;border:2px solid #BE3B20}
[data-pearl-private] [data-pearl-decision=surface]{inset-block-start:62px;background:#FFF4DE;color:#183E46;border-color:#D9C7A9}
[data-pearl-private] [data-pearl-decision=descend]{inset-block-end:8px}
[data-private-play=true] .v2-pearl-reveal{inset:118px 8px 64px 80px;display:flex;align-items:center;justify-content:center;padding:4px;font-size:12px}
[data-private-play=true] .v2-pearl-depth{display:none}
.v2-pearl-diver{position:absolute;left:12px;top:118px;inline-size:56px;block-size:56px;display:grid;place-content:center;border-radius:28px;background:#183E46;color:#FFF4DE;font-size:17px;font-weight:750;text-align:center;white-space:pre-line;touch-action:none;cursor:grab;user-select:none}
.v2-pearl-diver:focus-visible{outline:3px solid #BE3B20;outline-offset:3px}
.v2-pearl-inventory{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.v2-pearl-inventory-token{display:flex;flex-direction:column;align-items:center;gap:4px;min-inline-size:0;padding:8px 4px;border:1px solid #D9C7A9;border-radius:12px;background:#FFF4DE;color:#183E46;text-align:center;font-size:13px;overflow-wrap:anywhere}
.v2-pearl-token-mark{inline-size:24px;block-size:24px;border-radius:50%;border:2px solid #183E46;background:#FFFCF4;box-shadow:inset -4px -3px 0 #D9C7A9}
[data-pearl-type=rose] .v2-pearl-token-mark{background:#eec9b9}[data-pearl-type=gulf] .v2-pearl-token-mark{background:#b8ddd1}
@media(max-width:480px){[data-pearl-public]:not([data-mode=tv]) .v2-pearl-roster{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* Original Dhow paper manifests, flat crates/sails and one live harbor chart. */
.v2-dhow-market,.v2-dhow-manifest{background:#FFFCF4;color:#183E46;border:1px solid #D9C7A9;border-radius:12px;min-inline-size:0}
.v2-dhow-market{display:flex;align-items:center;gap:10px;padding:10px}
.v2-dhow-market-copy{display:flex;flex:1;flex-direction:column;gap:4px;min-inline-size:0}
.v2-dhow-market-heading{font-size:12px}.v2-dhow-lot-title{font-size:19px;line-height:1.1}.v2-dhow-lot-detail{font-size:13px;line-height:1.3;white-space:pre-line}
.v2-dhow-crate{position:relative;display:block;flex:0 0 44px;inline-size:44px;block-size:36px;margin-inline:auto;overflow:hidden;border:2px solid #183E46;background:var(--dhow-cargo-color,#D9C7A9);box-shadow:inset 0 0 0 3px #fffcf466}
.v2-dhow-crate::before,.v2-dhow-crate::after{content:'';position:absolute;inset:50% -12%;block-size:2px;background:#183E46;transform:rotate(36deg)}
.v2-dhow-crate::after{transform:rotate(-36deg)}.v2-dhow-crate-band{position:absolute;z-index:1;inset:40% 0 32%;background:#FFF4DE}
.v2-dhow-manifest{display:flex;flex-direction:column;gap:5px;padding:8px;font-size:13px;line-height:1.35;white-space:pre-line;overflow-wrap:anywhere}
.v2-dhow-manifest strong{font-size:15px}.v2-dhow-manifest-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.v2-dhow-section-label{display:block;font-size:14px;margin-block:4px}.v2-dhow-manifests{display:grid;gap:8px;max-block-size:clamp(220px,32dvh,320px);overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding:2px}
.v2-dhow-budget,.v2-dhow-bid-value,.v2-dhow-chart-note,.v2-dhow-send-status{margin:0;font-size:13px;line-height:1.35;color:#183E46}
.v2-dhow-bid-value{font-weight:700}.v2-dhow-send-status:empty{display:none}
.v2-dhow-bid-dock{display:grid;gap:4px;min-inline-size:0;padding-block:4px;background:#FFF4DE}
.v2-dhow-bid-slider{inline-size:100%;block-size:44px;accent-color:#BE3B20;cursor:ew-resize}
[data-dhow-seal]{min-block-size:48px;margin:0;background:#BE3B20!important;color:#FFFCF4!important;border-color:#BE3B20!important;border-radius:12px;padding:10px;font-size:17px}
[data-dhow-private] .v2-interaction-title{font-size:23px;line-height:1.15}[data-dhow-private] .v2-interaction-help{font-size:13px;line-height:1.35}
[data-dhow-private] .v2-interaction-body{display:grid;gap:8px;min-inline-size:0}
.v2-dhow-map{position:relative;min-inline-size:0;min-block-size:250px;border:2px solid #D9C7A9;border-radius:24px;overflow:hidden;background:#DCECE4 url('/dhow-harbor-world-v1.jpg') center/cover;color:#183E46}
.v2-dhow-plot{position:absolute;inset:24px 12px 40px;direction:ltr}
.v2-dhow-plot>svg{position:absolute;inset:0;inline-size:100%;block-size:100%;pointer-events:none}
.v2-dhow-plot>svg line{stroke:#183E46;stroke-opacity:.5}
.v2-dhow-port-position{position:absolute;transform:translate(-50%,-50%);inline-size:44px;block-size:44px;direction:ltr}
.v2-dhow-port-target{display:grid;place-items:center;inline-size:44px;block-size:44px;border-radius:50%;border:2px solid #183E46;background:#FFF4DE;color:#183E46;font:700 15px system-ui}
button.v2-dhow-port-target{border:3px solid #BE3B20;cursor:pointer}.v2-dhow-port-target:focus-visible{outline:3px solid #BE3B20;outline-offset:3px}
.v2-dhow-port-name{position:absolute;inset-block-start:39px;left:50%;transform:translateX(-50%);inline-size:72px;padding:2px 3px;min-block-size:20px;border-radius:8px;background:#FFF4DE;color:#183E46;text-align:center;font-size:12px;line-height:1.35;font-weight:650;pointer-events:none;overflow-wrap:normal}
.v2-dhow-sail{position:relative;display:block;inline-size:44px;block-size:44px;background:#FFF4DE;border:1px solid #183E46;border-radius:8px;overflow:hidden}
.v2-dhow-hull{position:absolute;inset:70% 9% 9%;background:#BE3B20;clip-path:polygon(0 0,100% 0,80% 100%,20% 100%)}
.v2-dhow-mast{position:absolute;left:50%;top:9%;inline-size:2px;block-size:64%;background:#183E46}
.v2-dhow-main-sail{position:absolute;inset:16% 54% 36% 11%;background:#D9C7A9;clip-path:polygon(100% 0,100% 100%,0 100%)}
.v2-dhow-small-sail{position:absolute;inset:27% 13% 36% 59%;background:#176C65;clip-path:polygon(0 0,0 100%,100% 100%)}
.v2-dhow-seat-number{position:absolute;inset:0 0 auto;text-align:center;color:#183E46;font-weight:750;font-size:12px;line-height:1}
.v2-dhow-own-ship{position:absolute;z-index:3;transform:translate(-50%,-50%);touch-action:none;user-select:none;cursor:grab}
.v2-dhow-own-ship:focus-visible{outline:3px solid #BE3B20;outline-offset:3px}
.v2-dhow-public-ship{position:absolute;z-index:2;transform:translate(calc(-50% + var(--dhow-ship-slot-x,0)*30px),calc(-105% - var(--dhow-ship-slot-y,0)*30px));pointer-events:none}
.v2-dhow-public-ship .v2-dhow-sail{inline-size:28px;block-size:28px}.v2-dhow-public-ship .v2-dhow-seat-number{font-size:10px}
.v2-dhow-roster{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.v2-dhow-public-seat{display:flex;flex-direction:column;gap:2px;min-inline-size:0;padding:6px;border-radius:12px;background:#FFF4DE;color:#183E46;text-align:center;overflow-wrap:anywhere;font-size:14px;line-height:1.2}
.v2-dhow-tv-table{display:grid;gap:8px;min-inline-size:0;min-block-size:0}
.v2-dhow-public-resources,.v2-dhow-auction-receipt{margin:0;color:#183E46;font-size:14px;line-height:1.3}
[data-dhow-public][data-mode=tv]{block-size:100%;min-block-size:100%;display:flex;flex-direction:column;overflow:hidden}
[data-dhow-public][data-mode=tv]>.v2-surface-header{flex:0 0 auto}
[data-dhow-public][data-mode=tv]>.v2-surface-body{flex:1;min-block-size:0;display:flex}
[data-dhow-public][data-mode=tv] .v2-dhow-tv-table{inline-size:100%;block-size:100%;grid-template-columns:minmax(0,27fr) minmax(0,73fr);grid-template-rows:auto minmax(0,1fr) auto auto}
[data-dhow-public][data-mode=tv] .v2-dhow-public-resources{grid-column:1/-1;font-size:clamp(12px,1.9vh,44px)}
[data-dhow-public][data-mode=tv] .v2-dhow-market{grid-column:1;grid-row:2;flex-direction:column;align-items:stretch;overflow:hidden}
[data-dhow-public][data-mode=tv] .v2-dhow-market>.v2-dhow-crate{flex:0 0 auto;inline-size:clamp(44px,8vh,180px);block-size:clamp(36px,6vh,140px)}
[data-dhow-public][data-mode=tv] .v2-dhow-market-heading{font-size:clamp(12px,1.9vh,44px)}
[data-dhow-public][data-mode=tv] .v2-dhow-lot-title{font-size:clamp(20px,3.2vh,76px)}
[data-dhow-public][data-mode=tv] .v2-dhow-lot-detail{font-size:clamp(13px,2.15vh,52px)}
[data-dhow-public][data-mode=tv] .v2-dhow-map{grid-column:2;grid-row:2;min-block-size:0;block-size:100%}
[data-dhow-public][data-mode=tv] .v2-dhow-port-name{inline-size:clamp(66px,7.2vw,240px);font-size:clamp(12px,1.9vh,44px);max-block-size:none}
[data-dhow-public][data-mode=tv] .v2-dhow-port-target{font-size:clamp(13px,2vh,48px)}
[data-dhow-public][data-mode=tv] .v2-dhow-public-ship .v2-dhow-sail{inline-size:clamp(28px,3.1vh,68px);block-size:clamp(28px,3.1vh,68px)}
[data-dhow-public][data-mode=tv] .v2-dhow-public-ship .v2-dhow-seat-number{font-size:clamp(10px,1.1vh,26px)}
[data-dhow-public][data-mode=tv] .v2-dhow-auction-receipt{grid-column:1/-1;font-size:clamp(12px,2vh,48px)}
[data-dhow-public][data-mode=tv] .v2-dhow-roster{grid-column:1/-1}
[data-dhow-public][data-mode=tv] .v2-dhow-public-seat{font-size:clamp(12px,1.95vh,46px)}
@media(max-width:480px){.v2-dhow-roster{grid-template-columns:repeat(2,minmax(0,1fr))}[data-dhow-public][data-mode=tv] .v2-dhow-roster{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-height:600px) and (min-width:600px){
  [data-dhow-public][data-mode=tv]{padding:8px;gap:6px}
  [data-dhow-public][data-mode=tv] .v2-surface-title{font-size:22px}
  [data-dhow-public][data-mode=tv] .v2-dhow-tv-table{gap:6px;grid-template-rows:auto minmax(0,1fr) auto auto}
  [data-dhow-public][data-mode=tv] .v2-dhow-public-resources{grid-column:1;grid-row:1}
  [data-dhow-public][data-mode=tv] .v2-dhow-map{grid-column:2;grid-row:1/4}
  [data-dhow-public][data-mode=tv] .v2-dhow-market{position:relative;display:block;padding:6px}
  [data-dhow-public][data-mode=tv] .v2-dhow-market>.v2-dhow-crate{position:absolute;inset-inline-end:6px;inset-block-start:6px;inline-size:24px;block-size:20px}
  [data-dhow-public][data-mode=tv] .v2-dhow-market-copy{gap:2px}
  [data-dhow-public][data-mode=tv] .v2-dhow-market-heading{display:none}
  [data-dhow-public][data-mode=tv] .v2-dhow-lot-title{padding-inline-end:28px}
  [data-dhow-public][data-mode=tv] .v2-dhow-lot-title{font-size:18px}
  [data-dhow-public][data-mode=tv] .v2-dhow-lot-detail{font-size:12px;line-height:1.2}
  [data-dhow-public][data-mode=tv] .v2-dhow-port-position,[data-dhow-public][data-mode=tv] .v2-dhow-port-target{inline-size:28px;block-size:28px}
  [data-dhow-public][data-mode=tv] .v2-dhow-port-name{inset-block-start:26px}
  [data-dhow-public][data-mode=tv] .v2-dhow-public-ship .v2-dhow-sail{inline-size:22px;block-size:22px}
  [data-dhow-public][data-mode=tv] .v2-dhow-auction-receipt{grid-column:1;grid-row:3}
  [data-dhow-public][data-mode=tv] .v2-dhow-public-seat{padding:4px;font-size:12px}
  [data-dhow-public][data-mode=tv] .v2-dhow-roster{gap:4px}
}
/* Original light two-stop tickets and authored transit-board interaction. */
.v2-studio-projects,.v2-studio-ticket-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;min-inline-size:0}
.v2-studio-project{display:flex;flex-direction:column;justify-content:center;gap:3px;min-inline-size:0;min-block-size:64px;padding:6px 4px;border:1px solid #D9C7A9;border-radius:12px;background:#FFFCF4;color:#183E46;text-align:center;line-height:1.25;font-size:12px;overflow-wrap:anywhere}
button.v2-studio-project{cursor:pointer}.v2-studio-project strong{font-size:12px}.v2-studio-project[data-selected=true]{border:3px solid #BE3B20;background:#BE3B20;color:#FFFCF4}
.v2-studio-map{--studio-unit:1px;position:relative;block-size:200px;min-block-size:184px;min-inline-size:0;border:1px solid #D9C7A9;border-radius:20px;overflow:hidden;background:#FFFCF4 url('/metro-paper-world-v1.jpg') center/cover;color:#183E46}
.v2-studio-plot{position:absolute;inset:calc(22 * var(--studio-unit)) calc(26 * var(--studio-unit)) calc(40 * var(--studio-unit));direction:ltr}
.v2-studio-plot>svg{position:absolute;inset:0;inline-size:100%;block-size:100%;pointer-events:none;overflow:visible}
.v2-studio-plot>svg>line[data-metro-owned=true]{stroke-width:calc(3 * var(--studio-unit))}
.v2-studio-plot>svg>line[data-metro-owned=false]{stroke-width:calc(2 * var(--studio-unit))}
.v2-studio-station-position{position:absolute;transform:translate(-50%,-50%);inline-size:calc(44 * var(--studio-unit));block-size:calc(44 * var(--studio-unit));direction:ltr}
.v2-studio-station{display:grid;place-items:center;inline-size:100%;block-size:100%;border:0;padding:0;background:transparent;color:#183E46;border-radius:12px;position:relative}
button.v2-studio-station{cursor:crosshair;touch-action:none;user-select:none;min-inline-size:44px;min-block-size:44px}
.v2-studio-station-number{display:grid;place-items:center;inline-size:calc(24 * var(--studio-unit));block-size:calc(24 * var(--studio-unit));border:calc(1.5 * var(--studio-unit)) solid #183E46;border-radius:50%;background:#FFF4DE;font-size:calc(12 * var(--studio-unit));line-height:1;font-weight:750;pointer-events:none}
.v2-studio-station[data-interchange=true] .v2-studio-station-number{border-width:calc(3 * var(--studio-unit))}
.v2-studio-station[data-start=true] .v2-studio-station-number{background:#BE3B20;color:#FFFCF4}
.v2-studio-station:focus-visible{outline:3px solid #BE3B20;outline-offset:2px}
.v2-studio-station-label{position:absolute;left:0;top:32px;inline-size:calc(44 * var(--studio-unit));block-size:calc(16 * var(--studio-unit));display:grid;place-items:center;background:#fff4def2;color:#183E46;border-radius:4px;font-size:calc(11 * var(--studio-unit));font-weight:650;line-height:1;white-space:nowrap;pointer-events:none}
[data-metro-private] .v2-interaction-title{font-size:23px;line-height:1.15}[data-metro-private] .v2-interaction-help{font-size:13px;line-height:1.3}
[data-metro-private] .v2-interaction-body{display:grid;gap:8px;min-inline-size:0}
[data-metro-build]{min-block-size:48px;inline-size:100%;margin:0;padding:8px;background:#BE3B20!important;color:#FFFCF4!important;border:0;border-radius:12px;font-size:14px;line-height:1.3}
.v2-studio-manifests{display:grid;gap:6px;max-block-size:clamp(220px,32dvh,320px);overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding:2px}
.v2-studio-ticket-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.v2-studio-ticket{display:flex;flex-direction:column;gap:4px;padding:8px;border:1px solid #D9C7A9;border-radius:12px;background:#FFFCF4;color:#183E46;font-size:13px;line-height:1.3;min-inline-size:0;overflow-wrap:anywhere}
.v2-studio-ticket-detail{color:#725412;font-size:12px}.v2-studio-section{font-size:13px}.v2-studio-send-status{margin:0;color:#183E46;font-size:13px}.v2-studio-send-status:empty{display:none}
.v2-studio-roster{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.v2-studio-seat{min-inline-size:0;border-inline-start:4px solid var(--metro-seat-color,#176C65);border-radius:10px;padding:6px;background:#FFF4DE;color:#183E46;display:flex;flex-direction:column;font-size:13px;overflow-wrap:anywhere}
.v2-studio-tv-table{display:grid;gap:8px;min-inline-size:0;min-block-size:0}.v2-studio-tv-panel{display:flex;flex-direction:column;justify-content:space-around;gap:8px;min-inline-size:0;min-block-size:0;padding:8px;border:1px solid #D9C7A9;border-radius:16px;background:#FFFCF4}
.v2-studio-tv-ticket{display:flex;flex-direction:column;gap:4px;padding-block:3px;color:#183E46;min-inline-size:0;min-block-size:0;font-size:14px;line-height:1.25}.v2-studio-tv-compact{display:none}.v2-studio-tv-resources{margin:0;color:#183E46;font-size:14px;line-height:1.3}
[data-metro-public][data-mode=tv]{block-size:100%;min-block-size:100%;display:flex;flex-direction:column;overflow:hidden}
[data-metro-public][data-mode=tv]>.v2-surface-header{flex:0 0 auto}[data-metro-public][data-mode=tv]>.v2-surface-body{flex:1;min-block-size:0;display:flex}
[data-metro-public][data-mode=tv] .v2-studio-tv-table{inline-size:100%;block-size:100%;grid-template-columns:minmax(0,27fr) minmax(0,73fr);grid-template-rows:auto minmax(0,1fr) auto}
[data-metro-public][data-mode=tv] .v2-studio-tv-resources{grid-column:1/-1;font-size:clamp(12px,1.9vh,44px)}
[data-metro-public][data-mode=tv] .v2-studio-tv-panel{grid-column:1;grid-row:2}
[data-metro-public][data-mode=tv] .v2-studio-map{grid-column:2;grid-row:2;block-size:100%;min-block-size:0}
[data-metro-public][data-mode=tv] .v2-studio-roster{grid-column:1/-1}
[data-metro-public][data-mode=tv] .v2-studio-seat{font-size:clamp(12px,1.95vh,46px);text-align:center}
[data-metro-public][data-mode=tv] .v2-studio-tv-ticket{font-size:clamp(12px,2vh,46px)}
[data-metro-public][data-mode=tv] .v2-studio-station-label{inline-size:calc(50 * var(--studio-unit));block-size:calc(18 * var(--studio-unit));font-size:max(12px,calc(11 * var(--studio-unit)))}
@media(max-height:600px) and (min-width:600px){[data-metro-public][data-mode=tv]{padding:8px;gap:6px}[data-metro-public][data-mode=tv] .v2-surface-title{font-size:22px}[data-metro-public][data-mode=tv] .v2-studio-tv-panel{padding:6px;gap:4px}[data-metro-public][data-mode=tv] .v2-studio-tv-full{display:none}[data-metro-public][data-mode=tv] .v2-studio-tv-compact{display:block}[data-metro-public][data-mode=tv] .v2-studio-seat{padding:4px}[data-metro-public][data-mode=tv] .v2-studio-roster{gap:4px;grid-template-columns:repeat(var(--studio-count,6),minmax(0,1fr))}[data-metro-public][data-mode=tv] .v2-studio-tv-resources{grid-column:1;grid-row:1}[data-metro-public][data-mode=tv] .v2-studio-map{grid-row:1/3}[data-metro-public][data-mode=tv] .v2-studio-tv-ticket{flex-direction:row;align-items:center;justify-content:space-between;padding-block:2px;gap:4px}}
/* Original Failaka paper-island material. Maps never mirror in RTL. */
.v2-island-viewport { position:relative; min-width:0; min-height:0; overflow:auto; border-radius:16px; background:#fff4de url('/failaka-paper-island-v1.jpg') center/cover; direction:ltr; touch-action:pan-x pan-y; }
.v2-island-grid { display:grid; grid-template-columns:repeat(7,minmax(44px,1fr)); grid-template-rows:repeat(7,minmax(44px,1fr)); width:100%; min-width:308px; min-height:308px; aspect-ratio:1; padding:0; gap:0; box-sizing:border-box; }
.v2-island-cell { position:relative; display:block; min-width:44px; min-height:44px; padding:1px; border:0; border-radius:6px; background:transparent; box-sizing:border-box; }
.v2-island-cell:empty { border:1px solid #17454d20; opacity:.5; }
button.v2-island-cell { cursor:pointer; background:#fff9ed80; outline:1px solid #176c6533; outline-offset:-2px; }
.v2-island-face { display:block; position:relative; width:100%; height:100%; min-width:0; overflow:hidden; border-radius:6px; border:1px solid #d9c7a9; background:#fff4de; color:#17454d; box-sizing:border-box; }
.v2-island-cell[data-preview='true'] .v2-island-face { opacity:.7; border:3px solid #199a86; }
.v2-island-cell[data-survey='true'] { outline:3px solid #176c65; outline-offset:-3px; }
.v2-island-edge { position:absolute; z-index:1; left:44%; top:0; width:12%; height:50%; transform-origin:50% 100%; }
.v2-island-direction-1 { transform:rotate(90deg); }.v2-island-direction-2 { transform:rotate(180deg); }.v2-island-direction-3 { transform:rotate(270deg); }
.v2-island-edge-route { background:linear-gradient(to bottom,#145c52 0 18%,transparent 18%); }
.v2-island-edge-route::after { content:'';position:absolute;top:6%;left:20%;width:60%;height:94%;border-radius:8px;background:#145c52b3; }
.v2-island-edge-land { background:linear-gradient(to bottom,#ad7a3d 0 18%,transparent 18%); }
.v2-island-edge-coast::before { content:'';position:absolute;top:0;left:0;width:100%;height:18%;border:1.5px solid #408fa3;border-radius:4px;box-sizing:border-box; }
.v2-island-site-icon { position:absolute;left:33%;top:33%;width:34%;height:34%;z-index:2;pointer-events:none;user-select:none;-webkit-user-drag:none; }
.v2-island-face { user-select:none;-webkit-user-select:none; }
.v2-island-protected { position:absolute;right:3%;top:2%;width:27%;aspect-ratio:1;border-radius:50%;background:#145c52;color:#fff4de;font:bold clamp(8px,1.1vw,26px)/1.2 system-ui;text-align:center;z-index:3; }
.v2-island-owner { position:absolute;left:4%;bottom:2%;font:bold clamp(8px,1.1vw,26px)/1.2 system-ui;z-index:3; }
.v2-island-plus { display:grid;place-items:center;width:100%;height:100%;font:600 22px/1 system-ui;color:#176c65; }
.v2-island-surveyor { position:absolute;left:var(--island-seat-x,4%);top:var(--island-seat-y,4%);background:var(--island-seat-color);color:#fff;border-radius:50%;min-width:14px;height:14px;font:bold 10px/14px system-ui;text-align:center;z-index:4; }
.v2-island-private { display:grid;grid-template-rows:auto minmax(80px,1fr) auto;gap:6px;padding:8px!important;height:min(760px,calc(100svh - 100px));min-height:440px;box-sizing:border-box; }
.v2-island-private .v2-interaction-header { margin:0;gap:2px; }
.v2-island-private .v2-interaction-title { font-size:22px;line-height:1.1;margin:0; }
.v2-island-private .v2-interaction-help { display:none; }
.v2-island-goal { font-size:12px;line-height:16px;margin:4px 0 0;color:#17454d; }
.v2-island-private .v2-interaction-body { display:grid;grid-template-rows:64px 44px minmax(60px,1fr);gap:5px;min-height:0; }
.v2-island-private[data-failaka-phase='finished'] .v2-interaction-body { grid-template-rows:minmax(100px,1fr); }
.v2-island-rack-host:empty,.v2-island-tools:empty { display:none; }
.v2-island-chart-host { display:grid;min-height:0; }.v2-island-chart-host>.v2-island-viewport { min-height:0; }
.v2-island-rack-host { min-width:0;overflow-x:auto; }.v2-island-rack { display:flex;gap:6px;min-width:0;height:64px; }
.v2-island-rack-tile { width:64px;min-width:64px;height:64px;flex:none;padding:1px;border:0;border-radius:7px;background:transparent;touch-action:pan-x; }
.v2-island-rack-tile[aria-pressed='true'] .v2-island-face { border:3px solid #199a86; }
.v2-island-tools,.v2-island-documentation { display:grid;grid-template-columns:1fr 1fr;gap:6px;min-height:44px; }
.v2-island-tool { min-height:44px;border:1px solid #d9c7a9;border-radius:10px;background:#fff9ed;color:#17454d;font:600 13px/1.2 system-ui;cursor:pointer;padding:4px; }
.v2-island-documentation [aria-pressed='true'] { background:#176c65;color:#fff4de; }
.v2-island-private .v2-interaction-footer { display:grid;gap:4px;margin:0; }
.v2-island-status { margin:0;font:500 12px/16px system-ui;color:#17454d;min-height:16px; }
.v2-island-confirm-host .v2-action { width:100%;min-height:48px;padding:6px 12px;border-radius:12px;background:#199a86;color:#fff4de; }
.v2-island-crew { margin:0;font-size:12px; }.v2-island-crew summary { min-height:44px;display:flex;align-items:center;cursor:pointer; }
.v2-island-award { margin:0;padding:10px;border-radius:10px;background:#fff9ed;font-size:16px; }
.v2-island-drag-ghost { position:fixed;top:0;left:0;width:66px;height:66px;pointer-events:none;z-index:1000;box-shadow:0 4px 12px #17454d44; }
.v2-island-private button:disabled { opacity:.5;cursor:default; }
[data-failaka-public] { display:grid;grid-template-rows:auto minmax(0,1fr);height:100%;min-height:0;padding:12px;box-sizing:border-box; }
[data-failaka-public] .v2-surface-body { display:grid;min-height:0; }
.v2-island-tv-layout { display:grid;grid-template-columns:minmax(0,1fr) clamp(150px,25%,360px);gap:12px;min-height:0;height:100%; }
.v2-island-board-readonly { display:grid;place-items:center;overflow:hidden;container-type:size; }
.v2-island-board-readonly .v2-island-grid { width:min(100cqw,100cqh);height:min(100cqw,100cqh);max-width:100%;max-height:100%;min-width:0;min-height:0;grid-template-columns:repeat(7,minmax(0,1fr));grid-template-rows:repeat(7,minmax(0,1fr)); }
.v2-island-board-readonly .v2-island-cell { min-width:0;min-height:0; }
.v2-island-tv-panel { display:flex;flex-direction:column;gap:8px;min-width:0;min-height:0;color:#17454d; }
.v2-island-tv-panel h3 { margin:0;font-size:clamp(16px,1.8vw,38px); }.v2-island-tv-panel p { margin:0;font-size:clamp(12px,1.3vw,28px);line-height:1.3; }
.v2-island-roster { display:grid;gap:6px;min-width:0; }.v2-island-public-seat { display:flex;justify-content:space-between;gap:4px;border:2px solid var(--island-seat-color);border-radius:10px;padding:8px;background:#fff4de;color:#17454d;font-size:clamp(12px,1.4vw,30px);min-width:0; }
.v2-island-public-seat strong { min-width:0;overflow-wrap:anywhere; }.v2-island-public-seat bdi { font-variant-numeric:tabular-nums; }
.v2-island-public-seat[data-active='true'] { border-style:double;border-width:4px; }
@media (max-height:550px) { .v2-island-tv-panel { gap:4px; }.v2-island-roster { gap:3px; }.v2-island-public-seat { padding:4px; }.v2-island-private .v2-interaction-title { font-size:19px; } }
@media (forced-colors: active) {
  .v2-game-surface,
  .v2-action,
  .v2-board-cell,
  .v2-grid-button,
  .v2-card-material,
  .v2-die,
  .v2-token-mark,
  .v2-map-node {
    color: CanvasText;
    background: Canvas;
    border-color: CanvasText;
    forced-color-adjust: auto;
  }
  .v2-action:focus-visible { outline-color: Highlight; }
  .v2-board-cell[data-state="hit"],
  .v2-board-cell[data-state="miss"],
  .v2-board-cell[data-state="sunk"] { outline: 3px solid Highlight; }
}

/* Original 2D Majlis collector studio. The dossier/gallery scroll; the bid
   dock stays in reach. No motion implies or resolves an authoritative bid. */
.v2-majlis-lot{display:grid;grid-template-columns:42% minmax(0,1fr);gap:10px;align-items:center;padding:10px;background:#FFFCF4;border:1.5px solid #D9C7A9;border-radius:16px;color:#17454D;min-inline-size:0;box-sizing:border-box}
.v2-majlis-art{display:block;inline-size:100%;aspect-ratio:1;object-fit:contain;pointer-events:none;user-select:none}
.v2-majlis-lot-copy{min-inline-size:0}.v2-majlis-lot-title{display:block;font-size:18px;line-height:1.15;overflow-wrap:anywhere}.v2-majlis-lot-detail{font-size:14px;margin:6px 0 0;line-height:1.3}
.v2-majlis-private{height:min(720px,calc(100svh - 110px));min-height:360px;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:6px;padding:8px!important;box-sizing:border-box}
.v2-majlis-private .v2-interaction-header{margin:0;gap:2px}.v2-majlis-private .v2-interaction-title{font-size:22px;line-height:1.1;margin:0}.v2-majlis-private .v2-interaction-help{display:none}
.v2-majlis-private .v2-interaction-body{display:grid;grid-template-rows:minmax(90px,1fr) auto;gap:6px;min-height:0}.v2-majlis-private .v2-interaction-footer:empty,.v2-majlis-send-status:empty{display:none}
.v2-majlis-dossier{overflow:auto;min-height:0;overscroll-behavior:contain;display:flex;flex-direction:column;gap:8px}.v2-majlis-dossier>*{flex-shrink:0}.v2-majlis-preference,.v2-majlis-phase-note{margin:0;font-size:14px;line-height:1.3;color:#17454D}
.v2-majlis-private-gallery{display:flex;gap:8px;overflow-x:auto;scroll-snap-type:x proximity;padding-block:4px 8px;min-inline-size:0}.v2-majlis-private-gallery .v2-majlis-lot-thumb{display:flex;flex-direction:column;align-items:stretch;flex:0 0 148px;scroll-snap-align:start}.v2-majlis-lot-thumb .v2-majlis-art{max-block-size:112px}.v2-majlis-lot-thumb .v2-majlis-lot-title{font-size:14px}.v2-majlis-bonus{color:#32645A;font-weight:800}
.v2-majlis-bid-dock{display:grid;gap:4px;background:#FFF4DE;border-block-start:1px solid #D9C7A9;padding-block-start:4px}.v2-majlis-bid-row{display:flex;align-items:center;gap:10px;min-inline-size:0}.v2-majlis-bid-row p{margin:4px 0;font-size:13px;line-height:1.25}.v2-majlis-offer-value{font-size:20px;color:#17454D}
.v2-majlis-dial{flex:0 0 80px;block-size:80px;display:grid;place-items:center;border-radius:50%;font-size:28px;font-weight:850;color:#17454D;background:radial-gradient(circle at center,#FFF4DE 54%,transparent 56%),conic-gradient(from -135deg,#B13E14 calc(var(--offer-fraction,0)*270deg),#D9C7A9 0 270deg,transparent 0);touch-action:none;cursor:grab;direction:ltr}
.v2-majlis-dial[aria-disabled="true"]{opacity:.55;cursor:default}.v2-majlis-offer-slider{inline-size:100%;min-block-size:44px;margin:0;accent-color:#B13E14;direction:ltr}.v2-majlis-seal{min-block-size:48px;background:#B13E14;color:#FFF4DE;border:0;border-radius:14px;font-size:18px;font-weight:750;cursor:pointer}.v2-majlis-seal:disabled{opacity:.5;cursor:default}.v2-majlis-send-status{font-size:13px;margin:0;line-height:1.2}.v2-majlis-private :focus-visible{outline:3px solid #176C65;outline-offset:2px}
[data-majlis-public] .v2-surface-body{min-height:0;display:grid}[data-majlis-public] .v2-surface-scores{display:none}.v2-majlis-tv-layout{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:clamp(6px,1vw,32px);min-height:0;height:100%}.v2-majlis-showcase{display:grid;grid-template-rows:minmax(0,1fr) auto auto;min-height:0;gap:6px}.v2-majlis-showcase .v2-majlis-lot{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto;min-height:0;padding:clamp(8px,1vw,28px)}.v2-majlis-showcase .v2-majlis-art{height:100%;min-height:0;max-block-size:48vh}.v2-majlis-showcase .v2-majlis-lot-title{font-size:clamp(18px,2.3vw,72px)}.v2-majlis-showcase .v2-majlis-lot-detail{font-size:clamp(13px,1.5vw,44px)}.v2-majlis-tie-priority,.v2-majlis-public-receipt{font-size:clamp(12px,1.4vw,40px);line-height:1.2;color:#17454D;margin:0}
.v2-majlis-roster{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:minmax(0,1fr);gap:clamp(4px,.7vw,20px);min-height:0}.v2-majlis-roster:is([data-collectors="9"],[data-collectors="10"],[data-collectors="11"],[data-collectors="12"]){grid-template-columns:repeat(3,minmax(0,1fr))}.v2-majlis-collector{display:flex;flex-direction:column;justify-content:center;text-align:center;padding:4px;background:#FFFCF4;border:1px solid #D9C7A9;border-radius:10px;min-inline-size:0;color:#17454D;font-size:clamp(12px,1.5vw,44px);line-height:1.2;overflow-wrap:anywhere}.v2-majlis-collector bdi{font-weight:800}.v2-majlis-collector span{display:block}
@media(forced-colors:active){.v2-majlis-lot,.v2-majlis-collector,.v2-majlis-seal,.v2-majlis-dial{border:2px solid ButtonText}.v2-majlis-dial{background:Canvas;color:CanvasText}}

/* Original, flat paper-desert convoy. Public world and private supplies share
   exact vector art; preview gestures never resolve an engine action. */
.v2-storm-world{position:relative;min-inline-size:0;overflow:hidden;border-radius:16px;background:#F4E9D4 url('/sandstorm-paper-desert-v1.jpg') center/cover no-repeat;color:#17454D;isolation:isolate}
.v2-storm-world svg{display:block;inline-size:100%;block-size:100%;min-block-size:130px}.v2-storm-world-status{position:absolute;inset:6px 4px auto;margin:0;text-align:center;font-size:14px;font-weight:800;line-height:1.2;z-index:1;pointer-events:none}
.v2-storm-world[data-drop-active]{outline:3px solid #176C65;outline-offset:-4px}.v2-storm-private{height:min(760px,calc(100svh - 110px));min-height:360px;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:6px;padding:8px!important;box-sizing:border-box;color:#17454D}
.v2-storm-private .v2-interaction-header{margin:0;gap:4px}.v2-storm-private .v2-interaction-title{font-size:22px;line-height:1.1;margin:0}.v2-storm-private .v2-interaction-help{display:none}
.v2-storm-forecast,.v2-storm-resources{margin:0;font-size:14px;line-height:1.25;color:#17454D}.v2-storm-resources{font-weight:750}.v2-storm-private .v2-interaction-body{display:grid;grid-template-rows:minmax(55px,1fr) auto;min-height:0;gap:6px}.v2-storm-private .v2-interaction-footer:empty,.v2-storm-send-status:empty{display:none}
.v2-storm-dossier{overflow:auto;min-height:0;overscroll-behavior:contain;display:flex;flex-direction:column;gap:8px}.v2-storm-dossier>*{flex-shrink:0}.v2-storm-dossier .v2-storm-world{block-size:170px}.v2-storm-role{padding:8px;border:1px solid #D9C7A9;border-radius:12px;background:#FFFCF4}.v2-storm-role p,.v2-storm-phase-note,.v2-storm-resolution,.v2-storm-award{margin:4px 0;font-size:14px;line-height:1.3;white-space:pre-line;color:#17454D}
.v2-storm-dock{display:grid;gap:5px;background:#FFF4DE;padding-block-start:4px;border-block-start:1px solid #D9C7A9}.v2-storm-supplies{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:5px}
.v2-storm-supply{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-inline-size:0;min-block-size:76px;padding:3px 1px;border:1.5px solid #D9C7A9;background:#FFFCF4;color:#17454D;border-radius:12px;font:inherit;cursor:grab;touch-action:none}
.v2-storm-supply svg{inline-size:32px;block-size:32px;pointer-events:none}.v2-storm-supply span{font-size:11px;line-height:1.2;white-space:nowrap;pointer-events:none}.v2-storm-supply strong{font-size:12px;pointer-events:none}.v2-storm-supply[aria-pressed='true']{border:2.5px solid #B13E14;background:#F3DFC4}.v2-storm-supply:disabled{opacity:.48;cursor:default}
.v2-storm-power,.v2-storm-lock{min-block-size:44px;border:0;border-radius:14px;padding:6px;font:inherit;font-size:16px;font-weight:750;line-height:1.2;cursor:pointer}.v2-storm-power{background:#F0D4B5;color:#17454D}.v2-storm-power[aria-pressed='true']{background:#176C65;color:#FFF4DE}.v2-storm-lock{min-block-size:48px;background:#B13E14;color:#FFF4DE}.v2-storm-lock:disabled,.v2-storm-power:disabled{opacity:.5;cursor:default}.v2-storm-send-status{font-size:13px;line-height:1.2;margin:0}.v2-storm-private :focus-visible{outline:3px solid #176C65;outline-offset:2px}
.v2-storm-drag-ghost{position:fixed;inline-size:60px;block-size:76px;z-index:10000;pointer-events:none;opacity:.85!important}
[data-storm-public] .v2-surface-body{min-height:0;display:grid}[data-storm-public] .v2-surface-scores{display:none}.v2-storm-tv-layout{height:100%;min-height:0;display:grid;grid-template-columns:minmax(0,2.25fr) minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto auto;gap:clamp(6px,.8vw,24px)}
.v2-storm-tv-layout .v2-storm-world-status{font-size:clamp(15px,2.2vw,64px);inset-block-start:12px}.v2-storm-tv-resources{display:flex;flex-direction:column;justify-content:space-evenly;gap:8px;min-inline-size:0;color:#17454D;white-space:pre-line}.v2-storm-tv-weather,.v2-storm-tv-water,.v2-storm-tv-integrity{font-size:clamp(15px,2vw,60px);line-height:1.15}.v2-storm-tv-forecast{font-size:clamp(13px,1.6vw,48px);line-height:1.2;margin:0}
.v2-storm-roster{grid-column:1/-1;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(4px,.6vw,18px)}.v2-storm-crew{display:flex;flex-direction:column;align-items:center;justify-content:center;min-inline-size:0;padding:clamp(3px,.4vw,12px);border-radius:10px;background:#FFFCF4;color:#17454D;font-size:clamp(12px,1.55vw,44px);line-height:1.2;overflow-wrap:anywhere}.v2-storm-crew bdi{font-weight:800}.v2-storm-tv-receipt{grid-column:1/-1;margin:0;font-size:clamp(12px,1.35vw,40px);line-height:1.2;color:#17454D}
@media(forced-colors:active){.v2-storm-supply,.v2-storm-power,.v2-storm-lock,.v2-storm-crew{border:2px solid ButtonText}.v2-storm-world{outline:2px solid CanvasText}}

/* Original frontal paper skyline. Preview/drag never applies a game move. */
.v2-towers-world{position:relative;min-inline-size:0;min-block-size:0;overflow:hidden;border-radius:16px;background:#FFF4DE url('/towers-paper-coast-v1.jpg') center/cover no-repeat;color:#17454D;isolation:isolate}
.v2-towers-world>svg{position:absolute;inset:0;display:block;inline-size:100%;block-size:100%;pointer-events:none}.v2-towers-hit-layer{position:absolute;inset:0;pointer-events:none}
.v2-towers-plot{position:absolute;display:block;min-inline-size:44px;min-block-size:44px;padding:0!important;background:transparent!important;border:0!important;border-radius:5px!important;box-shadow:none!important;pointer-events:auto;cursor:pointer}.v2-towers-plot:disabled{cursor:default}.v2-towers-plot:focus-visible{outline:3px solid #B13E14;outline-offset:-3px}
.v2-towers-private{height:min(760px,calc(100svh - 110px));min-height:360px;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:6px;padding:8px!important;box-sizing:border-box;color:#17454D}
.v2-towers-private .v2-interaction-header{margin:0;gap:3px}.v2-towers-private .v2-interaction-title{font-size:22px;line-height:1.1;margin:0}.v2-towers-private .v2-interaction-help{display:none}.v2-towers-private .v2-interaction-body{display:grid;grid-template-rows:minmax(55px,1fr) auto;min-height:0;gap:6px}.v2-towers-private .v2-interaction-footer:empty,.v2-towers-send-status:empty{display:none}
.v2-towers-goal-heading{display:flex;gap:6px;align-items:center;min-inline-size:0}.v2-towers-round{flex:1;margin:0;font-size:14px;line-height:1.25;color:#17454D}.v2-towers-help-button{flex:0 0 44px;inline-size:44px;min-block-size:44px;padding:0;border:0;border-radius:12px;background:#F0D4B5;color:#17454D;font:22px system-ui;cursor:pointer}.v2-towers-private-goal{font-size:14px;line-height:1.25;color:#17454D;margin:0}
.v2-towers-turn-notice{margin:0;font-size:13px;line-height:1.2;color:#17454D}
.v2-towers-viewport{min-height:0;min-inline-size:0;max-inline-size:100%;overflow:auto;overscroll-behavior:contain;touch-action:pan-x pan-y;border-radius:16px;direction:ltr}.v2-towers-viewport>.v2-towers-world{flex-shrink:0}
.v2-towers-dock{display:grid;gap:5px;background:#FFF4DE;padding-block-start:4px;border-block-start:1px solid #D9C7A9}.v2-towers-supplies{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}
.v2-towers-floor{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-inline-size:0;min-block-size:88px;padding:4px 1px;border:1.5px solid #D9C7A9;background:#FFFCF4;color:#17454D;border-radius:12px;font:inherit;cursor:grab;touch-action:none;box-shadow:none}.v2-towers-floor svg{inline-size:60px;block-size:38px;pointer-events:none}.v2-towers-floor span{font-size:14px;line-height:1.2;pointer-events:none}.v2-towers-floor strong{font-size:12px;pointer-events:none}.v2-towers-floor[aria-pressed='true']{border:2.5px solid #B13E14;background:#F3DFC4}.v2-towers-floor:disabled{opacity:.48;cursor:default}
.v2-towers-navigation{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;gap:5px;direction:ltr}.v2-towers-prev,.v2-towers-next,.v2-towers-crane{min-block-size:44px;min-inline-size:0;border:0;border-radius:12px;padding:5px;background:#F0D4B5;color:#17454D;font:inherit;font-size:16px;font-weight:650;cursor:pointer}.v2-towers-prev,.v2-towers-next{font:22px system-ui}.v2-towers-private[dir='rtl'] .v2-towers-crane{direction:rtl}.v2-towers-crane[aria-pressed='true']{background:#176C65;color:#FFF4DE}.v2-towers-crane:disabled{opacity:.5;cursor:default}
.v2-towers-build{min-block-size:48px;border:0;border-radius:14px;padding:6px;background:#B13E14;color:#FFF4DE;font:inherit;cursor:pointer}.v2-towers-build strong{display:block;font-size:18px;line-height:1.2;font-weight:750}.v2-towers-build span{display:block;font-size:13px;line-height:1.2;margin-top:2px}.v2-towers-build:disabled{opacity:.5;cursor:default}.v2-towers-send-status{font-size:13px;line-height:1.2;margin:0}.v2-towers-private :focus-visible{outline:3px solid #176C65;outline-offset:2px}
.v2-towers-drag-ghost{position:fixed;inline-size:70px;block-size:88px;z-index:10000;pointer-events:none;opacity:.85!important}.v2-towers-final-receipt{font-size:14px;line-height:1.3;color:#17454D;overflow:auto;min-height:0}.v2-towers-final-receipt .v2-towers-roster{grid-template-columns:repeat(2,minmax(0,1fr))!important}.v2-towers-final-receipt .v2-towers-builder{font-size:14px;min-block-size:54px}
.v2-towers-help{max-inline-size:min(90vw,560px);max-block-size:80svh;overflow:auto;border:1.5px solid #D9C7A9;border-radius:18px;padding:20px;background:#FFF4DE;color:#17454D;line-height:1.4}.v2-towers-help::backdrop{background:rgba(23,69,77,.45)}.v2-towers-help-close{min-block-size:44px;inline-size:100%;border:0;border-radius:12px;background:#B13E14;color:#FFF4DE;font:inherit;font-weight:750;cursor:pointer}
[data-towers-public] .v2-surface-body{min-height:0;display:grid}[data-towers-public] .v2-surface-scores{display:none}.v2-towers-tv-layout{height:100%;min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:clamp(6px,.8vw,24px)}.v2-towers-tv-goal,.v2-towers-tv-receipt{margin:0;color:#17454D;font-size:clamp(12px,1.5vw,46px);line-height:1.2}
.v2-towers-tv-receipt{line-height:1.35}
html .v2-game-surface[data-towers-public][data-mode='tv']{flex:1 1 0;display:grid;grid-template-rows:auto minmax(0,1fr) auto;block-size:100%;min-block-size:0;overflow:hidden;gap:clamp(6px,1vh,20px);padding:clamp(8px,1.5vh,28px)}
.v2-towers-roster{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:clamp(4px,.6vw,18px);min-inline-size:0}.v2-towers-builder{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-inline-size:0;min-block-size:clamp(40px,7vh,200px);padding:clamp(3px,.4vw,12px);border:1.5px solid var(--builder-color,#176C65);border-radius:10px;background:#FFFCF4;color:#17454D;font-size:clamp(12px,1.55vw,44px);line-height:1.2;overflow-wrap:anywhere}.v2-towers-builder[data-winner='true']{border-width:3px}.v2-towers-builder bdi{font-weight:800}
@media(forced-colors:active){.v2-towers-floor,.v2-towers-build,.v2-towers-crane,.v2-towers-builder{border:2px solid ButtonText}.v2-towers-world{outline:2px solid CanvasText}}
