:root {
  color-scheme: dark;
  --accent: #ff2a1a;
  --edge-x: clamp(22px, 6vw, 56px);
  --edge-top: max(24px, env(safe-area-inset-top));
  --edge-bottom: max(24px, env(safe-area-inset-bottom));
  font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, Arial, sans-serif;
  background: #151515;
}

* { box-sizing: border-box; }

html,
body {
  width: 100%;
  height: 100%;
  margin: 0;
  overflow: hidden;
  background: #151515;
  color: #f5f5f2;
  -webkit-font-smoothing: antialiased;
}

button,
a { -webkit-tap-highlight-color: transparent; }

button { font: inherit; }

.radio-app {
  position: fixed;
  inset: 0;
  min-height: 100dvh;
  overflow: hidden;
  isolation: isolate;
  background: #151515;
}

.fallback,
.visual-stage,
.readability,
.projects-scrim {
  position: absolute;
  inset: 0;
}

.fallback {
  z-index: 0;
  display: grid;
  place-items: center;
  overflow: hidden;
  background: #151515;
}

.fallback img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  object-position: center;
}

.visual-stage { z-index: 1; }

.visual {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 420ms ease;
}

.visual.is-active { opacity: 1; }

.readability {
  z-index: 2;
  pointer-events: none;
  background:
    linear-gradient(180deg, rgba(0,0,0,.50) 0%, rgba(0,0,0,.08) 25%, rgba(0,0,0,.03) 54%, rgba(0,0,0,.78) 100%),
    linear-gradient(90deg, rgba(0,0,0,.18), transparent 48%);
}

.projects-scrim {
  z-index: 3;
  pointer-events: none;
  opacity: 0;
  background: rgba(0,0,0,.56);
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
  transition: opacity 210ms ease;
}

.radio-app.projects-open .projects-scrim { opacity: 1; }

.header {
  position: absolute;
  z-index: 6;
  top: 0;
  left: 0;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: calc(var(--edge-top) + 9px) var(--edge-x) 0;
  pointer-events: none;
}

.wordmark {
  font-size: clamp(13px, 3.5vw, 16px);
  font-weight: 500;
  line-height: 1;
  letter-spacing: .19em;
  text-transform: uppercase;
  white-space: nowrap;
  text-shadow: 0 1px 16px rgba(0,0,0,.4);
}

.projects-toggle {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  width: 76px;
  min-width: 48px;
  height: 48px;
  margin: -14px -11px -14px 0;
  padding: 8px 10px;
  border: 0;
  color: inherit;
  background: transparent;
  pointer-events: auto;
  cursor: pointer;
}

.projects-toggle:focus-visible,
.playback:focus-visible,
.now-playing:focus-visible,
.project-row:focus-visible {
  outline: 1px solid rgba(255,255,255,.82);
  outline-offset: 4px;
}

.nn-logo {
  display: block;
  width: 38px;
  height: 38px;
  object-fit: contain;
}

.chevron {
  width: 8px;
  height: 8px;
  margin-top: -4px;
  border-right: 1px solid rgba(255,255,255,.62);
  border-bottom: 1px solid rgba(255,255,255,.62);
  transform: rotate(45deg);
  transition: transform 210ms ease, margin 210ms ease;
}

.projects-open .chevron {
  margin-top: 4px;
  transform: rotate(225deg);
}

.projects {
  position: absolute;
  z-index: 5;
  inset: calc(var(--edge-top) + 84px) var(--edge-x) calc(var(--edge-bottom) + 126px);
  visibility: hidden;
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 210ms ease, transform 210ms ease, visibility 0s linear 210ms;
  pointer-events: none;
}

.projects-open .projects {
  visibility: visible;
  opacity: 1;
  transform: translateY(0);
  transition-delay: 0s;
  pointer-events: auto;
}

.project-list {
  height: 100%;
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}

.project-list::-webkit-scrollbar { display: none; }

.project-row {
  display: grid;
  grid-template-columns: 50px minmax(0, 1fr) 22px;
  gap: 16px;
  align-items: center;
  min-height: 76px;
  padding: 11px 0;
  color: inherit;
  text-decoration: none;
}

.project-logo-wrap {
  display: grid;
  place-items: center;
  width: 50px;
  height: 50px;
}

.project-logo {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.project-copy { min-width: 0; }

.project-name {
  display: block;
  font-size: clamp(17px, 4.6vw, 20px);
  font-weight: 500;
  line-height: 1.16;
}

.project-description {
  display: block;
  margin-top: 5px;
  color: rgba(255,255,255,.62);
  font-size: clamp(12px, 3.3vw, 14px);
  line-height: 1.32;
}

.external-arrow,
.project-arrow {
  color: var(--accent);
  font-weight: 300;
}

.project-arrow {
  justify-self: end;
  font-size: 24px;
  line-height: 1;
}

.bottom-controls {
  position: absolute;
  z-index: 6;
  left: var(--edge-x);
  right: var(--edge-x);
  bottom: calc(var(--edge-bottom) + 8px);
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 22px;
}

/* OWNER_NOW_PLAYING_V12_START */

/*
  V12 Now Playing:
  tiny editorial caption at the absolute visual bottom.
  The visible typography is intentionally microscopic,
  while the actual touch target remains >= 44 CSS px.
*/

.now-playing {
  position: relative;
  bottom: -6px;

  flex: 1 1 auto;

  min-width: 0;
  min-height: 44px;
  width: auto;
  max-width: min(720px, calc(100% - 108px));

  padding: 0;

  display: flex;
  align-items: flex-end;

  color: #D63A43;
  text-decoration: none;

  cursor: pointer;

  opacity: 1;

  -webkit-tap-highlight-color: transparent;

  transition:
    opacity 120ms ease;
}

.now-playing[hidden] {
  display: none !important;
}

.track-artist-row {
  display: -webkit-box;

  width: 100%;
  margin: 0;
  padding: 0;

  overflow: hidden;

  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;

  color: #D63A43;

  font-family:
    "SF Pro Text",
    -apple-system,
    BlinkMacSystemFont,
    "Helvetica Neue",
    Arial,
    sans-serif;

  font-size: clamp(10px, 1vw, 11px);
  font-style: normal;
  font-weight: 500;

  line-height: 1.35;
  letter-spacing: 0.16em;

  text-align: left;
  text-transform: uppercase;

  white-space: normal;
  overflow-wrap: anywhere;

  text-shadow: none;
}

#track-artist,
.track-title,
.track-separator {
  display: inline;

  margin: 0;
  padding: 0;

  overflow: visible;

  font: inherit;
  color: inherit;

  text-overflow: clip;
  white-space: normal;
}

.now-playing:hover {
  opacity: 0.84;
}

.now-playing:active {
  opacity: 0.66;
}

@media (max-width: 480px) {
  .now-playing {
    bottom: -6px;
    max-width: calc(100% - 100px);
  }

  .track-artist-row {
    font-size: 10px;
    line-height: 1.34;
    letter-spacing: 0.145em;
  }
}

/* OWNER_NOW_PLAYING_V12_END */

.playback {
  position: relative;
  flex: 0 0 auto;
  width: clamp(74px, 20vw, 84px);
  height: clamp(74px, 20vw, 84px);
  border: 1px solid rgba(255,255,255,.58);
  border-radius: 50%;
  color: #fff;
  background: rgba(0,0,0,.12);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  cursor: pointer;
  transition: transform 120ms ease, opacity 160ms ease;
}

.playback:active { transform: scale(.97); }
.playback.is-connecting { opacity: .68; }

.play-icon,
.play-icon::before,
.play-icon::after {
  position: absolute;
  display: block;
  content: "";
}

.play-icon {
  top: 50%;
  left: 50%;
  width: 0;
  height: 0;
  margin: -11px 0 0 -7px;
  border-top: 11px solid transparent;
  border-bottom: 11px solid transparent;
  border-left: 17px solid #fff;
}

.is-playing .play-icon {
  width: 15px;
  height: 24px;
  margin: -12px 0 0 -7px;
  border: 0;
}

.is-playing .play-icon::before,
.is-playing .play-icon::after {
  top: 0;
  width: 2px;
  height: 24px;
  background: #fff;
}

.is-playing .play-icon::before { left: 2px; }
.is-playing .play-icon::after { right: 2px; }

.status {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

@media (max-height: 690px) {
  .projects {
    top: calc(var(--edge-top) + 70px);
    bottom: calc(var(--edge-bottom) + 108px);
  }

  .project-row {
    grid-template-columns: 44px minmax(0, 1fr) 20px;
    min-height: 65px;
    gap: 13px;
    padding: 7px 0;
  }

  .project-logo-wrap { width: 44px; height: 44px; }
  .project-description { margin-top: 3px; }
}

@media (min-width: 800px) {
  .projects { right: max(var(--edge-x), calc(100vw - 760px)); }
  .readability { background: linear-gradient(180deg, rgba(0,0,0,.48), transparent 30%, rgba(0,0,0,.76)); }
}

@media (prefers-reduced-motion: reduce) {
  .visual,
  .projects-scrim,
  .projects,
  .chevron,
  .playback {
    transition-duration: 1ms !important;
    animation-duration: 1ms !important;
  }

  .projects { transform: none; }
}

/* =========================================================
   FRONTEND V2 — owner review 2026-08-25
   ========================================================= */

/* Play/Pause: bottom-right on every viewport */
.bottom-controls {
  justify-content: flex-end;
}

.playback {
  margin-left: auto;
}

/*
 * Permanent Ws artwork:
 * black/dark pixels blend into the application's own black surface,
 * while the original Ws artwork itself remains unchanged.
 */
.fallback {
  background: #000;
  overflow: hidden;
}

.fallback img {
  mix-blend-mode: screen;
}

/* Desktop Projects belongs spatially to NN, not to the left edge */
@media (min-width: 800px) {
  .projects {
    left: auto;
    right: var(--edge-x);
    width: min(500px, 42vw);
  }

  .project-list {
    width: 100%;
    margin-left: auto;
  }

  .project-row {
    grid-template-columns: 44px minmax(0, 1fr) 18px;
    column-gap: 14px;
    width: 100%;
  }

  .project-row > :last-child {
    justify-self: start;
    margin-left: 0;
  }
}

/* Mobile invariant: Play/Pause always remains at the right edge */
@media (max-width: 799px) {
  .bottom-controls {
    justify-content: flex-end;
  }

  .playback {
    margin-left: auto;
  }
}


/* Owner visual review — 2026-08-25 */

/* Playback control: bottom-right everywhere */
.bottom-controls {
  justify-content: flex-end;
}

.playback {
  margin-left: auto;
}

/* Ws fallback must read as one continuous dark surface */
.fallback {
  background: #000;
  overflow: hidden;
}

.fallback img {
  mix-blend-mode: screen;
}

/* Desktop: Projects belongs spatially to NN */
@media (min-width: 800px) {
  .projects {
    left: auto;
    right: var(--edge-x);
    width: min(500px, 42vw);
  }

  .project-list {
    width: 100%;
    margin-left: auto;
  }

  .project-row {
    grid-template-columns: 44px minmax(0, max-content) 18px;
    justify-content: start;
    column-gap: 14px;
  }

  .project-row > :last-child {
    justify-self: start;
    margin-left: 0;
  }
}

/* Mobile: Play/Pause must stay on right */
@media (max-width: 799px) {
  .bottom-controls {
    justify-content: flex-end;
  }

  .playback {
    margin-left: auto;
  }
}


/* OWNER_FRONTEND_V2_20260825 */

/* Play/Pause bottom-right on desktop + mobile */
.playback {
  position: fixed;
  right: var(--edge-x);
  left: auto;
  bottom: calc(var(--edge-y) + env(safe-area-inset-bottom));
  margin: 0;
}

/* Permanent fallback merges visually with viewport */
.fallback {
  background: #000;
  overflow: hidden;
}

.fallback img {
  mix-blend-mode: screen;
}

/* Desktop Projects opens spatially below NN */
@media (min-width: 800px) {
  .projects {
    left: auto;
    right: var(--edge-x);
    width: min(500px, 42vw);
  }

  .project-list {
    width: 100%;
    margin-left: auto;
  }

  .project-row {
    grid-template-columns: 44px minmax(0, max-content) 18px;
    justify-content: start;
    column-gap: 14px;
  }

  .project-row > :last-child {
    justify-self: start;
    margin-left: 0;
  }
}

/* Mobile invariant */
@media (max-width: 799px) {
  .playback {
    right: var(--edge-x);
    left: auto;
  }
}


/* ==========================================================
   OWNER_FRONTEND_V4_20260825
   Final Frontend Technical Specification alignment
   ========================================================== */

:root {
  --ws-surface: #151515;
}

/* ---------- BASE / PERMANENT FALLBACK ---------- */

html,
body,
.app,
.radio-app,
.visual-stage,
.fallback {
  background: var(--ws-surface) !important;
}

.fallback {
  position: absolute;
  inset: 0;
  overflow: hidden;
}

.fallback img {
  width: 100%;
  height: 100%;
  object-fit: contain !important;
  object-position: center !important;
  background: var(--ws-surface) !important;

  /* preserve original artwork */
  mix-blend-mode: normal !important;
  filter: none !important;
}

/* ---------- PLAYBACK ---------- */

/*
 * Final placement:
 * bottom-right on desktop and mobile.
 */
.playback {
  position: fixed !important;

  left: auto !important;
  right: calc(var(--edge-x) + env(safe-area-inset-right)) !important;

  top: auto !important;
  bottom: calc(var(--edge-y) + env(safe-area-inset-bottom)) !important;

  margin: 0 !important;

  z-index: 60;
}

/* ---------- PROJECTS BACKDROP ---------- */

/*
 * Projects remains an OVERLAY over the entire radio.
 * Never shrink the overlay itself into a right-hand panel.
 */
.projects {
  position: fixed !important;

  inset: 0 !important;

  width: auto !important;
  max-width: none !important;

  left: 0 !important;
  right: 0 !important;
}

/* ---------- DESKTOP PROJECTS COMPOSITION ---------- */

@media (min-width: 800px) {

  /*
   * Only the project list/panel is anchored near NN.
   * The dark overlay still covers the whole viewport.
   */
  #projects-panel,
  .projects-panel {
    position: absolute !important;

    top: calc(env(safe-area-inset-top) + 82px) !important;
    right: var(--edge-x) !important;
    left: auto !important;

    width: min(460px, calc(100vw - (2 * var(--edge-x)))) !important;
    max-width: 460px !important;

    margin: 0 !important;
  }

  .project-list {
    width: 100% !important;
    max-width: 100% !important;

    margin-left: auto !important;
    margin-right: 0 !important;
  }

  /*
   * Logo + compact text + arrow.
   * Arrow belongs visually to the project information,
   * not to the opposite side of the viewport.
   */
  .project-row {
    display: grid !important;

    grid-template-columns:
      48px
      minmax(0, max-content)
      18px !important;

    justify-content: start !important;
    align-items: start !important;

    width: fit-content !important;
    max-width: 100% !important;

    column-gap: 13px !important;
  }

  .project-copy,
  .project-info,
  .project-text {
    width: max-content !important;
    max-width: 330px !important;
  }

  .project-row > :last-child,
  .project-arrow {
    justify-self: start !important;

    margin-left: 2px !important;
    margin-right: 0 !important;
    margin-top: 2px !important;
  }
}

/* ---------- MOBILE ---------- */

@media (max-width: 799px) {

  /*
   * Owner invariant:
   * Play/Pause always bottom-right.
   */
  .playback {
    left: auto !important;
    right: calc(var(--edge-x) + env(safe-area-inset-right)) !important;

    bottom: calc(
      var(--edge-y) + env(safe-area-inset-bottom)
    ) !important;
  }

}

/* ---------- NEVER ALTER ORIGINAL WS MARK ---------- */

.fallback img {
  opacity: 1 !important;
}


/* OWNER_FRONTEND_V5_20260825 */

/* =========================================================
   GLOBAL / EDGE TO EDGE
   ========================================================= */

html,
body {
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;

  overflow: hidden;

  background: #151515;
}

body {
  min-height: 100dvh;
  overscroll-behavior: none;
}


/* =========================================================
   PERMANENT WS FALLBACK

   It is ALWAYS below the visual.
   Projects must NEVER paint an opaque surface over it.
   ========================================================= */

.fallback {
  position: fixed !important;
  inset: 0 !important;

  display: block !important;
  visibility: visible !important;

  background: #151515 !important;

  overflow: hidden !important;
  pointer-events: none !important;

  z-index: 0 !important;
}

.fallback img {
  position: absolute !important;
  inset: 0 !important;

  width: 100% !important;
  height: 100% !important;

  object-fit: contain !important;
  object-position: center center !important;

  opacity: 1 !important;

  background: #151515 !important;

  mix-blend-mode: normal !important;
  filter: none !important;
}


/* =========================================================
   VISUAL
   ========================================================= */

.visual-stage {
  position: fixed !important;
  inset: 0 !important;

  z-index: 1 !important;

  overflow: hidden !important;
}


/* =========================================================
   PROJECTS BACKDROP

   ONLY this element covers the viewport.
   It must remain translucent so visual / Ws is visible below.
   ========================================================= */

.projects-scrim {
  position: fixed !important;
  inset: 0 !important;

  background: rgba(0, 0, 0, 0.52) !important;

  -webkit-backdrop-filter: blur(1px);
  backdrop-filter: blur(1px);

  z-index: 20 !important;
}


/* =========================================================
   PROJECTS ITSELF IS NOT A FULLSCREEN BLACK PANEL
   ========================================================= */

.projects {
  background: transparent !important;

  z-index: 30 !important;

  box-sizing: border-box !important;

  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}

.project-list {
  box-sizing: border-box !important;

  overflow-x: hidden !important;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}

.project-row {
  box-sizing: border-box !important;

  min-width: 0 !important;

  text-decoration: none !important;
}

.project-row > :nth-child(2) {
  min-width: 0 !important;
}

.project-name,
.project-description {
  overflow-wrap: anywhere;
}


/* =========================================================
   HEADER / PLAYER ABOVE PROJECT SCRIM
   ========================================================= */

.projects-toggle {
  z-index: 50 !important;
}

.playback {
  position: fixed !important;

  left: auto !important;
  top: auto !important;

  margin: 0 !important;

  z-index: 50 !important;
}


/* =========================================================
   DESKTOP
   ========================================================= */

@media (min-width: 800px) {

  .projects {
    position: fixed !important;

    top: calc(env(safe-area-inset-top) + 78px) !important;
    right: calc(env(safe-area-inset-right) + 30px) !important;
    bottom: calc(env(safe-area-inset-bottom) + 112px) !important;
    left: auto !important;

    width: min(460px, calc(100vw - 60px)) !important;
    max-width: 460px !important;

    padding: 0 !important;

    overflow: hidden !important;
  }

  .project-list {
    width: 100% !important;
    height: 100% !important;

    padding: 0 0 18px 0 !important;

    overflow-y: auto !important;
  }

  /*
   * Logo | project information | arrow
   *
   * max-content keeps the red arrow close to the information
   * instead of throwing it to the far side of the screen.
   */
  .project-row {
    display: grid !important;

    grid-template-columns:
      50px
      minmax(0, max-content)
      20px !important;

    justify-content: start !important;
    align-items: center !important;

    width: max-content !important;
    max-width: 100% !important;

    column-gap: 13px !important;

    padding: 8px 0 !important;
  }

  .project-row > :nth-child(2) {
    width: max-content !important;
    max-width: 330px !important;
  }

  .project-name,
  .project-description {
    max-width: 330px !important;
    white-space: normal !important;
  }

  .project-row > :last-child,
  .project-arrow {
    justify-self: start !important;

    margin-left: 2px !important;
    margin-right: 0 !important;
  }

  .playback {
    right: calc(env(safe-area-inset-right) + 30px) !important;
    bottom: calc(env(safe-area-inset-bottom) + 26px) !important;
  }
}


/* =========================================================
   IPHONE / MOBILE
   ========================================================= */

@media (max-width: 799px) {

  /*
   * Header remains above.
   * Player remains below.
   * ONLY this middle region contains the project list.
   */
  .projects {
    position: fixed !important;

    top: calc(env(safe-area-inset-top) + 88px) !important;
    right: 0 !important;
    bottom: calc(env(safe-area-inset-bottom) + 118px) !important;
    left: 0 !important;

    width: 100% !important;
    max-width: none !important;

    padding:
      4px
      calc(env(safe-area-inset-right) + 20px)
      20px
      calc(env(safe-area-inset-left) + 20px)
      !important;

    overflow: hidden !important;
  }

  .project-list {
    width: 100% !important;
    height: 100% !important;

    margin: 0 !important;
    padding: 0 !important;

    overflow-y: auto !important;
    overflow-x: hidden !important;
  }

  .project-row {
    display: grid !important;

    grid-template-columns:
      52px
      minmax(0, 1fr)
      24px !important;

    width: 100% !important;
    max-width: 100% !important;

    align-items: center !important;

    column-gap: 12px !important;

    margin: 0 !important;
    padding: 9px 0 !important;
  }

  /*
   * Normalize every real project logo inside its 52px identity slot.
   * No logo is allowed to leave the viewport.
   */
  .project-row > :first-child {
    width: 52px !important;
    height: 52px !important;

    min-width: 52px !important;
    max-width: 52px !important;

    display: grid !important;
    place-items: center !important;

    margin: 0 !important;
    padding: 0 !important;

    overflow: visible !important;
  }

  .project-row > :first-child img,
  .project-logo {
    width: auto !important;
    height: auto !important;

    max-width: 48px !important;
    max-height: 48px !important;

    object-fit: contain !important;
    object-position: center !important;

    margin: 0 !important;
  }

  .project-row > :nth-child(2) {
    width: auto !important;
    max-width: 100% !important;

    margin: 0 !important;
  }

  .project-name {
    margin: 0 !important;

    font-size: 18px !important;
    line-height: 1.18 !important;

    white-space: normal !important;
  }

  .project-description {
    margin-top: 5px !important;

    font-size: 13.5px !important;
    line-height: 1.35 !important;

    white-space: normal !important;

    opacity: 0.64;
  }

  .project-row > :last-child,
  .project-arrow {
    justify-self: end !important;
    align-self: start !important;

    margin: 2px 0 0 0 !important;

    font-size: 23px !important;
    line-height: 1 !important;
  }

  /*
   * Owner invariant:
   * Play/Pause is ALWAYS bottom-right on iPhone.
   */
  .playback {
    right: calc(env(safe-area-inset-right) + 20px) !important;
    bottom: calc(env(safe-area-inset-bottom) + 20px) !important;

    width: 78px !important;
    height: 78px !important;
  }
}


/* =========================================================
   REDUCED MOTION
   ========================================================= */

@media (prefers-reduced-motion: reduce) {
  .projects,
  .projects-scrim,
  .visual {
    transform: none !important;
    transition-duration: 0.01ms !important;
  }
}


/* OWNER_FRONTEND_V6_FALLBACK_20260825 */

/*
 * Exact background color sampled from the canonical
 * Without Streaming artwork:
 * RGB 19,19,20 = #131314
 */
:root {
  --ws-fallback-surface: #131314;
}

html,
body,
.app,
.radio-app {
  background: var(--ws-fallback-surface) !important;
}

/*
 * Permanent visual anchor.
 *
 * The canonical artwork itself is used as the layer background,
 * so the Ws can never disappear because of image sizing/layout.
 */
.fallback {
  position: fixed !important;
  inset: 0 !important;

  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;

  z-index: 0 !important;

  background-color: var(--ws-fallback-surface) !important;
  background-image:
    url("/assets/without-streaming-fallback.png?v=20260825-v6") !important;
  background-repeat: no-repeat !important;
  background-position: center center !important;
  background-size: contain !important;

  pointer-events: none !important;
  overflow: hidden !important;
}

/*
 * Keep the existing DOM image as a second canonical rendering path.
 * Same asset, same contain geometry.
 */
.fallback > img {
  position: absolute !important;
  inset: 0 !important;

  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;

  width: 100% !important;
  height: 100% !important;

  object-fit: contain !important;
  object-position: center center !important;

  background: transparent !important;

  mix-blend-mode: normal !important;
  filter: none !important;
}

/*
 * Critical correction:
 * an EMPTY visual stage must be transparent.
 *
 * Only a real ready visual is allowed to cover the Ws artwork.
 */
.visual-stage {
  background: transparent !important;
}

.visual {
  background: transparent !important;
}

/*
 * Projects scrim remains translucent.
 * Therefore either current visual or Ws remains visible underneath.
 */
.projects-scrim {
  background: rgba(0, 0, 0, 0.52) !important;
}

/*
 * Never create an opaque Projects surface over fallback.
 */
.projects {
  background: transparent !important;
}


/* OWNER_PROJECTS_V10_START */

/* =========================================================
   PROJECTS V10
   Quiet glass directory over the live visual.
   Projects never alter audio or visual playback.
   ========================================================= */

.projects-scrim {
  background: rgba(0, 0, 0, 0.22) !important;

  -webkit-backdrop-filter: blur(3px) saturate(0.92) !important;
  backdrop-filter: blur(3px) saturate(0.92) !important;
}


/* ---------------------------------------------------------
   PANEL
   --------------------------------------------------------- */

.projects {
  position: fixed !important;

  top: calc(env(safe-area-inset-top, 0px) + 78px) !important;
  right: max(16px, env(safe-area-inset-right, 0px)) !important;
  bottom: calc(env(safe-area-inset-bottom, 0px) + 104px) !important;
  left: max(16px, env(safe-area-inset-left, 0px)) !important;

  width: auto !important;
  max-width: none !important;
  min-width: 0 !important;

  box-sizing: border-box !important;

  padding: 5px !important;

  overflow: hidden !important;

  border-radius: 30px !important;

  background:
    linear-gradient(
      180deg,
      rgba(17, 17, 18, 0.82) 0%,
      rgba(10, 10, 11, 0.78) 100%
    ) !important;

  border: 1px solid rgba(255, 255, 255, 0.075) !important;

  -webkit-backdrop-filter:
    blur(24px)
    saturate(1.08) !important;

  backdrop-filter:
    blur(24px)
    saturate(1.08) !important;

  box-shadow:
    0 24px 70px rgba(0, 0, 0, 0.38),
    inset 0 1px 0 rgba(255, 255, 255, 0.035),
    inset -18px 0 50px rgba(225, 30, 20, 0.025) !important;
}


/* almost invisible NN-red atmosphere */
.projects::before {
  content: "";

  position: absolute;
  inset: 0;

  pointer-events: none;

  border-radius: inherit;

  background:
    radial-gradient(
      circle at 100% 0%,
      rgba(235, 28, 18, 0.10) 0%,
      rgba(235, 28, 18, 0.035) 24%,
      transparent 48%
    );

  z-index: 0;
}


/* ---------------------------------------------------------
   SCROLL AREA
   Only this area scrolls on short screens.
   --------------------------------------------------------- */

.project-list {
  position: relative !important;
  z-index: 1 !important;

  width: 100% !important;
  max-width: none !important;

  height: 100% !important;
  max-height: 100% !important;

  padding: 4px !important;

  overflow-y: auto !important;
  overflow-x: hidden !important;

  overscroll-behavior: contain !important;
  -webkit-overflow-scrolling: touch !important;

  scrollbar-width: none;
}

.project-list::-webkit-scrollbar {
  display: none;
}


/* ---------------------------------------------------------
   PROJECT ROW
   Whole row is the link.
   --------------------------------------------------------- */

.project-row {
  position: relative !important;

  display: grid !important;
  grid-template-columns:
    76px
    minmax(0, 1fr)
    44px !important;

  align-items: center !important;

  column-gap: 14px !important;

  width: 100% !important;
  max-width: none !important;
  min-width: 0 !important;

  min-height: 104px !important;

  padding: 14px 10px 14px 12px !important;
  margin: 0 !important;

  box-sizing: border-box !important;

  color: inherit !important;
  text-decoration: none !important;

  border: 0 !important;
  border-radius: 22px !important;

  background: transparent !important;

  transition:
    background-color 150ms ease,
    transform 150ms ease !important;

  -webkit-tap-highlight-color: transparent;
}


/* subtle separator beginning after logo */
.project-row:not(:last-child)::after {
  content: "";

  position: absolute;

  left: 102px;
  right: 10px;
  bottom: 0;

  height: 1px;

  background: rgba(255, 255, 255, 0.047);

  pointer-events: none;
}


/* ---------------------------------------------------------
   LOGO COLUMN
   Optical frame, not a second card.
   --------------------------------------------------------- */

.project-row > :first-child {
  width: 76px !important;
  height: 76px !important;

  max-width: 76px !important;
  max-height: 76px !important;

  min-width: 76px !important;
  min-height: 76px !important;

  box-sizing: border-box !important;

  display: flex !important;
  align-items: center !important;
  justify-content: center !important;

  padding: 13px !important;

  border-radius: 21px !important;

  background: rgba(255, 255, 255, 0.022) !important;

  border:
    1px solid
    rgba(255, 255, 255, 0.055) !important;

  overflow: hidden !important;

  object-fit: contain !important;
  object-position: center !important;

  filter: none !important;
}


/* supports wrapper-based and direct-img markup */
.project-row > :first-child img,
.project-row > img:first-child {
  display: block !important;

  width: 100% !important;
  height: 100% !important;

  max-width: 100% !important;
  max-height: 100% !important;

  object-fit: contain !important;
  object-position: center !important;

  filter: none !important;
}


/* ---------------------------------------------------------
   TEXT
   --------------------------------------------------------- */

.project-row > :nth-child(2) {
  display: flex !important;
  flex-direction: column !important;

  justify-content: center !important;
  align-items: flex-start !important;

  gap: 5px !important;

  min-width: 0 !important;

  padding: 0 !important;
  margin: 0 !important;
}

.project-name {
  display: block !important;

  width: 100% !important;

  margin: 0 !important;

  color: rgba(255, 255, 255, 0.95) !important;

  font-size: clamp(18px, 5.2vw, 22px) !important;
  font-weight: 470 !important;

  line-height: 1.12 !important;

  letter-spacing: -0.025em !important;

  overflow-wrap: normal !important;
  word-break: normal !important;
}

.project-description {
  display: block !important;

  width: 100% !important;

  margin: 0 !important;

  color: rgba(255, 255, 255, 0.43) !important;

  font-size: clamp(13px, 3.7vw, 15px) !important;
  font-weight: 400 !important;

  line-height: 1.35 !important;

  letter-spacing: -0.012em !important;

  overflow-wrap: normal !important;
  word-break: normal !important;
}


/* ---------------------------------------------------------
   EXTERNAL ARROW
   Third child / last child.
   --------------------------------------------------------- */

.project-row > :last-child {
  display: flex !important;

  align-items: center !important;
  justify-content: center !important;

  width: 44px !important;
  height: 44px !important;

  min-width: 44px !important;

  padding: 0 !important;
  margin: 0 !important;

  justify-self: end !important;

  color: #f03225 !important;

  font-size: 27px !important;
  font-weight: 350 !important;

  line-height: 1 !important;

  opacity: 0.94 !important;

  transform: translate3d(0, 0, 0);

  transition:
    transform 150ms ease,
    opacity 150ms ease !important;
}


/* ---------------------------------------------------------
   INTERACTION
   --------------------------------------------------------- */

@media (hover: hover) and (pointer: fine) {
  .project-row:hover {
    background: rgba(255, 255, 255, 0.028) !important;
  }

  .project-row:hover > :last-child {
    transform: translate3d(2px, -2px, 0);
  }
}

.project-row:active {
  background: rgba(255, 255, 255, 0.038) !important;
  transform: scale(0.994);
}


/* ---------------------------------------------------------
   SMALL / SHORT iPHONE
   --------------------------------------------------------- */

@media (max-width: 480px) {
  .projects {
    top:
      calc(env(safe-area-inset-top, 0px) + 74px)
      !important;

    right:
      max(14px, env(safe-area-inset-right, 0px))
      !important;

    left:
      max(14px, env(safe-area-inset-left, 0px))
      !important;

    bottom:
      calc(env(safe-area-inset-bottom, 0px) + 96px)
      !important;

    border-radius: 28px !important;
  }

  .project-row {
    grid-template-columns:
      72px
      minmax(0, 1fr)
      40px !important;

    column-gap: 13px !important;

    min-height: 98px !important;

    padding:
      12px
      8px
      12px
      10px
      !important;
  }

  .project-row > :first-child {
    width: 72px !important;
    height: 72px !important;

    min-width: 72px !important;
    min-height: 72px !important;

    padding: 12px !important;

    border-radius: 20px !important;
  }

  .project-row:not(:last-child)::after {
    left: 95px;
    right: 8px;
  }

  .project-row > :last-child {
    width: 40px !important;
    height: 40px !important;

    min-width: 40px !important;

    font-size: 25px !important;
  }
}


/* Extra-short viewport */
@media (max-height: 700px) and (max-width: 480px) {
  .projects {
    top:
      calc(env(safe-area-inset-top, 0px) + 68px)
      !important;

    bottom:
      calc(env(safe-area-inset-bottom, 0px) + 84px)
      !important;
  }

  .project-row {
    min-height: 88px !important;
  }

  .project-row > :first-child {
    width: 64px !important;
    height: 64px !important;

    min-width: 64px !important;
    min-height: 64px !important;
  }

  .project-row {
    grid-template-columns:
      64px
      minmax(0, 1fr)
      38px !important;
  }

  .project-row:not(:last-child)::after {
    left: 87px;
  }
}


/* ---------------------------------------------------------
   DESKTOP
   Panel remains close to NN toggle on the right.
   --------------------------------------------------------- */

@media (min-width: 760px) {
  .projects {
    top: 88px !important;
    right: 28px !important;
    bottom: auto !important;
    left: auto !important;

    width: min(560px, calc(100vw - 56px)) !important;

    max-height: calc(100dvh - 188px) !important;

    padding: 6px !important;

    border-radius: 30px !important;
  }

  .project-list {
    max-height:
      calc(100dvh - 200px)
      !important;
  }

  .project-row {
    grid-template-columns:
      80px
      minmax(0, 1fr)
      46px !important;

    column-gap: 16px !important;

    min-height: 110px !important;

    padding:
      14px
      12px
      14px
      14px
      !important;
  }

  .project-row > :first-child {
    width: 80px !important;
    height: 80px !important;

    min-width: 80px !important;
    min-height: 80px !important;

    padding: 14px !important;

    border-radius: 22px !important;
  }

  .project-name {
    font-size: 23px !important;
  }

  .project-description {
    font-size: 15px !important;
  }

  .project-row:not(:last-child)::after {
    left: 110px;
    right: 12px;
  }
}

/* OWNER_PROJECTS_V10_END */


/* OWNER_FALLBACK_V11_START */

/* =========================================================
   WITHOUT STREAMING FALLBACK V11

   Permanent lowest visual layer:
   near-black base
   -> responsive texture
   -> authentic Ws
   -> active visual above it

   The fallback itself never disappears.
   ========================================================= */

.fallback {
  position: absolute !important;
  inset: 0 !important;

  overflow: hidden !important;

  background: #030303 !important;

  pointer-events: none !important;
  user-select: none !important;

  z-index: 0 !important;
}


/* ---------------------------------------------------------
   RESPONSIVE TEXTURE
   --------------------------------------------------------- */

.fallback-bg {
  position: absolute !important;
  inset: 0 !important;

  display: block !important;

  width: 100% !important;
  height: 100% !important;

  overflow: hidden !important;
}

.fallback-bg img {
  position: absolute !important;

  inset: 0 !important;

  width: 100% !important;
  height: 100% !important;

  max-width: none !important;
  max-height: none !important;

  object-fit: cover !important;
  object-position: center center !important;

  opacity: 1 !important;

  transform: scale(1.002);

  filter: none !important;
}


/* Very subtle optical darkening around edges.
   Keeps the supplied texture intact while helping UI readability.
*/
.fallback::after {
  content: "";

  position: absolute;
  inset: 0;

  z-index: 2;

  pointer-events: none;

  background:
    linear-gradient(
      180deg,
      rgba(0, 0, 0, 0.08) 0%,
      transparent 20%,
      transparent 72%,
      rgba(0, 0, 0, 0.12) 100%
    ),
    radial-gradient(
      ellipse at center,
      transparent 46%,
      rgba(0, 0, 0, 0.10) 100%
    );
}


/* ---------------------------------------------------------
   AUTHENTIC Ws
   Independent of background crop.
   --------------------------------------------------------- */

.fallback-logo {
  position: absolute !important;

  left: 50% !important;
  top: 50% !important;

  width: clamp(
    340px,
    40.4vw,
    675px
  ) !important;

  height: auto !important;

  max-width: none !important;
  max-height: none !important;

  object-fit: contain !important;
  object-position: center !important;

  transform:
    translate3d(-50%, -50%, 0);

  z-index: 1 !important;

  opacity: 0.975 !important;

  filter: none !important;

  pointer-events: none !important;

  user-select: none !important;

  -webkit-user-drag: none;
}


/* ---------------------------------------------------------
   PORTRAIT / MOBILE

   Derived from the supplied portrait composition:
   Ws occupies roughly 57% of viewport width.
   --------------------------------------------------------- */

@media (max-aspect-ratio: 4/5) {
  .fallback-logo {
    width: clamp(
      210px,
      57.1vw,
      390px
    ) !important;
  }
}


/* ---------------------------------------------------------
   VERY NARROW MOBILE
   --------------------------------------------------------- */

@media (max-width: 390px) {
  .fallback-logo {
    width: 58vw !important;
  }
}


/* ---------------------------------------------------------
   LARGE DESKTOP
   Prevent the mark from becoming theatrical on ultrawide screens.
   --------------------------------------------------------- */

@media (min-width: 1800px) {
  .fallback-logo {
    width: min(
      38vw,
      720px
    ) !important;
  }
}


/* ---------------------------------------------------------
   ACTIVE VISUAL

   Visual stage stays above the permanent fallback.
   Existing JS controls visual visibility and playback.
   --------------------------------------------------------- */

.visual-stage {
  z-index: 1 !important;
}


/* ---------------------------------------------------------
   PROJECTS / UI
   Preserve accepted V10 hierarchy.
   --------------------------------------------------------- */

.app-header,
.controls,
.projects-scrim,
.projects {
  position: relative;
  z-index: 10;
}

/* OWNER_FALLBACK_V11_END */


/* OWNER_FALLBACK_V11_CENTER_FIX_START */

/*
   Strict isolation from legacy `.fallback img` rules.

   The background fills the viewport.
   The Ws mark is an independently centered object.
*/

html body .fallback {
  position: absolute !important;
  inset: 0 !important;

  width: 100% !important;
  height: 100% !important;

  overflow: hidden !important;
}


/* TEXTURE */

html body .fallback > picture.fallback-bg {
  position: absolute !important;
  inset: 0 !important;

  display: block !important;

  width: 100% !important;
  height: 100% !important;

  margin: 0 !important;
  padding: 0 !important;
}

html body .fallback > picture.fallback-bg > img {
  position: absolute !important;
  inset: 0 !important;

  display: block !important;

  width: 100% !important;
  height: 100% !important;

  min-width: 100% !important;
  min-height: 100% !important;

  max-width: none !important;
  max-height: none !important;

  margin: 0 !important;
  padding: 0 !important;

  object-fit: cover !important;
  object-position: 50% 50% !important;

  transform: none !important;

  filter: none !important;
}


/* AUTHENTIC Ws */

html body .fallback > img.fallback-logo {
  position: absolute !important;

  inset: auto !important;

  top: 50% !important;
  left: 50% !important;
  right: auto !important;
  bottom: auto !important;

  display: block !important;

  width: clamp(
    360px,
    40.4vw,
    650px
  ) !important;

  height: auto !important;

  min-width: 0 !important;
  min-height: 0 !important;

  max-width: 65vw !important;
  max-height: 62vh !important;

  margin: 0 !important;
  padding: 0 !important;

  object-fit: contain !important;
  object-position: center !important;

  transform:
    translate3d(-50%, -50%, 0)
    !important;

  transform-origin: 50% 50% !important;

  opacity: 1 !important;

  filter: none !important;

  z-index: 1 !important;
}


/* PORTRAIT */

@media (max-aspect-ratio: 4/5) {
  html body .fallback > img.fallback-logo {
    width: clamp(
      210px,
      57vw,
      390px
    ) !important;

    max-width: 68vw !important;
    max-height: 44vh !important;
  }
}


/* SMALL PHONE */

@media (max-width: 390px) {
  html body .fallback > img.fallback-logo {
    width: 57vw !important;
  }
}

/* OWNER_FALLBACK_V11_CENTER_FIX_END */


/* OWNER_FALLBACK_V11_IOS_POLISH_START */

/*
  Keep the supplied texture, but quiet the noisy peripheral regions
  on tall mobile viewports.

  Layer order:
  texture -> edge treatment -> authentic Ws
*/

/* Edge treatment must sit BELOW the Ws. */
html body .fallback::after {
  z-index: 1 !important;
}

html body .fallback > img.fallback-logo {
  z-index: 2 !important;
}


/* iPhone / tall mobile */
@media (max-aspect-ratio: 4/5) {

  html body .fallback::after {
    content: "" !important;

    position: absolute !important;
    inset: 0 !important;

    pointer-events: none !important;

    /*
      Top becomes almost-black gently.
      Centre keeps the original texture.
      Bottom is quieted more strongly because the source texture
      is visibly noisier there on the real iPhone viewport.
    */
    background:
      linear-gradient(
        180deg,

        rgba(0, 0, 0, 0.46) 0%,
        rgba(0, 0, 0, 0.22) 13%,
        rgba(0, 0, 0, 0.06) 27%,

        rgba(0, 0, 0, 0.00) 40%,
        rgba(0, 0, 0, 0.00) 61%,

        rgba(0, 0, 0, 0.07) 72%,
        rgba(0, 0, 0, 0.28) 86%,
        rgba(0, 0, 0, 0.62) 100%
      ) !important;
  }

}


/* OWNER_FALLBACK_V11_IOS_POLISH_END */


/* OWNER_PROJECTS_V12_START */

/* =========================================================
   PROJECTS V12
   Editorial, reduced, logo-first directory.
   No app-card language.
   ========================================================= */


/* ---------------------------------------------------------
   PANEL
   --------------------------------------------------------- */

.projects {
  background:
    linear-gradient(
      180deg,
      rgba(12, 12, 13, 0.78),
      rgba(7, 7, 8, 0.74)
    ) !important;

  border:
    1px solid
    rgba(255, 255, 255, 0.055) !important;

  border-radius: 25px !important;

  padding: 3px 8px !important;

  -webkit-backdrop-filter:
    blur(22px)
    saturate(1.03) !important;

  backdrop-filter:
    blur(22px)
    saturate(1.03) !important;

  box-shadow:
    0 22px 70px rgba(0, 0, 0, 0.30),
    inset 0 1px 0 rgba(255, 255, 255, 0.025)
    !important;
}


/* Kill the stronger V10 red atmosphere. */
.projects::before {
  opacity: 0.30 !important;
}


/* ---------------------------------------------------------
   LIST
   --------------------------------------------------------- */

.project-list {
  padding: 3px 6px !important;
}


/* ---------------------------------------------------------
   ROW
   --------------------------------------------------------- */

.project-row {
  display: grid !important;

  grid-template-columns:
    54px
    minmax(0, 1fr)
    30px !important;

  column-gap: 12px !important;

  align-items: center !important;

  min-height: 86px !important;

  padding:
    10px
    4px
    10px
    2px
    !important;

  border-radius: 0 !important;

  background: transparent !important;

  transform: none !important;
}


/* Separator begins after the logo column. */
.project-row:not(:last-child)::after {
  left: 66px !important;
  right: 4px !important;

  background:
    rgba(255, 255, 255, 0.055)
    !important;
}


/* ---------------------------------------------------------
   LOGOS
   No boxes. Authentic marks only.
   --------------------------------------------------------- */

.project-row > :first-child,
.project-logo {
  display: flex !important;

  align-items: center !important;
  justify-content: center !important;

  width: 46px !important;
  height: 46px !important;

  min-width: 0 !important;
  min-height: 0 !important;

  max-width: 46px !important;
  max-height: 46px !important;

  padding: 0 !important;
  margin: 0 !important;

  border: 0 !important;
  border-radius: 0 !important;

  background: transparent !important;

  box-shadow: none !important;

  object-fit: contain !important;
  object-position: center !important;

  filter: none !important;

  opacity: 0.94 !important;
}


.project-row > :first-child img,
.project-logo img {
  display: block !important;

  width: 100% !important;
  height: 100% !important;

  object-fit: contain !important;
  object-position: center !important;

  filter: none !important;
}


/* Optical correction by project.
   Same grid, different visual weight.
*/

.project-row:nth-child(1) > :first-child {
  width: 44px !important;
  height: 30px !important;
}

.project-row:nth-child(2) > :first-child {
  width: 29px !important;
  height: 42px !important;
}

.project-row:nth-child(3) > :first-child {
  width: 34px !important;
  height: 34px !important;
}

.project-row:nth-child(4) > :first-child {
  width: 43px !important;
  height: 31px !important;
}

.project-row:nth-child(5) > :first-child {
  width: 38px !important;
  height: 38px !important;
}

.project-row:nth-child(6) > :first-child {
  width: 41px !important;
  height: 31px !important;
}


/* ---------------------------------------------------------
   TEXT
   Editorial contrast inside the otherwise sans UI.
   --------------------------------------------------------- */

.project-row > :nth-child(2) {
  gap: 4px !important;
}


.project-name {
  margin: 0 !important;

  color:
    rgba(255, 255, 255, 0.91)
    !important;

  font-family:
    ui-serif,
    "Iowan Old Style",
    "Palatino Linotype",
    Palatino,
    Georgia,
    serif
    !important;

  font-size:
    clamp(17px, 4.6vw, 20px)
    !important;

  font-weight: 400 !important;

  line-height: 1.12 !important;

  letter-spacing: -0.018em !important;
}


.project-description {
  margin: 0 !important;

  color:
    rgba(255, 255, 255, 0.40)
    !important;

  font-family:
    ui-serif,
    "Iowan Old Style",
    "Palatino Linotype",
    Palatino,
    Georgia,
    serif
    !important;

  font-size:
    clamp(12px, 3.35vw, 13.5px)
    !important;

  font-weight: 400 !important;

  line-height: 1.32 !important;

  letter-spacing: -0.006em !important;
}


/* ---------------------------------------------------------
   ARROW
   --------------------------------------------------------- */

.project-row > :last-child {
  width: 30px !important;
  height: 36px !important;

  min-width: 30px !important;

  font-size: 21px !important;
  font-weight: 300 !important;

  color: #e72b20 !important;

  opacity: 0.88 !important;

  justify-self: end !important;
}


/* ---------------------------------------------------------
   INTERACTION
   --------------------------------------------------------- */

@media (hover: hover) and (pointer: fine) {
  .project-row:hover {
    background:
      rgba(255, 255, 255, 0.014)
      !important;
  }

  .project-row:hover > :last-child {
    transform:
      translate3d(2px, -1px, 0)
      !important;
  }
}


.project-row:active {
  background:
    rgba(255, 255, 255, 0.022)
    !important;
}


/* ---------------------------------------------------------
   PHONE
   --------------------------------------------------------- */

@media (max-width: 480px) {

  .projects {
    padding: 2px 7px !important;

    border-radius: 25px !important;
  }

  .project-list {
    padding: 3px 4px !important;
  }

  .project-row {
    grid-template-columns:
      50px
      minmax(0, 1fr)
      27px !important;

    column-gap: 10px !important;

    min-height: 82px !important;

    padding:
      9px
      2px
      9px
      1px
      !important;
  }

  .project-row:not(:last-child)::after {
    left: 60px !important;
    right: 2px !important;
  }

  .project-name {
    font-size:
      clamp(16.5px, 4.8vw, 19px)
      !important;
  }

  .project-description {
    font-size:
      clamp(11.5px, 3.45vw, 13px)
      !important;
  }

  .project-row > :last-child {
    width: 27px !important;
    min-width: 27px !important;

    font-size: 20px !important;
  }
}


/* ---------------------------------------------------------
   DESKTOP
   --------------------------------------------------------- */

@media (min-width: 760px) {

  .projects {
    width:
      min(540px, calc(100vw - 56px))
      !important;

    padding: 5px 12px !important;
  }

  .project-list {
    padding: 4px 5px !important;
  }

  .project-row {
    grid-template-columns:
      60px
      minmax(0, 1fr)
      34px !important;

    column-gap: 14px !important;

    min-height: 96px !important;

    padding:
      12px
      5px
      12px
      3px
      !important;
  }

  .project-row:not(:last-child)::after {
    left: 74px !important;
    right: 5px !important;
  }

  .project-name {
    font-size: 21px !important;
  }

  .project-description {
    font-size: 14px !important;
  }

  .project-row > :last-child {
    width: 34px !important;
    min-width: 34px !important;

    font-size: 22px !important;
  }
}


/* OWNER_PROJECTS_V12_END */


/* OWNER_WS_AMBIENT_BREATH_V13_START */

/* =========================================================
   WS AMBIENT BREATH V13

   Extremely restrained continuous identity motion.
   Existing transform-based centering stays untouched.

   Individual transform properties are used so the V11
   hard-centering transform cannot be disturbed.
   ========================================================= */

@keyframes ws-ambient-breath-v13 {
  0% {
    scale: 1;
    translate: 0 0;
  }

  36% {
    scale: 1.035;
    translate: 0 -4px;
  }

  52% {
    scale: 1.030;
    translate: 0 -3px;
  }

  100% {
    scale: 1;
    translate: 0 0;
  }
}

.fallback .fallback-logo {
  transform-origin: 50% 50% !important;

  animation-name: ws-ambient-breath-v13 !important;
  animation-duration: 8.4s !important;
  animation-timing-function:
    cubic-bezier(0.37, 0, 0.23, 1) !important;
  animation-iteration-count: infinite !important;
  animation-fill-mode: both !important;
}


/* Accessibility:
   preserve the exact static centered identity when
   the operating system requests reduced motion.
*/

@media (prefers-reduced-motion: reduce) {
  .fallback .fallback-logo {
    animation: none !important;
    scale: 1 !important;
    translate: 0 0 !important;
  }
}

/* OWNER_WS_AMBIENT_BREATH_V13_END */


/* OWNER_PLAY_RED_SWEEP_V15_2_START */

/* =========================================================
   PLAY RED SWEEP V15.2
   SVG implementation for predictable Safari rendering.
   ========================================================= */

#playback {
  overflow: visible !important;
}

#playback .playback-sweep {
  position: absolute;

  inset: -5px;

  width: calc(100% + 10px);
  height: calc(100% + 10px);

  display: block;

  overflow: visible;

  pointer-events: none;

  opacity: 0;

  z-index: 6;

  transform: rotate(-90deg);
  transform-origin: 50% 50%;
}

#playback .playback-sweep-arc {
  fill: none;

  stroke: #e72b20;

  stroke-width: 2.15;

  stroke-linecap: round;

  stroke-dasharray: 21 79;

  vector-effect: non-scaling-stroke;
}

#playback.needs-attention .playback-sweep {
  animation:
    ws-play-red-sweep-v15-2
    7.4s
    cubic-bezier(0.32, 0, 0.18, 1)
    infinite;
}

@keyframes ws-play-red-sweep-v15-2 {
  0% {
    opacity: 0;
    transform: rotate(-90deg);
  }

  5% {
    opacity: 0;
    transform: rotate(-90deg);
  }

  9% {
    opacity: 0.96;
    transform: rotate(-90deg);
  }

  29% {
    opacity: 0.96;
    transform: rotate(270deg);
  }

  36% {
    opacity: 0;
    transform: rotate(320deg);
  }

  100% {
    opacity: 0;
    transform: rotate(320deg);
  }
}

@media (prefers-reduced-motion: reduce) {
  #playback.needs-attention .playback-sweep {
    animation: none !important;

    opacity: 0.86;

    transform: rotate(-35deg);
  }
}

/* OWNER_PLAY_RED_SWEEP_V15_2_END */


/* OWNER_PROJECT_LOGO_AXIS_V17_START */

/* =========================================================
   PROJECT LOGO AXIS V17

   Every project identity lives inside one canonical column.
   Intrinsic image dimensions must never move the row content.
   ========================================================= */

.project-row {
  grid-template-columns:
    64px
    minmax(0, 1fr)
    22px !important;

  column-gap: 18px !important;
}

.project-logo-wrap {
  width: 64px !important;
  height: 64px !important;

  min-width: 64px !important;
  min-height: 64px !important;

  display: flex !important;

  align-items: center !important;
  justify-content: center !important;

  justify-self: center !important;
  align-self: center !important;

  margin: 0 !important;
  padding: 0 !important;
}

.project-logo-wrap img,
.project-logo-wrap svg {
  display: block !important;

  width: 54px !important;
  height: 54px !important;

  max-width: 54px !important;
  max-height: 54px !important;

  object-fit: contain !important;
  object-position: center center !important;

  margin: 0 auto !important;

  transform: none !important;
}

/*
 * Party Protocol contains more internal information than the
 * pure-symbol identities, so let it use nearly the full cell.
 */
.project-row[data-project-id="party-protocol"]
.project-logo-wrap img {
  width: 58px !important;
  height: 58px !important;

  max-width: 58px !important;
  max-height: 58px !important;
}


/* Mobile compact grid keeps exactly the same optical axis. */
@media (max-width: 799px) {
  .project-row {
    grid-template-columns:
      64px
      minmax(0, 1fr)
      22px !important;

    column-gap: 18px !important;
  }

  .project-logo-wrap {
    width: 64px !important;
    height: 64px !important;

    min-width: 64px !important;
    min-height: 64px !important;
  }
}


/* Short-screen mode may shrink icons, never their axis. */
@media (max-height: 690px) {
  .project-row {
    grid-template-columns:
      54px
      minmax(0, 1fr)
      20px !important;

    column-gap: 14px !important;
  }

  .project-logo-wrap {
    width: 54px !important;
    height: 54px !important;

    min-width: 54px !important;
    min-height: 54px !important;
  }

  .project-logo-wrap img,
  .project-logo-wrap svg {
    width: 46px !important;
    height: 46px !important;

    max-width: 46px !important;
    max-height: 46px !important;
  }
}

/* OWNER_PROJECT_LOGO_AXIS_V17_END */




/* OWNER_GLOBAL_INTERACTION_V19_1_START */

.wordmark[role="button"] {
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;

  user-select: none;
  -webkit-user-select: none;
}

/*
 * No visible CTA treatment.
 * The interaction remains visually invisible.
 */
#radio-app {
  -webkit-tap-highlight-color: transparent;
}

/* OWNER_GLOBAL_INTERACTION_V19_1_END */

/* OWNER_TACTILE_INTERACTION_V20_1_START */

@keyframes ws-v20-1-playback-press {
  0% {
    transform: scale(1);
    opacity: 1;
  }

  38% {
    transform: scale(0.80);
    opacity: 0.62;
  }

  100% {
    transform: scale(1);
    opacity: 1;
  }
}

@keyframes ws-v20-1-projects-press {
  0% {
    transform: scale(1);
    opacity: 1;
  }

  38% {
    transform: scale(0.84);
    opacity: 0.64;
  }

  100% {
    transform: scale(1);
    opacity: 1;
  }
}

@keyframes ws-v20-1-wordmark-press {
  0% {
    transform: translateY(0);
    opacity: 1;
  }

  42% {
    transform: translateY(1px);
    opacity: 0.48;
  }

  100% {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes ws-v20-1-project-row-press {
  0% {
    transform: translateX(0);
    opacity: 1;
  }

  42% {
    transform: translateX(4px);
    opacity: 0.62;
  }

  100% {
    transform: translateX(0);
    opacity: 1;
  }
}

@keyframes ws-v20-1-control-press {
  0% {
    transform: scale(1);
    opacity: 1;
  }

  42% {
    transform: scale(0.90);
    opacity: 0.60;
  }

  100% {
    transform: scale(1);
    opacity: 1;
  }
}

#playback.ws-v20-playback-press {
  animation:
    ws-v20-1-playback-press
    260ms
    cubic-bezier(0.22, 0.80, 0.26, 1)
    both !important;

  transform-origin: center center;
}

#projects-toggle.ws-v20-projects-press {
  animation:
    ws-v20-1-projects-press
    240ms
    cubic-bezier(0.22, 0.80, 0.26, 1)
    both !important;

  transform-origin: center center;
}

.wordmark.ws-v20-wordmark-press {
  animation:
    ws-v20-1-wordmark-press
    230ms
    ease-out
    both !important;
}

#project-list .project-row.ws-v20-project-row-press {
  animation:
    ws-v20-1-project-row-press
    240ms
    cubic-bezier(0.22, 0.80, 0.26, 1)
    both !important;
}

.ws-v20-control-press {
  animation:
    ws-v20-1-control-press
    220ms
    cubic-bezier(0.22, 0.80, 0.26, 1)
    both !important;
}

@media (prefers-reduced-motion: reduce) {
  #playback.ws-v20-playback-press,
  #projects-toggle.ws-v20-projects-press,
  .wordmark.ws-v20-wordmark-press,
  #project-list .project-row.ws-v20-project-row-press,
  .ws-v20-control-press {
    animation-duration: 120ms !important;
  }
}

/* OWNER_TACTILE_INTERACTION_V20_1_END */

/* OWNER_WORDMARK_PRESS_V20_2_START */

@keyframes ws-v20-2-wordmark-press {
  0% {
    transform: translateY(0) scale(1);
    opacity: 1;
    filter: brightness(1);
  }

  35% {
    transform: translateY(1px) scale(0.965);
    opacity: 0.42;
    filter: brightness(0.72);
  }

  100% {
    transform: translateY(0) scale(1);
    opacity: 1;
    filter: brightness(1);
  }
}

.wordmark.ws-v20-wordmark-press {
  animation:
    ws-v20-2-wordmark-press
    220ms
    cubic-bezier(0.22, 0.80, 0.26, 1)
    both !important;

  transform-origin: left center !important;
  will-change: transform, opacity, filter;
}

@media (prefers-reduced-motion: reduce) {
  .wordmark.ws-v20-wordmark-press {
    animation-duration: 120ms !important;
  }
}

/* OWNER_WORDMARK_PRESS_V20_2_END */


/* OWNER_WORDMARK_PRESS_V20_3_START */

@keyframes ws-v20-3-wordmark-confirm {
  0% {
    transform: translateY(0) scale(1);
    opacity: 1;
    filter: brightness(1);
  }

  45% {
    transform: translateY(2px) scale(0.94);
    opacity: 0.34;
    filter: brightness(0.58);
  }

  100% {
    transform: translateY(1px) scale(0.965);
    opacity: 0.62;
    filter: brightness(0.76);
  }
}

.wordmark.ws-v20-wordmark-press {
  animation:
    ws-v20-3-wordmark-confirm
    190ms
    cubic-bezier(0.22, 0.80, 0.26, 1)
    both !important;

  transform-origin: left center !important;

  will-change:
    transform,
    opacity,
    filter;
}

/* OWNER_WORDMARK_PRESS_V20_3_END */


/* OWNER_NOW_PLAYING_V12_BOTTOM_FIX_START */

/*
  Final mobile Now Playing placement.

  Visible typography:
  microscopic editorial caption at the absolute bottom-left.

  Important:
  - independent from Play flex layout
  - never enters Play territory
  - maximum two lines
  - large invisible touch target remains
*/

.bottom-controls {
  position: absolute !important;
}

.now-playing {
  position: absolute !important;

  left: 14px !important;
  right: auto !important;

  /*
    Deliberately almost flush with the visual viewport bottom.
    Do NOT add safe-area elevation here.
  */
  bottom: 4px !important;

  width: auto !important;

  /*
    Reserve the complete Play-button territory on the right.
  */
  max-width: calc(100vw - 142px) !important;

  min-width: 0 !important;
  min-height: 44px !important;

  margin: 0 !important;
  padding: 0 !important;

  display: flex !important;
  align-items: flex-end !important;
  justify-content: flex-start !important;

  z-index: 8 !important;

  color: #D63A43 !important;
  text-decoration: none !important;

  -webkit-tap-highlight-color: transparent !important;
}

.now-playing[hidden] {
  display: none !important;
}

.track-artist-row {
  display: -webkit-box !important;

  width: auto !important;
  max-width: 100% !important;

  margin: 0 !important;
  padding: 0 !important;

  overflow: hidden !important;

  -webkit-box-orient: vertical !important;
  -webkit-line-clamp: 2 !important;

  font-family:
    "SF Pro Text",
    -apple-system,
    BlinkMacSystemFont,
    "Helvetica Neue",
    Arial,
    sans-serif !important;

  /*
    Extremely small by design.
    SF Pro Text remains readable at this optical size.
  */
  font-size: 8px !important;
  font-style: normal !important;
  font-weight: 500 !important;

  line-height: 1.28 !important;
  letter-spacing: 0.11em !important;

  color: #D63A43 !important;

  text-align: left !important;
  text-transform: uppercase !important;

  white-space: normal !important;
  overflow-wrap: normal !important;
  word-break: normal !important;

  text-shadow: none !important;
}

#track-artist,
.track-title,
.track-separator {
  display: inline !important;

  margin: 0 !important;
  padding: 0 !important;

  font: inherit !important;
  color: inherit !important;

  white-space: normal !important;
}

/*
  Slightly more breathing room on desktop,
  but still intentionally tiny.
*/
@media (min-width: 700px) {
  .now-playing {
    left: 20px !important;
    bottom: 7px !important;
    max-width: calc(100vw - 175px) !important;
  }

  .track-artist-row {
    font-size: 9px !important;
    letter-spacing: 0.12em !important;
  }
}

/*
  Narrow iPhones:
  reserve a little more space for Play.
*/
@media (max-width: 390px) {
  .now-playing {
    left: 12px !important;
    bottom: 3px !important;
    max-width: calc(100vw - 136px) !important;
  }

  .track-artist-row {
    font-size: 7.75px !important;
    letter-spacing: 0.10em !important;
  }
}

/* OWNER_NOW_PLAYING_V12_BOTTOM_FIX_END */


/* OWNER_NOW_PLAYING_V12_ULTRA_BOTTOM_START */

/*
  Final optical placement:
  caption belongs to the viewport itself, not to Play controls.
*/

html body .now-playing {
  position: fixed !important;

  left: 14px !important;
  right: auto !important;

  /*
    Almost flush with the bottom edge of the actual webpage.
    Just a tiny breathing gap remains above Safari chrome.
  */
  bottom: 6px !important;

  width: auto !important;
  max-width: calc(100vw - 148px) !important;

  min-width: 0 !important;
  min-height: 44px !important;

  margin: 0 !important;
  padding: 0 !important;

  display: flex !important;
  align-items: flex-end !important;
  justify-content: flex-start !important;

  z-index: 40 !important;

  pointer-events: auto !important;
}

html body .now-playing[hidden] {
  display: none !important;
}

/*
  Visible typography remains at the very bottom of the invisible
  44px touch target.
*/
html body .now-playing .track-artist-row {
  margin: 0 !important;
  padding: 0 !important;

  font-family:
    "SF Pro Text",
    -apple-system,
    BlinkMacSystemFont,
    "Helvetica Neue",
    Arial,
    sans-serif !important;

  font-size: 8px !important;
  font-weight: 500 !important;
  line-height: 1.25 !important;
  letter-spacing: 0.10em !important;

  color: #D63A43 !important;

  text-transform: uppercase !important;
}

/*
  Narrow iPhones.
*/
@media (max-width: 390px) {
  html body .now-playing {
    left: 12px !important;
    bottom: 5px !important;
    max-width: calc(100vw - 142px) !important;
  }

  html body .now-playing .track-artist-row {
    font-size: 7.75px !important;
    letter-spacing: 0.095em !important;
  }
}

/* OWNER_NOW_PLAYING_V12_ULTRA_BOTTOM_END */


/* OWNER_UNIVERSAL_SAFE_AREA_V13_START */

:root {
  --ws-safe-top: env(safe-area-inset-top, 0px);
  --ws-safe-right: env(safe-area-inset-right, 0px);
  --ws-safe-bottom: env(safe-area-inset-bottom, 0px);
  --ws-safe-left: env(safe-area-inset-left, 0px);
}


/*
  Browser viewport.
  Keep the actual visual full-bleed.
*/
html,
body {
  width: 100%;
  min-height: 100%;
}


/*
  Standalone iOS/PWA has historically differed from Safari
  in the way svh/dvh and safe-area are calculated.

  For this single-screen radio UI, 100vh is the safer
  standalone containing block.
*/
@media (display-mode: standalone) {
  html,
  body {
    width: 100% !important;
    height: 100vh !important;
    min-height: 100vh !important;
  }
}


/*
  NOW PLAYING
  ---------------------------------------------------------

  Safari:
      preserve the ultra-low placement already approved.

  Installed/standalone:
      automatically rise only as much as required by the
      physical Home Indicator / rounded-screen safe area.

  Landscape:
      automatically clear the left unsafe edge.
*/
html body .now-playing {
  left:
    max(
      12px,
      calc(var(--ws-safe-left) + 7px)
    ) !important;

  right: auto !important;

  bottom: 5px !important;

  /*
    Reserve the Play-button territory AND the physical
    right safe area on unusually narrow screens.
  */
  max-width:
    calc(
      100vw
      - 142px
      - var(--ws-safe-left)
      - var(--ws-safe-right)
    ) !important;

  min-width: 0 !important;
  min-height: 44px !important;

  display: flex !important;
  align-items: flex-end !important;

  box-sizing: border-box !important;
}


/*
  Installed iPhone / standalone web app.
*/
@media (display-mode: standalone) {
  html body .now-playing {
    bottom:
      max(
        5px,
        calc(var(--ws-safe-bottom) + 3px)
      ) !important;
  }
}


/*
  Final micro-typography.

  7.5 px is intentionally tiny.
  Readability is preserved by:
  - native system UI font
  - medium optical weight
  - less tracking than before
  - no transparency
  - no text-shadow
*/
html body .now-playing .track-artist-row {
  font-family:
    system-ui,
    -apple-system,
    BlinkMacSystemFont,
    "Segoe UI",
    Roboto,
    "Helvetica Neue",
    Arial,
    sans-serif !important;

  font-size: 7.5px !important;
  font-style: normal !important;
  font-weight: 550 !important;

  line-height: 1.24 !important;
  letter-spacing: 0.075em !important;

  color: #D63A43 !important;

  opacity: 1 !important;

  font-kerning: normal !important;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;

  text-transform: uppercase !important;

  -webkit-box-orient: vertical !important;
  -webkit-line-clamp: 2 !important;

  overflow: hidden !important;

  white-space: normal !important;
  word-break: normal !important;
  overflow-wrap: normal !important;
}


/*
  Landscape standalone:
  keep the micro-caption clear of rounded corners / sensor
  side without changing the visual itself.
*/
@media (display-mode: standalone) and (orientation: landscape) {
  html body .now-playing {
    left:
      max(
        18px,
        calc(var(--ws-safe-left) + 14px)
      ) !important;

    bottom:
      max(
        7px,
        calc(var(--ws-safe-bottom) + 5px)
      ) !important;

    max-width:
      calc(
        100vw
        - 180px
        - var(--ws-safe-left)
        - var(--ws-safe-right)
      ) !important;
  }
}


/*
  Keep the bottom control row aware of the horizontal
  safe areas in installed landscape mode.

  This does not change normal Safari positioning.
*/
@media (display-mode: standalone) {
  html body .bottom-controls {
    box-sizing: border-box !important;

    padding-left:
      var(--ws-safe-left) !important;

    padding-right:
      var(--ws-safe-right) !important;
  }
}

/* OWNER_UNIVERSAL_SAFE_AREA_V13_END */


/* OWNER_NOW_PLAYING_VIEWPORT_V14_START */

:root {
  --ws-vv-bottom: 0px;

  --ws-safe-top:
    env(safe-area-inset-top, 0px);

  --ws-safe-right:
    env(safe-area-inset-right, 0px);

  --ws-safe-bottom:
    env(safe-area-inset-bottom, 0px);

  --ws-safe-left:
    env(safe-area-inset-left, 0px);
}


/*
  NOW PLAYING IS NOW VIEWPORT-LEVEL.

  It no longer participates in .bottom-controls geometry.
  This is intentional.
*/

html body .now-playing {
  position: fixed !important;

  left:
    max(
      12px,
      calc(var(--ws-safe-left) + 6px)
    ) !important;

  right: auto !important;

  /*
    Normal browser mode stays ultra-low.
  */
  bottom:
    max(
      6px,
      var(--ws-vv-bottom)
    ) !important;

  width: auto !important;

  /*
    Permanent exclusion zone for Play.
  */
  max-width:
    calc(
      100vw
      - 142px
      - var(--ws-safe-left)
      - var(--ws-safe-right)
    ) !important;

  min-width: 0 !important;

  /*
    Tiny visible type, large invisible touch target.
  */
  min-height: 44px !important;

  margin: 0 !important;
  padding: 0 !important;

  display: flex !important;

  align-items: flex-end !important;
  justify-content: flex-start !important;

  box-sizing: border-box !important;

  z-index: 70 !important;

  color: #D63A43 !important;

  text-decoration: none !important;

  pointer-events: auto !important;

  -webkit-tap-highlight-color:
    transparent !important;
}


html body .now-playing[hidden] {
  display: none !important;
}


/*
  MICRO TYPOGRAPHY

  Slightly smaller than V13:
  7.50 px -> 7.25 px

  Tracking reduced simultaneously so characters remain
  optically coherent and legible.
*/

html body .now-playing .track-artist-row {
  display: -webkit-box !important;

  width: auto !important;
  max-width: 100% !important;

  margin: 0 !important;
  padding: 0 !important;

  overflow: hidden !important;

  -webkit-box-orient: vertical !important;
  -webkit-line-clamp: 2 !important;

  font-family:
    system-ui,
    -apple-system,
    BlinkMacSystemFont,
    "SF Pro Text",
    "Segoe UI",
    Roboto,
    "Helvetica Neue",
    Arial,
    sans-serif !important;

  font-size: 7.25px !important;

  font-style: normal !important;
  font-weight: 550 !important;

  line-height: 1.24 !important;

  letter-spacing:
    0.065em !important;

  font-kerning: normal !important;

  color: #D63A43 !important;

  opacity: 1 !important;

  text-transform: uppercase !important;

  text-align: left !important;

  white-space: normal !important;

  word-break: normal !important;

  overflow-wrap: normal !important;

  text-shadow: none !important;

  -webkit-font-smoothing:
    antialiased !important;

  text-rendering:
    optimizeLegibility !important;
}


html body .now-playing #track-artist,
html body .now-playing .track-title,
html body .now-playing .track-separator {
  display: inline !important;

  margin: 0 !important;
  padding: 0 !important;

  font: inherit !important;
  color: inherit !important;

  white-space: normal !important;
}


/*
  PORTRAIT STANDALONE / ADD TO HOME SCREEN

  This is the important fix.

  We use THREE independent signals:
  1. explicit fallback: 12px
  2. CSS safe-area inset
  3. JS visualViewport correction

  So even if one iOS API reports zero incorrectly,
  the caption cannot sit directly on the physical crop.
*/

html.ws-standalone.ws-portrait body .now-playing {
  bottom:
    max(
      12px,
      var(--ws-safe-bottom),
      var(--ws-vv-bottom)
    ) !important;
}


@media (display-mode: standalone) and (orientation: portrait) {
  html body .now-playing {
    bottom:
      max(
        12px,
        var(--ws-safe-bottom),
        var(--ws-vv-bottom)
      ) !important;
  }
}


/*
  Ordinary portrait browser.

  Keep it very low, but never literally flush.
*/

@media (orientation: portrait) {
  html:not(.ws-standalone) body .now-playing {
    bottom:
      max(
        7px,
        var(--ws-vv-bottom)
      ) !important;
  }
}


/*
  LANDSCAPE

  Current landscape composition is already approved.
  We only protect left/right physical unsafe regions.
*/

@media (orientation: landscape) {
  html body .now-playing {
    left:
      max(
        18px,
        calc(var(--ws-safe-left) + 12px)
      ) !important;

    bottom:
      max(
        6px,
        var(--ws-vv-bottom)
      ) !important;

    max-width:
      calc(
        100vw
        - 180px
        - var(--ws-safe-left)
        - var(--ws-safe-right)
      ) !important;
  }
}


/*
  Very narrow portrait devices.
*/

@media
  (orientation: portrait)
  and (max-width: 390px) {

  html body .now-playing {
    left:
      max(
        10px,
        calc(var(--ws-safe-left) + 5px)
      ) !important;

    max-width:
      calc(
        100vw
        - 136px
        - var(--ws-safe-left)
        - var(--ws-safe-right)
      ) !important;
  }

  html body .now-playing .track-artist-row {
    font-size:
      7px !important;

    letter-spacing:
      0.06em !important;
  }
}


/* OWNER_NOW_PLAYING_VIEWPORT_V14_END */


/* OWNER_VISUAL_SOURCE_ATTRIBUTION_RECOVERY_V1_START */

html body .brand-stack {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  align-items: flex-start;
  min-width: 0;
  pointer-events: none;
}

html body .brand-stack .wordmark {
  flex: 0 0 auto;
  pointer-events: auto;
}

html body .visual-source {
  display: flex;
  align-items: center;
  min-width: 0;
  min-height: 44px;
  max-width: min(68vw, 440px);
  margin: -1px 0 -10px 0.82em;
  padding: 0;
  overflow: hidden;
  color: #D63A43;
  opacity: 1;
  font-family:
    "SF Pro Text",
    -apple-system,
    BlinkMacSystemFont,
    "Helvetica Neue",
    Arial,
    sans-serif;
  font-size: clamp(8px, 1.9vw, 10px);
  font-style: normal;
  font-weight: 400;
  line-height: 1;
  letter-spacing: 0.055em;
  text-align: left;
  text-decoration: none;
  text-transform: none;
  white-space: nowrap;
  text-shadow: none;
  cursor: pointer;
  pointer-events: auto;
  transition: opacity 190ms ease, transform 150ms ease;
  -webkit-tap-highlight-color: transparent;
}

html body .visual-source[hidden] {
  display: none !important;
}

html body .visual-source-prefix {
  flex: 0 0 auto;
  margin-right: 0.42em;
  overflow: visible;
  color: inherit;
  white-space: nowrap;
}

html body .visual-source-title {
  display: block;
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  color: inherit;
  text-overflow: ellipsis;
  white-space: nowrap;
}

html body .visual-source.is-leaving {
  opacity: 0;
}

html body .visual-source.is-entering {
  opacity: 0.78;
}

html body .visual-source.is-settling {
  opacity: 0.78;
  letter-spacing: 0.075em;
  transition: opacity 300ms ease, letter-spacing 300ms ease;
}

html body .visual-source.is-settled {
  opacity: 1;
  letter-spacing: 0.055em;
}

html body .visual-source:active {
  opacity: 0.55;
  transform: translateX(1px);
}

html body .visual-source:focus-visible {
  outline: 1px solid rgba(214, 58, 67, 0.82);
  outline-offset: -6px;
}

@media (prefers-reduced-motion: reduce) {
  html body .visual-source {
    transition: none !important;
  }
}

/* OWNER_VISUAL_SOURCE_ATTRIBUTION_RECOVERY_V1_END */
