/* Tasleya Midnight gameplay. All content rules are scoped to existing runtime
   hosts. Visibility, timers, transforms and modal lifecycle remain engine-owned. */
.gp {
 --gp-canvas:#0b1020; --gp-surface:#151d32; --gp-raised:#1d2842;
 --gp-text:#fff8e8; --gp-muted:#bdc7df; --gp-line:#3c4967;
 --gp-blue:#3887ff; --gp-violet:#7657ff; --gp-yellow:#ffd84d; --gp-coral:#ff5d73; --gp-aqua:#27d3c3;
 --gp-accent:#ffd84d; --gp-tint:#28283a;
 color:var(--gp-text); font-family:"Tasleya Plex",sans-serif; line-height:1.65;
 width:100%; min-width:0; text-align:start; color-scheme:dark;
}
.gp-forbidden {--gp-accent:#ff5d73;--gp-tint:#342031}
.gp-films {--gp-accent:#a994ff;--gp-tint:#271f44}
.gp-map {--gp-accent:#27d3c3;--gp-tint:#122d3e}
.gp-hint {--gp-accent:#27d3c3;--gp-tint:#16343d}
.gp-emoji {--gp-accent:#ba9cff;--gp-tint:#302144}
.gp-xo {--gp-accent:#95b4ff;--gp-tint:#20284b}
body.p2-game.gp-page:not(:has(.p2-entry:not(.hidden):not([style*="display: none"]):not(.screen),.p2-entry.screen.active:not(.hidden))),
body.gp-original-page:has(#gameScreen[style*="display: block"]) {
 background:#0b1020; color:#fff8e8; padding:clamp(12px,2vw,28px); padding-bottom:max(24px,env(safe-area-inset-bottom));
 font-family:"Tasleya Plex",sans-serif; min-height:100svh;
}
body.gp-page > .shell:has(.gp > *) {max-width:1200px}
/* Preserve existing exit controls, with compact typography and no new navigation. */
body.gp-page > .shell > :is(.top-nav,.back-link),body.gp-page .gameplay-toolbar button,body.gp-page #xoRuntimeNav button {
 font-family:"Tasleya Plex",sans-serif; font-size:14px; border-radius:12px; min-height:44px;
}
body.gp-page > .shell > h1 {font-family:"Tasleya Alexandria",sans-serif;font-size:22px;color:#fff8e8}
body.p2-game.gp-page:not(:has(.p2-entry:not(.hidden):not([style*="display: none"]):not(.screen),.p2-entry.screen.active:not(.hidden))) .gp:has(> *)::before,.gp-original:has(#gameScreen[style*="display: block"])::before {
 content:attr(data-game-label);display:block;min-height:40px;padding:8px 48px 8px 0;margin-block:12px 20px;
 background:url('/assets/brand-v1/mark.svg') right center/32px no-repeat;
 color:var(--gp-text);font:700 17px/1.5 "Tasleya Alexandria",sans-serif;
 border-bottom:1px solid var(--gp-line);
}
.gp :is(h1,h2,h3,.main-word,.movie-title,.hint-text,.phase-title,.answer-text,.result-title,.winner-line) {font-family:"Tasleya Alexandria",sans-serif;line-height:1.6;color:var(--gp-text)}
.gp :is(h1,h2) {font-size:clamp(22px,2.4vw,34px)}
.gp :is(.subtitle,.helper,.helper-note,.stat-label,.meta-label,.status-label,.score-title,.hint-label,.target-hint,.selection-helper,.game-meta,.board-progress) {color:var(--gp-muted)}
.gp :is(.panel,.hero,.setup,.sidebar,.modal-content,.modal-card,.popup),.gp dialog {
 background:var(--gp-surface);color:var(--gp-text);border:1px solid var(--gp-line);border-radius:24px;
 box-shadow:0 16px 48px #0003;padding:clamp(18px,2.6vw,32px);
}
.gp :is(.card,.phase-card,.hint-box,.question-box,.emoji-card,.selection-panel,.result-panel,.target-card,.answer,.card-extra) {
 background:var(--gp-tint);border:1px solid var(--gp-line);border-radius:20px;color:var(--gp-text);box-shadow:none;
}
.gp :is(.card,.hint-box,.question-box,.selection-panel,.result-panel,.card-extra) {padding:clamp(16px,2vw,28px)}
.gp :is(button,input,select,textarea) {font-family:inherit}
.gp button {min-height:48px;border-radius:12px;border:1px solid var(--gp-line);background:var(--gp-raised);color:var(--gp-text);font-size:16px;font-weight:600;line-height:1.55;padding:12px 18px;box-shadow:none;touch-action:manipulation}
.gp :is(.primary-btn,.start-btn,.btn-primary,.btn.primary,.category-start-btn) {background:var(--gp-yellow);color:#0b1020;border-color:var(--gp-yellow);font-weight:700}
.gp :is(.secondary-btn,.ghost-btn,.btn-secondary,.btn.secondary,.btn-light,.btn-tertiary) {background:var(--gp-raised);color:var(--gp-text);border:1px solid var(--gp-line)}
.gp :is(.danger-btn,.btn-danger,.btn-stop,.result-btn.wrong) {background:#462130;color:#ffdce2;border-color:#e57488}
.gp :is(.success-btn,.btn-success,.result-btn.correct) {background:var(--gp-aqua);color:#0b1020;border-color:var(--gp-aqua)}
.gp :is(.result-btn.other,.btn-accent) {background:#292448;color:#e2daff;border-color:#a994ff}
.gp button:disabled {opacity:.5;cursor:not-allowed;box-shadow:none}
.gp button:not(:disabled):hover {filter:brightness(1.1)}
.gp :is(button,a,input,select,textarea):focus-visible {outline:3px solid #ffd84d;outline-offset:4px}
.gp :is(input:not([type=checkbox]):not([type=radio]),select,textarea) {min-height:48px;max-width:100%;background:#0b1020;color:#fff8e8;border:1px solid #6e7b98;border-radius:12px;padding:10px 14px;font-size:16px}
.gp input::placeholder {color:#aebbd4}
.gp :is(.score-card,.stat-card,.team-card,.team-score,.score-item,.team-pill,.status-card,.status-pill,.meta-item,.meta-pill,.pill) {background:var(--gp-raised);border:1px solid var(--gp-line);border-radius:14px;box-shadow:none;color:var(--gp-text)}
.gp :is(.score,.stat-value,.status-value,.team-score,.score-card p,.team-score p) {font-variant-numeric:tabular-nums;color:var(--gp-text)}
.gp :is(.score,.score-card p,.stat-card .stat-value,.team-score p) {font-size:clamp(26px,3vw,40px);font-weight:700;line-height:1.3}
.gp :is(.current-team,.active-team,.score-item.active,.team-pill.active) {border-color:var(--gp-accent);box-shadow:inset 0 3px var(--gp-accent)}
.gp :is(.timer,.timer-box,.question-timer) {background:#0b1020;color:var(--gp-text);border:1px solid var(--gp-line);border-radius:16px;font-variant-numeric:tabular-nums;box-shadow:none}
.gp :is(.low-time,.timer.warning,.timer.danger) {color:#ffadb9;border-color:#ff5d73}
.gp :is(.timer-label,.timer-value) {color:inherit}
.gp :is(.status-msg,.status-text,.status,.loading,.fallback-note,.setup-error,.error-box,.error-banner,.question-status,.image-error) {font-family:"Tasleya Plex",sans-serif;line-height:1.65}
.gp :is(.bad,.error,.error-box,.error-banner,.setup-error) {background:#3d1f2e;color:#ffdce2;border-color:#e57488}
.gp :is(.good,.status.success) {color:#a6f5e9}
.gp :is(.modal,.overlay) {background-color:#030713d9;backdrop-filter:blur(8px)}
.gp dialog::backdrop {background:#030713d9;backdrop-filter:blur(8px)}
.gp :is(.modal-content,.modal-card,.popup),.gp dialog {max-height:calc(100dvh - 32px);overflow-y:auto;overscroll-behavior:contain}
.gp :is(.result-title,.winner-line,.final-title,.result-panel h3,.summary-title) {color:var(--gp-accent)}
.gp :is(.actions,.action-row,.modal-actions,.selection-actions,.result-actions) {gap:12px}
/* Original: preserve board columns, image transforms and modalIn/modalOut events. */
.gp-original .bg-animated {background:#0b1020;opacity:.2;pointer-events:none}
.gp-original .bg-particles {opacity:0}
.gp-original .app {gap:24px;max-width:1600px;margin-inline:auto}
.gp-original .sidebar {gap:12px}
.gp-original .team-card {padding:14px}
.gp-original .board-cell.category {background:#25243f;color:#fff8e8;border-color:#5b4a85;font-family:"Tasleya Alexandria",sans-serif;font-size:clamp(14px,1.3vw,20px)}
.gp-original .board-cell.tile {background:#1d2842;color:#ffd84d;border-color:#4c5977;font-size:clamp(22px,2.3vw,36px);min-height:70px}
.gp-original .board-cell.tile.used {opacity:.45}
.gp-original #questionText {font-size:clamp(22px,2.6vw,38px);margin-block:16px}
.gp-original .question-timer {padding:6px 16px;font-size:24px;min-width:100px}
.gp-original .podium-step {background:#7657ff}
.gp-original .podium-column.winner .podium-step,.gp-original .podium-first .podium-step {background:#ffd84d;color:#0b1020}
.gp-original .podium-name {overflow-wrap:anywhere}
/* Forbidden: target first, prohibited words clearly separated. */
.gp-forbidden .card {border-top:4px solid #ff5d73}
.gp-forbidden .word-stage {background:transparent;border:0;padding:4px 12px 18px}
.gp-forbidden .main-word {font-size:clamp(36px,5vw,64px);color:#fff8e8;margin:4px 0}
.gp-forbidden .forbidden-title {color:#ffadb9;font-weight:700}
.gp-forbidden .forbidden-list {gap:10px}
.gp-forbidden .forbidden-list li {background:#1d192b;border:1px solid #975365;color:#fff8e8;border-radius:12px;font-size:clamp(19px,2vw,26px);padding:10px}
.gp-forbidden .timer-box {padding:10px 18px;font-size:28px}
.gp-forbidden .turn-meta {gap:10px;margin-block:16px}
.gp-forbidden .meta-value {font-size:18px;color:#fff8e8}
/* Cinema: a quiet violet stage and a clear card hierarchy. */
.gp-films .film-card {background:#27203f;color:#fff8e8;border:1px solid #7960bd;border-radius:16px;min-height:112px}
.gp-films .film-card :is(.points,.film-points) {color:#ffd84d}
.gp-films .movie-title {background:#271f44;border:1px solid #7960bd;border-radius:20px;padding:24px;font-size:clamp(26px,4vw,48px);color:#fff8e8}
.gp-films .timer {font-size:clamp(54px,8vw,88px);padding:10px;margin-block:20px}
/* Geography: retain the full map and all engine-owned SVG colors/transforms. */
.gp-map .scoreboard {background:var(--gp-surface);border:1px solid var(--gp-line);border-radius:20px;padding:16px;gap:12px}
.gp-map .target-card {padding:12px 18px}
.gp-map .target {color:#fff8e8;font-family:"Tasleya Alexandria",sans-serif;font-size:clamp(22px,3vw,36px)}
.gp-map .map-stage {border:1px solid #416681;border-radius:20px;background:#0b192c;min-height:380px}
.gp-map .popup {border-color:#5e9aa4}
.gp-map .meta-pill {padding:6px 12px}
.gp-map .team-score {background:transparent;border:0;font-size:24px}
/* Auction: gold bid, distinct team/leader status, private judge reference. */
.gp-auction .round-flow-step {background:#182138;color:#cbd5e8;border-color:#3c4967}
.gp-auction .round-flow-step.active {background:#ffd84d;color:#0b1020}
.gp-auction .phase-card {border-top:3px solid #ffd84d;padding:clamp(18px,3vw,32px)}
.gp-auction :is(.bid-board,.bid-status-box,.judge-assist-panel) {background:#151d32;border-color:#4c5977;color:#fff8e8;border-radius:16px}
.gp-auction :is(.bid-value,.target-major) {color:#ffd84d;font-family:"Tasleya Alexandria",sans-serif;font-size:clamp(44px,7vw,72px)}
.gp-auction .question-prompt {font-family:"Tasleya Alexandria",sans-serif;color:#fff8e8;font-size:clamp(22px,3vw,34px)}
.gp-auction .timer-value {font-size:clamp(48px,7vw,80px)}
.gp-auction .current-category-value {color:#ffd84d}
/* Clues: progress stays in the existing hint text and status chips. */
.gp-hint .hint-box {border-top:3px solid #27d3c3;padding:clamp(24px,4vw,44px)}
.gp-hint .hint-text {font-size:clamp(26px,3.8vw,44px);color:#fff8e8}
.gp-hint .team-card {padding:18px}
.gp-hint .team-status-chip {color:#e2e9fa;background:#24354e;border-color:#566b8c}
.gp-hint .team-status-chip.blocked {color:#ffdce2;background:#462130}
/* Emoji: clue dominates; form remains a compact, reachable action area. */
.gp-emoji .emoji-card {background:#271f44;border-color:#7960bd;padding:clamp(24px,4vw,42px)}
.gp-emoji .emoji-value {font-size:clamp(60px,10vw,104px);line-height:1.4;overflow-wrap:anywhere}
.gp-emoji .timer {font-size:22px;padding:8px 18px;width:fit-content;margin:12px auto}
.gp-emoji .answer-form {gap:12px}
.gp-emoji .answer-text {color:#fff8e8;font-size:clamp(24px,3vw,36px)}
.gp-emoji .btn:not(.secondary) {background:#ffd84d;color:#0b1020;border-color:#ffd84d}
/* XO: board dimensions and cell IDs/data remain exactly the same. */
.gp-xo .turn-banner {background:#20284b;border:1px solid #768bcc;border-radius:16px;box-shadow:none}
.gp-xo .board-wrap {background:#10182c;border:1px solid #3c4967;border-radius:20px;padding:12px}
.gp-xo :is(.row-label,.col-label) {background:#20284b;color:#e9e4ff;font-family:"Tasleya Alexandria",sans-serif;font-size:clamp(13px,1.5vw,20px)}
.gp-xo .cell-btn {background:#1d2842;border:1px solid #637bab;border-radius:12px;min-height:76px;font-size:clamp(32px,5vw,64px);color:#fff8e8;padding:8px}
.gp-xo .cell-btn.selected {outline:3px solid #ffd84d;outline-offset:-4px}
.gp-xo .cell-btn.winning-cell {background:#294d53;border-color:#27d3c3}
.gp-xo .mode-card {background:#20284b;border-color:#768bcc;color:#fff8e8}
@media(max-width:700px){
 .gp :is(.panel,.hero,.setup,.sidebar) {padding:16px;border-radius:20px}
 .gp :is(.score-grid,.status-bar,.score-strip) {gap:8px}
 .gp :is(.score-card,.stat-card,.score-item,.team-pill) {padding:10px}
 .gp :is(.stat-label,.team-name,.status-label) {font-size:13px}
 .gp :is(.actions,.action-row,.modal-actions) {gap:8px}
 .gp button {padding:11px 12px;font-size:15px}
 .gp :is(.modal,.overlay) {padding:12px}
 .gp :is(.modal-content,.modal-card,.popup),.gp dialog {padding:18px;max-width:calc(100vw - 24px);max-height:calc(100dvh - 24px);border-radius:20px}
 .gp-original .app {gap:12px}
 .gp-original .sidebar {padding:12px;gap:8px}
 .gp-original .team-card {padding:8px}
 .gp-original .board-cell.tile {min-height:54px;padding:8px}
 .gp-original .board-cell.category {padding:10px 4px}
 .gp-original .score {font-size:26px}
 .gp-forbidden .main-word {font-size:38px}
 .gp-forbidden .forbidden-list li {font-size:19px;padding:8px}
 .gp-forbidden .turn-meta {gap:6px}
 .gp-forbidden .meta-item {padding:8px}
 .gp-forbidden .meta-value {font-size:15px}
 .gp-films .film-card {min-height:88px;padding:10px}
 .gp-films .movie-title {padding:18px}
 .gp-map .scoreboard {padding:10px;gap:8px}
 .gp-map .question-meta-row {gap:6px;margin-block:8px}
 .gp-map .target-card {padding:10px}
 .gp-map .target-support-row {gap:6px}
 .gp-map .map-stage {min-height:330px}
 .gp-map .team-score {font-size:21px}
 .gp-auction .round-flow-list {gap:5px}
 .gp-auction .round-flow-step {font-size:11px;padding:6px}
 .gp-auction .status-pill {padding:8px}
 .gp-auction .status-value {font-size:17px}
 .gp-auction .phase-card {padding:16px}
 .gp-hint .hint-box {padding:24px 16px}
 .gp-hint .team-card {padding:12px}
 .gp-hint .teams-actions {gap:8px}
 .gp-xo .board-wrap {padding:6px}
 .gp-xo .cell-btn {min-height:64px;padding:4px}
 .gp-xo .row-label,.gp-xo .col-label {font-size:13px;padding:7px 4px;overflow-wrap:anywhere}
 .gp-xo .board-grid {width:100%;table-layout:fixed}
}
@media(prefers-reduced-motion:reduce){
 .gp button,.gp .film-card,.gp .emoji-card,.gp .turn-banner {transition:none}
 /* Original modal animationend is intentionally not overridden. Its existing
    reduced-motion engine path already closes these dialogs synchronously. */
}
/* Dense score views keep the clue and controls close together on phones. */
.gp :is(.status-msg,.helper,.result-text,.players-list li,.team-name,.team-card h4) {overflow-wrap:anywhere}
.gp-forbidden .score-strip {grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.gp-forbidden .score-strip li {background:#1d2842;border:1px solid #4c5977;padding:12px;gap:4px}
.gp-forbidden .score-strip li.current-team {border-color:#ff5d73;background:#342031}
.gp-forbidden .score-strip .team-score {background:transparent;border:0;border-radius:0}
.gp-forbidden .turn-meta {grid-template-columns:repeat(3,minmax(0,1fr))}
.gp-original #otherTeamBtn {background:#462130;color:#ffdce2;border-color:#e57488}
.gp-original #newGameBtn {background:#ffd84d;color:#0b1020}
@media(max-width:700px){
 .gp-original .sidebar {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
 .gp-original .sidebar h1 {font-size:22px;margin:0}
 .gp-original .sidebar .status-card {grid-column:1/-1;padding:8px}
 .gp-original .sidebar:has(#team2Card.hidden) #team1Card {grid-column:1/-1;display:grid;grid-template-columns:1fr auto;gap:6px;align-items:center;background:#1d2842}
 .gp-original .sidebar:has(#team2Card.hidden) #team1Card .team-name-label {grid-column:1/-1}
 .gp-original .sidebar:has(#team2Card.hidden) #team1Card .score-adjustments {grid-column:1/-1;display:flex;gap:8px}
 .gp-original .sidebar .adjust-btn {flex:1;min-height:44px;padding:6px}
 .gp-original .sidebar .team-name-input {font-size:14px}
 .gp-forbidden .score-wrap {padding:10px}
 .gp-forbidden .score-title {margin:0 0 6px;font-size:13px}
 .gp-forbidden .score-strip li {padding:8px}
 .gp-forbidden .score-strip li .team-name {font-size:13px}
 .gp-forbidden .score-strip li .team-score {font-size:23px}
 .gp-forbidden .score-strip li .team-meta {font-size:11px}
 .gp-forbidden .turn-meta {margin-block:10px}
 .gp-forbidden .meta-label {font-size:11px}
 .gp-forbidden .forbidden-list {grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
 .gp-forbidden .forbidden-list li:last-child {grid-column:1/-1}
 .gp-forbidden .forbidden-list li {font-size:17px;padding:6px}
 .gp-forbidden .word-stage {padding:0 4px 10px}
 .gp-forbidden .actions {grid-template-columns:repeat(2,minmax(0,1fr))}
 .gp-forbidden #btn-correct {grid-column:1/-1}
}
.gp-forbidden .turn-meta {display:grid}
.gp-emoji .score-item .team-score {background:transparent;border:0}
@media(max-width:700px){
 .gp-hint .score-grid,.gp-auction .score-grid {grid-template-columns:repeat(2,minmax(0,1fr))}
 .gp-hint .teams-actions {grid-template-columns:repeat(2,minmax(0,1fr))}
 .gp-hint .team-card h4 {font-size:15px}
 .gp-hint .team-status-chip {font-size:11px}
 .gp-hint .team-card .actions button {font-size:13px;min-height:52px;padding:8px}
 .gp-emoji .emoji-card {min-height:180px;padding:18px}
 .gp-auction .score-card h3 {font-size:14px}
 .gp-auction .score-card p {font-size:28px}
}
body.p2-game.gp-page:not(:has(.p2-entry:not(.hidden):not([style*="display: none"]):not(.screen),.p2-entry.screen.active:not(.hidden))) #tasleyaGlobalContactBtn {
 position:static;display:block;margin:16px auto;width:fit-content;transform:none;
}
/* The compact runtime title replaces only the old decorative heading/copy. */
body.gp-page > .shell:has(.gp > *) > :is(h1,.subtitle) {display:none}
.gp-original .team-card::before {content:none}
@media(max-width:700px){
 .gp-original .sidebar h1,.gp-original .sound-toggle-btn,.gp-original #newGameBtn {grid-column:auto}
 .gp-original .sidebar h1 {align-self:center}
}
/* Decorative borders must never intercept the existing score controls. */
.gp-original .team-card::after {pointer-events:none}
#runtimeShellMount.gp button {min-height:48px}
.gp button {min-width:44px}
#runtimeShellMount.gp button {min-width:44px}
.gp .question-timer.timer-red {color:#ffadb9;border-color:#ff5d73}
.gp-xo .cell-btn:disabled {opacity:1}
@media(prefers-reduced-motion:reduce){.gp-auction .phase-card {transition:none}}
.gp-xo .cell-btn.claimed-x {color:#95b4ff;border-color:#3887ff}
.gp-xo .cell-btn.claimed-o {color:#ba9cff;border-color:#7657ff}
.gp-xo .cell-btn.winning-cell {color:#fff8e8;border-color:#27d3c3}
