*{box-sizing:border-box}

:root{
  --bg:#0a0d13;
  --surface:#151a23;
  --line:rgba(255,255,255,.09);
  --fg:#e9eef4;
  --muted:#8a95a6;
  --mono:ui-monospace,"JetBrains Mono","SFMono-Regular",Menlo,Consolas,monospace;
  --display:"Archivo","Helvetica Neue",Arial,system-ui,sans-serif;
}

html,body{margin:0;height:100%;background:#000;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}

#wrap{position:fixed;inset:0;display:flex;flex-direction:column}
#stage{position:relative;flex:1;min-height:0}
#player{width:100%;height:100vh!important}
#player video,#player .video-js,.art-video-player{width:100%!important;height:100%!important}
video{background:#000}
#adbar{flex:0 0 auto;background:var(--surface);color:var(--muted);border-top:1px solid var(--line);max-height:120px;overflow:hidden}

.grid-bg{position:absolute;inset:0;pointer-events:none;
  background-image:radial-gradient(rgba(255,255,255,.10) 1px,transparent 1px);
  background-size:22px 22px;opacity:.5}
.scan{position:absolute;left:0;right:0;top:0;height:160px;pointer-events:none;
  background:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--accent) 14%,transparent),transparent);
  animation:scan 4.5s linear infinite}
@keyframes scan{0%{transform:translateY(-180px)}100%{transform:translateY(100vh)}}

.overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  flex-direction:column;gap:18px;text-align:center;padding:24px;z-index:30;
  background:var(--bg);color:var(--fg);overflow:hidden}
.overlay::before{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:radial-gradient(rgba(255,255,255,.10) 1px,transparent 1px);
  background-size:22px 22px;opacity:.5}
.overlay > *{position:relative}
.spinner{width:42px;height:42px;border:2px solid var(--line);border-top-color:var(--accent);
  border-radius:50%;animation:spin .9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.pill{font-family:var(--mono);font-size:11px;letter-spacing:.28em;text-transform:uppercase;
  color:var(--muted);border:1px solid var(--line);background:rgba(255,255,255,.02);padding:8px 16px}
.pill.err{color:#fca5a5;border-color:rgba(252,165,165,.4)}

.state{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  padding:24px;overflow:hidden;background:var(--bg);color:var(--fg);font-family:var(--display)}
.state .card{position:relative;width:100%;max-width:460px;border:1px solid var(--line);
  background:color-mix(in srgb,var(--surface) 82%,transparent);backdrop-filter:blur(6px)}
.card-top{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;
  border-bottom:1px solid var(--line);font-family:var(--mono);font-size:10px;
  letter-spacing:.28em;text-transform:uppercase;color:var(--muted)}
.card-top .code{color:var(--accent);font-weight:700}
.card-body{padding:30px 26px 32px;text-align:center}
.glyph{width:56px;height:56px;margin:0 auto 20px;display:grid;place-items:center;
  border:2px solid var(--accent);color:var(--accent)}
.glyph svg{width:26px;height:26px}
.title{font-size:32px;line-height:.92;font-weight:800;text-transform:uppercase;
  letter-spacing:-.035em;margin:0 0 12px}
.title .stroke{color:transparent;-webkit-text-stroke:1.5px var(--accent)}
.msg{font-family:var(--mono);font-size:12.5px;line-height:1.65;color:var(--muted);
  margin:0 auto;max-width:34ch}
.bar{position:relative;height:3px;margin-top:22px;background:var(--line);overflow:hidden}
.bar i{position:absolute;top:0;bottom:0;left:-38%;width:38%;background:var(--accent);
  animation:slide 1.4s cubic-bezier(.4,0,.2,1) infinite}
@keyframes slide{0%{left:-38%}100%{left:100%}}

.float-pill{position:absolute;top:12px;left:12px;z-index:5;
  font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--fg);background:rgba(10,13,19,.7);border:1px solid var(--line);padding:7px 12px;
  display:flex;align-items:center;gap:8px;backdrop-filter:blur(4px)}
.float-pill .dot{width:7px;height:7px;background:var(--accent);border-radius:50%;
  animation:blink 1.1s ease-in-out infinite}
@keyframes blink{0%,100%{opacity:.3}50%{opacity:1}}

/* Download button — floating fallback (native/hls.js, Video.js modern, Vidstack) */
.osp-dl{position:absolute;top:12px;right:12px;z-index:20;display:grid;place-items:center;
  width:40px;height:40px;color:#fff;background:rgba(10,13,19,.6);border:1px solid var(--line);
  border-radius:8px;backdrop-filter:blur(4px);opacity:.8;
  transition:opacity .15s,color .15s,border-color .15s}
.osp-dl:hover{opacity:1;color:var(--accent);border-color:var(--accent)}
.osp-dl svg{width:18px;height:18px}
/* Intro / outro Skip button — bottom-right, clear of the control bar */
.osp-skip{position:absolute;right:16px;bottom:76px;z-index:21;
  padding:10px 18px;font-size:13px;font-weight:600;letter-spacing:.02em;line-height:1;
  color:#fff;background:rgba(10,13,19,.72);border:1px solid var(--line);
  border-radius:8px;backdrop-filter:blur(4px);cursor:pointer;
  transition:opacity .15s,color .15s,border-color .15s,background .15s}
.osp-skip:hover{color:var(--accent);border-color:var(--accent);background:rgba(10,13,19,.92)}
.osp-skip[hidden]{display:none}
@media (max-width:520px){.osp-skip{right:10px;bottom:64px;padding:8px 14px;font-size:12px}}

/* Download button — Video.js classic control bar */
.vjs-download-button .vjs-icon-placeholder{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}
.vjs-download-button svg{width:16px;height:16px}
/* Download button — JW Player control bar (both skins) */
.jwplayer [button="osp-download"] svg{width:20px;height:20px}
/* Forward-10 button — JW Player control bar (both skins). Sits right after JW's
   rewind-10 and hides under the same small-player condition JW uses for it. */
.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>[button="osp-forward"]{display:none}
/* Control bar overflow — player-core drops buttons until the row fits inside the
   player, and squeezes what's left as a last resort. */
.jwplayer .jw-controlbar .jw-button-container>.osp-hide{display:none!important}
.jwplayer .jw-controlbar .jw-button-container.osp-squeeze>.jw-icon,
.jwplayer .jw-controlbar .jw-button-container.osp-squeeze>.jw-icon-inline{flex:0 1 auto;min-width:0}
/* Forward-10 in the centre cluster, beside JW's own rewind-10 there. */
.jwplayer .osp-display-forward .jw-icon .jw-svg-icon-forward{padding:.2em .05em}
/* Narrow player: play/±10 have moved out of the bar, so bring back the centre
   cluster JW shows only under its own small-player flag. The icons still fade
   with the controls, and stay hidden while idle, buffering, scrubbing and at the
   two smallest breakpoints, where there is no room for them anyway. */
.jwplayer.osp-centre-controls:not(.jw-breakpoint-0):not(.jw-breakpoint--1):not(.jw-flag-dragging).jw-state-playing .jw-display,
.jwplayer.osp-centre-controls:not(.jw-breakpoint-0):not(.jw-breakpoint--1):not(.jw-flag-dragging).jw-state-paused .jw-display{display:flex!important}
.jwplayer.osp-centre-controls:not(.jw-breakpoint-0):not(.jw-breakpoint--1):not(.jw-flag-dragging).jw-state-playing .jw-display-icon-rewind,
.jwplayer.osp-centre-controls:not(.jw-breakpoint-0):not(.jw-breakpoint--1):not(.jw-flag-dragging).jw-state-paused .jw-display-icon-rewind{display:inline-block!important}
/* JW sizes those icons off the breakpoint (77px at bp2-3, 88px above), far too
   big for the narrow players we show them on — use its small-player size. */
.jwplayer.osp-centre-controls .jw-display .jw-icon,
.jwplayer.osp-centre-controls .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px;stroke-width:6.6px}
.jwplayer.osp-centre-controls .jw-display .jw-icon.jw-icon-rewind:before{width:33px;height:33px}

.dwrap{max-width:760px;margin:0 auto;padding:48px 18px;font-family:var(--display)}
.dwrap .tag{display:inline-block;font-family:var(--mono);font-size:10px;letter-spacing:.28em;
  text-transform:uppercase;color:var(--accent);border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);
  background:color-mix(in srgb,var(--accent) 10%,transparent);padding:4px 10px;margin-bottom:16px}
.dwrap h1{font-size:30px;line-height:1;font-weight:800;text-transform:uppercase;
  letter-spacing:-.03em;margin:0 0 8px}
.dwrap .sub{font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--muted);margin-bottom:26px}
.dl{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:15px 16px;
  border:1px solid var(--line);background:var(--surface);color:var(--fg);text-decoration:none;
  margin-bottom:-1px;transition:.15s}
.dl:hover{border-color:var(--accent);background:color-mix(in srgb,var(--surface) 70%,var(--accent) 8%)}
.dl-label{font-weight:600;word-break:break-word}
.dl-tags em{font-style:normal;font-family:var(--mono);font-size:10px;text-transform:uppercase;
  letter-spacing:.06em;color:#04201c;background:var(--accent);padding:3px 8px;margin-left:6px}
.empty{font-family:var(--mono);font-size:12px;color:var(--muted);text-align:center;
  padding:40px 0;border:1px solid var(--line);background:var(--surface)}
