/* ==========================================================
   Ulia.Radio — Header

   Bandeau fixe, transparent au repos, qui se densifie dès que
   la page défile. Burger à gauche (desktop comme mobile), logo,
   dropdown profil à droite.
   ========================================================== */

.site-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: var(--z-header);
  height: var(--u-header-h);
  display: flex;
  align-items: center;
  transition: background-color 0.28s ease, box-shadow 0.28s ease,
              backdrop-filter 0.28s ease;
}

/* Ajouté par le script au-delà du seuil de défilement. */
.site-header.is-stuck {
  background: rgba(255, 255, 255, 0.82);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  box-shadow: 0 1px 0 var(--u-line), 0 8px 28px rgba(16, 39, 107, 0.06);
}

.site-header__inner {
  width: 100%;
  max-width: var(--u-max);
  margin: 0 auto;
  padding: 0 var(--u-gutter);
  display: grid;
  /* Trois colonnes avec les latérales de largeur égale : le logo
     reste optiquement centré même si le libellé du profil change. */
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 16px;
}

.site-header__left  { justify-self: start; }
.site-header__brand { justify-self: center; }
.site-header__right { justify-self: end; }

/* ---------- Logo ---------- */

.site-brand {
  display: inline-flex;
  align-items: center;
  text-decoration: none;
}

.site-brand img {
  height: var(--u-logo-h);
  width: auto;
}

.site-brand:focus-visible {
  outline: 3px solid var(--u-blue-deep);
  outline-offset: 4px;
  border-radius: 4px;
}

/* ==========================================================
   Burger
   ========================================================== */

.burger {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  height: 42px;
  padding: 0 16px 0 13px;
  border-radius: var(--u-radius-pill);
  background: rgba(255, 255, 255, 0.75);
  color: var(--u-blue);
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 14px;
  box-shadow: 0 4px 16px rgba(16, 39, 107, 0.07);
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.burger:hover {
  background: #fff;
  transform: translateY(-1px);
}

.burger:focus-visible {
  outline: 3px solid var(--u-blue-deep);
  outline-offset: 3px;
}

/* Trois barres de largeur fixe : sans width explicite, elles
   s'effondreraient dans le conteneur flex. */
.burger__bars {
  position: relative;
  flex: 0 0 18px;
  width: 18px;
  height: 12px;
}

.burger__bars span {
  position: absolute;
  left: 0;
  width: 100%;
  height: 2px;
  border-radius: 2px;
  background: currentColor;
  transition: transform 0.26s ease, opacity 0.18s ease, top 0.26s ease;
}

.burger__bars span:nth-child(1) { top: 0; }
.burger__bars span:nth-child(2) { top: 5px; }
.burger__bars span:nth-child(3) { top: 10px; }

.burger[aria-expanded="true"] .burger__bars span:nth-child(1) {
  top: 5px;
  transform: rotate(45deg);
}
.burger[aria-expanded="true"] .burger__bars span:nth-child(2) {
  opacity: 0;
}
.burger[aria-expanded="true"] .burger__bars span:nth-child(3) {
  top: 5px;
  transform: rotate(-45deg);
}

/* Le libellé disparaît sur petits écrans, l'icône suffit. */
@media (max-width: 560px) {
  .burger { padding: 0 13px; }
  .burger__label { display: none; }
}

/* ==========================================================
   Menu plein écran
   ========================================================== */

.site-menu {
  position: fixed;
  inset: 0;
  z-index: var(--z-menu);
  display: flex;
  align-items: flex-start;
  overflow-y: auto;
  background: rgba(255, 255, 255, 0.94);
  backdrop-filter: blur(22px);
  -webkit-backdrop-filter: blur(22px);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.32s ease, visibility 0s linear 0.32s;
}

/* Même langage visuel que les fonds ambiants des autres pages (actualités,
   émissions, musiques...) : un panneau uniquement rempli de texte/liens
   paraissait plat. Purement décoratif, sous le contenu (z-index natif). */
.site-menu__ambient {
  position: absolute;
  top: -260px;
  left: 50%;
  width: 1250px;
  height: 760px;
  transform: translateX(-50%);
  pointer-events: none;
  background:
    radial-gradient(circle at 28% 28%, color-mix(in srgb, var(--u-blue) 15%, transparent), transparent 42%),
    radial-gradient(circle at 75% 16%, rgba(0, 128, 255, 0.11), transparent 40%);
  filter: blur(28px);
}

/* visibility retardée à la fermeture, immédiate à l'ouverture :
   sans ça, les liens resteraient focusables au clavier une fois
   le panneau invisible. */
.site-menu.is-open {
  opacity: 1;
  visibility: visible;
  transition: opacity 0.32s ease, visibility 0s;
  /* Le player global (assets/css/player.css) flotte en position fixe avec
     un z-index volontairement très élevé (jusqu'à 30000, pour rester
     au-dessus de tout contenu de page) : sans ce dépassement explicite, sa
     mini-barre pourrait se peindre par-dessus des liens du menu plein écran
     ouvert et intercepter le clic à leur place. */
  z-index: 30100;
}

/* Le burger (top gauche) morphe déjà en croix via aria-expanded, mais le
   panneau plein écran passe au-dessus de lui en z-index (voir .site-menu.is-open,
   nécessaire pour rester au-dessus du player global) — sans bouton dédié posé
   DANS le panneau, rien de cliquable ne reste pour le refermer autrement
   qu'en cliquant le fond ou Échap. */
.site-menu__close {
  position: absolute;
  top: calc((var(--u-header-h) - 42px) / 2);
  left: var(--u-gutter);
  z-index: 2;
  width: 42px;
  height: 42px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid var(--u-line);
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.7);
  color: var(--u-ink);
  font-size: 16px;
  cursor: pointer;
  transition: background 0.18s ease, transform 0.18s ease, color 0.18s ease;
}
.site-menu__close:hover {
  background: #fff;
  color: var(--u-blue);
  transform: scale(1.06);
}
.site-menu__close:focus-visible {
  outline: 3px solid var(--u-blue-deep);
  outline-offset: 3px;
}

.site-menu__inner {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: var(--u-max);
  margin: 0 auto;
  /* Même gouttière que le header : les entrées du menu s'alignent
     verticalement sur le burger qui les a ouvertes. */
  padding: calc(var(--u-header-h) + 40px) var(--u-gutter) 48px;
}

/* Même bande que .site-header/.site-header__inner (hauteur, largeur max,
   gouttière, centrage) : le logo occupe exactement la même position que
   dans le header, pendant que le menu est ouvert par-dessus. pointer-events
   coupé sur la bande (elle couvre toute la largeur, au-dessus du bouton
   fermer) et réactivé juste sur le lien, pour ne jamais lui voler son clic. */
.site-menu__brand-row {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: var(--u-header-h);
  max-width: var(--u-max);
  margin: 0 auto;
  padding: 0 var(--u-gutter);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 2;
  pointer-events: none;
}

.site-menu__brand {
  display: inline-flex;
  align-items: center;
  pointer-events: auto;
}
.site-menu__brand img {
  height: var(--u-logo-h);
  width: auto;
}

.site-menu__list {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.site-menu__link {
  display: flex;
  align-items: center;
  gap: clamp(14px, 2.2vw, 24px);
  padding: 6px 0;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(28px, 5.2vw, 58px);
  line-height: 1.06;
  color: var(--u-blue);
  text-decoration: none;
}

/* L'item "Installer l'application" (#menuInstallApp) est un <button>, pas
   un <a> : neutralise les styles natifs du navigateur pour un rendu
   identique aux autres entrées du menu. */
button.site-menu__link {
  width: 100%;
  border: 0;
  background: none;
  text-align: left;
  cursor: pointer;
}

.site-menu__link-icon {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  width: clamp(34px, 4vw, 46px);
  height: clamp(34px, 4vw, 46px);
  border-radius: 50%;
  background: color-mix(in srgb, var(--u-blue) 9%, #fff);
  color: var(--u-blue);
  font-size: clamp(13px, 1.6vw, 17px);
  transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;
}

.site-menu__link:hover .site-menu__link-icon {
  background: var(--u-blue);
  color: #fff;
  transform: scale(1.08);
}

/* Pas d'opacity: 0 à l'état de repos. Le panneau est déjà masqué
   par visibility, et l'animation utilise `backwards` : elle rend
   la main à la cascade une fois finie, donc un état de repos
   transparent ferait disparaître les liens juste après leur
   apparition. */
.site-menu.is-open .site-menu__link {
  animation: menu-rise 0.5s cubic-bezier(0.22, 0.8, 0.3, 1) backwards;
}

/* Cascade : chaque entrée entre légèrement après la précédente. */
.site-menu.is-open li:nth-child(1) .site-menu__link { animation-delay: 0.06s; }
.site-menu.is-open li:nth-child(2) .site-menu__link { animation-delay: 0.11s; }
.site-menu.is-open li:nth-child(3) .site-menu__link { animation-delay: 0.16s; }
.site-menu.is-open li:nth-child(4) .site-menu__link { animation-delay: 0.21s; }
.site-menu.is-open li:nth-child(5) .site-menu__link { animation-delay: 0.26s; }
.site-menu.is-open li:nth-child(6) .site-menu__link { animation-delay: 0.31s; }
.site-menu.is-open li:nth-child(7) .site-menu__link { animation-delay: 0.36s; }
.site-menu.is-open li:nth-child(8) .site-menu__link { animation-delay: 0.41s; }

@keyframes menu-rise {
  from { opacity: 0; transform: translateY(22px); }
  to   { opacity: 1; transform: none; }
}

.site-menu__link:hover { color: var(--u-blue-lite); }

.site-menu__link:focus-visible {
  outline: 3px solid var(--u-blue-deep);
  outline-offset: 6px;
  border-radius: 6px;
}

/* ---------- Pied du panneau (écoute directe + réseaux) ---------- */

.site-menu__footer {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 22px;
  margin-top: 40px;
  padding-top: 28px;
  border-top: 1px solid rgba(15, 39, 107, 0.09);
}

.site-menu__listen {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 13px 22px;
  border: 0;
  border-radius: 999px;
  background: var(--u-blue);
  box-shadow: 0 12px 28px color-mix(in srgb, var(--u-blue) 28%, transparent);
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 700;
  color: #fff;
  cursor: pointer;
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}
.site-menu__listen i { font-size: 11px; }
.site-menu__listen:hover {
  transform: translateY(-2px);
  box-shadow: 0 16px 34px color-mix(in srgb, var(--u-blue) 34%, transparent);
}

.site-menu__social {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-left: auto;
}

.site-menu__social a {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: color-mix(in srgb, var(--u-blue) 7%, #fff);
  color: var(--u-ink);
  font-size: 14px;
  text-decoration: none;
  transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;
}
.site-menu__social a:hover {
  background: var(--u-blue);
  color: #fff;
  transform: translateY(-2px);
}

@media (max-width: 640px) {
  .site-menu__footer { margin-top: 28px; padding-top: 22px; }
  .site-menu__social { margin-left: 0; }
}

/* ==========================================================
   Dropdown profil
   ========================================================== */

.profile {
  position: relative;
}

.profile__toggle {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  height: 42px;
  padding: 0 16px;
  border-radius: var(--u-radius-pill);
  background: rgba(255, 255, 255, 0.75);
  color: var(--u-blue);
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 14px;
  box-shadow: 0 4px 16px rgba(16, 39, 107, 0.07);
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.profile__toggle:hover {
  background: #fff;
  transform: translateY(-1px);
}

.profile__toggle:focus-visible {
  outline: 3px solid var(--u-blue-deep);
  outline-offset: 3px;
}

.profile__toggle i { font-size: 14px; flex: 0 0 auto; }

.profile__caret {
  font-size: 11px;
  transition: transform 0.22s ease;
}

.profile__toggle[aria-expanded="true"] .profile__caret {
  transform: rotate(180deg);
}

.profile__avatar {
  width: 24px;
  height: 24px;
  flex: 0 0 24px;
  border-radius: 50%;
  object-fit: cover;
}

.profile__panel {
  position: absolute;
  top: calc(100% + 10px);
  right: 0;
  width: 288px;
  padding: 18px;
  border-radius: 16px;
  background: #fff;
  box-shadow: 0 18px 46px rgba(16, 39, 107, 0.16);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s linear 0.2s;
}

.profile__panel.is-open {
  opacity: 1;
  visibility: visible;
  transform: none;
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s;
  /* Même raison que .site-menu.is-open ci-dessus : passer au-dessus du
     player global, dont le z-index peut atteindre 30000. */
  z-index: 30100;
}

.profile__title {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 18px;
  color: var(--u-ink);
  margin-bottom: 4px;
}

.profile__hint {
  font-size: 13px;
  line-height: 1.45;
  color: var(--u-ink-soft);
  margin-bottom: 14px;
}

/* ---------- Formulaire ---------- */

.profile__field { margin-bottom: 10px; }

.profile__field label {
  display: block;
  font-size: 12px;
  font-weight: 600;
  color: var(--u-ink-soft);
  margin-bottom: 4px;
}

.profile__field input {
  width: 100%;
  height: 40px;
  padding: 0 12px;
  border: 1px solid var(--u-line);
  border-radius: 10px;
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--u-ink);
  background: #fff;
}

.profile__field input:focus-visible {
  outline: 2px solid var(--u-blue);
  outline-offset: 0;
  border-color: transparent;
}

.profile__submit {
  width: 100%;
  height: 42px;
  margin-top: 4px;
  border-radius: var(--u-radius-pill);
  background: var(--u-blue);
  color: #fff;
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 14px;
  transition: background-color 0.2s ease;
}

.profile__submit:hover { background: var(--u-blue-deep); }

.profile__submit:focus-visible {
  outline: 3px solid var(--u-blue-deep);
  outline-offset: 3px;
}

.profile__error {
  margin-bottom: 10px;
  padding: 9px 11px;
  border-radius: 9px;
  background: #fdeceb;
  color: #8a1a12;
  font-size: 13px;
  line-height: 1.4;
}

.profile__aside {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--u-line);
  font-size: 13px;
  text-align: center;
  color: var(--u-ink-soft);
}

.profile__aside a {
  color: var(--u-blue);
  font-weight: 600;
  text-decoration: none;
}

.profile__aside a:hover { text-decoration: underline; }

/* ---------- Session ouverte ---------- */

.profile__list {
  list-style: none;
  margin: 0 -6px;
}

.profile__list a,
.profile__list button {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 9px 10px;
  border-radius: 9px;
  font-size: 14px;
  font-weight: 600;
  color: var(--u-ink);
  text-decoration: none;
  text-align: left;
  transition: background-color 0.16s ease;
}

.profile__list a:hover,
.profile__list button:hover { background: rgba(7, 91, 230, 0.07); }

.profile__list a:focus-visible,
.profile__list button:focus-visible {
  outline: 3px solid var(--u-blue-deep);
  outline-offset: -1px;
}

.profile__list i {
  width: 16px;
  flex: 0 0 16px;
  font-size: 13px;
  color: var(--u-ink-soft);
  text-align: center;
}

.profile__sep {
  height: 1px;
  margin: 8px 4px;
  background: var(--u-line);
}

/* Le panneau déborderait de l'écran sur mobile : on l'ancre
   aux deux bords plutôt que de le laisser sortir à droite. */
@media (max-width: 420px) {
  .profile__panel {
    position: fixed;
    top: calc(var(--u-header-h) + 6px);
    left: 12px;
    right: 12px;
    width: auto;
  }
  .profile__label { display: none; }
  .profile__toggle { padding: 0 13px; }
}

@media (prefers-reduced-motion: reduce) {
  .site-header,
  .burger,
  .burger__bars span,
  .site-menu,
  .profile__toggle,
  .profile__panel,
  .profile__caret,
  .profile__submit { transition: none; }

  .burger:hover,
  .profile__toggle:hover { transform: none; }

  .site-menu.is-open .site-menu__link { animation: none; }
}