/* Whoeves public player — branded adaptation of the upstream Off Grid player. */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

:root {
  /* Shared Whoeves brand accent. */
  --accent-hue: #ff5938;
  --accent: var(--accent-hue);
  --bg: #111;
  --bg2: #161616;
  --surface: #1a1a1a;    /* raised surfaces: inputs, chips, active nav, hovers */
  --text: #f0f0f0;
  --text-muted: #666;
  --border: #2a2a2a;
  --grid-line: transparent;
  --max-w: 1280px;
}

/* Light mode — mirrors the embedded player's light palette. */
:root[data-theme="light"] {
  --bg: #ffffff;
  --bg2: #f4f4f4;
  --surface: #e8e8e8;
  --text: #1a1a1a;
  --text-muted: #666;
  --border: #dddddd;
  --grid-line: transparent;
}

/* Dark color mode uses a clean black canvas; the accent stays on controls. */
:root[data-theme="dark"],
:root[data-theme="color"] {
  --bg: #000000;
  --bg2: #101010;
  --surface: #181818;
  --text: #f0f0f0;
  --text-muted: #a0a0a0;
  --border: #292929;
  --grid-line: transparent;
}

html,
body {
  background: var(--bg);
  color: var(--text);
  font-family: 'DM Sans', sans-serif;
  min-height: 100vh;
  line-height: 1.5;
}

/* Keep the page canvas clean and free of decorative grid lines. */
body::before {
  display: none;
}

.page {
  position: relative;
  z-index: 1;
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 36px 24px 100px;
}

/* Header */
.site-header {
  margin-bottom: 44px;
}

/* When JS is enabled, keep the header hidden until the manifest has been
   applied (see applySiteHeader), then fade it in — so the fallback title
   never flashes before the real one loads. */
html.js .site-header {
  opacity: 0;
}

html.js .site-header.ready {
  opacity: 1;
  transition: opacity 0.25s ease;
}

@media (max-width: 640px) {
  .page {
    padding-top: 20px;
  }

  .site-header {
    margin-bottom: 28px;
  }
}

.logo {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--accent);
  margin-bottom: 20px;
  display: block;
}

.site-title {
  font-size: clamp(36px, 6vw, 54px);
  font-weight: 300;
  letter-spacing: -0.03em;
  line-height: 1;
  color: var(--text);
}

.site-title strong {
  font-weight: 600;
}

.site-tagline {
  font-size: 14px;
  color: var(--text-muted);
  margin-top: 12px;
  font-weight: 300;
}

/* Orange underline accent */
.accent-line {
  width: 48px;
  height: 3px;
  background: var(--accent);
  border-radius: 2px;
  margin-top: 20px;
}

/* Section headers */
.section {
  margin-bottom: 64px;
}

.section-label {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: 24px;
  display: flex;
  align-items: center;
  gap: 12px;
}

.section-label::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--border);
}

.section-label-link {
  color: inherit;
  text-decoration: none;
  transition: color 0.15s ease;
}

.section-label-link:hover {
  color: var(--accent);
}

/* Individual player stack */
.player-stack {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* Card layout: the stack becomes a responsive grid of portrait cards. */
:root[data-layout="vertical"] .player-stack {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  align-items: start;
}

/* Solo players (mix detail, track detail, ?mix= single-mix) aren't inside a
   stack — cap them so the square cover doesn't fill the content column. */
:root[data-layout="vertical"] #main-view > .player-entry {
  max-width: 360px;
  margin: 0 auto;
}

.player-entry {
  opacity: 0;
  transform: translateY(12px);
  animation: fadeUp 0.4s ease forwards;
}

.track-social {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  padding: 9px 12px 12px;
  border: 1px solid var(--border);
  border-top: 0;
  border-radius: 0 0 8px 8px;
  color: var(--text-muted);
  font-size: 12px;
}
.track-social > button, .social-comment-form button {
  border: 1px solid var(--border);
  border-radius: 999px;
  background: transparent;
  color: inherit;
  padding: 6px 11px;
  cursor: pointer;
  font: inherit;
}
.track-social > button:hover, .social-comment-form button:hover { border-color: var(--accent); color: var(--text); }
.track-social > .social-like.is-liked { color: var(--accent); border-color: var(--accent); }
.track-social button:disabled { opacity: .55; cursor: wait; }
.social-status { color: var(--accent); }
.social-comments { flex-basis: 100%; padding-top: 8px; }
.social-comment-list { display: grid; gap: 10px; max-height: 260px; overflow: auto; }
.social-comment { border-top: 1px solid var(--border); padding-top: 8px; }
.social-comment strong { color: var(--text); }
.social-comment p { margin: 4px 0 0; white-space: pre-wrap; overflow-wrap: anywhere; }
.social-comment-delete { margin-top: 7px; padding: 4px 9px; border: 1px solid var(--border); border-radius: 999px; background: transparent; color: var(--text-muted); font: inherit; font-size: 10px; cursor: pointer; }
.social-comment-delete:hover { border-color: #d94b3b; color: #d94b3b; }
.social-comment-delete:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.social-comment-form { display: flex; gap: 8px; margin-top: 10px; }
.social-comment-form textarea { flex: 1; min-height: 40px; resize: vertical; border: 1px solid var(--border); border-radius: 8px; padding: 8px; background: var(--bg); color: var(--text); font: inherit; }
.social-comments a { color: var(--accent); }

.player-entry:nth-child(1) {
  animation-delay: 0.05s;
}

.player-entry:nth-child(2) {
  animation-delay: 0.12s;
}

.player-entry:nth-child(3) {
  animation-delay: 0.19s;
}

.player-entry:nth-child(4) {
  animation-delay: 0.26s;
}

.player-entry:nth-child(5) {
  animation-delay: 0.33s;
}

.player-entry:nth-child(6) {
  animation-delay: 0.40s;
}

.player-entry:nth-child(7) {
  animation-delay: 0.47s;
}

.player-entry:nth-child(8) {
  animation-delay: 0.54s;
}

/* 9–12 only matter in the card grid, where a row holds up to 4 */
.player-entry:nth-child(9) {
  animation-delay: 0.61s;
}

.player-entry:nth-child(10) {
  animation-delay: 0.68s;
}

.player-entry:nth-child(11) {
  animation-delay: 0.75s;
}

.player-entry:nth-child(12) {
  animation-delay: 0.82s;
}

@keyframes fadeUp {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Search bar */
.search-bar {
  margin-bottom: 24px;
  position: relative;
}

.search-bar input {
  width: 100%;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text);
  padding: 12px 16px 12px 42px;
  font-size: 14px;
  font-family: 'IBM Plex Sans', sans-serif;
  outline: none;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.search-bar input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(255, 85, 0, 0.1);
}

.search-bar input::placeholder {
  color: #555;
}

.search-bar .search-icon {
  position: absolute;
  left: 14px;
  top: 50%;
  transform: translateY(-50%);
  color: #555;
  pointer-events: none;
  transition: color 0.2s;
}

.search-bar input:focus~.search-icon {
  color: var(--accent);
}

.search-bar .search-clear {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  color: #555;
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  padding: 4px;
  display: none;
  transition: color 0.15s;
}

.search-bar .search-clear:hover {
  color: var(--text);
}

.search-bar.has-value .search-clear {
  display: block;
}

.no-results {
  text-align: center;
  padding: 40px 0;
  color: var(--text-muted);
  font-size: 13px;
  font-family: 'IBM Plex Mono', monospace;
  display: none;
}

/* Divider */
.divider {
  height: 1px;
  background: linear-gradient(90deg, var(--accent) 0%, transparent 100%);
  opacity: 0.3;
  margin: 64px 0;
}


/* Loading / error states */
.manifest-status {
  text-align: center;
  padding: 40px 0;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 13px;
}

.manifest-status.error {
  color: #ff4444;
}

.manifest-status.loading {
  color: var(--text-muted);
}

/* Footer */
footer {
  margin-top: 80px;
  padding-top: 24px;
  border-top: 1px solid var(--border);
  font-size: 11px;
  color: var(--text-muted);
  font-family: 'IBM Plex Mono', monospace;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

footer a {
  color: var(--accent);
  text-decoration: none;
}

/* Toolbar: nav + sort */
.toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-bottom: 20px;
}

.toolbar-nav {
  display: flex;
  align-items: center;
  gap: 6px;
}

.nav-link,
.browse-toggle {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-muted);
  background: none;
  border: 1px solid transparent;
  border-radius: 6px;
  padding: 6px 10px;
  cursor: pointer;
  text-decoration: none;
  transition: color 0.15s, border-color 0.15s, background 0.15s;
}

.nav-link:hover,
.browse-toggle:hover {
  color: var(--text);
}

.nav-link.active {
  color: var(--accent);
  border-color: var(--border);
  background: var(--surface);
}

/* Filter button: caret flips with the panel, and the button takes the
   active-nav look while the panel is open. */
.browse-toggle {
  white-space: nowrap;
}

.browse-toggle::after {
  content: ' \25BE';
}

.browse-toggle[aria-expanded="true"]::after {
  content: ' \25B4';
}

.browse-toggle[aria-expanded="true"] {
  color: var(--accent);
  border-color: var(--border);
  background: var(--surface);
}

.toolbar-sort {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* Label + select travel together so views without sorting can hide just
   them, leaving the theme and layout toggles in place. */
.sort-field {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* The theme + layout toggles reuse the .nav-link look but read as bordered
   controls (like the sort select) and keep a stable width across labels. */
.theme-toggle,
.layout-toggle {
  border-color: var(--border);
  min-width: 82px;
  text-align: center;
}

.theme-toggle:hover,
.layout-toggle:hover {
  border-color: var(--accent);
}

.layout-toggle svg {
  width: 12px;
  height: 12px;
  vertical-align: -1px;
  margin-right: 5px;
}

.layout-toggle[aria-pressed="true"] {
  color: var(--accent);
}

.toolbar-sort label {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.toolbar-sort select {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  color: var(--text);
  font-family: 'IBM Plex Sans', sans-serif;
  font-size: 13px;
  padding: 6px 10px;
  outline: none;
  cursor: pointer;
}

.toolbar-sort select:focus {
  border-color: var(--accent);
}

/* Browse panel (tags + artists). The 0fr <-> 1fr grid-row technique
   animates the unknown content height on narrow screens; padding, border,
   margin and opacity collapse alongside so the closed panel takes no
   space. */
.browse-panel {
  display: grid;
  grid-template-rows: 1fr;
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 18px;
  margin-bottom: 20px;
  transition: grid-template-rows 0.25s ease, padding 0.25s ease,
    margin-bottom 0.25s ease, opacity 0.2s ease, border-width 0.25s ease;
}

/* An explicit display on .browse-panel would beat the UA's [hidden] rule,
   so pin it down. `hidden` strictly means "no chips in this view". */
.browse-panel[hidden] {
  display: none;
}

.browse-panel-inner {
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  /* Keep collapsed chips out of the tab order the moment the panel starts
     closing (visibility flips back instantly on open). */
  transition: visibility 0s linear 0.25s;
}

/* Collapsed state — only below the breakpoint; the desktop rail ignores
   .open entirely. */
@media (max-width: 1099px) {
  .browse-panel:not(.open) {
    grid-template-rows: 0fr;
    padding-top: 0;
    padding-bottom: 0;
    border-top-width: 0;
    border-bottom-width: 0;
    margin-bottom: 0;
    opacity: 0;
  }

  .browse-panel:not(.open) .browse-panel-inner {
    visibility: hidden;
  }

  .browse-panel.open .browse-panel-inner {
    transition-delay: 0s;
  }
}

.browse-group + .browse-group {
  margin-top: 16px;
}

.browse-group-label {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: 10px;
}

.chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 5px 12px;
  font-size: 12px;
  color: var(--text);
  text-decoration: none;
  transition: border-color 0.15s, color 0.15s;
}

.chip:hover {
  border-color: var(--accent);
  color: var(--accent);
}

/* The explicit display above would beat the UA's [hidden] rule — pin it
   down so capped overflow chips actually hide. */
.chip[hidden] {
  display: none;
}

.chip-count {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  color: var(--text-muted);
}

.chip:hover .chip-count {
  color: var(--accent);
}

/* "+N more" reveal pill at the end of a capped chip row. */
.chip-more {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
  background: none;
  cursor: pointer;
}

.chip-more:hover {
  border-color: var(--accent);
  color: var(--accent);
}

/* Chip for the view's active filter — clicking it clears the filter. */
.chip-active,
.chip-active:hover {
  border-color: var(--accent);
  color: var(--accent);
  background: var(--surface);
  background: color-mix(in srgb, var(--accent) 12%, var(--surface));
}

.chip-active .chip-count {
  color: var(--accent);
}

.chip-x {
  font-size: 12px;
  line-height: 1;
  opacity: 0.8;
}

/* Search helper line */
.search-hint {
  font-size: 12px;
  color: var(--text-muted);
  margin: -14px 0 24px 2px;
}

/* View heading / breadcrumb */
.view-heading {
  margin-bottom: 22px;
}

.back-link {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 12px;
  letter-spacing: 0.05em;
  color: var(--accent);
  text-decoration: none;
}

.back-link:hover {
  text-decoration: underline;
}

.view-title {
  font-size: 22px;
  font-weight: 600;
  letter-spacing: -0.01em;
  margin-top: 8px;
}

.view-title .view-title-kind {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 11px;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--text-muted);
  font-weight: 400;
  display: block;
  margin-bottom: 4px;
}

/* Tracks database list */
.track-list {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--border);
  border-radius: 8px;
  overflow: hidden;
}

.track-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 13px 16px;
  text-decoration: none;
  color: var(--text);
  border-bottom: 1px solid var(--border);
  transition: background 0.12s;
}

.track-row:last-child {
  border-bottom: none;
}

.track-row:hover {
  background: var(--surface);
}

.track-row-main {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 14px;
}

.track-row .track-artist {
  color: var(--text);
}

.track-row .track-sep {
  color: var(--text-muted);
  margin: 0 4px;
}

.track-row .track-title {
  color: var(--text-muted);
}

.track-row-meta {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-shrink: 0;
}

.mix-count {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 11px;
  color: var(--text-muted);
}

.buy-dot {
  color: var(--accent);
  font-size: 13px;
}

/* Track detail header */
.track-detail-head {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 28px 24px;
  margin-bottom: 40px;
}

.track-detail-kind {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: 12px;
}

.track-detail-title {
  font-size: 28px;
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.15;
}

.track-detail-artist {
  font-size: 16px;
  color: var(--text-muted);
  margin-top: 6px;
}

.buy-btn {
  display: inline-block;
  margin-top: 20px;
  background: var(--accent);
  color: #111;
  font-weight: 600;
  font-size: 14px;
  padding: 10px 18px;
  border-radius: 8px;
  text-decoration: none;
  transition: filter 0.15s;
}

.buy-btn:hover {
  filter: brightness(1.1);
}

.empty-note {
  text-align: center;
  padding: 40px 0;
  color: var(--text-muted);
  font-size: 13px;
  font-family: 'IBM Plex Mono', monospace;
}

/* Wide-viewport layout: the filter panel becomes a permanent sticky rail
   next to the content column. Below the breakpoint, .layout is a plain
   block and the panel behaves as the collapsible mobile panel. */
@media (min-width: 1100px) {
  :root {
  --max-w: 1320px;
  }

  .layout {
    display: grid;
    grid-template-columns: 240px minmax(0, 1fr);
    gap: 0 32px;
    align-items: start;
  }

  /* No chips in this view -> no rail; let the content column center. */
  .layout:has(> .browse-panel[hidden]) {
    grid-template-columns: minmax(0, 1fr);
  }

  .layout > .content {
    max-width: 920px;
    margin: 0 auto;
    width: 100%;
  }

  /* Drop the narrow-screen 0fr/1fr animation scaffolding: the grid row is
     sized from the rail's max-height, so the inner's overflow:hidden would
     clip expanded chip rows past one viewport with no way to scroll them. */
  .browse-panel {
    position: sticky;
    top: 24px;
    max-height: calc(100vh - 48px);
    overflow-y: auto;
    margin-bottom: 0;
    display: block;
    /* Minimal scrollbar matching the players' track lists: thin thumb,
       no track, theme-aware. */
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
  }

  .browse-panel:hover {
    scrollbar-color: var(--text-muted) transparent;
  }

  .browse-panel-inner {
    overflow: visible;
  }

  /* The rail is always open on desktop; the toggle only exists below the
     breakpoint. */
  .browse-toggle {
    display: none;
  }
}

/* Whoeves visual identity: a bright, editorial music discovery layout with
   SoundCloud-inspired orange actions and clear track browsing. */
:root {
  --accent-hue: #ff5938;
  --accent: #ff5938;
  --bg: #f7f6f2;
  --bg2: #ffffff;
  --surface: #eeede8;
  --text: #171817;
  --text-muted: #787a75;
  --border: #e5e3dc;
  --grid-line: transparent;
  --max-w: 1320px;
}
:root[data-theme="light"] {
  --accent-hue: #ff5938;
  --accent: #ff5938;
  --bg: #f7f6f2;
  --bg2: #ffffff;
  --surface: #eeede8;
  --text: #171817;
  --text-muted: #787a75;
  --border: #e5e3dc;
  --grid-line: transparent;
}
.page { max-width: 1320px; padding-top: 24px; }
.site-header { margin-bottom: 22px; }
.brand-lockup { display: flex; flex-direction: column; align-items: flex-end; width: max-content; gap: 0; }
.logo { display: block; width: max-content; font-family: 'Space Grotesk', sans-serif; font-size: 25px; font-weight: 700; letter-spacing: -1.5px; text-transform: none; color: var(--text); margin-bottom: 0; line-height: 1; }
.logo i { color: var(--accent); font-style: normal; }
.logo-record { width: .70em; height: .70em; display: inline-block; margin: 0 -.07em; vertical-align: -.10em; overflow: visible; shape-rendering: geometricPrecision; }
.record-disc { fill: var(--bg); stroke: var(--text); stroke-width: 5.5; }
.record-groove { fill: none; stroke: var(--text); stroke-width: 1.5; opacity: .72; }
.record-groove-inner { fill: none; stroke: var(--text); stroke-width: 1.1; opacity: .4; }
.record-label, .record-pivot { fill: var(--text); }
.record-center { fill: var(--bg); }
.record-arm { fill: none; stroke: var(--text); stroke-width: 3.7; stroke-linecap: round; stroke-linejoin: round; }
.record-needle { fill: var(--text); }
.site-title { align-self: flex-end; margin: 0; font-family: 'Space Grotesk', sans-serif; font-size: 12px; font-weight: 500; letter-spacing: .06em; line-height: 1.2; color: var(--text-muted); }
.site-title strong { color: var(--accent); }
.site-tagline { font-size: 14px; font-weight: 400; margin-top: 7px; }
.accent-line { display: none; }
.whoeves-hero { min-height: 224px; margin: 0 0 25px; padding: 30px 38px; position: relative; overflow: hidden; display: flex; justify-content: space-between; align-items: center; isolation: isolate; border-radius: 14px; color: #fff; background: #20221f; }
.whoeves-hero > div:first-child { position: relative; z-index: 2; }
.hero-kicker { color: #d0ef8a; font-size: 10px; font-weight: 700; letter-spacing: 1.8px; }
.whoeves-hero h2 { margin: 10px 0 7px; font: 600 clamp(26px, 3.7vw, 40px)/1.05 'Space Grotesk', sans-serif; letter-spacing: -1.8px; }
.whoeves-hero p { max-width: 390px; margin: 0; color: #d0d0ca; font-size: 13px; line-height: 1.55; }
.hero-upload { position: relative; z-index: 2; margin-right: 17%; padding: 12px 17px; border-radius: 6px; background: #d0ef8a; color: #181a16; font-size: 12px; font-weight: 700; text-decoration: none; white-space: nowrap; }
.hero-upload:hover { background: #e0f6ad; }
.hero-orbit { position: absolute; z-index: 0; right: 5%; top: -100px; width: 390px; height: 390px; border-radius: 50%; transform: rotate(-18deg); background: radial-gradient(circle at 32% 30%, #ffc46b, transparent 25%), radial-gradient(circle at 65% 58%, #ff5938, transparent 33%), linear-gradient(135deg,#e69e48,#753328 56%,#24251f); box-shadow: inset -18px -25px 45px #0008, 0 0 80px #ff593833; }
.hero-orbit:before,.hero-orbit:after { content:''; position:absolute; inset:23px; border:1px solid #ffffff55; border-radius:50%; }
.hero-orbit:after { inset:47px; }
.hero-orbit i { position:absolute; inset:115px; border-radius:50%; background:#171916; box-shadow:inset 0 0 0 1px #ffffff44; }
.hero-orbit b { position:absolute; left:calc(50% - 7px); top:calc(50% - 7px); width:14px; height:14px; border-radius:50%; background:#e3a26c; }
.toolbar { position: sticky; top: 0; z-index: 4; margin: 0 0 16px; padding: 9px 0; background: #f7f6f2ed; backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); }
.nav-link,.browse-toggle { font-family:'DM Sans',sans-serif; font-size:13px; font-weight:600; letter-spacing:0; text-transform:none; border-radius:7px; padding:8px 13px; }
.nav-link.active { background:#fff; border-color:var(--border); color:var(--text); box-shadow:0 2px 5px #1717170a; }
.search-bar { border-radius:9px; background:#eeede8; border:1px solid transparent; }
.search-bar:focus-within { background:#fff; border-color:#ff593855; }
.search-bar input { font-family:'DM Sans',sans-serif; }
.browse-panel { background:#fff; border-color:var(--border); }
.section-label { font-family:'DM Sans',sans-serif; font-size:13px; font-weight:700; letter-spacing:0; text-transform:none; color:var(--text); }
.player-entry { border-radius:12px; }
.empty-note { padding:24px; border:1px dashed #d7d5ce; border-radius:10px; background:#fff; color:#696b66; }
:root[data-theme="dark"] .toolbar,:root[data-theme="color"] .toolbar{background:#000f}
:root[data-theme="dark"] .nav-link.active,:root[data-theme="color"] .nav-link.active{background:#181818;border-color:#333;color:#f0f0f0;box-shadow:0 2px 8px #0008}
:root[data-theme="dark"] .search-bar,:root[data-theme="color"] .search-bar{background:#171717;border-color:#292929}
:root[data-theme="dark"] .search-bar:focus-within,:root[data-theme="color"] .search-bar:focus-within{background:#101010;border-color:#ff593855}
:root[data-theme="dark"] .browse-panel,:root[data-theme="color"] .browse-panel{background:#101010;border-color:#292929}
:root[data-theme="dark"] .empty-note,:root[data-theme="color"] .empty-note{background:#101010;border-color:#292929;color:#b5b5b5}
footer { margin-top: 48px; font-size: 11px; }
@media (max-width: 700px) {
  .page { padding: 17px 15px 95px; }
  .whoeves-hero { min-height: 260px; padding: 24px; align-items: flex-start; flex-direction: column; justify-content: flex-start; }
  .whoeves-hero h2 { font-size: 31px; }
  .whoeves-hero p { max-width: 260px; }
  .hero-upload { margin: 17px 0 0; }
  .hero-orbit { width: 230px; height: 230px; top: auto; right: -55px; bottom: -65px; opacity: .75; }
  .hero-orbit i { inset: 68px; }
  .toolbar { align-items:flex-start; }
  .toolbar-nav { flex-wrap:wrap; }
}

/* Official Whoeves Jam STI vector wordmark */
.site-logo-image{display:block;width:190px;height:auto;max-width:min(38vw,190px);object-fit:contain}

.toolbar-nav [hidden]{display:none!important}

.admin-footer-link{color:var(--accent);font-family:'DM Sans',sans-serif;font-size:11px;font-weight:600;text-decoration:none}.admin-footer-link:hover{text-decoration:underline}
.toolbar-nav [hidden],.topbar nav [hidden]{display:none!important}

.home-featured-news{margin:8px 0 46px;padding:30px;border:1px solid var(--border);border-radius:16px;background:var(--bg2);box-shadow:0 12px 34px #1718170b}
.home-featured-header{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:22px}
.home-featured-header h2{margin:0;color:var(--text);font:600 clamp(26px,3vw,34px)/1.15 'Space Grotesk',sans-serif;letter-spacing:-.035em}
.home-featured-eyebrow{margin:0 0 4px;color:var(--accent);font-size:9px;font-weight:800;letter-spacing:.16em}
.home-featured-header>a,.home-featured-more{color:var(--accent);font-size:11px;font-weight:700;text-decoration:none;white-space:nowrap}
.home-featured-header>a:hover{text-decoration:underline}
.home-featured-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.home-featured-card{min-width:0;overflow:hidden;border:1px solid var(--border);border-radius:12px;background:var(--bg);box-shadow:0 5px 18px #1718170a;transition:transform .2s ease,box-shadow .2s ease}
.home-featured-card:hover{transform:translateY(-3px);box-shadow:0 14px 28px #17181718}
.home-featured-card>a{display:flex;height:100%;flex-direction:column;color:inherit;text-decoration:none}
.home-featured-card img,.home-featured-placeholder{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:linear-gradient(135deg,var(--accent),#171817)}
.home-featured-placeholder{display:grid;place-items:center;color:#ffffffa6;font:700 14px 'Space Grotesk',sans-serif;letter-spacing:.18em}
.home-featured-copy{display:flex;flex:1;flex-direction:column;align-items:flex-start;padding:17px}
.home-featured-copy h3{margin:0;color:var(--text);font:600 18px/1.3 'Space Grotesk',sans-serif}
.home-featured-copy p{display:-webkit-box;overflow:hidden;margin:8px 0 14px;color:var(--text-muted);font-size:13px;line-height:1.6;-webkit-box-orient:vertical;-webkit-line-clamp:3}
.home-featured-more{margin-top:auto;font-size:12px}
.news-carousel{position:relative}
.news-carousel-stage{position:relative;width:100%;aspect-ratio:2/1;min-height:320px;max-height:520px;overflow:hidden;border:1px solid var(--border);border-radius:12px;background:#131412}
.news-carousel-slide{position:absolute;inset:0;overflow:hidden;opacity:0;pointer-events:none;transform:translateX(22px);transition:opacity .55s ease,transform .55s cubic-bezier(.2,.7,.2,1)}
.news-carousel-slide.is-active{z-index:1;opacity:1;pointer-events:auto;transform:translateX(0)}
.news-carousel-link{position:absolute;inset:0;display:block;overflow:hidden;color:#fff;text-decoration:none}
.news-carousel-link>img,.news-carousel-placeholder{display:block;width:100%;height:100%;object-fit:cover}
.news-carousel-placeholder{display:grid;place-items:center;background:radial-gradient(ellipse at 70% 15%,#ff593844,transparent 45%),linear-gradient(135deg,#24251f,#101110);color:#ffffff88;font:700 clamp(22px,4vw,44px) 'Space Grotesk',sans-serif;letter-spacing:.22em}
.news-carousel-shade{position:absolute;inset:0;display:flex;align-items:flex-end;padding:clamp(22px,4vw,48px);background:linear-gradient(90deg,#090a09c9 0%,#090a0980 48%,#090a0905 100%),linear-gradient(0deg,#090a0966,transparent 65%)}
.news-carousel-copy{display:flex;width:min(780px,82%);flex-direction:column;align-items:flex-start;gap:9px;text-shadow:0 2px 12px #0009}
.news-carousel-label{color:#ffb29e;font-size:10px;font-weight:800;letter-spacing:.2em}
.news-carousel-copy strong{font:600 clamp(24px,4.2vw,42px)/1.12 'Space Grotesk',sans-serif;letter-spacing:-.035em}
.news-carousel-excerpt{display:-webkit-box;max-width:70ch;overflow:hidden;color:#ffffffed;font-size:clamp(12px,1.5vw,16px);line-height:1.55;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.news-carousel-more{margin-top:4px;color:#fff;font-size:12px;font-weight:700}
.news-carousel-arrow{position:absolute;z-index:3;top:50%;display:grid;width:46px;height:46px;place-items:center;transform:translateY(-50%);border:1px solid #ffffff75;border-radius:50%;background:#171817a8;color:#fff;font-size:32px;line-height:1;cursor:pointer;backdrop-filter:blur(6px);transition:background .18s ease,transform .18s ease}
.news-carousel-arrow:hover{transform:translateY(-50%) scale(1.07);background:#171817e8}
.news-carousel-prev{left:16px}.news-carousel-next{right:16px}
.news-carousel-controls{display:flex;min-height:32px;align-items:center;justify-content:center;gap:15px;padding-top:13px}
.news-carousel-dots{display:flex;align-items:center;justify-content:center;gap:8px}
.news-carousel-dot{width:10px;height:10px;padding:0;border:0;border-radius:50%;background:var(--text-muted);opacity:.35;cursor:pointer;transition:transform .2s ease,background-color .2s ease}
.news-carousel-dot:hover{transform:scale(1.18)}
.news-carousel-dot.is-active{background:var(--accent);opacity:1;transform:scale(1.08)}
.news-carousel-pause{padding:5px 9px;border:1px solid var(--border);border-radius:999px;background:var(--bg);color:var(--text-muted);font-size:10px;font-weight:700;cursor:pointer}
.news-carousel-pause:hover{border-color:var(--accent);color:var(--accent)}
.news-carousel-arrow:focus-visible,.news-carousel-dot:focus-visible,.news-carousel-pause:focus-visible,.news-carousel-link:focus-visible{outline:3px solid #ffb29e;outline-offset:3px}
.music-playlist-section{margin:0 0 22px;padding:21px;border:1px solid var(--border);border-radius:14px;background:var(--bg2);box-shadow:0 8px 24px #17181709}
.music-playlist-sidebar{display:grid;gap:0;margin-top:20px;padding-top:16px;border-top:1px solid var(--border)}
.music-playlist-sidebar .music-playlist-section{padding:13px;margin-bottom:12px}
.music-playlist-sidebar .music-playlist-heading{margin-bottom:9px}
.music-playlist-sidebar .music-playlist-heading h2{font-size:17px}
.music-playlist-sidebar .music-playlist-grid{grid-template-columns:minmax(0,1fr);gap:7px}
.music-playlist-sidebar .music-playlist-card{grid-template-columns:56px minmax(0,1fr);min-height:72px;gap:9px;padding:7px}
.music-playlist-sidebar .music-playlist-art{width:56px;font-size:26px}
.music-playlist-sidebar .music-playlist-empty{padding:9px;text-align:left;line-height:1.45}
.music-playlist-heading{margin-bottom:15px}
.music-playlist-heading .home-featured-eyebrow{margin:0 0 5px;color:var(--accent);font-size:9px;font-weight:700;letter-spacing:.16em}
.music-playlist-heading h2{margin:0;color:var(--text);font:600 clamp(21px,2.3vw,28px)/1.2 'Space Grotesk',sans-serif}
.music-playlist-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.music-playlist-card{display:grid;grid-template-columns:86px minmax(0,1fr);min-width:0;min-height:108px;align-items:center;gap:13px;padding:10px;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:var(--text);text-decoration:none;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}
.music-playlist-card:hover,.music-playlist-card:focus-visible{transform:translateY(-2px);border-color:var(--accent);box-shadow:0 8px 20px #17181714}
.music-playlist-card:focus-visible,.music-playlist-user-heading a:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
.music-playlist-art{position:relative;display:grid;width:86px;aspect-ratio:1;overflow:hidden;place-items:center;border-radius:8px;background:linear-gradient(145deg,#ff5938,#28231f);color:#fff;font:36px/1 'Space Grotesk',sans-serif}
.music-playlist-art img{display:block;width:100%;height:100%;object-fit:cover}
.music-playlist-badge{position:absolute;right:4px;bottom:4px;padding:4px 6px;border-radius:4px;background:var(--accent);color:#fff;font-size:8px;font-weight:800;letter-spacing:.08em}
.music-playlist-copy{display:grid;min-width:0;gap:4px}
.music-playlist-copy strong{overflow:hidden;color:var(--text);font:600 14px/1.3 'Space Grotesk',sans-serif;text-overflow:ellipsis;white-space:nowrap}
.music-playlist-creator,.music-playlist-count,.music-playlist-description{overflow:hidden;color:var(--text-muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}
.music-playlist-description{display:-webkit-box;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}
.music-playlist-users{display:grid;gap:18px}
.music-playlist-user{min-width:0}
.music-playlist-user-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 9px}
.music-playlist-user-heading h3{overflow:hidden;margin:0;color:var(--text);font:600 15px/1.3 'Space Grotesk',sans-serif;text-overflow:ellipsis;white-space:nowrap}
.music-playlist-user-heading a{flex:0 0 auto;color:var(--accent);font-size:10px;font-weight:700;text-decoration:none}
.music-playlist-empty{grid-column:1/-1;margin:0;padding:14px;border:1px dashed var(--border);border-radius:9px;color:var(--text-muted);font-size:12px;text-align:center}
.home-featured-music{margin:0 0 38px;padding:26px;border:1px solid var(--border);border-radius:15px;background:var(--bg2);box-shadow:0 10px 28px #1718170a}
.home-featured-music .home-featured-header{margin-bottom:17px}
.home-featured-music .home-featured-header h2{font-size:clamp(24px,2.7vw,32px)}
.home-music-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.home-music-card{min-width:0;overflow:hidden;border:1px solid var(--border);border-radius:11px;background:var(--bg);box-shadow:0 4px 16px #1718170a}
.home-music-cover{position:relative;display:block;aspect-ratio:4/3;overflow:hidden;background:linear-gradient(135deg,#ff5938,#24251f)}
.home-music-cover img,.home-music-placeholder{display:grid;width:100%;height:100%;object-fit:cover}
.home-music-placeholder{place-items:center;color:#ffffffa6;font:700 14px 'Space Grotesk',sans-serif;letter-spacing:.18em}
.home-music-play{position:absolute;right:13px;bottom:13px;display:grid;width:42px;height:42px;place-items:center;border-radius:50%;background:var(--accent);color:#fff;font-size:15px;box-shadow:0 4px 14px #0004;transition:transform .18s ease}
.home-music-cover:hover .home-music-play,.home-music-cover:focus-visible .home-music-play{transform:scale(1.08)}
.home-music-copy{padding:14px 15px 16px}
.home-music-copy h3{margin:0;color:var(--text);font:600 16px/1.35 'Space Grotesk',sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.home-music-copy p{margin:5px 0 13px;color:var(--text-muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.home-music-listen{color:var(--accent);font-size:11px;font-weight:700;text-decoration:none}
.home-music-empty{grid-column:1/-1;margin:0;padding:22px;border:1px dashed var(--border);border-radius:9px;color:var(--text-muted);font-size:13px;text-align:center}
.home-featured-gallery{margin:0 0 42px;padding:24px;border:1px solid var(--border);border-radius:14px;background:var(--bg2);box-shadow:0 8px 24px #17181709}
.home-featured-gallery .home-featured-header{margin-bottom:16px}
.home-featured-gallery .home-featured-header h2{font-size:clamp(23px,2.5vw,30px)}
.home-gallery-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:15px}
.home-gallery-card{position:relative;display:block;min-width:0;overflow:hidden;aspect-ratio:4/3;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:#fff;text-decoration:none;box-shadow:0 4px 14px #1718170a;transition:transform .2s ease,box-shadow .2s ease}
.home-gallery-card:hover,.home-gallery-card:focus-visible{transform:translateY(-3px);box-shadow:0 12px 24px #1718171a}
.home-gallery-card:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
.home-gallery-card img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .35s ease}
.home-gallery-card:hover img,.home-gallery-card:focus-visible img{transform:scale(1.04)}
.home-gallery-title{position:absolute;inset:auto 0 0;padding:34px 92px 12px 13px;overflow:hidden;background:linear-gradient(transparent,#000c);font:600 14px/1.3 'Space Grotesk',sans-serif;text-overflow:ellipsis;text-shadow:0 1px 3px #0008;white-space:nowrap}
.home-gallery-count{position:absolute;right:10px;bottom:10px;padding:6px 9px;border:1px solid #ffffff42;border-radius:999px;background:#171817d9;font-size:10px;font-weight:700;backdrop-filter:blur(8px)}
@media(max-width:760px){.home-featured-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.home-gallery-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.home-music-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.home-featured-news{margin-bottom:32px;padding:18px}.home-featured-header{align-items:flex-start;flex-direction:column;gap:10px;margin-bottom:16px}.news-carousel-stage{aspect-ratio:4/3;min-height:340px;max-height:none}.news-carousel-shade{padding:22px 20px;background:linear-gradient(0deg,#090a09ed 0%,#090a09a8 43%,#090a0910 100%)}.news-carousel-copy{width:100%;gap:8px}.news-carousel-copy strong{font-size:clamp(23px,7vw,32px)}.news-carousel-excerpt{font-size:12px}.news-carousel-arrow{width:38px;height:38px;font-size:27px}.news-carousel-prev{left:9px}.news-carousel-next{right:9px}.news-carousel-controls{padding-top:10px}.home-featured-grid{grid-template-columns:1fr;gap:14px}.home-featured-card img,.home-featured-placeholder{aspect-ratio:16/9}.home-featured-copy{padding:15px}.home-featured-gallery{margin-bottom:32px;padding:18px}.home-featured-gallery .home-featured-header{margin-bottom:14px}.home-gallery-grid,.home-music-grid{grid-template-columns:1fr;gap:12px}.home-gallery-card{aspect-ratio:16/9}.home-featured-music{margin-bottom:30px;padding:18px}.home-featured-music .home-featured-header{margin-bottom:14px}.home-music-cover{aspect-ratio:16/9}}
@media(prefers-reduced-motion:reduce){.home-featured-card,.home-gallery-card,.home-gallery-card img,.home-music-play,.news-carousel-slide,.news-carousel-arrow,.news-carousel-dot{transition:none}}

/* Mobile layout cleanup: keep the navigation usable without wrapping into
   several tall rows, and prevent long content from widening the viewport. */
html,body{max-width:100%;overflow-x:hidden;overflow-x:clip}
body{display:flex;min-height:100vh;flex-direction:column}
.page,.layout,.content,#main-view{min-width:0;max-width:100%}
.page{width:100%;flex:1}
img,video,iframe{max-width:100%}
@media(max-width:700px){
  .page{padding:14px 14px 64px}
  .site-header{margin-bottom:16px}
  .site-logo-image{width:clamp(132px,44vw,176px);max-width:100%}
  .toolbar{position:sticky;top:0;display:flex;flex-direction:column;align-items:stretch;gap:9px;margin:0 -14px 14px;padding:8px 14px;background:#f7f6f2f5}
  .toolbar-nav{width:100%;max-width:100%;flex-wrap:nowrap;gap:5px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;padding:0 0 3px}
  .toolbar-nav::-webkit-scrollbar{display:none}
  .toolbar-nav .nav-link,.toolbar-nav .browse-toggle{flex:0 0 auto;padding:8px 10px;font-size:12px;white-space:nowrap}
  .toolbar-sort{display:flex;width:100%;justify-content:flex-end;gap:6px}
  .toolbar-sort .sort-field{min-width:0;flex:1;justify-content:flex-end;gap:6px}
  .toolbar-sort label{font-size:9px;white-space:nowrap}
  .toolbar-sort select{min-width:0;max-width:56vw;padding:7px 8px;font-size:12px}
  .toolbar-sort .layout-toggle,.toolbar-sort .theme-toggle{min-width:40px;width:40px;flex:0 0 40px;padding:7px 4px;font-size:0}
  .toolbar-sort .layout-toggle svg{margin:0}
  .whoeves-hero{min-height:230px;margin-bottom:20px;padding:20px;border-radius:12px}
  .whoeves-hero h2{max-width:100%;font-size:clamp(27px,8vw,34px);letter-spacing:-1.2px;overflow-wrap:anywhere}
  .whoeves-hero p{max-width:min(78%,330px)}
  .hero-upload{max-width:100%;white-space:normal}
  .section-label{gap:8px}
  .home-featured-news,.home-featured-gallery,.home-featured-music{min-width:0;border-radius:12px}
  .news-carousel-stage{width:100%;min-height:0;aspect-ratio:1/1.05}
  .news-carousel-copy{max-width:100%;overflow-wrap:anywhere}
  .home-featured-header h2{overflow-wrap:anywhere}
  footer{gap:12px;align-items:flex-start;flex-wrap:wrap;margin-top:30px;padding-top:17px}
}
@media(max-width:380px){
  .page{padding-right:11px;padding-left:11px}
  .toolbar{margin-right:-11px;margin-left:-11px;padding-right:11px;padding-left:11px}
  .toolbar-sort label{display:none}
  .home-featured-news,.home-featured-gallery,.home-featured-music{padding:14px}
  .news-carousel-stage{aspect-ratio:1/1.18}
  .news-carousel-shade{padding:17px 15px}
  .news-carousel-copy strong{font-size:23px}
}

.site-footer{width:100%;margin-top:auto;padding:17px 24px;background:#111;color:#f1f1ef;font:13px/1.4 'DM Sans',Arial,sans-serif}
.site-footer-inner{display:flex;max-width:1320px;min-height:40px;align-items:center;gap:30px;margin:0 auto}
.footer-copyright{flex:0 0 auto;color:#dededb;white-space:nowrap}
.footer-links{display:flex;flex:1;align-items:center;gap:34px;min-width:0}
.footer-links a,.footer-instagram{color:#ededeb;text-decoration:none;transition:color .16s ease}
.footer-links a:hover,.footer-instagram:hover{color:#ff9a7f}
.footer-instagram{display:flex;flex:0 0 auto;align-items:center;gap:8px;color:#ededeb;text-decoration:none;white-space:nowrap}
.footer-instagram svg{width:17px;height:17px;fill:currentColor}

/* Keep the active player connected while the single-page view changes. */
#persistent-player-host[hidden]{display:none!important}
#persistent-player-host:not([hidden]){position:fixed;z-index:100000;right:16px;bottom:16px;width:min(380px,calc(100vw - 32px));max-height:min(230px,calc(100vh - 32px));overflow:visible;padding:6px;border:1px solid var(--border);border-radius:12px;background:var(--bg2);box-shadow:0 12px 38px #0007}
#persistent-player-host>.player-entry{margin:0!important;border-radius:8px;opacity:1;transform:none;animation:none!important}
#persistent-player-host offgrid-player,#persistent-player-host offgrid-playlist{display:block;width:100%;max-width:100%}
#persistent-player-host .track-social{display:none}
@media(max-width:600px){#persistent-player-host:not([hidden]){right:8px;bottom:8px;width:calc(100vw - 16px);max-height:170px;padding:5px}}
#whoeves-queue[hidden],#whoeves-queue-panel[hidden]{display:none!important}
#whoeves-queue{position:fixed;right:16px;bottom:16px;z-index:100002;font:500 13px/1.4 'IBM Plex Sans',sans-serif;color:var(--text,#171717)}
#whoeves-queue.with-player{position:relative;right:auto;bottom:auto;z-index:2;width:100%;margin-top:2px}
#whoeves-queue-toggle{display:flex;align-items:center;gap:8px;min-height:40px;padding:0 13px;border:1px solid var(--border,#dedbd5);border-radius:999px;background:var(--bg2,#fff);color:var(--text,#171717);box-shadow:0 8px 24px #0003;font:inherit;font-weight:600;cursor:pointer}
#whoeves-queue-toggle:hover{border-color:var(--accent,#ff5938);transform:translateY(-1px)}
#whoeves-queue-toggle svg{width:17px;height:17px;fill:currentColor}
#whoeves-queue.with-player #whoeves-queue-toggle{width:100%;min-height:32px;justify-content:flex-start;padding:0 8px;border:0;border-top:1px solid var(--border,#dedbd5);border-radius:0;background:transparent;box-shadow:none}
#whoeves-queue.with-player #whoeves-queue-toggle:hover{transform:none;border-color:var(--border,#dedbd5);color:var(--accent,#ff5938)}
#whoeves-queue.with-player #whoeves-queue-toggle b{margin-left:auto}
#whoeves-queue-toggle b{display:grid;place-items:center;min-width:20px;height:20px;padding:0 5px;border-radius:999px;background:var(--accent,#ff5938);color:#fff;font-size:11px}
#whoeves-queue-panel{position:absolute;right:0;bottom:calc(100% + 9px);width:min(360px,calc(100vw - 32px));max-height:min(330px,calc(100vh - 220px));overflow:auto;border:1px solid var(--border,#dedbd5);border-radius:14px;background:var(--bg2,#fff);box-shadow:0 14px 40px #0003}
#whoeves-queue-panel header{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;padding:13px 14px;border-bottom:1px solid var(--border,#dedbd5);background:var(--bg2,#fff)}
#whoeves-queue-panel header strong{font-size:14px}
#whoeves-queue-clear,#whoeves-queue .whoeves-queue-play,#whoeves-queue .whoeves-queue-remove{border:0;background:transparent;color:var(--text-muted,#666);font:inherit;cursor:pointer}
#whoeves-queue-clear{font-size:12px}
#whoeves-queue-clear:hover,#whoeves-queue .whoeves-queue-remove:hover{color:#d73829}
#whoeves-queue-list{display:grid;gap:2px;margin:0;padding:6px;list-style:none}
#whoeves-queue .whoeves-queue-item{display:flex;align-items:center;gap:9px;min-height:54px;padding:6px 7px;border-radius:9px}
#whoeves-queue .whoeves-queue-item:hover{background:color-mix(in srgb,var(--border,#ddd) 30%,transparent)}
#whoeves-queue .whoeves-queue-item img{width:40px;height:40px;flex:0 0 40px;border-radius:6px;object-fit:cover}
#whoeves-queue .whoeves-queue-info{display:grid;flex:1;min-width:0;gap:2px}
#whoeves-queue .whoeves-queue-info strong,#whoeves-queue .whoeves-queue-info span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#whoeves-queue .whoeves-queue-info strong{font-size:12px}
#whoeves-queue .whoeves-queue-info span{color:var(--text-muted,#777);font-size:11px}
#whoeves-queue .whoeves-queue-play{padding:5px 8px;border-radius:6px;background:var(--bg,#f5f5f5);font-size:11px}
#whoeves-queue .whoeves-queue-play:hover{color:var(--accent,#ff5938)}
#whoeves-queue .whoeves-queue-remove{width:25px;height:28px;font-size:19px}
#whoeves-queue-empty{margin:0;padding:15px;color:var(--text-muted,#777);font-size:12px}
@media(max-width:600px){#persistent-player-host:not([hidden]){max-height:min(230px,calc(100vh - 24px))}#whoeves-queue{right:8px;bottom:8px}#whoeves-queue.with-player{position:relative;right:auto;bottom:auto;width:100%;margin-top:2px}#whoeves-queue-panel{width:calc(100vw - 32px);max-height:min(300px,calc(100vh - 190px))}}
.site-footer a:focus-visible{outline:2px solid #ff9a7f;outline-offset:4px;border-radius:3px}
@media(max-width:760px){.site-footer{padding:18px 16px}.site-footer-inner{justify-content:center;flex-wrap:wrap;gap:14px 20px}.footer-links{order:3;flex-basis:100%;justify-content:center;flex-wrap:wrap;gap:12px 22px}.footer-instagram{order:2}.footer-copyright{order:1}}

/* Short Whoeves logo intro shown once per browser session on the homepage. */
.logo-intro-screen{display:none}
html.logo-intro .logo-intro-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;display:flex;align-items:center;justify-content:center;overflow:hidden;background:#171916;background:radial-gradient(ellipse at 50% 48%,#282923 0,#171916 48%,#10110f 100%);opacity:1;transition:opacity .82s cubic-bezier(.22,.61,.36,1),visibility 0s linear .82s;visibility:visible}
@supports(display:grid){html.logo-intro .logo-intro-screen{display:grid;place-items:center}}
.logo-intro-screen.is-leaving{opacity:0;visibility:hidden}
.logo-intro-mark{position:relative;z-index:2;display:block;width:78vw;max-width:620px;height:auto;opacity:1;transition:opacity .72s ease,transform .82s cubic-bezier(.22,.61,.36,1)}
.logo-intro-orbit{position:absolute;top:50%;left:50%;width:74vw;height:74vw;max-width:600px;max-height:600px;border:1px solid #ff795738;border-radius:50%;opacity:.55;transform:translate(-50%,-50%);transition:opacity .72s ease,transform .82s cubic-bezier(.22,.61,.36,1)}
.logo-intro-orbit-two{width:92vw;height:92vw;max-width:760px;max-height:760px;border-color:#ffffff12}
.logo-intro-line{position:absolute;left:50%;top:calc(50% + 12vw);width:32vw;max-width:250px;height:2px;background:#ff6847;transform:translateX(-50%);transform-origin:center;box-shadow:0 0 18px #ff6847a8;transition:opacity .55s ease,transform .65s cubic-bezier(.22,.61,.36,1)}
html.logo-intro .logo-intro-screen.is-leaving .logo-intro-mark{animation:none;opacity:0;transform:translateY(-8px) scale(1.025)}
html.logo-intro .logo-intro-screen.is-leaving .logo-intro-orbit{animation:none;opacity:0;transform:translate(-50%,-50%) scale(1.08)}
html.logo-intro .logo-intro-screen.is-leaving .logo-intro-line{animation:none;opacity:0;transform:translateX(-50%) scaleX(.3)}
@supports(animation-name:whoeves-logo-arrive){
  .logo-intro-mark{opacity:0;transform:translateY(12px) scale(.94);animation:whoeves-logo-arrive .72s cubic-bezier(.2,.75,.25,1) .12s forwards}
  .logo-intro-orbit{opacity:0;transform:translate(-50%,-50%) scale(.72);animation:whoeves-orbit-arrive .9s ease-out forwards}
  .logo-intro-orbit-two{animation-delay:.08s}
  .logo-intro-line{transform:translateX(-50%) scaleX(0);animation:whoeves-line-arrive .5s ease-out .58s forwards}
}
@keyframes whoeves-logo-arrive{to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes whoeves-orbit-arrive{to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
@keyframes whoeves-line-arrive{to{transform:translateX(-50%) scaleX(1)}}
@media(prefers-reduced-motion:reduce){.logo-intro-screen{display:none!important}.logo-intro-mark,.logo-intro-orbit,.logo-intro-line{animation:none!important}}

.home-live-broadcast{margin:0 0 34px;overflow:hidden;border:1px solid var(--border);border-radius:16px;background:var(--bg2);box-shadow:0 12px 34px #1718170b}
.home-live-heading{display:grid;justify-items:start;gap:7px;padding:22px 26px 18px}
.home-live-badge{display:inline-flex;align-items:center;gap:7px;color:#e34b32;font-size:10px;font-weight:800;letter-spacing:.16em}
.home-live-badge:before{content:"";width:8px;height:8px;border-radius:50%;background:#f24831;box-shadow:0 0 0 4px #f248311c;animation:home-live-pulse 1.8s ease-in-out infinite}
.home-live-heading h2{margin:0;color:var(--text);font:600 clamp(22px,3vw,32px)/1.15 'Space Grotesk',sans-serif;letter-spacing:-.035em}
.home-live-heading p{margin:0;color:var(--text-muted);font-size:13px;line-height:1.5}
.home-live-details{color:var(--accent);font-size:11px;font-weight:700;text-decoration:none}
.home-live-details:hover{text-decoration:underline}
.home-live-content{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(280px,.85fr);align-items:stretch;gap:16px;padding:0 22px 22px}
.home-live-frame-wrap{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;border:1px solid var(--border);border-radius:12px;background:#080808}
.home-live-frame-wrap iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.home-live-chat-frame{display:block;width:100%;height:clamp(360px,35vw,420px);border:0;border-radius:12px;background:var(--bg)}
@keyframes home-live-pulse{50%{box-shadow:0 0 0 7px #f248310b;opacity:.7}}
@media(max-width:760px){.home-live-content{grid-template-columns:minmax(0,1fr)}.home-live-chat-frame{height:420px}}
@media(max-width:600px){.home-live-broadcast{margin-bottom:28px;border-radius:12px}.home-live-heading{padding:18px 17px 15px}.home-live-content{grid-template-columns:minmax(0,1fr);gap:13px;padding:0 14px 14px}.home-live-frame-wrap{aspect-ratio:16/9}.home-live-chat-frame{height:420px}}
@media(prefers-reduced-motion:reduce){.home-live-badge:before{animation:none}}
:root[data-theme="dark"] .home-live-broadcast,:root[data-theme="color"] .home-live-broadcast{background:var(--bg2);border-color:var(--border)}
@media(max-width:600px){.music-playlist-section{margin-bottom:17px;padding:15px}.music-playlist-grid{grid-template-columns:minmax(0,1fr);gap:8px}.music-playlist-card{grid-template-columns:72px minmax(0,1fr);min-height:92px;padding:8px}.music-playlist-art{width:72px}}
@media(max-width:1099px){.browse-panel.music-playlist-rail{grid-template-rows:auto;padding:14px;margin-bottom:16px;opacity:1}.browse-panel.music-playlist-rail .browse-panel-inner{visibility:visible;overflow:visible}.music-playlist-sidebar{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px;margin-top:14px;padding-top:13px}.music-playlist-sidebar .music-playlist-section{margin-bottom:0}}
