/* ==========================================================================
   Page de lancement (teasing avant ouverture) - template-lancement.php
   Page 100% autonome (pas de header/footer du theme). Tokens --fp-* repris de
   main.css ; --lp-rose est POSEE EN INLINE sur <body> par le template PHP
   (check-zones.mjs interdit les couleurs en dur dans ce fichier : voir
   template-lancement.php, attribut style du <body>).
   ========================================================================== */

@font-face {
  font-family: 'Aeonik';
  src: url('../fonts/aeonik-regular.woff2') format('woff2'), url('../fonts/aeonik-regular.woff') format('woff');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
/* Vraies graisses Aeonik auto-hebergees : fini le faux-gras et le text-stroke,
   qui rendaient differemment selon l'ecran/le moteur (incoherence tel vs PC).
   Plages : 500-600 -> Medium, 700-800 -> Bold, 900 -> Black. */
@font-face {
  font-family: 'Aeonik';
  src: url('../fonts/aeonik-medium.woff2') format('woff2');
  font-weight: 500 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Aeonik';
  src: url('../fonts/aeonik-bold.woff2') format('woff2');
  font-weight: 700 800;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'Aeonik';
  src: url('../fonts/aeonik-black.woff2') format('woff2');
  font-weight: 900;
  font-style: normal;
  font-display: swap;
}

/* Aucun debordement horizontal sur la LP : coupe au niveau racine (html via
   :has + body), en clip de preference (pas de nouveau conteneur de scroll,
   plus sur avec le pin GSAP), hidden en repli. */
html:has(body.fp-lancement) { overflow-x: hidden; overflow-x: clip; }
body.fp-lancement {
  background: var(--fp-paper);
  overflow-x: hidden; overflow-x: clip;
  /* Titres de la LP : Bebas Neue Pro (kit Adobe Fonts, minuscules disponibles,
     Bold = 600), repli sur la Bebas standard du theme (caps uniquement). */
  --lp-font-titres: "bebas-neue-pro", var(--fp-font-heading), sans-serif;
}
.fp-lp { overflow-x: hidden; }
.fp-lp section { position: relative; }

/* — Reveal au scroll (meme mecanique que main.css/.fp-anim-h : etat « arme »
   sans transition le temps d'un frame, pour eviter tout flash de disparition
   du contenu deja peint). Etat par defaut = VISIBLE (page lisible sans JS). — */
.fp-lp-reveal {
  opacity: 1; transform: none;
  transition: opacity var(--fp-anim-dur) var(--fp-anim-ease), transform var(--fp-anim-dur) var(--fp-anim-ease);
  will-change: opacity, transform;
}
body.fp-lp-armed .fp-lp-reveal { opacity: 0; transform: translateY(26px); }
body.fp-lp-armed.fp-lp-noanim .fp-lp-reveal { transition: none; }
/* La revelation doit BATTRE l'armement body.fp-lp-armed ... (specificite
   superieure a cause du type body) : on scope la regle sur le meme body. */
body.fp-lp-armed .fp-lp-reveal.is-in,
.fp-lp-reveal.is-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .fp-lp-reveal, body.fp-lp-armed .fp-lp-reveal { opacity: 1; transform: none; transition: none; }
}

/* ==========================================================================
   HERO
   ========================================================================== */
/* Hero cale au pixel sur la maquette XD (calibrage par injection Playwright a
   1332x688, le format de l'artboard) : marque EN HAUT, accroche a ~52% de la
   hauteur, bloc Decouvrez compact en bas, fleche au ras. Ratio de la maquette
   (~1.94) plafonne a l'ecran ; AUCUNE teinte verte dans le voile (image quasi
   brute, ombres portees sur les textes pour la lisibilite). */
.fp-lp-hero {
  position: relative; display: flex; align-items: stretch;
  /* Plafond 88svh : le debut de la section suivante depasse toujours sous le
     hero, meme sur ecran large (demande client). */
  height: clamp(600px, 51.7vw, 88svh);
  overflow: hidden; padding: clamp(26px, 5.6vh, 44px) 0 clamp(18px, 4vh, 30px); color: var(--fp-white);
}
/* Fond NOIR : le hero part du noir ; poster et video s'y fondent. */
.fp-lp-hero-media { position: absolute; inset: 0; z-index: 0; overflow: hidden; background: rgb(0, 0, 0); }
/* Poster CACHE par defaut. Le JS (lancement.js) ne le montre QUE si la video
   n'est pas prete tout de suite ; si elle l'est (cache), on passe direct a la
   video sans jamais afficher l'image (fini le flash apparition/disparition).
   Quand il est montre (.is-intro) : apparition + zoom-in ; garde ~1s a l'ecran ;
   puis fondu AU NOIR (.is-gone) pour laisser la video (frame 0 noire) enchainer
   son propre fade-in. Cas statiques (no-JS via <noscript>, reduced-motion, pas de
   video de fond) : .is-static montre simplement le poster. */
.fp-lp-hero-img { width: 100%; height: 100%; object-fit: cover; transform-origin: center; opacity: 0; transform: scale(1.005); }
.fp-lp-hero-img.is-intro { opacity: 1; transform: scale(1.08); transition: opacity .45s ease, transform 3s ease-out; }
.fp-lp-hero-img.is-gone { opacity: 0; transform: scale(1.1); transition: opacity .5s ease, transform .6s ease; }
.fp-lp-hero-img.is-static { opacity: 1; transform: none; }
/* Slideshow du hero : slides empilees, fondu enchaine pilote par hero-slider.js
   (bascule de .is-active). Zoom lent facon ken burns sur la slide active pour un
   fond vivant. Sans JS / reduced-motion : seule .is-active (la 1re) est visible. */
.fp-lp-hero-slider { position: absolute; inset: 0; z-index: 0; }
/* Zoom facon "ken burns" porte par le CONTENEUR (partage par toutes les slides)
   et non par chaque slide : pendant un fondu, les deux images ont donc EXACTEMENT
   la meme echelle -> aucun dezoom possible au changement de slide. Le fond zoome
   lentement dans UN SEUL sens (scale 1 -> 1.12) puis se fige (fill forwards) : il
   ne revient jamais en arriere. Les slides ne font qu'un fondu d'opacite par
   dessus. Duree = un cycle complet du slideshow (8 slides x 5s). */
@media (prefers-reduced-motion: no-preference) {
  .fp-lp-hero-slider { transform-origin: center; will-change: transform;
    animation: fp-lp-hero-zoom 40s ease-out forwards; }
}
.fp-lp-hero-slide {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; opacity: 0; transition: opacity 1.4s ease; will-change: opacity;
}
.fp-lp-hero-slide.is-active { opacity: 1; }
@keyframes fp-lp-hero-zoom { from { transform: scale(1); } to { transform: scale(1.12); } }
/* Video Vimeo de fond (si un embed Vimeo est pose dans la page Gutenberg) :
   couvre le hero quel que soit son ratio ; l'affiche reste visible dessous. */
.fp-lp-hero-video-tag { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; }
.fp-lp-hero-video-tag.is-playing { opacity: 1; }
.fp-lp-hero-video {
  position: absolute; top: 50%; left: 50%;
  width: max(100%, calc(88svh * 1.7778)); height: max(88svh, 56.25vw);
  transform: translate(-50%, -50%);
  border: 0; pointer-events: none;
}
@keyframes fp-lp-kenburns { from { transform: scale(1); } to { transform: scale(1.12); } }
.fp-lp-hero-overlay {
  position: absolute; inset: 0; z-index: 1;
  /* Vignette laterale facon maquette, renforcee partout a la demande du client
     (cotes ET centre, meme rapport de contraste). */
  background:
    linear-gradient(90deg, rgba(0, 0, 0, .72) 0%, rgba(0, 0, 0, .12) 42%, rgba(0, 0, 0, .12) 58%, rgba(0, 0, 0, .72) 100%),
    linear-gradient(180deg, rgba(0, 0, 0, .14) 0%, rgba(0, 0, 0, .05) 30%, rgba(0, 0, 0, .16) 100%);
}
@media (max-width: 720px) {
  /* Overlay hero allege sur mobile (demande client) : voile pousse vers les
     cotes (zone claire centrale plus large) et moins opaque. Desktop inchange. */
  .fp-lp-hero-overlay {
    background:
      linear-gradient(90deg, rgba(0, 0, 0, .48) 0%, rgba(0, 0, 0, .05) 30%, rgba(0, 0, 0, .05) 70%, rgba(0, 0, 0, .48) 100%),
      linear-gradient(180deg, rgba(0, 0, 0, .1) 0%, rgba(0, 0, 0, .03) 30%, rgba(0, 0, 0, .12) 100%);
  }
}
.fp-lp-hero-inner { position: relative; z-index: 2; text-align: center; display: flex; flex-direction: column; align-items: center; height: 100%; justify-content: flex-start; }
.fp-lp-hero-brand { margin-bottom: 0; text-shadow: 0 2px 16px rgba(0, 0, 0, .45); }
.fp-lp-hero-logo {
  font-family: var(--fp-font-display); font-weight: 400; text-transform: uppercase;
  letter-spacing: .015em; line-height: .95; margin: 0;
  font-size: clamp(3.2rem, 7.9vw, 7rem);
}
/* Logo secondaire officiel (SVG fourni, lettrage MAGIC PARC blanc) a la place
   de la marque texte : largeurs calees sur les largeurs texte mesurees avant
   bascule (293 / 152 / 247px a 1920, 134 / 86 / 103px a 390). */
.fp-lp-hero-logo, .fp-lp-hero-discover-brand, .fp-lp-footer-logo { line-height: 0; }
.fp-lp-hero-logo img, .fp-lp-hero-discover-brand img, .fp-lp-footer-logo img { display: block; margin: 0 auto; height: auto; }
.fp-lp-hero-logo img { width: clamp(134px, 15.3vw, 294px); }
.fp-lp-hero-discover-brand img { width: clamp(86px, 7.92vw, 152px); }
.fp-lp-footer-logo img { width: clamp(130px, 15.8vw, 305px); }
/* Marge redevenue positive avec le logo image : la valeur negative compensait
   le blanc typographique (jambages) de l'ancienne marque texte. */
.fp-lp-hero-loc { font-family: var(--fp-font-body); font-weight: 700; letter-spacing: .04em; text-transform: uppercase; font-size: clamp(1rem, 1.72vw, 1.55rem); line-height: 1.2; margin: clamp(6px, .5vw, 10px) 0 0; }
/* margin-top auto : cale l'accroche juste au-dessus du bloc Decouvrez (lui-meme
   pousse vers le bas), ce qui la place a ~52% comme sur la maquette. */
.fp-lp-hero-tagline {
  display: flex; flex-direction: column; gap: 0;
  /* Specs XD 70px/84px base 1920 (3.646vw), reduite deux fois a la demande du client. */
  font-family: var(--lp-font-titres); font-weight: 600;
  font-size: clamp(1.55rem, 3.22vw, 3.9rem); line-height: 1.2; letter-spacing: 0;
  color: var(--fp-white);
  max-width: none; margin: auto 0 0;
  text-shadow: 0 2px 14px rgba(0, 0, 0, .5);
}
.fp-lp-hero-discover { margin-top: clamp(30px, 6.4vh, 46px); max-width: none; text-shadow: 0 1px 10px rgba(0, 0, 0, .5); }
.fp-lp-hero-discover-eyebrow { font-size: 1.12rem; letter-spacing: .02em; text-transform: none; opacity: 1; margin: 0; }
.fp-lp-hero-discover-brand { font-family: var(--fp-font-display); text-transform: uppercase; font-size: clamp(2.1rem, 4.2vw, 3.7rem); line-height: .95; margin: 0 0 4px; letter-spacing: .01em; }
.fp-lp-hero-discover-text { font-size: clamp(1.15rem, 1.5vw, 1.4rem); opacity: 1; margin: 0; }
.fp-lp-hero-arrow { display: inline-flex; margin-top: clamp(10px, 2.4vh, 18px); color: var(--fp-white); filter: drop-shadow(0 1px 6px rgba(0, 0, 0, .45)); }
.fp-lp-hero-arrow svg { width: 24px; height: 44px; animation: fp-lp-bounce 2.2s ease-in-out infinite; }
@keyframes fp-lp-bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(8px); } }
@media (prefers-reduced-motion: reduce) {
  .fp-lp-hero-img { animation: none; }
  .fp-lp-hero-arrow svg { animation: none; }
  .fp-lp-hero-chevron { animation: none; }
}
/* Panneau « Découvrez » mobile : n'existe qu'en petit ecran (voir template),
   sur --lp-vert comme le panneau rendez-vous desktop. */
/* Chevron « glisser vers le bas », mobile uniquement (petit, leger, anime). */
.fp-lp-hero-chevron { display: none; }
@keyframes fp-lp-hero-chevron { 0%, 100% { transform: translate(-50%, 0); } 50% { transform: translate(-50%, 6px); } }
.fp-lp-discover-mobile { display: none; }
@media (max-width: 720px) {
  .fp-lp-hero-chevron {
    display: block; position: absolute; left: 50%; bottom: 12px; z-index: 3;
    transform: translateX(-50%); color: var(--fp-white); opacity: .85; pointer-events: none;
    animation: fp-lp-hero-chevron 2s ease-in-out infinite;
  }
  .fp-lp-hero-chevron svg { display: block; width: 20px; height: auto; filter: drop-shadow(0 1px 4px rgba(0, 0, 0, .45)); }
  /* Hero plein ecran : marque collee en haut, accroche collee en bas (le
     margin-top auto de la tagline fait le grand ecart), bloc Decouvrez et
     fleche sortis du hero. */
  .fp-lp-hero { height: 100vh; height: 100svh; min-height: 0; padding: 24px 0 30px; }
  /* Logo Magic Parc du hero fortement agrandi en mobile (demande client). */
  .fp-lp-hero-logo img { width: clamp(220px, 66vw, 382px); }
  /* « Rennaz (VD) » sous le logo, plus grand en mobile. */
  /* « Rennaz (VD) » presque aussi large que le logo (logo ~66vw ; 10.5vw amene
     le texte a ~= largeur logo sur les mobiles courants). */
  .fp-lp-hero-loc { font-size: clamp(1.85rem, 9.7vw, 2.5rem); font-weight: 800; }
  /* Accroche remontee (un peu de marge basse, le margin-top auto la garde en bas
     du hero) et agrandie moderement (~+11% sur le plancher 1.55rem). */
  .fp-lp-hero-tagline { font-size: clamp(2.15rem, 7vw, 2.7rem); margin: auto 0 clamp(16px, 5vh, 44px); }
  .fp-lp-hero-discover, .fp-lp-hero-arrow { display: none; }
  .fp-lp-discover-mobile {
    display: block;
    background: var(--lp-vert, var(--fp-secondary)); color: var(--fp-white);
    text-align: center; padding: 46px 0 50px;
  }
  /* Un peu plus d'air autour du logo Decouvrez (demande client : logo a la
     bonne taille, plus d'espace au-dessus et en dessous vers les textes). */
  .fp-lp-discover-mobile .fp-lp-hero-discover-eyebrow { margin-bottom: 12px; }
  .fp-lp-discover-mobile .fp-lp-hero-discover-brand { margin: 4px 0 20px; }
  .fp-lp-discover-mobile .fp-lp-hero-discover-brand img { width: clamp(140px, 40vw, 220px); }
  /* Texte Decouvrez : un peu plus petit (0.95rem contre 1.15rem) et largeur de
     contenu calee pour tenir sur 2 lignes, coupure visee APRES le 2e « vous »
     (ligne 1 : « un lieu imagine pour vous evader, vous », ligne 2 :
     « divertir et partager l'inoubliable. »). Bascule visee ~16.5em : borne le
     rendu sur les grands mobiles pour garder « divertir » sur la 2e ligne. */
  .fp-lp-discover-mobile .fp-lp-hero-discover-text { font-size: 1.15rem; max-width: 20.5em; margin: 8px auto 0; }
}

/* ==========================================================================
   ON SE RETROUVE OU ? (panneau plein, teinte --lp-vert, entre hero et bandes)
   ========================================================================== */
/* Specs XD copiees par le client : panneau 284px sur base 1920 (14.8vw),
   fond 014C45, les DEUX lignes en Bebas Neue Pro Bold 55px/80px menthe. */
.fp-lp-rdv {
  background: var(--lp-vert, var(--fp-secondary)); color: var(--fp-white);
  text-align: center;
  min-height: clamp(180px, 14.8vw, 300px);
  display: flex; flex-direction: column; justify-content: center;
  padding: 24px 0;
}
.fp-lp-rdv-q, .fp-lp-rdv-a {
  font-family: var(--lp-font-titres); font-weight: 600;
  font-size: clamp(1.6rem, 2.865vw, 3.44rem); line-height: 1.45;
  color: var(--fp-white);
  margin: 0;
}
@media (max-width: 720px) {
  /* Mobile (demande client) : panneau sur fond teal, textes en blanc. */
  .fp-lp-rdv { background: var(--lp-teal); }
  .fp-lp-rdv-q, .fp-lp-rdv-a { color: var(--fp-white); }
  /* Question passablement plus grande (~+34% a 390px, davantage sur grand mobile
     via le vw), reste sur UNE ligne. */
  .fp-lp-rdv-q { font-size: clamp(2.35rem, 10.4vw, 3.05rem); }
  /* Reponse un peu plus grande (~+16%), mais moins que la question, sur DEUX
     lignes : « L'Aventure commence » puis « precisement ici » (spans en bloc). */
  .fp-lp-rdv-a { font-size: clamp(1.85rem, 7.4vw, 2.25rem); }
  .fp-lp-rdv-a span { display: block; }
}

/* ==========================================================================
   BANDES PARALLAXE
   ========================================================================== */
/* Mode rideau (classe posee par lancement.js) : le conteneur ne fait plus que
   la hauteur d'UNE bande, en CSS pur (aucune mesure JS : resilient aux reload
   en fond de page et aux resize). */
.fp-lp-bands--stack { position: relative; overflow: hidden; height: clamp(300px, 24.5vw, 500px); }

/* position:relative OBLIGATOIRE : sans lui, chaque .fp-lp-band-media (absolute)
   se refere au conteneur .fp-lp-bands entier : les 4 images s'empilent sur toute
   la zone et echappent au clipping (constate en prod : cocktails partout). */
/* Modele valide par le client sur la bande billards (specs XD copiees par lui :
   bande 1920x518, textes a left 150px = 7.8vw, couleur bddad5), applique aux 4
   bandes : APLAT vert pleine bande, image sur la partie DROITE seulement (elle
   n'est plus etiree sur toute la largeur), fondu vert -> image par-dessus son
   bord gauche, bloc texte a gauche vers le bas. */
/* Rythme vertical des bandes : effet rideau retire, elles s'affichent en
   panneaux distincts, espaces et arrondis (plus moderne). */
.fp-lp-bands {
  display: flex; flex-direction: column;
  gap: clamp(28px, 4.2vw, 64px);
  padding-block: clamp(40px, 5.5vw, 96px);
}
.fp-lp-band {
  position: relative; min-height: clamp(320px, 26vw, 520px);
  /* Panneau flottant : quasi pleine largeur avec une gouttiere laterale, coins
     arrondis, ombre douce ancree dans le vert du theme. */
  width: min(100% - clamp(24px, 6vw, 104px), 1640px);
  margin-inline: auto;
  border-radius: clamp(18px, 1.8vw, 36px);
  box-shadow: 0 30px 70px -34px rgba(1, 20, 18, .7);
  display: flex; align-items: center; overflow: hidden;
  color: var(--fp-white);
  /* Vert fonce des bandes (demande client : 012f29), distinct du panneau
     « On se retrouve ou ? » qui reste sur --lp-vert. */
  background: var(--lp-vert-fonce, var(--fp-secondary-dark));
}
/* Zone image calee sur la maquette : l'image ne devient nette qu'a ~41% de la
   bande (aplat large + fondu long), elle ne couvre jamais la partie gauche. */
.fp-lp-band-media { position: absolute; top: 0; bottom: 0; left: 34%; right: 0; overflow: hidden; z-index: 0; }
.fp-lp-band-img { position: absolute; left: 0; top: -5%; width: 100%; height: 112%; object-fit: cover; will-change: transform; }
/* Fondu de transition aplat -> image, cale sur la zone de l'image. */
.fp-lp-band-overlay {
  position: absolute; top: 0; bottom: 0; left: 34%; right: 0; z-index: 1;
  /* Degrade plus doux et plus long que la version d'origine (etait vert 55% a
     10% puis transparent a 22% = transition seche). Le vert perd vite en
     opacite (l'image transparait plus tot) puis une longue queue douce vers le
     transparent, facon maquette. */
  background: linear-gradient(90deg,
    var(--lp-vert-fonce, var(--fp-secondary-dark)) 0%,
    color-mix(in srgb, var(--lp-vert-fonce, var(--fp-secondary-dark)) 40%, transparent) 12%,
    color-mix(in srgb, var(--lp-vert-fonce, var(--fp-secondary-dark)) 12%, transparent) 26%,
    transparent 40%);
}
/* Toujours AU-DESSUS de l'image et du fondu. */
.fp-lp-band-content {
  position: relative; z-index: 2;
  width: 100%; max-width: none; margin: 0;
  /* Texte centre verticalement dans la carte (padding haut/bas symetrique). */
  align-self: center;
  padding: clamp(28px, 3vw, 56px) 24px clamp(28px, 3vw, 56px) clamp(24px, 7.8vw, 150px);
}
/* Cadrage propre a la bande billards : logo Magic Parc au mur en entier
   (la photo est cadree vers sa tranche haute). */
.fp-lp-band:first-of-type .fp-lp-band-img { object-position: 85% 58%; }
/* Titre en Bebas Neue Pro casse mixte, taille specs XD (55px sur base 1920),
   grand espace avant le texte (reference client de la bande billards).
   text-transform none : neutralise l'uppercase global des h3 du theme
   (main.css) qui ecrasait la casse mixte de la Pro. */
.fp-lp-band-title { font-family: var(--lp-font-titres); font-weight: 600; text-transform: none; font-size: clamp(1.8rem, 2.865vw, 3.44rem); color: var(--fp-white); margin: 0 0 clamp(20px, 2.5vw, 48px); max-width: 40ch; }
/* Corps aux specs XD : Aeonik Medium 22px/26px sur 434px, couleur menthe. */
.fp-lp-band-text { font-size: clamp(1rem, 1.146vw, 1.375rem); line-height: 1.18; color: var(--fp-white); opacity: 1; margin: 0; max-width: 28ch; }

/* Alternance gauche/droite (desktop) : une bande sur deux inverse le cote de
   l'image et aligne le texte de l'autre cote. Confine en min-width 721px : en
   mobile, les bandes empilent image-en-haut / texte-dessous (pas d'alternance).
   Specificite plus forte que les regles mobiles -> ce garde-fou est essentiel. */
@media (min-width: 721px) {
  .fp-lp-band:nth-of-type(even) .fp-lp-band-media,
  .fp-lp-band:nth-of-type(even) .fp-lp-band-overlay { left: 0; right: 34%; }
  /* Fondu mirroir : vert plein a DROITE, image qui transparait vers la gauche. */
  .fp-lp-band:nth-of-type(even) .fp-lp-band-overlay {
    background: linear-gradient(270deg,
      var(--lp-vert-fonce, var(--fp-secondary-dark)) 0%,
      color-mix(in srgb, var(--lp-vert-fonce, var(--fp-secondary-dark)) 40%, transparent) 12%,
      color-mix(in srgb, var(--lp-vert-fonce, var(--fp-secondary-dark)) 12%, transparent) 26%,
      transparent 40%);
  }
  /* Texte cale a DROITE (symetrique du padding gauche des bandes impaires),
     centre verticalement comme les impaires. */
  .fp-lp-band:nth-of-type(even) .fp-lp-band-content {
    text-align: right;
    padding: clamp(28px, 3vw, 56px) clamp(24px, 7.8vw, 150px) clamp(28px, 3vw, 56px) 24px;
  }
  .fp-lp-band:nth-of-type(even) .fp-lp-band-title,
  .fp-lp-band:nth-of-type(even) .fp-lp-band-text { margin-left: auto; }
}
@media (max-width: 720px) {
  /* Mobile (demande client) : bande plein ecran, image seule sur ~75svh SANS
     degrade, titre + texte sur un aplat pleine largeur sous l'image, aplat
     sur --lp-vert comme le premier panneau apres le hero. */
  /* dvh cible sur le TEXTE (demande client) : la bande suit la hauteur
     dynamique de l'ecran (100dvh) : le bandeau REMPLIT toujours le viewage,
     barre d'adresse visible ou non. HAUTEUR FIXE 100vh (PAS dvh) : demande
     client, le dvh faisait « respirer » la mise en page selon le sens de scroll
     (barre d'adresse), desagreable. En 100vh (= grande hauteur iOS, fixe), le
     layout ne bouge plus ; le texte est cale EN HAUT de l'aplat (juste sous
     l'image, voir .fp-lp-band-content) : comme le haut du bandeau est le point
     fixe (epingle), le texte reste stable, c'est le BAS (variable) qui se fait
     rogner quand la barre apparait, pas le texte. La jupe verte
     .fp-lp-stage::after couvre la jonction avec la section suivante. */
  /* Effet rideau retire : la bande n'est plus plein ecran (100vh), elle prend sa
     hauteur naturelle (image + aplat texte) et s'empile en carte espacee. */
  .fp-lp-band {
    min-height: 0; height: auto;
    flex-direction: column; align-items: stretch;
    background: var(--lp-vert, var(--fp-secondary));
  }
  .fp-lp-band-media {
    /* Image en hauteur fixe (svh stable, ne respire pas avec la barre d'adresse),
       l'aplat vert et le texte suivent dessous. */
    position: relative; top: auto; bottom: auto; left: auto; right: auto;
    width: 100%; height: 58svh; flex: 0 0 auto;
  }
  .fp-lp-band-img { top: 0; height: 100%; }
  .fp-lp-band-overlay { display: none; }
  .fp-lp-band-content {
    /* Contenu cale EN HAUT de l'aplat (juste sous l'image), pas centre : ainsi
       il est ancre au point FIXE (haut du bandeau epingle) et ne bouge plus
       quand la barre d'adresse rogne le bas. Regle aussi le « texte du dernier
       bandeau a peine visible au fond de l'aplat » (il etait centre dans une
       zone qui debordait sous le pli). */
    flex: 1 1 auto; align-self: stretch;
    display: flex; flex-direction: column; justify-content: flex-start; align-items: center;
    padding: clamp(22px, 4.5vh, 44px) 20px 24px;
  }
  /* Titres et textes centres et un peu plus grands (demande client, tous
     bandeaux). */
  .fp-lp-band-title { font-size: clamp(2.15rem, 9.2vw, 2.75rem); margin: 0 0 12px; max-width: none; text-align: center; }
  .fp-lp-band-text { font-size: clamp(1.22rem, 4.8vw, 1.42rem); max-width: none; line-height: 1.3; text-align: center; }
  /* Mode rideau : conteneur = hauteur d'UNE bande plein ecran, 100vh FIXE
     (voir .fp-lp-band : layout stable, pas de dvh). */
  .fp-lp-bands--stack { height: 100vh; }
}

/* Voile de focus pendant le rideau : assombrit hero + panneau (figes) pour
   guider l'oeil vers les bandes qui bougent. Opacite animee par lancement.js. */
.fp-lp-stage { position: relative; }
/* Jupe verte sous la scene du rideau (mobile) : posee juste sous le stage, elle
   est CACHEE derriere les sections suivantes en temps normal (elles paintent
   par-dessus). Elle ne se revele que si un ecart s'ouvre a la jonction dernier
   bandeau / section suivante quand la barre d'adresse iOS fait varier le dvh en
   plein pin (le pin est mesure sur innerHeight fige). Couleur = aplat des
   bandes en mobile (--lp-vert). z-index bas : toujours sous les bandes. */
@media (max-width: 720px) {
  /* Hauteur 180px : couvre l'ecart max (~barre d'adresse iOS ~100px) mais reste
     SOUS la section citation (~240px), pour ne pas deborder en vert derriere la
     section « c'est ici » (transparente) qui suit. */
  .fp-lp-stage::after {
    content: ''; position: absolute; top: 100%; left: 0; right: 0; height: 180px;
    background: var(--lp-vert, var(--fp-secondary)); pointer-events: none; z-index: 0;
  }
}
.fp-lp-stage-veil { position: absolute; inset: 0; background: rgba(0, 0, 0, 1); opacity: 0; pointer-events: none; z-index: 3; }

/* Lueur automatique sur les grandes photos : jouee une fois, une seconde
   apres l'apparition du bloc (classe is-in du reveal). */
.fp-lp-ici-photo, .fp-lp-resto-photo { position: relative; overflow: hidden; border-radius: clamp(28px, 2.9vw, 56px); }
.fp-lp-ici-photo::after, .fp-lp-resto-photo::after {
  content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(115deg, transparent 32%, rgba(255, 255, 255, .34) 50%, transparent 68%);
  transform: translateX(-130%);
}
.fp-lp-ici-photo.is-in::after, .fp-lp-resto-photo.is-in::after { animation: fp-lp-shine 1.1s ease 1s 1 both; }
@keyframes fp-lp-shine { from { transform: translateX(-130%); } to { transform: translateX(130%); } }
@media (prefers-reduced-motion: reduce) {
  .fp-lp-ici-photo.is-in::after, .fp-lp-resto-photo.is-in::after { animation: none; }
}

/* ==========================================================================
   PANNEAU CITATION (plein vert fonce)
   ========================================================================== */
/* Specs XD copiees par le client : panneau 302px sur base 1920 (15.7vw),
   fond 014C45 (plus le vert tres fonce), Bebas Neue Pro Bold 55px/80px menthe
   casse mixte, phrase sur ~800px. */
.fp-lp-citation-section {
  background: var(--lp-vert, var(--fp-secondary));
  min-height: clamp(200px, 15.7vw, 320px);
  display: flex; align-items: center;
  padding: 24px 0;
}
.fp-lp-citation {
  color: var(--fp-white); text-align: center;
  font-family: var(--lp-font-titres); font-weight: 600; text-transform: none;
  line-height: 1.45; letter-spacing: 0;
  font-size: clamp(1.6rem, 2.865vw, 3.44rem);
  /* Largeur calee pour que la 1re ligne coure jusqu'a "belles," (bascule mesuree
     entre 950 et 1100px a 1920) ; police et largeur en vw : la coupure suit. */
  max-width: clamp(300px, 60vw, 1150px); margin: 0 auto;
}
@media (max-width: 720px) { .fp-lp-citation-section { padding: 64px 0; background: var(--fp-secondary-dark); } .fp-lp-citation { font-size: clamp(1.9rem, 7vw, 2.5rem); max-width: 92vw; } }

/* ==========================================================================
   « C'EST ICI » + CARTE 5 COLONNES
   ========================================================================== */
/* Specs XD copiees par le client : puce teal radius 16 (Bebas Pro 25px menthe,
   icone localisation), icone SOON 301px, titre Bebas Pro Bold en vert tres
   fonce (002F29 = token secondary-dark), corps Aeonik 22px/26px, photo a
   droite radius 56. Fond de section blanc. */
.fp-lp-ici { padding: 96px 0 0; }
.fp-lp-ici-grid { display: grid; grid-template-columns: 1fr 1.18fr; gap: clamp(28px, 5.5vw, 106px); align-items: center; margin-bottom: 72px; }
/* .fp-lp-pill : CLASSE UNIQUE partagee par les deux « iconbox » (puce
   « Magic Parc - Rennaz (VD) » de la section c'est ici ET pilule Restauration).
   Source de verite unique : toute retouche s'applique aux deux d'un coup. */
.fp-lp-pill {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  background: var(--fp-primary); border-radius: 13px;
  width: clamp(234px, 12.9vw, 262px); box-sizing: border-box;
  padding: 8px 16px; margin: 0 0 14px;
  font-family: var(--lp-font-titres); font-weight: 500; text-transform: uppercase;
  font-size: clamp(1.05rem, 1.15vw, 1.38rem); line-height: 1.2;
  color: var(--fp-white);
}
.fp-lp-pill-ico { width: auto; height: clamp(18px, 1.4vw, 26px); display: block; }
.fp-lp-ici-soon { display: block; width: clamp(100px, 8vw, 150px); height: clamp(36px, 3.2vw, 60px); object-fit: contain; object-position: left center; margin: 6px 0 10px; }
.fp-lp-ici-title-l1, .fp-lp-ici-title-l2 { display: block; }
.fp-lp-title-br-m { display: none; }
.fp-lp-ici-title {
  font-family: var(--lp-font-titres); text-transform: none; font-weight: 600;
  font-size: clamp(1.8rem, 2.6vw, 3.1rem); line-height: 1.12;
  color: var(--fp-secondary-dark);
  max-width: none; margin-bottom: 22px;
}
.fp-lp-ici-text p:not(.fp-lp-pill) { color: var(--fp-secondary-dark); font-weight: 500; font-size: clamp(1rem, 1.01vw, 1.25rem); line-height: 1.35; max-width: clamp(320px, 35.5vw, 682px); }
.fp-lp-ici-text p.fp-lp-ici-strong { color: var(--fp-secondary-dark); font-weight: 700; font-size: clamp(1.13rem, 1.11vw, 1.4rem); text-transform: uppercase; white-space: nowrap; }
.fp-lp-ici-photo img { width: 100%; height: 100%; min-height: 320px; aspect-ratio: 833 / 556; object-fit: cover; border-radius: clamp(28px, 2.9vw, 56px); }
@media (max-width: 900px) {
  .fp-lp-ici-grid { grid-template-columns: 1fr; gap: 28px; }
  .fp-lp-ici-photo { order: -1; }
}
@media (max-width: 720px) {
  /* Centrage mobile, symetrique de la section restauration : tout le bloc texte
     (puce, icone SOON, titre, paragraphes) est centre ; le titre l'est par le
     text-align du conteneur (ses spans sont deja en bloc). */
  .fp-lp-ici { padding-top: 30px; }
  .fp-lp-ici-text { display: flex; flex-direction: column; align-items: center; text-align: center; }
  /* La puce est un inline-flex : les marges auto la centrent. */
  .fp-lp-pill { margin-left: auto; margin-right: auto; font-weight: 600; font-size: clamp(1.38rem, 5.8vw, 1.68rem); border-radius: 13px; width: 63vw; max-width: 288px; box-sizing: border-box; justify-content: center; padding: 8px 16px; }
  /* Icone SOON recentree (desktop : object-position left + marge laterale 0)
     et un peu agrandie sur mobile. */
  .fp-lp-ici-soon { object-position: center; margin: 6px auto 10px; width: clamp(120px, 34vw, 168px); height: clamp(44px, 12vw, 68px); }
  /* Titre : plus de largeur (gouttiere reduite) + taille calee pour tenir
     « Votre nouveau spot de loisirs, » sur UNE ligne, « c'est ici » sur la
     suivante (les spans l1/l2 sont deja en bloc). */
  .fp-lp-ici-grid { padding-left: 10px; padding-right: 10px; }
  .fp-lp-ici-title { font-size: clamp(2.3rem, 9.4vw, 3.15rem); align-self: stretch; }
  .fp-lp-ici-title-l1, .fp-lp-ici-title-l2 { display: inline; }
  .fp-lp-title-br-m { display: inline; }
  /* Sans ca, le max-width des paragraphes bride le centrage pleine largeur.
     Corps un cran plus gras (400 -> 500) et un poil plus grand (demande client). */
  .fp-lp-ici-text p:not(.fp-lp-pill) { max-width: none; font-weight: 500; font-size: 18px; line-height: 22px; }
  .fp-lp-ici-text p.fp-lp-ici-strong { font-weight: 900; font-size: 18px; line-height: 22px; margin-top: clamp(12px, 3.5vw, 16px); }
  /* Photo alignee sur la restauration : moins haute, plafonnee a ~46svh. */
  /* Photos ici + resto : meme CSS (maquette 343x382), aspect force, plus de min/max hauteur. */
  .fp-lp-ici-photo img, .fp-lp-resto-photo img { width: 100%; height: auto; min-height: 0; max-height: none; aspect-ratio: 343 / 382; }
}

/* Specs XD : carte 1620x348 sur base 1920, fond primary, radius 55, cinq
   colonnes reparties (icones ~110px de haut, titres Bebas Pro 42px menthe,
   corps Aeonik 22px menthe centres). */
.fp-lp-card-grid { display: grid; grid-template-columns: repeat(5, 1fr); column-gap: clamp(6px, .6vw, 12px); background: var(--fp-primary); border-radius: clamp(32px, 2.86vw, 55px); padding: clamp(24px, 1.6vw, 30px) clamp(12px, 1.3vw, 26px) clamp(28px, 2.2vw, 44px); color: var(--fp-white); }
/* Pas de separateurs verticaux : la maquette n'en a pas. */
.fp-lp-card { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 0 16px; }
.fp-lp-card-icon-wrap { display: flex; align-items: center; justify-content: center; height: 64px; margin-bottom: 18px; }
.fp-lp-card-icon { display: block; width: clamp(80px, 8.8vw, 168px); height: clamp(38px, 3.5vw, 66px); object-fit: contain; }
body.fp-lp-armed .fp-lp-card-icon { clip-path: inset(100% 0 0 0); transition: clip-path 1.6s var(--fp-anim-ease); }
body.fp-lp-armed.fp-lp-noanim .fp-lp-card-icon { transition: none; }
body.fp-lp-armed .fp-lp-card-icon.is-in,
.fp-lp-card-icon.is-in { clip-path: inset(0 0 0 0); }
@media (prefers-reduced-motion: reduce) {
  .fp-lp-card-icon { clip-path: none; transition: none; }
}
.fp-lp-card-title { font-family: var(--lp-font-titres); font-weight: 600; text-transform: none; font-size: clamp(1.15rem, 1.85vw, 2.2rem); line-height: 1.2; margin: 0 0 10px; color: var(--fp-white); }
.fp-lp-card-count { font-variant-numeric: tabular-nums; }
/* Trait du corps allege par transparence : seule la Regular de l'Aeonik est
   disponible (pas de Light chez RParc, verifie), et une graisse plus fine ne
   peut pas etre synthetisee par le navigateur. */
.fp-lp-card-text { font-family: var(--fp-font-body); font-weight: 400; font-size: clamp(.85rem, .95vw, 1.15rem); line-height: 1.3; opacity: 1; margin: 0; max-width: 24ch; color: color-mix(in srgb, var(--fp-white) 86%, transparent); }
@media (max-width: 980px) {
  .fp-lp-card-grid { grid-template-columns: repeat(2, 1fr); row-gap: 40px; border-radius: 28px; padding: 40px 24px; }
}
@media (max-width: 560px) {
  .fp-lp-card-grid { grid-template-columns: 1fr; }
  .fp-lp-card { padding-bottom: 8px; }
}
/* Base : pagination masquee hors mobile (comme la galerie). */
.fp-lp-card-dots { display: none; }
/* ------ Carrousel mobile de la carte stats (demande client, meme systeme que
   la galerie) ------
   Sous 721px, le grand encadre vert unique eclate : CHAQUE element devient sa
   propre carte verte, les cartes defilent horizontalement (scroll-snap) et on
   PEEK le debut de la suivante a droite. Une pagination a points (identique a la
   galerie) signale qu'on peut glisser. Chaque carte joue une courte apparition a
   sa PREMIERE activation (classe is-seen posee par lancement.js), et son icone se
   remplit alors par clip-path (is-in). Ce remplissage est pilote par le
   carrousel, PAS par l'IntersectionObserver de setupIconDraw (neutralise en
   mobile : en rail horizontal il revelerait toutes les icones d'un bloc).
   Place APRES le @media 560 : a specificite egale, le rail flex gagne la
   cascade sous 560px aussi. */
@media (max-width: 720px) {
  /* On met a plat la wrap de la carte (via :has, pas celle de la grille ici-grid)
     pour un rail plein largeur, comme la galerie ; l'inset vient du rail. */
  .fp-wrap:has(> .fp-lp-card-grid) { padding-left: 0; padding-right: 0; max-width: none; }
  /* Le fond vert et le radius quittent le conteneur (ils passent sur CHAQUE
     carte) : le conteneur devient un rail horizontal a defilement. */
  .fp-lp-card-grid {
    display: flex; flex-direction: row;
    overflow-x: auto; overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    gap: clamp(12px, 3vw, 18px);
    background: none; border-radius: 0;
    /* Padding lateral = (100vw - largeur carte) / 2 : ainsi CHAQUE carte, y
       compris la premiere et la derniere, se centre a l'ecran quand elle est
       active (scroll-snap-align center). */
    padding: 0 17vw; scrollbar-width: none;
  }
  .fp-lp-card-grid::-webkit-scrollbar { display: none; }
  /* Cartes plus fines (74vw) et CENTREES a l'ecran quand actives ; on peek un
     bord de la carte voisine de chaque cote. */
  .fp-lp-card {
    flex: 0 0 66vw; box-sizing: border-box;
    scroll-snap-align: center; scroll-snap-stop: always;
    background: var(--fp-primary); border-radius: 52px;
    padding: 32px 24px;
  }
  /* Contenu un peu agrandi maintenant que la carte est pleine largeur. */
  .fp-lp-card-icon-wrap { height: 72px; margin-bottom: 20px; }
  .fp-lp-card-icon { width: clamp(120px, 40vw, 200px); height: clamp(58px, 18vw, 94px); }
  /* L'icone reste VISIBLE des l'apercu de la carte suivante (demande client :
     on voit le prochain SVG), simplement ATTENUEE au repos ; elle s'affiche en
     plein a la premiere activation (is-seen). On abandonne le masque clip-path
     (pilote desktop) au profit d'un fondu/scale qui part de VISIBLE, jamais
     cache. Specificite portee a 3 classes pour battre la regle clip-path de
     base body.fp-lp-armed .fp-lp-card-icon. */
  body.fp-lp-armed .fp-lp-card .fp-lp-card-icon {
    clip-path: none;
    opacity: .5; transform: scale(.88);
    transition: opacity .55s var(--fp-anim-ease), transform .55s var(--fp-anim-ease);
  }
  body.fp-lp-armed .fp-lp-card.is-seen .fp-lp-card-icon { opacity: 1; transform: none; }
  .fp-lp-card-title { font-size: clamp(2rem, 8.4vw, 2.4rem); }
  .fp-lp-card-text { font-size: clamp(.95rem, 3.6vw, 1.08rem); line-height: 1.3; max-width: 85%; color: color-mix(in srgb, var(--fp-white) 96%, transparent); }
  /* Reveal vertical inadapte au rail horizontal (memes raisons que la galerie) :
     cartes VISIBLES au repos. Sans !important, pour laisser jouer le keyframe
     d'apparition par-dessus (un !important battrait l'animation). */
  body.fp-lp-armed .fp-lp-card .fp-lp-reveal { opacity: 1; transform: none; }
  /* Apparition additive et discrete a la premiere activation : le titre puis le
     texte montent de 12px avec un fondu PARTIEL (jamais invisible : depart a .4)
     pour ne pas faire clignoter la carte peekee a droite. L'icone se revele en
     plein en meme temps (regle ci-dessus). */
  .fp-lp-card.is-seen .fp-lp-card-title { animation: fp-lp-card-pop .55s var(--fp-anim-ease) both; will-change: opacity, transform; }
  .fp-lp-card.is-seen .fp-lp-card-text { animation: fp-lp-card-pop .55s var(--fp-anim-ease) .07s both; will-change: opacity, transform; }
  /* Points : base jaune, actif vert (identiques a la galerie). */
  .fp-lp-card-dots { display: flex; justify-content: center; gap: 8px; padding: 20px 0 0; }
  .fp-lp-card-dot {
    width: 8px; height: 8px; border-radius: 50%; padding: 0; border: 0; cursor: pointer;
    background: var(--lp-jaune); opacity: .9;
    transition: background .25s ease, transform .25s ease;
  }
  .fp-lp-card-dot.is-active { background: var(--lp-vert); transform: scale(1.25); }
}
@keyframes fp-lp-card-pop {
  from { opacity: .5; transform: translateY(7px); }
  to { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  /* Apparition coupee : cartes et points pleins directement (icone pleine geree
     par la regle reduced-motion existante sur .fp-lp-card-icon). */
  .fp-lp-card.is-seen .fp-lp-card-title,
  .fp-lp-card.is-seen .fp-lp-card-text { animation: none; }
  /* Icones de carte pleines directement (pas d'attenuation animee). */
  body.fp-lp-armed .fp-lp-card .fp-lp-card-icon { opacity: 1; transform: none; transition: none; }
  .fp-lp-card-dot { transition: none; }
}

/* ==========================================================================
   GALERIE (maconnerie) + VISIONNEUSE
   ========================================================================== */
.fp-lp-gallery { background: var(--lp-menthe, var(--fp-accent)); padding: 64px 0 96px; margin-top: 80px; }
@media (max-width: 720px) { .fp-lp-gallery { background: none; padding: 40px 0 56px; margin-top: 48px; } }
/* Maconnerie de la maquette : 3 colonnes (522px sur base 1920), gap 28px,
   hauteurs S/M/L (329/458/578) en permutation par colonne : les trois colonnes
   finissent au meme niveau. Images en cover, peu importe leurs dimensions. */
.fp-lp-gallery-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(14px, 1.46vw, 28px); }
.fp-lp-gallery-col { display: flex; flex-direction: column; gap: clamp(14px, 1.46vw, 28px); }
/* Apparition adoucie des tuiles (retour client) : la transition applicable est
   celle de l'etat CIBLE : longue et douce sur .is-in (l'apparition), courte au
   survol (le lift reste reactif ; le retour de survol, doux, repasse en long). */
body.fp-lp-armed .fp-lp-gallery-item.fp-lp-reveal { transform: translateY(14px); }
.fp-lp-gallery-item.fp-lp-reveal.is-in,
.fp-lp-gallery-item { transition: opacity 1.15s cubic-bezier(.22, .61, .36, 1), transform 1.15s cubic-bezier(.22, .61, .36, 1); }
.fp-lp-gallery-item:hover, .fp-lp-gallery-item:focus-visible { transition: transform .3s ease; }
.fp-lp-gallery-item--s { height: clamp(150px, 17.14vw, 330px); }
.fp-lp-gallery-item--m { height: clamp(210px, 23.85vw, 458px); }
.fp-lp-gallery-item--l { height: clamp(265px, 30.1vw, 578px); }
/* Variante allongee : la tuile prend le ratio 16/9 (hauteur = largeur de colonne
   x 9/16), donc une image 16/9 s'affiche EN ENTIER sans recadrage (ex. Mario
   Kart). Confinee au desktop : en mobile, le carrousel plein ecran reprend la
   main (voir la regle 100vw plus bas). */
.fp-lp-gallery-item--wide { height: auto; aspect-ratio: 16 / 9; }
/* Masonry PARFAIT : les colonnes (items du grid) s'etirent deja a la meme
   hauteur (align-items:stretch par defaut). On fait remplir le DERNIER item de
   chaque colonne pour que les BAS des 3 colonnes tombent pile au meme niveau,
   meme quand une colonne contient la tuile 16/9 (plus courte). Cette tuile est
   en pied de la colonne LA PLUS HAUTE : elle n'a donc jamais d'espace a remplir
   et conserve exactement son ratio 16/9. Desktop uniquement (le mobile est un
   carrousel plein ecran : y appliquer flex-grow casserait les diapos 100vw). */
@media (min-width: 721px) {
  .fp-lp-gallery-col > .fp-lp-gallery-item:last-child { flex-grow: 1; }
}
.fp-lp-gallery-item {
  position: relative; display: block; width: 100%; margin: 0; padding: 0;
  border: 0; background: none; cursor: pointer; border-radius: 0; overflow: hidden;
  line-height: 0;
}
.fp-lp-gallery-item:hover, .fp-lp-gallery-item:focus-visible { transform: translateY(-4px); }
/* Lueur qui traverse l'image au survol. */
.fp-lp-gallery-item::after {
  content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(115deg, transparent 32%, rgba(255, 255, 255, .32) 50%, transparent 68%);
  transform: translateX(-130%); transition: none;
}
.fp-lp-gallery-item:hover::after, .fp-lp-gallery-item:focus-visible::after {
  transform: translateX(130%); transition: transform .8s ease;
}
.fp-lp-gallery-item img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 0; transition: transform .5s ease; }
.fp-lp-gallery-item:hover img, .fp-lp-gallery-item:focus-visible img { transform: scale(1.045); }
/* Pagination a points du carrousel mobile : masquee sur desktop (maconnerie). */
.fp-lp-gallery-dots { display: none; }
@media (prefers-reduced-motion: reduce) {
  .fp-lp-gallery-item, .fp-lp-gallery-item img { transition: none; }
  .fp-lp-gallery-item:hover, .fp-lp-gallery-item:focus-visible { transform: none; }
  .fp-lp-gallery-item:hover img, .fp-lp-gallery-item:focus-visible img { transform: none; }
  .fp-lp-gallery-dot { transition: none; }
}
/* ------ Carrousel mobile (demande client « full wiss ») ------
   La maconnerie 3 colonnes du desktop devient un rail horizontal plein ecran :
   les 9 photos defilent une par une (scroll-snap), hauteur UNIFORME (plus de
   S/M/L). La structure imbriquee (grid > col > item) est conservee : le rail
   et les colonnes passent en flex-row, chaque item fait 100vw. Le clic ouvre
   toujours la visionneuse (data-fp-lp-lightbox-open intact). */
@media (max-width: 720px) {
  /* Vrai plein largeur : on neutralise le .fp-wrap (padding lateral + max-width)
     de la galerie pour que le rail touche les deux bords de l'ecran. */
  .fp-lp-gallery .fp-wrap { padding-left: 0; padding-right: 0; max-width: none; }
  .fp-lp-gallery-grid {
    display: flex; flex-direction: row;
    overflow-x: auto; overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    gap: 0; scrollbar-width: none;
  }
  .fp-lp-gallery-grid::-webkit-scrollbar { display: none; }
  /* Les colonnes se suivent en ligne et gardent leur largeur de contenu. */
  .fp-lp-gallery-col { display: flex; flex-direction: row; flex: 0 0 auto; gap: 0; }
  /* Hauteur uniforme : chaque photo occupe un ecran plein. */
  .fp-lp-gallery-item,
  .fp-lp-gallery-item--s, .fp-lp-gallery-item--m, .fp-lp-gallery-item--l, .fp-lp-gallery-item--wide {
    flex: 0 0 100vw; width: 100vw;
    height: clamp(380px, 108vw, 560px);
    scroll-snap-align: center; scroll-snap-stop: always;
    border-radius: 0;
  }
  /* La variante allongee redevient une diapo plein ecran comme les autres sur
     mobile (hauteur definie -> aspect-ratio neutralise). */
  .fp-lp-gallery-item--wide { aspect-ratio: auto; }
  /* Reveal : en rail horizontal, les items situes a droite ne sont pas dans le
     viewport ; l'IntersectionObserver du reveal (qui raisonne sur les DEUX
     axes) ne les revelerait pas -> ils resteraient a opacity 0. On force donc
     la galerie visible en mobile : l'apparition se fait par le defilement du
     carrousel, pas par le fondu vertical. */
  .fp-lp-gallery-item.fp-lp-reveal { opacity: 1 !important; transform: none !important; }
  /* Points : base jaune, actif vert par-dessus (demande client). */
  .fp-lp-gallery-dots { display: flex; justify-content: center; gap: 8px; padding: 18px 0 0; }
  .fp-lp-gallery-dot {
    width: 8px; height: 8px; border-radius: 50%; padding: 0; border: 0; cursor: pointer;
    background: var(--lp-jaune); opacity: .9;
    transition: background .25s ease, transform .25s ease;
  }
  .fp-lp-gallery-dot.is-active { background: var(--lp-vert); transform: scale(1.25); }
}

.fp-lp-lightbox { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 24px; }
.fp-lp-lightbox[hidden] { display: none; }
.fp-lp-lightbox-backdrop { position: absolute; inset: 0; background: color-mix(in srgb, var(--fp-dark) 85%, transparent); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); }
.fp-lp-lightbox-dialog { position: relative; z-index: 1; display: flex; align-items: center; gap: 18px; max-width: 100%; }
.fp-lp-lightbox-figure { margin: 0; display: flex; flex-direction: column; align-items: center; gap: 12px; }
.fp-lp-lightbox-img { max-width: min(80vw, 1100px); max-height: 78vh; border-radius: 14px; object-fit: contain; }
.fp-lp-lightbox-count { color: var(--fp-white); font-size: .85rem; opacity: .85; }
.fp-lp-lightbox-close {
  position: absolute; top: -52px; right: 0; width: 42px; height: 42px; border-radius: 50%;
  background: color-mix(in srgb, var(--fp-white) 14%, transparent); color: var(--fp-white);
  border: 1px solid color-mix(in srgb, var(--fp-white) 30%, transparent);
  display: flex; align-items: center; justify-content: center; cursor: pointer;
}
.fp-lp-lightbox-prev, .fp-lp-lightbox-next {
  flex: 0 0 auto; width: 48px; height: 48px; border-radius: 50%; cursor: pointer;
  background: color-mix(in srgb, var(--fp-white) 14%, transparent); color: var(--fp-white);
  border: 1px solid color-mix(in srgb, var(--fp-white) 30%, transparent);
  display: flex; align-items: center; justify-content: center;
}
.fp-lp-lightbox-prev:hover, .fp-lp-lightbox-next:hover, .fp-lp-lightbox-close:hover { background: color-mix(in srgb, var(--fp-white) 26%, transparent); }
.fp-lp-lightbox-prev svg, .fp-lp-lightbox-next svg { width: 20px; height: 20px; }
@media (max-width: 720px) {
  /* Visionneuse mobile (demande client) : image PLEINE LARGEUR en haut, fleches
     cote a cote EN BAS DE L'ECRAN (pas collees sous l'image) via une grille
     dont la rangee image prend tout l'espace (1fr) et la rangee des fleches est
     ancree en bas (auto). Ainsi, image horizontale ou verticale, les fleches
     restent toujours visibles en bas. */
  .fp-lp-lightbox { padding: 12px; align-items: stretch; }
  .fp-lp-lightbox-dialog {
    display: grid; width: 100%; height: 100%; max-width: none; gap: 10px;
    grid-template-columns: 1fr 1fr; grid-template-rows: 1fr auto;
    grid-template-areas: "img img" "prev next";
    align-items: center; justify-items: center;
  }
  .fp-lp-lightbox-figure { grid-area: img; width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; gap: 8px; margin: 0; overflow: hidden; }
  .fp-lp-lightbox-img { max-width: 100%; max-height: 100%; width: auto; height: auto; }
  .fp-lp-lightbox-prev { grid-area: prev; position: static; transform: none; }
  .fp-lp-lightbox-next { grid-area: next; position: static; transform: none; }
  .fp-lp-lightbox-prev, .fp-lp-lightbox-next { width: 56px; height: 56px; }
  .fp-lp-lightbox-close { top: 6px; right: 6px; }
}

/* ==========================================================================
   RESTAURATION
   ========================================================================== */
.fp-lp-resto { padding: 96px 0; }
.fp-lp-resto-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: center; }
.fp-lp-resto-on { display: block; width: 72px; height: 50px; object-fit: contain; object-position: left center; margin: 0 0 8px; }
.fp-lp-resto-text h2 { font-family: var(--lp-font-titres); font-weight: 600; text-transform: none; font-size: clamp(1.8rem, 2.865vw, 3.44rem); line-height: 1.2; color: var(--fp-secondary-dark); margin-bottom: 18px; }
.fp-lp-resto-text p:not(.fp-lp-pill) { color: var(--fp-secondary-dark); font-family: var(--fp-font-body); font-weight: 500; font-size: clamp(1rem, 1.01vw, 1.25rem); line-height: 1.35; max-width: clamp(320px, 35.5vw, 550px); }
.fp-lp-resto-photo img { width: 100%; height: 100%; min-height: 340px; aspect-ratio: 833 / 528; object-fit: cover; border-radius: clamp(28px, 2.9vw, 56px); }
@media (max-width: 900px) {
  .fp-lp-resto-grid { grid-template-columns: 1fr; gap: 28px; }
  .fp-lp-resto-photo { order: -1; }
}
@media (max-width: 720px) {
  /* Padding-top reduit pour rapprocher de la galerie du dessus (96px -> 48px). */
  .fp-lp-resto { padding: 48px 0 64px; }
  /* Meme traitement que « c'est ici » : image plus large (moins de gouttiere),
     titre plus grand, corps plus grand et un cran plus gras (500 -> 600). */
  .fp-lp-resto-grid { padding-left: 10px; padding-right: 10px; }
  .fp-lp-resto-text h2 { font-size: clamp(2.3rem, 9.4vw, 3.15rem); }
  .fp-lp-resto-text p:not(.fp-lp-pill) { max-width: none; font-weight: 500; font-size: 20px; line-height: 24px; }
  /* Tout centre : puce, icone ON, titre, textes. */
  .fp-lp-resto-text { display: flex; flex-direction: column; align-items: center; text-align: center; }
  /* Icone ON recentree (desktop : object-position left). */
  .fp-lp-resto-on { object-position: center; margin: 0 auto 8px; }
  /* Puce plus lisible : ~+12% de taille, une graisse en moins (600 -> 500). */
  /* Chip restauration STRICTEMENT identique a la puce « Magic Parc - Rennaz (VD) »
     (meme taille, meme graisse 600, meme radius) - demande client. */
  /* Titre « On mange avant ou apres ? » sur 2 lignes (spans en bloc). */
  .fp-lp-resto-text h2 span { display: block; }
  /* Image resto forcee identique a ici (bat le min-height:340 de la regle de base, plus bas dans le fichier). */
  .fp-lp-resto-photo img { width: 100%; height: auto; min-height: 0; max-height: none; aspect-ratio: 343 / 382; }
  /* Image moins haute (min-height 340px -> 240px, plafonnee a ~46svh). */
  /* Un peu plus de border-radius sur les images (c'est ici + resto) en mobile. */
  .fp-lp-ici-photo, .fp-lp-ici-photo img, .fp-lp-resto-photo, .fp-lp-resto-photo img { border-radius: 56px; }
}

/* ==========================================================================
   CARTE FINALE / CTA (rose local, pose en inline sur <body>)
   ========================================================================== */
.fp-lp-final { padding: 40px 0 96px; }
/* Specs XD : carte 1620x539 base 1920, fond primary, radius 55. */
.fp-lp-final-inner { background: var(--fp-primary); color: var(--fp-white); border-radius: clamp(32px, 2.86vw, 55px); min-height: clamp(360px, 28vw, 560px); justify-content: center; padding: 60px 40px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 22px; }
.fp-lp-final-inner h2 { display: flex; flex-direction: column; gap: 0; margin: 0; }
/* Ligne 1 en casse standard (retour client), BIENTOT reste en majuscules. */
.fp-lp-final-line1 { font-family: var(--lp-font-titres); font-weight: 600; text-transform: none; font-size: clamp(1.6rem, 2.865vw, 3.44rem); line-height: 1.45; }
.fp-lp-final-line2 { font-family: var(--lp-font-titres); font-weight: 600; text-transform: uppercase; font-size: clamp(1.6rem, 2.865vw, 3.44rem); line-height: 1.45; }
/* Largeur du texte calee legerement au-dessus du titre (652px mesures a 1920). */
.fp-lp-final-inner p { font-family: var(--fp-font-body); font-weight: 400; font-size: clamp(1.05rem, 1.06vw, 1.3rem); line-height: 1.28; max-width: clamp(300px, 44vw, 840px); opacity: 1; margin: 0; }
.fp-lp-final-pledge { font-weight: 600; }
/* Specs XD : bouton rose FF7ABC exact (fidelite maquette assumee par le
   client), radius 16, ~77px de haut. */
.fp-lp-cta-btn {
  display: inline-flex; align-items: center; justify-content: center; margin-top: 10px;
  padding: 16px 46px; border-radius: 16px; background: var(--lp-rose-cta, var(--lp-rose)); color: var(--fp-white);
  font-family: var(--fp-font-heading); font-weight: 500; font-size: 1.45rem; text-transform: uppercase; letter-spacing: .04em;
  transition: transform .25s ease, box-shadow .25s ease, background .25s ease;
}
.fp-lp-cta-btn:hover { transform: translateY(-2px); background: color-mix(in srgb, var(--lp-rose) 55%, black); }
@media (prefers-reduced-motion: reduce) { .fp-lp-cta-btn:hover { transform: none; } }
@media (max-width: 720px) {
  /* Carte finale en plein largeur (plus d'encadre) : bords carres, padding
     lateral resserre, moins de marge en haut. .fp-lp-final-inner porte aussi
     .fp-wrap : max-width none le fait deborder jusqu'aux deux bords. */
  .fp-lp-final { padding: 20px 0 0; }
  .fp-lp-final-inner { border-radius: 0; padding: 40px 20px; max-width: none; }
  /* Titre un peu plus grand (~+15% sur le plancher 1.6rem). */
  .fp-lp-final-line1, .fp-lp-final-line2 { font-size: clamp(2.1rem, 7.4vw, 2.65rem); }
  .fp-lp-final-line1 span { display: block; }
  /* Paragraphe : largeur de contenu resserree. */
  .fp-lp-final-inner p { max-width: 340px; font-size: 20px; font-weight: 500; line-height: 24px; }
  /* Bouton : texte plus grand (~+15%), padding fortement reduit (22px 46px). */
  .fp-lp-cta-btn { font-size: 1.45rem; padding: 11px 30px; border-radius: 12px; }
}

/* ==========================================================================
   FOOTER SPECIFIQUE LP
   ========================================================================== */
/* Specs XD : footer fond 014C45 (--lp-vert), 3 colonnes : adresse a gauche
   (icone localisation, Aeonik Medium 25/30), logo + tagline 30/36 + reseaux au
   centre (Facebook plus grand), contact a droite (bouton MENTHE radius 27,
   texte vert tres fonce). */
.fp-lp-footer { position: relative; background: var(--lp-vert, var(--fp-secondary)); color: var(--fp-white); padding: 64px 0 0; }

.fp-lp-footer-logo { font-family: var(--fp-font-display); text-transform: uppercase; font-weight: 400; font-size: clamp(2.6rem, 5.2vw, 6.25rem); line-height: 1; margin: 0; }
.fp-lp-footer-tag { font-family: var(--fp-font-body); font-weight: 500; font-size: clamp(1rem, 1.34vw, 1.6rem); line-height: 1.2; opacity: 1; margin: 18px 0 0; }
.fp-lp-footer-grid { display: grid; grid-template-columns: 1fr auto 1fr; align-items: stretch; gap: 32px; padding-bottom: 48px; }
.fp-lp-footer-col-adresse { display: flex; flex-direction: column; align-items: flex-start; }
.fp-lp-footer-place, .fp-lp-footer-site { display: grid; grid-template-columns: clamp(20px, 1.6vw, 28px) 1fr; column-gap: 14px; }
.fp-lp-footer-place { align-items: start; }
.fp-lp-footer-site { align-items: center; margin: 24px 0 0; margin-top: auto; padding-top: 24px; font-weight: 400; font-size: clamp(.95rem, 1.08vw, 1.3rem); line-height: 1.2; }
.fp-lp-footer-col-adresse, .fp-lp-footer-col-contact { padding-top: clamp(40px, 6.25vw, 120px); }
img.fp-lp-footer-pin { width: auto; height: clamp(20px, 1.5vw, 29px); display: block; justify-self: start; }
.fp-lp-footer-address { margin: 0; opacity: 1; font-weight: 400; font-size: clamp(.95rem, 1.08vw, 1.3rem); line-height: 1.3; white-space: nowrap; }
.fp-lp-footer-globe { display: inline-flex; justify-self: start; }
.fp-lp-footer-globe svg { width: clamp(13px, .9vw, 17px); height: auto; }
.fp-lp-footer-col-centre { text-align: center; display: flex; flex-direction: column; align-items: center; }
.fp-lp-footer-socials { display: flex; gap: 16px; align-items: center; justify-content: center; margin-top: auto; padding-top: 26px; }
.fp-lp-footer-social { display: inline-flex; align-items: center; justify-content: center; width: clamp(40px, 2.7vw, 52px); height: clamp(40px, 2.7vw, 52px); border: 1.5px solid var(--fp-white); border-radius: 50%; color: var(--fp-white); transition: transform .2s ease, opacity .2s ease; }
.fp-lp-footer-social:hover { transform: translateY(-2px); opacity: .85; }
.fp-lp-footer-social img { width: 54%; height: 54%; object-fit: contain; }
.fp-lp-footer-col-contact { display: flex; flex-direction: column; align-items: flex-end; text-align: right; gap: 16px; }
.fp-lp-footer-col-contact p { margin: 0; opacity: 1; font-weight: 400; font-size: clamp(.95rem, 1.08vw, 1.3rem); line-height: 1.25; max-width: 20ch; }
.fp-lp-footer-contact-btn {
  display: inline-flex; padding: 8px 30px; border-radius: 27px; background: var(--lp-menthe, var(--fp-accent)); color: var(--fp-secondary-dark);
  margin-top: auto;
  font-family: var(--fp-font-body); font-weight: 700; font-size: clamp(.85rem, 1vw, 1.15rem); text-transform: none; letter-spacing: 0;
  transition: transform .2s ease;
}
.fp-lp-footer-contact-btn:hover { transform: translateY(-2px); }
@media (prefers-reduced-motion: reduce) { .fp-lp-footer-contact-btn:hover { transform: none; } }
.fp-lp-footer-bottom { background: var(--fp-secondary-dark); }
/* padding-top/bottom SEULEMENT : un raccourci padding ecraserait le padding
   lateral du .fp-wrap partage (copyright desaligne des colonnes, constate). */
.fp-lp-footer-bottom-inner { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; padding-top: 26px; padding-bottom: 26px; font-size: .95rem; opacity: .9; }
.fp-lp-footer-credit { display: block; margin-top: 5px; font-size: .74rem; opacity: .75; }
.fp-lp-footer-credit a:hover { opacity: .8; }
.fp-lp-footer-bottom-inner p { margin: 0; }
.fp-lp-footer-legal { display: flex; flex-wrap: wrap; gap: 6px 18px; }
.fp-lp-footer-legal a:hover { opacity: .8; }
@media (min-width: 721px) {
  /* Footer PC : tout le texte un cran plus gras SAUF le bloc contact
     ("Une question..." degrasse a la demande du client). Aeonik n'a que le
     Regular auto-heberge : on epaissit au trait. Mobile inchange. */
  .fp-lp-footer-address,
  .fp-lp-footer-site { font-weight: 500; }
  /* Tagline sous le logo : un peu moins grasse (demande client). */
  .fp-lp-footer-tag { font-weight: 400; }
  /* Contenu du footer aligne sur les bords du conteneur vert du CTA :
     on annule le gutter du .fp-wrap pour que le texte gauche/droite touche
     les memes bords que le conteneur au-dessus. */
  .fp-lp-footer-grid, .fp-lp-footer-bottom-inner { padding-left: 0; padding-right: 0; }
  /* Moins de padding en haut de la section footer. */
  .fp-lp-footer { padding-top: 40px; }
  /* Colonne centre : logo + tagline rapproches des reseaux (reseaux gardes en
     bas). Le logo prend la marge auto -> le groupe descend, l'ecart
     tagline/reseaux se limite au padding-top des reseaux. */
  .fp-lp-footer-logo { margin-top: auto; }
  .fp-lp-footer-socials { margin-top: 0; }
}
@media (max-width: 720px) {
  /* Ordre mobile demande par le client (colonnes inversees) : la colonne
     centre (logo + tagline + reseaux) passe en premier, puis contact,
     puis adresse. Reordonnancement via order (le conteneur reste en grille
     a une colonne). */
  .fp-lp-footer-grid { grid-template-columns: 1fr; gap: 36px; text-align: center; }
  .fp-lp-footer-col-centre { order: 1; }
  .fp-lp-footer-col-contact { order: 2; }
  .fp-lp-footer-col-adresse { order: 3; }

  /* 1. Logo tres grand, presque pleine largeur. */
  .fp-lp-footer-logo img { width: min(78vw, 380px); }
  /* 2. Tagline un peu plus grande. */
  .fp-lp-footer-tag { font-size: 1.32rem; }
  .fp-lp-footer-tag-place { text-transform: uppercase; }
  /* 3. Reseaux un peu plus larges : cercles agrandis et gap augmente. */
  .fp-lp-footer-socials { justify-content: center; gap: 38px; padding-top: 24px; }
  .fp-lp-footer-social { width: 50px; height: 50px; }

  /* 4. Bloc contact centre, texte + bouton plus grands. */
  .fp-lp-footer-col-contact { align-items: center; text-align: center; }
  .fp-lp-footer-col-contact p { font-size: 1.2rem; max-width: 22ch; }
  .fp-lp-footer-contact-btn { font-size: 1.18rem; padding: 10px 36px; }

  /* 5. Adresse + site : sans icones, texte centre remis en flux normal
     (on annule la grille a colonne d'icone du desktop). */
  .fp-lp-footer-col-adresse { text-align: center; align-items: center; }
  .fp-lp-footer-place, .fp-lp-footer-site { display: block; text-align: center; }
  img.fp-lp-footer-pin, .fp-lp-footer-globe { display: none; }
  .fp-lp-footer-address { white-space: normal; font-size: 1.15rem; }
  .fp-lp-footer-site { margin-top: 18px; padding-top: 0; font-size: 1.15rem; }

  /* 6-7. Bas de footer : TOUS les elements empiles un par un et centres, un
     peu plus grands ; liens legaux chacun sur sa ligne, AVANT le copyright. */
  .fp-lp-footer-bottom-inner { flex-direction: column; align-items: center; text-align: center; gap: 8px; font-size: 1rem; }
  .fp-lp-footer-legal { order: 1; flex-direction: column; align-items: center; justify-content: center; gap: 10px; }
  .fp-lp-footer-bottom-inner p { order: 2; text-align: center; }
  .fp-lp-footer-credit { font-size: .92rem; }
}

/* La pilule Restauration utilise desormais la classe partagee .fp-lp-pill
   (voir plus haut) : plus de styles dedies ici. */
