/* Shared visual scale. Board tiles, maps, sprites and media keep their sizing. */
:root{--ui-space:12px;--ui-radius:12px;--ui-surface:rgba(8,25,45,.96);--ui-border:#47647f;--ui-muted:#c5d5e7;--ui-action:#f4c542;--ui-text:#f4f8ff}
body{font-size:16px;line-height:1.45}
button,input,textarea,select{font-family:inherit}
button:not(.mode-card,.tile,.seq-tile,.sprite-frame,.plus-slot,.pair-edit,.checkpoint-edit,.small-add){font-size:14px;line-height:1.3;border-radius:8px;min-height:38px;padding:8px 12px;font-weight:650}
input:not([type=checkbox],[type=radio],[type=range],[type=file]),textarea,select{font-size:16px;line-height:1.4;border-radius:8px}
button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid #7ee8dc;outline-offset:3px}
button:disabled{cursor:not-allowed;opacity:.55}
.row{gap:8px}
h1{font-size:clamp(24px,2.2vw,32px);line-height:1.2}h2{font-size:clamp(20px,1.8vw,26px);line-height:1.25}h3{font-size:18px;line-height:1.3}
.small,.muted,small{line-height:1.45}
body:is(.jeopardy-page,.pokemon-page,.scavenger-page) :is(.card,.score,.question,.player-side-scoreboard),#modal.host-play-screen :is(.question,.host-play-side,.host-play-header),.seq-header,.seq-board,.seq-scores,.seq-preview,.seq-tools,.host-phase-bar,.response-phase{background-color:var(--ui-surface);border-color:var(--ui-border);box-shadow:0 6px 22px #0004;color:var(--ui-text)}
body:is(.jeopardy-page,.pokemon-page,.scavenger-page) :is(.muted,.small),.host-play-screen :is(.small,.muted){color:var(--ui-muted)}
.card,.host-play-side,.response-team,.response-own{border-radius:var(--ui-radius)}
.host-play-header,.host-phase-bar,.response-phase{gap:var(--ui-space)}
.host-play-status,.qol-round-status,.response-progress,.scavenger-answer-status,.seq-joker,.rule-status{font-size:14px;line-height:1.45;font-weight:600}
.host-play-status{background:#173b4c;color:#d5fff5;border:1px solid #4f8b91}
.ui-managed button.primary:not(.ui-main-action){background:#183956;color:#f4f8ff;border:1px solid #557491;box-shadow:none}
button.ui-main-action:not(:disabled){background:var(--ui-action)!important;color:#102136!important;border:2px solid #ffe08a!important;box-shadow:0 3px 12px #0004;font-weight:750}
button[aria-pressed=true]:not(.ui-main-action){outline:2px solid #76dbcf;outline-offset:1px}
.scav-review-actions{padding:12px;border:1px solid #7195aa;border-radius:12px;background:#102b40}
body:not(.obs) .soul-dashboard-grid :is(.panel,.pair){box-shadow:0 4px 16px #0003}
body:not(.obs) .soul-dashboard-grid .pair{background:#0b2132ed}
body:not(.obs) .soul-dashboard-grid .mon{background:transparent}
body:not(.obs) :is(.welcome,.soul-dashboard .bar){background:#10273cef;border:1px solid var(--ui-border);border-radius:12px;padding:16px}
body:not(.obs) .soul-dashboard-grid{gap:16px}
body:not(.obs) .soul-dashboard-grid .panel{padding:12px}
body:not(.obs) .soul-dashboard-grid .panel-heading{margin-bottom:8px}
body:not(.obs) .soul-dashboard-grid :is(.muted,.connection){color:#d0e8f4}
.soul-dashboard .bar nav button{font-size:14px;padding:8px 12px}
/* Stream canvases remain transparent; sprite-only sources retain exact geometry. */
body.obs.obs-sprites{font-size:inherit;line-height:normal}
@media(max-width:760px){button:not(.mode-card,.tile,.seq-tile,.sprite-frame,.plus-slot,.pair-edit,.checkpoint-edit,.small-add){padding:8px 10px}.host-play-header h2{font-size:22px}.host-phase-bar,.response-phase{padding:12px}.seq-timer-controls{gap:6px}.seq-timer-controls button{min-height:34px;font-size:13px}.soul-dashboard .bar nav{max-width:100%;width:100%}}
/* Selecting a tile and judging an answer are tasks with several equally valid choices. */
.seq-board:has(.seq-search),.scav-review-current{border:2px solid #5caaa8}
.response-actions .row button{min-height:40px;font-size:14px}
button:not(.mode-card,.primary,.danger,.quiz-correct,.quiz-wrong,.scav-review-correct,.scav-review-wrong,.tile,.seq-tile,.buzzer-button,.quiz-verdict,.sprite-frame,.plus-slot,.pair-edit,.checkpoint-edit,.small-add,.ui-main-action){background-color:#183956;color:#f4f8ff;border-color:#557491}
body:is(.jeopardy-page,.scavenger-page,.soul-dashboard) input::placeholder,body:is(.jeopardy-page,.scavenger-page,.soul-dashboard) textarea::placeholder{color:#b6c8dc;opacity:1}

/* Hub choices are large image cards, not compact command buttons. */
.mode-selection .hub-cards .mode-card{aspect-ratio:1 / 1;min-height:270px;padding:28px;border-radius:20px}
@media(max-width:900px){.mode-selection .hub-cards{max-width:420px}.mode-selection .hub-cards .mode-card{min-height:0}}

/* Jeopardy boards in both apps: readable tiles and matching team cards. */
body.jeopardy-page .board :is(.cat,.tile),
body.jeopardy-page .score{
  background:linear-gradient(180deg,rgba(22,69,138,.97),rgba(14,46,99,.97));
  border:2px solid #426da7;
  border-radius:12px;
  background-clip:padding-box;
  overflow:hidden;
}
/* Player tiles are disabled navigation, not unavailable content. */
body.jeopardy-page .board .tile:not(.used):not(.empty){opacity:1}
body.jeopardy-page .board .tile.used{opacity:.55}
body.jeopardy-page .board .tile.empty{opacity:.45}
/* The score list itself must not leave a rectangular backing behind cards. */
body.jeopardy-page .player-side-scoreboard{
  background:transparent;
  border:0;
  border-radius:12px;
  box-shadow:none;
}
body.jeopardy-page .player-side-scoreboard-list{border-radius:inherit}
body.jeopardy-page .score{isolation:isolate;overflow-wrap:anywhere}
