/* Projector views for results.php?tv=1 (leaderboard) and &view=podium. Sized in vw/vh for 1920x1080, never scrolls.
   Plain CSS only (no nesting / :has / container queries) so OBS's older built-in Chromium renders it the same. */
@font-face { font-family: 'GhostScribe'; src: url('../fonts/GhostScribe-Regular.woff2') format('woff2'), url('../fonts/GhostScribe-Regular.woff') format('woff'); font-display: swap; }
:root { --night:#05060a; --moon:#e8eef8; --mist:#c5d0e0; --bone:#d8d4c8; --gold:#d4af37; --silver:#c0c7d1; --bronze:#b08d57; --ember:#ff8a3d; }
*, *::before, *::after { box-sizing: border-box; }
html, body { margin:0; height:100%; overflow:hidden; background:var(--night); color:var(--bone); font-family:'Cinzel', Georgia, serif; }
body.rtv { width:100vw; height:100vh; position:relative; }
.rtv-bg { position:fixed; inset:0; z-index:0; overflow:hidden; }
.rtv-bg img { width:100%; height:100%; object-fit:cover; object-position:center 28%; filter:saturate(.8) brightness(.32); }
.rtv-vig { position:absolute; inset:0; background:radial-gradient(ellipse at 50% 35%, transparent 15%, rgba(5,6,10,.55) 60%, rgba(5,6,10,.92) 100%); }
.rtv-fog { position:absolute; left:-20%; width:140%; height:45%; bottom:-8%; opacity:.22; filter:blur(30px);
  background:radial-gradient(ellipse at 30% 60%, rgba(200,210,230,.55), transparent 60%), radial-gradient(ellipse at 75% 50%, rgba(200,210,230,.4), transparent 55%);
  animation:rtvFog 38s ease-in-out infinite alternate; }
.rtv-fog.f2 { bottom:auto; top:-12%; opacity:.12; animation-duration:52s; animation-direction:alternate-reverse; }
@keyframes rtvFog { from { transform:translateX(-6%); } to { transform:translateX(6%); } }
main { position:relative; z-index:1; }

.rtv-kicker { margin:0; font-family:'Oswald', sans-serif; letter-spacing:.32em; text-transform:uppercase; font-size:1.05vw; color:var(--mist); opacity:.85; }
.rtv-head h1, .rtv-hold h1 { margin:.2vh 0 0; font-family:'Cinzel Decorative', serif; font-weight:700; color:var(--moon); line-height:1.05;
  text-shadow:0 0 1.2vw rgba(255,138,61,.25), 0 .3vh 0 rgba(0,0,0,.6); }
.rtv-head h1 { font-size:3.4vw; }
.rtv-sub { margin:.6vh 0 0; font-family:'Roboto', sans-serif; font-size:1.25vw; color:var(--mist); }
.live-dot { display:inline-block; width:.8vw; height:.8vw; border-radius:50%; background:#ff3b3b; box-shadow:0 0 .8vw #ff3b3b; vertical-align:middle; margin-right:.3vw; animation:rtvPulse 1.6s ease-in-out infinite; }
@keyframes rtvPulse { 50% { opacity:.35; } }
.rtv-empty { font-family:'Roboto', sans-serif; font-size:2vw; color:var(--mist); text-align:center; margin-top:20vh; }

/* ---------- Leaderboard ---------- */
.rtv-stage { height:100vh; padding:2.4vh 1.8vw 2.6vh; display:grid; grid-template-columns:minmax(0,1fr) 24vw; gap:1.8vw; }
.rtv-board { display:flex; flex-direction:column; min-height:0; }
.rtv-head { flex:0 0 auto; margin-bottom:1.8vh; }
.rtv-grid { flex:1 1 auto; min-height:0; list-style:none; margin:0; padding:0; display:grid; gap:1.6vh 1.1vw;
  grid-template-columns:repeat(4, minmax(0,1fr)); grid-template-rows:repeat(3, minmax(0,1fr)); }
.rtv-grid.n8 { grid-template-rows:repeat(2, minmax(0,1fr)); }
.rtv-grid.n6 { grid-template-columns:repeat(3, minmax(0,1fr)); grid-template-rows:repeat(2, minmax(0,1fr)); }
.rtv-grid.n4 { grid-template-columns:repeat(2, minmax(0,1fr)); grid-template-rows:repeat(2, minmax(0,1fr)); }
.rtv-card { min-height:0; display:flex; flex-direction:column; background:rgba(8,10,16,.82); border:1px solid rgba(197,208,224,.22);
  box-shadow:0 .8vh 2vh rgba(0,0,0,.55); opacity:0; transform:translateY(1.4vh); animation:rtvIn .55s ease-out forwards; }
@keyframes rtvIn { to { opacity:1; transform:none; } }
.rtv-photo { position:relative; flex:1 1 auto; min-height:0; background-size:cover; background-position:center 25%; }
.rtv-photo::after { content:''; position:absolute; inset:0; background:linear-gradient(to bottom, rgba(5,6,10,.35), transparent 30%); }
.rtv-score { position:absolute; z-index:1; top:.8vh; right:.6vw; padding:.3vh .6vw .4vh; background:rgba(5,6,10,.78); border:1px solid rgba(232,238,248,.35);
  font-family:'Oswald', sans-serif; color:#fff; text-align:center; line-height:1; }
.rtv-score b { display:block; font-size:2.1vw; font-weight:600; }
.rtv-score small { display:block; font-size:.75vw; letter-spacing:.2em; text-transform:uppercase; color:var(--mist); margin-top:.2vh; }
.rtv-info { flex:0 0 auto; display:flex; align-items:center; gap:.7vw; padding:.8vh .7vw .9vh; min-height:8.6vh; border-top:1px solid rgba(197,208,224,.18); }
.rtv-rank { flex:0 0 auto; position:relative; width:3vw; height:3vw; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-family:'Oswald', sans-serif; font-size:1.55vw; font-weight:600; color:var(--moon); background:rgba(5,6,10,.9); border:2px solid rgba(197,208,224,.6); }
.rtv-rank i { position:absolute; right:-.55vw; top:-.7vh; font-style:normal; font-size:1vw; font-weight:600; background:var(--ember); color:#160b02; border-radius:.4vw; padding:0 .25vw; line-height:1.3; }
.rtv-names { min-width:0; flex:1 1 auto; }
.rtv-names h2 { margin:0; font-family:'GhostScribe', 'Cinzel', serif; text-transform:uppercase; font-weight:normal; font-size:1.4vw; line-height:1.08; color:var(--moon);
  overflow:hidden; display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; word-break:break-word; }
.rtv-names p { margin:.25vh 0 0; font-family:'Roboto', sans-serif; font-size:1.02vw; color:var(--mist); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.rtv-card.medal-1 { border-color:var(--gold); box-shadow:0 0 2.2vh rgba(212,175,55,.45), 0 .8vh 2vh rgba(0,0,0,.55); }
.rtv-card.medal-1 .rtv-rank { background:var(--gold); color:#1a1408; border-color:#fff3c4; }
.rtv-card.medal-2 { border-color:var(--silver); }
.rtv-card.medal-2 .rtv-rank { background:var(--silver); color:#15171b; border-color:#fff; }
.rtv-card.medal-3 { border-color:var(--bronze); }
.rtv-card.medal-3 .rtv-rank { background:var(--bronze); color:#1a1408; border-color:#f0d9b5; }

.rtv-side { min-height:0; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; padding:2.4vh 1.4vw;
  background:rgba(8,10,16,.86); border:1px solid rgba(232,238,248,.3); box-shadow:0 0 4vh rgba(0,0,0,.6); }
.rtv-side h2 { margin:0 0 1.6vh; font-family:'Cinzel Decorative', serif; font-size:2.3vw; color:var(--moon); line-height:1.1; }
.rtv-qr { background:#fff; padding:1vw; width:19vw; max-width:46vh; }
.rtv-qr img, .rtv-qr .qr, .rtv-qr svg { display:block; width:100%; height:auto; }
.rtv-qr .qr svg { width:100%; height:auto; aspect-ratio:1/1; }
.rtv-url { margin:1.4vh 0 0; font-family:'Oswald', sans-serif; letter-spacing:.08em; text-transform:uppercase; font-size:1.15vw; color:var(--moon); word-break:break-all; }
.rtv-help { margin:1vh 0 0; font-family:'Roboto', sans-serif; font-size:1.05vw; color:var(--mist); line-height:1.35; }
.rtv-clock { margin-top:2.4vh; padding:1.2vh 1.4vw; border:1px solid rgba(255,138,61,.55); background:rgba(40,16,4,.55); box-shadow:0 0 2vh rgba(255,138,61,.2); }
.rtv-clock span { display:block; font-family:'Oswald', sans-serif; font-size:1vw; letter-spacing:.22em; text-transform:uppercase; color:#ffc9a3; }
.rtv-clock b { display:block; font-family:'Oswald', sans-serif; font-weight:600; font-size:2.8vw; color:#ffb067; line-height:1.15; }

/* ---------- Podium: holding screen ---------- */
.rtv-hold { height:100vh; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; padding:4vh 4vw; }
.rtv-hold .rtv-kicker { font-size:1.4vw; }
.rtv-hold h1 { font-size:5.2vw; margin-top:1.4vh; animation:rtvGlow 3.2s ease-in-out infinite; }
@keyframes rtvGlow { 50% { text-shadow:0 0 2.6vw rgba(255,138,61,.55), 0 .3vh 0 rgba(0,0,0,.6); } }
.rtv-podium-ghost { display:flex; align-items:flex-end; gap:1vw; margin:4vh 0 3vh; opacity:.85; }
.rtv-podium-ghost span { width:11vw; display:flex; align-items:flex-start; justify-content:center; padding-top:1vh; font-family:'Cinzel Decorative', serif; font-size:3.4vw;
  color:rgba(232,238,248,.75); background:linear-gradient(to bottom, rgba(232,238,248,.16), rgba(232,238,248,.03)); border:1px solid rgba(232,238,248,.25); border-bottom:0; }
.rtv-podium-ghost .p1 { height:20vh; border-color:rgba(212,175,55,.6); color:var(--gold); }
.rtv-podium-ghost .p2 { height:14vh; } .rtv-podium-ghost .p3 { height:10vh; }
.rtv-hold-row { display:flex; align-items:center; justify-content:center; gap:3vw; }
.rtv-clock.big { margin-top:0; padding:2vh 2.4vw; }
.rtv-clock.big span { font-size:1.4vw; } .rtv-clock.big b { font-size:5vw; }
.rtv-hold-qr { display:flex; flex-direction:column; align-items:center; }
.rtv-hold-qr .rtv-qr { width:13vw; padding:.7vw; }
.rtv-hold-qr p { margin:1vh 0 0; font-family:'Oswald', sans-serif; letter-spacing:.06em; text-transform:uppercase; font-size:1.05vw; color:var(--moon); }
.rtv-hold .rtv-sub { margin-top:3.2vh; font-size:1.5vw; }

/* ---------- Podium: winners (visual order 2-1-3; step height by rank: .h1 .h2 .h3; .duo = two tied entries share a step) ----------
   Height budget at 1080p: header ~11vh + tallest step (photo 48vh + caption ~12vh + block 12vh) + 4vh bottom margin < 100vh. */
.rtv-podium { height:100vh; display:flex; flex-direction:column; padding:2.4vh 3vw 4vh; overflow:hidden; }
.rtv-head.center { text-align:center; margin-bottom:0; flex:0 0 auto; }
.rtv-podium .rtv-head h1 { font-size:3.8vw; }
.podium { flex:1 1 auto; min-height:0; display:flex; align-items:flex-end; justify-content:center; gap:1.8vw; }
.step { position:relative; width:27vw; display:flex; flex-direction:column; align-items:stretch; opacity:0; animation:rtvRise .9s ease-out forwards; }
.step.h1 { width:30vw; }
.step.pos2 { animation-delay:0s; } .step.pos1 { animation-delay:.5s; } .step.pos0 { animation-delay:1.1s; }
@keyframes rtvRise { from { opacity:0; transform:translateY(6vh); } to { opacity:1; transform:none; } }
.step-people { position:relative; z-index:1; display:flex; align-items:flex-end; justify-content:center; gap:1vw; padding:0 .4vw 1.6vh; }
.winner { margin:0; min-width:0; flex:0 1 auto; display:flex; flex-direction:column; align-items:center; text-align:center; }
.duo .winner { flex:1 1 0; }
.w-photo { width:auto; height:36vh; max-width:100%; aspect-ratio:4 / 5; background-size:cover; background-position:center 25%;
  border:.3vw solid var(--bronze); box-shadow:0 1vh 3vh rgba(0,0,0,.7); }
.h1 .w-photo { height:48vh; border-color:var(--gold); animation:rtvGold 3.6s ease-in-out infinite; }
.h2 .w-photo { height:41vh; border-color:var(--silver); }
.duo .w-photo { width:100%; height:auto; }
.duo.h1 .w-photo { max-width:13.4vw; } .duo.h2 .w-photo { max-width:12vw; } .duo.h3 .w-photo { max-width:11vw; }
@keyframes rtvGold { 0%, 100% { box-shadow:0 0 2.4vh rgba(212,175,55,.35), 0 1vh 3vh rgba(0,0,0,.7); } 50% { box-shadow:0 0 5vh rgba(212,175,55,.6), 0 1vh 3vh rgba(0,0,0,.7); } }
.spot { position:absolute; z-index:0; left:-20%; right:-20%; top:-14vh; bottom:8vh; pointer-events:none;
  background:radial-gradient(ellipse at 50% 35%, rgba(255,214,120,.16), rgba(255,214,120,.05) 40%, transparent 68%); }
.winner figcaption { width:100%; margin-top:1.1vh; }
.winner h2 { margin:0; font-family:'GhostScribe', 'Cinzel', serif; font-weight:normal; text-transform:uppercase; color:var(--moon); font-size:1.9vw; line-height:1.05;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.h1 .winner h2 { font-size:2.4vw; color:#fff6dc; text-shadow:0 0 1.2vw rgba(212,175,55,.45); }
.duo .winner h2 { font-size:1.35vw; } .duo.h1 .winner h2 { font-size:1.6vw; }
.winner p { margin:.3vh 0 0; font-family:'Roboto', sans-serif; font-size:1.1vw; color:var(--mist); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.duo .winner p { font-size:.95vw; }
.winner b { display:inline-block; margin-top:.5vh; font-family:'Oswald', sans-serif; font-weight:600; font-size:1.6vw; color:#fff; }
.h1 .winner b { color:var(--gold); font-size:1.9vw; }
.block { position:relative; z-index:1; flex:0 0 auto; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.4vh;
  border:1px solid rgba(232,238,248,.3); border-bottom-width:0; box-shadow:inset 0 1px 0 rgba(255,255,255,.12);
  background:linear-gradient(to bottom, rgba(232,238,248,.2), rgba(232,238,248,.05)); }
.h1 .block { height:12vh; border-color:rgba(212,175,55,.8); background:linear-gradient(to bottom, rgba(212,175,55,.36), rgba(212,175,55,.06)); }
.h2 .block { height:9vh; border-color:rgba(192,199,209,.75); }
.h3 .block { height:6.5vh; border-color:rgba(176,141,87,.75); background:linear-gradient(to bottom, rgba(176,141,87,.28), rgba(176,141,87,.05)); }
.place { font-family:'Cinzel Decorative', serif; line-height:1; color:var(--moon); font-size:2.6vw; }
.h1 .place { color:var(--gold); font-size:3.4vw; text-shadow:0 0 1.4vw rgba(212,175,55,.5); }
.h2 .place { color:var(--silver); } .h3 .place { color:#d9b47c; font-size:2.1vw; }
.tie-note { font-family:'Oswald', sans-serif; letter-spacing:.22em; text-transform:uppercase; font-size:.9vw; color:var(--ember); line-height:1; }
.h3 .block { flex-direction:row; gap:1vw; }
.rtv-novotes { flex:1 1 auto; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; }
.rtv-novotes h2 { margin:0; font-family:'Cinzel Decorative', serif; font-size:5vw; color:var(--moon); text-shadow:0 0 2vw rgba(255,138,61,.3); }
.rtv-novotes p { margin:2vh 0 0; font-family:'Roboto', sans-serif; font-size:1.6vw; color:var(--mist); }
.rtv-embers { position:absolute; inset:0; z-index:0; pointer-events:none; overflow:hidden; }
.rtv-embers i { position:absolute; bottom:-2vh; width:.35vw; height:.35vw; border-radius:50%; background:#ffcf7a; box-shadow:0 0 .8vw #ffb347; opacity:0;
  animation:rtvEmber 11s linear infinite; }
@keyframes rtvEmber { 0% { transform:translate(0, 0); opacity:0; } 10% { opacity:.7; } 80% { opacity:.35; } 100% { transform:translate(3vw, -95vh); opacity:0; } }
.rtv-corner-qr { z-index:2; position:absolute; top:2.6vh; right:2vw; display:flex; align-items:center; gap:.8vw; padding:.7vw; background:rgba(8,10,16,.8); border:1px solid rgba(232,238,248,.25); }
.rtv-corner-qr .qr { width:6.5vw; background:#fff; padding:.35vw; }
.rtv-corner-qr .qr svg { display:block; width:100%; height:auto; }
.rtv-corner-qr span { font-family:'Roboto', sans-serif; font-size:.95vw; color:var(--mist); line-height:1.35; text-align:left; }
@media (prefers-reduced-motion: reduce) { .rtv-fog, .live-dot, .rtv-hold h1, .h1 .w-photo { animation:none; } .rtv-embers { display:none; } .rtv-card, .step { animation:none; opacity:1; transform:none; } }
