:root {
    --kj-bg-1: #0d0a3a;
    --kj-bg-2: #1c1273;
    --kj-cyan: #00c3e3;
    --kj-red: #e60012;
    --kj-yellow: #ffd84a;
    --kj-green: #2ecc71;
    --kj-white: #ffffff;
    --kj-shadow: 0 6px 0 0 #04042a;
    --kj-border: 4px solid var(--kj-white);
    --kj-step-shadow:
        2px 0 0 #000, -2px 0 0 #000, 0 2px 0 #000, 0 -2px 0 #000,
        4px 4px 0 #000;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; height: 100%; }

body {
    background:
        radial-gradient(circle at 20% 0%, #2b2487 0%, transparent 50%),
        radial-gradient(circle at 80% 100%, #4c2db8 0%, transparent 50%),
        linear-gradient(180deg, var(--kj-bg-1), var(--kj-bg-2));
    color: var(--kj-white);
    font-family: ui-monospace, "Cascadia Mono", "Consolas", monospace;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    overflow-x: hidden;
}

main { min-height: 100vh; padding: 32px 48px; }

.kj-title {
    font-size: 5rem;
    margin: 0 0 24px;
    color: var(--kj-yellow);
    text-shadow: var(--kj-step-shadow);
    letter-spacing: 0.12em;
}

.join-strip {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 24px;
    margin-bottom: 24px;
}

.code-card, .qr-card, .magic-card, .players-strip, .start-card,
.audience-tally, .receipts-panel {
    background: rgba(255, 255, 255, 0.08);
    border: var(--kj-border);
    border-radius: 12px;
    box-shadow: var(--kj-shadow);
    padding: 20px;
}

.code-label, .qr-label, .players-label { font-size: 0.9rem; color: var(--kj-cyan); margin-bottom: 12px; }

.code-value {
    font-size: 6rem;
    color: var(--kj-yellow);
    letter-spacing: 0.2em;
    text-shadow: var(--kj-step-shadow);
    text-align: center;
}

#qr-host { display: flex; justify-content: center; }
#qr-host svg { width: 220px; height: 220px; background: white; padding: 12px; border-radius: 8px; }

.share-url { font-size: 0.8rem; margin-top: 10px; color: var(--kj-cyan); word-break: break-all; }

#player-list { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 12px; }
#player-list li {
    background: var(--kj-cyan); color: #000;
    padding: 6px 14px; border-radius: 6px;
    box-shadow: 0 3px 0 #04042a;
    font-weight: bold;
    display: flex; align-items: center; gap: 8px;
}
.player-chip-avatar {
    width: 28px; height: 28px;
    image-rendering: pixelated;
    border-radius: 4px;
    background: rgba(0,0,0,0.4);
}

button {
    font-family: inherit;
    text-transform: uppercase;
    background: var(--kj-red);
    color: var(--kj-white);
    border: 3px solid var(--kj-white);
    box-shadow: 0 5px 0 #04042a;
    padding: 12px 18px;
    font-size: 1.1rem;
    cursor: pointer;
    transition: transform 60ms;
}
button:disabled { background: #555; cursor: not-allowed; }
button:active:not(:disabled) { transform: translateY(3px); box-shadow: 0 2px 0 #04042a; }

#send-sms-btn { width: 100%; }

.field { display: block; margin-bottom: 12px; }
.field span { display: block; font-size: 0.85rem; color: var(--kj-cyan); margin-bottom: 6px; }
.field select {
    width: 100%; padding: 8px; font-family: inherit; font-size: 1rem;
    border: 3px solid var(--kj-white); background: #1a0e54; color: var(--kj-white);
    text-transform: uppercase;
}

#start-btn { width: 100%; margin-top: 8px; background: var(--kj-green); }

.daily-card, .hof-card {
    background: rgba(255,255,255,0.06);
    border: var(--kj-border);
    border-radius: 12px;
    padding: 18px;
    margin-top: 18px;
}
.daily-label, .hof-label { color: var(--kj-yellow); font-size: 0.95rem; margin-bottom: 10px; }
.daily-question { text-transform: none; font-size: 1.2rem; line-height: 1.3; margin-bottom: 10px; }
.daily-options { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.daily-options li { background: rgba(0,0,0,0.3); padding: 8px 12px; border-radius: 6px; text-transform: none; font-size: 0.95rem; }
.daily-options li::before { content: attr(data-label) ". "; color: var(--kj-cyan); font-weight: bold; }

.hof-list { list-style: none; padding: 0; margin: 0; counter-reset: hof; }
.hof-list li { counter-increment: hof; padding: 6px 0; border-bottom: 1px dashed rgba(255,255,255,0.15); display: flex; justify-content: space-between; align-items: center; }
.hof-list li::before { content: counter(hof) ". "; color: var(--kj-yellow); margin-right: 8px; min-width: 28px; }
.hof-list .name { flex: 1; }
.hof-list .amount { color: var(--kj-cyan); font-weight: bold; }

/* ---- Attribution ---- */
#attribution { padding: 0 48px; }
.attribution-prompt { font-size: 2.5rem; color: var(--kj-yellow); text-shadow: var(--kj-step-shadow); }
.attribution-quote {
    background: rgba(255,255,255,0.08);
    border: var(--kj-border);
    border-left-width: 12px;
    border-radius: 12px;
    padding: 28px 32px;
    font-size: 2rem;
    line-height: 1.4;
    text-transform: none;
    margin: 16px 0;
    color: #fff;
    font-style: italic;
}
.attribution-meta { color: var(--kj-cyan); margin-bottom: 16px; }
.attribution-candidates { list-style: none; padding: 0; margin: 0 0 16px; display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.attribution-candidates li {
    background: linear-gradient(180deg, #243497, #1a2070);
    border: 3px solid var(--kj-cyan);
    border-radius: 10px;
    padding: 12px 16px;
    display: flex; gap: 12px; align-items: center;
    text-transform: none; font-size: 1.2rem;
}
.attribution-candidates li img {
    width: 48px; height: 48px;
    image-rendering: pixelated;
    border-radius: 6px;
    background: rgba(0,0,0,0.4);
}
.attribution-candidates li.correct { border-color: var(--kj-green); background: linear-gradient(180deg, var(--kj-green), #155724); }
.attribution-candidates li.picked { box-shadow: 0 0 0 4px var(--kj-yellow); }
.attribution-candidates li .pickers { color: var(--kj-yellow); margin-left: auto; font-size: 0.85rem; }

#start-attribution-btn { width: 100%; background: var(--kj-cyan); color: #000; margin-top: 8px; }

/* ---- Fastest finger ---- */
#fastest-finger { padding: 0 48px; }
.ff-grid { margin-bottom: 24px; }
.ff-grid .option { cursor: default; }
.ff-status { display: flex; justify-content: space-between; align-items: center; gap: 24px; margin-bottom: 16px; }
#ff-submitted-count { font-size: 1.3rem; color: var(--kj-cyan); }
#ff-close-btn { background: var(--kj-yellow); color: #000; }
.ff-result {
    background: rgba(255,255,255,0.08);
    border: var(--kj-border);
    border-radius: 12px;
    padding: 24px;
    text-align: center;
    font-size: 1.4rem;
}
.ff-result .winner { color: var(--kj-yellow); font-size: 2.4rem; text-shadow: var(--kj-step-shadow); }
.ff-result .correct-order { margin-top: 12px; color: var(--kj-cyan); }
.ff-result .correct-order code { background: rgba(0,0,0,0.4); padding: 4px 10px; border-radius: 6px; font-size: 1.4rem; }

/* ---- Hot seat ---- */
#hot-seat { display: grid; grid-template-columns: 220px 1fr; gap: 32px; }

.ladder-rail {
    background: rgba(0,0,0,0.4);
    border: var(--kj-border);
    border-radius: 12px;
    padding: 16px 12px;
}
#money-ladder { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; }
#money-ladder li {
    background: rgba(255,255,255,0.05);
    border: 2px solid rgba(255,255,255,0.3);
    border-radius: 6px;
    padding: 8px 10px;
    font-size: 0.9rem;
    display: flex; justify-content: space-between;
}
#money-ladder li.safety { background: rgba(46, 204, 113, 0.2); border-color: var(--kj-green); }
#money-ladder li.current {
    background: var(--kj-yellow); color: #000; font-weight: bold; border-color: var(--kj-yellow);
    animation: kj-rung-fill 480ms ease-out 1;
}

@keyframes kj-rung-fill {
    0%   { transform: scaleX(0.6) translateX(-20%); opacity: 0; background: rgba(255, 216, 74, 0.2); }
    60%  { transform: scaleX(1.06) translateX(0); opacity: 1; }
    100% { transform: scaleX(1) translateX(0); opacity: 1; background: var(--kj-yellow); }
}

.contestant { font-size: 1.2rem; color: var(--kj-cyan); }
.contestant-strip { display: flex; gap: 16px; align-items: center; margin-bottom: 12px; }
.avatar {
    width: 96px; height: 96px;
    border: 3px solid var(--kj-cyan);
    border-radius: 8px;
    background: rgba(0,0,0,0.4);
    box-shadow: 0 5px 0 #04042a;
    image-rendering: pixelated;
}
.question-text {
    background: rgba(255,255,255,0.08);
    border: var(--kj-border);
    border-radius: 12px;
    padding: 24px;
    font-size: 2rem;
    line-height: 1.3;
    min-height: 140px;
    margin: 0 0 24px;
    text-shadow: 1px 1px 0 #000;
}

.options-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
.option {
    text-align: left;
    background: linear-gradient(180deg, #243497, #1a2070);
    color: var(--kj-white);
    border: 4px solid var(--kj-cyan);
    border-radius: 12px;
    padding: 20px;
    font-size: 1.2rem;
    text-transform: none;
    display: flex; gap: 18px; align-items: center;
}
.option .opt-label {
    font-size: 1.8rem; color: var(--kj-yellow); font-weight: bold;
    text-shadow: var(--kj-step-shadow);
    flex-shrink: 0;
}
.option.dim { opacity: 0.25; transition: opacity 320ms ease-out; }
.option.correct {
    background: linear-gradient(180deg, var(--kj-green), #155724);
    border-color: var(--kj-green);
    animation: kj-correct-glow 900ms ease-in-out 2;
}
.option.wrong {
    background: linear-gradient(180deg, var(--kj-red), #4a0006);
    border-color: var(--kj-red);
    animation: kj-wrong-shake 220ms ease-in-out 3;
}

@keyframes kj-correct-glow {
    0%   { box-shadow: 0 0 0 0 rgba(46, 204, 113, 0); }
    50%  { box-shadow: 0 0 24px 6px rgba(46, 204, 113, 0.85); }
    100% { box-shadow: 0 0 0 0 rgba(46, 204, 113, 0); }
}
@keyframes kj-wrong-shake {
    0%, 100% { transform: translateX(0); }
    25%      { transform: translateX(-6px); }
    75%      { transform: translateX(6px); }
}

.lifelines { display: flex; gap: 12px; margin-bottom: 16px; }
.lifelines button { background: var(--kj-cyan); color: #000; flex: 1; transition: transform 80ms, box-shadow 80ms; }
.lifelines button.used { opacity: 0.4; }
.lifelines button:active:not(:disabled):not(.used) {
    transform: translateY(4px) scale(0.97);
    box-shadow: 0 0 0 0 #04042a;
}
.lifelines button.just-used { animation: kj-lifeline-pulse 600ms ease-out 1; }

@keyframes kj-lifeline-pulse {
    0%   { box-shadow: 0 0 0 0 rgba(0, 195, 227, 0.9); }
    100% { box-shadow: 0 0 0 18px rgba(0, 195, 227, 0); }
}

.audience-tally, .receipts-panel { margin-top: 16px; }
.receipts-panel { font-size: 1rem; text-transform: none; line-height: 1.4; }
.receipts-panel .raw { color: var(--kj-yellow); font-style: italic; }
.receipts-panel .meta { color: var(--kj-cyan); font-size: 0.85rem; margin-top: 8px; }

/* ---- Result ---- */
.result-banner { font-size: 4rem; text-align: center; margin: 64px 0 24px; text-shadow: var(--kj-step-shadow); }
.result-money { font-size: 6rem; text-align: center; color: var(--kj-yellow); text-shadow: var(--kj-step-shadow); }
.result-banner.won { color: var(--kj-green); }
.result-banner.lost { color: var(--kj-red); }

#back-to-lobby-btn { display: block; margin: 24px auto 0; background: var(--kj-cyan); color: #000; font-size: 1.4rem; padding: 16px 32px; }

.pause-btn {
    position: fixed; top: 16px; right: 16px;
    background: var(--kj-yellow); color: #000;
    padding: 8px 16px; font-size: 0.95rem;
    z-index: 50;
}

.paused-overlay[hidden] { display: none !important; }
.paused-overlay {
    position: fixed; inset: 0;
    background: rgba(0, 0, 0, 0.75);
    display: flex; align-items: center; justify-content: center;
    z-index: 100;
}
.paused-banner {
    font-size: 6rem; color: var(--kj-yellow);
    text-shadow: 4px 4px 0 #000, 8px 8px 0 #04042a;
    letter-spacing: 0.4em;
}

/* kj-40 P1: host error toast — surfaces server WS `error` frames so the
   host knows when their action failed (e.g. starting attribution on a cat
   with no attribution Qs). */
.error-toast {
    position: fixed;
    top: 1.5rem; right: 1.5rem;
    max-width: 28rem;
    padding: 1rem 1.25rem;
    background: #b3203a;
    color: #fff7d1;
    border: 4px solid #04042a;
    box-shadow: 6px 6px 0 #04042a;
    font-size: 1.1rem;
    font-weight: 600;
    letter-spacing: 0.05em;
    z-index: 200;
}
.error-toast[hidden] { display: none !important; }
/* kj-40 P0 (TV viewer + Switch-2 critic): phases like #hot-seat have
   `display: grid` which overrides the [hidden] attribute; explicit
   !important hides them when the [hidden] flag is set during phase
   transitions. Mirrors the .paused-overlay pattern at line 316. */
#hot-seat[hidden],
#fastest-finger[hidden],
#attribution[hidden],
#result[hidden] { display: none !important; }
