/* =============================================================
   DJ SHAN : FEUILLE DE STYLE COMMUNE (SOCLE)
   Direction visuelle : URBAIN / AFFICHE DE SCÈNE, sombre & or.
   -------------------------------------------------------------
   Ce fichier est PARTAGÉ par toutes les pages.
   Pour changer une couleur, une police ou un espacement sur
   TOUT le site, modifiez les variables de :root ci-dessous.
   ============================================================= */

/* ---------- 1. VARIABLES GLOBALES (à personnaliser ici) ------ */
:root {
  /* Palette sombre & or */
  --noir:        #0a0a0b;   /* fond principal */
  --noir-doux:   #141417;   /* cartes / sections */
  --or:          #c9a24b;   /* or principal */
  --or-clair:    #f0d27d;   /* or clair (éclats, survol) */
  --creme:       #f4efe3;   /* texte clair */
  --gris:        #9a9486;   /* texte discret */
  --ligne:       #29292f;   /* filets / bordures */

  /* Typographie : registre affiche urbaine */
  --titre:   "Anton", "Impact", "Arial Narrow", sans-serif; /* gros titres condensés */
  --texte:   "Inter", "Segoe UI", sans-serif;               /* corps lisible */
  --mono:    "Space Mono", "Consolas", "Courier New", monospace; /* métadonnées façon liner notes (dates, refs, tarifs) */

  --largeur-max: 1140px;
  --rayon: 4px;             /* coins nets, peu arrondis (plus urbain) */
  --transition: 220ms ease;
}

/* ---------- 2. RÉINITIALISATION + TEXTURE ------------------- */
* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }

body {
  font-family: var(--texte);
  background: var(--noir);
  color: var(--creme);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
  position: relative;
}
/* Grain « béton » discret sur tout le site */
body::before {
  content: ""; position: fixed; inset: 0; z-index: 1; pointer-events: none;
  opacity: .05; mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
/* Le contenu passe au-dessus du grain */
.entete, main, .pied, .ticker, .ambiance { position: relative; z-index: 2; }

/* ---------- ACCESSIBILITÉ ---------- */
/* Lien d'évitement : caché, visible seulement au clavier (Tab) */
.lien-evitement { position: absolute; left: -9999px; top: .4rem; z-index: 300;
  background: var(--or); color: var(--noir); padding: .55rem 1rem;
  font-family: var(--titre); letter-spacing: .04em; text-decoration: none; }
.lien-evitement:focus { left: .4rem; }
/* Anneau de focus net au clavier */
:focus-visible { outline: 2px solid var(--or); outline-offset: 2px; }
/* Respect de « réduire les animations » du système */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important;
    transition-duration: .001ms !important; scroll-behavior: auto !important; }
  .reveal, .fade-in { opacity: 1 !important; transform: none !important; }
}

/* Lecteur d'ambiance (page Gospel) : pastille flottante en haut à droite */
/* Bandeau d'invitation à activer l'ambiance sonore (page Gospel, clic uniquement) */
.ambiance-invite {
  display: flex; align-items: center; gap: .9rem; flex-wrap: wrap;
  margin: 0 0 2rem; padding: .9rem 1.1rem;
  background: linear-gradient(135deg, rgba(201,162,75,.12), rgba(20,20,23,.55));
  border: 1px solid var(--ligne); border-left: 3px solid var(--or);
  border-radius: var(--rayon);
}
.ambiance-ico { font-size: 1.5rem; line-height: 1; }
.ambiance-txt { flex: 1; min-width: 12ch; margin: 0; color: var(--creme); font-size: .95rem; }
.ambiance-btn {
  flex: none; cursor: pointer; white-space: nowrap;
  background: var(--or); color: var(--noir); border: 0;
  font-family: var(--titre); letter-spacing: .03em; font-size: .9rem;
  padding: .55rem 1.1rem; border-radius: var(--rayon); transition: filter var(--transition);
}
.ambiance-btn:hover { filter: brightness(1.08); }
.ambiance-invite.joue { border-left-color: var(--or-clair); }
.ambiance-invite.joue .ambiance-btn { background: transparent; color: var(--or); border: 1px solid var(--or); }
/* Petit égaliseur animé dans le bouton quand l'ambiance joue */
.eq { display: inline-flex; align-items: flex-end; gap: 2px; height: 11px; margin-right: .45rem; }
.eq i { width: 3px; height: 100%; background: currentColor; transform-origin: bottom;
  animation: eq-danse 1s ease-in-out infinite; }
.eq i:nth-child(2) { animation-delay: .25s; }
.eq i:nth-child(3) { animation-delay: .5s; }
@keyframes eq-danse { 0%, 100% { transform: scaleY(.3); } 50% { transform: scaleY(1); } }
@media (prefers-reduced-motion: reduce) { .eq i { animation: none; transform: scaleY(.65); } }

img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; transition: color var(--transition); }
a:hover { color: var(--or-clair); }

h1, h2, h3 {
  font-family: var(--titre);
  font-weight: 400;              /* Anton n'a qu'une graisse */
  line-height: .98;
  letter-spacing: .01em;
  text-transform: uppercase;
  text-wrap: balance;            /* lignes équilibrées, pas de mot orphelin */
}
p { text-wrap: pretty; }         /* évite les fins de paragraphe d'un seul mot */

/* Micro-typographie : chiffres TABULAIRES sur toute la voix mono (dates,
   années, tarifs, catalogues, références) -> les colonnes de chiffres
   s'alignent au pixel, comme sur un dos de pochette. */
.carte-date, .tarif dd, .tl-annee, .evt-mois, .evt-jour, .champ label,
.cv-album, .cv-cat, .piste-ref, .actu-ext-date, .mix-cat, .mix-annee,
.modal-meta { font-variant-numeric: tabular-nums; }

.contenu { width: 100%; max-width: var(--largeur-max); margin: 0 auto; padding: 0 1.5rem; }

/* ---------- 3. EN-TÊTE & NAVIGATION (socle commun) ---------- */
.entete {
  position: sticky; top: 0; z-index: 100;
  background: rgba(10,10,11,.82);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--ligne);
}
.entete .contenu { display: flex; align-items: center; justify-content: space-between; gap: 1rem; height: 64px; }

.marque { display: flex; align-items: center; gap: .55rem; }

/* Logo « DJ Shan » en or (fichier medias/logo-or.png : graffiti recoloré en or,
   transparence conservée). Affiché en simple <img> = compatible partout. */
.marque img { height: 30px; width: auto; display: block; transition: opacity var(--transition); }
.marque:hover img { opacity: .85; }

.nav { display: flex; align-items: center; gap: 1.6rem; }
.nav a {
  font-family: var(--titre); font-size: 1rem;
  letter-spacing: .04em; color: var(--creme);
  position: relative; padding: .1rem 0;
}
/* Soulignement doré qui se déploie au survol / sur la page active */
.nav a::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -3px; height: 2px;
  background: var(--or); transform: scaleX(0); transform-origin: left; transition: transform var(--transition);
}
.nav a:hover { color: var(--or-clair); }
.nav a:hover::after, .nav a[aria-current="page"]::after { transform: scaleX(1); }
.nav a[aria-current="page"] { color: var(--or); }

/* Menu déroulant (sous-onglet, ex. Identité > Biographie) */
.nav-item { position: relative; display: inline-flex; align-items: center; }
.nav-item > a { display: inline-flex; align-items: center; gap: .3rem; }
.caret { font-size: .55rem; color: var(--or); transition: transform var(--transition); }
.nav-item:hover .caret, .nav-item:focus-within .caret { transform: rotate(180deg); }
.sous-menu {
  position: absolute; top: calc(100% + 6px); left: -.6rem; min-width: 180px;
  background: var(--noir-doux); border: 1px solid var(--ligne); padding: .35rem 0;
  display: flex; flex-direction: column;
  opacity: 0; visibility: hidden; transform: translateY(8px);
  transition: var(--transition); z-index: 120;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%);
}
.nav-item:hover .sous-menu, .nav-item:focus-within .sous-menu { opacity: 1; visibility: visible; transform: translateY(0); }
.sous-menu a { padding: .6rem 1.1rem; font-size: .85rem; letter-spacing: .04em; color: var(--creme); }
.sous-menu a::after { display: none; }
.sous-menu a:hover { background: rgba(201,162,75,.12); color: var(--or-clair); }

/* Sélecteur de langue (FR / EN / LN) */
.langues { display: flex; align-items: center; gap: .3rem; }
.langues button {
  background: none; border: 1px solid var(--ligne); color: var(--gris);
  font: inherit; font-size: .76rem; font-weight: 600; letter-spacing: .05em;
  padding: .25rem .5rem; border-radius: var(--rayon); cursor: pointer; transition: var(--transition);
}
.langues button:hover { border-color: var(--or); color: var(--creme); }
.langues button[aria-pressed="true"] { background: var(--or); color: var(--noir); border-color: var(--or); }

/* Bouton menu mobile (hamburger)
   ⚠️ flex: none OBLIGATOIRE : sans lui, les 4 boutons de langue compriment
   le burger (flex-shrink) jusqu'à le rendre invisible sur petit écran. */
.menu-burger { display: none; flex: none; background: none; border: none; cursor: pointer; width: 40px; height: 40px; position: relative; }
.menu-burger span, .menu-burger span::before, .menu-burger span::after {
  content: ""; position: absolute; left: 8px; right: 8px; height: 2px; background: var(--or); transition: var(--transition);
}
.menu-burger span { top: 19px; }
.menu-burger span::before { top: -7px; }
.menu-burger span::after { top: 7px; }
/* Menu ouvert : le burger devient une CROIX (l'état se lit d'un coup d'œil) */
.menu-burger[aria-expanded="true"] span { background: transparent; }
.menu-burger[aria-expanded="true"] span::before { top: 0; transform: rotate(45deg); }
.menu-burger[aria-expanded="true"] span::after { top: 0; transform: rotate(-45deg); }

/* Voile sous le tiroir mobile (créé par js/main.js) : assombrit la page,
   capte les touches et ferme le menu au tap. Sous l'en-tête (z 100) pour
   laisser le burger accessible, au-dessus de tout le contenu. */
.nav-voile { position: fixed; inset: 0; z-index: 95;
  background: rgba(5,5,6,.55); backdrop-filter: blur(2px);
  opacity: 0; visibility: hidden;
  transition: opacity var(--transition), visibility 0s linear var(--transition); }
.nav-voile.visible { opacity: 1; visibility: visible;
  transition: opacity var(--transition), visibility 0s; }
@media (min-width: 821px) { .nav-voile { display: none; } }

/* Sillon de lecture : fine ligne or sous l'en-tête qui avance avec le
   défilement, comme une tête de lecture sur la piste de la page.
   CSS pur (scroll-driven animation) : les navigateurs sans support
   (Firefox…) ne montrent simplement rien. */
.entete::after {
  content: ""; position: absolute; left: 0; bottom: -1px; height: 2px; width: 100%;
  background: linear-gradient(90deg, var(--or), var(--or-clair));
  transform: scaleX(0); transform-origin: 0 50%; pointer-events: none;
}
@supports (animation-timeline: scroll()) {
  .entete::after { animation: lecture-avance linear both; animation-timeline: scroll(root); }
}
@keyframes lecture-avance { from { transform: scaleX(0); } to { transform: scaleX(1); } }

/* ---------- 4. BANDEAU DÉFILANT (TICKER) ------------------- */
.ticker {
  background: var(--or); color: var(--noir);
  overflow: hidden; white-space: nowrap;
  border-top: 1px solid var(--noir); border-bottom: 1px solid var(--noir);
}
.ticker-piste { display: inline-block; padding: .5rem 0; animation: defile 28s linear infinite; }
.ticker-piste span {
  font-family: var(--titre); font-size: 1rem; letter-spacing: .08em;
  margin: 0 1.4rem; text-transform: uppercase;
}
.ticker-piste span::after { content: "✦"; margin-left: 1.4rem; color: var(--noir); }
@keyframes defile { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* ---------- 5. HÉROS (page d'accueil) ----------------------- */
.hero {
  position: relative; overflow: hidden;
  min-height: calc(100vh - 64px);
  display: flex; align-items: center; justify-content: center;
  padding: 2.5rem 1.5rem;
  background: radial-gradient(circle at 70% 35%, rgba(201,162,75,.10), transparent 55%), var(--noir);
}
/* Disposition deux colonnes : texte + logo or à gauche, photo à droite */
.hero-grille {
  position: relative; z-index: 2;
  width: 100%; max-width: var(--largeur-max);
  display: grid; grid-template-columns: 1.05fr .95fr; gap: 2.8rem; align-items: center;
}
.hero-texte { text-align: left; }
.hero .kicker {
  font-family: var(--titre); color: var(--or); letter-spacing: .22em;
  font-size: clamp(.8rem, 1.6vw, 1rem); margin-bottom: .9rem;
}
/* Le logo « DJ Shan » en grand et en or = titre principal (h1) */
.hero-logo-or { margin: 0 0 .4rem; }
.hero-logo-or img { width: min(480px, 86%); height: auto; display: block; }
.hero .accroche { color: var(--creme); font-size: clamp(1.05rem, 2.4vw, 1.25rem); font-weight: 600; max-width: 46ch; margin: 1.1rem 0 0; }
.hero .accroche2 { color: var(--or-clair); font-style: italic; font-size: clamp(.95rem, 2vw, 1.1rem); max-width: 48ch; margin: .35rem 0 0; }
.hero .styles { color: var(--gris); font-size: clamp(.78rem, 1.5vw, .92rem); letter-spacing: .02em; margin-top: .7rem; white-space: nowrap; }
.hero .styles strong { color: var(--or-clair); }
.hero-actions { display: flex; gap: .8rem; flex-wrap: wrap; justify-content: flex-start; margin-top: 1.8rem; }

/* Photo de l'artiste avec liseré or décalé (effet affiche) */
.hero-photo { position: relative; justify-self: center; max-width: 380px; width: 100%; }
.hero-photo img {
  width: 100%; height: auto; display: block; border: 1px solid var(--ligne);
  aspect-ratio: 1 / 1;            /* photo carrée : aucune déformation */
  object-fit: cover;             /* recadre au lieu d'étirer */
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 26px), calc(100% - 26px) 100%, 0 100%);
}
.hero-photo::before {
  content: ""; position: absolute; top: 16px; left: 16px; right: -16px; bottom: -16px;
  border: 2px solid var(--or); z-index: -1;
}

/* ---------- 6. COMPOSANTS RÉUTILISABLES --------------------- */
.btn {
  display: inline-block; font-family: var(--titre); font-size: 1rem; letter-spacing: .05em;
  padding: .7rem 1.5rem; border-radius: var(--rayon); border: 2px solid var(--or);
  color: var(--or); cursor: pointer; background: transparent; transition: var(--transition);
}
.btn:hover { background: var(--or); color: var(--noir); }
.btn-plein { background: var(--or); color: var(--noir); }
.btn-plein:hover { background: var(--or-clair); border-color: var(--or-clair); }
/* Bouton « Installer l'appli » (PWA) : toujours visible, sauf si le site tourne
   déjà en mode application (js/main.js pose alors [hidden]). Règle explicite car
   .btn (display:inline-block) écraserait sinon l'attribut [hidden] natif. */
.btn-installer[hidden] { display: none; }
/* Même piège pour le bouton « Partager » de la fenêtre projet (masqué pour
   la pochette Gospel de l'accueil, qui a sa propre page). */
.modal-partager[hidden] { display: none; }
/* Texte du guide d'installation (modale .pwa-aide, réutilise le style .modal). */
.pwa-aide-texte { color: var(--creme); line-height: 1.6; margin: 0 0 1rem; text-align: center; }

/* Carte (actualité, mixtape, événement...) : traitement urbain */
.carte {
  position: relative; overflow: hidden;
  background: linear-gradient(135deg, var(--noir-doux), #0e0e12 70%);
  border: 1px solid var(--ligne); border-left: 4px solid var(--or);
  padding: 1.4rem 1.4rem 1.6rem;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 22px), calc(100% - 22px) 100%, 0 100%);
  transition: var(--transition);
}
/* Gros numéro fantôme en filigrane */
.carte-num {
  position: absolute; top: -.6rem; right: .5rem; font-family: var(--titre);
  font-size: 4.6rem; line-height: 1; color: transparent;
  -webkit-text-stroke: 1px rgba(201,162,75,.16); pointer-events: none; user-select: none;
}
/* Date en étiquette dorée inclinée (mono = tampon dateur, façon liner notes) */
.carte-date {
  display: inline-block; font-family: var(--mono); font-size: .7rem; letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--noir); background: var(--or); padding: .18rem .7rem; transform: skewX(-9deg);
}
.carte-date span { display: inline-block; transform: skewX(9deg); }
.carte h3 { color: var(--creme); font-size: 1.35rem; margin: .65rem 0 .5rem; position: relative; }
.carte p { color: var(--gris); font-size: .95rem; position: relative; }
.carte:hover { border-color: var(--or); transform: translateY(-4px); }

/* Section + titre numéroté (le numéro doré précède le titre) */
.section { padding: 3.5rem 0; }
.section-titre {
  font-size: clamp(1.8rem, 5vw, 3rem); color: var(--creme);
  margin-bottom: 1.8rem; display: flex; align-items: baseline; gap: .7rem;
}
.section-titre::before {
  content: attr(data-num); color: var(--or); font-size: .55em; letter-spacing: .05em;
}

/* Embeds responsives (Bandcamp / YouTube / etc.) */
.embed { position: relative; width: 100%; aspect-ratio: 16 / 9; border-radius: var(--rayon); overflow: hidden; border: 1px solid var(--ligne); }
.embed iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
/* Façade vidéo : miniature cliquable avant chargement du lecteur YouTube */
.video-facade { cursor: pointer; background: var(--noir-doux); }
.video-facade .facade-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.video-facade .facade-play { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 68px; height: 48px; border-radius: 12px; background: rgba(0,0,0,.55); transition: background .15s; }
.video-facade .facade-play::before { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-40%, -50%); border-style: solid; border-width: 11px 0 11px 19px; border-color: transparent transparent transparent #fff; }
.video-facade:hover .facade-play, .video-facade:focus-visible .facade-play { background: var(--or); }
.video-facade:hover .facade-play::before, .video-facade:focus-visible .facade-play::before { border-left-color: var(--noir); }

/* ---------- 7. PIED DE PAGE (socle commun) ------------------ */
.pied { background: var(--noir-doux); border-top: 3px solid var(--or); margin-top: 4rem; padding: 2.6rem 0 2rem; }
.pied .contenu { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1.5rem; }
.pied h3 { color: var(--or); font-size: 1.1rem; letter-spacing: .05em; margin-bottom: .8rem; }
.pied ul { list-style: none; }
.pied li { margin: .35rem 0; font-size: .92rem; color: var(--gris); }
.pied li a:hover { color: var(--or-clair); }
.pied-bas { text-align: center; color: var(--gris); font-size: .8rem; margin-top: 2rem; padding-top: 1.2rem; border-top: 1px solid var(--ligne); letter-spacing: .05em; }


/* ---------- 9. ANIMATION D'ENTRÉE -------------------------- */
.fade-in { opacity: 0; transform: translateY(18px); animation: apparition .9s ease forwards; }
.fade-in.delai-1 { animation-delay: .15s; }
.fade-in.delai-2 { animation-delay: .3s; }
.fade-in.delai-3 { animation-delay: .45s; }
@keyframes apparition { to { opacity: 1; transform: translateY(0); } }

@media (prefers-reduced-motion: reduce) {
  .fade-in { animation: none; opacity: 1; transform: none; }
  .ticker-piste { animation: none; }
  html { scroll-behavior: auto; }
}

/* ---------- 10. RESPONSIVE / MOBILE ------------------------ */
/* ---------- 11. ICÔNES, PLATEFORMES & PIED CRÉATIF -------- */
/* Sprite SVG caché (les icônes y sont définies une seule fois) */
.svg-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }

/* Boutons-icônes ronds (réseaux dans le pied de page) */
/* gap : .25rem entre les lignes (si les icônes débordent sur 2 lignes),
   .5rem entre les icônes d'une même ligne. */
.icones { display: flex; flex-wrap: wrap; gap: .25rem .5rem; justify-content: center; }
.icone {
  display: grid; place-items: center; width: 42px; height: 42px; flex: none;
  border: 1px solid var(--ligne); border-radius: 50%; color: var(--creme);
  transition: var(--transition);
}
.icone svg { width: 21px; height: 21px; }
.icone:hover { background: var(--or); color: var(--noir); border-color: var(--or); transform: translateY(-3px); }

/* Pied de page asymétrique : marque | suivre | écouter | bouton booking */
.pied-grille { display: grid; grid-template-columns: 1.3fr 1fr 1fr auto; gap: 2.2rem; align-items: start; }
.pied-marque .pied-logo { font-family: var(--titre); font-size: 2.4rem; color: var(--or); display: block; transform: skewX(-4deg); line-height: 1; }
.pied-marque p { color: var(--gris); font-size: .9rem; margin: .7rem 0 0; max-width: 30ch; }
/* Colonnes « Suivre » et « Écouter » centrées (titre + icônes) */
.pied-col { text-align: center; }
.pied-col .icones { justify-content: center; }
/* Bouton booking tout à droite, sur la même ligne que les autres colonnes */
.pied-cta { justify-self: end; align-self: center; display: flex; flex-direction: column; gap: .55rem; align-items: stretch; }
.pied-cta .btn { font-size: .85rem; padding: .6rem 1.2rem; letter-spacing: .02em; white-space: nowrap; }

/* Tuiles d'écoute cliquables (style « ticket » urbain) */
.plateformes { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1rem; }
.plateforme {
  position: relative; overflow: hidden;
  display: flex; align-items: stretch; gap: 0;
  background: var(--noir-doux); border: 1px solid var(--ligne);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%);
  transition: var(--transition);
}
/* Badge doré incliné qui porte l'icône */
.plateforme .p-ico {
  flex: none; width: 62px; display: grid; place-items: center;
  background: var(--or); transform: skewX(-9deg); margin-left: -10px;
}
.plateforme .p-ico svg { width: 28px; height: 28px; color: var(--noir); transform: skewX(9deg); }
.plateforme .p-nom { display: flex; align-items: center; font-family: var(--titre); font-size: 1.25rem; color: var(--creme); letter-spacing: .03em; padding: 1.1rem .2rem 1.1rem 1.1rem; }
.plateforme .p-action { margin-left: auto; align-self: center; padding-right: 1.1rem; font-size: .8rem; color: var(--gris); letter-spacing: .05em; transition: var(--transition); white-space: nowrap; }
.plateforme:hover { border-color: var(--or); transform: translateY(-3px); }
.plateforme:hover .p-ico { background: var(--or-clair); }
.plateforme:hover .p-action { color: var(--or); transform: translateX(4px); }

/* ---------- 12. PAGES INTÉRIEURES (Identité, Bio, etc.) ---- */
/* En-tête de page (bandeau titre) */
.page-tete { padding: 3.5rem 0 1.5rem; position: relative; overflow: hidden; }
.page-tete .kicker { display: block; font-family: var(--titre); color: var(--or); letter-spacing: .22em; font-size: clamp(.78rem, 1.5vw, 1rem); margin-bottom: .6rem; }
.page-tete h1 { font-size: clamp(2.6rem, 9vw, 5.5rem); color: var(--creme); transform: skewX(-4deg); }
.page-tete .chapo { color: var(--gris); max-width: 60ch; margin-top: 1.1rem; font-size: clamp(1rem, 2.2vw, 1.15rem); }
.page-tete .bio-num { /* gros mot fantôme en fond, même langage que le « Shan » du héros d'accueil :
   centré derrière TOUT l'en-tête (visible autour du titre et du logo, pas caché dans un coin)
   et contour aligné sur .hero-fantome (1.5px à .17), sinon il est imperceptible. */
  position: absolute; inset: 0; z-index: 0;
  display: grid; place-items: center;
  font-family: var(--titre); font-size: clamp(5rem, 18vw, 14rem); line-height: .8;
  color: transparent; -webkit-text-stroke: 1.5px rgba(201,162,75,.17);
  pointer-events: none; user-select: none;
}
.page-tete > * { position: relative; z-index: 1; }

/* Deux colonnes (ex. Vision / Mission) */
.duo { display: grid; grid-template-columns: 1fr 1fr; gap: 2.4rem; }

/* Blocs de texte (vision / mission / sections de bio) */
.bloc-texte { max-width: 68ch; }
.bloc-texte p { color: var(--creme); margin-top: .7rem; }
.bloc-texte p + p { margin-top: .9rem; }

/* Grille des valeurs */
.valeurs { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1.2rem; }
.valeur {
  position: relative; overflow: hidden;
  background: linear-gradient(135deg, var(--noir-doux), #0e0e12 70%);
  border: 1px solid var(--ligne); border-top: 3px solid var(--or); padding: 1.5rem 1.4rem 1.6rem;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%);
  transition: var(--transition);
}
.valeur:hover { transform: translateY(-4px); border-color: var(--or); }
.valeur-num { font-family: var(--titre); font-size: 2.3rem; line-height: 1; color: transparent; -webkit-text-stroke: 1px rgba(201,162,75,.5); }
.valeur h3 { color: var(--creme); font-size: 1.25rem; margin: .5rem 0 .5rem; }
.valeur p { color: var(--gris); font-size: .93rem; }

/* Appel vers une autre page (ex. biographie) */
.cta-bloc {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1.2rem;
  background: linear-gradient(135deg, var(--noir-doux), #0e0e12);
  border: 1px solid var(--ligne); border-left: 4px solid var(--or); padding: 1.6rem;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%);
}
.cta-bloc h2, .cta-bloc h3 { color: var(--creme); font-size: 1.5rem; }
.cta-bloc p { color: var(--gris); font-size: .95rem; margin-top: .3rem; }
.cta-actions { display: flex; flex-wrap: wrap; gap: .8rem; }

/* ---------- IDENTITÉ : hero + chiffres + panneaux alternés + credo ---------- */
/* Hero (photo + credo) */
.id-hero { position: relative; overflow: hidden; padding: 2.4rem 0 1.4rem; }
.id-hero-grille { display: grid; grid-template-columns: .82fr 1.18fr; gap: 2.6rem; align-items: center; }
.id-hero-photo { position: relative; justify-self: center; max-width: 360px; width: 100%; }
.id-hero-photo img { width: 100%; aspect-ratio: 4/5; object-fit: cover; border: 1px solid var(--ligne);
  clip-path: polygon(0 0,100% 0,100% calc(100% - 22px),calc(100% - 22px) 100%,0 100%); }
.id-hero-photo::before { content:""; position:absolute; top:16px; left:16px; right:-16px; bottom:-16px; border:2px solid var(--or); z-index:-1; }
.id-hero-texte .kicker { display:block; font-family:var(--titre); color:var(--or); letter-spacing:.22em; font-size:clamp(.78rem,1.5vw,1rem); margin-bottom:.5rem; }
.id-hero-texte h1 { font-size: clamp(2.6rem, 8vw, 5rem); color: var(--creme); transform: skewX(-4deg); line-height:.95; }
.id-hero-credo { font-family: var(--titre); color: var(--or); font-size: clamp(1.3rem, 4vw, 2.3rem);
  letter-spacing:.04em; text-transform: uppercase; margin:.7rem 0 .5rem; }
.id-hero-texte .chapo { color: var(--gris); max-width: 50ch; margin-top:.5rem; font-size: clamp(1rem,2.2vw,1.12rem); }

/* Bande de chiffres-clés */
.chiffres { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; text-align: center;
  border-top:1px solid var(--ligne); border-bottom:1px solid var(--ligne); padding: 1.5rem 0; }
.chiffre { display:flex; flex-direction:column; gap:.25rem; }
.ch-num { font-family: var(--titre); color: var(--or); font-size: clamp(1.9rem, 5.5vw, 3.1rem); line-height:1; }
.ch-lab { color: var(--gris); font-size: .82rem; letter-spacing:.03em; }

/* Vision / Mission en panneaux alternés (gros numéro) */
.mv-bloc { display: grid; grid-template-columns: auto 1fr; gap: 1.6rem; align-items: start; margin: 2.4rem 0; }
.mv-bloc.alt { grid-template-columns: 1fr auto; }
.mv-bloc.alt .mv-num { order: 2; }
.mv-bloc.alt .mv-contenu { order: 1; }
.mv-num { font-family: var(--titre); font-size: clamp(3rem, 11vw, 6.5rem); line-height:.8;
  color: transparent; -webkit-text-stroke: 1.5px rgba(201,162,75,.45); }
.mv-contenu h2 { color: var(--creme); font-size: clamp(1.6rem,4.5vw,2.4rem); transform: skewX(-4deg); margin-bottom:.6rem; }

/* Credo géant pleine largeur */
.credo-geant { margin: 1.4rem 0; padding: clamp(2.6rem,7vw,5rem) 1.2rem; text-align: center;
  background: linear-gradient(135deg, #121216, var(--noir)); border-top:1px solid var(--ligne); border-bottom:1px solid var(--ligne); }
.cg-texte { font-family: var(--titre); color: var(--creme); font-size: clamp(2rem, 8.5vw, 5rem);
  line-height: 1; letter-spacing:.02em; transform: skewX(-3deg); }

/* L'esprit du projet (page Vision & Valeurs) */
.esprit-intro { color: var(--gris); max-width: 62ch; margin: .4rem 0 1.3rem; font-size: clamp(1rem, 2.2vw, 1.12rem); }
.esprit-intro strong { color: var(--creme); }
.esprit-points { list-style: none; display: grid; gap: 1rem; max-width: 62ch; margin: 0 0 1.6rem; }
.esprit-points li { border-left: 3px solid var(--or); padding-left: 1rem; color: var(--gris); }
.esprit-points strong { display: block; font-family: var(--titre); color: var(--creme); letter-spacing: .02em; margin-bottom: .15rem; }
.esprit-fin { font-family: var(--titre); color: var(--or); font-size: clamp(1.2rem, 3.4vw, 1.8rem); transform: skewX(-3deg); }

/* Tagline de positionnement (héros accueil) : coup de MARQUEUR incliné
   (surlignage translucide sous le bas des lettres). Volontairement SANS
   cadre ni fond plein : un encadré or ressemblerait aux boutons voisins
   (« Booker DJ Shan ») et inviterait au clic. */
.hero-tag { display: inline-block; font-family: var(--titre); color: var(--or);
  font-size: clamp(1.1rem, 3.2vw, 1.55rem); letter-spacing: .03em;
  transform: skewX(-6deg) rotate(-1.2deg); padding: 0 .2em;
  background: linear-gradient(transparent 60%, rgba(201,162,75,.24) 60%);
  margin: .7rem 0 0; }

/* Mot géant en contour derrière le héros (même langage que les pages
   intérieures : VÉRITÉ, MIX…). Centré derrière TOUT le héros pour rester
   visible autour du texte et de la photo (pas caché dans un coin).
   ⚠️ Centrage par grid (pas par transform : la parallaxe de main.js pose
   son propre transform inline et l'écraserait). */
.hero-fantome { position: absolute; inset: 0; z-index: 1;
  display: grid; place-items: center;
  font-family: var(--titre); font-size: clamp(7rem, 24vw, 22rem); line-height: .8;
  text-transform: uppercase; color: transparent;
  -webkit-text-stroke: 1.5px rgba(201,162,75,.17);
  pointer-events: none; user-select: none; }

/* Hub Identité : titre à gauche, logo doré à droite */
.id-hub-tete { text-align: left; }
.id-hub-haut { display: flex; align-items: center; justify-content: space-between; gap: 2rem; flex-wrap: wrap; }
.id-hub-logo { width: min(330px, 40%); height: auto; flex: none; }
/* Hero Freestyle : photo « Shan & D-Say » cadre or (même style que la photo d'accueil). */
.fsmm-hero-photo { position: relative; flex: none; width: min(330px, 40%); margin-right: 16px; }
.fsmm-hero-photo img { width: 100%; height: auto; display: block; border: 1px solid var(--ligne);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 26px), calc(100% - 26px) 100%, 0 100%); }
.fsmm-hero-photo::before { content: ""; position: absolute; top: 16px; left: 16px; right: -16px; bottom: -16px;
  border: 2px solid var(--or); z-index: -1; }
/* Desktop : le titre est long → photo maintenue à droite (nowrap), h1 réduit, chapô
   remonté sous le slogan. Sur mobile, on retombe sur le hub CENTRÉ standard. */
@media (min-width: 701px) {
  .id-hub-haut:has(.fsmm-hero-photo) { flex-wrap: nowrap; align-items: flex-start; }
  .id-hub-haut:has(.fsmm-hero-photo) .id-hub-txt { flex: 1 1 auto; min-width: 0; }
  .id-hub-haut:has(.fsmm-hero-photo) h1 { font-size: clamp(2.2rem, 6vw, 4.6rem); }
  .id-hub-tete:has(.fsmm-hero-photo) .chapo { margin-top: -170px; max-width: 58%; }
}
@media (max-width: 700px) {
  /* photo centrée sous le titre + espace clair avant le chapô (le cadre or déborde de 16px) */
  .fsmm-hero-photo { width: min(240px, 60%); margin: 1rem auto 2.4rem; }
  /* colonne texte pleine largeur + titre un peu réduit (il est long) → tient sur une
     ligne et se voit bien CENTRÉ, comme les autres hubs. */
  .id-hub-haut:has(.fsmm-hero-photo) .id-hub-txt { width: 100%; }
  .id-hub-haut:has(.fsmm-hero-photo) h1 { font-size: clamp(1.8rem, 7vw, 2.4rem); }
}

/* Diptyque : accès des hubs (2 zones ; .trois = 3 zones pour Média), alignés sur le contenu */
.id-diptyque { display: grid; grid-template-columns: 1fr 1fr; border-top: 1px solid var(--ligne);
  border-bottom: 1px solid var(--ligne); margin-block: 1.6rem; }
.id-diptyque.trois { grid-template-columns: repeat(3, 1fr); }
.id-demi { position: relative; display: flex; align-items: flex-end; min-height: 240px; overflow: hidden;
  padding: clamp(1.4rem, 3vw, 2rem); transition: background var(--transition); }
.id-demi + .id-demi { border-left: 1px solid var(--ligne); }
/* Les bordures haut/bas du diptyque couvrent AUSSI le padding latéral de
   .contenu (1.5rem) : la 1ʳᵉ et la dernière carte débordent de cette même
   valeur (marge négative compensée par le padding) pour que leur fond de
   survol remplisse tout le rectangle, sans bande vide à gauche/droite.
   Le texte, lui, reste aligné sur le contenu. */
.id-diptyque > .id-demi:first-child { margin-left: -1.5rem; padding-left: 1.5rem; }
.id-diptyque > .id-demi:last-child { margin-right: -1.5rem; padding-right: 1.5rem; }
.id-demi:hover { background: linear-gradient(180deg, transparent, rgba(201,162,75,.1)); }
.id-demi-num { position: absolute; top: .3rem; right: 1rem; font-family: var(--titre); line-height: 1;
  font-size: clamp(3rem, 9vw, 6rem); color: transparent; -webkit-text-stroke: 1.5px rgba(201,162,75,.35); pointer-events: none; }
.id-demi-in { position: relative; z-index: 1; }
.id-demi h2 { color: var(--creme); font-size: clamp(1.8rem, 5vw, 3rem); transform: skewX(-4deg); transition: color var(--transition); }
.id-demi:hover h2 { color: var(--or-clair); }
.id-demi-txt { display: block; color: var(--gris); margin: .6rem 0 .9rem; max-width: 34ch; font-size: .98rem; }
.id-demi-voir { font-family: var(--titre); color: var(--or); letter-spacing: .06em; font-size: .9rem; }
.id-demi:hover .id-demi-voir { color: var(--or-clair); }

/* ---------- IDENTITÉ : manifeste (Vision & Valeurs) ---------- */
/* Grande citation d'accroche */
.manifeste-cite { position: relative; color: var(--creme); font-style: italic;
  font-size: clamp(1.4rem, 4vw, 2.2rem); line-height: 1.3; max-width: 22ch;
  margin: .4rem 0 1.4rem; padding-left: 1.2rem; border-left: 3px solid var(--or); }
.manifeste-cite::before { content: "\201C"; position: absolute; top: -.4em; left: -.1em;
  font-family: var(--titre); color: rgba(201,162,75,.22); font-size: 3em; line-height: 1; z-index: -1; }
/* Paragraphe développé du manifeste */
.manifeste-texte { color: var(--gris); font-size: clamp(1.02rem, 2.2vw, 1.18rem);
  line-height: 1.65; max-width: 64ch; }

/* Valeurs en accordéon (clic pour dérouler, élément <details> natif) */
.valeurs-acc { margin-top: 1.4rem; border-top: 1px solid var(--ligne); }
.valeur-acc { border-bottom: 1px solid var(--ligne); }
.valeur-acc summary { list-style: none; cursor: pointer; display: flex; align-items: center;
  gap: 1rem; padding: 1.05rem .2rem; transition: var(--transition); }
.valeur-acc summary::-webkit-details-marker { display: none; }
.valeur-acc summary:hover .va-nom, .valeur-acc summary:focus-visible .va-nom { color: var(--or-clair); }
.va-puce { width: 11px; height: 11px; flex: none; transform: rotate(45deg);
  border: 2px solid rgba(201,162,75,.55); transition: background .25s ease, border-color .25s ease; }
.valeur-acc summary:hover .va-puce, .valeur-acc summary:focus-visible .va-puce { border-color: var(--or); }
.valeur-acc[open] .va-puce { background: var(--or); border-color: var(--or); }
.va-nom { font-family: var(--titre); font-size: clamp(1.1rem, 2.6vw, 1.4rem); color: var(--creme); letter-spacing: .03em; }
.va-punch { color: var(--gris); font-size: .92rem; margin-left: auto; text-align: right; }
.va-ico { position: relative; width: 16px; height: 16px; flex: none; }
.va-ico::before, .va-ico::after { content: ""; position: absolute; background: var(--or); }
.va-ico::before { left: 0; right: 0; top: 50%; height: 2px; transform: translateY(-50%); }
.va-ico::after { top: 0; bottom: 0; left: 50%; width: 2px; transform: translateX(-50%); transition: transform .3s ease; }
.valeur-acc[open] .va-ico::after { transform: translateX(-50%) scaleY(0); }
.va-corps { padding: 0 .2rem 1.2rem 1.9rem; }
.va-corps p { color: var(--gris); font-size: .98rem; line-height: 1.6; max-width: 60ch; }

/* ---------- PRESTATIONS : tags, feature photo, tarifs, blocs ---------- */
/* Liste des prestations : grille propre et alignée, avec puce or */
/* Types d'événements en « étiquettes affiche » : chips à coins nets,
   fine bordure or, disposés en flux qui s'enroule. Liste purement
   informative (aucun survol, rien à cliquer). */
.presta-tags { list-style: none; display: flex; flex-wrap: wrap;
  gap: .7rem; margin: 1.6rem 0; padding: 0; }
.presta-tag { display: inline-flex; align-items: center; color: var(--creme);
  font-size: .82rem; letter-spacing: .05em; text-transform: uppercase;
  padding: .5rem .85rem; border: 1px solid rgba(201, 162, 75, .32);
  background: rgba(201, 162, 75, .07); }

/* Bloc photo + texte (2 colonnes, photo en entier et collante) */
.presta-feature { display: grid; grid-template-columns: 1fr clamp(240px, 34%, 360px); gap: 2.8rem; align-items: start; }
.presta-feature-photo { position: sticky; top: 90px; margin: 0; order: 2; }
.presta-feature-photo img { position: relative; width: 100%; height: auto; display: block; border: 1px solid var(--ligne);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 22px), calc(100% - 22px) 100%, 0 100%); }
.presta-feature-photo::before { content: ""; position: absolute; top: 16px; left: 16px; right: -16px; bottom: -16px; border: 2px solid var(--or); z-index: -1; }
.mv-gap { margin-top: 2.4rem; }
/* Espace entre paragraphes consécutifs (meilleure lisibilité) */
.manifeste-texte + .manifeste-texte { margin-top: 1.1rem; }

/* ---------- RÉSERVATION : formulaire + photo (téléphone) ---------- */
.resa-grille { display: grid; grid-template-columns: clamp(220px, 32%, 320px) 1fr; gap: 2.6rem; align-items: stretch; }
.resa-grille .formulaire { max-width: none; }
.resa-photo { position: relative; margin: 0; order: -1; }
.resa-photo img { position: relative; width: 100%; height: 100%; object-fit: cover; object-position: 45% 25%;
  border: 1px solid var(--ligne); clip-path: polygon(0 0, 100% 0, 100% calc(100% - 20px), calc(100% - 20px) 100%, 0 100%); }
.resa-photo::before { content: ""; position: absolute; top: 14px; left: 14px; right: -14px; bottom: -14px; border: 2px solid var(--or); z-index: -1; }
.resa-photo-tag { position: absolute; left: -6px; bottom: 20px; font-family: var(--titre); color: var(--noir);
  background: var(--or); letter-spacing: .05em; font-size: .9rem; padding: .35rem .85rem; transform: skewX(-9deg); }
.presta-note { color: var(--gris); font-size: .95rem; font-style: italic; max-width: 62ch;
  border-left: 3px solid var(--or); padding-left: 1rem; margin-top: 1.3rem; }

/* Tarifs (liste label / valeur) */
.tarifs { margin: 1.3rem 0 1.6rem; max-width: 620px; border-top: 1px solid var(--ligne); }
.tarif { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem;
  border-bottom: 1px solid var(--ligne); padding: .85rem 0; }
.tarif dt { color: var(--creme); }
.tarif dd { font-family: var(--mono); color: var(--or); letter-spacing: 0; white-space: nowrap; }

/* Bloc « inclus, sans frais » */
.presta-bloc { background: var(--noir-doux); border: 1px solid var(--ligne); border-left: 3px solid var(--or);
  padding: 1.3rem 1.5rem; margin: 1.3rem 0; clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%); }
.presta-bloc h3 { color: var(--creme); font-size: 1.2rem; margin-bottom: .4rem; }
.presta-bloc p { color: var(--gris); font-size: .96rem; line-height: 1.55; max-width: 62ch; }

/* Lien de retour discret */
.retour { display: inline-block; font-family: var(--titre); color: var(--or); letter-spacing: .05em; margin-bottom: 1rem; }
.retour:hover { color: var(--or-clair); }

/* Galerie de flyers (lieux de Lausanne) */
.flyers { display: flex; gap: .9rem; overflow-x: auto; padding-bottom: .6rem; }
.flyer { flex: 0 0 clamp(150px, 16%, 200px); background: var(--noir-doux); border: 1px solid var(--ligne); overflow: hidden; transition: var(--transition); }
.flyer a { display: block; aspect-ratio: 3 / 4; background: #0e0e12; }
.flyer img { width: 100%; height: 100%; object-fit: contain; }   /* flyer entier visible */
.flyer figcaption { font-family: var(--titre); color: var(--or); text-align: center; padding: .55rem .4rem; font-size: .92rem; letter-spacing: .06em; }

/* Anciennes mixtapes : pochettes carrées d'archive (page Bio), même esprit que les flyers */
.disques { display: flex; gap: .9rem; overflow-x: auto; padding-bottom: .6rem; }
.disque { flex: 0 0 clamp(150px, 18%, 210px); background: var(--noir-doux); border: 1px solid var(--ligne); overflow: hidden; transition: var(--transition); }
.disque a { display: block; aspect-ratio: 1 / 1; background: #0e0e12; cursor: zoom-in; }
.disque img { width: 100%; height: 100%; object-fit: cover; }
.disque figcaption { font-family: var(--titre); color: var(--or); text-align: center; padding: .55rem .4rem; font-size: .82rem; letter-spacing: .03em; line-height: 1.3; }
/* Flyers & anciennes mixtapes : MÊME traitement vivant que la planche
   contact (page Photos) : duotone noir/or -> couleur réelle, zoom léger,
   légende en surimpression qui glisse, badge « + », bordure or. */
.flyer, .disque { position: relative; }
.flyer img, .disque img {
  filter: grayscale(1) sepia(.42) hue-rotate(-10deg) saturate(1.5) brightness(.94) contrast(1.04);
  transition: filter .45s ease, transform .4s ease;
}
.flyer:hover img, .flyer:focus-within img,
.disque:hover img, .disque:focus-within img { filter: none; transform: scale(1.06); }
.flyer:hover, .flyer:focus-within,
.disque:hover, .disque:focus-within { border-color: var(--or); }
/* Légende en surimpression (glisse au survol / focus, comme la planche contact) */
.flyer figcaption, .disque figcaption {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 1;
  background: linear-gradient(transparent, rgba(10,10,11,.88));
  padding: 1.4rem .5rem .5rem; transform: translateY(101%); transition: transform .35s ease;
}
.flyer:hover figcaption, .flyer:focus-within figcaption,
.disque:hover figcaption, .disque:focus-within figcaption { transform: translateY(0); }
/* Badge « + » : ces vignettes s'ouvrent en grand (lightbox) */
.flyer::after, .disque::after {
  content: "+"; position: absolute; top: .5rem; right: .55rem; z-index: 2;
  width: 26px; height: 26px; display: grid; place-items: center; border-radius: 2px;
  font-family: var(--titre); color: var(--noir); background: var(--or);
  opacity: 0; transform: scale(.7); transition: var(--transition);
}
.flyer:hover::after, .disque:hover::after { opacity: 1; transform: scale(1); }
/* Pas de barre de défilement visible (demande auteur) : le dernier élément
   coupé au bord suffit à suggérer la suite ; défilement tactile, Maj+molette
   et clavier (focus) inchangés. */
.flyers, .disques { scrollbar-width: none; }
.flyers::-webkit-scrollbar, .disques::-webkit-scrollbar { display: none; }
.disque:hover { border-color: var(--or); transform: translateY(-3px); }

/* Lightbox : agrandissement d'une image (flyers) */
.lightbox { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center; padding: 1.5rem; }
.lightbox[hidden] { display: none; }
.lightbox-fond { position: absolute; inset: 0; background: rgba(5,5,6,.9); backdrop-filter: blur(4px); cursor: zoom-out; }
.lightbox-img { position: relative; z-index: 1; max-width: 92vw; max-height: 86vh; width: auto; height: auto; border: 1px solid var(--or); }
.lightbox-fermer { position: absolute; z-index: 2; top: .6rem; right: .9rem; width: 46px; height: 46px;
  background: none; border: none; color: var(--or); font-size: 2.4rem; line-height: 1; cursor: pointer; }
.lightbox-fermer:hover { color: var(--or-clair); }
/* Visionneuse v2 : scène (image + pied « planche contact ») et navigation */
.lightbox-fond { background: rgba(4,4,5,.94); }
.lightbox-scene { position: relative; z-index: 1; margin: 0; display: grid; gap: .55rem; justify-items: center; }
.lightbox-scene .lightbox-img { max-height: 80vh; }
.lightbox-pied { display: flex; gap: 1.2rem; align-items: baseline; justify-content: space-between;
  width: 100%; padding: 0 .1rem; }
.lightbox-leg { font-family: var(--titre); color: var(--creme); letter-spacing: .04em; font-size: .95rem; }
.lightbox-compteur { font-family: var(--mono); color: var(--or); font-size: .72rem;
  letter-spacing: .06em; font-variant-numeric: tabular-nums; white-space: nowrap; }
.lightbox-nav { position: absolute; z-index: 2; top: 50%; transform: translateY(-50%);
  width: 46px; height: 64px; display: grid; place-items: center; cursor: pointer;
  background: rgba(10,10,11,.5); border: 1px solid var(--ligne); color: var(--or);
  font-family: var(--titre); font-size: 1.7rem; line-height: 1; transition: var(--transition); }
.lightbox-nav:hover { color: var(--or-clair); border-color: var(--or); }
.lightbox-nav[hidden] { display: none; }
.lightbox-prec { left: .9rem; }
.lightbox-suiv { right: .9rem; }
@media (max-width: 700px) {
  .lightbox-nav { width: 40px; height: 54px; }
  .lightbox-prec { left: .35rem; }
  .lightbox-suiv { right: .35rem; }
}
.flyer:hover { border-color: var(--or); transform: translateY(-3px); }

/* Bandeau d'intro avec photo (Identité / Bio) */
.intro { position: relative; overflow: hidden; padding: 3rem 0 1.5rem; }
.intro-grille { display: grid; grid-template-columns: 1.15fr .85fr; gap: 2.6rem; align-items: center; }
.intro-texte .kicker { display: block; font-family: var(--titre); color: var(--or); letter-spacing: .22em; font-size: clamp(.78rem,1.5vw,1rem); margin-bottom: .6rem; }
.intro-texte h1 { font-size: clamp(2.8rem, 9vw, 6rem); color: var(--creme); transform: skewX(-4deg); }
.intro-texte h1 span { color: var(--or); }
.intro-texte .chapo { color: var(--gris); max-width: 54ch; margin-top: 1.1rem; font-size: clamp(1rem,2.2vw,1.15rem); }
.intro-photo { position: relative; justify-self: center; max-width: 350px; width: 100%; }
.intro-photo img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; border: 1px solid var(--ligne);
  clip-path: polygon(0 0,100% 0,100% calc(100% - 26px),calc(100% - 26px) 100%,0 100%); }
.intro-photo::before { content: ""; position: absolute; top: 16px; left: 16px; right: -16px; bottom: -16px; border: 2px solid var(--or); z-index: -1; }

/* Panneaux angulaires (Vision / Mission) */
.panneaux { display: grid; grid-template-columns: 1fr 1fr; gap: 1.2rem; }
.panneau {
  position: relative; overflow: hidden;
  background: linear-gradient(135deg, var(--noir-doux), #0e0e12 70%);
  border: 1px solid var(--ligne); border-top: 3px solid var(--or); padding: 1.9rem 1.6rem;
  clip-path: polygon(0 0,100% 0,100% calc(100% - 20px),calc(100% - 20px) 100%,0 100%);
  transition: var(--transition);
}
.panneau:hover { transform: translateY(-4px); border-color: var(--or); }
.panneau .pan-num { position: absolute; top: -.7rem; right: .4rem; font-family: var(--titre); font-size: 5rem; line-height: 1; color: transparent; -webkit-text-stroke: 1px rgba(201,162,75,.15); pointer-events: none; }
.panneau h2 { color: var(--or); font-size: 1.7rem; margin-bottom: .6rem; position: relative; }
.panneau p { color: var(--creme); position: relative; }

/* Valeurs : version plus graphique */
.valeur-num { font-size: 3rem; }
.valeur::after { content: ""; position: absolute; right: 0; bottom: 0; border-width: 0 0 18px 18px; border-style: solid; border-color: transparent transparent rgba(201,162,75,.5) transparent; transition: var(--transition); }
.valeur:hover::after { border-color: transparent transparent var(--or) transparent; }

/* Timeline (Biographie) */
/* Parcours : timeline + photo à droite (collante) */
.parcours-grille { display: grid; grid-template-columns: 1fr clamp(220px, 32%, 340px); gap: 2.6rem; align-items: start; }
.parcours-photo { position: sticky; top: 90px; margin: 0; }
.parcours-photo img { position: relative; width: 100%; aspect-ratio: 4 / 5; object-fit: cover; object-position: 72% center;
  border: 1px solid var(--ligne); clip-path: polygon(0 0,100% 0,100% calc(100% - 20px),calc(100% - 20px) 100%,0 100%); }
.parcours-photo::before { content: ""; position: absolute; top: 14px; left: 14px; right: -14px; bottom: -14px;
  border: 2px solid var(--or); z-index: -1; }
.timeline { position: relative; max-width: 800px; margin-top: 1rem; padding-left: 2.4rem; }
.timeline::before { content: ""; position: absolute; left: 6px; top: .5rem; bottom: .5rem; width: 2px; background: linear-gradient(var(--or), rgba(201,162,75,.08)); }
/* Le fil de la timeline se TRACE au défilement et chaque losange s'allume
   à son passage (scroll-driven, même famille que le sillon de l'en-tête ;
   navigateurs sans support : rendu statique habituel). */
@supports (animation-timeline: view()) {
  .timeline::before { transform-origin: top; animation: tl-tracer linear both;
    animation-timeline: view(); animation-range: entry 10% cover 75%; }
  .tl-item::before { opacity: .3; animation: tl-allumer linear both;
    animation-timeline: view(); animation-range: entry 0% entry 80%; }
}
@keyframes tl-tracer { from { transform: scaleY(0); } to { transform: scaleY(1); } }
@keyframes tl-allumer { to { opacity: 1; } }
.tl-item { position: relative; padding: 0 0 2.4rem 0; }
.tl-item:last-child { padding-bottom: 0; }
.tl-item::before { content: ""; position: absolute; left: -2.4rem; top: .35rem; width: 14px; height: 14px; background: var(--or); border: 2px solid var(--noir); transform: rotate(45deg); }
.tl-annee { display: inline-block; font-family: var(--mono); font-size: .72rem; letter-spacing: .05em; text-transform: uppercase; color: var(--noir); background: var(--or); padding: .16rem .65rem; transform: skewX(-9deg); margin-bottom: .55rem; }
.tl-annee span { display: inline-block; transform: skewX(9deg); }
.tl-item h3 { color: var(--creme); font-size: clamp(1.2rem, 3vw, 1.5rem); margin-bottom: .45rem; }
.tl-item p { color: var(--gris); max-width: 62ch; }

/* Flyers en mur d'affiches (légère inclinaison) */
.flyer { transform: rotate(-1.4deg); }
.flyer:nth-child(even) { transform: rotate(1.4deg); }
.flyer:hover { transform: rotate(0deg) translateY(-5px) scale(1.03); z-index: 2; }

/* Apparition au défilement (activée uniquement si JS présent) */
.js .reveal { opacity: 0; transform: translateY(26px); transition: opacity .6s ease, transform .6s ease; }
.js .reveal.vu { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .js .reveal { opacity: 1; transform: none; } }

/* ---------- 12ter. PAGE MÉDIA & SOUS-PAGES ----------------- */
/* Hub Média : 3 grandes entrées */
.media-hub { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.4rem; }
.media-carte {
  position: relative; overflow: hidden; display: flex; flex-direction: column; justify-content: flex-end;
  min-height: 230px; padding: 1.6rem; text-decoration: none;
  background: linear-gradient(160deg, var(--noir-doux), #0e0e12 75%);
  border: 1px solid var(--ligne); border-bottom: 3px solid var(--or);
  clip-path: polygon(0 0,100% 0,100% calc(100% - 20px),calc(100% - 20px) 100%,0 100%);
  transition: var(--transition);
}
.media-carte:hover { transform: translateY(-4px); border-color: var(--or); }
.media-carte .mc-ico { color: var(--or); margin-bottom: auto; }
.media-carte .mc-ico svg { width: 40px; height: 40px; }
.media-carte h2 { color: var(--creme); font-size: 1.8rem; }
.media-carte p { color: var(--gris); font-size: .92rem; margin: .3rem 0 .8rem; }
.media-carte .mc-voir { font-family: var(--titre); color: var(--or); letter-spacing: .04em; }
.media-carte:hover .mc-voir { color: var(--or-clair); }

/* Barre de filtres : menus déroulants natifs HABILLÉS façon affiche
   (apparence custom, chevron or, liste déroulante sombre via color-scheme). */
.filtres { display: flex; flex-wrap: wrap; gap: .8rem; align-items: center; margin-bottom: 1.8rem; }
.filtres label { font-family: var(--titre); color: var(--gris); font-size: .85rem; letter-spacing: .05em; }
.filtres select {
  appearance: none; -webkit-appearance: none; color-scheme: dark;
  font-family: var(--titre); font-size: .82rem; letter-spacing: .05em; text-transform: uppercase;
  color: var(--creme); background-color: rgba(201,162,75,.07);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23c9a24b' stroke-width='1.8'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right .7rem center;
  border: 1px solid rgba(201,162,75,.32); border-radius: var(--rayon);
  padding: .5rem 2.1rem .5rem .8rem; cursor: pointer; transition: var(--transition);
}
.filtres select:hover, .filtres select:focus-visible { border-color: var(--or); }
/* Liste déroulante : fond sombre + texte crème FORCÉS (sans ça, certains
   navigateurs ouvrent une liste blanche où l'or est illisible). */
.filtres select option { background: var(--noir-doux); color: var(--creme); }
.vide { color: var(--gris); padding: 1.5rem 0; }
/* État vide des filtres Mixtapes/Vidéos : un bac sans disque (pochette
   fantôme en pointillés, vinyle esseulé) — même langage disquaire que la 404.
   Dessin en SVG inline (net à toutes les tailles), texte inchangé dessous. */
#liste-mixtapes .vide, #liste-videos .vide {
  display: grid; justify-items: center; gap: 1.2rem;
  padding: 2.6rem 0 1.2rem; text-align: center;
}
#liste-mixtapes .vide::before, #liste-videos .vide::before {
  content: ""; width: 150px; height: 150px; opacity: .85;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 150'%3E%3Crect x='1' y='1' width='148' height='148' fill='none' stroke='%23c9a24b' stroke-opacity='.45' stroke-dasharray='7 6'/%3E%3Ccircle cx='75' cy='75' r='52' fill='%23131315'/%3E%3Ccircle cx='75' cy='75' r='52' fill='none' stroke='%23c9a24b' stroke-opacity='.35'/%3E%3Ccircle cx='75' cy='75' r='40' fill='none' stroke='%232a2b2e' stroke-width='2'/%3E%3Ccircle cx='75' cy='75' r='30' fill='none' stroke='%232a2b2e' stroke-width='2'/%3E%3Ccircle cx='75' cy='75' r='20' fill='none' stroke='%232a2b2e' stroke-width='2'/%3E%3Ccircle cx='75' cy='75' r='9' fill='%23c9a24b' fill-opacity='.8'/%3E%3Ccircle cx='75' cy='75' r='2.5' fill='%230a0a0b'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* ---------- BOOKING : agenda, formulaire, soutien ---------- */
/* Agenda : cartes de dates angulaires avec numéro fantôme et badge statut */
.agenda { display: grid; gap: 1.1rem; }
.evenement {
  position: relative; display: grid; grid-template-columns: auto 1fr auto; align-items: center;
  gap: 1.3rem; background: var(--noir-doux); border: 1px solid var(--ligne);
  padding: 1.2rem 1.4rem; overflow: hidden; transition: var(--transition);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%);
}
.evenement:hover { border-color: var(--or); transform: translateY(-3px); }
.evt-num { position: absolute; top: -.6rem; right: .6rem; font-family: var(--titre); font-size: 3rem;
  line-height: 1; color: transparent; -webkit-text-stroke: 1px rgba(201,162,75,.22); pointer-events: none; }
/* Date façon « tour dates » d'affiche : jour énorme, mois.année en mono */
.evt-date { display: flex; flex-direction: column; align-items: center; gap: .1rem;
  border-right: 1px solid var(--ligne); padding-right: 1.3rem; white-space: nowrap; }
.evt-jour { font-family: var(--titre); color: var(--or); font-size: 2.3rem; line-height: .9; }
.evt-mois { font-family: var(--mono); color: var(--gris); font-size: .72rem; letter-spacing: .04em; }
.evt-corps h3 { color: var(--creme); font-size: 1.2rem; }
.evt-lieu { color: var(--gris); font-size: .92rem; margin: .15rem 0 .55rem; }
/* Statut en TAMPON d'affiche : cadre encré incliné, pas un badge plein */
.statut { display: inline-block; font-family: var(--titre); font-size: .78rem; letter-spacing: .12em;
  text-transform: uppercase; padding: .2rem .7rem; border: 2px solid currentColor;
  border-radius: 2px; transform: rotate(-3deg); opacity: .92; }
.statut-libre { color: var(--or); }
.statut-reserve { color: #c98181; }
.evt-lien { font-size: .82rem; padding: .45rem 1rem; }

/* Références : dates passées recyclées en preuve sociale (js/booking.js) */
.references { list-style: none; display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: .9rem; }
.references li { background: var(--noir-doux); border: 1px solid var(--ligne); border-left: 3px solid var(--or); padding: .9rem 1.1rem; }
.references strong { display: block; font-family: var(--titre); font-weight: 400; color: var(--creme); letter-spacing: .02em; }
.references .ref-meta { display: block; font-family: var(--mono); font-size: .72rem; color: var(--gris); margin-top: .35rem; }

/* ---------- MENTIONS LÉGALES ----------
   Réutilise le manifeste de Vision & Valeurs (.mv-bloc : grand numéro en
   contour, alterné gauche/droite). Ligne d'accroche + texte + credo final. */
.legal-lead { font-family: var(--titre); color: var(--or);
  font-size: clamp(1.25rem, 3.2vw, 1.8rem); line-height: 1.2; letter-spacing: .01em;
  transform: skewX(-4deg); margin: .1rem 0 .9rem; max-width: 24ch; }
/* Date de mise à jour : tampon mono discret, façon liner notes */
.legal-maj { font-family: var(--mono); font-size: .74rem; letter-spacing: .04em;
  color: var(--gris); margin-top: 2rem; padding-left: .2rem; }

/* Formulaire de contact (mailto) */
.formulaire { display: grid; grid-template-columns: 1fr 1fr; gap: 1.1rem; max-width: 760px; }
.champ { display: flex; flex-direction: column; gap: .35rem; }
.champ.large { grid-column: 1 / -1; }
/* Fiche de booking : libellés en mono (fiche technique), focus or marqué */
.champ label { font-family: var(--mono); color: var(--gris); font-size: .7rem; letter-spacing: .05em; text-transform: uppercase; }
.champ input, .champ textarea {
  font: inherit; color: var(--creme); background: var(--noir); border: 1px solid var(--ligne);
  border-radius: var(--rayon); padding: .6rem .7rem; transition: var(--transition);
}
.champ input:focus, .champ textarea:focus { outline: none; border-color: var(--or);
  box-shadow: 0 0 0 3px rgba(201,162,75,.14); }
.champ textarea { resize: vertical; min-height: 120px; }
.form-bas { grid-column: 1 / -1; display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
.form-note { color: var(--gris); font-size: .85rem; }

/* Zone de soutien (QR de don, ex. PayPal) */
.soutien { display: grid; grid-template-columns: auto 1fr; gap: 1.8rem; align-items: center;
  background: var(--noir-doux); border: 1px solid var(--ligne); padding: 1.8rem;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%); }
.qr-don { width: 150px; height: 150px; object-fit: contain; background: #fff;
  border: 1px solid var(--ligne); border-radius: var(--rayon); padding: 8px; display: block; }
.soutien h3 { color: var(--creme); font-size: 1.4rem; }
.soutien p { color: var(--gris); font-size: .95rem; margin-top: .4rem; max-width: 52ch; }

/* ---------- GOSPEL : mouvements = dos de pochette (cover verso) ---------- */
.mouvement { padding: 1.6rem 0; }
/* Panneau « dos de pochette » moderne */
.cover-verso { position: relative; background: linear-gradient(165deg, var(--noir-doux), #0d0d11);
  border: 1px solid var(--ligne); padding: 1.8rem clamp(1.2rem, 3vw, 2.2rem);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 22px), calc(100% - 22px) 100%, 0 100%); }
.cv-haut { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem;
  border-bottom: 1px solid var(--ligne); padding-bottom: .7rem; margin-bottom: 1.1rem; }
.cv-face { font-family: var(--titre); color: var(--or); letter-spacing: .18em; font-size: 1rem; text-transform: uppercase; }
.cv-album { font-family: var(--mono); color: var(--gris); letter-spacing: .08em; font-size: .68rem;
  text-transform: uppercase; text-align: right; }
.cv-bas { display: flex; justify-content: space-between; align-items: center; gap: 1rem;
  border-top: 1px solid var(--ligne); margin-top: 1.2rem; padding-top: .9rem; }
/* Ligne du code-barres : source des versets à gauche (petits caractères,
   sans majuscules forcées : c'est une mention légale, pas un titre) */
.cv-cat { font-family: var(--mono); color: var(--gris); letter-spacing: .02em; font-size: .66rem; flex: 1; opacity: .85; }
.cv-barcode { width: 120px; height: 26px; opacity: .75;
  background: repeating-linear-gradient(90deg, var(--creme) 0 1px, transparent 1px 3px,
    var(--creme) 3px 5px, transparent 5px 6px, var(--creme) 6px 9px, transparent 9px 12px); }
.mvt-tete { margin-bottom: .9rem; }
.mvt-sous { display: block; font-family: var(--titre); color: var(--or); letter-spacing: .14em;
  font-size: .8rem; text-transform: uppercase; }
.mvt-tete h2 { color: var(--creme); font-size: clamp(1.7rem, 5vw, 2.6rem); transform: skewX(-4deg); }
.mvt-intro { color: var(--gris); max-width: 64ch; font-size: clamp(1rem, 2.1vw, 1.12rem); margin-bottom: 1.4rem; }

/* Tracklist : chaque question = une piste qui se déroule */
.pistes { border-top: 1px solid var(--ligne); }
.piste { border-bottom: 1px solid var(--ligne); }
.piste-tete { display: flex; align-items: center; gap: 1rem; width: 100%; text-align: left;
  background: none; border: 0; padding: 1rem .2rem; cursor: pointer; font: inherit; color: var(--creme);
  transition: var(--transition); }
.piste-tete:hover, .piste-tete:focus-visible { color: var(--or-clair); outline: none; }
.piste-num { font-family: var(--titre); font-size: 1.5rem; line-height: 1; color: transparent;
  -webkit-text-stroke: 1px rgba(201,162,75,.6); min-width: 2.2ch; transition: color var(--transition); }
.piste.ouverte .piste-num { color: var(--or); -webkit-text-stroke: 0; }
/* « Piste en cours » : la piste sous la tête de lecture (milieu de l'écran)
   voit son numéro se remplir d'or au fil du défilement (js/gospel.js). */
.piste.en-lecture .piste-num { color: var(--or); -webkit-text-stroke: 0; }
.piste-q { flex: 1; font-size: clamp(1rem, 2.3vw, 1.18rem); font-weight: 600; line-height: 1.3; }
/* Indicateur + qui devient − à l'ouverture */
.piste-ico { position: relative; width: 16px; height: 16px; flex: none; }
.piste-ico::before, .piste-ico::after { content: ""; position: absolute; background: var(--or); }
.piste-ico::before { left: 0; right: 0; top: 50%; height: 2px; transform: translateY(-50%); }
.piste-ico::after { top: 0; bottom: 0; left: 50%; width: 2px; transform: translateX(-50%); transition: transform .3s ease; }
.piste.ouverte .piste-ico::after { transform: translateX(-50%) scaleY(0); }
/* Corps déroulant (animation de hauteur via grid) */
.piste-corps-enrobe { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .35s ease; }
.piste.ouverte .piste-corps-enrobe { grid-template-rows: 1fr; }
.piste-corps { overflow: hidden; }
.piste-verset { color: var(--creme); font-style: italic; font-size: clamp(1.05rem, 2.4vw, 1.25rem);
  line-height: 1.5; border-left: 3px solid var(--or); padding: .2rem 0 .2rem 1rem; margin: 0 0 .8rem 1rem; }
.piste-ref { display: block; font-style: normal; font-family: var(--mono); color: var(--or);
  letter-spacing: .02em; font-size: .78rem; margin-top: .5rem; }
.piste-reflexion { color: var(--gris); font-size: .96rem; line-height: 1.55; max-width: 62ch;
  margin: 0 0 1.1rem 1rem; }
@media (prefers-reduced-motion: reduce) { .piste-corps-enrobe { transition: none; } }
.gospel-invite { color: var(--gris); font-style: italic; max-width: 56ch; margin-top: 1.1rem; }

/* Grille de mixtapes : la CARTE ENTIÈRE est cliquable (fenêtre projet).
   L'affordance est le « + » doré (comme la galerie photos), pas un bouton. */
.mixtapes { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 1.4rem; }
.mixtape { position: relative; display: flex; flex-direction: column; background: var(--noir-doux);
  border: 1px solid var(--ligne); border-radius: var(--rayon); overflow: hidden; transition: var(--transition);
  cursor: pointer; }
.mixtape:hover { border-color: var(--or); transform: translateY(-4px); }
.mixtape::after { content: "+"; position: absolute; top: .55rem; right: .55rem; z-index: 2;
  width: 26px; height: 26px; display: grid; place-items: center; border-radius: 2px;
  font-family: var(--titre); color: var(--noir); background: var(--or);
  opacity: 0; transform: scale(.7); transition: var(--transition); pointer-events: none; }
.mixtape:hover::after, .mixtape:focus-within::after { opacity: 1; transform: scale(1); }
.mix-pochette { position: relative; display: block; width: 100%; aspect-ratio: 1/1; overflow: hidden; perspective: 900px; border: 0; padding: 0; background: none; cursor: pointer; font: inherit; }
.mix-pochette > img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.mixtape:hover .mix-pochette > img { transform: scale(1.05); }
/* Retournement recto / verso */
.mix-flip { position: absolute; inset: 0; transform-style: preserve-3d; transition: transform .6s ease; }
.mixtape:hover .mix-flip.peut-flip { transform: rotateY(180deg); }
.mix-face { position: absolute; inset: 0; overflow: hidden; -webkit-backface-visibility: hidden; backface-visibility: hidden; }
.mix-face img { width: 100%; height: 100%; object-fit: cover; }
.mix-verso { transform: rotateY(180deg); }
@media (prefers-reduced-motion: reduce) { .mix-flip { transition: none; } }

/* ---------- ACCUEIL : actu Christian Hip-Hop (externe, agrégée, 2 colonnes) ---------- */
.actus-ext-titre { font-family: var(--titre); letter-spacing: .04em; text-transform: uppercase; color: var(--or); font-size: 1rem; margin: 2.4rem 0 1.1rem; }
.actus-ext-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.8rem; }
.actus-ext-src-titre { font-family: var(--titre); color: var(--creme); font-size: .92rem; letter-spacing: .04em;
  margin: 0 0 .8rem; padding-bottom: .45rem; border-bottom: 1px solid var(--or); }
.actus-ext-liste { display: grid; gap: .7rem; }
.actu-ext { display: flex; flex-direction: column; gap: .55rem; padding: .9rem 1rem; border: 1px solid var(--ligne);
  text-decoration: none; color: inherit; transition: border-color var(--transition); }
.actu-ext:hover { border-color: var(--or); }
.actu-ext-t { color: var(--creme); font-size: .92rem; line-height: 1.3; }
.actu-ext:hover .actu-ext-t { color: var(--or-clair); }
.actu-ext-bas { display: flex; justify-content: space-between; align-items: center; gap: .6rem; }
.actu-ext-date { font-family: var(--mono); color: var(--gris); font-size: .68rem; }
.actu-ext-lire { font-family: var(--titre); color: var(--or); font-size: .78rem; letter-spacing: .04em; white-space: nowrap; }

/* ---------- ACCUEIL : section « À la une » ---------- */
.une-grille { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.8rem; align-items: start; }
.une-sous { font-family: var(--titre); letter-spacing: .04em; text-transform: uppercase; color: var(--or); font-size: 1rem; margin: 0 0 .9rem; }
/* Pochettes (projets) */
.une-covers { display: grid; grid-template-columns: 1fr 1fr; gap: .8rem; }
.une-cover { display: block; width: 100%; text-align: left; background: none; border: 0; padding: 0; font: inherit; cursor: pointer; color: inherit; text-decoration: none; }
.une-cover-img { position: relative; display: block; aspect-ratio: 1 / 1; overflow: hidden; border: 1px solid var(--ligne); }
.une-cover-img > img { width: 100%; height: 100%; object-fit: cover; }
.une-cover:hover .mix-flip.peut-flip { transform: rotateY(180deg); }
.une-cover-t { display: block; font-family: var(--titre); color: var(--creme); font-size: .9rem; margin-top: .45rem; }
.une-cover-s { display: block; color: var(--gris); font-size: .75rem; }
.une-cover:hover .une-cover-t { color: var(--or-clair); }
/* Vidéos (clips) */
.une-videos { display: grid; gap: .9rem; }
.une-clip { display: block; text-decoration: none; color: inherit; }
.une-clip-img { position: relative; display: block; aspect-ratio: 16 / 9; overflow: hidden; border: 1px solid var(--ligne); }
.une-clip-img.video-facade { cursor: pointer; }
.une-clip-img img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.une-clip-img iframe { width: 100%; height: 100%; border: 0; display: block; }
.une-clip:hover .une-clip-img img { transform: scale(1.05); }
.une-play { position: absolute; inset: 0; display: grid; place-items: center; font-size: 1.6rem; color: #fff; background: rgba(0,0,0,.22); }
.une-clip-t { display: block; font-size: .85rem; color: var(--creme); margin-top: .35rem; }
.une-clip:hover .une-clip-t { color: var(--or-clair); }
/* Dates */
.une-dates { display: grid; gap: .7rem; }
.une-date { display: flex; gap: .85rem; align-items: center; color: inherit;
  border: 1px solid var(--ligne); padding: .6rem .7rem; }
.une-date-j { flex: none; width: 54px; text-align: center; font-family: var(--titre); font-size: 1.7rem; line-height: 1; color: var(--or); }
.une-date-j small { display: block; font-size: .68rem; color: var(--gris); margin-top: .15rem; }
.une-date-i { display: flex; flex-direction: column; gap: .12rem; font-size: .85rem; }
.une-date-i strong { color: var(--creme); }
.une-date-i > span { color: var(--gris); font-size: .78rem; }
.une-date-s.est-libre { color: var(--or); }
.une-date-s.est-reserve { color: var(--gris); }
.une-plus { display: inline-block; margin-top: .85rem; color: var(--or); font-family: var(--titre);
  letter-spacing: .04em; font-size: .85rem; text-decoration: none; }
.une-plus:hover { color: var(--or-clair); }
/* Pochette Gospel permanente */
.une-gospel { display: flex; gap: 1.8rem; align-items: center; margin-top: 2.4rem; padding-top: 2rem;
  border-top: 1px solid var(--ligne); color: inherit; }
.une-gospel-cover { position: relative; flex: none; width: clamp(160px, 30%, 240px); aspect-ratio: 1 / 1;
  overflow: hidden; border: 1px solid var(--ligne); cursor: pointer; padding: 0; background: none; }
.une-gospel-cover:hover .mix-flip.peut-flip { transform: rotateY(180deg); }
.une-gospel-txt h3 { font-family: var(--titre); color: var(--creme); font-size: clamp(1.3rem, 3vw, 2rem); margin: .35rem 0 .55rem; }
.une-gospel-txt p { color: var(--gris); max-width: 46ch; margin-bottom: 1.1rem; }
.mix-genre { position: absolute; top: .6rem; left: .6rem; font-family: var(--titre); font-size: .72rem;
  letter-spacing: .06em; color: var(--noir); background: var(--or); padding: .15rem .55rem; transform: skewX(-9deg); }
.mix-info { display: flex; flex-direction: column; gap: .35rem; padding: 1rem 1rem 1.2rem; flex: 1; }
/* Ligne de métadonnées façon dos de pochette : ANNÉE à gauche en Anton OR,
   numéro de catalogue à droite en étiquette mono grise encadrée (SHAN-001 =
   plus ancien projet, posé par js/media.js) : deux polices, deux couleurs. */
.mix-meta { display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.mix-cat { font-family: var(--mono); font-size: .6rem; letter-spacing: .04em;
  color: var(--gris); background: rgba(255,255,255,.05);
  border: 1px solid var(--ligne); padding: .1rem .45rem; }
.mix-annee { font-family: var(--titre); color: var(--or); font-size: .82rem; letter-spacing: .08em; }
.mix-info h3 { color: var(--creme); font-size: 1.15rem; line-height: 1.1; }
.mix-info p { color: var(--gris); font-size: .88rem; flex: 1; }

/* Grille de vidéos : planche contact comme la galerie photos (miniatures
   YouTube unifiées en noir & or au repos, couleur au survol / à la lecture) */
.videos { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 1.4rem; }
.video figcaption { font-family: var(--titre); color: var(--creme); margin-top: .6rem; font-size: 1.05rem; }
.videos .facade-img { filter: grayscale(1) sepia(.42) hue-rotate(-10deg) saturate(1.5) brightness(.94) contrast(1.04);
  transition: filter .45s ease; }
.videos .video-facade:hover .facade-img, .videos .video-facade:focus-visible .facade-img { filter: none; }

/* Galerie de photos */
.photos { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: .8rem; }
.photo { position: relative; display: block; aspect-ratio: 1/1; overflow: hidden; border: 1px solid var(--ligne); }
.photo img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }
.photo:hover img { transform: scale(1.06); }
.photo-leg { position: absolute; left: 0; right: 0; bottom: 0; padding: .5rem .6rem;
  background: linear-gradient(transparent, rgba(10,10,11,.85)); color: var(--creme); font-size: .82rem;
  opacity: 0; transition: var(--transition); }
.photo:hover .photo-leg { opacity: 1; }

/* ---------- GALERIE PHOTOS : masonry urbain (ordre aléatoire, clic = lightbox) ---------- */
.grille-photos { columns: 240px; column-gap: 14px; }
.grille-photos .photo { aspect-ratio: auto; break-inside: avoid; margin: 0 0 14px; cursor: zoom-in;
  transition: border-color var(--transition); }
/* Planche contact : photos unifiées en noir & or au repos, couleur réelle
   au survol / focus (et toujours en couleur dans la lightbox). */
.grille-photos .photo img { width: 100%; height: auto; object-fit: cover;
  filter: grayscale(1) sepia(.42) hue-rotate(-10deg) saturate(1.5) brightness(.94) contrast(1.04);
  transition: filter .45s ease; }
.grille-photos .photo:hover img, .grille-photos .photo:focus-visible img,
.grille-photos .photo:focus-within img { filter: none; }
.grille-photos .photo:hover { border-color: var(--or); }
.grille-photos .photo-leg { padding: 1.5rem .75rem .6rem; font-family: var(--titre); letter-spacing: .04em;
  font-size: .9rem; color: var(--creme); opacity: 1; transform: translateY(101%); transition: transform .35s ease; }
.grille-photos .photo:hover .photo-leg { transform: translateY(0); }
.grille-photos .photo::after { content: "+"; position: absolute; top: .5rem; right: .55rem; z-index: 2;
  width: 26px; height: 26px; display: grid; place-items: center; border-radius: 2px;
  font-family: var(--titre); color: var(--noir); background: var(--or);
  opacity: 0; transform: scale(.7); transition: var(--transition); }
.grille-photos .photo:hover::after { opacity: 1; transform: scale(1); }

/* Fenêtre projet (modale) : recto + verso en grand */
body.modal-ouvert { overflow: hidden; }
/* Verrou RENFORCÉ : sur mobile, html porte lui-même le défilement (son
   overflow-x est caché -> l'overflow de body ne se propage plus au viewport),
   donc masquer body ne suffisait pas : un défilement à DEUX doigts passait
   encore derrière le menu / les fenêtres. On verrouille html directement. */
html:has(body.modal-ouvert) { overflow: hidden; }
.modal { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center; padding: 1.5rem; }
.modal[hidden] { display: none; }
.modal-fond { position: absolute; inset: 0; background: rgba(5,5,6,.85); backdrop-filter: blur(4px); }
.modal-boite {
  position: relative; z-index: 1; width: 100%; max-width: 920px; max-height: 92vh; overflow-y: auto;
  background: var(--noir-doux); border: 1px solid var(--ligne); border-top: 3px solid var(--or); padding: 2rem;
  clip-path: polygon(0 0,100% 0,100% calc(100% - 22px),calc(100% - 22px) 100%,0 100%);
}
.modal-fermer { position: absolute; top: .5rem; right: .7rem; width: 42px; height: 42px; background: none; border: none; color: var(--or); font-size: 2rem; line-height: 1; cursor: pointer; }
.modal-fermer:hover { color: var(--or-clair); }
/* Gatefold : recto et verso côte à côte comme une pochette ouverte
   (empilés sur mobile via la règle responsive plus bas) */
.modal-pochettes { display: flex; flex-wrap: nowrap; gap: 1.2rem; justify-content: center; align-items: flex-start; }
.modal-pochettes img { flex: 0 1 420px; min-width: 0; width: 100%; max-width: 420px; height: auto; display: block; border: 1px solid var(--ligne); }
.modal-verso[hidden] { display: none; }
.modal-titre { color: var(--creme); font-size: clamp(1.4rem, 4vw, 2rem); margin: .2rem 0 .15rem; text-align: center; }
/* Ligne méta du projet (année · catalogue) façon dos de pochette,
   puis une ligne de description, puis les pochettes (avec de l'air
   avant le lecteur en dessous) */
.modal-meta { font-family: var(--mono); color: var(--or); font-size: .72rem;
  letter-spacing: .03em; text-align: center; margin: 0 0 .5rem; }
.modal-desc { color: var(--gris); font-size: .95rem; line-height: 1.5;
  text-align: center; max-width: 58ch; margin: 0 auto 1.3rem; }
.modal-pochettes { margin-bottom: 1.3rem; }
.modal-player { margin: 0 0 1.2rem; }
.modal-player[hidden] { display: none; }
.modal-player iframe { display: block; width: 100%; border: 1px solid var(--ligne); }
.modal-actions { display: flex; flex-wrap: wrap; gap: .8rem; justify-content: center; }

/* ---------- 13. RESPONSIVE / MOBILE ------------------------ */
@media (max-width: 820px) {
  .menu-burger { display: block; }
  /* Le tiroir de menu (position:fixed, poussé hors écran à droite) ne doit PAS
     créer de scroll horizontal : sinon la page devient plus large que l'écran
     et tout (modale, pochettes) se dimensionne trop grand. On coupe le
     débordement horizontal (sticky déjà désactivé sur mobile → sans risque). */
  html, body { overflow-x: hidden; max-width: 100%; }
  /* Cibles tactiles : boutons de langue plus grands + plus espacés (SEO/UX mobile) */
  .langues { gap: .45rem; }
  .langues button { padding: .5rem .7rem; font-size: .82rem; }
  /* Modale projet : pochettes EMPILÉES et grandes — recto en haut, verso en
     dessous (la fenêtre défile pour atteindre le player + le bouton acheter) */
  .modal-boite { padding: 1.6rem 1.1rem; }
  .modal-pochettes { flex-direction: column; align-items: center; gap: 1rem; }
  .modal-pochettes img { width: 100%; max-width: 340px; }
  /* spécificité .pied .contenu.pied-grille (0,3,0) pour battre la règle
     .pied .contenu auto-fit (0,2,0) du socle, sinon le pied reste en
     2 colonnes sur tablette/mobile (chevauchement). */
  .pied .contenu.pied-grille { grid-template-columns: 1fr; gap: 1.8rem; }
  .pied-marque p { max-width: none; white-space: nowrap; font-size: .8rem; }
  .pied-cta { justify-self: center; align-self: start; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; gap: .6rem; }
  .presse-actions { justify-content: center; }
  .duo { grid-template-columns: 1fr; gap: 1.6rem; }

  /* Biographie : photo au-dessus de la timeline sur mobile */
  .parcours-grille { grid-template-columns: 1fr; gap: 1.4rem; }
  .parcours-photo { position: relative; top: auto; max-width: 260px; margin: 0 auto 2.2rem; order: -1; }

  /* Prestations : photo au-dessus du texte sur mobile */
  .presta-feature { grid-template-columns: 1fr; gap: 1.6rem; }
  .presta-feature-photo { position: relative; top: auto; max-width: 300px; margin: 0 auto 2.2rem; order: 0; }

  /* Réservation : photo sous le formulaire sur mobile (ratio naturel) */
  .resa-grille { grid-template-columns: 1fr; gap: 1.6rem; }
  .resa-photo { max-width: 300px; margin: 1.4rem auto 0; order: 0; }
  .resa-photo img { height: auto; aspect-ratio: 4 / 5; }

  /* Accueil : actu CHH + « À la une » en colonnes empilées */
  .actus-ext-cols { grid-template-columns: 1fr; gap: 1.6rem; }
  .une-grille { grid-template-columns: 1fr; gap: 1.4rem; }
  .une-gospel { flex-direction: column; align-items: center; text-align: center; gap: 1.2rem; }
  .une-gospel-cover { width: min(240px, 70%); }
  .une-gospel-txt p { margin-left: auto; margin-right: auto; }

  /* Hubs : diptyque/triptyque empilés + logo plus petit sur mobile */
  .id-diptyque, .id-diptyque.trois { grid-template-columns: 1fr; }
  /* margin 0 : annule le débord premier/dernier du desktop (padding remis à 0) */
  .id-demi { min-height: 200px; padding-left: 0; padding-right: 0; margin-left: 0; margin-right: 0; }
  .id-demi + .id-demi { border-left: 0; border-top: 1px solid var(--ligne); }
  .id-hub-logo { width: min(220px, 52%); }
  /* En-têtes de page centrés sur mobile (titre + logo + credo + intro) */
  .id-hub-tete { text-align: center; }
  /* Empilé en colonne (texte centré, logo dessous) pour un en-tête CENTRÉ
     identique sur toutes les pages — sinon le flex wrap met le texte court
     (ex. Booking) côte à côte avec le logo, calé à gauche. */
  .id-hub-haut { flex-direction: column; justify-content: center; }
  .page-tete .chapo { margin-left: auto; margin-right: auto; }

  /* Intro & panneaux empilés */
  .intro-grille { grid-template-columns: 1fr; text-align: center; gap: 2rem; }
  .intro-texte .chapo { margin-left: auto; margin-right: auto; }
  .intro-photo { order: -1; max-width: 260px; }
  .intro-photo::before { top: 10px; left: 10px; right: -10px; bottom: -10px; }
  .panneaux { grid-template-columns: 1fr; }
  .media-hub { grid-template-columns: 1fr; }
  /* Vidéos : grille compacte 2 colonnes sur mobile (moins de scroll) */
  .videos { grid-template-columns: 1fr 1fr; gap: .8rem; }
  .video figcaption { font-size: .85rem; margin-top: .4rem; line-height: 1.15; }
  .videos .facade-play { width: 50px; height: 35px; }
  .videos .facade-play::before { border-width: 8px 0 8px 14px; }

  /* Filtres (Mixtapes/Vidéos) : 3 lignes empilées sur mobile (Label : [select]) */
  .filtres { display: grid; grid-template-columns: auto 1fr; gap: .55rem .8rem; align-items: center; }
  .filtres select { width: 100%; }

  /* Mixtapes : grille compacte 2 colonnes (comme l'accueil) pour moins scroller */
  .mixtapes { grid-template-columns: 1fr 1fr; gap: .8rem; }
  .mix-info { padding: .55rem .6rem .75rem; gap: .15rem; }
  .mix-annee { font-size: .62rem; }
  .mix-cat { font-size: .56rem; }
  .mix-info h3 { font-size: .92rem; }
  .mix-info p { display: none; }                 /* la description reste dans la fenêtre projet */
  /* Pas de survol au tactile : le « + » d'ouverture reste toujours visible */
  .mixtape::after { opacity: 1; transform: scale(1); width: 22px; height: 22px; top: .45rem; right: .45rem; }
  .mix-genre { font-size: .62rem; top: .4rem; left: .4rem; padding: .15rem .4rem; }

  /* Booking : agenda, formulaire et soutien empilés */
  .formulaire { grid-template-columns: 1fr; }
  .evenement { grid-template-columns: 1fr; text-align: left; gap: .7rem; }
  .evt-date { flex-direction: row; align-items: baseline; justify-content: flex-start; gap: .5rem;
    border-right: 0; border-bottom: 1px solid var(--ligne); padding: 0 0 .6rem; }
  .evt-jour { font-size: 1.8rem; }
  .soutien { grid-template-columns: 1fr; justify-items: center; text-align: center; }
  .soutien p { margin-left: auto; margin-right: auto; }

  /* Gospel : dos de pochette plus compact sur mobile */
  .cover-verso { padding: 1.3rem 1.1rem; }
  .cv-album { font-size: .66rem; }
  .piste-verset, .piste-reflexion { margin-left: 0; }
  /* Bandeau ambiance : empilé et centré sur mobile (bouton pleine largeur) */
  .ambiance-invite { flex-direction: column; align-items: center; text-align: center; }
  .ambiance-btn { width: 100%; }

  /* Identité : accordéon valeurs — on masque l'accroche de droite, trop serrée */
  .va-punch { display: none; }
  .va-corps { padding-left: 1.9rem; }

  /* Identité : hero, chiffres et panneaux alternés empilés */
  .id-hero-grille { grid-template-columns: 1fr; text-align: center; gap: 2rem; }
  .id-hero-photo { order: -1; max-width: 260px; }
  .id-hero-texte .chapo { margin-left: auto; margin-right: auto; }
  .chiffres { grid-template-columns: repeat(2, 1fr); gap: 1.3rem; }
  .mv-bloc, .mv-bloc.alt { grid-template-columns: 1fr; gap: .3rem; }
  .mv-bloc.alt .mv-num, .mv-bloc.alt .mv-contenu { order: 0; }

  /* Sous-menus : dépliés mais nettement SECONDAIRES. Passe « une seule
     verticale or » (2026-07-02, demande auteur) : la hiérarchie se lit par
     les PLANS (fond plus sombre + indentation), plus par des traits — la
     seule ligne or verticale du menu est le bord du tiroir. */
  .nav-item { display: block; width: 100%; }
  .caret { display: none; }
  .sous-menu {
    position: static; opacity: 1; visibility: visible; transform: none; clip-path: none;
    background: rgba(0,0,0,.45); border: none;
    margin: 0 0 .35rem 1.4rem; padding: .2rem 0;
  }
  .sous-menu a {
    font-family: var(--corps); text-transform: none; letter-spacing: .02em;
    font-size: .9rem; color: var(--gris);
    display: flex; align-items: center; gap: .5rem; padding: .6rem 1.3rem;
  }
  /* Chevron GRIS par défaut : l'or redevient une mise en avant (actif / tap) */
  .sous-menu a::before { content: "\203A"; color: var(--gris); font-size: 1.05rem; line-height: 1; transition: color var(--transition); }
  .sous-menu a:hover, .sous-menu a:active { color: var(--or-clair); background: rgba(201,162,75,.09); }
  .sous-menu a:hover::before, .sous-menu a:active::before,
  .sous-menu a[aria-current="page"]::before { color: var(--or); }

  /* Héros empilé et recentré sur mobile */
  .hero-grille { grid-template-columns: 1fr; gap: 2.2rem; text-align: center; }
  .hero-texte { text-align: center; min-width: 0; }
  .hero-logo-or img { margin-left: auto; margin-right: auto; width: min(420px, 82%); }
  .hero .accroche { margin-left: auto; margin-right: auto; }
  .hero .styles { white-space: normal; }   /* sur mobile, le retour à la ligne est autorisé */
  /* Boutons empilés sur mobile : jamais coupés, pleine largeur lisible */
  .hero-actions { flex-direction: column; align-items: center; justify-content: center; }
  .hero-actions .btn { width: min(320px, 100%); }
  .hero-photo { order: -1; max-width: 280px; }
  .hero-photo::before { top: 10px; left: 10px; right: -10px; bottom: -10px; }
  /* Menu mobile : TIROIR qui glisse depuis la DROITE */
  .nav {
    position: fixed; top: 64px; right: 0; left: auto;
    height: calc(100vh - 64px); height: calc(100dvh - 64px);
    width: min(86%, 330px);
    flex-direction: column; align-items: stretch; gap: 0;
    background: linear-gradient(165deg, #16161a, var(--noir-doux) 60%, var(--noir));
    border-left: 3px solid var(--or);
    box-shadow: -18px 0 46px rgba(0,0,0,.6);
    padding: .4rem 0 2rem; overflow-y: auto; overscroll-behavior: contain;
    transform: translateX(105%); visibility: hidden;
    transition: transform var(--transition), visibility 0s linear var(--transition);
  }
  .nav.ouvert { transform: translateX(0); visibility: visible; transition: transform var(--transition), visibility 0s; }

  /* Entrées de 1er niveau : grandes, façon affiche (Anton, majuscules) */
  .nav > a, .nav-item > a {
    font-family: var(--titre); text-transform: uppercase; letter-spacing: .05em;
    font-size: 1.18rem; color: var(--creme); width: 100%;
    padding: .95rem 1.4rem; position: relative;
    border-bottom: 1px solid rgba(255,255,255,.06);
  }
  .nav a::after { display: none; }
  /* Page active = TEXTE or (le liseré vertical a été retiré : il
     concurrençait le bord or du tiroir). Appui = plan doré discret. */
  .nav a[aria-current="page"] { color: var(--or); }
  .nav > a:active, .nav-item > a:active { background: rgba(201,162,75,.08); }
}

/* Très petits écrans : en-tête compacté pour que logo + 4 langues + burger
   tiennent sur une seule ligne (sinon le burger déborde et disparaît). */
@media (max-width: 480px) {
  .entete .contenu { gap: .6rem; padding: 0 1rem; }
  .marque img { height: 26px; }
  .langues { gap: .3rem; }
  .langues button { padding: .45rem .5rem; font-size: .76rem; letter-spacing: .03em; }
}

/* ---------- 12. KIT PRESSE / EPK (presse.html) ------------- */
.presse-actions { display: flex; gap: .8rem; flex-wrap: wrap; margin-top: 1.2rem; }
.presse-grille { display: grid; grid-template-columns: 1fr 1fr; gap: 2.4rem; align-items: start; }
.presse-photos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 1rem; align-items: start; }
.presse-photos img { display: block; width: 100%; height: 360px; object-fit: cover; border: 1px solid var(--ligne); }
.presse-tech p { color: var(--gris); }
.presse-coords { display: grid; gap: .55rem; font-size: 1.05rem; }
.presse-coords a { color: var(--or-clair); }
.presse-coords strong { color: var(--creme); font-family: var(--titre); letter-spacing: .03em; }
@media (max-width: 700px) {
  .presse-grille { grid-template-columns: 1fr; gap: 1.6rem; }
  .presse-photos { grid-template-columns: repeat(2, 1fr); }
  .presse-photos img { height: 240px; }
}

/* Impression du kit : document clair et lisible (PDF via « Imprimer ») */
@media print {
  .entete, .pied, .lien-evitement, .langues, .menu-burger,
  .presse-actions, .ticker, .retour { display: none !important; }
  /* Grain d'affiche + mots fantômes : invisibles sur papier blanc mais
     RASTÉRISÉS sur chaque page par l'impression PDF (~10 Mo de fichier) */
  body::before, .bio-num, .hero-fantome { display: none !important; }
  html, body { background: #fff !important; }
  body, main, p, li, dd, dt, h1, h2, h3,
  .chapo, .manifeste-texte, .presta-note, .ch-lab { color: #1a1a1a !important; }
  .kicker, .id-hero-credo, .ch-num, .mv-num,
  .section-titre::before { color: #9a7320 !important; -webkit-text-stroke: 0 !important; }
  a { color: #1a1a1a !important; text-decoration: none !important; }
  .reveal { opacity: 1 !important; transform: none !important; }
  .section { padding: .5rem 0 !important; }
  .presse-photos img, .tarif, .presta-tags li, .chiffre { break-inside: avoid; }
  @page { margin: 1.3cm; }
}

/* ---------- 13. EFFETS 3D (CSS pur, sans dépendance) -------- */
/* Le tilt des cartes et la parallaxe du héros sont pilotés par js/main.js
   (pointeur fin uniquement, désactivés si prefers-reduced-motion). Ici : le
   lissage du héros, l'extrude des grands titres et le vinyle décoratif. */

/* Lissage de la parallaxe du héros (ces éléments n'ont pas d'autre transition) */
.hero-logo-or, .hero-photo { transition: transform .25s ease; }

/* Extrude : fausse profondeur du grand credo d'affiche */
.cg-texte {
  text-shadow:
    1px 1px 0 rgba(201, 162, 75, .55),
    2px 2px 0 rgba(201, 162, 75, .30),
    3px 3px 0 rgba(0, 0, 0, .55),
    5px 6px 10px rgba(0, 0, 0, .40);
}

/* En-tête « Écouter » : titre à gauche, petit vinyle à droite */
.ecoute-tete { display: flex; align-items: center; justify-content: space-between;
  gap: 1rem; flex-wrap: wrap; margin-bottom: 1.8rem; }
.ecoute-tete .section-titre { margin-bottom: 0; }

/* Vinyle décoratif qui tourne (petit accent DJ) */
.vinyle {
  width: clamp(54px, 8vw, 76px); aspect-ratio: 1; border-radius: 50%;
  flex: none; position: relative;
  background: repeating-radial-gradient(circle at 50% 50%, #191919 0 1.5px, #0a0a0a 1.5px 3px);
  box-shadow: 0 6px 16px rgba(0, 0, 0, .5), inset 0 0 0 1px rgba(255, 255, 255, .04);
  animation: vinyle-tourne 6s linear infinite;
}
.vinyle::before {            /* étiquette dorée centrale */
  content: ""; position: absolute; inset: 33%; border-radius: 50%;
  background: radial-gradient(circle at 38% 35%, var(--or-clair), var(--or) 72%);
  box-shadow: 0 0 0 3px #0a0a0a;
}
.vinyle::after {             /* trou central */
  content: ""; position: absolute; inset: 46.5%; border-radius: 50%; background: #0a0a0a;
}
@keyframes vinyle-tourne { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .vinyle { animation: none; } }

/* ---------- 14. PAGE 404 ----------------------------------- */
.erreur { min-height: 68vh; display: flex; flex-direction: column; align-items: center;
  justify-content: center; text-align: center; gap: .35rem; padding: 4rem 1.2rem; }
.erreur h1 { color: var(--creme); font-size: clamp(1.8rem, 5vw, 2.8rem); transform: skewX(-4deg); margin-top: .4rem; }
.erreur .chapo { color: var(--gris); max-width: 46ch; margin-top: .3rem; }
.erreur-slogan { font-family: var(--titre); color: var(--or); letter-spacing: .04em; margin-top: .2rem; }
.erreur-actions { display: flex; gap: .8rem; flex-wrap: wrap; justify-content: center; margin-top: 1.6rem; }
/* Vinyle rayé : le disque tourne et « saute » (petit retour en arrière),
   avec 404 sur l'étiquette. Décoratif ; figé si reduced-motion. */
.disque-raye { position: relative; width: min(190px, 44vw); aspect-ratio: 1; border-radius: 50%;
  margin-bottom: 1.6rem; border: 1px solid var(--ligne);
  background: repeating-radial-gradient(circle at 50% 50%, #16161a 0 2px, #0b0b0d 2px 4px);
  animation: disque-saute 3.6s linear infinite; }
.disque-raye span { position: absolute; inset: 30%; border-radius: 50%; background: var(--or);
  display: grid; place-items: center; font-family: var(--titre); color: var(--noir);
  font-size: clamp(1.4rem, 5vw, 1.9rem); letter-spacing: .04em; }
@keyframes disque-saute {
  0% { transform: rotate(0deg); } 42% { transform: rotate(151deg); }
  46% { transform: rotate(128deg); } 88% { transform: rotate(279deg); }
  92% { transform: rotate(256deg); } 100% { transform: rotate(360deg); }
}

/* ---------- 15. AMÉLIORATIONS UI ---------------------------- */
/* Ajouts pilotés par js/main.js et js/i18n.js. Chaque bloc (a→e) est
   indépendant : on peut en retirer un sans toucher aux autres. */

/* a) Transitions douces entre les pages (View Transitions API).
   Navigateurs compatibles (Chromium) : fondu à chaque navigation.
   Ailleurs : navigation normale, rien ne change. */
@view-transition { navigation: auto; }
::view-transition-old(root),
::view-transition-new(root) { animation-duration: .32s; }
/* L'en-tête (identique sur toutes les pages) fait groupe à part : il reste
   STABLE pendant le fondu, seul le contenu de la page change dessous. */
.entete { view-transition-name: entete; }
@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
}

/* Bannière de suggestion de langue (1ʳᵉ visite, js/main.js §12) :
   boîte discrète en bas de l'écran, dans la langue du navigateur. */
.sugg-langue { position: fixed; left: 50%; transform: translateX(-50%); bottom: 1rem; z-index: 90;
  display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: .7rem 1rem;
  max-width: min(92vw, 580px); padding: .85rem 1.2rem;
  background: rgba(10,10,11,.97); border: 1px solid var(--or);
  box-shadow: 0 14px 34px rgba(0,0,0,.55); }
.sugg-langue p { color: var(--creme); font-size: .95rem; }
.sugg-langue .btn { padding: .45rem .95rem; font-size: .78rem; }

/* b) Bulle d'aide sur les boutons de langue (FR / EN / LN) : le nom
   complet de la langue s'affiche au survol / focus clavier. Le texte
   est posé par js/i18n.js (attribut data-info). */
.langues button { position: relative; }
.langues button::after {
  content: attr(data-info);
  position: absolute; top: calc(100% + 9px); left: 50%;
  transform: translateX(-50%) translateY(-4px);
  background: var(--noir-doux); color: var(--creme);
  border: 1px solid var(--or); border-radius: var(--rayon);
  font-family: var(--texte); font-size: .72rem; font-weight: 500;
  letter-spacing: .02em; text-transform: none; white-space: nowrap;
  padding: .3rem .6rem; z-index: 200;
  opacity: 0; visibility: hidden; pointer-events: none;
  transition: opacity var(--transition), transform var(--transition);
}
.langues button:hover::after,
.langues button:focus-visible::after {
  opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0);
}

/* c) En-tête compact au défilement (classe « est-compact » posée par main.js) :
   un cran plus dense et opaque, avec une ombre portée discrète. */
.entete { transition: background var(--transition), box-shadow var(--transition); }
.entete .contenu { transition: height var(--transition); }
.entete.est-compact { background: rgba(10, 10, 11, .94); box-shadow: 0 8px 24px rgba(0, 0, 0, .34); }
.entete.est-compact .contenu { height: 54px; }
.entete.est-compact .marque img { height: 26px; }

/* d) Balayage lumineux qui traverse les boutons d'action au survol. */
.btn { position: relative; overflow: hidden; }
.btn::after {
  content: ""; position: absolute; top: 0; left: -130%;
  width: 55%; height: 100%; transform: skewX(-18deg); pointer-events: none;
  background: linear-gradient(110deg, transparent, rgba(255, 255, 255, .35), transparent);
  transition: left .55s ease;
}
.btn:hover::after { left: 140%; }

/* e) Apparition en cascade des cartes de grille (classe « surgir »
   posée par main.js, avec un délai croissant via --ordre). */
.js .surgir {
  opacity: 0; transform: translateY(22px);
  animation: surgir .55s cubic-bezier(.2, .7, .2, 1) forwards;
  animation-delay: calc(var(--ordre, 0) * 65ms);
}
@keyframes surgir { to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .js .surgir { animation: none; opacity: 1; transform: none; }
}

/* =============================================================
   14-16. TOUCHES UI (retour-haut, barre mobile, compteurs,
   scrollspy Gospel, skeletons d'embed) — ajouts 2026-07-03
   ============================================================= */

/* ---- Bouton retour en haut (disque doré + flèche) ---- */
.haut-page { position: fixed; right: 1.1rem; bottom: 1.1rem; z-index: 85;
  width: 46px; height: 46px; border-radius: 50%; border: 1px solid var(--or);
  background: rgba(10,10,11,.9); color: var(--or); cursor: pointer;
  display: grid; place-items: center; opacity: 0; visibility: hidden;
  transform: translateY(12px); transition: opacity .25s ease, transform .25s ease, background .2s ease, visibility .25s; }
.haut-page.visible { opacity: 1; visibility: visible; transform: none; }
.haut-page:hover { background: var(--or); }
.haut-fleche { width: 11px; height: 11px; border-left: 2px solid currentColor; border-top: 2px solid currentColor;
  transform: rotate(45deg); margin-top: 3px; }
.haut-page:hover .haut-fleche { color: var(--noir); }

/* La barre d'action fixe mobile « Booker DJ Shan » a été retirée (demande auteur). */

/* ---- Compteurs animés : léger éclat pendant le décompte ---- */
.ch-num.compte { color: var(--or-clair); }

/* ---- Scrollspy Gospel : points de navigation des 4 parties ---- */
.gospel-nav { position: fixed; right: 1.2rem; top: 50%; transform: translateY(-50%); z-index: 70;
  display: flex; flex-direction: column; gap: .9rem; }
.gospel-nav a { display: flex; align-items: center; gap: .6rem; text-decoration: none;
  flex-direction: row-reverse; }
.gn-point { width: 11px; height: 11px; flex: none; transform: rotate(45deg);
  border: 2px solid rgba(201,162,75,.5); background: transparent; transition: background .25s ease, border-color .25s ease, transform .25s ease; }
.gospel-nav a:hover .gn-point, .gospel-nav a:focus-visible .gn-point { border-color: var(--or); }
.gospel-nav a.actif .gn-point { background: var(--or); border-color: var(--or); transform: rotate(45deg) scale(1.2); }
/* Nom de la partie : caché au repos, révélé au survol/actif (façade discrète) */
.gn-nom { font-family: var(--mono); font-size: .72rem; letter-spacing: .03em; color: var(--gris);
  max-width: 0; overflow: hidden; white-space: nowrap; opacity: 0;
  transition: max-width .3s ease, opacity .25s ease; }
.gospel-nav a:hover .gn-nom, .gospel-nav a:focus-visible .gn-nom, .gospel-nav a.actif .gn-nom {
  max-width: 20ch; opacity: 1; color: var(--creme); }
@media (max-width: 900px) { .gospel-nav { display: none; } }  /* trop à l'étroit sur mobile */
/* Cibles du scrollspy : décalage sous l'en-tête sticky (64px) au saut d'ancre */
[data-spy] { scroll-margin-top: 84px; }

/* ---- Skeleton : scintillement pendant le chargement d'un embed ---- */
.embed-charge { position: relative; background: var(--noir-doux); }
.embed-charge::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(100deg, transparent 20%, rgba(201,162,75,.10) 45%, rgba(201,162,75,.16) 50%, rgba(201,162,75,.10) 55%, transparent 80%);
  background-size: 220% 100%; animation: scintille 1.1s ease-in-out infinite; }
@keyframes scintille { from { background-position: 180% 0; } to { background-position: -80% 0; } }

/* ---- Formulaire booking : champ invalide + message de retour ---- */
.champ.invalide input, .champ.invalide textarea { border-color: #c98181; }
.champ.invalide label { color: #c98181; }
.form-retour { flex-basis: 100%; margin-top: .6rem; font-size: .92rem;
  padding: .6rem .9rem; border-left: 3px solid; }
.form-retour.erreur { color: #e0a0a0; background: rgba(201,129,129,.08); border-color: #c98181; }
.form-retour.succes { color: var(--or-clair); background: rgba(201,162,75,.08); border-color: var(--or); }

@media (prefers-reduced-motion: reduce) {
  .embed-charge::after { animation: none; }
  .haut-page { transition: opacity .25s ease, visibility .25s; }
}

/* =============================================================
   FREESTYLE SUR MON MIX (hub + pages d'édition) — 2026-07-04
   ============================================================= */
/* Photo showcase pleine largeur, coin coupé + légende mono */
.fsmm-photo { max-width: 1080px; margin: 2.6rem auto; padding: 0 1.5rem; }
.fsmm-photo img { width: 100%; height: auto; display: block; border: 1px solid var(--ligne);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 22px), calc(100% - 22px) 100%, 0 100%); }
.fsmm-photo figcaption { font-family: var(--mono); font-size: .78rem; letter-spacing: .03em;
  color: var(--gris); margin-top: .7rem; }

/* Grilles de blocs (format, expérience) — réutilise .presta-bloc */
.fsmm-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); gap: 1.1rem; margin-top: 1.4rem; }

/* Les trois voix — cartes numérotées */
.fsmm-voix { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.1rem; margin-top: 1.4rem; }
.fsmm-voix .carte h3 { font-family: var(--titre); color: var(--creme); letter-spacing: .02em; margin-bottom: .3rem; }
.fsmm-voix .carte p { color: var(--gris); font-size: .95rem; }
@media (max-width: 760px) { .fsmm-voix { grid-template-columns: 1fr; } }

/* Verset clé — citation encadrée or */
.verset-cle { max-width: 62ch; margin: 1rem auto; padding: 1.5rem 1.9rem; border-left: 3px solid var(--or);
  background: linear-gradient(135deg, var(--noir-doux), #0e0e12 75%);
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 18px), calc(100% - 18px) 100%, 0 100%); }
.verset-cle p { color: var(--creme); font-style: italic; font-size: clamp(1.05rem, 2.4vw, 1.3rem); line-height: 1.6; }
.verset-cle cite { display: block; margin-top: .9rem; font-family: var(--mono); font-style: normal;
  color: var(--or); font-size: .8rem; letter-spacing: .05em; }

/* Vidéos — embeds YouTube (la vidéo en paysage 16:9 + le teaser Short en 9:16) */
.fsmm-videos { display: flex; flex-wrap: wrap; gap: 1.2rem; margin-top: 1.4rem;
  align-items: flex-start; justify-content: center; }
.fsmm-video { background: var(--noir-doux); border: 1px solid var(--ligne); overflow: hidden; }
.fsmm-video iframe { width: 100%; height: 100%; border: 0; display: block; }
.fsmm-video-large { flex: 1 1 560px; max-width: 780px; aspect-ratio: 16 / 9; }
.fsmm-video-short { flex: 0 1 300px; aspect-ratio: 9 / 16; }

/* Badge « à venir » (tuile Cypher du hub Freestyle) */
.fsmm-avenir { display: inline-block; margin-left: .5rem; font-family: var(--mono); font-size: .58rem;
  letter-spacing: .08em; text-transform: uppercase; color: var(--noir); background: var(--or);
  padding: .15rem .55rem; transform: skewX(-9deg); vertical-align: middle; }

/* Bloc « concept » (Huis Clos) : texte (concept + expérience) à gauche, teaser vertical à droite */
.fsmm-feature { display: grid; grid-template-columns: 1fr 300px; gap: 2.6rem; align-items: center; }
.fsmm-feature-txt .section-titre { margin-bottom: 1rem; }
.fsmm-feature-exp { margin-top: 1.5rem; padding-top: 1.4rem; border-top: 1px solid var(--ligne); }
.fsmm-feature-exp h3 { font-family: var(--titre); color: var(--creme); letter-spacing: .02em; margin-bottom: .4rem; }
.fsmm-feature-exp p { color: var(--gris); }
.fsmm-feature-side .fsmm-video-short { width: 100%; max-width: 300px; margin: 0 auto; }
@media (max-width: 860px) {
  .fsmm-feature { grid-template-columns: 1fr; gap: 1.8rem; }
}

/* Vidéo promo 16:9 (à gauche) + verset (à droite) côte à côte */
.fsmm-teaser-verset { display: grid; grid-template-columns: minmax(0, 1.25fr) 1fr; gap: 2.2rem; align-items: center; }
.fsmm-teaser-verset .fsmm-video-large { flex: none; width: 100%; max-width: none; }
.fsmm-teaser-verset .verset-cle { margin: 0; }
@media (max-width: 760px) {
  .fsmm-teaser-verset { grid-template-columns: 1fr; }
}

/* Galerie des 3 photos (réutilise .disques + lightbox) : rangée centrée, un peu plus grande */
/* `safe center` : centré quand les 3 photos tiennent (desktop), mais bascule
   en alignement à gauche quand ça déborde (mobile) pour que la 1re photo reste
   atteignable au défilement — sinon le centrage la coince dans le hors-champ gauche. */
.fsmm-disques { justify-content: safe center; gap: 2.2rem; }
.fsmm-disques .disque { flex: 0 0 clamp(220px, 30%, 300px); }
