/* ============================================
   MAIN — Héloïse Miermon · Thérapie Cranio Sacrale
   ============================================ */

/* ---- Base ---- */
body {
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  color: var(--color-text);
  background: var(--color-bg);
}

h1, h2, h3, h4 { font-family: var(--font-heading); font-weight: 600; letter-spacing: -0.005em; }
em { font-style: italic; }
strong { font-weight: 600; }
p { max-width: 68ch; }

::selection { background: var(--color-accent); color: #fff; }

/* ---- Skip link ---- */
.skip-link {
  position: absolute; left: 16px; top: -60px;
  background: var(--color-dark); color: var(--color-bg);
  padding: 10px 18px; border-radius: var(--radius-sm);
  z-index: 2000; transition: top var(--t-hover) var(--ease);
}
.skip-link:focus { top: 16px; }

/* ---- Focus ---- */
a:focus-visible, button:focus-visible, input:focus-visible,
textarea:focus-visible, select:focus-visible, summary:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--color-primary-strong);
  outline-offset: 2px;
  border-radius: 4px;
}

/* ---- Layout ---- */
.container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: 40px; }
.container--narrow { max-width: var(--container-narrow); }
.container--extra { max-width: var(--container-extra); }

.section { padding-block: var(--section-pad); position: relative; }
.section--bg { background: var(--color-bg); }
.section--alt { background: linear-gradient(180deg, var(--color-bg-alt) 0%, #FFF8F0 100%); }
.section--dark {
  background:
    radial-gradient(circle at 88% 12%, rgba(232, 181, 74,0.14), transparent 46%),
    radial-gradient(circle at 8% 92%, rgba(255,199,156,0.22), transparent 42%),
    var(--color-soft);
  color: var(--color-text);
}

/* ---- Transitions calmes : plus de séparateur en vague (rendu éditorial) ----
   La séparation se fait par l'alternance des fonds + les grands blancs.
   Signature organique unique conservée = coins asymétriques des images. */
.section:not(.hero):not(.legal-hero)::before { content: none; }

/* ============================================
   PARALLAXE — Bande citation fond fixé (CSS pur)
   ============================================ */
/* Section avec image fixe en arrière-plan (parallax) — contenu sur dessus */
.section--parallax {
  position: relative;
  background-size: cover;
  background-position: center;
  background-attachment: scroll; /* ex-fixed : évite le repaint plein cadre à chaque frame de scroll (fluidité) */
  background-color: var(--color-primary-strong);
  isolation: isolate;
  overflow: hidden;
}
.section--parallax::before {
  content: ""; position: absolute; inset: 0; z-index: 0;
  background: linear-gradient(180deg, rgba(22,30,34,0.14) 0%, rgba(22,30,34,0.22) 100%);
  pointer-events: none;
}
.section--parallax .section-header--light .section-title,
.section--parallax .section-header--light .section-intro,
.section--parallax .section-header--light .section-kicker {
  text-shadow: 0 2px 14px rgba(33, 52, 59, 0.35);
}
.section--parallax > .container { position: relative; z-index: 1; }
.section--parallax .section-header--light .section-kicker { color: rgba(251,250,247,0.78); }
.section--parallax .section-header--light .section-title { color: #fff; }
.section--parallax .section-header--light .section-title em { color: var(--color-secondary); font-style: italic; }
.section--parallax .section-header--light .section-intro { color: rgba(251,250,247,0.88); }
/* Cartes feature en mode "verre" sur fond photo */
.section--parallax .feature-card {
  background: rgba(255,255,255,0.94);
  -webkit-backdrop-filter: blur(6px);
          backdrop-filter: blur(6px);
  border: 1px solid rgba(255,255,255,0.18);
}
@media (max-width: 1024px) {
  .section--parallax { background-attachment: scroll; }
}
/* Image spécifique : section "À quels maux" — soin enfant */
.section--parallax-maux { background-image: url('../images/soin-enfant.png'); }
/* Voile neutre léger (lisibilité du titre) — plus de teinte bleue */
.section--parallax-maux::before {
  background: linear-gradient(180deg, rgba(22,30,34,0.22) 0%, rgba(22,30,34,0.30) 100%);
}

/* ============================================
   MAUX — 3 cartes thématiques dépliantes (verre dépoli + bouton « En voir plus »)
   Accordéon sur TOUTES tailles : une carte ouverte referme les autres.
   ============================================ */
.maux-themes {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 22px;
  align-items: start;
  margin-top: 12px;
}
.maux-card {
  --maux-accent: var(--color-primary);
  position: relative;
  display: flex; flex-direction: column;
  border-radius: 28px;
  background: rgba(255,255,255,0.80);
  -webkit-backdrop-filter: blur(16px) saturate(1.15);
          backdrop-filter: blur(16px) saturate(1.15);
  border: 1px solid rgba(255,255,255,0.55);
  box-shadow: 0 28px 60px -28px rgba(11,53,59,0.55), inset 0 1px 0 rgba(255,255,255,0.6);
  overflow: hidden;
  transition: box-shadow 0.4s var(--ease);
}
.maux-card.is-open { box-shadow: 0 36px 70px -26px rgba(11,53,59,0.62), inset 0 1px 0 rgba(255,255,255,0.7); }
/* Accents harmonisés dans la même famille turquoise (variation douce) */
.maux-card--t1 { --maux-accent: var(--color-primary); }
.maux-card--t2 { --maux-accent: var(--color-logo); }
.maux-card--t3 { --maux-accent: var(--color-primary-strong); }
.maux-card__head {
  display: flex; align-items: center; gap: 16px;
  padding: 24px 24px 18px;
}
.maux-card__icon {
  flex-shrink: 0;
  width: 50px; height: 50px; border-radius: 16px;
  display: grid; place-items: center;
  font-size: 23px; color: var(--maux-accent);
  background: color-mix(in srgb, var(--maux-accent) 13%, #fff);
  border: 1px solid color-mix(in srgb, var(--maux-accent) 32%, transparent);
}
.maux-card__heading { display: flex; flex-direction: column; gap: 3px; flex: 1; min-width: 0; }
.maux-card__title { font-family: var(--font-heading); font-size: 1.2rem; font-weight: 600; color: var(--color-text); line-height: 1.16; }
.maux-card__count { font-size: 0.76rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--color-text-muted); }
/* Corps replié par défaut (JS gère l'ouverture en réglant max-height inline) */
.maux-themes--js .maux-card__body {
  max-height: 0; overflow: hidden;
  transition: max-height 0.45s var(--ease);
}
.maux-card__body { padding: 0 24px; }
.maux-pills { display: flex; flex-wrap: wrap; gap: 9px; padding-bottom: 6px; }
.maux-pill {
  position: relative;
  font-size: 0.88rem; line-height: 1.3;
  padding: 8px 14px 8px 26px;
  border-radius: var(--radius-pill);
  background: rgba(255,255,255,0.72);
  border: 1px solid var(--color-border);
  color: var(--color-text);
}
.maux-pill::before {
  content: ""; position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
  width: 6px; height: 6px; border-radius: 50%; background: var(--maux-accent);
}
/* Bouton « En voir plus » */
.maux-card__toggle {
  margin: 14px 24px 22px; align-self: flex-start;
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 0.86rem; font-weight: 600; letter-spacing: 0.01em;
  color: var(--maux-accent);
  background: transparent; border: 0; cursor: pointer;
  padding: 4px 0;
  transition: gap 0.25s var(--ease), opacity 0.2s var(--ease);
}
.maux-card__toggle:hover { gap: 11px; }
.maux-card__toggle i { font-size: 1.05em; transition: transform 0.35s var(--ease); }
.maux-card.is-open .maux-card__toggle i { transform: rotate(180deg); }
@media (max-width: 1024px) {
  .maux-themes { grid-template-columns: 1fr 1fr; gap: 16px; }
}
@media (max-width: 720px) {
  .maux-themes { grid-template-columns: 1fr; gap: 14px; }
}

.fixed-quote {
  position: relative;
  min-height: 72vh;
  background-size: cover;
  background-position: var(--quote-pos, center);
  background-attachment: scroll; /* ex-fixed : évite le repaint plein cadre à chaque frame de scroll (fluidité) */
  background-color: var(--color-primary);
  display: flex; align-items: center;
  isolation: isolate;
  overflow: hidden;
}
@media (max-width: 768px) {
  .fixed-quote { background-position: var(--quote-pos-mobile, var(--quote-pos, center)); }
}
.fixed-quote::after {
  content: ""; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(120deg, rgba(22,30,34,0.50) 0%, rgba(22,30,34,0.30) 100%);
  pointer-events: none;
}
.fixed-quote .container { position: relative; z-index: 2; }
.fixed-quote blockquote { color: #fff; max-width: 760px; margin: 0; padding: 0; text-shadow: 0 2px 16px rgba(11,53,59,0.35); }
.fixed-quote blockquote .k {
  display: block; font-size: 0.78rem;
  letter-spacing: 0.14em; text-transform: uppercase;
  color: rgba(255,255,255,0.92); margin-bottom: 18px; font-weight: 600;
}
.fixed-quote blockquote p {
  font-family: var(--font-heading); font-style: italic;
  font-size: clamp(1.6rem, 3vw, 2.4rem); line-height: 1.28;
  max-width: 24ch;
}
.fixed-quote cite {
  display: block; margin-top: 22px;
  font-style: normal; font-size: 0.92rem; color: rgba(251,250,247,0.78);
}
@media (max-width: 1024px) {
  .fixed-quote { background-attachment: scroll; min-height: 52vh; }
}

/* ============================================
   PARALLAXE — Drift horizontal (bande de photos qui glisse)
   ============================================ */
.drift-band { position: relative; overflow: hidden; padding-block: 28px; }
.drift-band__track {
  display: flex; gap: 16px;
  will-change: transform;
  padding-inline: 24px;
}
.drift-band__track > .di {
  flex: 0 0 340px;
  aspect-ratio: 4/3;
  border-radius: 22px; overflow: hidden;
  background: var(--color-soft);
}
.drift-band__track > .di img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (max-width: 768px) {
  .drift-band__track > .di { flex: 0 0 260px; }
}

/* ============================================
   SECTION SIDE — Header latéral + grille de cartes
   (Maquette A — pour les sections « Indications » des pages soins)
   ============================================ */
.section--side {
  padding-block: 72px;
}
.section--side > .container {
  width: 100%;
  display: grid;
  grid-template-columns: 38fr 62fr;
  grid-template-areas:
    "head  cards"
    "cta   cards";
  gap: 24px 56px;
}
.section--side .section-header { grid-area: head; align-self: end; margin-bottom: 0; max-width: none; }
.section--side .feature-grid { grid-area: cards; align-self: center; grid-template-columns: repeat(2, 1fr); gap: 12px; }
.section--side .feature-grid--3 { grid-template-columns: repeat(2, 1fr); }
.section--side > .container > .actions { grid-area: cta; margin-top: 0 !important; align-self: start; }
.section--side .section-title { font-size: 2.1rem; line-height: 1.15; }
.section--side .section-intro { font-size: 1rem; margin-top: 14px; }
.section--side .feature-card { padding: 0; }
.section--side .feature-card.is-fold .feature-card__head { padding: 14px 18px; gap: 12px; }
.section--side .feature-card.is-fold .feature-card__icon { width: 40px; height: 40px; font-size: 22px; margin: 0; }
.section--side .feature-card.is-fold .feature-card__title { font-size: 1rem; }
.section--side .feature-card.is-fold .feature-card__toggle { width: 26px; height: 26px; font-size: 0.85rem; }
.section--side .feature-card.is-fold .feature-card__text { padding: 0 18px; }
.section--side .feature-card.is-fold.is-open .feature-card__text { padding-bottom: 18px; }
@media (max-width: 1024px) {
  .section--side { padding-block: 56px; }
  .section--side > .container { display: block; }
  .section--side .section-header { margin-bottom: var(--section-gap); }
  .section--side .feature-grid, .section--side .feature-grid--3 { grid-template-columns: 1fr; display: grid; margin-top: 0; }
  .section--side > .container > .actions { margin-top: 32px !important; }
}

main { display: block; }

/* ---- Section header ---- */
.section-header { margin-bottom: var(--section-gap); max-width: 760px; }
.section-header--center { margin-inline: auto; text-align: center; }
.section-kicker {
  display: inline-block;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-primary-strong);
  margin-bottom: 18px;
}
.section--dark .section-kicker { color: var(--color-accent); }
.section-title { font-size: var(--fs-h2); line-height: 1.08; letter-spacing: -0.02em; }
.section-intro {
  margin-top: 18px;
  color: var(--color-text-muted);
  font-size: var(--fs-large);
  line-height: 1.55;
  max-width: 62ch;
}
.section--dark .section-intro { color: var(--color-text-muted); }

/* ---- Buttons ---- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  padding: 14px 30px;
  font-size: var(--fs-body); font-weight: 500;
  border-radius: var(--radius-pill);
  min-height: 48px;
  transition: transform var(--t-hover) var(--ease),
              box-shadow var(--t-hover) var(--ease),
              background var(--t-hover) var(--ease),
              color var(--t-hover) var(--ease);
  cursor: pointer; text-align: center; white-space: nowrap;
}
.btn i { font-size: 1.15em; }
.btn:focus-visible {
  outline: 3px solid var(--color-accent);
  outline-offset: 3px;
}
.btn--primary { background: var(--color-primary); color: var(--color-on-primary); font-weight: 600; }
.btn--primary:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(44, 185, 198,0.28); }
.btn--secondary {
  background: var(--color-bg);
  color: var(--color-primary-strong);
  border: 1.5px solid var(--color-primary-strong);
  font-weight: 600;
}
.btn--secondary:hover { transform: translateY(-2px); background: var(--color-primary-strong); color: var(--color-on-primary); border-color: var(--color-primary-strong); }
.btn--ghost {
  background: transparent;
  color: var(--color-primary-strong);
  border: 1.5px solid var(--color-primary-strong);
  font-weight: 600;
}
.btn--ghost:hover { background: var(--color-primary); color: var(--color-on-primary); border-color: var(--color-primary); transform: translateY(-2px); }
.btn--inverted { background: var(--color-bg); color: var(--color-primary-strong); }
.btn--inverted:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,0.22); }
.btn--ghost-inverted {
  background: transparent; color: var(--color-bg);
  border: 1.5px solid rgba(251,250,247,0.55);
}
.btn--ghost-inverted:hover { background: var(--color-bg); color: var(--color-primary-strong); transform: translateY(-2px); }

.link-arrow {
  display: inline-flex; align-items: center; gap: 8px;
  color: var(--color-primary-strong); font-weight: 500;
  transition: color var(--t-hover) var(--ease);
}
.link-arrow i { transition: transform var(--t-hover) var(--ease); }
.link-arrow:hover { color: var(--color-secondary); }
.link-arrow:hover i { transform: translateX(4px); }

.actions { display: flex; flex-wrap: wrap; gap: 16px; }
.actions--center { justify-content: center; }

/* (Ancien badge glissant supprimé — remplacé par les CTA « objet premium » en fin de fichier) */
.header .btn,
.header .btn:hover,
.header .btn:focus-visible { padding: 11px 22px; }

/* ============================================
   HEADER
   ============================================ */
.header {
  position: fixed; inset: 0 0 auto 0;
  z-index: 1000;
  transition: background var(--t-cross) var(--ease),
              box-shadow var(--t-cross) var(--ease);
}
.header__inner {
  display: flex; align-items: center; gap: 28px;
  height: 78px;
}
.header.is-scrolled,
.header.is-nav-open {
  background: var(--color-bg);
  box-shadow: var(--shadow-header);
}
.logo {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-heading);
  font-size: 1.4rem; font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--color-text);
  transition: color var(--t-hover) var(--ease);
  white-space: nowrap;
}
.logo__mark {
  width: 44px; height: 44px;
  flex-shrink: 0;
  display: inline-block;
  background-color: var(--color-logo);
  background-image: url('../images/logo-blanc.png');
  background-repeat: no-repeat;
  background-position: center;
  background-size: 72% auto;
  border-radius: 10px;
  transition: background-color var(--t-hover) var(--ease), transform var(--t-hover) var(--ease);
}
.logo:hover .logo__mark { background-color: var(--color-primary); transform: scale(1.04); }
.logo:hover { color: var(--color-logo); }
.logo span { color: var(--color-logo); }
@media (max-width: 768px) {
  .logo { font-size: 1.1rem; gap: 8px; }
  .logo__mark { width: 36px; height: 36px; }
}

.nav { display: none; }
.nav__list { display: flex; align-items: center; gap: 30px; }
.nav__link {
  font-size: 0.95rem; font-weight: 500;
  color: var(--color-text);
  position: relative;
  padding-block: 6px;
  transition: color var(--t-hover) var(--ease);
}
.nav__link:hover, .nav__link[aria-current="page"] { color: var(--color-primary-strong); }
.nav__link[aria-current="page"]::after {
  content: ""; position: absolute; left: 0; bottom: 0;
  width: 100%; height: 2px; background: var(--color-accent);
}

/* Dropdown */
.nav__item--has-sub { position: relative; }
.nav__sub-toggle { display: inline-flex; align-items: center; gap: 5px; }
.nav__sub-toggle i { font-size: 0.85em; transition: transform var(--t-hover) var(--ease); }
.nav__submenu {
  position: absolute; top: calc(100% + 14px); left: 50%;
  transform: translateX(-50%) translateY(8px);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-card-hover);
  padding: 10px; min-width: 248px;
  opacity: 0; visibility: hidden;
  transition: opacity var(--t-hover) var(--ease),
              transform var(--t-hover) var(--ease),
              visibility var(--t-hover);
}
.nav__item--has-sub:hover .nav__submenu,
.nav__item--has-sub:focus-within .nav__submenu {
  opacity: 1; visibility: visible;
  transform: translateX(-50%) translateY(0);
}
.nav__item--has-sub:hover .nav__sub-toggle i { transform: rotate(180deg); }
.nav__submenu a {
  display: block; padding: 11px 14px;
  border-radius: 8px; font-size: 0.92rem;
  transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
}
.nav__submenu a:hover { background: var(--color-bg-alt); color: var(--color-primary-strong); }

.header__aside { display: flex; align-items: center; gap: 18px; margin-left: auto; }

.lang-switch { display: flex; align-items: center; gap: 6px; font-size: 0.9rem; }
.lang-switch a { color: var(--color-text-muted); font-weight: 500; transition: color var(--t-hover) var(--ease); }
.lang-switch a:hover { color: var(--color-primary-strong); }
.lang-switch a.is-active { color: var(--color-primary-strong); font-weight: 700; }
.lang-switch span { color: var(--color-border); }

.header .btn { padding: 11px 22px; font-size: 0.92rem; min-height: 44px; }

/* Hamburger — visible sur toutes les tailles d'écran (navbar simplifiée) */
.burger {
  display: flex;
  width: 44px; height: 44px;
  flex-direction: column; justify-content: center; align-items: center; gap: 5px;
  background: transparent; border: 0; cursor: pointer;
  margin-left: auto;
}
.burger span {
  width: 24px; height: 2px; background: var(--color-text);
  border-radius: 2px; transition: transform var(--t-hover) var(--ease),
                                   opacity var(--t-hover) var(--ease);
}
.burger.is-open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.burger.is-open span:nth-child(2) { opacity: 0; }
.burger.is-open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* Mobile nav panel — sert aussi de menu desktop (drawer côté droit) */
.mobile-nav {
  position: fixed; top: 78px; right: 0; bottom: 0;
  width: min(440px, 100%);
  background: var(--color-bg);
  border-left: 1px solid var(--color-border);
  box-shadow: -24px 0 60px rgba(33, 52, 59, 0.08);
  z-index: 999;
  padding: 32px 28px 48px;
  overflow-y: auto;
  transform: translateX(100%);
  transition: transform var(--t-cross) var(--ease);
  visibility: hidden;
}
@media (max-width: 640px) {
  .mobile-nav { width: 100%; border-left: 0; box-shadow: none; }
}
.mobile-nav.is-open { transform: translateX(0); visibility: visible; }
.mobile-nav a { display: block; }
.mobile-nav__link {
  font-family: var(--font-heading);
  font-size: 1.5rem; padding: 14px 0;
  border-bottom: 0.25px solid #F1C338;
}
.mobile-nav__sub {
  max-height: 0; overflow: hidden;
  padding: 0 0 0 16px;
  opacity: 0;
  transition: max-height .35s ease, opacity .25s ease, padding .25s ease;
}
.mobile-nav__sub.is-open { max-height: 480px; padding: 4px 0 12px 16px; opacity: 1; }
.mobile-nav__sub a { font-size: 1rem; padding: 9px 0; color: var(--color-text-muted); }
.mobile-nav__sub a:hover { color: var(--color-primary-strong); }
.mobile-nav__link--has-sub { position: relative; padding-right: 32px; }
.mobile-nav__link--has-sub::after {
  content: ""; position: absolute; right: 4px; top: 50%;
  width: 10px; height: 10px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: translateY(-70%) rotate(45deg);
  transition: transform .3s ease;
  opacity: 0.6;
}
.mobile-nav__link--has-sub.is-expanded::after { transform: translateY(-30%) rotate(-135deg); opacity: 1; }
.mobile-nav .btn { width: 100%; justify-content: center; margin-top: 28px; }
.mobile-nav__lang { display: flex; gap: 14px; margin-top: 24px; align-items: center; }
.mobile-nav__lang a {
  width: 38px; height: 38px; border-radius: 50%;
  display: inline-block; overflow: hidden;
  text-indent: 120%; white-space: nowrap;
  background-size: cover; background-position: center;
  border: 2px solid transparent;
  box-shadow: 0 2px 8px rgba(0,0,0,0.12);
  transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease;
}
.mobile-nav__lang a:hover { transform: scale(1.08); box-shadow: 0 4px 12px rgba(0,0,0,0.18); }
.mobile-nav__lang a.is-active { border-color: var(--color-primary-strong); transform: scale(1.05); }
.mobile-nav__lang a:first-child {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 3 2' preserveAspectRatio='xMidYMid slice'><rect width='1' height='2' fill='%23002654'/><rect x='1' width='1' height='2' fill='%23fff'/><rect x='2' width='1' height='2' fill='%23CE1126'/></svg>");
}
.mobile-nav__lang a:last-child {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60 30' preserveAspectRatio='xMidYMid slice'><rect width='60' height='30' fill='%23012169'/><path d='M0,0 L60,30 M60,0 L0,30' stroke='%23fff' stroke-width='6'/><path d='M0,0 L60,30 M60,0 L0,30' stroke='%23C8102E' stroke-width='4'/><path d='M30,0 L30,30 M0,15 L60,15' stroke='%23fff' stroke-width='10'/><path d='M30,0 L30,30 M0,15 L60,15' stroke='%23C8102E' stroke-width='6'/></svg>");
}

/* ============================================
   STICKY CTA MOBILE
   ============================================ */
.sticky-cta {
  position: fixed; right: 18px; bottom: 18px;
  z-index: 900;
  width: 58px; height: 58px;
  border-radius: 50%;
  background: var(--color-primary);
  color: var(--color-on-primary);
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 8px 24px rgba(31,42,55,0.28);
  opacity: 0; transform: translateY(20px) scale(0.8);
  pointer-events: none;
  transition: opacity var(--t-cross) var(--ease),
              transform var(--t-cross) var(--ease);
}
.sticky-cta i { font-size: 1.6rem; }
.sticky-cta img { width: 34px; height: 34px; object-fit: contain; }
.sticky-cta.is-visible { opacity: 1; transform: translateY(0) scale(1); pointer-events: auto; }
.sticky-cta.is-hidden { opacity: 0; transform: translateY(20px) scale(0.8); pointer-events: none; }

/* ============================================
   FOOTER
   ============================================ */
.footer {
  background:
    radial-gradient(circle at 90% 0%, rgba(232, 181, 74,0.10), transparent 42%),
    linear-gradient(180deg, #FFF8F0 0%, var(--color-bg-alt) 100%);
  color: var(--color-text); padding-block: 104px 40px;
}
.footer__grid {
  display: grid;
  grid-template-columns: 1.8fr 1fr 1fr 1.2fr;
  gap: 64px;
}
.footer__logo { font-family: var(--font-heading); font-size: 1.5rem; font-weight: 600; color: var(--color-text); }
.footer__tagline { margin-top: 16px; color: var(--color-text-muted); font-size: 0.95rem; max-width: 34ch; }
.footer__col-title {
  font-size: var(--fs-small); font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.12em;
  color: var(--color-primary-strong); margin-bottom: 18px;
}
.footer__col a, .footer__contact a, .footer__contact p {
  display: block; color: var(--color-text-muted);
  font-size: 0.95rem; padding-block: 6px;
  transition: color var(--t-hover) var(--ease);
}
.footer__col a:hover, .footer__contact a:hover { color: var(--color-primary-strong); }
.footer__socials { display: flex; gap: 12px; margin-top: 20px; }
.footer__socials a {
  width: 40px; height: 40px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--color-border);
  color: var(--color-primary-strong);
  font-size: 1.15rem;
  transition: background var(--t-hover) var(--ease),
              border-color var(--t-hover) var(--ease),
              color var(--t-hover) var(--ease);
}
.footer__socials a:hover { background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
.footer__badges { display: flex; gap: 10px; margin-top: 22px; }
.footer__badge {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 0.8rem; font-weight: 600;
  border: 1px solid var(--color-border);
  background: var(--color-surface);
  padding: 6px 12px; border-radius: var(--radius-pill);
  color: var(--color-text);
}
.footer__badge i { color: var(--color-validation); }
.footer__bottom {
  margin-top: 56px; padding-top: 28px;
  border-top: 1px solid var(--color-border);
  display: flex; flex-wrap: wrap; gap: 16px;
  justify-content: space-between; align-items: center;
  font-size: 0.85rem; color: var(--color-text-muted);
}
.footer__legal { display: flex; gap: 22px; flex-wrap: wrap; }
.footer__legal a:hover { color: var(--color-primary-strong); }

/* ============================================
   HERO — Bannière scindée claire (texte + photo lumineuse)
   Fond clair, texte foncé, photo dans la grille. Plus de voile sombre.
   ============================================ */
.hero {
  position: relative;
  isolation: isolate;
  padding-top: 78px;
  background: var(--color-bg);
  color: var(--color-text);
  overflow: hidden;
}
.hero__media {
  position: relative;
  z-index: 0;
  border-radius: var(--radius-card);
  overflow: hidden;
  background: var(--color-soft);
  aspect-ratio: 5 / 4;          /* moins massif / vertical */
  max-height: 460px;
  box-shadow: none;
}
.hero__media img {
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.hero__inner {
  width: 100%;
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;   /* texte légèrement dominant, image équilibrée */
  align-items: center;
  gap: 56px;
  padding-block: clamp(28px, 4vw, 60px);  /* hero plus court, CTA au-dessus de la ligne de flottaison */
  text-align: left;
}
.hero__text {
  position: relative; z-index: 2;
  max-width: 480px;   /* bloc texte resserré, élégant */
}
/* Héros sans photo (compact / légal) : texte pleine largeur centré */
.hero--compact .hero__inner,
.hero__inner:not(:has(.hero__media)) {
  grid-template-columns: 1fr;
}
.hero__inner:not(:has(.hero__media)) { text-align: center; }
.hero__inner:not(:has(.hero__media)) .hero__text { max-width: 760px; margin-inline: auto; }
.hero--compact .hero__inner { padding-block: 40px 28px; }
.hero__eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 0.72rem; font-weight: 600;
  letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--color-primary-strong);
  background: transparent;
  padding: 0; margin-bottom: 28px;
}
.hero__eyebrow i { color: var(--color-primary-strong); }
.hero__title {
  font-size: clamp(2.3rem, 3.4vw, 3.3rem);  /* compact, élégant, plus humain */
  line-height: 1.1; letter-spacing: -0.015em;
  color: var(--color-text);
  text-wrap: balance;
}
.hero__subtitle {
  margin: 20px 0 0; font-size: var(--fs-large); line-height: 1.55;
  color: var(--color-text-muted); max-width: 46ch;
}
.hero__actions {
  margin-top: 32px;
  display: flex; flex-wrap: wrap; gap: 14px; justify-content: flex-start;
}
/* CTA hero : hauteur identique garantie */
.hero__actions .btn { min-height: 52px; }

/* ---- Image placeholder ---- */
.img-placeholder {
  width: 100%; height: 100%;
  background: linear-gradient(140deg, var(--color-bg-alt) 0%, var(--color-accent) 130%);
  display: grid; place-items: center;
  color: var(--color-primary-strong);
  position: relative;
}
.img-placeholder i { font-size: 56px; opacity: 0.42; }
.img-placeholder--ratio-4-3 { aspect-ratio: 4 / 3; }
.img-placeholder--ratio-1-1 { aspect-ratio: 1 / 1; }
.img-placeholder--ratio-16-9 { aspect-ratio: 16 / 9; }
.img-placeholder--ratio-4-5 { aspect-ratio: 4 / 5; }
.img-placeholder--soft { background: linear-gradient(140deg, var(--color-bg-alt), #dfe6ec); }

/* ============================================
   REASSURANCE BAR
   ============================================ */
.reassurance { background: transparent; padding-block: 8px 12px; }
.reassurance__list {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px;
}
.reassurance__item {
  display: flex; gap: 14px; align-items: flex-start;
  font-size: 0.95rem; font-weight: 500; line-height: 1.45;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 16px;
  padding: 22px 22px;
  transition: border-color var(--t-hover) var(--ease);
}
.reassurance__item:hover { border-color: rgba(232, 181, 74,0.40); }
.reassurance__item i {
  color: var(--color-primary-strong);
  font-size: 1.5rem; flex-shrink: 0;
  margin-top: 1px;
}

/* ============================================
   SERVICES GRID (4 approches / formules)
   ============================================ */
.services-grid {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 18px;
}
.services-grid .service-card { padding: 28px 22px; }
.services-grid .service-card__title { font-size: 1.2rem; }
.services-grid .service-card__icon { width: 50px; height: 50px; font-size: 22px; margin-bottom: 18px; }
@media (max-width: 1240px) {
  .services-grid { grid-template-columns: repeat(2, 1fr); }
}
/* ---- Service card — styles spécifiques (l'effet Ink fill est partagé plus bas) ---- */
.service-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  padding: 40px 38px;
  box-shadow: none;
  display: flex; flex-direction: column;
}
.service-card__icon {
  width: 52px; height: 52px;
  border-radius: 50% 50% 40% 50%;
  background: var(--color-soft);
  border: 1px solid rgba(232, 181, 74,0.20);
  display: flex; align-items: center; justify-content: center;
  color: var(--color-primary-strong); font-size: 23px;
  margin-bottom: 22px;
  transition: background 0.4s var(--ease), border-radius 0.5s var(--ease), color 0.4s var(--ease);
}
.service-card:hover .service-card__icon {
  background: var(--color-primary);
  border-radius: 50% 40% 50% 40%;
  color: #fff;
}
.service-card__title { font-size: 1.4rem; margin-bottom: 12px; }
.service-card__text { color: var(--color-text-muted); flex-grow: 1; }
.service-card__link { margin-top: 22px; transition: gap 0.3s var(--ease); }
.service-card:hover .service-card__link { gap: 14px; }

/* ============================================
   FEATURE GRID (maux, indications, icon cards)
   ============================================ */
.feature-grid {
  display: grid; gap: var(--grid-gap);
  grid-template-columns: repeat(4, 1fr);
}
.feature-grid--3 { grid-template-columns: repeat(3, 1fr); }
.feature-grid--2 { grid-template-columns: repeat(2, 1fr); }

.feature-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 16px;
  padding: 34px;
  transition: transform var(--t-hover) var(--ease),
              border-color var(--t-hover) var(--ease);
}
.feature-card:hover { transform: translateY(-3px); border-color: rgba(232, 181, 74,0.40); box-shadow: none; }
.feature-card__icon {
  width: 50px; height: 50px; border-radius: 14px;
  background: var(--color-soft);
  border: 1px solid rgba(232, 181, 74,0.18);
  display: flex; align-items: center; justify-content: center;
  color: var(--color-primary-strong); font-size: 23px;
  margin-bottom: 18px;
}
.feature-card__title { font-size: var(--fs-h4); font-family: var(--font-heading); margin-bottom: 10px; }
.feature-card__text { color: var(--color-text-muted); font-size: 0.97rem; }

/* Compact icon-only feature (maux résolus) */
.feature-card--compact { display: flex; align-items: center; gap: 16px; padding: 24px 26px; }
.feature-card--compact .feature-card__icon { margin-bottom: 0; }
.feature-card--compact .feature-card__title { font-size: 1.1rem; margin-bottom: 0; }

/* ============================================
   POURQUOI CHOISIR — numéros 88px
   ============================================ */
.why-grid {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 40px;
}
.why-card { border-top: 2px solid var(--color-border); padding-top: 24px; }
.why-card__num {
  font-family: var(--font-heading);
  font-size: 88px; line-height: 1; font-weight: 500;
  color: var(--color-accent);
  margin-bottom: 16px;
}
.why-card__title { font-size: var(--fs-h4); font-family: var(--font-heading); margin-bottom: 12px; }
.why-card__text { color: var(--color-text-muted); }

/* ============================================
   STATS / CHIFFRES CLÉS
   ============================================ */
.stats-grid {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 28px;
}
.stats-grid--4 { grid-template-columns: repeat(4, 1fr); }
/* ---- Perf: content-visibility RETIRÉ — les hauteurs fictives (800px) faussaient
   les positions ScrollTrigger : reveals jamais déclenchés (CTA final invisible),
   effets mal timés, hauteur de page qui change au scroll, sections processus
   instables. Le vrai coût perf venait du gradient ambiant (corrigé côté JS). ---- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ---- PERINAT BENTO ---- */
.perinat-bento { display: block; }
.perinat-bento .swiper-wrapper {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-auto-rows: minmax(120px, auto);
  gap: 18px;
}
.bento-card {
  background: #FFFFFF;
  border: 1px solid rgba(44, 185, 198, 0.28);
  border-radius: 22px;
  padding: 28px 26px;
  display: flex; flex-direction: column; gap: 10px;
  transition: transform var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease), border-color var(--t-hover) var(--ease);
}
.bento-card:hover { transform: translateY(-2px); box-shadow: 0 22px 44px -28px rgba(30,41,56,0.24); border-color: var(--color-primary); }
.bento-card__eyebrow {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 0.72rem; letter-spacing: 0.16em; text-transform: uppercase;
  color: #F1C338; font-weight: 700;
}
.bento-card__eyebrow i { font-size: 1rem; }
.bento-card__phase {
  font-family: var(--font-heading); font-size: 0.9rem; letter-spacing: 0.24em;
  color: rgba(44, 110, 114, 0.62); font-weight: 600;
}
.bento-card__title {
  font-family: var(--font-heading); font-weight: 600;
  color: var(--color-primary); font-size: 1.55rem; line-height: 1.15;
  letter-spacing: -0.005em; margin: 0;
}
.bento-card__title em { font-style: italic; color: var(--color-primary-strong); }
.bento-card__text {
  color: var(--color-text-muted); font-size: 0.98rem; line-height: 1.55;
  margin: 0;
}
.bento-card--featured {
  grid-column: 1 / span 3; grid-row: 1 / span 2;
  background: linear-gradient(160deg, rgba(44, 185, 198, 0.08) 0%, rgba(255,255,255, 0.98) 65%);
  border-color: rgba(241, 195, 56, 0.55);
  padding: 40px 36px;
  justify-content: center;
}
.bento-card--featured .bento-card__title { font-size: 2.4rem; }
.bento-card--featured .bento-card__text { font-size: 1.1rem; max-width: 46ch; }
.bento-card--a { grid-column: 4 / span 3; grid-row: 1; }
.bento-card--b { grid-column: 4 / span 3; grid-row: 2; }
.bento-card--c { grid-column: 1 / span 3; grid-row: 3; }
.bento-card--d { grid-column: 4 / span 3; grid-row: 3; }
@media (max-width: 900px) {
  .perinat-bento .swiper-wrapper { grid-template-columns: repeat(2, 1fr); grid-auto-rows: auto; }
  .bento-card--featured { grid-column: 1 / -1; grid-row: auto; padding: 32px 26px; }
  .bento-card--featured .bento-card__title { font-size: 1.9rem; }
  .bento-card--a, .bento-card--b, .bento-card--c, .bento-card--d { grid-column: span 1; grid-row: auto; }
}
@media (max-width: 640px) {
  .perinat-bento .swiper-wrapper {
    display: flex; grid-template-columns: none; gap: 14px;
    overflow-x: auto; scroll-snap-type: x mandatory;
    margin-inline: -18px; padding: 4px 18px 18px;
    -webkit-overflow-scrolling: touch; scrollbar-width: none;
  }
  .perinat-bento .swiper-wrapper::-webkit-scrollbar { display: none; }
  .bento-card { flex: 0 0 82%; scroll-snap-align: center; }
  .bento-card--featured { flex: 0 0 88%; }
}
.stat {
  text-align: center;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  background: var(--color-surface);
  padding: 36px 24px;
}
.stat__value {
  font-family: var(--font-heading);
  font-size: 2.5rem; font-weight: 600;
  color: var(--color-primary-strong);
  line-height: 1.05;
}
.stat__label { margin-top: 10px; color: var(--color-text-muted); font-size: 0.95rem; }

/* ============================================
   SAFE PROOF — badges
   ============================================ */
.safeproof-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 20px;
}
.safeproof-badge {
  display: flex; gap: 14px; align-items: flex-start;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: 22px 24px;
}
.safeproof-badge i {
  color: var(--color-primary-strong);
  font-size: 1.7rem; flex-shrink: 0; margin-top: 2px;
}
.safeproof-badge__title { font-weight: 600; font-size: 1rem; }
.safeproof-badge__text { color: var(--color-text-muted); font-size: 0.9rem; margin-top: 4px; }

/* ============================================
   ABOUT (qui suis-je / rencontre)
   ============================================ */
.about__inner {
  display: grid; grid-template-columns: 45fr 55fr;
  gap: 56px; align-items: stretch;
}
.about__inner--reverse { grid-template-columns: 55fr 45fr; }
.about__media {
  position: relative;
  align-self: stretch;
  min-height: 320px;
  border-radius: var(--radius-card);
  overflow: hidden;
  background: var(--color-bg-alt);
}
.about__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.about__text p { margin-bottom: 16px; color: var(--color-text-muted); }
.about__text p:first-of-type { color: var(--color-text); }

/* ============================================
   TESTIMONIALS — marquee
   ============================================ */
.testimonials { overflow: hidden; }
.marquee {
  display: flex; gap: 24px;
  width: max-content;
  animation: marquee 80s linear infinite;
}
.marquee:hover, .marquee:focus-within { animation-play-state: paused; }
@keyframes marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
.testimonial {
  width: 380px; flex-shrink: 0;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 16px;
  padding: 32px 32px 28px;
  position: relative;
}
.testimonial__mark {
  font-family: var(--font-heading);
  font-size: 64px; line-height: 0.6;
  color: var(--color-accent);
  position: absolute; top: 28px; left: 24px;
}
.testimonial__quote {
  font-family: var(--font-heading);
  font-style: italic; font-size: 1.125rem;
  margin-top: 36px; color: var(--color-text);
}
.testimonial__cite { display: block; margin-top: 18px; font-size: 0.9rem; color: var(--color-text-muted); font-style: normal; }
/* fallback grid */
.testimonials-grid {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--grid-gap);
}
.testimonials-grid .testimonial { width: auto; }

/* ============================================
   INSTAGRAM PREVIEW
   ============================================ */
.insta-grid {
  display: grid; grid-template-columns: repeat(6, 1fr); gap: 14px;
}
.insta-grid a { border-radius: 12px; overflow: hidden; }
.insta-grid .img-placeholder { aspect-ratio: 1 / 1; }
.insta-grid .img-placeholder i { font-size: 30px; }

/* ============================================
   FAQ ACCORDION
   ============================================ */
.faq {
  max-width: var(--container-narrow); margin-inline: auto;
  display: flex; flex-direction: column; gap: 16px;
}
.faq__item {
  background: #FFFFFF;
  border: 1px solid rgba(44, 185, 198, 0.08);
  border-radius: 18px;
  box-shadow: 0 2px 4px rgba(46,41,34,0.03), 0 14px 32px -20px rgba(46,41,34,0.10);
  overflow: hidden;
  transition: box-shadow var(--t-hover) var(--ease), border-color var(--t-hover) var(--ease), transform var(--t-cross) var(--ease);
}
/* Hover : fond blanc opaque + halo safran le long du bord inférieur */
.faq__item:hover {
  background: #FFFFFF;
  box-shadow:
    0 2px 4px rgba(46,41,34,0.04),
    0 14px 32px -20px rgba(46,41,34,0.12),
    0 14px 22px -8px rgba(241, 195, 56, 0.55);
}
/* Ouvert : fond blanc opaque, halo safran conservé, léger scale */
.faq__item[open] {
  background: #FFFFFF;
  border-color: rgba(241, 195, 56, 0.5);
  transform: scale(1.015);
  box-shadow:
    0 4px 10px rgba(46,41,34,0.05),
    0 24px 44px -18px rgba(46,41,34,0.16),
    0 18px 28px -8px rgba(241, 195, 56, 0.6);
}
.faq__item summary {
  display: flex; align-items: center; justify-content: space-between;
  gap: 20px; padding: 22px 26px;
  font-family: var(--font-heading); font-size: 1.2rem;
  cursor: pointer; list-style: none;
}
.faq__item summary::-webkit-details-marker { display: none; }
.faq__icon {
  flex-shrink: 0; width: 32px; height: 32px;
  border-radius: 50%; border: 1.5px solid var(--color-primary-strong);
  color: var(--color-primary-strong);
  display: flex; align-items: center; justify-content: center;
  font-size: 1.1rem;
  transition: transform var(--t-cross) var(--ease),
              background var(--t-hover) var(--ease),
              color var(--t-hover) var(--ease);
}
.faq__item[open] .faq__icon { transform: rotate(45deg); background: var(--color-primary-strong); color: var(--color-bg); }
.faq__answer { padding: 0 26px 24px; color: var(--color-text-muted); max-width: 70ch; }
@media (max-width: 640px) {
  .faq__item summary { padding: 18px 20px; font-size: 1.05rem; }
  .faq__answer { padding: 0 20px 20px; }
}

/* ============================================
   CTA BLOCK
   ============================================ */
.cta-final { text-align: center; }
.cta-final .container { max-width: var(--container-extra); }
/* CTA final clair — dégradé doux turquoise/pêche (hérité de .section--dark) */
.section--dark.cta-final {
  background:
    radial-gradient(circle at 50% 0%, rgba(232, 181, 74,0.16), transparent 55%),
    linear-gradient(180deg, var(--color-soft) 0%, var(--color-accent-soft) 100%);
}
/* CTA final clair : le bouton « inversé » redevient un bouton turquoise plein */
.cta-final .btn--inverted { background: var(--color-primary); color: var(--color-on-primary); }
.cta-final .btn--inverted:hover { background: var(--color-primary-strong); box-shadow: 0 10px 24px rgba(44, 185, 198,0.28); }
.cta-final__title { font-size: var(--fs-h2); color: var(--color-text); }
.cta-final__intro { margin-top: 18px; color: var(--color-text-muted); font-size: var(--fs-large); }
.cta-final .actions { margin-top: 32px; }
.cta-final__contact {
  margin-top: 44px; padding-top: 32px;
  border-top: 1px solid var(--color-border);
  display: flex; flex-wrap: wrap; justify-content: center; gap: 32px;
}
.cta-final__contact-item { font-size: 0.92rem; color: var(--color-text); }
.cta-final__contact-item span { display: block; color: var(--color-primary-strong); font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.1em; margin-bottom: 4px; }

/* ============================================
   PROCESS / TIMELINE — ligne pointillée
   ============================================ */
.process { position: relative; }
.process__track {
  display: grid; gap: 32px;
  grid-auto-flow: column; grid-auto-columns: 1fr;
  position: relative;
}
.process__track::before {
  content: ""; position: absolute;
  top: 26px; left: 6%; right: 6%;
  border-top: 2px dashed rgba(212,165,116,0.55);
  transform: scaleX(0); transform-origin: left;
  transition: transform 1200ms var(--ease);
}
.process__track.is-drawn::before { transform: scaleX(1); }
.process__step { position: relative; }
.process__num {
  width: 54px; height: 54px; border-radius: 50%;
  background: var(--color-accent); color: #fff;
  font-family: var(--font-heading); font-size: 1.3rem; font-weight: 600;
  display: flex; align-items: center; justify-content: center;
  margin-bottom: 22px;
  position: relative; z-index: 1;
}
.process__step-title { font-family: var(--font-heading); font-size: var(--fs-h4); margin-bottom: 10px; }
.process__step-text { color: var(--color-text-muted); font-size: 0.97rem; }
/* vertical variant (parcours) */
.timeline { max-width: var(--container-narrow); margin-inline: auto; }
.timeline__item {
  display: grid; grid-template-columns: 64px 1fr; gap: 24px;
  padding-bottom: 36px; position: relative;
}
.timeline__item:not(:last-child)::before {
  content: ""; position: absolute;
  left: 26px; top: 56px; bottom: 0;
  border-left: 2px dashed rgba(212,165,116,0.55);
}
.timeline__num {
  width: 54px; height: 54px; border-radius: 50%;
  background: var(--color-surface); border: 2px solid var(--color-accent);
  color: var(--color-accent);
  font-family: var(--font-heading); font-weight: 600;
  display: flex; align-items: center; justify-content: center;
}
.timeline__title { font-family: var(--font-heading); font-size: var(--fs-h4); margin-bottom: 8px; }
.timeline__text { color: var(--color-text-muted); }

/* ============================================
   COMPARATIF (biomécanique)
   ============================================ */
.comparatif {
  display: grid; grid-template-columns: 1fr 1fr; gap: 24px;
  max-width: var(--container-narrow); margin-inline: auto;
}
.comparatif__col {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  padding: 36px; position: relative;
}
.comparatif__col--highlight { border-color: var(--color-accent); border-width: 2px; }
a.comparatif__col--link { display: block; text-decoration: none; color: inherit; transition: transform var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease), border-color var(--t-hover) var(--ease); }
a.comparatif__col--link:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover); border-color: var(--color-primary); }
.comparatif__cta { display: inline-flex; align-items: center; gap: 8px; margin-top: 22px; font-family: var(--font-body); font-size: 0.95rem; font-weight: 600; color: var(--color-primary); letter-spacing: 0.01em; }
a.comparatif__col--link:hover .comparatif__cta i { transform: translateX(4px); }
.comparatif__cta i { transition: transform var(--t-hover) var(--ease); }
.comparatif__badge {
  position: absolute; top: -15px; left: 36px;
  background: var(--color-accent); color: #fff;
  font-size: 0.78rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.08em;
  padding: 7px 16px; border-radius: var(--radius-pill);
}
.comparatif__col h3 { font-size: var(--fs-h3); margin-bottom: 18px; }
.comparatif__col ul { display: flex; flex-direction: column; gap: 12px; }
.comparatif__col li { display: flex; gap: 10px; color: var(--color-text-muted); }
.comparatif__col li i { color: var(--color-accent); margin-top: 3px; }
.comparatif__quote {
  max-width: var(--container-narrow); margin: 36px auto 0;
  text-align: center; font-family: var(--font-heading);
  font-style: italic; font-size: 1.25rem; color: var(--color-primary-strong);
}

/* ============================================
   DIAPASONS — cercles concentriques
   ============================================ */
.pulse-rings {
  position: relative; width: 100%; height: 100%;
  display: grid; place-items: center;
  background: linear-gradient(140deg, var(--color-bg-alt), #dfe6ec);
}
.pulse-rings span {
  position: absolute; border: 2px solid var(--color-accent);
  border-radius: 50%;
  animation: pulse 4s ease-in-out infinite;
}
.pulse-rings span:nth-child(1) { width: 38%; height: 38%; animation-delay: 0s; }
.pulse-rings span:nth-child(2) { width: 60%; height: 60%; animation-delay: 0.3s; opacity: 0.6; }
.pulse-rings span:nth-child(3) { width: 82%; height: 82%; animation-delay: 0.6s; opacity: 0.35; }
.pulse-rings__core {
  width: 16%; height: 16%; border-radius: 50%;
  background: var(--color-accent); border: none !important;
  animation: none !important; position: absolute;
}
@keyframes pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.08); }
}

/* ============================================
   PÉRINATALITÉ — subsegment blocks
   ============================================ */
.subsegment {
  border-left: 2px solid var(--color-accent);
  padding-left: 36px;
}
.subsegment__num {
  width: 96px; height: 96px; border-radius: 50%;
  background: var(--color-bg-alt);
  font-family: var(--font-heading); font-size: 2.2rem; font-weight: 600;
  color: var(--color-accent);
  display: flex; align-items: center; justify-content: center;
  margin-bottom: 24px;
}

/* ============================================
   SOIN 4 MAINS — portraits quinconce + bento
   ============================================ */
.quinconce { display: flex; gap: 24px; justify-content: center; }
.quinconce__portrait {
  width: 280px;
  border-radius: var(--radius-card);
  overflow: hidden;
  position: relative;
  background: var(--color-bg-alt);
}
.quinconce__portrait img { display: block; width: 100%; height: auto; }
.quinconce__portrait:first-child { transform: translateY(-48px); }
.quinconce__portrait:last-child { transform: translateY(48px); }
.quinconce__portrait figcaption {
  position: absolute; inset: auto 0 0 0;
  padding: 20px 22px;
  background: linear-gradient(180deg, rgba(44, 185, 198,0) 0%, rgba(44, 185, 198,0.78) 55%, rgba(44, 185, 198,0.92) 100%);
  color: #fff;
  transform: translateY(100%);
  transition: transform 0.5s var(--ease);
  pointer-events: none;
  text-align: left;
}
.quinconce__portrait:hover figcaption,
.quinconce__portrait:focus-within figcaption {
  transform: translateY(0);
}
.quinconce__name {
  display: block;
  font-family: var(--font-heading); font-size: 1.08rem;
  color: #fff; letter-spacing: 0.01em;
}
.quinconce__role {
  display: block;
  font-size: 0.82rem;
  color: rgba(255,255,255,0.85);
  margin-top: 2px;
}

/* ---- RENCONTRE — photos à gauche, texte+CTA à droite ---- */
.rencontre {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
  gap: 56px;
  align-items: center;
}
.rencontre__photos {
  display: grid;
  grid-template-columns: 1fr;
  gap: 18px;
}
.rencontre__photos .quinconce__portrait {
  width: 100%;
  transform: none;
  aspect-ratio: 16 / 10;
}
.rencontre__photos .quinconce__portrait img {
  width: 100%; height: 100%; object-fit: cover;
}
.rencontre__body .section-header { margin-bottom: 18px; max-width: none; }
.rencontre__body p { margin-bottom: 14px; }
.rencontre__body .actions { justify-content: flex-start; margin-top: 26px; }

.bento {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}
.bento__cell {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  padding: 30px;
}
.bento__cell--wide { grid-column: span 2; }
.bento__cell--dark { background: var(--color-primary); color: #fff; border-color: var(--color-primary); }
.bento__cell i { font-size: 30px; color: var(--color-accent); margin-bottom: 14px; display: block; position: relative; z-index: 2; }
.bento__cell h3 { font-family: var(--font-heading); font-size: 1.2rem; margin-bottom: 8px; position: relative; z-index: 2; }
.bento__cell p { font-size: 0.95rem; color: var(--color-text-muted); position: relative; z-index: 2; }
.bento__cell--dark p { color: rgba(255,255,255,0.88); }

/* Filigrane décoratif — tache de couleur en bas-droite */
.bento__cell::before {
  content: '';
  position: absolute;
  right: -60px; bottom: -60px;
  width: 200px; height: 200px;
  border-radius: 50%;
  background: var(--color-soft);
  opacity: 0.55;
  z-index: 0;
  pointer-events: none;
  transition: transform var(--t-cross) var(--ease), opacity var(--t-hover) var(--ease);
}
.bento__cell:hover::before { transform: scale(1.18); opacity: 0.75; }
.bento__cell--dark::before {
  background: radial-gradient(circle at center, rgba(212,165,116,0.22) 0%, rgba(255,255,255,0.04) 70%);
  opacity: 1;
}

/* ============================================
   GALLERY
   ============================================ */
.gallery-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px; }
.gallery-item { border-radius: 16px; overflow: hidden; }
/* Rythme éditorial : la 1re photo respire plus haut */
.gallery-item:first-child { grid-row: span 1; }
.gallery-item .img-placeholder { aspect-ratio: 4 / 3; }
.gallery-item__caption { padding-top: 12px; font-size: 0.9rem; color: var(--color-text-muted); }

/* ============================================
   GIFT CARDS (bon cadeau)
   ============================================ */
.gift-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap); }
.gift-card {
  border-radius: var(--radius-card);
  padding: 38px 34px;
  background: linear-gradient(155deg, var(--color-surface), var(--color-bg-alt));
  border: 1px solid var(--color-border);
  display: flex; flex-direction: column;
  position: relative; overflow: hidden;
  transition: transform var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease);
}
.gift-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover); }
.gift-card--featured {
  background: linear-gradient(155deg, var(--color-primary-strong), var(--color-dark));
  color: var(--color-bg); border-color: var(--color-primary-strong);
}
.gift-card__ribbon {
  position: absolute; top: 20px; right: -34px;
  background: var(--color-accent); color: #fff;
  font-size: 0.72rem; font-weight: 600; letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 6px 40px; transform: rotate(45deg);
}
.gift-card__name { font-family: var(--font-heading); font-size: 1.5rem; margin-bottom: 8px; }
.gift-card__price { font-family: var(--font-heading); font-size: 2.2rem; font-weight: 600; color: var(--color-accent); margin-bottom: 16px; }
.gift-card--featured .gift-card__price { color: var(--color-accent); }
.gift-card__text { font-size: 0.95rem; flex-grow: 1; }
.gift-card--featured .gift-card__text { color: rgba(251,250,247,0.85); }
.gift-card .btn { margin-top: 24px; }

/* ============================================
   BLOG
   ============================================ */
.pill-row { display: flex; flex-wrap: wrap; gap: 12px; }
.pill {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 10px 20px; border-radius: var(--radius-pill);
  border: 1.5px solid var(--color-border);
  background: var(--color-surface);
  font-size: 0.92rem; font-weight: 500;
  transition: border-color var(--t-hover) var(--ease),
              background var(--t-hover) var(--ease),
              color var(--t-hover) var(--ease);
  cursor: pointer;
}
.pill i { color: var(--color-accent); }
.pill:hover, .pill.is-active { border-color: var(--color-primary); background: var(--color-primary); color: var(--color-on-primary); }
.pill:hover i, .pill.is-active i { color: var(--color-accent); }

.article-featured {
  display: grid; grid-template-columns: 5fr 6fr; gap: 0;
  border: 1px solid var(--color-border); border-radius: var(--radius-card);
  overflow: hidden; background: var(--color-surface);
  max-width: 820px; margin: 0 auto;
}
.article-featured .img-placeholder,
.article-featured__media { height: 100%; min-height: 220px; max-height: 320px; }
.article-featured__body { padding: 28px 32px; }
.article-card__cat, .article-featured__cat {
  font-size: 0.72rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.12em;
  color: var(--color-accent);
}
.article-featured__title { font-size: 1.25rem; margin: 10px 0 8px; line-height: 1.3; }
.article-featured__excerpt { color: var(--color-text-muted); margin-bottom: 16px; font-size: 0.9rem; line-height: 1.55; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }

.article-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap); }
.article-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  overflow: hidden;
  display: flex; flex-direction: column;
  transition: transform var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease);
  position: relative;
  cursor: pointer;
}
.article-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover); }
.article-card .img-placeholder,
.article-card .article-media { aspect-ratio: 16 / 10; overflow: hidden; }
.article-card .article-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.article-card__body { padding: 26px; display: flex; flex-direction: column; flex-grow: 1; gap: 4px; }
.article-card__cat { font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: #F1C338; font-weight: 700; }
.article-card__title {
  font-family: var(--font-heading);
  font-size: 1.2rem;
  margin: 10px 0 8px;
  min-height: 3.6em; /* réserve 3 lignes → hauteur uniforme */
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.article-card__excerpt {
  font-size: 0.93rem;
  color: var(--color-text-muted);
  flex-grow: 1;
  display: -webkit-box;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 5.5em;
}
.article-card__meta { margin-top: 16px; font-size: 0.82rem; color: var(--color-text-muted); }
.article-featured__media { overflow: hidden; }
.article-featured__media img { width: 100%; height: 100%; object-fit: cover; display: block; }

.empty-note {
  background: var(--color-bg-alt);
  border: 1px dashed var(--color-border);
  border-radius: var(--radius-card);
  padding: 32px; text-align: center;
  color: var(--color-text-muted);
}

/* ============================================
   MEDIA — vidéos lite embed
   ============================================ */
.video-feature { display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; align-items: center; }
.lite-yt {
  position: relative; border-radius: var(--radius-card);
  overflow: hidden; aspect-ratio: 16 / 9; cursor: pointer;
  background: linear-gradient(140deg, var(--color-bg-alt), #cdd6dd);
}
.lite-yt__play {
  position: absolute; inset: 0; margin: auto;
  width: 76px; height: 76px; border-radius: 50%;
  background: rgba(44, 185, 198,0.92); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 2rem;
  transition: transform var(--t-hover) var(--ease), background var(--t-hover) var(--ease);
}
.lite-yt:hover .lite-yt__play { transform: scale(1.08); background: var(--color-primary-strong); }
.lite-yt iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.video-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap); }
.video-grid .lite-yt { aspect-ratio: 16 / 9; }
.video-card__title { font-family: var(--font-heading); font-size: 1.1rem; margin-top: 14px; }

.social-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--grid-gap); }
.social-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  padding: 30px; text-align: center;
  transition: transform var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease);
}
.social-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover); }
.social-card i { font-size: 2.2rem; color: var(--color-primary); }
.social-card__name { font-family: var(--font-heading); font-size: 1.15rem; margin: 12px 0 4px; }
.social-card__handle { font-size: 0.85rem; color: var(--color-text-muted); word-break: break-word; }

/* ============================================
   CONTACT
   ============================================ */
.channel-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap); }
.channel-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  padding: 34px; text-align: center;
  transition: transform var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease);
}
.channel-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover); }
.channel-card__icon {
  width: 60px; height: 60px; border-radius: 50%;
  background: var(--color-bg-alt); color: var(--color-primary);
  display: flex; align-items: center; justify-content: center;
  font-size: 28px; margin: 0 auto 18px;
}
.channel-card--whatsapp .channel-card__icon { background: rgba(27,122,62,0.12); color: var(--color-whatsapp); }
.channel-card__title { font-family: var(--font-heading); font-size: 1.25rem; margin-bottom: 8px; }
.channel-card__value { font-weight: 600; color: var(--color-primary-strong); }
.channel-card__note { font-size: 0.88rem; color: var(--color-text-muted); margin-top: 4px; }

.access-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: start; }
.access-list { display: flex; flex-direction: column; gap: 18px; }
.access-item { display: flex; gap: 14px; }
.access-item i {
  font-size: 1.5rem; color: var(--color-primary);
  flex-shrink: 0; width: 44px; height: 44px;
  background: var(--color-bg-alt); border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
}
.access-item__title { font-weight: 600; }
.access-item__text { color: var(--color-text-muted); font-size: 0.93rem; }

.map-embed {
  position: relative; border-radius: var(--radius-card);
  overflow: hidden; aspect-ratio: 4 / 3; min-height: 320px;
  background: linear-gradient(140deg, var(--color-bg-alt), #cdd6dd);
}
.map-embed__cover {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; gap: 16px;
  align-items: center; justify-content: center;
  color: var(--color-primary-strong);
}
.map-embed__cover i { font-size: 48px; }
.map-embed iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

.hours-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--grid-gap); }
.hours-card {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  background: var(--color-surface);
  padding: 28px; text-align: center;
}
.hours-card--closed { background: var(--color-bg-alt); }
.hours-card__day { font-family: var(--font-heading); font-size: 1.2rem; }
.hours-card__time { margin-top: 8px; color: var(--color-text-muted); }

/* ---- Form ---- */
.form { max-width: var(--container-narrow); margin-inline: auto; }
.form__row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.form__group { margin-bottom: 20px; }
.form__group label { display: block; font-weight: 500; font-size: 0.92rem; margin-bottom: 8px; }
.form__group label .req { color: var(--color-accent); }
.form input, .form select, .form textarea {
  width: 100%;
  background: var(--color-surface);
  border: 1.5px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: 14px 18px;
  transition: border-color var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease);
}
.form input:focus, .form select:focus, .form textarea:focus {
  outline: none;
  border-color: var(--color-primary-strong);
  box-shadow: 0 0 0 4px rgba(44, 185, 198,0.13);
}
.form textarea { min-height: 150px; resize: vertical; }
.form__check { display: flex; gap: 12px; align-items: flex-start; font-size: 0.9rem; color: var(--color-text-muted); }
.form__check input { width: auto; margin-top: 3px; flex-shrink: 0; }
.form__feedback { margin-top: 16px; padding: 14px 18px; border-radius: var(--radius-sm); display: none; }
.form__feedback.is-success { display: block; background: rgba(107,142,90,0.14); color: var(--color-validation); }
.form__feedback.is-error { display: block; background: rgba(166,74,74,0.12); color: #a64a4a; }

/* ============================================
   LEGAL PAGES
   ============================================ */
.legal-hero { padding-top: 78px; background: var(--color-bg-alt); }
.legal-hero__inner { padding-block: 64px 48px; max-width: var(--container-narrow); margin-inline: auto; padding-inline: 24px; }
.legal-hero h1 { font-size: var(--fs-h2); }
.legal-hero p { margin-top: 12px; color: var(--color-text-muted); }
.legal-body { max-width: var(--container-extra); margin-inline: auto; padding-inline: 24px; }
.legal-toc {
  background: var(--color-bg-alt);
  border-radius: var(--radius-card);
  padding: 28px 32px; margin-bottom: 48px;
}
.legal-toc h2 { font-size: 1.2rem; margin-bottom: 14px; }
.legal-toc ol { list-style: decimal; padding-left: 20px; display: flex; flex-direction: column; gap: 8px; }
.legal-toc a { color: var(--color-primary-strong); }
.legal-toc a:hover { text-decoration: underline; }
.legal-section { margin-bottom: 44px; scroll-margin-top: 100px; }
.legal-section h2 { font-size: var(--fs-h3); margin-bottom: 16px; }
.legal-section h3 { font-size: 1.2rem; margin: 20px 0 8px; font-family: var(--font-heading); }
.legal-section p, .legal-section li { color: var(--color-text-muted); margin-bottom: 12px; }
.legal-section ul { list-style: disc; padding-left: 22px; }
.legal-section table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.92rem; }
.legal-section th, .legal-section td {
  border: 1px solid var(--color-border);
  padding: 12px 14px; text-align: left;
}
.legal-section th { background: var(--color-bg-alt); font-weight: 600; }
.legal-flag {
  background: rgba(212,165,116,0.16);
  border-left: 3px solid var(--color-accent);
  padding: 4px 8px; border-radius: 4px;
  font-size: 0.92em;
}

/* ============================================
   PHOTOS — images réelles dans les conteneurs média
   ============================================ */
.hero__media img,
.about__media img,
.quinconce__portrait img,
.gallery-item img,
.lite-yt > img {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
  /* aucun filtre — couleurs natives des photos préservées (directive cliente) */
}
.hero__media, .about__media { background: var(--color-bg-alt); }
.gallery-item img { aspect-ratio: 4 / 3; }
.feature-photo {
  border-radius: var(--radius-card);
  overflow: hidden;
  aspect-ratio: 16 / 10;
  background: var(--color-bg-alt);
}
.feature-photo img { width: 100%; height: 100%; object-fit: cover; }

/* ============================================
   SECTION CTA — bande d'appel à l'action
   ============================================ */
.section-cta {
  margin-top: 52px;
  padding-top: 40px;
  border-top: 1px solid var(--color-border);
  text-align: center;
}
.section-cta > * { text-align: center; }
.section--alt .section-cta { border-top-color: #ddd9cd; }
.section-cta__text {
  font-family: var(--font-heading);
  font-size: 1.25rem;
  color: var(--color-text);
  margin: 0 auto 20px;
  max-width: 38ch;
  text-align: center;
}
.section-cta .actions { justify-content: center; }

/* ============================================
   AVIS GOOGLE
   ============================================ */
.reviews-band {
  display: grid;
  grid-template-columns: 300px 1fr;
  gap: 48px; align-items: center;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-card);
  padding: 48px;
}
.reviews-score { text-align: center; }
.reviews-score__google {
  display: inline-flex; align-items: center; gap: 8px;
  font-weight: 600; font-size: 0.95rem;
  color: var(--color-text-muted); margin-bottom: 14px;
}
.reviews-score__g {
  font-family: var(--font-heading); font-weight: 600;
  font-size: 1.4rem; line-height: 1;
}
.reviews-score__g .c1 { color: #4285F4; }
.reviews-score__g .c2 { color: #EA4335; }
.reviews-score__g .c3 { color: #FBBC05; }
.reviews-score__g .c4 { color: #34A853; }
.reviews-score__num {
  font-family: var(--font-heading);
  font-size: 4rem; font-weight: 600;
  color: var(--color-primary-strong); line-height: 1;
}
.review-stars { color: var(--color-accent); font-size: 1.4rem; letter-spacing: 2px; margin: 8px 0; }
.reviews-score__count { font-size: 0.9rem; color: var(--color-text-muted); }
.reviews-band__body .section-title { margin-bottom: 14px; }
.reviews-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 18px; margin-top: 40px;
}
.review-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  padding: 28px;
}
.review-card__head { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
.review-card__avatar {
  width: 44px; height: 44px; border-radius: 50%;
  background: var(--color-bg-alt); color: var(--color-primary-strong);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-heading); font-weight: 600; font-size: 1.1rem;
  flex-shrink: 0;
}
.review-card__name { font-weight: 600; font-size: 0.95rem; }
.review-card__stars { color: var(--color-accent); font-size: 0.85rem; letter-spacing: 1px; }
.review-card__text {
  color: var(--color-text-muted); font-size: 0.95rem;
  display: -webkit-box;
  -webkit-line-clamp: 4; line-clamp: 4;
  -webkit-box-orient: vertical;
  overflow: hidden;
  transition: max-height 0.4s var(--ease);
}
.review-card.is-expanded .review-card__text {
  -webkit-line-clamp: unset; line-clamp: unset;
  display: block; overflow: visible;
}
.review-card__more {
  display: inline-block; margin-top: 10px;
  background: none; border: none; padding: 0;
  font: inherit; cursor: pointer;
  color: var(--color-primary-strong); font-weight: 500; font-size: 0.9rem;
  text-decoration: underline; text-underline-offset: 3px;
}
.review-card.is-expanded .review-card__more::before { content: "Voir moins"; }
.review-card:not(.is-expanded) .review-card__more::before { content: "En savoir plus"; }
.review-card__src { margin-top: 14px; font-size: 0.8rem; color: var(--color-text-muted); display: flex; align-items: center; gap: 6px; }

/* ============================================
   DIPLÔMES
   ============================================ */
.diplomas-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
@media (max-width: 1024px) { .diplomas-grid { grid-template-columns: repeat(2, 1fr); } }
.diploma {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-card);
  overflow: hidden;
  box-shadow: var(--shadow-card);
  transition: transform var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease);
}
.diploma:hover { transform: translateY(-3px); box-shadow: var(--shadow-card-hover); }
.diploma__img {
  background: var(--color-bg-alt);
  aspect-ratio: 1 / 1.1; overflow: hidden;
  display: flex; align-items: flex-start; justify-content: center;
}
.diploma__img img { width: 100%; height: 100%; object-fit: cover; object-position: top; }
.diploma__body { padding: 22px 24px; }
.diploma__title { font-family: var(--font-heading); font-size: 1.15rem; margin-bottom: 6px; }
.diploma__meta { font-size: 0.88rem; color: var(--color-text-muted); }

/* ============================================
   FOOTER LOGO IMAGE
   ============================================ */
/* Logo footer recoloré (teal) — le PNG est blanc, invisible sur le pied de page clair :
   on l'utilise en masque rempli de la couleur marque. */
.footer__logo-img {
  display: block; width: 188px; height: 52px; margin-bottom: 4px;
  background-color: var(--color-logo);
  -webkit-mask: url('../images/logo-blanc.png') left center / contain no-repeat;
          mask: url('../images/logo-blanc.png') left center / contain no-repeat;
}

/* ============================================
   ACCENTS BLEU CLIENTE — pastilles d'icônes & surfaces douces
   ============================================ */
.hero__eyebrow,
.service-card__icon,
.feature-card__icon,
.subsegment__num,
.channel-card__icon,
.access-item i,
.review-card__avatar { background: var(--color-soft); }
.channel-card--whatsapp .channel-card__icon { background: rgba(27,122,62,0.12); }

/* ============================================
   CARTES DÉPLIANTES — feature-card en accordéon
   Améliorées par JS (.is-fold). Sans JS : tout reste affiché.
   ============================================ */
.feature-card.is-fold { padding: 0; }
.feature-card.is-fold .feature-card__head {
  display: flex; align-items: center; gap: 16px; width: 100%;
  padding: 24px 26px; background: none; border: 0;
  cursor: pointer; text-align: left; font: inherit; color: inherit;
}
.feature-card.is-fold .feature-card__icon { margin: 0; flex-shrink: 0; }
.feature-card.is-fold .feature-card__title { margin: 0; flex: 1; }
.feature-card.is-fold .feature-card__toggle {
  flex-shrink: 0; width: 32px; height: 32px; border-radius: 50%;
  border: 1.5px solid var(--color-primary-strong); color: var(--color-primary-strong);
  display: flex; align-items: center; justify-content: center; font-size: 1.05rem;
  transition: transform var(--t-cross) var(--ease),
              background var(--t-hover) var(--ease),
              color var(--t-hover) var(--ease);
}
.feature-card.is-fold .feature-card__head:hover .feature-card__toggle {
  background: var(--color-primary-strong); color: var(--color-bg);
}
.feature-card.is-fold.is-open .feature-card__toggle {
  transform: rotate(45deg);
  background: var(--color-primary-strong); color: var(--color-bg);
}
.feature-card.is-fold .feature-card__text {
  max-height: 0; overflow: hidden; opacity: 0; margin: 0;
  padding: 0 26px;
  transition: max-height var(--t-cross) var(--ease),
              opacity var(--t-hover) var(--ease),
              padding-bottom var(--t-cross) var(--ease);
}
.feature-card.is-fold.is-open .feature-card__text { opacity: 1; padding-bottom: 30px; }
.feature-card__text a {
  color: var(--color-primary-strong); font-weight: 500;
  text-decoration: underline; text-underline-offset: 2px;
}
@media (prefers-reduced-motion: reduce) {
  .feature-card.is-fold .feature-card__text { transition: none; }
}

/* ============================================
   CARTES — EFFET INK FILL (partagé sur tout le site)
   Coin asymétrique + encre bleu pâle qui monte au survol.
   ============================================ */

/* Base partagée — toutes les cartes */
.service-card,
.feature-card,
.article-card, .article-featured,
.diploma,
.channel-card,
.bento__cell:not(.bento__cell--dark),
.gift-card:not(.gift-card--featured),
.testimonial,
.stat,
.safeproof-badge,
.review-card,
.social-card,
.hours-card:not(.hours-card--closed) {
  position: relative;
  overflow: hidden;
  z-index: 0;
  transition: transform 0.4s var(--ease),
              box-shadow 0.4s var(--ease),
              border-radius 0.6s var(--ease);
}

/* Pseudo-encre — montée au survol */
.service-card::after,
.feature-card::after,
.article-card::after, .article-featured::after,
.diploma::after,
.channel-card::after,
.bento__cell:not(.bento__cell--dark)::after,
.gift-card:not(.gift-card--featured)::after,
.testimonial::after,
.stat::after,
.safeproof-badge::after,
.review-card::after,
.social-card::after,
.hours-card:not(.hours-card--closed)::after {
  content: "";
  position: absolute;
  left: -10%; right: -10%; bottom: -40%;
  height: 100%;
  background: radial-gradient(ellipse at 50% 100%, var(--color-soft) 0%, transparent 75%);
  transform: scaleY(0); transform-origin: bottom;
  transition: transform 0.7s var(--ease);
  z-index: -1; pointer-events: none;
}

/* Hover — lift + ombre + encre */
.service-card:hover,
.feature-card:hover,
.article-card:hover, .article-featured:hover,
.diploma:hover,
.channel-card:hover,
.bento__cell:not(.bento__cell--dark):hover,
.gift-card:not(.gift-card--featured):hover,
.testimonial:hover,
.stat:hover,
.safeproof-badge:hover,
.review-card:hover,
.social-card:hover,
.hours-card:not(.hours-card--closed):hover {
  transform: translateY(-3px);
  border-color: rgba(232, 181, 74,0.40);
  box-shadow: none;
}
.service-card:hover::after,
.feature-card:hover::after,
.article-card:hover::after, .article-featured:hover::after,
.diploma:hover::after,
.channel-card:hover::after,
.bento__cell:not(.bento__cell--dark):hover::after,
.gift-card:not(.gift-card--featured):hover::after,
.testimonial:hover::after,
.stat:hover::after,
.safeproof-badge:hover::after,
.review-card:hover::after,
.social-card:hover::after,
.hours-card:not(.hours-card--closed):hover::after {
  transform: scaleY(1.6);
}

/* Rayons asymétriques — taille LARGE (coin 66 px) */
.service-card,
.feature-card,
.article-card, .article-featured,
.diploma,
.channel-card,
.bento__cell:not(.bento__cell--dark),
.gift-card:not(.gift-card--featured),
.testimonial {
  border-radius: 16px;
}
.service-card:hover,
.feature-card:hover,
.article-card:hover, .article-featured:hover,
.diploma:hover,
.channel-card:hover,
.bento__cell:not(.bento__cell--dark):hover,
.gift-card:not(.gift-card--featured):hover,
.testimonial:hover {
  border-radius: 16px;
}

/* Rayons asymétriques — taille PETITE (coin 44 px) */
.stat,
.safeproof-badge,
.review-card,
.social-card,
.hours-card:not(.hours-card--closed),
.feature-card--compact,
.feature-card.is-fold {
  border-radius: 14px;
}
.stat:hover,
.safeproof-badge:hover,
.review-card:hover,
.social-card:hover,
.hours-card:not(.hours-card--closed):hover,
.feature-card--compact:hover,
.feature-card.is-fold:hover {
  border-radius: 14px;
}

/* Accessibilité — reduced motion */
@media (prefers-reduced-motion: reduce) {
  .service-card, .feature-card, .article-card, .article-featured,
  .diploma, .channel-card, .bento__cell, .gift-card,
  .testimonial, .stat, .safeproof-badge, .review-card, .social-card, .hours-card {
    transition: none !important;
  }
  .service-card::after, .feature-card::after, .article-card::after, .article-featured::after,
  .diploma::after, .channel-card::after, .bento__cell::after, .gift-card::after,
  .testimonial::after, .stat::after, .safeproof-badge::after, .review-card::after,
  .social-card::after, .hours-card::after { transition: none !important; transform: scaleY(0); }
  .service-card:hover, .feature-card:hover, .article-card:hover, .article-featured:hover,
  .diploma:hover, .channel-card:hover, .bento__cell:hover, .gift-card:hover,
  .testimonial:hover, .stat:hover, .safeproof-badge:hover, .review-card:hover,
  .social-card:hover, .hours-card:hover { transform: none; }
}

/* ============================================
   REVEAL ANIMATION
   ============================================ */
.reveal { opacity: 0; transform: translateY(12px); }
.reveal.is-in { opacity: 1; transform: translateY(0); }

/* ============================================
   RESPONSIVE
   ============================================ */
/* Navbar simplifiée : tout passe dans le burger sur toutes les tailles d'écran */
.header__aside .lang-switch, .header__aside .btn { display: none; }

@media (max-width: 1024px) {
  .container { padding-inline: 28px; }
  .hero__inner { grid-template-columns: 1fr; gap: 32px; padding-block: 48px; text-align: center; }
  .hero__text { max-width: 640px; margin-inline: auto; }
  .hero__actions { justify-content: center; }
  .hero__media { aspect-ratio: 16 / 10; max-height: 420px; order: -1; }
  .about__inner, .about__inner--reverse { grid-template-columns: 1fr; gap: 36px; }
  .about__media { aspect-ratio: 4 / 3; min-height: 0; }
  .feature-grid { grid-template-columns: repeat(2, 1fr); }
  .reassurance__list { grid-template-columns: repeat(2, 1fr); }
  .footer__grid { grid-template-columns: 1fr 1fr; }
  .video-feature { grid-template-columns: 1fr; }
  .article-featured { grid-template-columns: 1fr; }
  .article-featured .img-placeholder { min-height: 240px; }
  .access-grid { grid-template-columns: 1fr; }
  .social-grid { grid-template-columns: repeat(2, 1fr); }
  .reviews-band { grid-template-columns: 1fr; gap: 28px; padding: 36px; text-align: center; }
  .reviews-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 768px) {
  .container { padding-inline: 20px; }
  .services-grid, .feature-grid, .feature-grid--3, .feature-grid--2,
  .why-grid, .stats-grid, .stats-grid--4, .gift-grid, .article-grid,
  .channel-grid, .hours-grid, .testimonials-grid,
  .reassurance__list,
  .comparatif {
    grid-template-columns: 1fr;
  }
  /* ---- Vidéos shorts → carrousel scroll-snap mobile ---- */
  .video-grid {
    display: flex;
    grid-template-columns: none;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 14px;
    margin-inline: -18px;
    padding: 4px 18px 18px;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .video-grid::-webkit-scrollbar { display: none; }
  .video-grid > div { flex: 0 0 70%; scroll-snap-align: center; }
  /* ---- Galerie cabinet → carrousel scroll-snap mobile ---- */
  .gallery-grid {
    display: flex;
    grid-template-columns: none;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 14px;
    margin-inline: -18px;
    padding: 4px 18px 18px;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .gallery-grid::-webkit-scrollbar { display: none; }
  .gallery-grid > .gallery-item { flex: 0 0 86%; scroll-snap-align: center; }
  .form__row { grid-template-columns: 1fr; }
  .process__track { grid-auto-flow: row; grid-auto-columns: auto; }
  .process__track::before { display: none; }
  .diplomas-grid { grid-template-columns: 1fr; }
  /* ---- Avis Google → carrousel scroll-snap mobile ---- */
  .reviews-grid {
    display: flex;
    grid-template-columns: none;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 14px;
    margin-inline: -18px;
    padding: 4px 18px 18px;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .reviews-grid::-webkit-scrollbar { display: none; }
  .reviews-grid > .review-card {
    flex: 0 0 86%;
    scroll-snap-align: center;
  }
  .reviews-band { padding: 28px; }
  .reviews-band__body .section-cta { margin-top: 0; }

  /* --- Contraste mobile : voile renforcé sur les sections à fond photo --- */
  .section--parallax::before,
  .section--parallax-maux::before {
    background: linear-gradient(180deg, rgba(20,28,32,0.55) 0%, rgba(20,28,32,0.66) 100%);
  }
  .section--parallax .section-header--light .section-title,
  .section--parallax .section-header--light .section-intro,
  .section--parallax .section-header--light .section-kicker {
    text-shadow: 0 2px 18px rgba(12,20,24,0.55);
  }
  .fixed-quote::after {
    background: linear-gradient(120deg, rgba(20,28,32,0.58) 0%, rgba(20,28,32,0.42) 100%);
  }

  /* --- Boutons : jamais sur 2 lignes en mobile --- */
  .btn { font-size: 0.9rem; letter-spacing: 0.05em; padding: 14px 26px; gap: 10px; }
  .actions, .hero__actions { width: 100%; }
  .actions .btn, .hero__actions .btn, .section-cta .btn,
  .reviews-band .btn, .maux-card__cta { width: 100%; }
  .header .btn--primary { width: auto; }
  .insta-grid { grid-template-columns: repeat(3, 1fr); }
  .footer__grid { grid-template-columns: 1fr; gap: 36px; }
  .footer__bottom { flex-direction: column; align-items: flex-start; }
  .bento { grid-template-columns: 1fr; }
  .bento__cell--wide { grid-column: span 1; }
  .quinconce { flex-direction: column; align-items: center; gap: 32px; }
  .quinconce__portrait:first-child, .quinconce__portrait:last-child { transform: none; }
  .quinconce__portrait { width: 100%; max-width: 320px; }
  /* Rencontre — empilage vertical mobile, texte centré */
  .rencontre { grid-template-columns: 1fr; gap: 36px; }
  .rencontre__photos { gap: 12px; }
  .rencontre__photos .quinconce__portrait:first-child,
  .rencontre__photos .quinconce__portrait:last-child { transform: none; }
  .rencontre__body { text-align: center; }
  .rencontre__body .actions { justify-content: center; }
  .subsegment { padding-left: 22px; }
  .testimonial { width: 300px; }
  .hero__title { word-break: normal; }
  .cta-final__contact { gap: 22px; }
  .social-grid { grid-template-columns: 1fr; }

  /* ---- CTA centrés sur mobile (tous boutons) ---- */
  .hero__actions,
  .actions,
  .section-cta .actions,
  .actions--center { justify-content: center; }
  .hero__actions { align-items: center; }

  /* ---- Centrage global mobile : titres, paragraphes, chiffres ---- */
  .section-header,
  .section-header * { text-align: center; }
  .section-header { margin-inline: auto; max-width: 100%; }
  .section-intro { margin-inline: auto; max-width: 60ch; }

  /* Cartes « Pourquoi choisir » : numéro 88px + titre + texte centrés */
  .why-card { text-align: center; border-top: none; padding-top: 0; }
  .why-card__num { margin: 0 auto 14px; text-align: center; }
  .why-card__title, .why-card__text { margin-inline: auto; max-width: 36ch; }

  /* Sous-segments Périnatalité : numéro centré */
  .subsegment { padding-left: 0; border-left: none; text-align: center; }
  .subsegment__num { margin: 0 auto 22px; }

  /* About / texte de section : paragraphes centrés */
  .about__text, .about__text p { text-align: center; }
  .about__text p { margin-inline: auto; max-width: 60ch; }
  .about__text .actions { justify-content: center; }

  /* Hero : tout centré (déjà fait par hero__inner text-align:center) */

  /* CTA blockquote (citations) : centrer */
  .comparatif__quote { text-align: center; }

  /* Section CTA inline-CSS de fin de section : centrer toujours */
  .section-cta, .section-cta * { text-align: center; }
  .section-cta__text { margin-inline: auto; max-width: 38ch; }

  /* ---- Process timeline → fil d'Ariane horizontal mobile ---- */
  .process__track {
    display: flex !important;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 18px;
    grid-auto-flow: unset;
    grid-auto-columns: unset;
    padding: 8px 18px 18px;
    margin-inline: -18px;
    scrollbar-width: none;
  }
  .process__track::-webkit-scrollbar { display: none; }
  .process__track::before { display: none !important; }
  .process__step {
    flex: 0 0 78%;
    scroll-snap-align: center;
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: 18px 18px 44px 18px;
    padding: 22px 22px 26px;
    position: relative;
  }
  /* Indicateur fil d'Ariane (badge "1/3 · 2/3 · 3/3") */
  .process__num {
    position: absolute; top: 14px; right: 14px;
    width: 38px; height: 38px;
    margin: 0; font-size: 1rem;
  }

  /* ---- Diplômes → carrousel scroll-snap mobile ---- */
  .diplomas-grid {
    display: flex;
    grid-template-columns: none;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 14px;
    margin-inline: -18px;
    padding: 4px 18px 18px;
    scrollbar-width: none;
  }
  .diplomas-grid::-webkit-scrollbar { display: none; }
  .diplomas-grid > .diploma {
    flex: 0 0 80%;
    scroll-snap-align: center;
  }

  /* « 4 approches » → carrousel horizontal scroll-snap */
  .services-grid {
    display: flex;
    grid-template-columns: none;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    gap: 14px;
    margin-inline: -18px;
    padding: 4px 18px 18px;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .services-grid::-webkit-scrollbar { display: none; }
  .services-grid .service-card {
    flex: 0 0 84%;
    scroll-snap-align: center;
    padding: 26px 22px;
  }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  .reveal { opacity: 1; transform: none; }
  .marquee { animation: none; flex-wrap: wrap; justify-content: center; }
  .process__track::before { transform: scaleX(1); }
}

/* ============================================
   COUCHE ESTHÉTIQUE « FEMINE » — pages pilotes uniquement
   (body.theme-femine : accueil + Santé mentale). Douceur éditoriale :
   rayons plus arrondis, ombres diffuses teintées, accent sous les kickers.
   Palette inchangée. À généraliser au site après validation.
   ============================================ */
.theme-femine .service-card,
.theme-femine .feature-card,
.theme-femine .review-card,
.theme-femine .gift-card,
.theme-femine .stat,
.theme-femine .social-card,
.theme-femine .hours-card {
  border-radius: 24px;
  box-shadow: 0 24px 50px -30px rgba(44, 185, 198, 0.32);
}
.theme-femine .service-card {
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
}
.theme-femine .service-card:hover {
  transform: translateY(-6px);
  box-shadow: 0 34px 64px -30px rgba(44, 185, 198, 0.40);
}
/* Trait d'accent fin sous les sur-titres centrés (touche éditoriale) */
.theme-femine .section-header--center .section-kicker {
  display: inline-block;
}
.theme-femine .section-header--center .section-kicker::after {
  content: "";
  display: block;
  width: 42px; height: 2px;
  margin: 12px auto 0;
  border-radius: 2px;
  background: linear-gradient(90deg, var(--color-primary), var(--color-accent));
}
/* Sur fond photo (section maux), l'accent reste clair */
.theme-femine .section--parallax .section-header--center .section-kicker::after {
  background: linear-gradient(90deg, rgba(255,255,255,0.9), var(--color-secondary));
}

/* ============================================
   UPGRADE ORGANIQUE (global) — formes images, blobs, boutons verre
   ============================================ */
html, body { overflow-x: hidden; }

/* ---- D · Forme des images : rectangle arrondi, 2 angles plus marqués (pas de rognage) ---- */
.hero__media,
.about__media {
  border-radius: 28px 76px 28px 76px;
}
.gallery-item,
.quinconce__portrait {
  border-radius: 22px 52px 22px 52px;
  overflow: hidden;
}
@media (max-width: 768px) {
  .hero__media, .about__media { border-radius: 24px 56px 24px 56px; }
}

/* ---- E · Blobs décoratifs discrets (couleurs cliente) ---- */
.has-blob { position: relative; }
.has-blob > .container { position: relative; z-index: 1; }
/* Anciens blobs (HTML) remplacés par le système organique homogène ci-dessous */
.blob-deco { display: none; }

/* ============================================
   FORMES ORGANIQUES D'ARRIÈRE-PLAN (site-wide, très subtiles, chaudes, lentes)
   Pseudo-éléments par section — bords fondus, opacité 5–12 %, dérive lente.
   ============================================ */
@keyframes organic-float {
  from { transform: translate3d(0, 0, 0) scale(1) rotate(0deg); }
  to   { transform: translate3d(3%, -2%, 0) scale(1.07) rotate(3deg); }
}
.section > .container { position: relative; z-index: 1; }
.section::after {
  content: ""; position: absolute; z-index: 0; pointer-events: none;
  width: min(62vw, 720px); aspect-ratio: 1.25 / 1;
  top: -8%; right: -10%;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 520'%3E%3Cdefs%3E%3CradialGradient id='a' cx='0.42' cy='0.34' r='0.82'%3E%3Cstop offset='0' stop-color='%23F5D77B' stop-opacity='0.55'/%3E%3Cstop offset='1' stop-color='%23F5D77B' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Cpath d='M130,70 C320,15 540,55 600,200 C650,320 540,450 360,475 C210,496 70,440 45,290 C28,180 60,105 130,70 Z' fill='url(%23a)'/%3E%3Cpath d='M70,370 C220,310 330,430 470,340 C545,295 590,305 620,335' fill='none' stroke='%23B8862A' stroke-opacity='0.42' stroke-width='1.6'/%3E%3Cpath d='M150,180 C270,120 390,165 520,120' fill='none' stroke='%23B8862A' stroke-opacity='0.28' stroke-width='1.2'/%3E%3C/svg%3E") center / contain no-repeat;
  opacity: 0.6;
  will-change: transform;
  animation: organic-float 52s ease-in-out infinite alternate;
}
.section--alt::after {
  top: auto; right: auto; bottom: -10%; left: -10%;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 520'%3E%3Cdefs%3E%3CradialGradient id='b' cx='0.4' cy='0.62' r='0.85'%3E%3Cstop offset='0' stop-color='%23F0D6B0' stop-opacity='0.6'/%3E%3Cstop offset='1' stop-color='%23F0D6B0' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Cpath d='M130,70 C320,15 540,55 600,200 C650,320 540,450 360,475 C210,496 70,440 45,290 C28,180 60,105 130,70 Z' fill='url(%23b)'/%3E%3Cpath d='M40,330 C200,400 330,300 470,360 C545,392 585,372 615,340' fill='none' stroke='%23CF955F' stroke-opacity='0.38' stroke-width='1.6'/%3E%3Cpath d='M170,460 C290,512 410,462 540,492' fill='none' stroke='%23CF955F' stroke-opacity='0.26' stroke-width='1.2'/%3E%3C/svg%3E") center / contain no-repeat;
  animation-duration: 60s;
}
.section:nth-of-type(even)::after { right: auto; left: -12%; animation-duration: 56s; }
.section:nth-of-type(3n)::after {
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 520'%3E%3Cdefs%3E%3CradialGradient id='c' cx='0.5' cy='0.4' r='0.8'%3E%3Cstop offset='0' stop-color='%23C5E0EA' stop-opacity='0.5'/%3E%3Cstop offset='1' stop-color='%23C5E0EA' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Cpath d='M130,70 C320,15 540,55 600,200 C650,320 540,450 360,475 C210,496 70,440 45,290 C28,180 60,105 130,70 Z' fill='url(%23c)'/%3E%3Cpath d='M70,360 C220,300 330,420 470,330 C545,290 590,300 620,330' fill='none' stroke='%232CB9C6' stroke-opacity='0.38' stroke-width='1.5'/%3E%3C/svg%3E") center / contain no-repeat;
}
/* Hero : forme chaude derrière le filigrane photo */
.hero { isolation: isolate; }
.hero__media, .hero__text { position: relative; z-index: 2; }
.hero::after {
  content: ""; position: absolute; z-index: 0; pointer-events: none;
  width: min(60vw, 640px); aspect-ratio: 1.3 / 1;
  top: -14%; right: -8%;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 520'%3E%3Cdefs%3E%3CradialGradient id='h' cx='0.45' cy='0.35' r='0.82'%3E%3Cstop offset='0' stop-color='%23F5D77B' stop-opacity='0.5'/%3E%3Cstop offset='1' stop-color='%23F5D77B' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Cpath d='M130,70 C320,15 540,55 600,200 C650,320 540,450 360,475 C210,496 70,440 45,290 C28,180 60,105 130,70 Z' fill='url(%23h)'/%3E%3Cpath d='M70,360 C220,300 330,420 470,330 C545,290 590,300 620,330' fill='none' stroke='%23B8862A' stroke-opacity='0.4' stroke-width='1.5'/%3E%3Cpath d='M150,200 C270,150 390,185 520,150' fill='none' stroke='%232CB9C6' stroke-opacity='0.3' stroke-width='1.2'/%3E%3C/svg%3E") center / contain no-repeat;
  opacity: 0.65;
  will-change: transform;
  animation: organic-float 58s ease-in-out infinite alternate;
}
@media (max-width: 768px) {
  .section::after, .hero::after { animation: none; width: 86vw; opacity: 0.5; }
}

/* ---- F · Glassmorphisme renforcé sur les boutons ---- */
.btn--primary {
  background: rgba(232, 181, 74, 0.82);
  -webkit-backdrop-filter: blur(10px) saturate(1.2);
          backdrop-filter: blur(10px) saturate(1.2);
  border: 1px solid rgba(255, 255, 255, 0.4);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.45), 0 10px 26px -12px rgba(232, 181, 74, 0.6);
}
.btn--primary:hover {
  background: rgba(232, 181, 74, 0.92);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5), 0 16px 32px -14px rgba(232, 181, 74, 0.7);
}
.btn--secondary {
  background: rgba(255, 255, 255, 0.55);
  -webkit-backdrop-filter: blur(10px) saturate(1.2);
          backdrop-filter: blur(10px) saturate(1.2);
  border: 1.5px solid rgba(44, 185, 198, 0.45);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6), 0 8px 22px -14px rgba(44, 185, 198, 0.45);
}
.btn--secondary:hover {
  background: var(--color-primary-strong);
  color: var(--color-on-primary);
  border-color: var(--color-primary-strong);
}
/* CTA Onedoc du header : garde un fond bien plein (lisibilité sur header clair) */
.header .btn--primary { background: var(--color-primary); }

/* ---- G · CTA « Réserver un soin » dans la carte maux dépliée ---- */
.maux-card__cta {
  margin-top: 16px;
  width: 100%;
  justify-content: center;
}

/* ============================================
   MODERN POLISH — interactions fines (boutons, cartes, liens, galerie)
   ============================================ */
/* Retour tactile + halo focus sur tous les boutons */
.btn { transition: transform var(--t-hover) var(--ease), background var(--t-hover) var(--ease), box-shadow var(--t-hover) var(--ease), color var(--t-hover) var(--ease); }
.btn:active { transform: translateY(0) scale(0.985); }
.btn:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 3px; }
.btn i { transition: transform var(--t-hover) var(--ease); }
.btn:hover i { transform: translateX(3px); }

/* Cartes : hover lift + bordure turquoise + ombre douce en couches (global) */
.service-card, .feature-card, .review-card, .gift-card {
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease), border-color 0.4s var(--ease);
}
.service-card:hover, .feature-card:hover, .review-card:hover, .gift-card:not(.gift-card--featured):hover {
  transform: translateY(-6px);
  border-color: rgba(232, 181, 74,0.45);
  box-shadow: 0 4px 14px -8px rgba(44, 185, 198,0.18), 0 26px 50px -28px rgba(44, 185, 198,0.30);
}

/* Liens fléchés : la flèche glisse */
.link-arrow i { transition: transform var(--t-hover) var(--ease); }
.link-arrow:hover i { transform: translateX(5px); }

/* Galerie : zoom doux de l'image au survol */
.gallery-item img { transition: transform 0.6s var(--ease); }
.gallery-item:hover img { transform: scale(1.05); }

/* Maux : pills + carte — micro-feedback */
.maux-card__toggle:focus-visible { outline: 2px solid var(--maux-accent); outline-offset: 3px; border-radius: 4px; }
.maux-pill { transition: border-color var(--t-hover) var(--ease), background var(--t-hover) var(--ease); }

/* ============================================
   BOUTONS — dégradé bleu + sans ombre (demande cliente)
   ============================================ */
.btn--primary,
.header .btn--primary,
.cta-final .btn--inverted {
  background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-strong) 100%);
  color: #fff;
  border: 1px solid rgba(255,255,255,0.30);
  -webkit-backdrop-filter: none;
          backdrop-filter: none;
}
/* (hover bleu vif supprimé — le survol chaud « lumière filtrée » du bloc CTA premium
   plus bas pilote désormais le survol : background-position animé sur le dégradé teal) */
/* Plus aucune ombre sur les boutons */
.btn, .btn:hover,
.btn--primary, .btn--primary:hover,
.btn--secondary, .btn--secondary:hover,
.btn--inverted, .btn--inverted:hover,
.btn--ghost, .btn--ghost:hover,
.cta-final .btn--inverted, .cta-final .btn--inverted:hover,
.maux-card__cta, .maux-card__cta:hover {
  box-shadow: none !important;
}

/* ============================================
   ATMOSPHÈRE PREMIUM — lumière, matière, profondeur (clinique douce / spa éditorial)
   Couleurs inchangées : turquoise = lumière/accent, jamais masse.
   ============================================ */

/* 1 · Halos lumineux atmosphériques sur les fonds (très subtils) */
.section--bg {
  background:
    radial-gradient(130% 90% at 88% -10%, rgba(232, 181, 74,0.07), transparent 55%),
    radial-gradient(120% 80% at 0% 110%, rgba(217, 187, 122,0.12), transparent 55%),
    var(--color-bg);
}
.section--alt {
  background:
    radial-gradient(120% 85% at 90% 0%, rgba(232, 181, 74,0.08), transparent 55%),
    linear-gradient(180deg, var(--color-bg-alt) 0%, #FBF3E6 100%);
}

/* 2 · Grain de film quasi invisible (matière) — couche fixe, n'intercepte rien */
body::after {
  content: "";
  position: fixed; inset: 0; z-index: 60;
  pointer-events: none; opacity: 0.035;
  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.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 160px 160px;
  mix-blend-mode: multiply;
}
@media (prefers-reduced-motion: reduce) { body::after { display: none; } }

/* 3 · Cartes : profondeur lumineuse douce (ombre colorée diffuse) au lieu d'aplats/bords nets */
.service-card, .feature-card, .review-card,
.gift-card:not(.gift-card--featured), .safeproof-badge,
.channel-card, .hours-card:not(.hours-card--closed),
.social-card, .diploma, .reassurance__item {
  border-color: rgba(30,45,51,0.06);
  box-shadow: 0 2px 4px rgba(30,45,51,0.015), 0 26px 50px -34px rgba(44, 185, 198,0.16);
}
.service-card:hover, .feature-card:hover, .review-card:hover,
.gift-card:not(.gift-card--featured):hover, .safeproof-badge:hover,
.channel-card:hover, .hours-card:not(.hours-card--closed):hover,
.social-card:hover, .diploma:hover, .reassurance__item:hover {
  border-color: rgba(232, 181, 74,0.30);
  box-shadow: 0 4px 10px rgba(30,45,51,0.02), 0 36px 64px -34px rgba(44, 185, 198,0.26);
}

/* 4 · Image hero : halo lumineux turquoise très doux (profondeur, pas d'aplat) */
.hero__media { box-shadow: 0 50px 90px -55px rgba(232, 181, 74,0.40); }

/* 5 · Bandes citation / parallax : lumière chaude par-dessus la photo (atmosphère) */
.fixed-quote::after {
  background:
    radial-gradient(80% 60% at 20% 30%, rgba(232, 181, 74,0.10), transparent 60%),
    linear-gradient(120deg, rgba(22,30,34,0.50) 0%, rgba(22,30,34,0.28) 100%);
}

/* 6 · Italiques de titre (Cormorant) : accent éditorial lumineux */
.hero__title em, .section-title em, .cta-final__title em {
  font-style: italic;
  color: var(--color-primary-strong);
}

/* ============================================
   CTA « OBJET PREMIUM » — matière, lumière filtrée, micro-interactions lentes
   Petites capitales, surface organique + grain, flèche fine, hover cinématique.
   ============================================ */
/* Neutraliser l'ancienne pastille glissante + padding asymétrique */
.btn--primary:not(:has(i)), .btn--inverted:not(:has(i)),
.btn--primary:not(:has(i)):hover, .btn--inverted:not(:has(i)):hover,
.btn--primary:not(:has(i)):focus-visible, .btn--inverted:not(:has(i)):focus-visible {
  overflow: visible;
  padding-inline: 44px;
}
/* Forme étirée + typo petites capitales éditoriales */
.btn {
  position: relative;
  border-radius: 14px;
  padding: 15px 44px;
  min-height: 52px;
  font-weight: 500;
  /* PASS 16 §C — toutes-petites-capitales (lettre initiale incluse) */
  font-variant-caps: all-small-caps;
  text-transform: lowercase;  /* fallback navigateurs sans support all-small-caps */
  letter-spacing: 0.08em;
  font-size: 0.98rem;
  gap: 14px;
  transition: background-position 0.7s cubic-bezier(0.22,0.61,0.36,1),
              background-color 0.6s var(--ease),
              color 0.5s var(--ease), border-color 0.5s var(--ease),
              transform 0.6s cubic-bezier(0.22,0.61,0.36,1),
              box-shadow 0.6s var(--ease);
}
.btn:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 3px; }

/* Primaire : surface organique (3 arrêts) + halo de lumière filtrée + grain fin,
   la lumière balaie lentement au survol (background-position animé). */
.btn--primary, .header .btn--primary, .cta-final .btn--inverted {
  color: #fff;
  border: 1px solid rgba(255,255,255,0.24);
  background-color: #2CB9C6;
  background-image: linear-gradient(180deg, #2CB9C6 0%, #5CCED8 100%);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.30), 0 14px 34px -22px rgba(44, 185, 198,0.45) !important;
}
.btn--primary:hover, .header .btn--primary:hover, .cta-final .btn--inverted:hover {
  transform: translateY(-1px);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.26), 0 20px 42px -22px rgba(44, 185, 198,0.50) !important;
}
/* Secondaire : verre bleuté atmosphérique */
.btn--secondary {
  background: rgba(255, 255, 255, 0.55);
  -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  color: #2CB9C6;
  border: 1.5px solid #2CB9C6;
  box-shadow: none !important;
}
.btn--secondary:hover {
  background: #2CB9C6;
  color: #fff;
  border-color: #2CB9C6;
  transform: translateY(-1px);
}
/* Ghost : lien éditorial fin */
.btn--ghost {
  background: transparent;
  border: 1px solid rgba(44, 185, 198,0.26);
  color: var(--color-primary-strong);
}
.btn--ghost:hover {
  background: rgba(232, 181, 74,0.10);
  color: var(--color-primary-strong);
  border-color: rgba(44, 185, 198,0.40);
  transform: translateY(-1px);
}
/* Flèche fine sophistiquée (ligne SVG en masque, hérite la couleur) */
.btn--primary:not(:has(i))::after,
.btn--secondary:not(:has(i))::after,
.btn--inverted:not(:has(i))::after,
.btn--ghost:not(:has(i))::after {
  content: "";
  position: static; inset: auto; top: auto; right: auto; margin: 0;
  width: 22px; height: 10px; flex-shrink: 0; align-self: center;
  background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='10' viewBox='0 0 26 10' fill='none' stroke='black' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 5h24'/%3E%3Cpath d='M20 1l4 4-4 4'/%3E%3C/svg%3E") no-repeat center / contain;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='10' viewBox='0 0 26 10' fill='none' stroke='black' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 5h24'/%3E%3Cpath d='M20 1l4 4-4 4'/%3E%3C/svg%3E") no-repeat center / contain;
  opacity: 0.7; transform: translateX(0);
  transition: transform 0.6s cubic-bezier(0.22,0.61,0.36,1), opacity 0.5s var(--ease);
}
.btn--primary:not(:has(i)):hover::after,
.btn--secondary:not(:has(i)):hover::after,
.btn--inverted:not(:has(i)):hover::after,
.btn--ghost:not(:has(i)):hover::after,
.btn--primary:not(:has(i)):focus-visible::after,
.btn--inverted:not(:has(i)):focus-visible::after {
  transform: translateX(4px); opacity: 1;
}
/* Header : CTA compact, sans flèche, surface plus discrète */
.header .btn::after { content: none; }
.header .btn--primary, .header .btn--primary:hover {
  padding: 11px 24px; min-height: 0;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.20) !important;
}

/* ============================================
   SECTION « QUI SUIS-JE » — composition éditoriale
   (visuel uniquement : titre allégé, colonne resserrée, respiration, hiérarchie)
   ============================================ */
.about__inner { gap: 80px; align-items: center; }
.about__media { align-self: center; min-height: 0; aspect-ratio: 4 / 5; transform: translateY(-10px); }
.about__text { max-width: 480px; }
.about__text .section-kicker { margin-bottom: 22px; }
.about__text .section-title {
  font-size: 2.2rem; font-weight: 500; line-height: 1.16;
  letter-spacing: -0.01em; margin-bottom: 26px;
}
.about__text p { margin-bottom: 18px; line-height: 1.65; color: var(--color-text-muted); }
.about__text p:first-of-type { font-size: 1.06rem; line-height: 1.6; color: var(--color-text); margin-bottom: 20px; }
.about__text .btn { margin-top: 16px; }
@media (max-width: 1024px) {
  .about__media { transform: none; aspect-ratio: 4 / 3; }
  .about__text { max-width: 100%; }
  .about__text .section-title { font-size: 2.2rem; }
}

/* ============================================
   HERO — photo en filigrane (transparence blanche) en arrière-plan
   Générique : chaque hero porte sa propre image via --hero-bg (inline).
   ============================================ */
.hero--home {
  background-image:
    linear-gradient(rgba(251,245,236,0.88), rgba(251,245,236,0.92)),
    url('../images/soin-crane-2.png');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}
/* PASS 38 : règle supprimée — variable --hero-bg obsolète */

/* ============================================
   RÉASSURANCE intégrée au hero (remonte sous le hero, cartes flottantes)
   ============================================ */
.reassurance { position: relative; z-index: 3; margin-top: -46px; }
@media (max-width: 768px) { .reassurance { margin-top: -22px; } }

/* ============================================
   Correctif centrage : intro/cta centrés sous un en-tête centré
   ============================================ */
.section-header--center .section-intro,
.section-header--center .section-cta__text { margin-inline: auto; }

/* Limiter les orphelins (mot seul en dernière ligne) — navigateurs récents */
.section-intro, .hero__subtitle, .about__text p, .section-cta__text,
.feature-card__text, .service-card__text, .maux-card__title { text-wrap: pretty; }

/* ============================================
   « À quels maux » — grille éditoriale (9 indications, filets fins, pictos light)
   ============================================ */
.maux-list {
  display: grid; grid-template-columns: repeat(3, 1fr);
  margin-top: 14px;
  border-top: 1px solid var(--color-border);
}
.maux-item {
  display: flex; align-items: center; gap: 16px;
  padding: 28px 22px;
  border-bottom: 1px solid var(--color-border);
  border-right: 1px solid var(--color-border);
  font-size: 1.02rem; color: var(--color-text); line-height: 1.35;
  transition: background var(--t-hover) var(--ease);
}
.maux-item:nth-child(3n) { border-right: none; }
.maux-item:hover { background: rgba(232, 181, 74,0.06); }
.maux-item i { font-size: 26px; color: var(--color-primary-strong); flex-shrink: 0; }
@media (max-width: 1024px) {
  .maux-list { grid-template-columns: 1fr 1fr; }
  .maux-item:nth-child(3n) { border-right: 1px solid var(--color-border); }
  .maux-item:nth-child(2n) { border-right: none; }
}
@media (max-width: 640px) {
  .maux-list { grid-template-columns: 1fr; }
  .maux-item { border-right: none !important; padding: 22px 14px; }
}

/* ====================================================================
   HOMEPAGE PASS 2 — Refonte ciblée index :
   · Hero immersif (photo plein-cadre + scrim doux, texte overlay)
   · Navbar glassmorphisme épuré, flottante & arrondie
   · Formes organiques d'arrière-plan : montagne oneline + débordement
   · Chiffres clés mobile en 2 colonnes × 3 lignes
   · Section Process : breadcrumb vertical ondulé, alternance L/R,
     parallaxe montagne, GSAP step-reveal
   · Swiper reviews mobile (grid desktop conservée)
   ==================================================================== */

/* ---------- 1 · HEADER glassmorphisme flottant (PASS 13 — verre franchement visible) ---------- */
.header {
  inset: 14px 14px auto 14px !important;
  border-radius: 22px;
  /* Translucidité plus marquée : on doit lire la photo qui passe derrière */
  background: rgba(252,245,232, 0.38) !important;
  /* Blur + saturate plus forts → effet verre dépoli net */
  -webkit-backdrop-filter: blur(26px) saturate(1.75);
          backdrop-filter: blur(26px) saturate(1.75);
  /* Bord clair + reflet intérieur lumineux (la signature glass) */
  border: 1px solid rgba(255,255,255,0.55) !important;
  box-shadow:
    0 22px 48px -24px rgba(46,41,34,0.38),
    0 6px 14px -6px rgba(46,41,34,0.14),
    inset 0 1px 0 rgba(255,255,255,0.65),
    inset 0 -1px 0 rgba(255,255,255,0.18) !important;
  transition: background var(--t-cross) var(--ease),
              box-shadow var(--t-cross) var(--ease),
              border-color var(--t-cross) var(--ease);
}
.header__inner { height: 68px; padding-inline: 22px; }
/* En scroll : on garde le verre (sans solidifier la barre) — on ajoute juste de la profondeur */
.header.is-scrolled,
.header.is-nav-open {
  background: rgba(252,245,232, 0.52) !important;
  border-color: rgba(255,255,255,0.65) !important;
  box-shadow:
    0 28px 56px -22px rgba(46,41,34,0.42),
    0 8px 18px -8px rgba(46,41,34,0.18),
    inset 0 1px 0 rgba(255,255,255,0.72),
    inset 0 -1px 0 rgba(255,255,255,0.22) !important;
}
/* Fallback navigateurs sans backdrop-filter — barre plus opaque pour rester lisible */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .header { background: rgba(252,245,232, 0.92) !important; }
}
@media (max-width: 768px) {
  .header { inset: 10px 10px auto 10px !important; border-radius: 18px; }
  .header__inner { height: 60px; padding-inline: 16px; }
}

/* ---------- 2 · HERO immersif (photo plein-cadre + scrim) ---------- */
/* PASS 38 : ANCIEN bloc supprimé — il forçait var(--hero-bg) !important
   ce qui cassait l'inline style HTML (qui utilise --hero-photo).
   Tout le bg-image est désormais dans l'inline style de chaque section hero. */
.hero--home .hero__inner,
.hero[style*="--hero-bg"] .hero__inner {
  grid-template-columns: 1fr !important;
  text-align: left;
  padding-block: clamp(48px, 9vh, 88px);
  padding-top: 120px; /* under floating navbar */
}
.hero--home .hero__media,
.hero[style*="--hero-bg"] .hero__media { display: none !important; }
.hero--home .hero__text,
.hero[style*="--hero-bg"] .hero__text {
  max-width: 720px;
  margin: 0;
}
.hero--home .hero__title,
.hero--home .hero__title em,
.hero--home .hero__subtitle,
.hero--home .hero__eyebrow,
.hero[style*="--hero-bg"] .hero__title,
.hero[style*="--hero-bg"] .hero__title em,
.hero[style*="--hero-bg"] .hero__subtitle,
.hero[style*="--hero-bg"] .hero__eyebrow {
  color: #FFF7DA !important;
  text-shadow: 0 2px 18px rgba(20,16,10,0.35);
}
.hero--home .hero__title em,
.hero[style*="--hero-bg"] .hero__title em {
  color: var(--color-accent-soft) !important;
}
.hero--home .hero__subtitle,
.hero[style*="--hero-bg"] .hero__subtitle {
  color: rgba(255,251,242,0.95) !important;
}
.hero--home .hero__eyebrow,
.hero[style*="--hero-bg"] .hero__eyebrow {
  color: rgba(255,251,242,0.92) !important;
  background: rgba(255,255,255,0.10);
  border: 1px solid rgba(255,255,255,0.32);
  -webkit-backdrop-filter: blur(8px);
          backdrop-filter: blur(8px);
  padding: 8px 16px;
  border-radius: 999px;
  margin-bottom: 24px;
}
.hero--home .hero__eyebrow i,
.hero[style*="--hero-bg"] .hero__eyebrow i { color: var(--color-accent-soft) !important; }
.hero--home .btn--secondary,
.hero[style*="--hero-bg"] .btn--secondary {
  background: rgba(255,255,255,0.12);
  color: #FFF7DA;
  border-color: rgba(255,251,242,0.55);
  -webkit-backdrop-filter: blur(8px);
          backdrop-filter: blur(8px);
}
.hero--home .btn--secondary:hover,
.hero[style*="--hero-bg"] .btn--secondary:hover {
  background: rgba(255,255,255,0.22);
  color: #FFF7DA;
  border-color: #FFF7DA;
}

/* ---------- 3 · Formes organiques : montagne oneline + débordement ---------- */
.section { overflow: visible; }
.section > .container { position: relative; z-index: 1; }
.section::after,
.hero::after { overflow: visible; pointer-events: none; }
/* Section claire : halo crème + montagne caramel */
.section::after {
  width: min(78vw, 900px);
  aspect-ratio: 1.25 / 1;
  top: -10%; right: -14%;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 520'%3E%3Cdefs%3E%3CradialGradient id='a' cx='0.42' cy='0.36' r='0.82'%3E%3Cstop offset='0' stop-color='%23F5D77B' stop-opacity='0.55'/%3E%3Cstop offset='1' stop-color='%23F5D77B' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Cpath d='M130,70 C320,15 540,55 600,200 C650,320 540,450 360,475 C210,496 70,440 45,290 C28,180 60,105 130,70 Z' fill='url(%23a)'/%3E%3C/svg%3E") !important;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  opacity: 0.7;
}
.section--alt::after {
  top: auto; right: auto; bottom: -10%; left: -14%;
  width: min(78vw, 900px);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 520'%3E%3Cdefs%3E%3CradialGradient id='b' cx='0.4' cy='0.62' r='0.85'%3E%3Cstop offset='0' stop-color='%23F0D6B0' stop-opacity='0.6'/%3E%3Cstop offset='1' stop-color='%23F0D6B0' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Cpath d='M130,70 C320,15 540,55 600,200 C650,320 540,450 360,475 C210,496 70,440 45,290 C28,180 60,105 130,70 Z' fill='url(%23b)'/%3E%3C/svg%3E") !important;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
}
.section:nth-of-type(3n)::after {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 640 520'%3E%3Cdefs%3E%3CradialGradient id='c' cx='0.5' cy='0.42' r='0.8'%3E%3Cstop offset='0' stop-color='%23C5E0EA' stop-opacity='0.45'/%3E%3Cstop offset='1' stop-color='%23C5E0EA' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Cpath d='M130,70 C320,15 540,55 600,200 C650,320 540,450 360,475 C210,496 70,440 45,290 C28,180 60,105 130,70 Z' fill='url(%23c)'/%3E%3C/svg%3E") !important;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
}
/* Hero immersive : on retire la ligne SVG du ::after — la nouvelle ligne cream
   est injectée en SVG inline (.section-mountain--cream) pour pouvoir scrubber
   stroke-dashoffset au scroll. */
.hero::after { background-image: none !important; }
@media (max-width: 768px) {
  .section::after, .hero::after { width: 90vw; opacity: 0.55; }
}

/* ---------- 4 · Chiffres clés mobile = 2 colonnes × 3 lignes ---------- */
@media (max-width: 768px) {
  .stats-grid--3, .stats-grid {
    grid-template-columns: 1fr 1fr !important;
    gap: 12px;
  }
  .stat { padding: 22px 12px; }
  .stat__value { font-size: 1.7rem; }
  .stat__label { font-size: 0.82rem; line-height: 1.35; }
}

/* ---------- 5 · SECTION PROCESS — fil d'Ariane vertical ondulé ---------- */
.process {
  position: relative;
  padding: var(--section-pad) 0;
  overflow: hidden;
  background: var(--color-bg);
}
.process__bg {
  position: absolute; inset: 0;
  z-index: 0;
  background-size: cover;
  background-position: center;
  background-attachment: scroll; /* ex-fixed : évite le repaint plein cadre à chaque frame de scroll (fluidité) */
  opacity: 0.22;
  /* aucun filtre — couleurs natives de la photo de fond (directive cliente) */
}
.process__bg::after {
  content: "";
  position: absolute; inset: 0;
  background:
    linear-gradient(180deg, var(--color-bg) 0%, rgba(252,245,232,0.55) 30%, rgba(252,245,232,0.55) 70%, var(--color-bg) 100%);
}
/* Tablettes : fixed + cover re-rasterise la photo plein écran à chaque frame
   de scroll (jank net sur GPU intégré). L'effet fixe est réservé au desktop. */
@media (max-width: 1024px) {
  .process__bg { background-attachment: scroll; }
}
.process__inner { position: relative; z-index: 1; }
.process__steps {
  list-style: none;
  margin: 70px auto 0;
  max-width: 940px;
  position: relative;
  padding: 0;
}
.process__path {
  position: absolute;
  top: 20px; bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  width: 80px;
  height: calc(100% - 40px);
  color: var(--color-primary-strong);
  pointer-events: none;
  z-index: 0;
}
.process__step {
  position: relative;
  display: grid;
  grid-template-columns: 1fr 80px 1fr;
  column-gap: 24px;
  align-items: center;
  min-height: 180px;
  padding: 16px 0;
  opacity: 0.22; /* default : opaques, comme demandé */
  transform: translateY(10px);
  transition: opacity 0.55s var(--ease), transform 0.55s var(--ease);
}
.process__step.is-active { opacity: 1; transform: translateY(0); }
.process__step:nth-child(odd) .process__content {
  grid-column: 1; grid-row: 1;
  text-align: right; padding-right: 12px;
}
.process__step:nth-child(odd) .process__marker { grid-column: 2; grid-row: 1; }
.process__step:nth-child(even) .process__marker { grid-column: 2; grid-row: 1; }
.process__step:nth-child(even) .process__content {
  grid-column: 3; grid-row: 1;
  text-align: left; padding-left: 12px;
}
.process__marker {
  width: 60px; height: 60px;
  border-radius: 999px;
  background: var(--color-surface);
  border: 1.5px solid var(--color-primary-strong);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 1.05rem;
  color: var(--color-primary-strong);
  z-index: 2;
  justify-self: center;
  position: relative;
  box-shadow: 0 0 0 6px rgba(252,245,232, 1); /* mask la ligne SVG derrière */
  transition: background 0.45s var(--ease), color 0.45s var(--ease),
              transform 0.45s var(--ease), box-shadow 0.45s var(--ease);
}
.process__step.is-active .process__marker {
  background: var(--color-primary-strong);
  color: #fff;
  transform: scale(1.12);
  box-shadow: 0 0 0 6px rgba(252,245,232, 1), 0 14px 32px -16px rgba(44,110,114,0.55);
}
.process__content h3 {
  font-family: var(--font-heading);
  font-size: clamp(1.4rem, 1.6vw, 1.65rem);
  font-weight: 600;
  color: var(--color-text);
  margin-bottom: 10px;
  letter-spacing: -0.005em;
}
.process__content p {
  color: var(--color-text-muted);
  line-height: 1.6;
  margin: 0;
  max-width: 380px;
}
.process__step:nth-child(odd) .process__content p { margin-left: auto; }

/* Mobile : breadcrumb à gauche, étapes à droite */
@media (max-width: 768px) {
  .process { padding: 80px 0; }
  .process__bg { background-attachment: scroll; opacity: 0.18; }
  .process__steps {
    margin-top: 36px;
    padding-left: 76px;
  }
  .process__path {
    left: 22px;
    width: 44px;
    transform: none;
  }
  .process__step,
  .process__step:nth-child(odd),
  .process__step:nth-child(even) {
    grid-template-columns: 1fr;
    column-gap: 0;
    row-gap: 8px;
    min-height: 0;
    padding-block: 8px 28px;
  }
  .process__step .process__content,
  .process__step:nth-child(odd) .process__content,
  .process__step:nth-child(even) .process__content {
    grid-column: 1;
    grid-row: auto;
    text-align: left !important;
    padding: 0;
  }
  .process__step:nth-child(odd) .process__content p,
  .process__step:nth-child(even) .process__content p { margin-left: 0; }
  .process__step .process__marker,
  .process__step:nth-child(odd) .process__marker,
  .process__step:nth-child(even) .process__marker {
    position: absolute;
    left: -62px;
    top: 4px;
    grid-column: auto;
    grid-row: auto;
    width: 46px; height: 46px;
    font-size: 0.95rem;
    box-shadow: 0 0 0 5px var(--color-bg);
  }
}

/* ---------- 6 · SWIPER reviews (grid desktop, carrousel mobile) ---------- */
.reviews-swiper { position: relative; padding-bottom: 0; }
/* PASS 8 : grid desktop retiré — reviews-swiper est carrousel à TOUS les viewports */
@media (max-width: 768px) {
  .reviews-swiper { padding-bottom: 36px; }
  .reviews-swiper .swiper-slide { height: auto; }
  .reviews-swiper .swiper-pagination { bottom: 0 !important; }
  .reviews-swiper .swiper-pagination-bullet {
    background: var(--color-primary-strong);
    opacity: 0.28;
    width: 8px; height: 8px;
    margin: 0 5px !important;
    transition: opacity var(--t-hover) var(--ease), transform var(--t-hover) var(--ease);
  }
  .reviews-swiper .swiper-pagination-bullet-active {
    opacity: 1;
    background: var(--color-primary-strong);
    transform: scale(1.25);
  }
}

/* ====================================================================
   SECTION MOUNTAIN — silhouette oneline hand-drawn, tracée au scroll
   Injectée en SVG inline par animations.js (1 par section), pour pouvoir
   animer stroke-dashoffset via GSAP ScrollTrigger. Le halo radial chaud
   reste sur .section::after (data-URI), c'est l'atmosphère statique.
   ==================================================================== */
.section-mountain {
  position: absolute;
  pointer-events: none;
  z-index: 0;
  width: min(95vw, 1100px);
  height: auto;
  overflow: visible;
}
/* Ligne de montagne (oneline hand-drawn) */
.section-mountain__line {
  fill: none;
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
  opacity: 0.78;
}
.section-mountain--warm  .section-mountain__line { stroke: #F1C338; }
.section-mountain--sand  .section-mountain__line { stroke: #F1C338; }
.section-mountain--sage  .section-mountain__line { stroke: #2CB9C6; }
.section-mountain--cream .section-mountain__line { stroke: rgba(255,251,242,0.85); }
/* Halo organique chaud (radial gradient sur un path blob) — le fill est piloté
   inline via url(#…), pas besoin de styles ici. */
.section-mountain__halo { pointer-events: none; }

/* Position par variante — léger débordement sur les sections voisines */
.section-mountain--warm  { bottom: 6%;  right: -8%; }
.section-mountain--sand  { top: 10%;    left: -8%;  }
.section-mountain--sage  { bottom: 12%; left: -4%;  }
.section-mountain--cream { bottom: 16%; right: -6%; max-width: 75vw; }

/* Contenu de section au-dessus de la ligne */
.section > .container,
.process > .container,
.hero > .container { position: relative; z-index: 1; }

@media (max-width: 768px) {
  .section-mountain {
    max-width: 130vw;
    opacity: 0.85;
  }
}

/* Épure : on retire tous les halos ::after pour respecter strictement
   « 1 forme max par section » — la montagne SVG injectée est désormais
   le seul élément décoratif sur les sections marquées [data-mountain]. */
.section::after,
.section--alt::after,
.section:nth-of-type(3n)::after,
.hero::after { content: none !important; }

/* ====================================================================
   PAGE RÉSERVATION — iframe Onedoc + fallback discret
   ==================================================================== */
.page-reservation { background: var(--color-bg); }
.reservation-main { padding-top: 92px; }   /* sous la navbar flottante */
.reservation-hero { padding: 36px 0 28px; text-align: center; }
.reservation-hero__head { max-width: 720px; margin: 0 auto; }
.reservation-hero__title {
  font-family: var(--font-heading);
  font-size: clamp(2rem, 3.4vw, 2.8rem);
  line-height: 1.12; letter-spacing: -0.012em;
  color: var(--color-text);
  margin: 14px 0 18px;
  text-wrap: balance;
}
.reservation-hero__title em {
  font-style: italic;
  color: var(--color-primary-strong);
}
.reservation-hero__intro {
  font-size: var(--fs-large);
  color: var(--color-text-muted);
  line-height: 1.55;
  margin: 0;
  text-wrap: pretty;
}
.reservation-frame-section { padding: 12px 0 var(--section-pad); }
.reservation-frame {
  position: relative;
  width: 100%;
  /* PAS de hauteur fixe : le widget Onedoc envoie sa hauteur via postMessage
     et le script global.js l'applique en inline style sur l'iframe. La frame
     grandit avec son contenu, la page scrolle naturellement.
     min-height réduit (600→320) : le widget réel ne fait que ~440px, le
     min-height 600 laissait ~190px de crème vide dans la carte. */
  min-height: 320px;
  border-radius: var(--radius-card);
  overflow: visible;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  box-shadow: 0 6px 28px -18px rgba(46,41,34,0.25), 0 28px 60px -36px rgba(46,41,34,0.22);
  isolation: isolate;
}
.reservation-frame__iframe {
  position: relative;
  width: 100%;
  border: 0; display: block;
  background: var(--color-surface);
  z-index: 1;
}
/* Fallback 600px UNIQUEMENT avant l'arrivée du postMessage Onedoc : dès que
   le snippet pose height inline, ce min-height ne matche plus et la hauteur
   réelle du widget (souvent ~440px) reprend la main — plus de vide sous
   l'agenda. */
.reservation-frame__iframe:not([style*="height"]) {
  min-height: 600px;
}
/* Fallback derrière l'iframe : visible UNIQUEMENT si Onedoc bloque l'embed
   (l'iframe rendue est alors vide / transparente et laisse passer ce calque). */
.reservation-frame__fallback {
  position: absolute; inset: 0; z-index: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 18px; padding: 24px;
  text-align: center;
  background: var(--color-bg-alt);
}
.reservation-frame__fallback p {
  color: var(--color-text-muted);
  font-size: 0.98rem;
  margin: 0;
  display: inline-flex; align-items: center; gap: 8px;
}
.reservation-frame__fallback p i { color: var(--color-primary-strong); font-size: 1.15em; }
.reservation-fallback-note {
  margin-top: 14px;
  text-align: center;
  color: var(--color-text-muted);
}
.reservation-fallback-note a { color: var(--color-primary-strong); text-decoration: underline; text-underline-offset: 3px; }
.reservation-fallback-note a:hover { color: var(--color-text); }

@media (max-width: 768px) {
  .reservation-main { padding-top: 80px; }
  .reservation-frame { height: clamp(560px, 78vh, 800px); border-radius: var(--radius-sm); }
  .reservation-hero__title { font-size: 1.85rem; }
}

/* ====================================================================
   BOOKING MODAL — overlay déclenché par les CTA [data-booking-trigger]
   Fallback no-JS : le lien CTA mène vers reservation.html.
   ==================================================================== */
.booking-modal {
  position: fixed; inset: 0; z-index: 1500;
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
  opacity: 0; visibility: hidden;
  transition: opacity 0.3s var(--ease), visibility 0.3s var(--ease);
}
.booking-modal.is-open { opacity: 1; visibility: visible; }
.booking-modal__backdrop {
  position: absolute; inset: 0;
  background: rgba(20,16,10,0.55);
  -webkit-backdrop-filter: blur(8px);
          backdrop-filter: blur(8px);
}
.booking-modal__panel {
  position: relative; z-index: 1;
  width: 100%; max-width: 1080px;
  height: min(86vh, 900px);
  background: var(--color-surface);
  border-radius: 22px;
  overflow: hidden;
  display: flex; flex-direction: column;
  box-shadow: 0 30px 80px -30px rgba(20,16,10,0.55);
  transform: translateY(14px) scale(0.985);
  transition: transform 0.35s var(--ease);
}
.booking-modal.is-open .booking-modal__panel { transform: translateY(0) scale(1); }
.booking-modal__header {
  display: flex; align-items: center; justify-content: space-between;
  gap: 16px;
  padding: 16px 22px;
  border-bottom: 1px solid var(--color-border);
  background: rgba(252,245,232, 0.85);
  -webkit-backdrop-filter: blur(12px);
          backdrop-filter: blur(12px);
}
.booking-modal__title {
  font-family: var(--font-heading);
  font-size: 1.25rem; font-weight: 600;
  color: var(--color-text);
  margin: 0;
}
.booking-modal__title em { color: var(--color-primary-strong); font-style: italic; }
.booking-modal__close {
  appearance: none;
  background: none; border: 1px solid var(--color-border);
  width: 38px; height: 38px;
  border-radius: 999px;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--color-text);
  cursor: pointer;
  transition: background var(--t-hover) var(--ease), color var(--t-hover) var(--ease), border-color var(--t-hover) var(--ease);
}
.booking-modal__close:hover { background: var(--color-bg-alt); color: var(--color-primary-strong); border-color: var(--color-primary-strong); }
.booking-modal__close i { font-size: 18px; }
.booking-modal__body {
  position: relative; flex: 1; min-height: 0;
  background: var(--color-surface);
  overflow-y: auto;   /* le widget Onedoc fixe sa hauteur en inline → on scroll dans le body */
  -webkit-overflow-scrolling: touch;
}
.booking-modal__iframe {
  width: 100%;
  min-height: 100%;   /* fallback avant que le widget envoie sa hauteur */
  border: 0; display: block;
  position: relative; z-index: 1;
}
.booking-modal__fallback {
  position: absolute; inset: 0; z-index: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 14px; padding: 24px;
  text-align: center;
  background: var(--color-bg-alt);
  color: var(--color-text-muted);
}
.booking-modal__footer {
  padding: 12px 22px;
  border-top: 1px solid var(--color-border);
  font-size: 0.85rem;
  text-align: center;
  color: var(--color-text-muted);
}
.booking-modal__footer a {
  color: var(--color-primary-strong);
  text-decoration: underline;
  text-underline-offset: 3px;
}
@media (max-width: 768px) {
  .booking-modal { padding: 0; }
  .booking-modal__panel {
    max-width: 100%; height: 100%;
    border-radius: 0;
  }
  .booking-modal__header { padding: 14px 16px; }
  .booking-modal__footer { padding: 10px 14px; font-size: 0.78rem; }
}
@media (prefers-reduced-motion: reduce) {
  .booking-modal, .booking-modal__panel { transition: none !important; transform: none !important; }
}
body.booking-modal-open { overflow: hidden; }

/* ====================================================================
   PASS 3 — Réassurance flags/logos + ASCA badges + section seamless +
   process outro CTA + mountain réduit + organic shapes par section
   ==================================================================== */

/* --- 1 · Réassurance : logo ASCA + drapeaux LGBTQIA / FR / EN --- */
.reassurance__list { display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; }
.reassurance__item {
  display: inline-flex; align-items: center; gap: 12px;
  padding: 14px 18px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  font-size: 0.92rem; color: var(--color-text);
  box-shadow: 0 4px 14px -10px rgba(46,41,34,0.18);
}
.reassurance__item i { font-size: 22px; color: var(--color-primary-strong); }
.reassurance__logo {
  height: 28px; width: auto; display: block;
  flex-shrink: 0; object-fit: contain;
}
.reassurance__flag {
  height: 22px; width: auto; display: block;
  flex-shrink: 0; border-radius: 4px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.12);
}
.reassurance__flag-pair { display: inline-flex; gap: 6px; align-items: center; }
.reassurance__flag-pair img {
  height: 18px; width: auto; border-radius: 3px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.12);
}
@media (max-width: 640px) {
  .reassurance__item { padding: 10px 14px; font-size: 0.85rem; gap: 10px; }
  .reassurance__logo { height: 24px; }
  .reassurance__flag { height: 18px; }
  .reassurance__flag-pair img { height: 14px; }
}

/* --- 2 · ASCA logo dans safeproof badges + stat + footer --- */
.safeproof-badge--asca { align-items: center; }
.safeproof-badge__logo {
  width: 56px; height: 56px;
  object-fit: contain;
  flex-shrink: 0;
}
.stat--asca {
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 12px;
}
.stat__logo {
  width: 80px; height: auto; object-fit: contain;
  display: block;
}
.stat--asca .stat__label { margin-top: 0; }
.footer__badge {
  display: inline-flex; align-items: center; gap: 8px;
}
.footer__badge-logo {
  height: 22px; width: auto; object-fit: contain;
}

/* --- 3 · Service-card alt term (« — biodynamique » etc.) --- */
.service-card__alt {
  display: block;
  font-size: 0.82em;
  font-weight: 400;
  color: var(--color-text-muted);
  font-style: italic;
  margin-top: 4px;
  letter-spacing: 0;
}

/* --- 4 · Process outro : portrait + CTA après les 5 étapes --- */
.process__outro {
  position: relative; z-index: 2;
  margin-top: 80px;
  padding: 36px;
  display: grid;
  grid-template-columns: 200px 1fr;
  gap: 32px; align-items: center;
  background: var(--color-surface);
  border-radius: var(--radius-card);
  border: 1px solid var(--color-border);
  box-shadow: 0 14px 40px -22px rgba(46,41,34,0.25);
  max-width: 760px;
  margin-left: auto; margin-right: auto;
}
.process__portrait {
  margin: 0;
  aspect-ratio: 4 / 5;
  border-radius: var(--radius-sm);
  overflow: hidden;
}
.process__portrait img { width: 100%; height: 100%; object-fit: cover; display: block; }
.process__cta { display: flex; flex-direction: column; gap: 16px; align-items: flex-start; }
.process__cta-text {
  font-family: var(--font-heading);
  font-size: 1.4rem; font-style: italic;
  color: var(--color-text);
  margin: 0; line-height: 1.25;
}
.process__cta .btn { align-self: flex-start; }
@media (max-width: 640px) {
  .process__outro {
    grid-template-columns: 1fr;
    padding: 24px;
    text-align: center;
    margin-top: 60px;
  }
  .process__portrait { max-width: 200px; margin: 0 auto; }
  .process__cta { align-items: center; }
  .process__cta .btn { align-self: center; }
}

/* --- 5 · Sections « sans démarcation » : on retire les fonds différents
   (sauf .fixed-quote qui a une image en parallaxe fixed) --- */
.section--bg, .section--alt {
  background: transparent !important;
}
/* Sauf si la section a une image de fond (paysage parallaxe) */
section.fixed-quote { background-color: var(--color-text) !important; }
/* Body neutre, ivoire chaud uniforme */
body { background: var(--color-bg); }

/* --- 6 · Mountain line : taille réduite + éviter derrière le texte --- */
.section-mountain {
  /* on réduit l'échelle globale */
  width: min(60vw, 760px) !important;
  opacity: 0.62 !important;
}
.section-mountain__line { stroke-width: 1.1 !important; opacity: 0.7 !important; }
.section-mountain__halo { opacity: 0.7 !important; }
/* Positions : on pousse vers les bords pour éviter de croiser le texte */
.section-mountain--warm  { bottom: 2% !important; right: -14% !important; }
.section-mountain--sand  { top: 4% !important;    left: -14% !important; }
.section-mountain--sage  { bottom: 6% !important; left: -10% !important; }
.section-mountain--cream { bottom: 8% !important; right: -10% !important; }
@media (max-width: 768px) {
  .section-mountain { width: 100vw !important; opacity: 0.7 !important; }
}

/* --- 7 · Formes organiques chaudes derrière CHAQUE section (sauf
   fixed-quote / cta-final / hero), pour la chaleur générale.
   Halo radial très diffus, opacité basse, n'attire pas l'attention. --- */
main > section:not(.fixed-quote):not(.cta-final):not(.hero)::before {
  content: ""; position: absolute;
  inset: 0; pointer-events: none; z-index: 0;
  background: radial-gradient(60% 70% at 20% 30%, rgba(232, 181, 74,0.06) 0%, transparent 60%),
              radial-gradient(50% 70% at 90% 80%, rgba(217, 187, 122,0.07) 0%, transparent 60%);
}
main > section { position: relative; }
main > section > .container,
main > section > .process__inner { position: relative; z-index: 1; }

/* ====================================================================
   PASS 4 — Resserrement responsive des cartes (process + tous types)
   Le pb : sur tablette/mobile, beaucoup de cartes héritaient de paddings
   et min-heights desktop → texte avec vide vertical énorme.
   ==================================================================== */

/* --- Process steps : align-items: start, min-height réduit --- */
.process__step {
  align-items: start !important;
  min-height: 120px !important;
  padding: 12px 0 !important;
}
.process__content h3 { margin-bottom: 6px !important; }
.process__content p { line-height: 1.5; }

/* --- Tablette (≤1024px) : compactage de toutes les cartes principales --- */
@media (max-width: 1024px) {
  .process__step { min-height: auto !important; padding: 8px 0 !important; }
  .process__steps { margin-top: 36px; }
  /* Cartes générales */
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma, .reassurance__item, .stat {
    padding: 22px 18px !important;
  }
  .service-card__title, .feature-card__title { font-size: 1.2rem !important; margin-bottom: 8px !important; }
  .service-card__text, .feature-card__text { font-size: 0.95rem !important; line-height: 1.5 !important; }
  .stat { padding: 20px 14px !important; }
  .stat__value { font-size: 2rem !important; }
  .stat__label { font-size: 0.86rem !important; line-height: 1.4 !important; }
}

/* --- Mobile (≤640px) : compactage maximal + suppression gaps --- */
@media (max-width: 640px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma {
    padding: 16px 14px !important;
    gap: 8px;
  }
  .service-card__title, .feature-card__title { font-size: 1.05rem !important; margin-bottom: 6px !important; }
  .service-card__text, .feature-card__text { font-size: 0.88rem !important; line-height: 1.4 !important; }
  .service-card__link { margin-top: 14px !important; }
  .process__step { padding: 4px 0 14px !important; }
  .process__content h3 { font-size: 1.15rem !important; margin-bottom: 4px !important; }
  .process__content p { font-size: 0.9rem; line-height: 1.4; }
  /* Stats grid déjà passé en 2×3, juste resserrer le padding interne */
  .stat { padding: 16px 10px !important; }
  .stat__value { font-size: 1.5rem !important; line-height: 1 !important; }
  .stat__label { font-size: 0.78rem !important; }
  /* Process marker mobile plus compact */
  .process__marker { width: 38px !important; height: 38px !important; font-size: 0.85rem !important; }
}

/* --- Très petit mobile (≤380px) : compactage extra --- */
@media (max-width: 380px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge { padding: 14px 12px !important; }
  .service-card__title, .feature-card__title { font-size: 1rem !important; }
  .service-card__text, .feature-card__text { font-size: 0.84rem !important; }
}

/* --- Process : s'assurer qu'aucun débordement horizontal n'apparaît
   sur les viewports tablette --- */
.process__steps { overflow: hidden; }
.process__step { word-wrap: break-word; }

/* ====================================================================
   PASS 5 — Cadre solide : badges polish + diplômes strip (V1)
   ==================================================================== */

/* --- Safeproof badges : polish premium --- */
.safeproof-grid {
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)) !important;
  gap: 20px !important;
}
.safeproof-badge {
  position: relative;
  padding: 24px !important;
  border-radius: var(--radius-card) !important;
  background: var(--color-surface) !important;
  border: 1px solid rgba(44, 185, 198, 0.07) !important;
  align-items: flex-start !important;
  gap: 16px !important;
  transition: transform 0.4s var(--ease), border-color 0.4s var(--ease), box-shadow 0.4s var(--ease) !important;
}
.safeproof-badge:hover {
  transform: translateY(-4px);
  border-color: rgba(232, 181, 74,0.45) !important;
  box-shadow: 0 4px 12px -8px rgba(46,41,34,0.06), 0 28px 56px -32px rgba(44, 185, 198,0.30) !important;
}
.safeproof-badge i {
  background: linear-gradient(135deg, rgba(232, 181, 74,0.10) 0%, rgba(217, 187, 122,0.18) 100%);
  border-radius: 14px;
  padding: 12px;
  font-size: 1.45rem !important;
  margin-top: 0 !important;
  flex-shrink: 0;
}
.safeproof-badge--asca .safeproof-badge__logo {
  width: 60px; height: 60px;
  padding: 8px;
  background: linear-gradient(135deg, rgba(232, 181, 74,0.08) 0%, rgba(217, 187, 122,0.16) 100%);
  border-radius: 14px;
  object-fit: contain;
  flex-shrink: 0;
}
.safeproof-badge__title {
  font-size: 1.05rem !important;
  letter-spacing: -0.005em;
  color: var(--color-text);
  margin-bottom: 4px;
  line-height: 1.2;
}
.safeproof-badge__text {
  font-size: 0.9rem !important;
  line-height: 1.45 !important;
  color: var(--color-text-muted);
  margin-top: 0 !important;
}

/* --- Diplômes strip : même largeur que le safeproof-grid au-dessus
   (même container, mêmes colonnes : repeat(auto-fit, minmax(220px, 1fr))) --- */
.diplomas-row {
  margin-top: 32px;
  position: relative;
}
.diplomas-row__label {
  font-size: 0.78rem;
  color: var(--color-text-muted);
  text-align: center;
  margin: 0 0 18px;
  font-variant-caps: small-caps;
  letter-spacing: 0.12em;
  font-weight: 500;
}
.diplomas-row__hint {
  font-style: italic;
  color: var(--color-primary-strong);
  font-variant-caps: normal;
  letter-spacing: 0.02em;
  text-transform: none;
}
.diplomas-strip {
  list-style: none;
  margin: 0; padding: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 20px;
}
.diplomas-strip > li { margin: 0; padding: 0; }
.diplomas-strip__item {
  appearance: none;
  width: 100%;
  background: var(--color-surface);
  border: 1px solid rgba(44, 185, 198, 0.07);
  border-radius: var(--radius-card);
  padding: 18px 18px 16px;
  display: flex; flex-direction: column;
  align-items: center; gap: 12px;
  cursor: zoom-in;
  font: inherit;
  color: inherit;
  text-align: center;
  transition: transform 0.4s var(--ease), border-color 0.4s var(--ease), box-shadow 0.4s var(--ease);
}
.diplomas-strip__item:hover,
.diplomas-strip__item:focus-visible {
  transform: translateY(-4px);
  border-color: rgba(232, 181, 74,0.45);
  box-shadow: 0 4px 12px -8px rgba(46,41,34,0.06), 0 24px 48px -28px rgba(44, 185, 198,0.30);
  outline: none;
}
.diplomas-strip__item:focus-visible {
  border-color: var(--color-primary-strong);
}
.diplomas-strip__thumb {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;
  background: linear-gradient(135deg, #FFFCF6 0%, #FBF3E0 100%);
  border-radius: 8px;
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  padding: 8px;
  position: relative;
}
.diplomas-strip__thumb::after {
  /* loupe indicator on hover */
  content: "\26B2"; /* ⚲ magnifier ; remplace par icône phosphor si besoin */
  position: absolute; top: 8px; right: 8px;
  width: 24px; height: 24px;
  border-radius: 999px;
  background: rgba(252,245,232,0.92);
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
  display: flex; align-items: center; justify-content: center;
  font-size: 12px;
  color: var(--color-primary-strong);
  opacity: 0; transform: translateY(-3px);
  transition: opacity 0.3s var(--ease), transform 0.3s var(--ease);
}
.diplomas-strip__item:hover .diplomas-strip__thumb::after {
  opacity: 1; transform: translateY(0);
}
.diplomas-strip__thumb img {
  max-width: 100%; max-height: 100%;
  object-fit: contain;
  display: block;
}
.diplomas-strip__thumb--logo { background: linear-gradient(135deg, rgba(232, 181, 74,0.08) 0%, rgba(217, 187, 122,0.16) 100%); }
.diplomas-strip__thumb--logo img { max-width: 60%; max-height: 70%; }
.diplomas-strip__caption {
  font-size: 0.85rem;
  color: var(--color-text);
  font-weight: 500;
  letter-spacing: -0.005em;
}
.diplomas-strip__year {
  display: block;
  font-size: 0.72rem;
  color: var(--color-text-muted);
  font-weight: 400;
  margin-top: 2px;
  letter-spacing: 0.05em;
}

@media (max-width: 768px) {
  .diplomas-strip { grid-template-columns: repeat(2, 1fr); gap: 14px; }
  .diplomas-strip__item { padding: 14px 12px 12px; }
}
@media (max-width: 400px) {
  .diplomas-strip { grid-template-columns: 1fr 1fr; gap: 12px; }
  .diplomas-strip__thumb { aspect-ratio: 4 / 3; }
}

/* --- Lightbox diplômes (commune au site) --- */
.diploma-lightbox {
  position: fixed; inset: 0; z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  background: rgba(20,16,10,0.86);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  padding: 24px;
  opacity: 0; visibility: hidden;
  transition: opacity 0.3s var(--ease), visibility 0.3s var(--ease);
}
.diploma-lightbox.is-open { opacity: 1; visibility: visible; }
.diploma-lightbox__img {
  max-width: 92vw; max-height: 88vh;
  object-fit: contain;
  border-radius: 8px;
  box-shadow: 0 30px 90px rgba(0,0,0,0.55);
  background: #fff;
  transform: scale(0.96);
  transition: transform 0.4s var(--ease);
}
.diploma-lightbox.is-open .diploma-lightbox__img { transform: scale(1); }
.diploma-lightbox__close {
  position: absolute; top: 22px; right: 22px;
  width: 48px; height: 48px; border-radius: 999px;
  background: #fff; border: 0; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 20px;
  color: var(--color-text);
  box-shadow: 0 8px 20px rgba(0,0,0,0.25);
  transition: transform 0.25s var(--ease);
}
.diploma-lightbox__close:hover { transform: scale(1.08); }
@media (prefers-reduced-motion: reduce) {
  .diploma-lightbox, .diploma-lightbox__img { transition: none; }
}
body.diploma-lightbox-open { overflow: hidden; }

/* ====================================================================
   PASS 6 — Process outro simple + responsive cards aérage
   ==================================================================== */

/* --- Outro simple : juste le bouton centré, pas de carte --- */
.process__outro--simple {
  margin-top: 64px;
  display: flex; justify-content: center;
  background: none;
  border: none;
  box-shadow: none;
  padding: 0;
  max-width: none;
}
.process__outro--simple .btn { min-width: 240px; }
@media (max-width: 640px) {
  .process__outro--simple { margin-top: 40px; }
}

/* --- Responsive process steps : plus d'air vertical + anti-débordement --- */
@media (max-width: 768px) {
  .process__step,
  .process__step:nth-child(odd),
  .process__step:nth-child(even) {
    padding-block: 18px 32px !important;
    margin-bottom: 18px !important;
  }
  .process__content {
    overflow-wrap: break-word;
    word-wrap: break-word;
    hyphens: auto;
    min-width: 0;
  }
  .process__content h3 { font-size: 1.15rem !important; }
  .process__content p { font-size: 0.92rem !important; max-width: 100% !important; line-height: 1.5; }
  .process__steps { padding-left: 70px !important; }
  .process__path { left: 18px !important; width: 38px !important; }
}
@media (max-width: 640px) {
  .process__step,
  .process__step:nth-child(odd),
  .process__step:nth-child(even) {
    padding-block: 16px 28px !important;
    margin-bottom: 22px !important;
  }
  .process__content h3 { font-size: 1.08rem !important; margin-bottom: 6px !important; }
  .process__content p { font-size: 0.88rem !important; line-height: 1.45; }
  .process__steps { padding-left: 60px !important; }
  .process__path { left: 14px !important; width: 34px !important; }
  .process__marker {
    left: -54px !important;
    width: 38px !important; height: 38px !important;
    font-size: 0.82rem !important;
  }
}
@media (max-width: 400px) {
  .process__steps { padding-left: 52px !important; }
  .process__marker { left: -48px !important; width: 34px !important; height: 34px !important; font-size: 0.75rem !important; }
  .process__content h3 { font-size: 1rem !important; }
  .process__content p { font-size: 0.84rem !important; }
}

/* ====================================================================
   PASS 7 — Réassurance icon-only + bump padding cartes mobile
   ==================================================================== */

/* --- Réassurance : cards icon-only (juste l'image, pas de texte) --- */
.reassurance__item--icon-only {
  padding: 12px 18px !important;
  gap: 0 !important;
  min-width: 60px;
  justify-content: center;
}
.reassurance__item--icon-only .reassurance__logo {
  height: 32px;
}
.reassurance__item--icon-only .reassurance__flag {
  height: 26px;
}
.reassurance__item--icon-only .reassurance__flag-pair img {
  height: 22px;
}
@media (max-width: 640px) {
  .reassurance__item--icon-only { padding: 10px 14px !important; }
  .reassurance__item--icon-only .reassurance__logo { height: 26px; }
  .reassurance__item--icon-only .reassurance__flag { height: 22px; }
  .reassurance__item--icon-only .reassurance__flag-pair img { height: 18px; }
}

/* --- Bump du padding sur toutes les cartes en mobile (texte décollé des bords) --- */
@media (max-width: 768px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma, .diplomas-strip__item,
  .maux-item {
    padding: 26px 22px !important;
  }
}
@media (max-width: 640px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma, .diplomas-strip__item,
  .maux-item {
    padding: 22px 20px !important;
    gap: 10px;
  }
  /* Reassurance items "avec texte" — gardent un padding confortable */
  .reassurance__item:not(.reassurance__item--icon-only) {
    padding: 14px 18px !important;
    font-size: 0.88rem !important;
  }
}
@media (max-width: 380px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma, .diplomas-strip__item,
  .maux-item {
    padding: 20px 18px !important;
  }
}

/* ====================================================================
   PASS 8 — Padding cartes desktop + variation tonale sections + hero
   slideshow + flèches reviews carrousel
   ==================================================================== */

/* --- 1. Padding cartes BUMP à tous les viewports (desktop inclus) --- */
.service-card, .feature-card, .review-card, .gift-card,
.safeproof-badge, .channel-card, .hours-card,
.social-card, .diploma, .diplomas-strip__item, .maux-item {
  padding: 32px 28px !important;
}
@media (max-width: 1024px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma, .diplomas-strip__item, .maux-item {
    padding: 30px 26px !important;
  }
}
@media (max-width: 768px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma, .diplomas-strip__item, .maux-item {
    padding: 26px 22px !important;
  }
}
@media (max-width: 640px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma, .diplomas-strip__item, .maux-item {
    padding: 24px 20px !important;
  }
}
@media (max-width: 380px) {
  .service-card, .feature-card, .review-card, .gift-card,
  .safeproof-badge, .channel-card, .hours-card,
  .social-card, .diploma, .diplomas-strip__item, .maux-item {
    padding: 22px 18px !important;
  }
}

/* --- 2. Variation tonale subtile section à section (alphas < 6%)
   Le halo radial existant `main > section::before` reçoit ici un
   override par :nth-of-type modulo 3 — warm / sand / sage rotation. --- */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero)::before {
  background:
    radial-gradient(60% 70% at 20% 30%, rgba(232, 181, 74, 0.045) 0%, transparent 60%),
    radial-gradient(50% 70% at 90% 80%, rgba(217, 187, 122, 0.06) 0%, transparent 60%) !important;
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero)::before {
  background:
    radial-gradient(60% 70% at 80% 25%, rgba(251, 235, 182, 0.055) 0%, transparent 60%),
    radial-gradient(50% 70% at 10% 75%, rgba(232, 181, 74, 0.045) 0%, transparent 60%) !important;
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero)::before {
  background:
    radial-gradient(60% 70% at 30% 30%, rgba(44, 185, 198, 0.045) 0%, transparent 60%),
    radial-gradient(50% 70% at 70% 80%, rgba(44, 185, 198, 0.04) 0%, transparent 60%) !important;
}

/* --- 3. Hero slideshow : crossfade sur 4 photos thérapie --- */
.hero__slides {
  position: absolute; inset: 0; z-index: 0;
  pointer-events: none;
  overflow: hidden;
}
.hero__slide {
  position: absolute; inset: 0;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  opacity: 0;
  transition: opacity 1.5s ease;
  will-change: opacity;
}
.hero__slide.is-active { opacity: 1; }

/* Le scrim immersive du hero (hero[style*="--hero-bg"]) doit rester au-dessus
   des slides mais en-dessous du texte. On force z-index sur les slides
   pour qu'elles passent derrière. */
.hero--home .container.hero__inner { position: relative; z-index: 2; }

@media (prefers-reduced-motion: reduce) {
  .hero__slide { transition: none !important; }
}

/* --- 4. Flèches navigation reviews carrousel --- */
.reviews-swiper {
  position: relative;
  padding: 0 56px 36px;   /* place pour les flèches latérales */
}
.reviews-swiper__prev,
.reviews-swiper__next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 5;
  width: 44px; height: 44px;
  border-radius: 999px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  color: var(--color-primary-strong);
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
  box-shadow: 0 6px 18px -10px rgba(46,41,34,0.2);
  transition: background var(--t-hover) var(--ease), transform var(--t-hover) var(--ease), border-color var(--t-hover) var(--ease);
  font-size: 18px;
}
.reviews-swiper__prev { left: 0; }
.reviews-swiper__next { right: 0; }
.reviews-swiper__prev:hover,
.reviews-swiper__next:hover {
  background: var(--color-primary-strong);
  color: #fff;
  border-color: var(--color-primary-strong);
  transform: translateY(-50%) scale(1.06);
}
.reviews-swiper__prev:disabled,
.reviews-swiper__next:disabled,
.reviews-swiper__prev.swiper-button-disabled,
.reviews-swiper__next.swiper-button-disabled {
  opacity: 0.35;
  cursor: default;
  pointer-events: none;
}
@media (max-width: 640px) {
  .reviews-swiper { padding: 0 0 36px; }
  .reviews-swiper__prev,
  .reviews-swiper__next {
    top: auto;
    bottom: -4px;
    transform: none;
    width: 38px; height: 38px;
  }
  .reviews-swiper__prev { left: calc(50% - 56px); }
  .reviews-swiper__next { right: calc(50% - 56px); }
  .reviews-swiper__prev:hover,
  .reviews-swiper__next:hover {
    transform: scale(1.06);
  }
}

/* ====================================================================
   PASS 9 — Retrait des filtres image sur fixed-quote / process,
   fonds tonals FIXES (solid color) par section, variation visible
   ==================================================================== */

/* --- 1. FIXED-QUOTE : scrim assombrissement très allégé (juste assez pour
   garder le texte blanc lisible), photo en couleurs naturelles --- */
.fixed-quote::after {
  background:
    linear-gradient(180deg, rgba(22,30,34,0.18) 0%, rgba(22,30,34,0.06) 35%, rgba(22,30,34,0.12) 100%) !important;
}
.fixed-quote blockquote,
.fixed-quote blockquote p,
.fixed-quote blockquote cite,
.fixed-quote blockquote .k {
  text-shadow: 0 2px 18px rgba(0,0,0,0.65), 0 0 36px rgba(0,0,0,0.40);
}

/* --- 2. PROCESS BG : photo en pleine couleur (opacity 0.22 → 0.6),
   retrait du voile cream qui sépia-isait, juste fade haut/bas pour
   transition douce de section. --- */
.process__bg {
  opacity: 0.6 !important;
}
.process__bg::after {
  background: linear-gradient(180deg,
    var(--color-bg) 0%,
    transparent 18%,
    transparent 82%,
    var(--color-bg) 100%) !important;
}
/* Pour rester lisible sur le bg image plus visible, on renforce le contraste
   du texte process (titre + paragraphe) avec un léger text-shadow cream */
.process__content h3,
.process__content p {
  text-shadow: 0 1px 12px rgba(252,245,232,0.7);
}

/* --- 3. SECTIONS NON-IMAGE : fond FIXE solid avec rotation tonale
   warm → chaud → doux par :nth-of-type. Override la transparence
   PASS 3 + désactive les halos radiaux PASS 8. --- */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process) {
  background: #FCE9AF !important;   /* ivoire chaud — base */
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process) {
  background: #F9E9CE !important;   /* sable peach — plus chaud */
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process) {
  background: #F1ECDE !important;   /* cream lait — plus doux */
}
/* Halos PASS 8 désactivés (le fond solid prend le relais visuel) */
main > section:not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  background: none !important;
}
/* La reassurance (aside, pas section) garde le body bg ivoire — pas d'override */

/* ====================================================================
   PASS 10 — Revert rotation tonale solid (PASS 9), restaure halos
   organiques chauds visibles, aligne reviews carrousel sur le bloc
   intro, revert padding maux items, transforme process steps en cartes
   ==================================================================== */

/* --- 1. Revert PASS 9 part 3 : retirer les couleurs solid per nth-of-type.
   Sections redeviennent transparentes, body bg ivoire uniforme. --- */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process),
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process),
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process) {
  background: transparent !important;
}

/* --- 2. Halos organiques visibles (warm/sand/sage rotation) — alphas 10-15%
   pour ramener de la chaleur comme avant les changements d'aujourd'hui --- */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: ""; position: absolute; inset: 0;
  pointer-events: none; z-index: 0;
  background:
    radial-gradient(65% 75% at 18% 25%, rgba(232, 181, 74, 0.14) 0%, transparent 60%),
    radial-gradient(55% 70% at 88% 78%, rgba(217, 187, 122, 0.16) 0%, transparent 60%),
    radial-gradient(40% 50% at 50% 50%, rgba(251, 235, 182, 0.08) 0%, transparent 70%) !important;
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: ""; position: absolute; inset: 0;
  pointer-events: none; z-index: 0;
  background:
    radial-gradient(65% 75% at 85% 22%, rgba(251, 235, 182, 0.18) 0%, transparent 60%),
    radial-gradient(55% 70% at 12% 78%, rgba(232, 181, 74, 0.13) 0%, transparent 60%),
    radial-gradient(45% 55% at 50% 50%, rgba(217, 187, 122, 0.08) 0%, transparent 70%) !important;
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: ""; position: absolute; inset: 0;
  pointer-events: none; z-index: 0;
  background:
    radial-gradient(65% 75% at 25% 30%, rgba(44, 185, 198, 0.12) 0%, transparent 60%),
    radial-gradient(55% 70% at 75% 78%, rgba(232, 181, 74, 0.10) 0%, transparent 60%),
    radial-gradient(40% 50% at 50% 50%, rgba(44, 185, 198, 0.08) 0%, transparent 70%) !important;
}

/* --- 3. Reviews carrousel — RETIRÉ l'offset 396px (PASS 14 le corrige).
   Le swiper s'aligne désormais sur la même largeur que .reviews-band
   (full container), donc carte Ersilia démarre au même X que le bord
   gauche de la carte Google ci-dessus. --- */

/* --- 4. Maux items : revert au padding compact d'avant PASS 8 (épuré) --- */
.maux-item {
  padding: 28px 22px !important;
}
.maux-card,
.maux-card__head { padding: 24px 26px !important; }
@media (max-width: 1024px) {
  .maux-item { padding: 26px 20px !important; }
  .maux-card, .maux-card__head { padding: 22px 22px !important; }
}
@media (max-width: 768px) {
  .maux-item { padding: 22px 18px !important; }
  .maux-card, .maux-card__head { padding: 20px 18px !important; }
}
@media (max-width: 640px) {
  .maux-item { padding: 22px 14px !important; }
  .maux-card, .maux-card__head { padding: 18px 16px !important; }
}

/* --- 5. Process steps en CARTES (accessibilité + cohérence visuelle) --- */
.process__content {
  background: var(--color-surface) !important;
  border: 1px solid rgba(44, 185, 198, 0.08) !important;
  border-radius: var(--radius-card) !important;
  padding: 22px 26px !important;
  box-shadow: 0 4px 14px -10px rgba(46,41,34,0.10), 0 14px 32px -24px rgba(46,41,34,0.10) !important;
  transition: box-shadow 0.45s var(--ease), border-color 0.45s var(--ease), transform 0.45s var(--ease) !important;
  max-width: 380px !important;
}
.process__step.is-active .process__content {
  border-color: rgba(232, 181, 74,0.42) !important;
  box-shadow: 0 4px 12px -8px rgba(46,41,34,0.06), 0 20px 44px -24px rgba(44, 185, 198,0.28) !important;
  transform: translateY(-2px);
}
/* Carte alignée correctement à côté du marker selon odd/even (desktop) */
.process__step:nth-child(odd) .process__content {
  margin-right: 18px;
  margin-left: auto;
  text-align: right;
  padding-right: 26px !important;
}
.process__step:nth-child(odd) .process__content p { margin-left: auto; }
.process__step:nth-child(even) .process__content {
  margin-left: 18px;
  text-align: left;
}
/* Mobile : carte pleine largeur de la colonne content */
@media (max-width: 768px) {
  .process__step .process__content,
  .process__step:nth-child(odd) .process__content,
  .process__step:nth-child(even) .process__content {
    margin: 0 !important;
    text-align: left !important;
    max-width: 100% !important;
    padding: 18px 20px !important;
  }
}
@media (max-width: 640px) {
  .process__step .process__content,
  .process__step:nth-child(odd) .process__content,
  .process__step:nth-child(even) .process__content {
    padding: 16px 18px !important;
  }
}
/* Le text-shadow PASS 9 sur content devient inutile (la carte fournit le
   contraste) → on l'annule pour ne pas alourdir le texte */
.process__content h3,
.process__content p { text-shadow: none !important; }

/* ====================================================================
   PASS 11 — Halos très visibles (chaleur ramenée) + bump opacity
   montagnes SVG + ScrollTrigger.refresh forcé
   ==================================================================== */

/* --- 1. Halos VRAIMENT visibles : alphas 28-38% pour ramener la chaleur
   comme avant les changements d'aujourd'hui --- */
/* PASS 12 — halos centrés (loin des bords), rayons plus petits, fade rapide
   pour rester strictement CONTENUS dans leur propre section (plus de bleed
   visuel entre sections adjacentes) */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  position: absolute !important;
  inset: 12% 8% !important;          /* inset visible des bords */
  pointer-events: none !important;
  z-index: 0 !important;
  overflow: hidden !important;
  background:
    radial-gradient(45% 55% at 30% 40%, rgba(232, 181, 74, 0.34) 0%, transparent 65%),
    radial-gradient(40% 50% at 72% 62%, rgba(217, 187, 122, 0.36) 0%, transparent 65%) !important;
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  position: absolute !important;
  inset: 12% 8% !important;
  pointer-events: none !important;
  z-index: 0 !important;
  overflow: hidden !important;
  background:
    radial-gradient(45% 55% at 70% 38%, rgba(251, 235, 182, 0.40) 0%, transparent 65%),
    radial-gradient(40% 50% at 28% 65%, rgba(232, 181, 74, 0.32) 0%, transparent 65%) !important;
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  position: absolute !important;
  inset: 12% 8% !important;
  pointer-events: none !important;
  z-index: 0 !important;
  overflow: hidden !important;
  background:
    radial-gradient(45% 55% at 32% 42%, rgba(44, 185, 198, 0.30) 0%, transparent 65%),
    radial-gradient(40% 50% at 70% 60%, rgba(232, 181, 74, 0.26) 0%, transparent 65%) !important;
}

/* --- 2. Montagnes SVG : opacité bumpée pour vraie visibilité --- */
.section-mountain {
  opacity: 0.85 !important;
  z-index: 1 !important;   /* au-dessus du halo radial ::before */
}
.section-mountain__line { stroke-width: 1.4 !important; opacity: 0.92 !important; }
.section-mountain__halo { opacity: 0.85 !important; }

/* --- 3. Le container reste au-dessus de tout (z-index 2) --- */
main > section > .container,
main > .hero > .container { position: relative !important; z-index: 2 !important; }

/* =====================================================================
   PASS 14 — Affiliations bandeau · Diplômes carousel mobile · Maux side
   stretch · Reviews swiper align · GSAP card entry · Montagne fixed-quote
   ===================================================================== */

/* ---------- A · BANDEAU AFFILIATIONS / RÉSEAU (marquee animé) ---------- */
.affiliations-band {
  position: relative;
  padding: 80px 0 90px;
  overflow: hidden;
  isolation: isolate;
}
.affiliations-band::before {
  content: ""; position: absolute; inset: 0;
  background:
    radial-gradient(55% 60% at 50% 0%, rgba(232, 181, 74, 0.10) 0%, transparent 65%),
    radial-gradient(45% 55% at 50% 100%, rgba(44, 185, 198, 0.08) 0%, transparent 65%);
  pointer-events: none; z-index: -1;
}
.affiliations-band__head {
  text-align: center;
  max-width: 720px;
  margin: 0 auto 56px;
}
.aff-marquee {
  position: relative;
  display: flex; align-items: center; gap: 24px;
  margin-bottom: 22px;
}
.aff-marquee:last-child { margin-bottom: 0; }
.aff-marquee__label {
  flex-shrink: 0;
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 0.78rem; letter-spacing: 0.14em;
  text-transform: uppercase; font-weight: 600;
  color: var(--color-text-muted);
  padding: 10px 18px;
  background: rgba(255,255,255,0.85);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  -webkit-backdrop-filter: blur(8px);
          backdrop-filter: blur(8px);
}
.aff-marquee__label i { color: var(--color-accent); font-size: 1.1em; }
.aff-marquee__viewport {
  position: relative;
  flex: 1; min-width: 0;
  overflow: hidden;
  /* Fade les bords pour transition douce */
  -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 6%, #000 94%, transparent 100%);
          mask-image: linear-gradient(90deg, transparent 0%, #000 6%, #000 94%, transparent 100%);
}
.aff-marquee__track {
  display: inline-flex; align-items: center;
  gap: 14px;
  white-space: nowrap;
  width: max-content;
  /* Défilement fluide continu en CSS pure — pas de saccade */
  animation: aff-marquee-scroll 45s linear infinite;
  will-change: transform;
}
.aff-marquee--reverse .aff-marquee__track { animation-direction: reverse; animation-duration: 60s; }
.aff-marquee:hover .aff-marquee__track { animation-play-state: paused; }
@keyframes aff-marquee-scroll {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(-50%, 0, 0); }
}
/* Viewport : hidden overflow (le track glisse via transform) */
.aff-marquee__viewport {
  overflow: hidden;
  scrollbar-width: none;
  -ms-overflow-style: none;
  width: 100%;
  max-width: 100%;
}
.aff-marquee__viewport::-webkit-scrollbar { display: none; }

/* ============================================
   NEWSLETTER POPUP
   ============================================ */
.nl-popup { position: fixed; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; padding: 20px; opacity: 0; pointer-events: none; transition: opacity .3s ease; }
.nl-popup.is-open { opacity: 1; pointer-events: auto; }
.nl-popup__overlay { position: absolute; inset: 0; background: rgba(46, 41, 34, 0.55); backdrop-filter: blur(4px); }
.nl-popup__card { position: relative; background: #FFFFFF; border-radius: 20px; padding: 40px 32px 32px; max-width: 460px; width: 100%; box-shadow: 0 40px 80px -30px rgba(0,0,0,0.35); text-align: center; border: 1px solid rgba(241, 195, 56, 0.4); transform: translateY(20px); transition: transform .35s cubic-bezier(0.22, 0.61, 0.36, 1); }
.nl-popup.is-open .nl-popup__card { transform: translateY(0); }
.nl-popup__close { position: absolute; top: 12px; right: 12px; width: 36px; height: 36px; border-radius: 50%; background: rgba(46, 41, 34, 0.06); color: #2E2922; display: flex; align-items: center; justify-content: center; font-size: 18px; cursor: pointer; border: none; transition: background .2s; }
.nl-popup__close:hover { background: rgba(46, 41, 34, 0.14); }
.nl-popup__icon { width: 60px; height: 60px; border-radius: 50%; background: linear-gradient(160deg, #FFF3C4 0%, #F1C338 100%); color: #2E2922; display: flex; align-items: center; justify-content: center; font-size: 30px; margin: 0 auto 20px; }
.nl-popup__title { font-family: var(--font-heading); font-size: 1.7rem; color: #2E2922; margin-bottom: 12px; letter-spacing: -0.01em; }
.nl-popup__title em { font-style: italic; color: #2CB9C6; }
.nl-popup__text { color: var(--color-text-muted); font-size: 0.92rem; line-height: 1.55; margin-bottom: 24px; }
.nl-popup__form { display: flex; flex-direction: column; gap: 10px; margin-bottom: 16px; }
.nl-popup__form input[type="email"] { padding: 14px 18px; border: 1.5px solid rgba(44, 185, 198, 0.35); border-radius: 10px; background: #FFFFFF; font: inherit; color: #2E2922; }
.nl-popup__form input[type="email"]:focus { outline: none; border-color: #2CB9C6; box-shadow: 0 0 0 3px rgba(44, 185, 198, 0.15); }
.nl-popup__form .btn { width: 100%; justify-content: center; }
.nl-popup__legal { font-size: 0.72rem; color: var(--color-text-muted); }
@media (max-width: 480px) { .nl-popup__card { padding: 32px 22px 24px; } .nl-popup__title { font-size: 1.4rem; } }

/* ============================================
   BON CADEAU — Onglets 3 soins
   ============================================ */
.bc-tabs { max-width: 1100px; margin: 0 auto; }
.bc-tabs__nav {
  display: flex; flex-wrap: wrap; gap: 10px;
  justify-content: center; margin-bottom: 32px;
}
.bc-tabs__tab {
  display: inline-flex; align-items: center; gap: 10px;
  padding: 12px 20px; border-radius: 12px;
  background: #FFFFFF;
  color: #2CB9C6;
  border: 1px solid rgba(44, 185, 198, 0.35);
  font-family: var(--font-body, 'Manrope', sans-serif);
  font-size: 0.9rem; font-weight: 600;
  cursor: pointer;
  transition: all .25s ease;
}
.bc-tabs__tab i { font-size: 1.15em; }
.bc-tabs__tab:hover { background: rgba(44, 185, 198, 0.08); }
.bc-tabs__tab.is-active {
  background: #2CB9C6; color: #FFFFFF;
  border-color: #2CB9C6;
  box-shadow: 0 8px 20px -10px rgba(44, 185, 198, 0.55);
}
.bc-tabs__panel[hidden] { display: none; }
@media (max-width: 780px) {
  .bc-tabs__nav { flex-direction: column; align-items: stretch; }
  .bc-tabs__tab { justify-content: center; }
}

/* ============================================
   HERO INSIGHTS — Langues cliquables (pastilles drapeaux)
   ============================================ */
.hero__insight--langs {
  display: inline-flex !important;
  align-items: center;
  gap: 6px;
  padding: 4px 6px !important;
}
.hero__lang {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px; height: 22px;
  border-radius: 4px;
  overflow: hidden;
  border: 2px solid transparent;
  transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease;
  text-decoration: none;
}
.hero__lang img { width: 100%; height: 100%; object-fit: cover; display: block; }
.hero__lang:hover { transform: scale(1.1); border-color: rgba(255,255,255,0.85); box-shadow: 0 4px 10px rgba(0,0,0,0.25); }
.hero__lang.is-active { border-color: #fff; box-shadow: 0 2px 8px rgba(0,0,0,0.2); }

/* ============================================
   RECONNAISSANCE V4 — Split épuré teal + galerie miniatures
   ============================================ */
.recognition-v4 {
  display: grid;
  grid-template-columns: minmax(280px, 1fr) 2fr;
  gap: 32px;
  align-items: start;
  max-width: 1100px;
  margin: 0 auto;
}
.recognition-v4__seal {
  background: linear-gradient(160deg, #FFFFFF 0%, #FFFFFF 55%, #FFF3C4 100%);
  color: #2E2922;
  padding: 30px;
  border-radius: 24px;
  position: sticky;
  top: 100px;
  border: 1px solid rgba(241, 195, 56, 0.4);
  box-shadow: 0 24px 60px -28px rgba(241, 195, 56, 0.35);
}
.recognition-v4__seal-ic {
  width: 56px; height: 56px;
  border-radius: 50%;
  background: rgba(241, 195, 56, 0.22);
  display: flex; align-items: center; justify-content: center;
  font-size: 28px; color: #B8862A;
  margin-bottom: 16px;
}
.recognition-v4__seal-title {
  font-family: var(--font-heading, 'Cormorant Garamond', serif);
  font-weight: 600;
  font-size: 1.45rem;
  line-height: 1.25;
  margin-bottom: 8px;
  letter-spacing: -0.01em;
  color: #2E2922;
}
.recognition-v4__seal-sub {
  color: #6E6357;
  font-size: 0.84rem;
  line-height: 1.6;
  margin-bottom: 20px;
}
.recognition-v4__seal-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.recognition-v4__seal-item {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 14px;
  background: rgba(255, 255, 255, 0.65);
  border: 1px solid rgba(241, 195, 56, 0.32);
  border-radius: 12px;
  font-size: 0.82rem;
  line-height: 1.3;
}
.recognition-v4__seal-item i {
  color: #2CB9C6;
  font-size: 1.05rem;
  flex-shrink: 0;
}
.recognition-v4__seal-item img {
  width: 20px; height: 20px;
  object-fit: contain;
  flex-shrink: 0;
}
.recognition-v4__seal-item strong {
  display: block;
  margin-bottom: 1px;
  color: #2E2922;
  font-weight: 600;
}
.recognition-v4__seal-item span {
  color: #6E6357;
  font-size: 0.74rem;
}

.recognition-v4__diplomas {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(110px, 140px));
  gap: 10px;
  align-content: start;
  justify-content: start;
}
.recognition-v4__diplomas .recognition-dipl {
  background: #FFF7DA;
  border: 1px solid rgba(44, 185, 198, 0.28);
  border-radius: 14px;
  overflow: hidden;
  cursor: zoom-in;
  display: flex;
  flex-direction: column;
  text-align: left;
  padding: 0;
  text-decoration: none;
  color: inherit;
  position: relative;
  transition: transform 0.25s, box-shadow 0.25s;
  width: 100%;
  max-width: none !important;
}
.recognition-v4__diplomas .recognition-dipl:hover {
  transform: translateY(-3px);
  box-shadow: 0 14px 28px -16px rgba(46,110,114, 0.22);
}
.recognition-v4__diplomas .recognition-dipl__thumb {
  aspect-ratio: 4/5;
  background: linear-gradient(135deg, #F0D7B8 0%, #E8C599 100%);
  display: flex; align-items: center; justify-content: center;
  position: relative;
  overflow: hidden;
  width: 100%;
  max-width: none !important;
  border-radius: 0 !important;
  margin: 0 !important;
}
.recognition-v4__diplomas .recognition-dipl__thumb img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
}
.recognition-v4__diplomas .recognition-dipl__zoom {
  position: absolute; top: 8px; right: 8px;
  width: 28px; height: 28px;
  border-radius: 50%;
  background: rgba(31,82,86, 0.92);
  color: #FFF7DA;
  display: flex; align-items: center; justify-content: center;
  font-size: 13px;
  opacity: 0;
  transition: opacity 0.25s;
  z-index: 2;
}
.recognition-v4__diplomas .recognition-dipl:hover .recognition-dipl__zoom { opacity: 1; }
.recognition-v4__diplomas .recognition-dipl__caption {
  padding: 7px 9px;
  border-top: 1px solid rgba(44, 185, 198, 0.28);
  display: flex; justify-content: space-between; align-items: center;
  gap: 6px;
}
.recognition-v4__diplomas .recognition-dipl__caption strong {
  font-size: 0.68rem;
  font-weight: 600;
  color: #2CB9C6;
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.recognition-v4__diplomas .recognition-dipl__caption span {
  font-family: var(--font-heading, 'Cormorant Garamond', serif);
  font-style: italic;
  font-size: 0.72rem;
  color: #B8862A;
  flex-shrink: 0;
}
.recognition-v4__diplomas .recognition-dipl__action { display: none !important; }

@media (max-width: 980px) {
  .recognition-v4 { grid-template-columns: 1fr; gap: 24px; }
  .recognition-v4__seal { position: relative; top: 0; padding: 24px; }
}
@media (max-width: 540px) {
  .recognition-v4__diplomas { grid-template-columns: repeat(auto-fill, minmax(100px, 130px)); }
}

/* ============================================
   PÉRINATALITÉ V4 — Cartes libres triptyque (Avant / Autour / Après)
   ============================================ */
.perinat-trio {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  max-width: 1100px;
  margin: 0 auto;
}
.perinat-trio__card {
  background: #FFF7DA;
  border-radius: 24px;
  overflow: hidden;
  border: 1px solid rgba(44, 185, 198, 0.28);
  display: flex;
  flex-direction: column;
  transition: transform .25s, box-shadow .25s;
  text-decoration: none;
  color: inherit;
}
.perinat-trio__card:hover {
  transform: translateY(-6px);
  box-shadow: 0 24px 48px -22px rgba(46,110,114, 0.22);
}
.perinat-trio__hero {
  height: 130px;
  background: linear-gradient(160deg, #2CB9C6 0%, #2CB9C6 100%);
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px;
}
.perinat-trio__card:nth-child(2) .perinat-trio__hero { background: linear-gradient(160deg, #B8862A 0%, #F1C338 100%); }
.perinat-trio__card:nth-child(3) .perinat-trio__hero { background: linear-gradient(160deg, #2CB9C6 0%, #2CB9C6 100%); }
.perinat-trio__ic {
  width: 58px; height: 58px;
  border-radius: 50%;
  background: rgba(255,251,242, 0.18);
  color: #FFF7DA;
  display: flex; align-items: center; justify-content: center;
  font-size: 30px;
}
.perinat-trio__num {
  position: absolute;
  top: 14px; left: 18px;
  font-family: var(--font-heading, 'Cormorant Garamond', serif);
  font-style: italic;
  font-size: 17px;
  color: rgba(255,251,242, 0.6);
  font-weight: 600;
}
.perinat-trio__body {
  padding: 24px 26px;
  flex: 1;
  display: flex;
  flex-direction: column;
}
.perinat-trio__phase {
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #B8862A;
  font-weight: 600;
  margin-bottom: 6px;
}
.perinat-trio__title {
  font-family: var(--font-heading, 'Cormorant Garamond', serif);
  font-size: 1.6rem;
  font-weight: 600;
  color: #2CB9C6;
  line-height: 1.2;
  margin-bottom: 10px;
  letter-spacing: -0.01em;
}
.perinat-trio__title em { font-style: italic; color: #B8862A; }
.perinat-trio__intro {
  font-size: 0.86rem;
  color: #6E6357;
  line-height: 1.6;
  margin-bottom: 18px;
}
.perinat-trio__list {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-bottom: 22px;
  flex: 1;
  list-style: none;
  padding: 0;
}
.perinat-trio__row {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 0.86rem;
  color: #2E2922;
  line-height: 1.4;
}
.perinat-trio__row i {
  color: #F1C338;
  font-size: 1rem;
  flex-shrink: 0;
  margin-top: 2px;
}
.perinat-trio__cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 20px;
  border-radius: 10px;
  background: #FFFFFF;
  color: #2CB9C6;
  font-size: 0.84rem;
  font-weight: 600;
  border: 1px solid rgba(44, 185, 198, 0.35);
  text-decoration: none;
  align-self: flex-start;
  transition: all .25s;
}
.perinat-trio__card:hover .perinat-trio__cta {
  background: #2CB9C6;
  color: #FFFFFF;
  border-color: #2CB9C6;
}
@media (max-width: 900px) {
  .perinat-trio { grid-template-columns: 1fr; gap: 16px; }
  .perinat-trio__hero { height: 110px; }
}
.aff-chip {
  flex-shrink: 0;
  display: inline-flex; align-items: center; gap: 10px;
  padding: 12px 20px;
  background: #fff;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  font-size: 0.9rem; font-weight: 500;
  color: var(--color-text);
  box-shadow: 0 4px 14px -6px rgba(46,41,34,0.10);
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease), border-color 0.3s var(--ease);
}
.aff-chip:hover {
  transform: translateY(-3px);
  border-color: rgba(232, 181, 74, 0.45);
  box-shadow: 0 14px 30px -14px rgba(232, 181, 74, 0.40);
}
.aff-chip img { width: 24px; height: 24px; object-fit: contain; }
.aff-chip i { color: var(--color-accent); font-size: 1.15em; }
.aff-chip--soft {
  background: #fff;
  border-color: rgba(44, 185, 198, 0.35);
  font-size: 0.86rem;
  color: #2CB9C6;
  font-weight: 600;
}
.aff-chip--soft:hover {
  color: #fff;
  background: #2CB9C6;
  border-color: #2CB9C6;
  box-shadow: 0 14px 28px -14px rgba(44, 185, 198, 0.55);
}
.aff-chip--soft .aff-chip__dot {
  background: #F1C338;
}
.aff-chip__dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: linear-gradient(135deg, var(--color-accent), color-mix(in srgb, var(--color-accent) 60%, #fff));
  flex-shrink: 0;
}
@media (prefers-reduced-motion: reduce) {
  .aff-marquee__track { animation: none; }
  .aff-marquee__viewport { overflow-x: auto; }
}
@media (max-width: 1024px) {
  .aff-marquee { flex-direction: column; gap: 14px; align-items: stretch; }
  .aff-marquee__label { align-self: flex-start; }
}
@media (max-width: 768px) {
  .affiliations-band { padding: 56px 0 60px; }
  .affiliations-band__head { margin-bottom: 36px; }
  .aff-chip { padding: 10px 16px; font-size: 0.82rem; }
}

/* ---------- B · DIPLÔMES — Carousel Swiper mobile (3 cartes) ---------- */
.diplomas-row { position: relative; }
.diplomas-strip.swiper {
  position: relative;
  padding-bottom: 0;
  list-style: none;
  margin: 0;
}
/* Wrapper Swiper : grid sur desktop (rendu actuel), flex sur mobile via swiper */
.diplomas-strip__wrapper {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 22px;
}
.diplomas-strip__item.swiper-slide {
  height: auto; /* match grid */
}
.diplomas-swiper__pagination {
  display: none;
  margin-top: 22px;
  text-align: center;
}
.diplomas-swiper__pagination .swiper-pagination-bullet {
  width: 8px; height: 8px;
  background: rgba(46,41,34, 0.22);
  opacity: 1;
  margin: 0 5px;
}
.diplomas-swiper__pagination .swiper-pagination-bullet-active {
  background: var(--color-accent);
  transform: scale(1.25);
}
/* En mobile : grid devient flex (Swiper prend la main) */
@media (max-width: 768px) {
  .diplomas-strip.swiper { padding-bottom: 32px; overflow: hidden; }
  .diplomas-strip__wrapper {
    display: flex !important;
    grid-template-columns: unset !important;
    gap: 0 !important;
  }
  .diplomas-strip__item.swiper-slide {
    width: 80% !important;
    flex-shrink: 0;
  }
  .diplomas-swiper__pagination { display: block; position: absolute; bottom: 0; left: 0; right: 0; }
}

/* ---------- C · MAUX SIDE — cartes alignées hauteur bloc texte ---------- */
.section--side > .container {
  align-items: stretch !important;
}
.section--side .feature-grid {
  align-self: stretch !important;
  align-content: stretch;
  /* Tous les rows occupent la même fraction → cartes étirées sur full height */
  grid-auto-rows: 1fr;
  height: 100%;
}
.section--side .feature-card {
  display: flex; flex-direction: column;
  height: 100%;
}
.section--side .feature-card__head { flex-shrink: 0; }
.section--side .feature-card__text { flex: 1; }
/* Mobile : layout vertical, on libère la contrainte */
@media (max-width: 1024px) {
  .section--side > .container { align-items: initial !important; }
  .section--side .feature-grid { grid-auto-rows: auto; height: auto; }
  .section--side .feature-card { height: auto; }
}

/* ---------- D · REVIEWS SWIPER aligné avec reviews-band ---------- */
/* La reviews-band utilise le .container, le swiper aussi → même left/right.
   Bug visible : le swiper-wrapper avait un offset à cause d'un padding ancien.
   On force le même padding intérieur et on supprime margin-left ancien. */
.reviews-grid.swiper.reviews-swiper {
  margin: 32px 0 0 0 !important;
  padding: 0 !important;
  position: relative;
}
.reviews-swiper .swiper-wrapper {
  align-items: stretch;
}
.reviews-swiper .swiper-slide {
  height: auto;
  display: flex;
}
.reviews-swiper .review-card {
  width: 100%;
  display: flex; flex-direction: column;
}
/* Pagination + boutons positionnés sous le carrousel */
.reviews-swiper .swiper-pagination {
  position: relative;
  margin-top: 28px;
  bottom: auto;
}
.reviews-swiper__prev,
.reviews-swiper__next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 44px; height: 44px;
  border-radius: 50%;
  background: #fff;
  border: 1px solid var(--color-border);
  box-shadow: 0 8px 22px -10px rgba(46,41,34,0.25);
  color: var(--color-text);
  display: grid; place-items: center;
  cursor: pointer;
  z-index: 5;
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease), border-color 0.3s var(--ease);
}
.reviews-swiper__prev { left: -22px; }
.reviews-swiper__next { right: -22px; }
.reviews-swiper__prev:hover,
.reviews-swiper__next:hover {
  transform: translateY(-50%) scale(1.06);
  border-color: rgba(232, 181, 74, 0.55);
  box-shadow: 0 14px 32px -10px rgba(232, 181, 74, 0.40);
}
.reviews-swiper__prev i,
.reviews-swiper__next i { font-size: 1.2rem; }
@media (max-width: 768px) {
  .reviews-swiper__prev { left: -10px; width: 38px; height: 38px; }
  .reviews-swiper__next { right: -10px; width: 38px; height: 38px; }
}
@media (max-width: 480px) {
  .reviews-swiper__prev,
  .reviews-swiper__next { display: none; }
}

/* ---------- E · GSAP CARD ENTRY — base CSS pour les hooks JS ---------- */
/* Le JS prend le relais ; on prépare juste un état "off" très doux côté CSS
   pour éviter le flash quand JS est chargé tard. */
[data-card-anim] {
  will-change: transform, opacity;
}

/* ---------- F · MONTAGNE sur .fixed-quote — visible sur scrim sombre ---------- */
.fixed-quote { overflow: hidden; }
.fixed-quote .section-mountain {
  bottom: 8% !important; top: auto !important;
  left: 50% !important; transform: translateX(-50%) !important;
  width: min(94vw, 1180px) !important; height: auto !important;
  max-height: 28vh;
  opacity: 0.88 !important;
  z-index: 2 !important;  /* z-index: scrim 1 < mountain 2 < container 3 */
}
.fixed-quote .section-mountain__line {
  stroke: rgba(255,251,242, 0.92) !important;
  stroke-width: 1.6 !important;
}
.fixed-quote .section-mountain__halo {
  opacity: 0.16 !important;
}
/* Hiérarchie z-index : photo bg 0 / scrim 1 / mountain 2 / container 3 */
.fixed-quote::after { z-index: 1 !important; }
.fixed-quote > .container { z-index: 3 !important; position: relative; }

/* =====================================================================
   PASS 15 — Fix double cadre process · Why-grid mobile carrousel ·
   Navbar border affiné · Pictos ronds · Réassurance overlay hero ·
   Process bg homepage no-filter · Glass intro card · Affiliations centré
   ===================================================================== */

/* ---------- A · FIX DOUBLE CADRE process steps (kill .process__step
   background/border en mobile — c'était l'OUTER cadre PASS antérieur) ---------- */
@media (max-width: 768px) {
  .process__step,
  .process__step:nth-child(odd),
  .process__step:nth-child(even) {
    background: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    padding: 4px 0 14px !important;
    box-shadow: none !important;
    flex: initial !important;
  }
  .process__num { display: none !important; }
}

/* ---------- B · NAVBAR border affiné (1px → 0.5px / alpha réduit) ---------- */
.header {
  border-width: 0.5px !important;
  border-color: rgba(255,255,255,0.38) !important;
}
.header.is-scrolled,
.header.is-nav-open {
  border-color: rgba(255,255,255,0.48) !important;
}

/* ---------- C · PICTOS RÉASSURANCE ronds + barre OVERLAY sur hero ---------- */
.reassurance {
  position: relative;
  z-index: 5;
  margin-top: -56px !important;     /* remonte de 56px → la barre flotte sur le hero */
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  pointer-events: none;
}
.reassurance > .container {
  pointer-events: auto;
}
.reassurance__list {
  background: rgba(252,245,232, 0.88) !important;
  -webkit-backdrop-filter: blur(20px) saturate(1.4) !important;
          backdrop-filter: blur(20px) saturate(1.4) !important;
  border: 1px solid rgba(255,255,255,0.55) !important;
  border-radius: var(--radius-pill) !important;
  box-shadow:
    0 20px 44px -22px rgba(46,41,34,0.32),
    inset 0 1px 0 rgba(255,255,255,0.65) !important;
  padding: 14px 20px !important;
  display: flex !important;
  justify-content: space-between;
  align-items: center;
  gap: 18px;
  flex-wrap: wrap;
}
/* Items individuels : icon-only en cercle parfait */
.reassurance__item {
  display: inline-flex !important;
  align-items: center;
  gap: 10px;
  padding: 6px 12px;
  background: transparent;
  border: 0;
  border-radius: var(--radius-pill);
}
.reassurance__item--icon-only {
  width: 54px; height: 54px;
  border-radius: 50% !important;
  background: #fff !important;
  border: 1px solid var(--color-border) !important;
  display: inline-flex !important;
  align-items: center; justify-content: center;
  padding: 0 !important;
  box-shadow: 0 6px 16px -8px rgba(46,41,34,0.18);
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease);
}
.reassurance__item--icon-only:hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 22px -10px rgba(46,41,34,0.28);
}
.reassurance__item--icon-only img {
  width: 30px; height: 30px;
  object-fit: contain;
}
.reassurance__item--icon-only .reassurance__logo,
.reassurance__item--icon-only .reassurance__flag {
  width: 30px; height: 30px;
}
.reassurance__item--icon-only .reassurance__flag-pair {
  display: inline-flex;
  gap: 2px;
}
.reassurance__item--icon-only .reassurance__flag-pair img {
  width: 18px; height: 18px;
}
/* Item avec texte ("Tous publics") : pas un cercle, pilule */
.reassurance__item:not(.reassurance__item--icon-only) {
  background: #fff !important;
  border: 1px solid var(--color-border) !important;
  padding: 12px 22px !important;
  border-radius: var(--radius-pill) !important;
  box-shadow: 0 6px 16px -8px rgba(46,41,34,0.18);
}
.reassurance__item:not(.reassurance__item--icon-only) i {
  font-size: 1.25rem;
  color: var(--color-primary-strong);
}
@media (max-width: 768px) {
  .reassurance { margin-top: -36px !important; }
  .reassurance__list { padding: 10px 12px !important; gap: 10px; justify-content: center; }
  .reassurance__item--icon-only { width: 44px; height: 44px; }
  .reassurance__item--icon-only img { width: 24px; height: 24px; }
  .reassurance__item:not(.reassurance__item--icon-only) { padding: 10px 16px !important; font-size: 0.85rem; }
}

/* ---------- D · PROCESS BG homepage (pas de filtre — full image) ---------- */
.process__bg {
  filter: none !important;
  -webkit-filter: none !important;
  opacity: 0.85 !important;  /* photo presque pleine — juste légère atténuation pour lisibilité texte */
}
.process__bg::after {
  background: linear-gradient(180deg,
    var(--color-bg) 0%,
    rgba(252,245,232, 0.30) 20%,
    rgba(252,245,232, 0.30) 80%,
    var(--color-bg) 100%) !important;
}

/* ---------- E · GLASS INTRO CARD (section process intro) ---------- */
.process__inner > .section-header .section-intro {
  display: inline-block;
  max-width: 580px;
  margin: 24px auto 0;
  padding: 18px 28px;
  background: rgba(252,245,232, 0.78);
  -webkit-backdrop-filter: blur(18px) saturate(1.4);
          backdrop-filter: blur(18px) saturate(1.4);
  border: 1px solid rgba(255,255,255,0.55);
  border-radius: var(--radius-pill);
  box-shadow:
    0 18px 36px -20px rgba(46,41,34,0.30),
    inset 0 1px 0 rgba(255,255,255,0.6);
  font-family: var(--font-heading);
  font-style: italic;
  font-size: 1.15rem;
  line-height: 1.45;
  color: var(--color-text);
}
@media (max-width: 768px) {
  .process__inner > .section-header .section-intro {
    padding: 14px 22px;
    font-size: 1rem;
    border-radius: 22px;
  }
}
/* Adapter les autres cards process (steps) au même mood glass subtil */
.process__content {
  background: rgba(255,255,255, 0.88) !important;
  -webkit-backdrop-filter: blur(10px) saturate(1.2) !important;
          backdrop-filter: blur(10px) saturate(1.2) !important;
  border-color: rgba(255,255,255,0.55) !important;
  box-shadow:
    0 4px 14px -10px rgba(46,41,34,0.10),
    0 14px 32px -24px rgba(46,41,34,0.15),
    inset 0 1px 0 rgba(255,255,255,0.6) !important;
}

/* ---------- F · WHY-GRID → carrousel mobile ---------- */
.why-grid.swiper {
  position: relative;
}
@media (max-width: 768px) {
  .why-grid.swiper {
    overflow: hidden;
    padding-bottom: 36px;
  }
  .why-grid.swiper .swiper-wrapper {
    display: flex !important;
    grid-template-columns: unset !important;
  }
  .why-grid.swiper .why-card.swiper-slide {
    width: 86% !important;
    flex-shrink: 0;
    height: auto;
  }
  .why-swiper__pagination {
    position: absolute; bottom: 0; left: 0; right: 0;
    text-align: center;
  }
  .why-swiper__pagination .swiper-pagination-bullet {
    background: rgba(46,41,34,0.22);
    opacity: 1; width: 8px; height: 8px; margin: 0 5px;
  }
  .why-swiper__pagination .swiper-pagination-bullet-active {
    background: var(--color-accent);
    transform: scale(1.25);
  }
}

/* ---------- G · AFFILIATIONS header centré (correctif PASS 14) ---------- */
.affiliations-band__head {
  text-align: center !important;
  max-width: 640px;
  margin: 0 auto 56px;
  display: flex; flex-direction: column;
  align-items: center;
}
.affiliations-band__head .section-kicker,
.affiliations-band__head .section-title {
  text-align: center;
}
/* L'intro paragraphe est masquée — directive utilisateur */
.affiliations-band__head .section-intro { display: none !important; }

/* ---------- H · HERO MOSAÏQUE UNIVERSEL (.hero--mosaic) ---------- */
/* Applique le pattern V4 (5 photos collage + glass card) à tout hero qui
   adopte la classe .hero--mosaic. Photos via <img> dans .hero__mosaic-tile.
   data-mountain="cream" sur la section conserve la oneline montagne. */
.hero.hero--mosaic {
  position: relative;
  min-height: clamp(640px, 96vh, 900px);
  background: var(--color-bg-alt, #F6EBD4);
  padding: 110px 28px 32px;
  overflow: hidden;
  isolation: isolate;
  display: block;  /* override hero flex/grid */
}
.hero.hero--mosaic > .container { display: none !important; }  /* on remplace */
.hero.hero--mosaic .hero__slides,
.hero.hero--mosaic .hero__media { display: none !important; }
.hero__mosaic-grid {
  display: grid;
  grid-template-columns: 1.4fr 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: 14px;
  height: calc(96vh - 142px);
  max-height: 840px;
  position: relative;
  z-index: 1;
}
.hero__mosaic-tile {
  position: relative;
  border-radius: 24px;
  overflow: hidden;
  background: var(--color-text, #2E2922);
}
.hero__mosaic-tile img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform 0.9s var(--ease);
}
.hero__mosaic-tile:hover img { transform: scale(1.05); }
.hero__mosaic-tile--main { grid-row: 1 / span 2; grid-column: 1; }
.hero__mosaic-tile--tm { grid-column: 2; grid-row: 1; }
.hero__mosaic-tile--tr { grid-column: 3; grid-row: 1; }
.hero__mosaic-tile--bm { grid-column: 2; grid-row: 2; }
.hero__mosaic-tile--br { grid-column: 3; grid-row: 2; }
/* Glass card flottante */
.hero__mosaic-card {
  position: absolute;
  top: 50%; left: 6%;
  transform: translateY(-50%);
  z-index: 3;
  max-width: 500px;
  padding: 44px 42px;
  background: rgba(252,245,232, 0.72);
  -webkit-backdrop-filter: blur(28px) saturate(1.7);
          backdrop-filter: blur(28px) saturate(1.7);
  border: 1px solid rgba(255,255,255,0.6);
  border-radius: 28px;
  box-shadow:
    0 32px 60px -24px rgba(46,41,34,0.45),
    inset 0 1px 0 rgba(255,255,255,0.7);
}
.hero__mosaic-card .hero__eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 0.78rem; letter-spacing: 0.14em;
  text-transform: uppercase; font-weight: 600;
  color: var(--color-text-muted, #5A5347);
  margin-bottom: 14px;
}
.hero__mosaic-card .hero__eyebrow i { color: var(--color-accent, #F1C338); }
.hero__mosaic-card .hero__title {
  font-family: var(--font-heading, 'Cormorant Garamond', serif);
  font-weight: 500;
  font-size: clamp(2.2rem, 3.6vw, 3.2rem);
  line-height: 1.06;
  letter-spacing: -0.015em;
  color: var(--color-text);
  margin: 0 0 16px;
}
.hero__mosaic-card .hero__title em {
  font-style: italic;
  color: var(--color-accent, #F1C338);
}
.hero__mosaic-card .hero__subtitle {
  font-size: 1rem; line-height: 1.6;
  color: var(--color-text-muted);
  margin: 0 0 28px;
  max-width: 46ch;
}
.hero__mosaic-card .hero__actions {
  display: flex; gap: 12px; flex-wrap: wrap;
}
/* La montagne s'inscrit par-dessus la mosaïque (z-index 2) */
.hero.hero--mosaic .section-mountain {
  z-index: 2 !important;
  opacity: 0.85 !important;
}
/* Responsive : pile la mosaïque sur 2 rangs + carte en bas */
@media (max-width: 1024px) {
  .hero.hero--mosaic { padding: 100px 20px 24px; min-height: auto; }
  .hero__mosaic-grid {
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 320px auto auto;
    height: auto; max-height: none;
  }
  .hero__mosaic-tile--main { grid-column: 1 / span 2; grid-row: 1; }
  .hero__mosaic-tile--tm { grid-column: 1; grid-row: 2; aspect-ratio: 4/3; }
  .hero__mosaic-tile--tr { grid-column: 2; grid-row: 2; aspect-ratio: 4/3; }
  .hero__mosaic-tile--bm { grid-column: 1; grid-row: 3; aspect-ratio: 4/3; }
  .hero__mosaic-tile--br { grid-column: 2; grid-row: 3; aspect-ratio: 4/3; }
  .hero__mosaic-card {
    position: static;
    transform: none;
    max-width: 100%;
    margin: 18px 0 0;
    padding: 32px 28px;
  }
}
@media (max-width: 640px) {
  .hero__mosaic-card { padding: 26px 22px; border-radius: 22px; }
  .hero__mosaic-card .hero__title { font-size: clamp(1.8rem, 7vw, 2.2rem); }
  .hero__mosaic-card .hero__subtitle { font-size: 0.95rem; }
}

/* =====================================================================
   PASS 16 — Polish complet : pills compactes · halos visibles · btn
   crossfade hover · reassurance overlay hero · reviews fix · hero text
   contrast · aff-chip non clipping · GPU stability · fil ariane z-index
   ===================================================================== */

/* ---------- §A · CARDS « Pour quels maux » → pills compactes dépliables ---------- */
.section--side .feature-grid {
  grid-template-columns: repeat(2, 1fr) !important;
  gap: 12px !important;
}
.feature-card.is-fold {
  background: rgba(255,255,255, 0.92) !important;
  border: 1px solid rgba(44, 185, 198, 0.10) !important;
  border-radius: 999px !important;
  padding: 0 !important;
  overflow: hidden !important;
  min-height: 0 !important;
  transition: border-radius 0.4s var(--ease), background 0.3s var(--ease), border-color 0.3s var(--ease), box-shadow 0.3s var(--ease);
}
.feature-card.is-fold:hover {
  border-color: rgba(232, 181, 74, 0.45) !important;
  background: #fff !important;
}
.feature-card.is-fold .feature-card__head {
  display: flex; align-items: center;
  gap: 14px;
  padding: 12px 18px;
  width: 100%;
  background: transparent;
  border: 0;
  cursor: pointer;
  font-family: inherit;
  text-align: left;
  color: var(--color-text);
}
.feature-card.is-fold .feature-card__icon {
  flex-shrink: 0;
  width: 36px; height: 36px;
  border-radius: 50%;
  background: color-mix(in srgb, var(--color-accent) 14%, #fff);
  border: 1px solid color-mix(in srgb, var(--color-accent) 30%, transparent);
  display: grid; place-items: center;
  font-size: 17px;
  color: var(--color-primary-strong);
  margin: 0;
}
.feature-card.is-fold .feature-card__title {
  font-family: var(--font-heading);
  font-size: 0.98rem;
  font-weight: 500;
  margin: 0;
  line-height: 1.25;
  flex: 1;
  color: var(--color-text);
}
.feature-card.is-fold .feature-card__toggle {
  flex-shrink: 0;
  width: 28px; height: 28px;
  border-radius: 50%;
  border: 1.5px solid var(--color-primary-strong);
  background: transparent;
  display: grid; place-items: center;
  font-size: 0.85rem;
  color: var(--color-primary-strong);
  transition: transform 0.35s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease);
}
.feature-card.is-fold .feature-card__text {
  max-height: 0;
  padding: 0 22px;
  overflow: hidden;
  font-size: 0.92rem;
  line-height: 1.5;
  color: var(--color-text-muted);
  transition: max-height 0.45s var(--ease), padding 0.45s var(--ease);
}
.feature-card.is-fold.is-open {
  border-radius: 22px !important;
  background: #fff !important;
  border-color: rgba(232, 181, 74, 0.55) !important;
  box-shadow: 0 18px 36px -20px rgba(232, 181, 74, 0.35);
}
.feature-card.is-fold.is-open .feature-card__text {
  max-height: 280px;
  padding: 4px 22px 18px 70px;  /* aligné sous titre (icône 36 + gap 14 + padding 18 = 68 ≈ 70) */
}
.feature-card.is-fold.is-open .feature-card__toggle {
  background: var(--color-primary-strong);
  color: #fff;
  transform: rotate(45deg);
}
@media (max-width: 1024px) {
  .section--side .feature-grid { grid-template-columns: 1fr !important; gap: 10px !important; }
}
@media (max-width: 768px) {
  .feature-card.is-fold .feature-card__head { padding: 10px 16px; gap: 12px; }
  .feature-card.is-fold .feature-card__icon { width: 32px; height: 32px; font-size: 15px; }
  .feature-card.is-fold .feature-card__title { font-size: 0.92rem; }
  .feature-card.is-fold .feature-card__toggle { width: 26px; height: 26px; }
  .feature-card.is-fold.is-open .feature-card__text { padding: 4px 18px 14px 60px; font-size: 0.88rem; }
}

/* ---------- §B · HALOS PLUS VISIBLES (capture 3 style) ---------- */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  background:
    radial-gradient(60% 70% at 20% 30%, rgba(232, 181, 74, 0.42) 0%, transparent 75%),
    radial-gradient(55% 65% at 78% 70%, rgba(217, 187, 122, 0.46) 0%, transparent 75%) !important;
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  background:
    radial-gradient(65% 72% at 22% 28%, rgba(251, 235, 182, 0.44) 0%, transparent 75%),
    radial-gradient(58% 68% at 80% 72%, rgba(232, 181, 74, 0.40) 0%, transparent 75%) !important;
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  background:
    radial-gradient(62% 70% at 18% 32%, rgba(44, 185, 198, 0.42) 0%, transparent 75%),
    radial-gradient(56% 64% at 75% 68%, rgba(232, 181, 74, 0.38) 0%, transparent 75%) !important;
}

/* ---------- §C · BTN PRIMARY hover crossfade doux vers marron (PASS 17 fix)
   Le ::after avec z-index: -1 était caché derrière le bg-image turquoise.
   Solution : transition de background-color (animable nativement) + l'image
   noise/light-sheen reste en background-image (statique). On bascule la
   couleur de fond solid → solid au hover avec un easing long. */
.btn--primary, .header .btn--primary, .cta-final .btn--inverted {
  /* Fond ASCA + dégradé subtil vers plus clair en bas */
  background-color: #2CB9C6 !important;
  background-image: linear-gradient(180deg, #2CB9C6 0%, #5CCED8 100%) !important;
  transition: background-color 0.65s cubic-bezier(0.22, 0.61, 0.36, 1),
              transform 0.4s var(--ease),
              box-shadow 0.5s var(--ease),
              border-color 0.4s var(--ease) !important;
}
.btn--primary:hover, .header .btn--primary:hover, .cta-final .btn--inverted:hover {
  background-color: #F1C338 !important;
  background-image: none !important;
  color: #2E2922 !important;
  border-color: rgba(255,255,255,0.28) !important;
}

/* ---------- §D · REASSURANCE — frontière SOUS les insights ---------- */
.hero.hero--mosaic {
  padding-bottom: 90px !important;  /* room pour le bandeau réassurance dessous */
}
.reassurance {
  margin-top: -110px !important;    /* la barre flotte DANS le crème du hero */
  position: relative;
  z-index: 6;
  pointer-events: none;
}
.reassurance > .container { pointer-events: auto; }
@media (max-width: 768px) {
  .hero.hero--mosaic { padding-bottom: 70px !important; }
  .reassurance { margin-top: -90px !important; }
}

/* ---------- §E · REVIEWS SWIPER — ombres + flèches non clippées ---------- */
.reviews-grid.swiper.reviews-swiper {
  overflow: visible !important;
  padding: 14px 0 24px !important;  /* room vertical pour box-shadow + flèches */
  margin: 32px 0 0 !important;
}
.reviews-swiper .swiper-wrapper {
  overflow: visible;
}
.reviews-swiper .swiper-slide {
  overflow: visible;
}
.review-card {
  /* PASS 16 : box-shadow plus marquée + visible */
  box-shadow: 0 14px 32px -14px rgba(46,41,34, 0.18), 0 4px 12px -4px rgba(46,41,34, 0.08) !important;
}
/* Container externe avec un padding qui laisse de l'air aux flèches */
section:has(.reviews-swiper) > .container,
section:has(.reviews-grid) > .container {
  padding-inline: clamp(20px, 4vw, 60px);
}

/* ---------- §F · HERO MOSAIC card — text contrast force ink ---------- */
.hero.hero--mosaic .hero__mosaic-card .hero__title,
.hero.hero--mosaic .hero__mosaic-card .hero__title em,
.hero.hero--mosaic .hero__mosaic-card .hero__subtitle,
.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow,
.hero.hero--mosaic .hero__mosaic-card p,
.hero.hero--mosaic .hero__mosaic-card span {
  text-shadow: none !important;
}
.hero.hero--mosaic .hero__mosaic-card .hero__title { color: var(--color-text) !important; }
.hero.hero--mosaic .hero__mosaic-card .hero__title em { color: var(--color-accent) !important; }
.hero.hero--mosaic .hero__mosaic-card .hero__subtitle { color: var(--color-text-muted) !important; }
.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow { color: var(--color-text-muted) !important; }
.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow i { color: var(--color-accent) !important; }
/* Mobile : la carte glass devient plus opaque pour garantir lisibilité */
@media (max-width: 768px) {
  .hero__mosaic-card {
    background: rgba(252,245,232, 0.94) !important;
  }
}

/* ---------- §G · AFF-CHIP hover non clipping + labels mobile centrés ---------- */
.aff-marquee__viewport {
  padding: 14px 0 !important;  /* room vertical pour translateY(-3px) du hover */
  /* mask-image conservé pour fade horizontal, mais pas overflow vertical */
}
.aff-marquee__track {
  padding: 4px 0 !important;
}
@media (max-width: 1024px) {
  .aff-marquee {
    align-items: center !important;
    text-align: center;
  }
  .aff-marquee__label {
    align-self: center !important;
    margin: 0 auto;
  }
}

/* ---------- §H · BUG CLIGNOTEMENT — stabilité GPU ---------- */
/* Force chaque élément animé sur sa propre couche GPU pour éviter le repaint glitch */
.hero__mosaic-tile {
  transform: translateZ(0);
  backface-visibility: hidden;
  will-change: transform;
}
.hero__mosaic-tile img {
  transform: translateZ(0);
  backface-visibility: hidden;
  will-change: transform;
}
.hero__mosaic-card {
  transform: translateZ(0);
  backface-visibility: hidden;
  will-change: opacity;
}
.aff-marquee__track {
  transform: translate3d(0, 0, 0);
  backface-visibility: hidden;
  will-change: transform;
}
/* Anti-clignotement spécifique : si heroSlideshow tourne sur des slides absents,
   on s'assure que .hero__slides invisible reste invisible (PASS 14 a retiré le markup
   mais une page pourrait encore avoir l'ancien) */
.hero.hero--mosaic .hero__slides,
.hero.hero--mosaic .hero__slide { display: none !important; }

/* ---------- §I · FIL D'ARIANE SVG sous le titre ---------- */
.process__inner > .section-header {
  position: relative !important;
  z-index: 3 !important;
}
.process__path {
  z-index: 0 !important;
}
.process__steps {
  position: relative;
  z-index: 2;
}

/* =====================================================================
   PASS 17 — Polish correctifs : halos modérés · eyebrow sans bg ·
   surlignage sur-titre supprimé · navbar border ultra-fin · why-grid
   carrousel mobile avec bordure visible · footer ASCA texte retiré
   ===================================================================== */

/* ---------- §A · HALOS modérés (revert l'intensité PASS 16 §B) ---------- */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  background:
    radial-gradient(50% 60% at 22% 32%, rgba(232, 181, 74, 0.28) 0%, transparent 72%),
    radial-gradient(48% 58% at 78% 70%, rgba(217, 187, 122, 0.30) 0%, transparent 72%) !important;
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  background:
    radial-gradient(52% 62% at 24% 30%, rgba(251, 235, 182, 0.30) 0%, transparent 72%),
    radial-gradient(48% 58% at 78% 72%, rgba(232, 181, 74, 0.26) 0%, transparent 72%) !important;
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  background:
    radial-gradient(52% 62% at 20% 32%, rgba(44, 185, 198, 0.28) 0%, transparent 72%),
    radial-gradient(46% 56% at 76% 68%, rgba(232, 181, 74, 0.24) 0%, transparent 72%) !important;
}

/* ---------- §B · HERO EYEBROW — supprimer la pastille pêche ---------- */
.hero__eyebrow {
  background: transparent !important;
  padding: 0 !important;
  border-radius: 0 !important;
}
/* L'icône reste accentuée, juste le « pill » fond pêche disparaît */

/* ---------- §C · SECTION-KICKER — supprimer le trait souligné ---------- */
.theme-femine .section-header--center .section-kicker::after,
.theme-femine .section--parallax .section-header--center .section-kicker::after {
  display: none !important;
}

/* ---------- §D · NAVBAR border ultra-fin ---------- */
.header {
  border-width: 1px !important;
  border-style: solid !important;
  border-color: rgba(255,255,255,0.22) !important;  /* alpha bas → liseré quasi-invisible */
}
.header.is-scrolled,
.header.is-nav-open {
  border-color: rgba(255,255,255,0.32) !important;
}

/* ---------- §E · WHY-GRID — desktop 3 cols horizontal, mobile carrousel cards bordées ---------- */
@media (min-width: 769px) {
  .why-grid {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr) !important;
    gap: 40px;
  }
  .why-grid.swiper .swiper-wrapper {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr) !important;
    gap: 40px;
    transform: none !important;
  }
  .why-grid.swiper .why-card.swiper-slide {
    width: 100% !important;
    max-width: 100% !important;
  }
  .why-grid.swiper .why-swiper__pagination { display: none; }
  /* Desktop : pas de bordure de carte (style éditorial avec numéro géant) */
  .why-card {
    border-top: 2px solid var(--color-border);
    padding: 24px 0 0;
    background: transparent;
    border-radius: 0;
  }
}
@media (max-width: 768px) {
  /* Mobile : cartes en carrousel avec bordure visible */
  .why-grid.swiper .why-card.swiper-slide,
  .why-card {
    background: #fff;
    border: 1px solid rgba(44, 185, 198, 0.10);
    border-top: 1px solid rgba(44, 185, 198, 0.10);  /* override desktop top-2 */
    border-radius: 22px;
    padding: 26px 22px;
    box-shadow: 0 4px 14px -6px rgba(46,41,34, 0.10);
  }
}

/* ---------- §F · FOOTER badge ASCA — retirer le texte, garder logo seul ---------- */
.footer__badge {
  font-size: 0 !important;  /* cache le texte adjacent "ASCA" */
  padding: 6px 8px !important;
  gap: 0 !important;
}
.footer__badge img.footer__badge-logo {
  height: 26px !important;
  width: auto !important;
  display: block;
}
/* Restore le font-size sur les autres footer__badge (sans logo) si présent */
.footer__badge:not(:has(.footer__badge-logo)) {
  font-size: 0.8rem !important;
}

/* ---------- §G · FOOTER LOGO Héloïse — s'assurer qu'il s'affiche bien ---------- */
.footer__logo {
  display: flex !important;
  align-items: center;
  gap: 14px;
  margin-bottom: 18px;
}
.footer__logo-img {
  display: block !important;
  width: 200px !important;
  height: 54px !important;
  background-color: var(--color-logo) !important;
  -webkit-mask: url('../images/logo-blanc.png') left center / contain no-repeat !important;
          mask: url('../images/logo-blanc.png') left center / contain no-repeat !important;
}
/* Texte Héloïse Miermon à côté du logo masque (optionnel — au cas où) */
.footer__logo-text {
  font-family: var(--font-heading);
  font-size: 1.1rem;
  color: var(--color-text);
  font-weight: 600;
}

/* =====================================================================
   PASS 18 — Bandeau insights retiré · Halos organiques qui flow ·
   Hero mosaïque mieux calibré
   ===================================================================== */

/* ---------- §A · BANDEAU INSIGHTS — retrait du container glass ---------- */
/* Garde les pictos ronds + la pilule "Tous publics" qui ont leur propre fond,
   mais retire complètement le rectangle arrondi crème qui les enrobait. */
.reassurance__list {
  background: transparent !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
}

/* ---------- §B · HALOS organiques qui FLOW (plus de rectangle cropé) ---------- */
/* Stratégie : ::before dépasse la section avec inset négatif, la section clip
   en overflow:hidden. Le radial-gradient fade complètement dans cet espace
   étendu → effet de blob organique au lieu de gradient rectangulaire. */
main > section:not(.hero):not(.fixed-quote):not(.cta-final):not(.process) {
  overflow: hidden !important;
}
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  position: absolute !important;
  inset: -30% -15% !important;       /* dépasse la section dans toutes les directions */
  pointer-events: none !important;
  z-index: 0 !important;
  background:
    radial-gradient(circle at 25% 30%, rgba(232, 181, 74, 0.32) 0%, rgba(232, 181, 74, 0.18) 18%, transparent 45%),
    radial-gradient(circle at 78% 72%, rgba(217, 187, 122, 0.34) 0%, rgba(217, 187, 122, 0.20) 20%, transparent 48%) !important;
  filter: blur(8px) !important;       /* adoucit complètement les contours */
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  position: absolute !important;
  inset: -30% -15% !important;
  pointer-events: none !important;
  z-index: 0 !important;
  background:
    radial-gradient(circle at 72% 28%, rgba(251, 235, 182, 0.36) 0%, rgba(251, 235, 182, 0.22) 18%, transparent 45%),
    radial-gradient(circle at 25% 75%, rgba(232, 181, 74, 0.30) 0%, rgba(232, 181, 74, 0.16) 20%, transparent 48%) !important;
  filter: blur(8px) !important;
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  position: absolute !important;
  inset: -30% -15% !important;
  pointer-events: none !important;
  z-index: 0 !important;
  background:
    radial-gradient(circle at 22% 32%, rgba(44, 185, 198, 0.32) 0%, rgba(44, 185, 198, 0.18) 18%, transparent 45%),
    radial-gradient(circle at 75% 68%, rgba(232, 181, 74, 0.28) 0%, rgba(232, 181, 74, 0.16) 20%, transparent 48%) !important;
  filter: blur(8px) !important;
}

/* ---------- §C · HERO MOSAÏQUE calibrage équilibré ---------- */
.hero.hero--mosaic {
  min-height: clamp(580px, 88vh, 820px) !important;
  padding: 100px 24px 80px !important;
  background-color: var(--color-bg) !important;  /* PASS 39: longhand pour pas reset bg-image inline */
}
.hero__mosaic-grid {
  /* Grille un peu plus ramassée — la carte glass respire mieux par-dessus */
  grid-template-columns: 1.5fr 1fr 1fr !important;
  grid-template-rows: 1fr 1fr !important;
  gap: 12px !important;
  height: calc(88vh - 180px) !important;
  max-height: 720px !important;
}
.hero__mosaic-tile {
  border-radius: 20px !important;
}
.hero__mosaic-card {
  /* Carte glass : taille raisonnable + position légèrement remontée */
  max-width: 460px !important;
  padding: 38px 36px !important;
  top: 48% !important;
  left: 5% !important;
  border-radius: 26px !important;
  /* Fond plus opaque pour vraiment lire le texte sombre */
  background: rgba(252,245,232, 0.86) !important;
}
.hero__mosaic-card .hero__title {
  font-size: clamp(2rem, 3.2vw, 2.9rem) !important;
  line-height: 1.08 !important;
  margin: 0 0 14px !important;
}
.hero__mosaic-card .hero__subtitle {
  font-size: 0.97rem !important;
  margin: 0 0 24px !important;
  max-width: 44ch !important;
}
@media (max-width: 1024px) {
  .hero.hero--mosaic {
    min-height: auto !important;
    padding: 100px 20px 70px !important;
  }
  .hero__mosaic-grid {
    height: auto !important;
    max-height: none !important;
  }
  .hero__mosaic-card {
    background: rgba(252,245,232, 0.96) !important;
  }
}

/* =====================================================================
   PASS 19 — Reviews cards = maux pills style · halos sans démarcations ·
   card shadows audit · hero soin pages fix
   ===================================================================== */

/* ---------- §A · REVIEW CARDS = même traitement que les maux pills ---------- */
.review-card {
  background: #fff !important;
  border: 1px solid rgba(44, 185, 198, 0.10) !important;
  border-radius: 22px !important;
  padding: 30px 28px !important;
  box-shadow: 0 4px 14px -6px rgba(46,41,34, 0.10) !important;
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease), border-color 0.3s var(--ease) !important;
}
.review-card:hover {
  transform: translateY(-2px);
  border-color: rgba(232, 181, 74, 0.30) !important;
  box-shadow: 0 14px 32px -16px rgba(46,41,34, 0.18) !important;
}
.review-card__avatar {
  background: rgba(252,245,232, 0.85) !important;
  border: 1px solid rgba(44, 185, 198, 0.08);
}
.review-card__text {
  color: var(--color-text) !important;
  font-size: 0.97rem !important;
  line-height: 1.55 !important;
}
.review-card__src {
  margin-top: 14px;
  font-size: 0.82rem;
  color: var(--color-text-muted);
}
@media (max-width: 768px) {
  .review-card { padding: 24px 22px !important; }
}

/* ---------- §B · SUPPRESSION COMPLÈTE DES HALOS SECTIONS (démarcations) ---------- */
/* Les halos sur ::before des sections créaient des démarcations visibles
   au niveau des bords clipés. On les retire complètement. Le body garde
   son fond uniforme cream — pas de variation tonale entre sections. */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before,
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before,
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  display: none !important;
  background: none !important;
  filter: none !important;
}
/* Retirer aussi le forced overflow:hidden qui contraignait les sections */
main > section:not(.hero):not(.fixed-quote):not(.cta-final):not(.process) {
  overflow: visible !important;
  background: transparent !important;
}
/* Halo unique global sur body (subtil, qui flow dans tout le doc) */
body.theme-femine::before {
  content: "";
  position: fixed;
  inset: -10%;
  z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(35% 40% at 15% 18%, rgba(232, 181, 74, 0.10) 0%, transparent 60%),
    radial-gradient(40% 45% at 88% 75%, rgba(217, 187, 122, 0.12) 0%, transparent 60%),
    radial-gradient(30% 35% at 50% 50%, rgba(44, 185, 198, 0.08) 0%, transparent 60%);
  background-attachment: scroll; /* ex-fixed : évite le repaint plein cadre à chaque frame de scroll (fluidité) */
}

/* ---------- §C · CARD SHADOWS — audit overflow parents ---------- */
/* Chaque parent direct de card visible doit laisser passer le box-shadow */
.services-grid,
.feature-grid,
.why-grid,
.safeproof-grid,
.channel-grid,
.stats-grid,
.gallery-grid,
.gift-grid,
.diplomas-grid,
.maux-list,
.reassurance__list {
  overflow: visible !important;
}
/* Conteneurs de sections : passe en overflow visible pour ne pas clipper les shadows */
main > section > .container,
main > .hero > .container {
  overflow: visible !important;
}
/* Reviews swiper : déjà overflow visible PASS 16 §E, on s'assure du shadow visible */
.reviews-swiper .swiper-slide {
  padding: 8px !important;  /* room pour box-shadow autour du slide */
}

/* ---------- §D · HERO SOIN PAGES (PASS 19 retiré, refondu en PASS 20 §A) ---------- */

/* =====================================================================
   PASS 20 — REFONTE PROPRE
   · Hero : grid 2 cols 40/60, carte solide PAS par-dessus la mosaïque
   · Reassurance : bandeau classique BAS du hero (pas d'overlap)
   · Reviews swiper : slides clean + flèches dans le container
   · Maux pills : polish hover + visuel
   · Why-grid mobile : swiper-wrapper forcé en flex
   ===================================================================== */

/* ---------- §A · HERO REFONTE — grid 2-cols propre, pas d'absolu ---------- */
.hero.hero--mosaic {
  display: grid !important;
  grid-template-columns: 38fr 62fr !important;
  gap: 28px !important;
  align-items: center !important;
  padding: 100px 32px 60px !important;
  min-height: clamp(580px, 84vh, 780px) !important;
  background-color: var(--color-bg) !important;  /* PASS 39: longhand pour pas reset bg-image inline */
}
/* HTML order = [photos, card] → on swap visuellement avec order pour mettre card à GAUCHE */
.hero.hero--mosaic .hero__mosaic-card { order: 1 !important; }
.hero.hero--mosaic .hero__mosaic-grid { order: 2 !important; }
/* Le grid des photos passe en colonne droite (2x2 propre) */
.hero__mosaic-grid {
  grid-template-columns: 1fr 1fr !important;
  grid-template-rows: 1fr 1fr !important;
  gap: 14px !important;
  height: 100% !important;
  max-height: 620px !important;
  min-height: 480px !important;
}
.hero__mosaic-tile { border-radius: 22px !important; }
/* Réorganisation des tiles : on n'utilise plus que 4 (cachant la 5e) pour un 2×2 propre */
.hero__mosaic-tile--main { grid-column: 1; grid-row: 1; }
.hero__mosaic-tile--tm   { grid-column: 2; grid-row: 1; }
.hero__mosaic-tile--tr   { display: none !important; }   /* on cache la 5e tile */
.hero__mosaic-tile--bm   { grid-column: 1; grid-row: 2; }
.hero__mosaic-tile--br   { grid-column: 2; grid-row: 2; }

/* La carte text passe en colonne gauche, position STATIQUE (pas d'absolute) */
.hero__mosaic-card {
  position: static !important;
  transform: none !important;
  max-width: none !important;
  width: 100% !important;
  background: var(--color-surface) !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
  border: 1px solid rgba(44, 185, 198, 0.08) !important;
  border-radius: 28px !important;
  padding: 44px 40px !important;
  box-shadow: 0 24px 48px -24px rgba(46,41,34, 0.20) !important;
}
.hero__mosaic-card .hero__title {
  font-size: clamp(2rem, 3vw, 2.8rem) !important;
  line-height: 1.06 !important;
  margin: 0 0 18px !important;
}
.hero__mosaic-card .hero__subtitle {
  font-size: 1rem !important;
  line-height: 1.6 !important;
  margin: 0 0 28px !important;
  max-width: none !important;
}
/* Mobile : passe en stack vertical */
@media (max-width: 900px) {
  .hero.hero--mosaic {
    grid-template-columns: 1fr !important;
    gap: 20px !important;
    padding: 100px 20px 40px !important;
    min-height: auto !important;
  }
  .hero__mosaic-grid {
    grid-template-columns: 1fr 1fr !important;
    grid-template-rows: 200px 200px !important;
    min-height: 0 !important;
    max-height: none !important;
    height: auto !important;
  }
  .hero__mosaic-card { padding: 32px 24px !important; }
}

/* ---------- §B · RÉASSURANCE — section propre SOUS le hero ---------- */
.reassurance {
  margin-top: 0 !important;     /* plus d'overlap négatif */
  padding: 32px 0 !important;
  pointer-events: auto;
}
.reassurance__list {
  display: flex !important;
  flex-wrap: wrap;
  justify-content: center;
  gap: 14px !important;
  background: transparent !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
}
/* Les items gardent leur style pilule blanche individuelle (PASS 15 §C) */

/* ---------- §C · REVIEWS SWIPER — slides propres + flèches dans container ---------- */
section:has(.reviews-swiper) > .container {
  position: relative;
  overflow: visible !important;
  padding-inline: 60px !important;   /* room pour les flèches en absolu */
}
.reviews-grid.swiper.reviews-swiper {
  position: relative !important;
  overflow: visible !important;
  padding: 14px 0 !important;
  margin: 32px 0 0 !important;
}
.reviews-swiper .swiper-wrapper {
  display: flex !important;
  align-items: stretch;
}
.reviews-swiper .swiper-slide {
  height: auto !important;
  padding: 4px !important;
  display: flex;
}
.reviews-swiper .review-card {
  width: 100%;
  display: flex; flex-direction: column;
}
.reviews-swiper__prev,
.reviews-swiper__next {
  position: absolute !important;
  top: 50% !important;
  transform: translateY(-50%) !important;
  width: 46px !important;
  height: 46px !important;
  border-radius: 50% !important;
  background: #fff !important;
  border: 1px solid rgba(44, 185, 198, 0.10) !important;
  box-shadow: 0 8px 24px -10px rgba(46,41,34, 0.25) !important;
  z-index: 10 !important;
  display: grid !important;
  place-items: center;
  cursor: pointer;
}
.reviews-swiper__prev { left: 0 !important; right: auto !important; }
.reviews-swiper__next { right: 0 !important; left: auto !important; }
@media (max-width: 768px) {
  section:has(.reviews-swiper) > .container { padding-inline: 16px !important; }
  .reviews-swiper__prev,
  .reviews-swiper__next { display: none !important; }
}

/* ---------- §D · MAUX PILLS — polish (ombre + hover) ---------- */
.feature-card.is-fold {
  background: #fff !important;
  border: 1px solid rgba(44, 185, 198, 0.08) !important;
  box-shadow: 0 2px 8px -4px rgba(46,41,34, 0.08) !important;
  transition: transform 0.3s var(--ease), box-shadow 0.4s var(--ease), border-color 0.3s var(--ease), border-radius 0.4s var(--ease) !important;
}
.feature-card.is-fold:hover {
  transform: translateY(-2px);
  border-color: rgba(232, 181, 74, 0.40) !important;
  box-shadow: 0 14px 32px -16px rgba(232, 181, 74, 0.30) !important;
  background: #fff !important;
}
.feature-card.is-fold.is-open {
  transform: translateY(0);
  border-color: rgba(232, 181, 74, 0.55) !important;
  box-shadow: 0 18px 40px -18px rgba(232, 181, 74, 0.35) !important;
}
.feature-card.is-fold .feature-card__icon {
  background: rgba(252,245,232, 0.85) !important;
  border-color: rgba(232, 181, 74, 0.25) !important;
}

/* ---------- §E · WHY-GRID MOBILE — Swiper prend bien le contrôle ---------- */
@media (max-width: 768px) {
  .why-grid.swiper {
    display: block !important;
    overflow: hidden !important;
    padding-bottom: 40px !important;
  }
  .why-grid.swiper .swiper-wrapper,
  .why-grid.swiper .why-grid__wrapper {
    display: flex !important;
    grid-template-columns: unset !important;
    transition-property: transform !important;
  }
  .why-grid.swiper .why-card.swiper-slide {
    width: 85% !important;
    max-width: 85% !important;
    flex-shrink: 0 !important;
    box-sizing: border-box;
    height: auto;
  }
  .why-swiper__pagination {
    display: block !important;
    position: absolute !important;
    bottom: 6px !important;
    left: 0 !important; right: 0 !important;
    text-align: center !important;
  }
  .why-swiper__pagination .swiper-pagination-bullet {
    background: rgba(46,41,34, 0.22);
    opacity: 1; width: 8px; height: 8px; margin: 0 5px;
  }
  .why-swiper__pagination .swiper-pagination-bullet-active {
    background: var(--color-accent);
    transform: scale(1.25);
  }
}





/* =====================================================================
   PASS 21 — Hero SOLO immersif · Insights DANS la carte · Footer logo
   visible · Fil d'Ariane sous titre · Shadows process ok
   ===================================================================== */

/* ---------- §A · HERO SOLO IMMERSIF — 1 photo bg + carte avec insights dedans ---------- */
.hero.hero--mosaic {
  display: block !important;
  grid-template-columns: none !important;
  position: relative !important;
  min-height: clamp(640px, 90vh, 880px) !important;
  padding: 0 !important;
  isolation: isolate;
  overflow: hidden;
}
/* ::after et ::before annulés — inline style HTML gère tout le bg+scrim */
.hero.hero--mosaic .hero__mosaic-grid { display: none !important; }
.hero.hero--mosaic .hero__mosaic-card {
  position: relative !important;
  z-index: 3 !important;
  margin: 110px auto 90px !important;
  max-width: 740px !important;
  width: calc(100% - 48px) !important;
  order: 0 !important;
  background: rgba(252,245,232, 0.96) !important;
  -webkit-backdrop-filter: blur(12px) saturate(1.3) !important;
          backdrop-filter: blur(12px) saturate(1.3) !important;
  border: 1px solid rgba(255,255,255, 0.55) !important;
  border-radius: 32px !important;
  padding: 44px 44px 40px !important;
  box-shadow:
    0 32px 64px -24px rgba(46,41,34, 0.40),
    inset 0 1px 0 rgba(255,255,255, 0.6) !important;
  transform: none !important;
}
.hero.hero--mosaic .hero__mosaic-card .hero__title {
  font-size: clamp(2rem, 3vw, 2.8rem) !important;
  line-height: 1.06 !important;
  margin: 0 0 14px !important;
  color: var(--color-text) !important;
  text-shadow: none !important;
}
.hero.hero--mosaic .hero__mosaic-card .hero__title em {
  font-style: italic !important;
  color: var(--color-accent) !important;
}
.hero.hero--mosaic .hero__mosaic-card .hero__subtitle {
  font-size: 1rem !important;
  line-height: 1.6 !important;
  margin: 0 0 24px !important;
  color: var(--color-text-muted) !important;
  text-shadow: none !important;
  max-width: none !important;
}

/* ---------- §B · INSIGHTS dans la carte hero ---------- */
.hero__insights {
  display: flex !important;
  flex-wrap: wrap;
  gap: 8px !important;
  margin: 22px 0 0 !important;
  padding: 22px 0 0 !important;
  list-style: none;
  border-top: 1px solid rgba(44, 185, 198, 0.08);
}
.hero__insight {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 0.82rem; font-weight: 500;
  color: var(--color-text);
  padding: 8px 14px;
  background: rgba(255,255,255, 0.85);
  border: 1px solid rgba(44, 185, 198, 0.08);
  border-radius: 999px;
  white-space: nowrap;
}
.hero__insight img,
.hero__insight svg { width: 20px; height: 20px; object-fit: contain; flex-shrink: 0; }
.hero__insight i {
  color: var(--color-primary-strong);
  font-size: 1.05em;
}
@media (max-width: 768px) {
  .hero__insights { gap: 6px !important; }
  .hero__insight { font-size: 0.74rem; padding: 6px 12px; }
}

aside.reassurance { display: none !important; }
/* …sauf sur l'accueil, où la barre porte les 4 infos de réassurance (demande cliente) */
aside.reassurance--home { display: block !important; }

@media (max-width: 768px) {
  .hero.hero--mosaic {
    min-height: clamp(560px, 80vh, 680px) !important;
  }
  .hero.hero--mosaic .hero__mosaic-card {
    margin: 90px auto 60px !important;
    padding: 32px 26px 28px !important;
    border-radius: 26px !important;
  }
}

/* ---------- §C · FOOTER LOGO — vraie image + texte Héloïse Miermon ---------- */
.footer__logo {
  display: flex !important;
  align-items: center;
  gap: 12px !important;
  margin-bottom: 18px !important;
}
.footer__logo-img {
  display: inline-block !important;
  width: 48px !important;
  height: 48px !important;
  flex-shrink: 0;
  background-color: var(--color-logo) !important;
  background-image: url('../images/logo-blanc.png') !important;
  background-size: 70% auto !important;
  background-position: center !important;
  background-repeat: no-repeat !important;
  border-radius: 10px !important;
  -webkit-mask: none !important;
          mask: none !important;
}
.footer__logo-text {
  font-family: var(--font-heading);
  font-size: 1.35rem;
  color: var(--color-text);
  font-weight: 600;
  letter-spacing: -0.01em;
}
.footer__logo-text em {
  color: var(--color-logo);
  font-style: normal;
  font-weight: 500;
}

/* ---------- §D · FIL D'ARIANE — démarre vraiment SOUS le titre ---------- */
.process__path {
  position: absolute !important;
  top: 200px !important;
  left: 50% !important;
  transform: translateX(-50%) !important;
  z-index: 0 !important;
  width: 80px;
  height: calc(100% - 240px) !important;
}
@media (max-width: 768px) {
  .process__path {
    top: 180px !important;
    left: 22px !important;
    transform: none !important;
    height: calc(100% - 220px) !important;
  }
}

/* ---------- §E · SHADOWS process steps — plus jamais croppés ---------- */
.process { overflow: visible !important; }
.process__inner { overflow: visible !important; }
.process__steps {
  overflow: visible !important;
  padding: 16px 0 24px;
}
.process__step { overflow: visible !important; }
.process__content {
  box-shadow:
    0 4px 12px -6px rgba(46,41,34, 0.10),
    0 12px 24px -16px rgba(46,41,34, 0.12) !important;
  margin-bottom: 4px;
}


/* =====================================================================
   PASS 22 — Hero photo qui s'affiche · Reviews compactes + dots BELOW ·
   Maux pills plus compactes · Why-grid full width desktop ·
   Fixed-quote en glassmorphism (pas de bg color change)
   ===================================================================== */

/* ---------- §A · HERO PHOTO — PASS 22 NEUTRALISÉ
   (utilisait --hero-bg qui n'existe pas → bloquait l'inline style avec son
   fallback hardcodé soin-crane-2.png). L'inline style HTML est le seul à
   gérer le background-image désormais. */

/* ---------- §B · REVIEWS — cards plus compactes + dots SOUS la carte ---------- */
.reviews-grid.swiper.reviews-swiper {
  padding-bottom: 50px !important;   /* room pour les dots sous les cards */
}
.review-card {
  padding: 22px 22px !important;  /* compact */
  border-radius: 18px !important;
}
.review-card__head { margin-bottom: 10px !important; }
.review-card__avatar { width: 38px !important; height: 38px !important; font-size: 1rem !important; }
.review-card__name { font-size: 0.92rem !important; }
.review-card__stars { font-size: 0.8rem !important; }
.review-card__text {
  font-size: 0.92rem !important;
  line-height: 1.5 !important;
  -webkit-line-clamp: 3 !important;
  line-clamp: 3 !important;
}
.review-card__src { margin-top: 10px !important; font-size: 0.78rem !important; }
.review-card__more { font-size: 0.85rem !important; margin-top: 6px !important; }
/* Pagination en bas, sous les cards */
.reviews-swiper .swiper-pagination {
  position: absolute !important;
  bottom: 0 !important;
  left: 0 !important;
  right: 0 !important;
  top: auto !important;
  text-align: center;
  z-index: 5;
  margin: 0 !important;
}
.reviews-swiper .swiper-pagination-bullet {
  background: rgba(46,41,34, 0.22);
  opacity: 1;
  width: 8px; height: 8px;
  margin: 0 5px;
  transition: background 0.3s var(--ease), transform 0.3s var(--ease);
}
.reviews-swiper .swiper-pagination-bullet-active {
  background: var(--color-accent);
  transform: scale(1.3);
}

/* ---------- §C · MAUX PILLS — plus compactes (matche capture 2) ---------- */
.feature-card.is-fold {
  min-height: 0 !important;
}
.feature-card.is-fold .feature-card__head {
  padding: 8px 16px !important;
  gap: 12px !important;
}
.feature-card.is-fold .feature-card__icon {
  width: 30px !important;
  height: 30px !important;
  font-size: 15px !important;
  border-radius: 50% !important;
}
.feature-card.is-fold .feature-card__title {
  font-size: 0.93rem !important;
  line-height: 1.25 !important;
}
.feature-card.is-fold .feature-card__toggle {
  width: 24px !important;
  height: 24px !important;
  font-size: 0.75rem !important;
}
.section--side .feature-grid {
  gap: 8px !important;
}
.feature-card.is-fold.is-open .feature-card__text {
  padding: 2px 16px 14px 58px !important;
  font-size: 0.88rem !important;
  max-height: 200px !important;
}

/* ---------- §D · WHY-GRID DESKTOP — vraiment 3 cols full width ---------- */
@media (min-width: 769px) {
  /* Container du why-grid : pleine largeur */
  section:has(.why-grid) > .container { max-width: var(--container-max, 1240px) !important; }
  .why-grid {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr) !important;
    gap: 48px !important;
    width: 100% !important;
  }
  .why-grid.swiper {
    width: 100% !important;
    display: block !important;
  }
  .why-grid.swiper .swiper-wrapper,
  .why-grid.swiper .why-grid__wrapper {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr) !important;
    gap: 48px !important;
    width: 100% !important;
    transform: none !important;
  }
  .why-grid.swiper .why-card.swiper-slide {
    width: 100% !important;
    max-width: 100% !important;
    flex: initial !important;
  }
  .why-grid.swiper .why-swiper__pagination { display: none !important; }
  .why-card {
    border-top: 2px solid var(--color-border);
    padding: 24px 0 0;
    background: transparent;
    border-radius: 0;
    box-shadow: none;
  }
  .why-card__num {
    font-size: 88px;
    line-height: 1;
    margin-bottom: 16px;
  }
  .why-card__title { font-size: 1.2rem; margin-bottom: 12px; }
  .why-card__text { font-size: 0.95rem; line-height: 1.6; }
}

/* PASS 22 §E (fixed-quote glass) ANNULÉ — replacé par PASS 24 §A puis PASS 25 */


/* =====================================================================
   PASS 23 — Hero photo via inline style · Carte centrée parfaitement ·
   Boutons secondaires lisibles · Formes organiques chaudes
   ===================================================================== */

/* ---------- §A · HERO : flex centrage + retrait CSS bg redondant ---------- */
.hero.hero--mosaic {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  /* La background-image est désormais en INLINE STYLE sur chaque section
     (URL résolue depuis le HTML) — on retire les overrides CSS qui interfèrent */
  background-image: unset;
}
/* On nettoie le ::after PASS 22 qui rajoutait un scrim redondant — le scrim
   est désormais inclus dans le background-image inline */
.hero.hero--mosaic::after { display: none !important; }
.hero.hero--mosaic::before { display: none !important; }

/* La carte est centrée par le flex parent — on retire les margins auto */
.hero.hero--mosaic .hero__mosaic-card {
  margin: 0 !important;
  max-width: 740px !important;
  width: calc(100% - 48px) !important;
  /* Garde le scrim glass + padding actuels */
}
@media (max-width: 768px) {
  .hero.hero--mosaic .hero__mosaic-card {
    width: calc(100% - 32px) !important;
    max-width: 560px !important;
  }
}

/* ---------- §B · BOUTON SECONDAIRE dans la carte glass = LISIBLE ---------- */
.hero__mosaic-card .btn--secondary,
.hero__mosaic-card .btn--ghost {
  background: rgba(255,255,255, 0.65) !important;
  color: var(--color-primary-strong) !important;
  border: 1px solid rgba(44, 185, 198, 0.30) !important;
  -webkit-backdrop-filter: blur(8px) !important;
          backdrop-filter: blur(8px) !important;
}
.hero__mosaic-card .btn--secondary:hover,
.hero__mosaic-card .btn--ghost:hover {
  background: #fff !important;
  color: var(--color-primary-strong) !important;
  border-color: rgba(44, 185, 198, 0.55) !important;
}

/* ---------- §C · FORMES ORGANIQUES CHAUDES (ronds en background sections) ---------- */
main > section:not(.hero):not(.fixed-quote):not(.cta-final):not(.process) {
  position: relative;
  overflow: hidden !important;
}
/* Formes organiques warm — alternance par section via nth-of-type */
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  width: 480px; height: 480px;
  border-radius: 50%;
  top: -120px;
  right: -100px;
  background: radial-gradient(circle, rgba(232, 181, 74, 0.22) 0%, rgba(232, 181, 74, 0.10) 40%, transparent 70%);
  filter: blur(40px);
  pointer-events: none;
  z-index: 0;
}
main > section:nth-of-type(3n+1):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::after {
  content: "";
  display: block;
  position: absolute;
  width: 380px; height: 380px;
  border-radius: 50%;
  bottom: -100px;
  left: -80px;
  background: radial-gradient(circle, rgba(251, 235, 182, 0.28) 0%, rgba(251, 235, 182, 0.12) 40%, transparent 70%);
  filter: blur(40px);
  pointer-events: none;
  z-index: 0;
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  width: 520px; height: 520px;
  border-radius: 50%;
  bottom: -150px;
  right: -120px;
  background: radial-gradient(circle, rgba(217, 187, 122, 0.26) 0%, rgba(217, 187, 122, 0.12) 40%, transparent 70%);
  filter: blur(45px);
  pointer-events: none;
  z-index: 0;
}
main > section:nth-of-type(3n+2):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::after {
  content: "";
  display: block;
  position: absolute;
  width: 360px; height: 360px;
  border-radius: 50%;
  top: -80px;
  left: -60px;
  background: radial-gradient(circle, rgba(232, 181, 74, 0.20) 0%, rgba(232, 181, 74, 0.10) 40%, transparent 70%);
  filter: blur(40px);
  pointer-events: none;
  z-index: 0;
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  width: 460px; height: 460px;
  border-radius: 50%;
  top: -100px;
  left: -110px;
  background: radial-gradient(circle, rgba(251, 235, 182, 0.24) 0%, rgba(251, 235, 182, 0.10) 40%, transparent 70%);
  filter: blur(45px);
  pointer-events: none;
  z-index: 0;
}
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::after {
  content: "";
  display: block;
  position: absolute;
  width: 400px; height: 400px;
  border-radius: 50%;
  bottom: -120px;
  right: -90px;
  background: radial-gradient(circle, rgba(217, 187, 122, 0.22) 0%, rgba(217, 187, 122, 0.10) 40%, transparent 70%);
  filter: blur(40px);
  pointer-events: none;
  z-index: 0;
}
/* Les contenus passent au-dessus des formes organiques */
main > section > .container,
main > section > * { position: relative; z-index: 1; }


/* =====================================================================
   PASS 24 — Fixed-quote parallaxe restaurée · CTA-final glass ·
   Hero glass + centrage parfait · Retrait "+" dupliqué pictos
   ===================================================================== */

/* ---------- §A · FIXED-QUOTE — restaure parallaxe photo + oneline montagne ---------- */
.fixed-quote {
  background-image: none;  /* sera réécrit par inline style des sections */
  background-color: var(--color-primary) !important;
  background-size: cover !important;
  background-position: var(--quote-pos, center) !important;
  background-attachment: scroll !important; /* ex-fixed : fluidité scroll (plus de repaint plein cadre) */
  background-repeat: no-repeat !important;
  min-height: 72vh !important;
  padding: 0 !important;
  display: flex !important;
  align-items: center !important;
  overflow: hidden !important;
  isolation: isolate;
}
.fixed-quote::before { display: none !important; }
.fixed-quote::after {
  content: "" !important;
  display: block !important;
  position: absolute !important; inset: 0 !important;
  z-index: 1 !important;
  background: linear-gradient(120deg, rgba(22,30,34, 0.50) 0%, rgba(22,30,34, 0.30) 100%) !important;
  pointer-events: none !important;
}
.fixed-quote .container { position: relative; z-index: 2; }
.fixed-quote blockquote {
  color: #fff !important;
  background: transparent !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
  max-width: 760px !important;
  margin: 0 !important;
  text-shadow: 0 2px 16px rgba(11,53,59, 0.45) !important;
}
.fixed-quote blockquote .k { color: rgba(255,255,255, 0.92) !important; }
.fixed-quote blockquote p { color: #fff !important; }
.fixed-quote cite { color: rgba(251,250,247, 0.78) !important; }
@media (max-width: 1024px) {
  .fixed-quote { background-attachment: scroll !important; min-height: 52vh !important; }
}
section.fixed-quote { background-color: var(--color-primary) !important; }

/* ---------- §B · CTA-FINAL — glassmorphism du bloc texte ---------- */
.cta-final {
  text-align: center;
  padding: 100px 0 !important;
  position: relative;
  background: var(--color-bg) !important;
}
.section--dark.cta-final {
  background: var(--color-bg) !important;
  color: var(--color-text) !important;
}
.cta-final > .container > .reveal,
.cta-final > .container > div {
  background: rgba(252,245,232, 0.55) !important;
  -webkit-backdrop-filter: blur(24px) saturate(1.6) !important;
          backdrop-filter: blur(24px) saturate(1.6) !important;
  border: 1px solid rgba(255,255,255, 0.65) !important;
  border-radius: 32px !important;
  padding: 56px 56px !important;
  box-shadow:
    0 28px 64px -28px rgba(46,41,34, 0.30),
    inset 0 1px 0 rgba(255,255,255, 0.7) !important;
  max-width: 760px !important;
  margin: 0 auto !important;
}
.cta-final__title {
  color: var(--color-text) !important;
  text-shadow: none !important;
  font-family: var(--font-heading);
  font-size: clamp(1.8rem, 2.8vw, 2.4rem);
  margin: 0 0 14px;
}
.cta-final__title em { color: var(--color-accent) !important; font-style: italic; }
.cta-final__intro { color: var(--color-text-muted) !important; margin: 0 0 28px; }
.cta-final .btn--inverted { color: #fff !important; }
@media (max-width: 768px) {
  .cta-final { padding: 60px 16px !important; }
  .cta-final > .container > .reveal,
  .cta-final > .container > div { padding: 38px 28px !important; border-radius: 26px !important; }
}

/* ---------- §C · HERO GLASS PLUS MARQUÉ + centrage parfait ---------- */
.hero.hero--mosaic {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 0 24px !important;  /* padding symétrique gauche/droite */
  width: 100% !important;
}
.hero.hero--mosaic .hero__mosaic-card {
  margin: 0 auto !important;
  /* Glassmorphism vraiment visible */
  background: rgba(252,245,232, 0.55) !important;
  -webkit-backdrop-filter: blur(28px) saturate(1.7) !important;
          backdrop-filter: blur(28px) saturate(1.7) !important;
  border: 1px solid rgba(255,255,255, 0.65) !important;
  box-shadow:
    0 36px 80px -28px rgba(46,41,34, 0.45),
    inset 0 1px 0 rgba(255,255,255, 0.7),
    inset 0 -1px 0 rgba(255,255,255, 0.2) !important;
}
/* Force contraste texte sur glass (cas où le scrim derrière est sombre) */
.hero.hero--mosaic .hero__mosaic-card .hero__title { color: var(--color-text) !important; }
.hero.hero--mosaic .hero__mosaic-card .hero__subtitle { color: var(--color-text) !important; opacity: 0.85; }
.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow { color: var(--color-text-muted) !important; }

/* ---------- §D · MAUX PILLS — retrait du "+" dupliqué visible ---------- */
.feature-card.is-fold::before,
.feature-card.is-fold::after,
.feature-card.is-fold .feature-card__head::before,
.feature-card.is-fold .feature-card__head::after,
.feature-card.is-fold .feature-card__icon::before,
.feature-card.is-fold .feature-card__icon::after {
  display: none !important;
  content: none !important;
}
/* On garde uniquement le toggle natif dans le HTML (.feature-card__toggle) */


/* =====================================================================
   PASS 25 — Fixed-quote photo RÉELLEMENT restaurée · Maux text DOIT
   s'afficher · Why-grid mobile spacing + slide bug · Retrait "+" dup
   ===================================================================== */

/* ---------- §A · FIXED-QUOTE — restauration FORCE photo + scrim + montagne ---------- */
/* On force la photo via background-image: unset (laisse l'inline style prendre la main) */
section.fixed-quote {
  background-color: var(--color-primary) !important;
  background-size: cover !important;
  background-position: var(--quote-pos, center) !important;
  background-attachment: scroll !important; /* ex-fixed : fluidité scroll (plus de repaint plein cadre) */
  background-repeat: no-repeat !important;
  min-height: 72vh !important;
  padding: 0 !important;
  display: flex !important;
  align-items: center !important;
  overflow: hidden !important;
  isolation: isolate;
}
@media (max-width: 1024px) {
  section.fixed-quote { background-attachment: scroll !important; min-height: 52vh !important; }
}
section.fixed-quote::before { display: none !important; content: none !important; }
section.fixed-quote::after {
  content: "" !important;
  display: block !important;
  position: absolute !important; inset: 0 !important;
  z-index: 1 !important;
  background: linear-gradient(120deg, rgba(22,30,34, 0.50) 0%, rgba(22,30,34, 0.30) 100%) !important;
  pointer-events: none !important;
  background-image: linear-gradient(120deg, rgba(22,30,34, 0.50) 0%, rgba(22,30,34, 0.30) 100%) !important;
}
section.fixed-quote > .container { position: relative !important; z-index: 2 !important; }
section.fixed-quote blockquote {
  color: #fff !important;
  background: transparent !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
  max-width: 760px !important;
  margin: 0 !important;
  text-shadow: 0 2px 16px rgba(11,53,59, 0.45) !important;
}
section.fixed-quote blockquote .k {
  color: rgba(255,255,255, 0.92) !important;
  background: transparent !important;
  padding: 0 !important;
  display: block !important;
  font-size: 0.78rem !important;
  letter-spacing: 0.14em !important;
  text-transform: uppercase !important;
  margin-bottom: 18px !important;
  font-weight: 600 !important;
}
section.fixed-quote blockquote p {
  color: #fff !important;
  font-family: var(--font-heading) !important;
  font-style: italic !important;
  font-size: clamp(1.6rem, 3vw, 2.4rem) !important;
  line-height: 1.28 !important;
  max-width: 24ch !important;
}
section.fixed-quote cite {
  display: block !important;
  margin-top: 22px !important;
  font-style: normal !important;
  font-size: 0.92rem !important;
  color: rgba(251,250,247, 0.78) !important;
}

/* ---------- §B · MAUX PILLS — text VISIBLE quand ouvert (override absolu) ---------- */
.feature-card.is-fold .feature-card__text {
  display: block !important;
}
.feature-card.is-fold:not(.is-open) .feature-card__text {
  max-height: 0 !important;
  overflow: hidden !important;
  opacity: 0 !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  margin: 0 !important;
}
.feature-card.is-fold.is-open .feature-card__text {
  max-height: 400px !important;
  overflow: visible !important;
  opacity: 1 !important;
  padding: 6px 22px 18px !important;
  margin: 0 !important;
  font-size: 0.92rem !important;
  line-height: 1.55 !important;
  color: var(--color-text-muted) !important;
  visibility: visible !important;
}

/* ---------- §C · MAUX — retrait AGRESSIF de "+" en haut (élément parasite) ---------- */
/* Tous les pseudo-éléments décoratifs sur la carte et son contenu sont supprimés.
   Seul le toggle natif HTML (.feature-card__toggle) reste visible. */
.feature-card.is-fold,
.feature-card.is-fold * {
  position: relative;
}
.feature-card.is-fold::before,
.feature-card.is-fold::after,
.feature-card.is-fold .feature-card__head::before,
.feature-card.is-fold .feature-card__head::after,
.feature-card.is-fold .feature-card__icon::before,
.feature-card.is-fold .feature-card__icon::after,
.feature-card.is-fold .feature-card__title::before,
.feature-card.is-fold .feature-card__title::after {
  display: none !important;
  content: none !important;
  background: none !important;
  border: 0 !important;
}
/* Sécurité : tout enfant direct de .feature-card.is-fold qui n'est PAS .feature-card__head
   ou .feature-card__text est masqué (évite tout numéro/badge/pill orphelin) */
.feature-card.is-fold > *:not(.feature-card__head):not(.feature-card__text) {
  display: none !important;
}

/* ---------- §D · WHY-GRID MOBILE — slide bug + spacing entre cards ---------- */
@media (max-width: 768px) {
  .why-grid.swiper {
    display: block !important;
    overflow: visible !important;
    padding: 0 16px 50px !important;
    /* PASS 39 : margin négatif retiré → débordait du conteneur et bloquait drag start */
  }
  .why-grid.swiper .swiper-wrapper,
  .why-grid.swiper .why-grid__wrapper {
    display: flex !important;
    grid-template-columns: unset !important;
    flex-wrap: nowrap !important;
    width: 100% !important;
    transition-property: transform !important;
    /* PASS 39 : gap retiré → conflit avec spaceBetween Swiper, snap-points décalés */
  }
  .why-grid.swiper .why-card.swiper-slide {
    flex: 0 0 80% !important;
    width: 80% !important;
    max-width: 80% !important;
    box-sizing: border-box !important;
    height: auto;
    margin: 0 !important;
    /* Card visible : bordure + bg + radius */
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 22px !important;
    padding: 26px 24px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
    border-top: 1px solid rgba(44, 185, 198, 0.10) !important;
  }
  .why-grid.swiper .why-card.swiper-slide .why-card__num {
    font-size: 56px !important;
    margin-bottom: 8px !important;
  }
  .why-swiper__pagination {
    display: block !important;
    position: absolute !important;
    bottom: 12px !important;
    left: 0 !important; right: 0 !important;
    text-align: center !important;
    z-index: 5;
  }
  .why-swiper__pagination .swiper-pagination-bullet {
    background: rgba(46,41,34, 0.22);
    opacity: 1; width: 8px; height: 8px; margin: 0 5px;
  }
  .why-swiper__pagination .swiper-pagination-bullet-active {
    background: var(--color-accent);
    transform: scale(1.25);
  }
}

/* ---------- §E · REVIEWS — laisser Swiper calculer la largeur des slides ---------- */
/* L'ancien `max-width: 50% / 75%` clampait la slide à un pourcentage du wrapper
   alors que Swiper avait déjà inscrit une largeur inline en px basée sur
   slidesPerView. Conflit → translate Swiper désaligné avec la slide réelle,
   d'où une carte décalée/croppée à droite. On laisse Swiper gérer. */
.reviews-swiper .swiper-slide { max-width: none; }


/* =====================================================================
   PASS 26 — Navbar transparent avant scroll · Hero center FORCE ·
   Reviews aérées · "+" parasite via flex-direction · Diplômes mobile
   ===================================================================== */

/* ---------- §A · NAVBAR TRANSPARENT AVANT SCROLL ---------- */
.header:not(.is-scrolled):not(.is-nav-open) {
  background: transparent !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
  border: 0 !important;
  border-color: transparent !important;
  box-shadow: none !important;
}
.header:not(.is-scrolled):not(.is-nav-open) .nav__link,
.header:not(.is-scrolled):not(.is-nav-open) .logo,
.header:not(.is-scrolled):not(.is-nav-open) .lang-switch a,
.header:not(.is-scrolled):not(.is-nav-open) .burger span {
  color: #fff !important;
}
.header:not(.is-scrolled):not(.is-nav-open) .burger span {
  background: #fff !important;
}
.header:not(.is-scrolled):not(.is-nav-open) .logo__mark {
  background-color: rgba(255,255,255, 0.18) !important;
  border: 1px solid rgba(255,255,255, 0.30) !important;
}
.header:not(.is-scrolled):not(.is-nav-open) .lang-switch span { color: rgba(255,255,255, 0.45) !important; }

/* ---------- §B · HERO CARTE CENTRÉE ABSOLUE (force) ---------- */
.hero.hero--mosaic {
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  padding: 0 !important;
  width: 100% !important;
  text-align: center;
}
.hero.hero--mosaic > .hero__mosaic-card {
  margin-left: auto !important;
  margin-right: auto !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  text-align: left;
  max-width: 720px !important;
  width: min(92%, 720px) !important;
  position: relative !important;
  left: auto !important;
  right: auto !important;
  transform: none !important;
}

/* ---------- §C · "+" PARASITE — FORCE flex-direction: row + sécurité totale ---------- */
.feature-card.is-fold {
  display: block !important;
  position: relative !important;
}
.feature-card.is-fold .feature-card__head {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  justify-content: flex-start !important;
  width: 100% !important;
}
/* Tout ce qui n'est PAS le head ou le text est masqué */
.feature-card.is-fold > *:not(.feature-card__head):not(.feature-card__text) {
  display: none !important;
}
/* Pas de pseudo qui peut générer un + */
.feature-card.is-fold::before,
.feature-card.is-fold::after,
.feature-card.is-fold .feature-card__head::before,
.feature-card.is-fold .feature-card__head::after,
.feature-card.is-fold .feature-card__icon::before,
.feature-card.is-fold .feature-card__icon::after {
  display: none !important;
  content: none !important;
  background: none !important;
  border: 0 !important;
  width: 0 !important;
  height: 0 !important;
}

/* ---------- §D · DIPLÔMES MOBILE — 1 slide centré ---------- */
@media (max-width: 768px) {
  .diplomas-strip.swiper .swiper-slide,
  .diplomas-swiper .swiper-slide {
    width: 100% !important;
    max-width: 100% !important;
    flex-shrink: 0;
  }
  .diplomas-strip__item.swiper-slide {
    width: 100% !important;
  }
  .diplomas-strip__wrapper {
    gap: 0 !important;
  }
}

/* ---------- §E · REVIEWS — moins débordées, plus aérées ---------- */
.reviews-swiper {
  overflow: hidden !important;  /* coupe la 3e carte qui dépassait */
}
.reviews-swiper .swiper-wrapper {
  overflow: visible !important;
}
.reviews-swiper .swiper-slide {
  flex-shrink: 0 !important;
}
.review-card {
  padding: 28px 26px !important;
  border-radius: 18px !important;
}
.review-card__text {
  font-size: 0.93rem !important;
  line-height: 1.6 !important;
  -webkit-line-clamp: 4 !important;
  line-clamp: 4 !important;
}


/* =====================================================================
   PASS 27 — Maux pills CLASSES NEUVES .maux-pill (sans héritage
   feature-card qui causait le "+" parasite)
   ===================================================================== */

.maux-grid {
  display: grid !important;
  grid-template-columns: repeat(2, 1fr) !important;
  gap: 10px !important;
  width: 100%;
}
@media (max-width: 1024px) {
  .maux-grid { grid-template-columns: 1fr !important; gap: 8px !important; }
}

/* Pill container */
.maux-pill {
  display: block !important;
  background: #fff;
  border: 1px solid rgba(44, 185, 198, 0.08);
  border-radius: 999px;
  overflow: hidden;
  transition: border-radius 0.4s var(--ease), background 0.3s var(--ease), border-color 0.3s var(--ease), box-shadow 0.3s var(--ease);
  padding: 0;
  margin: 0;
  position: relative;
}
.maux-pill:hover {
  border-color: rgba(232, 181, 74, 0.45);
  box-shadow: 0 8px 22px -12px rgba(232, 181, 74, 0.30);
}
.maux-pill.is-open {
  border-radius: 22px;
  border-color: rgba(232, 181, 74, 0.55);
  background: #fff;
  box-shadow: 0 18px 36px -20px rgba(232, 181, 74, 0.35);
}
/* On masque uniquement les pseudo-éléments potentiels du conteneur et du
   bouton — PAS ceux des icônes Phosphor (qui utilisent ::before pour
   injecter le glyphe via icon font). */
.maux-pill::before, .maux-pill::after,
.maux-pill > .maux-pill__btn::before,
.maux-pill > .maux-pill__btn::after,
.maux-pill > .maux-pill__text::before,
.maux-pill > .maux-pill__text::after,
.maux-pill .maux-pill__icon::after,
.maux-pill .maux-pill__title::before,
.maux-pill .maux-pill__title::after,
.maux-pill .maux-pill__toggle::after {
  display: none !important;
  content: none !important;
  background: none !important;
  border: 0 !important;
  width: 0 !important;
  height: 0 !important;
}

/* Bouton header — UNE ligne flex row */
.maux-pill .maux-pill__btn {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: center !important;
  justify-content: flex-start !important;
  gap: 12px !important;
  width: 100% !important;
  padding: 8px 14px !important;
  background: transparent !important;
  border: 0 !important;
  cursor: pointer;
  font: inherit;
  color: var(--color-text);
  text-align: left;
  appearance: none;
  -webkit-appearance: none;
}
.maux-pill .maux-pill__icon {
  flex: 0 0 auto !important;
  width: 32px !important;
  height: 32px !important;
  border-radius: 50% !important;
  display: grid !important;
  place-items: center !important;
  background: rgba(252,245,232, 0.85) !important;
  border: 1px solid rgba(232, 181, 74, 0.25) !important;
  color: var(--color-primary-strong) !important;
  font-size: 16px !important;
  margin: 0 !important;
}
.maux-pill .maux-pill__title {
  flex: 1 1 auto !important;
  font-family: var(--font-heading) !important;
  font-size: 0.95rem !important;
  font-weight: 500 !important;
  line-height: 1.25 !important;
  margin: 0 !important;
  color: var(--color-text) !important;
}
.maux-pill .maux-pill__toggle {
  flex: 0 0 auto !important;
  width: 26px !important;
  height: 26px !important;
  border-radius: 50% !important;
  border: 1.5px solid var(--color-primary-strong) !important;
  background: transparent !important;
  color: var(--color-primary-strong) !important;
  display: grid !important;
  place-items: center !important;
  font-size: 0.8rem !important;
  transition: transform 0.35s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease) !important;
}
.maux-pill.is-open .maux-pill__toggle {
  background: var(--color-primary-strong) !important;
  color: #fff !important;
  transform: rotate(45deg) !important;
}

/* Description (collapsée par défaut) */
.maux-pill .maux-pill__text {
  display: block !important;
  max-height: 0;
  overflow: hidden;
  opacity: 0;
  padding: 0 22px;
  margin: 0;
  font-size: 0.9rem;
  line-height: 1.55;
  color: var(--color-text-muted);
  transition: max-height 0.45s var(--ease), opacity 0.3s var(--ease), padding 0.45s var(--ease);
}
.maux-pill.is-open .maux-pill__text {
  max-height: 300px !important;
  opacity: 1 !important;
  padding: 4px 22px 16px 58px !important;
}
@media (max-width: 768px) {
  .maux-pill.is-open .maux-pill__text { padding: 4px 18px 14px 48px !important; }
}


/* =====================================================================
   PASS 28 — Fix Maux pills : icônes restored + accordion isolation
   ===================================================================== */

/* ---------- §A · Grid items ne s'alignent pas en hauteur ---------- */
.maux-grid {
  align-items: start !important;
  grid-auto-rows: min-content !important;
}
.maux-pill {
  align-self: start !important;
  height: auto !important;
}

/* ---------- §B · Icône Phosphor — NE TOUCHE PAS le content, laisse Phosphor injecter ---------- */
.maux-pill .maux-pill__icon i,
.maux-pill .maux-pill__icon i[class*="ph-"] {
  display: inline-block !important;
  font-size: 17px !important;
  line-height: 1 !important;
  color: var(--color-primary-strong) !important;
}

/* ---------- §C · Toggle "+" icon Phosphor — pareil ---------- */
.maux-pill .maux-pill__toggle i,
.maux-pill .maux-pill__toggle i[class*="ph-"] {
  display: inline-block !important;
  font-size: 0.85rem !important;
  line-height: 1 !important;
}


/* =====================================================================
   PASS 29 — Vérification Phosphor + accordion smooth
   ===================================================================== */

/* Force Phosphor icons à s'afficher : on cible explicitement les selectors
   Phosphor pour s'assurer qu'aucun de mes overrides ne les casse. */
.maux-pill i[class*="ph-"]::before,
.maux-pill i.ph::before,
.maux-pill i.ph-light::before,
.maux-pill i.ph-bold::before,
.maux-pill i.ph-regular::before {
  display: inline-block !important;
  /* Pas de content override : laisse Phosphor injecter son glyphe */
  font-family: "Phosphor-Light", "Phosphor" !important;
  font-style: normal !important;
  font-weight: normal !important;
  text-rendering: auto !important;
  -webkit-font-smoothing: antialiased !important;
  line-height: 1 !important;
}

/* Si malgré tout Phosphor ne charge pas, fallback texte sur le toggle */
.maux-pill .maux-pill__toggle:empty::before {
  content: "+";
  font-family: inherit;
  font-size: 1rem;
  font-weight: 300;
  line-height: 1;
}
.maux-pill.is-open .maux-pill__toggle:empty::before {
  content: "×";
}

/* Accordion plus smooth — cubic-bezier matérial + durée optimale */
.maux-pill .maux-pill__text {
  transition:
    max-height 0.5s cubic-bezier(0.4, 0, 0.2, 1) !important,
    opacity 0.35s cubic-bezier(0.4, 0, 0.2, 1) !important,
    padding 0.5s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
.maux-pill {
  transition:
    border-radius 0.5s cubic-bezier(0.4, 0, 0.2, 1),
    border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
    background 0.3s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.35s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
.maux-pill .maux-pill__toggle {
  transition:
    transform 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important,
    background 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important,
    color 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
}


/* =====================================================================
   PASS 30 — Maux pills : rectangle constant (plus de transition pill→rect)
   ===================================================================== */

/* Border-radius rectangle constant, état fermé ET ouvert */
.maux-pill,
.maux-pill.is-open {
  border-radius: 18px !important;
}
/* On retire la transition de border-radius — seule la hauteur change */
.maux-pill {
  transition:
    border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1),
    background 0.3s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.35s cubic-bezier(0.4, 0, 0.2, 1) !important;
}


/* =====================================================================
   PASS 31 — Eyebrow no highlight + fade hero + mobile photo isolée +
   reviews compactes + diplomas spacing
   ===================================================================== */

/* ---------- §A · HERO EYEBROW — pas de surlignage ---------- */
.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow {
  background: transparent !important;
  background-color: transparent !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 14px;
}

/* ---------- §B · FADE-IN de la carte hero avec délai ---------- */
@keyframes heroCardFadeIn {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}
.hero.hero--mosaic .hero__mosaic-card {
  opacity: 0;
  animation: heroCardFadeIn 1.1s cubic-bezier(0.22, 0.61, 0.36, 1) 0.9s forwards;
}
@media (prefers-reduced-motion: reduce) {
  .hero.hero--mosaic .hero__mosaic-card {
    opacity: 1;
    animation: none;
  }
}

/* ---------- §C · HERO MOBILE : photo isolée en rectangle arrondi AU-DESSUS ---------- */
@media (max-width: 768px) {
  .hero.hero--mosaic {
    background-image: none !important;
    background: var(--color-bg) !important;
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: flex-start !important;
    padding: 96px 16px 40px !important;
    gap: 24px !important;
    min-height: auto !important;
    overflow: visible !important;
  }
  /* Photo isolée en haut */
  .hero.hero--mosaic::after {
    display: block !important;
    content: "" !important;
    background-image: var(--hero-photo) !important;
    background-size: cover !important;
    background-position: center !important;
    background-repeat: no-repeat !important;
    width: 100% !important;
    max-width: 480px !important;
    aspect-ratio: 16 / 11;
    border-radius: 24px;
    position: relative !important;
    inset: auto !important;
    z-index: 1 !important;
    box-shadow: 0 18px 36px -16px rgba(46,41,34, 0.28);
    margin: 0 auto;
    order: 1;
  }
  /* Carte en dessous, sans glassmorphism (pas de photo derrière) */
  .hero.hero--mosaic .hero__mosaic-card {
    order: 2;
    position: static !important;
    margin: 0 auto !important;
    width: 100% !important;
    max-width: 480px !important;
    background: var(--color-surface) !important;
    -webkit-backdrop-filter: none !important;
            backdrop-filter: none !important;
    border: 1px solid rgba(44, 185, 198, 0.08) !important;
    padding: 32px 26px !important;
    box-shadow: 0 12px 28px -16px rgba(46,41,34, 0.18) !important;
  }
}

/* ---------- §D · REVIEWS — plus petites, plus de padding interne, aucune cropée ---------- */
section:has(.reviews-swiper) > .container {
  padding-inline: clamp(20px, 5vw, 80px) !important;
  overflow: hidden;
}
.reviews-grid.swiper.reviews-swiper {
  overflow: hidden !important;
  padding: 12px 0 50px !important;
  margin: 32px 0 0 !important;
}
.reviews-swiper .swiper-slide {
  height: auto !important;
  padding: 6px !important;
  box-sizing: border-box;
}
.review-card {
  padding: 28px 32px !important;   /* PLUS de padding interne */
  border-radius: 16px !important;
  font-size: 0.92rem !important;
  /* width: 100% retiré — la slide ET la review-card sont le même élément ;
     un width:100% !important écrasait la width inline calculée par Swiper. */
  background: #fff !important;
  border: 1px solid rgba(44, 185, 198, 0.08) !important;
  box-shadow: 0 4px 14px -8px rgba(46,41,34, 0.08) !important;
  display: flex !important;
  flex-direction: column !important;
}
.review-card__head { margin-bottom: 14px !important; padding: 0 !important; }
.review-card__avatar { width: 36px !important; height: 36px !important; }
.review-card__name { font-size: 0.9rem !important; }
.review-card__stars { font-size: 0.78rem !important; }
.review-card__text {
  font-size: 0.9rem !important;
  line-height: 1.55 !important;
  margin: 0 0 8px !important;
  -webkit-line-clamp: 4 !important;
  line-clamp: 4 !important;
}
.review-card__src { margin-top: auto !important; padding-top: 12px !important; font-size: 0.78rem !important; }
@media (max-width: 768px) {
  .review-card { padding: 22px 24px !important; }
  .reviews-swiper .swiper-slide { padding: 4px !important; }
}

/* ---------- §E · DIPLÔMES MOBILE — vraie spacing entre slides ---------- */
@media (max-width: 768px) {
  .diplomas-strip.swiper {
    overflow: hidden !important;
    padding: 0 0 36px !important;
  }
  .diplomas-strip__wrapper {
    display: flex !important;
    flex-direction: row !important;
    gap: 0 !important;  /* spacing géré par Swiper margin-right */
  }
  .diplomas-strip__item.swiper-slide {
    width: 100% !important;
    max-width: 100% !important;
    flex: 0 0 100% !important;
    height: auto;
    box-sizing: border-box;
    padding: 8px !important;
  }
  .diplomas-strip__item {
    background: #fff;
    border-radius: 18px;
    padding: 18px !important;
    border: 1px solid rgba(44, 185, 198, 0.08);
  }
}


/* =====================================================================
   PASS 32 — Why-grid mobile · Hero mobile photo · Navbar mobile logo ·
   Process photo no fade · Organic shapes
   ===================================================================== */

/* ---------- §A · WHY-GRID MOBILE Swiper fonctionne vraiment ---------- */
@media (max-width: 768px) {
  .why-grid.swiper {
    display: block !important;
    overflow: hidden !important;
    padding: 0 0 50px !important;
    margin: 0 !important;
    position: relative !important;
    touch-action: pan-x pan-y;  /* pan-y seul INTERDISAIT le swipe horizontal (cf. PASS 119) */
  }
  .why-grid.swiper .swiper-wrapper,
  .why-grid.swiper .why-grid__wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    grid-template-columns: unset !important;
    grid-template-rows: unset !important;
    grid: unset !important;
    width: auto !important;
    transform: translate3d(0, 0, 0);
    transition-property: transform !important;
    gap: 0 !important;  /* spacing géré par Swiper */
  }
  .why-grid.swiper .why-card.swiper-slide {
    flex: 0 0 78% !important;
    width: 78% !important;
    max-width: 78% !important;
    box-sizing: border-box !important;
    height: auto !important;
    margin: 0 !important;
    padding: 26px 22px !important;
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-top: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 22px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
  }
  .why-grid.swiper .why-card.swiper-slide .why-card__num {
    font-size: 52px !important;
    margin-bottom: 6px !important;
  }
  .why-grid.swiper .why-card.swiper-slide .why-card__title { font-size: 1.1rem !important; }
  .why-grid.swiper .why-card.swiper-slide .why-card__text { font-size: 0.92rem !important; }
}

/* ---------- §B · HERO MOBILE PHOTO ::after — affichage forcé ---------- */
@media (max-width: 768px) {
  /* Override les PASS 21/22/23 qui forcent display:none sur ::after */
  .hero.hero--mosaic::after {
    display: block !important;
    content: "" !important;
    background-image: var(--hero-photo) !important;
    background-size: cover !important;
    background-position: center !important;
    background-repeat: no-repeat !important;
    background-color: transparent !important;
    width: calc(100% - 24px) !important;
    max-width: 480px !important;
    height: auto !important;
    aspect-ratio: 16 / 11 !important;
    border-radius: 24px !important;
    position: relative !important;
    inset: auto !important;
    z-index: 1 !important;
    box-shadow: 0 18px 36px -16px rgba(46,41,34, 0.28) !important;
    margin: 0 auto !important;
    order: 1 !important;
    opacity: 1 !important;
  }
}

/* ---------- §C · NAVBAR MOBILE — logo visible avant scroll ---------- */
@media (max-width: 768px) {
  /* Sur mobile, on garde le logo mark en teal + texte sombre AVANT scroll */
  .header:not(.is-scrolled):not(.is-nav-open) .logo__mark {
    background-color: var(--color-logo) !important;
    border: 1px solid var(--color-logo) !important;
  }
  .header:not(.is-scrolled):not(.is-nav-open) .logo,
  .header:not(.is-scrolled):not(.is-nav-open) .logo span {
    color: var(--color-text) !important;
  }
  /* Burger barres en sombre aussi pour visibilité */
  .header:not(.is-scrolled):not(.is-nav-open) .burger span {
    background: var(--color-text) !important;
  }
  /* Bouton CTA reste primary turquoise */
  .header:not(.is-scrolled):not(.is-nav-open) .btn--primary {
    background-color: var(--color-primary) !important;
    color: #fff !important;
  }
}

/* ---------- §D · PROCESS section homepage — photo intacte, gradients OK ---------- */
.process__bg {
  opacity: 1 !important;            /* photo en pleine couleur */
  filter: none !important;          /* pas de saturate, brightness, etc. */
  -webkit-filter: none !important;
  background-color: transparent !important;
}
/* Gradients de transition haut/bas conservés (déjà sur .process__bg::after) */
.process__bg::after {
  /* On garde le fondu top/bottom pour blending avec le bg cream — directive utilisateur */
  background: linear-gradient(180deg,
    var(--color-bg) 0%,
    transparent 18%,
    transparent 82%,
    var(--color-bg) 100%) !important;
}

/* ---------- §E · ORGANIC SHAPES (ronds organiques) en fond ---------- */
.organic-shape {
  position: absolute;
  pointer-events: none;
  z-index: 0;
}
.organic-shape__blob {
  position: absolute;
  inset: 0;
  background: rgba(232, 181, 74, 0.16);
  border-radius: 60% 40% 55% 50% / 50% 60% 40% 55%;
  filter: blur(2px);
}
.organic-shape__line {
  position: absolute;
  inset: -10% -5% 5% 8%;
  border: 1.5px solid rgba(44, 185, 198, 0.40);
  border-radius: 50% 55% 50% 60% / 55% 50% 60% 45%;
  background: transparent;
}
/* Inject via CSS sur quelques sections clés (homepage) — sans toucher HTML */
main > section.section:nth-of-type(2) {
  position: relative;
  overflow: hidden;
}
main > section.section:nth-of-type(2)::before {
  content: "";
  position: absolute;
  width: 280px; height: 260px;
  top: 10%; left: -80px;
  background: rgba(232, 181, 74, 0.14);
  border-radius: 60% 40% 55% 50% / 50% 60% 40% 55%;
  filter: blur(1px);
  pointer-events: none;
  z-index: 0;
}
main > section.section:nth-of-type(2)::after {
  content: "";
  position: absolute;
  width: 320px; height: 280px;
  top: 8%; left: -50px;
  border: 1.5px solid rgba(44, 185, 198, 0.18);
  border-radius: 50% 55% 50% 60% / 55% 50% 60% 45%;
  pointer-events: none;
  z-index: 0;
}
main > section.section:nth-of-type(4) {
  position: relative;
  overflow: hidden;
}
main > section.section:nth-of-type(4)::before {
  content: "";
  position: absolute;
  width: 300px; height: 270px;
  bottom: 8%; right: -90px;
  background: rgba(217, 187, 122, 0.16);
  border-radius: 55% 45% 50% 55% / 60% 50% 55% 45%;
  filter: blur(1px);
  pointer-events: none;
  z-index: 0;
}
main > section.section:nth-of-type(4)::after {
  content: "";
  position: absolute;
  width: 330px; height: 290px;
  bottom: 6%; right: -60px;
  border: 1.5px solid rgba(44, 185, 198, 0.16);
  border-radius: 45% 55% 60% 50% / 50% 55% 45% 60%;
  pointer-events: none;
  z-index: 0;
}
main > section.section:nth-of-type(6) {
  position: relative;
  overflow: hidden;
}
main > section.section:nth-of-type(6)::before {
  content: "";
  position: absolute;
  width: 290px; height: 260px;
  top: 12%; right: -70px;
  background: rgba(44, 185, 198, 0.18);
  border-radius: 60% 50% 55% 45% / 50% 60% 45% 55%;
  filter: blur(1px);
  pointer-events: none;
  z-index: 0;
}
main > section.section:nth-of-type(6)::after {
  content: "";
  position: absolute;
  width: 310px; height: 280px;
  top: 10%; right: -40px;
  border: 1.5px solid rgba(44, 185, 198, 0.16);
  border-radius: 50% 60% 45% 55% / 55% 50% 60% 45%;
  pointer-events: none;
  z-index: 0;
}
/* Le contenu reste devant les formes */
main > section.section > .container { position: relative; z-index: 2; }


/* =====================================================================
   PASS 33 — Organic shapes par section + Fixed-quote photo intacte +
   Hero unique par page
   ===================================================================== */

/* ---------- §A · ORGANIC SHAPES sur CHAQUE section main ---------- */
/* On force overflow:hidden ET on ajoute deux shapes par section via
   nth-of-type. Couleurs alternées warm/sand/sage selon position. */

/* Reset section : assure position:relative + overflow visible pour les blobs */
main > section.section,
main > section.section--bg,
main > section.section--alt {
  position: relative !important;
  overflow: hidden !important;
}

/* === Section pair (2, 4, 6...) - blob caramel haut gauche === */
main > section.section:nth-of-type(even)::before {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  width: 360px;
  height: 320px;
  top: 8%;
  left: -120px;
  background: rgba(232, 181, 74, 0.22);
  border-radius: 62% 38% 55% 45% / 50% 60% 40% 50%;
  filter: blur(2px);
  pointer-events: none;
  z-index: 0 !important;
}
main > section.section:nth-of-type(even)::after {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  width: 400px;
  height: 340px;
  top: 6%;
  left: -80px;
  border: 1.5px solid rgba(44, 185, 198, 0.22);
  border-radius: 55% 45% 60% 40% / 50% 55% 45% 50%;
  background: transparent;
  pointer-events: none;
  z-index: 0 !important;
}

/* === Section impair (1, 3, 5...) - blob sable bas droite === */
main > section.section:nth-of-type(odd)::before {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  width: 380px;
  height: 340px;
  bottom: 6%;
  right: -110px;
  background: rgba(217, 187, 122, 0.24);
  border-radius: 50% 60% 45% 55% / 55% 50% 60% 45%;
  filter: blur(2px);
  pointer-events: none;
  z-index: 0 !important;
}
main > section.section:nth-of-type(odd)::after {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  width: 420px;
  height: 360px;
  bottom: 4%;
  right: -80px;
  border: 1.5px solid rgba(44, 185, 198, 0.20);
  border-radius: 45% 55% 60% 40% / 55% 50% 45% 60%;
  background: transparent;
  pointer-events: none;
  z-index: 0 !important;
}

/* Contenu au-dessus des blobs */
main > section.section > .container,
main > section.section--bg > .container,
main > section.section--alt > .container {
  position: relative !important;
  z-index: 2 !important;
}

/* ---------- §B · FIXED-QUOTE — photo intacte, plus de scrim ---------- */
section.fixed-quote {
  background-attachment: scroll !important; /* ex-fixed : fluidité scroll (plus de repaint plein cadre) */
  background-size: cover !important;
  background-repeat: no-repeat !important;
  background-position: var(--quote-pos, center) !important;
}
section.fixed-quote::after {
  /* Plus de scrim sombre — la photo reste pleinement visible */
  display: none !important;
  content: none !important;
  background: none !important;
}
section.fixed-quote::before {
  display: none !important;
  content: none !important;
}
/* Carte glass pour le texte (lisibilité sur photo claire) */
section.fixed-quote > .container { position: relative; z-index: 5; }
section.fixed-quote blockquote {
  background: rgba(252,245,232, 0.78) !important;
  -webkit-backdrop-filter: blur(20px) saturate(1.4) !important;
          backdrop-filter: blur(20px) saturate(1.4) !important;
  border: 1px solid rgba(255,255,255, 0.55) !important;
  border-radius: 28px !important;
  padding: 36px 40px !important;
  box-shadow: 0 24px 56px -24px rgba(46,41,34, 0.32) !important;
  max-width: 640px !important;
  color: var(--color-text) !important;
  text-shadow: none !important;
}
section.fixed-quote blockquote .k {
  color: var(--color-primary-strong) !important;
  text-shadow: none !important;
}
section.fixed-quote blockquote p {
  color: var(--color-text) !important;
  text-shadow: none !important;
  font-size: clamp(1.3rem, 2.4vw, 1.9rem) !important;
}
section.fixed-quote cite {
  color: var(--color-text-muted) !important;
  text-shadow: none !important;
}
@media (max-width: 768px) {
  section.fixed-quote blockquote { padding: 28px 26px !important; }
}


/* =====================================================================
   PASS 34 — Hero mobile photo via div · Organic shapes globales seamless ·
   Sections sans overflow:hidden · Diplomas dernier slide fix
   ===================================================================== */

/* ---------- §A · HERO MOBILE PHOTO — vraie <div> injectée par JS ---------- */
.hero__mobile-photo { display: none; }
@media (max-width: 768px) {
  /* Annule l'::after qui ne marchait pas */
  .hero.hero--mosaic::after { display: none !important; }
  /* Photo isolée comme vraie div */
  .hero__mobile-photo {
    display: block !important;
    width: calc(100% - 24px);
    max-width: 480px;
    aspect-ratio: 16 / 11;
    border-radius: 24px;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    box-shadow: 0 18px 36px -16px rgba(46,41,34, 0.28);
    margin: 0 auto;
    order: 1;
    flex: 0 0 auto;
    position: relative;
    z-index: 2;
  }
  /* Carte hero en dessous */
  .hero.hero--mosaic .hero__mosaic-card {
    order: 2;
    flex: 0 0 auto;
  }
}

/* ---------- §B · PAGE ORGANIC SHAPES — layer global seamless ---------- */
.page-organic-shapes {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  pointer-events: none !important;
  z-index: 0 !important;
  overflow: hidden !important;
}
main {
  position: relative !important;
}
.page-organic-shape {
  display: block !important;
}

/* ---------- §C · Sections SANS overflow:hidden (transitions seamless) ---------- */
main > section,
main > section.section,
main > section.section--bg,
main > section.section--alt {
  overflow: visible !important;
}
/* Plus aucune ::before/::after décorative au niveau section (les blobs sont au niveau main) */
main > section.section:nth-of-type(odd)::before,
main > section.section:nth-of-type(odd)::after,
main > section.section:nth-of-type(even)::before,
main > section.section:nth-of-type(even)::after {
  display: none !important;
  content: none !important;
}
/* Aucun bg color par section qui créerait une démarcation */
main > section:not(.hero):not(.fixed-quote):not(.cta-final) {
  background-color: transparent !important;
  background-image: none !important;
}
/* Body cream uniforme garanti */
body, body.theme-femine {
  background-color: var(--color-bg) !important;
}

/* Contenu des sections au-dessus des shapes globales */
main > section > .container,
main > section > * {
  position: relative !important;
  z-index: 2 !important;
}

/* ---------- §D · DIPLOMAS SWIPER — dernier slide pas à moitié vide ---------- */
@media (max-width: 768px) {
  .diplomas-strip.swiper {
    overflow: hidden !important;
    padding: 0 0 40px !important;
  }
  .diplomas-strip__wrapper {
    display: flex !important;
    gap: 0 !important;
    /* Pas de width forcée — Swiper calcule */
  }
  .diplomas-strip__item.swiper-slide {
    width: auto !important;        /* laisse Swiper calculer */
    max-width: none !important;
    flex: none !important;
    height: auto;
    box-sizing: border-box;
  }
}


/* =====================================================================
   PASS 35 — Eyebrow NO highlight FORCE · Reviews 2nd card visible ·
   Carousels mobile swipe activé · Hero photos diversifiées
   ===================================================================== */

/* ---------- §A · HERO EYEBROW — overrides massifs (cette fois ça marche) ---------- */
.hero__eyebrow,
.hero.hero--mosaic .hero__eyebrow,
.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow,
.hero__mosaic-card .hero__eyebrow {
  background: transparent !important;
  background-color: transparent !important;
  background-image: none !important;
  padding: 0 !important;
  margin: 0 0 14px !important;
  border: 0 !important;
  border-radius: 0 !important;
  outline: 0 !important;
  box-shadow: none !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  width: auto !important;
}
.hero__eyebrow::before,
.hero__eyebrow::after,
.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow::before,
.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow::after {
  display: none !important;
  content: none !important;
  background: none !important;
}

/* ---------- §B · REVIEWS SWIPER — 2 cards entièrement visibles ---------- */
section:has(.reviews-swiper) > .container {
  padding-inline: clamp(20px, 3vw, 60px) !important;
}
.reviews-grid.swiper.reviews-swiper {
  overflow: hidden !important;
  padding: 14px 0 60px !important;
  margin: 32px 0 0 !important;
  position: relative;
}
.reviews-swiper .swiper-wrapper {
  display: flex !important;
  align-items: stretch !important;
}
.reviews-swiper .swiper-slide {
  flex-shrink: 0 !important;
  height: auto !important;
  padding: 0 !important;
  box-sizing: border-box;
  display: flex !important;
}
.review-card {
  /* width: 100% retiré — voir bloc équivalent plus haut. La slide étant aussi
     la .review-card, on laisse l'inline width de Swiper s'appliquer. */
  padding: 28px 30px !important;
  border-radius: 16px !important;
  background: #fff !important;
  border: 1px solid rgba(44, 185, 198, 0.08) !important;
  box-shadow: 0 6px 20px -10px rgba(46,41,34, 0.12) !important;
  display: flex !important;
  flex-direction: column !important;
  font-size: 0.92rem !important;
}
.review-card__text {
  -webkit-line-clamp: 4 !important;
  line-clamp: 4 !important;
  display: -webkit-box !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
}
/* Flèches : POSITIONNÉES en dehors des cards, pas par-dessus */
.reviews-swiper__prev,
.reviews-swiper__next {
  position: absolute !important;
  top: 50% !important;
  transform: translateY(-50%) !important;
  width: 42px !important;
  height: 42px !important;
  border-radius: 50% !important;
  background: #fff !important;
  border: 1px solid rgba(44, 185, 198, 0.10) !important;
  box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.20) !important;
  z-index: 20 !important;
  display: grid !important;
  place-items: center;
  cursor: pointer;
}
.reviews-swiper__prev { left: -22px !important; right: auto !important; }
.reviews-swiper__next { right: -22px !important; left: auto !important; }
@media (max-width: 1024px) {
  .reviews-swiper__prev { left: -10px !important; }
  .reviews-swiper__next { right: -10px !important; }
}
@media (max-width: 768px) {
  .reviews-swiper__prev,
  .reviews-swiper__next { display: none !important; }
}

/* ---------- §C · CAROUSELS MOBILE — SWIPE manuel obligatoire ---------- */
/* touch-action: pan-y autorise scroll vertical de la page ET swipe horizontal du carousel */
@media (max-width: 768px) {
  .swiper,
  .reviews-swiper,
  .diplomas-swiper,
  .why-swiper,
  .why-grid.swiper,
  .reviews-grid.swiper {
    touch-action: pan-y !important;
    -ms-touch-action: pan-y !important;
    user-select: none;
    -webkit-user-select: none;
  }
  /* Swiper-wrapper : pas de touch-action restrictive */
  .swiper-wrapper {
    touch-action: pan-y !important;
  }
  /* Slides cliquables et swipables */
  .swiper-slide {
    touch-action: pan-y !important;
    user-select: none;
    -webkit-user-select: none;
    cursor: grab;
  }
  /* Aucun élément qui bloque les events touch */
  .page-organic-shapes,
  .page-organic-shape {
    pointer-events: none !important;
    touch-action: none !important;
  }
}


/* =====================================================================
   PASS 36 — Hero center FORCE + Process bg restauré + Fixed-quote sans card
   ===================================================================== */

/* ---------- §A · HERO carte CENTRÉE — display:grid place-items:center ---------- */
.hero.hero--mosaic {
  display: grid !important;
  place-items: center !important;
  grid-template-columns: 1fr !important;
  grid-template-rows: 1fr !important;
  width: 100% !important;
  padding: 0 !important;
}
.hero.hero--mosaic > .hero__mosaic-card {
  margin: 0 auto !important;
  justify-self: center !important;
  align-self: center !important;
  position: relative !important;
  left: auto !important;
  right: auto !important;
  top: auto !important;
  bottom: auto !important;
  transform: none !important;
  width: min(92%, 720px) !important;
  max-width: 720px !important;
  grid-column: 1 !important;
  grid-row: 1 !important;
}

/* ---------- §B · PROCESS BG photo restaurée — annule PASS 34 forcé position:relative ---------- */
.process .process__bg {
  position: absolute !important;
  inset: 0 !important;
  z-index: 0 !important;
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  background-size: cover !important;
  background-position: center !important;
  background-repeat: no-repeat !important;
  opacity: 1 !important;
  filter: none !important;
  -webkit-filter: none !important;
}
.process .process__inner {
  position: relative !important;
  z-index: 1 !important;
}

/* ---------- §C · FIXED-QUOTE Mon approche : sans carte, texte gauche, blanc sur photo ---------- */
section.fixed-quote {
  background-attachment: scroll !important; /* ex-fixed : fluidité scroll (plus de repaint plein cadre) */
  background-size: cover !important;
  background-position: var(--quote-pos, center) !important;
  background-repeat: no-repeat !important;
}
@media (max-width: 768px) {
  section.fixed-quote {
    background-attachment: scroll !important;
    background-position: var(--quote-pos-mobile, var(--quote-pos, center)) !important;
  }
}
section.fixed-quote::after {
  display: block !important;
  content: "" !important;
  position: absolute !important;
  inset: 0 !important;
  z-index: 1 !important;
  background: linear-gradient(120deg, rgba(22,30,34, 0.50) 0%, rgba(22,30,34, 0.30) 100%) !important;
  pointer-events: none !important;
}
section.fixed-quote > .container { position: relative; z-index: 2; }
section.fixed-quote blockquote {
  /* PAS DE CARTE — texte directement sur photo avec scrim */
  background: transparent !important;
  background-color: transparent !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
  color: #fff !important;
  text-shadow: 0 2px 16px rgba(11,53,59, 0.45) !important;
  max-width: 760px !important;
  margin: 0 !important;          /* aligné à gauche, pas centré */
  text-align: left !important;
}
section.fixed-quote blockquote .k {
  color: rgba(255,255,255, 0.92) !important;
  font-size: 0.78rem !important;
  letter-spacing: 0.14em !important;
  text-transform: uppercase !important;
  font-weight: 600 !important;
  margin-bottom: 18px !important;
  display: block !important;
  background: transparent !important;
  padding: 0 !important;
}
section.fixed-quote blockquote p {
  color: #fff !important;
  font-family: var(--font-heading) !important;
  font-style: italic !important;
  font-size: clamp(1.6rem, 3vw, 2.4rem) !important;
  line-height: 1.28 !important;
  max-width: 24ch !important;
  text-shadow: 0 2px 16px rgba(11,53,59, 0.45) !important;
}
section.fixed-quote cite {
  color: rgba(251,250,247, 0.78) !important;
  display: block !important;
  margin-top: 22px !important;
  font-style: normal !important;
  font-size: 0.92rem !important;
  text-shadow: 0 1px 8px rgba(11,53,59, 0.30) !important;
}


/* =====================================================================
   PASS 37 — Fix bug critique : photos hero VRAIMENT différentes par page
   + Carte hero centrée vraiment au milieu (pas trop haute)
   ===================================================================== */

/* ---------- §A · Reset complet du background du hero — laisse l'inline gérer ---------- */
.hero.hero--mosaic,
.hero.hero--home.hero--mosaic,
.hero.hero--secondary.hero--mosaic {
  background-color: transparent;
  /* background-image vient de l'inline style HTML qui définit --hero-photo */
}
.hero.hero--mosaic::after,
.hero.hero--mosaic::before {
  display: none !important;
  content: none !important;
  background: none !important;
  background-image: none !important;
}

/* ---------- §B · Carte centrée vraiment au MILIEU du hero ---------- */
.hero.hero--mosaic {
  display: grid !important;
  place-items: center !important;
  align-items: center !important;
  justify-items: center !important;
  align-content: center !important;
  justify-content: center !important;
  grid-template-columns: 1fr !important;
  grid-template-rows: 1fr !important;
  min-height: 92vh !important;
  padding: 90px 24px 60px !important;  /* 90px top + 60px bottom pour pas que la carte colle au haut */
  width: 100% !important;
  box-sizing: border-box;
}
.hero.hero--mosaic > .hero__mosaic-card {
  margin: 0 !important;
  justify-self: center !important;
  align-self: center !important;
  position: relative !important;
  inset: auto !important;
  transform: none !important;
  width: min(92%, 720px) !important;
  max-width: 720px !important;
  grid-column: 1 / -1 !important;
  grid-row: 1 / -1 !important;
}

/* Mobile : la photo isolée + carte stack vertical (PASS 32/34) reste prioritaire */
@media (max-width: 768px) {
  .hero.hero--mosaic {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: flex-start !important;
    min-height: auto !important;
    padding: 96px 16px 40px !important;
    gap: 24px !important;
  }
}


/* =====================================================================
   PASS 38 — Fixed-quote LEFT-aligned (santé mentale) + carousels touch
   ===================================================================== */

/* ---------- §A · FIXED-QUOTE blockquote ALIGNÉE À GAUCHE ---------- */
section.fixed-quote .container {
  text-align: left !important;
}
section.fixed-quote blockquote {
  text-align: left !important;
  margin-left: 0 !important;
  margin-right: auto !important;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  padding: 0 !important;
  box-shadow: none !important;
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
}
section.fixed-quote blockquote * {
  text-align: left !important;
}

/* ---------- §B · CAROUSELS mobile touch — sécurité totale ---------- */
@media (max-width: 768px) {
  /* Les organic shapes ne doivent jamais bloquer les events touch */
  .page-organic-shapes,
  .page-organic-shapes *,
  .page-organic-shape {
    pointer-events: none !important;
    touch-action: none !important;
    user-select: none !important;
  }
  /* Swipers : touch fonctionnel garanti */
  .swiper,
  .swiper-wrapper,
  .swiper-slide,
  .reviews-swiper,
  .diplomas-swiper,
  .why-swiper,
  .why-grid.swiper,
  .reviews-grid.swiper {
    touch-action: pan-y !important;
    pointer-events: auto !important;
  }
  /* Carte review et card why doivent recevoir les touch events */
  .review-card,
  .why-card {
    pointer-events: auto !important;
    touch-action: pan-y !important;
  }
}

/* ---------- §C · BACKUP : empêcher var(--hero-bg) de marcher ---------- */
/* Si jamais un autre PASS revisite --hero-bg, on le neutralise */
.hero[style*="--hero-photo"] {
  /* L'inline style HTML est prioritaire — pas de CSS qui force background-image */
}


/* =====================================================================
   PASS 39 — Fixes audit : fixed-quote container full-width pour alignement
   gauche réel (et pas seulement gauche-du-container-centré)
   ===================================================================== */
section.fixed-quote > .container {
  max-width: none !important;
  margin-inline: 0 !important;
  padding-left: clamp(20px, 5vw, 80px) !important;
  padding-right: clamp(20px, 5vw, 80px) !important;
  width: 100% !important;
}


/* =====================================================================
   PASS 40 — Fixed-quote desktop LEFT vraiment / mobile CENTER
   + Mobile nav glassmorphism (matche la navbar)
   + Diplomas dernier slide bug
   ===================================================================== */

/* ---------- §A · FIXED-QUOTE alignement DESKTOP=LEFT / MOBILE=CENTER ---------- */
@media (min-width: 769px) {
  section.fixed-quote > .container {
    max-width: none !important;
    margin-inline: 0 !important;
    padding-left: clamp(20px, 5vw, 80px) !important;
    padding-right: clamp(20px, 5vw, 80px) !important;
    width: 100% !important;
    text-align: left !important;
  }
  section.fixed-quote blockquote,
  section.fixed-quote blockquote * {
    text-align: left !important;
  }
  section.fixed-quote blockquote {
    margin-left: 0 !important;
    margin-right: auto !important;
    max-width: 760px !important;
  }
}
@media (max-width: 768px) {
  section.fixed-quote > .container {
    max-width: none !important;
    margin-inline: 0 !important;
    padding-left: 20px !important;
    padding-right: 20px !important;
    width: 100% !important;
    text-align: center !important;
  }
  section.fixed-quote blockquote,
  section.fixed-quote blockquote * {
    text-align: center !important;
  }
  section.fixed-quote blockquote {
    margin-left: auto !important;
    margin-right: auto !important;
    max-width: 100% !important;
  }
  section.fixed-quote blockquote p {
    max-width: 28ch !important;
    margin-left: auto !important;
    margin-right: auto !important;
  }
}

/* ---------- §B · MOBILE NAV en glassmorphism ---------- */
.mobile-nav {
  background: rgba(252,245,232, 0.78) !important;
  -webkit-backdrop-filter: blur(26px) saturate(1.75) !important;
          backdrop-filter: blur(26px) saturate(1.75) !important;
  border-left: 1px solid rgba(255,255,255, 0.55) !important;
  box-shadow:
    -22px 0 48px -24px rgba(46,41,34,0.38),
    inset 1px 0 0 rgba(255,255,255,0.55) !important;
}
@media (max-width: 640px) {
  .mobile-nav {
    border-left: 0 !important;
    box-shadow: 0 -8px 32px rgba(46,41,34, 0.18) !important;
  }
}

/* ---------- §C · DIPLOMAS dernier slide — slidesPerView 1.1 avec peek ---------- */
/* Note : la config JS PASS 40 utilise centeredSlides + slidesPerView 1.1 pour
   que la dernière slide reste centrée avec un peek de la précédente */


/* =====================================================================
   PASS 41 — Fixed-quote LEFT vraiment forcé (spécificité max) +
   Hero mobile card moins bas + Reviews cards plus de padding
   ===================================================================== */

/* ---------- §A · FIXED-QUOTE — spécificité maximum pour gagner cascade ---------- */
@media (min-width: 769px) {
  /* Body + main pour augmenter la spécificité (lutte contre les overrides PASS antérieurs) */
  body main section.fixed-quote,
  body section.fixed-quote {
    /* La section reste block (pas flex) pour que justify-content ne perturbe rien */
    display: block !important;
    padding: 0 !important;
  }
  body main section.fixed-quote > .container,
  body section.fixed-quote > .container {
    max-width: 100% !important;
    width: 100% !important;
    margin: 0 !important;
    margin-inline: 0 !important;
    padding: 80px clamp(20px, 5vw, 80px) !important;
    text-align: left !important;
    display: block !important;
    box-sizing: border-box;
  }
  body main section.fixed-quote > .container > blockquote,
  body section.fixed-quote > .container > blockquote {
    text-align: left !important;
    margin: 0 !important;
    margin-left: 0 !important;
    margin-right: auto !important;
    max-width: 760px !important;
    display: block !important;
  }
  body main section.fixed-quote > .container > blockquote > *,
  body section.fixed-quote > .container > blockquote > * {
    text-align: left !important;
  }
  /* Span .k qui était inline → block pour bien afficher en haut */
  body main section.fixed-quote .k {
    display: block !important;
    text-align: left !important;
  }
}

/* ---------- §B · HERO MOBILE : carte moins bas ---------- */
@media (max-width: 768px) {
  .hero.hero--mosaic {
    padding: 70px 16px 30px !important;  /* moins de padding top */
    gap: 16px !important;                  /* gap réduit entre photo et carte */
  }
  .hero__mobile-photo {
    aspect-ratio: 16/9 !important;          /* plus court (était 16/11) */
    max-width: 420px !important;
  }
  .hero.hero--mosaic .hero__mosaic-card {
    padding: 24px 22px !important;          /* padding interne réduit */
  }
}

/* ---------- §C · REVIEWS CARD plus de padding ---------- */
.review-card {
  padding: 38px 40px !important;
}
.review-card__head { margin-bottom: 18px !important; padding: 0 !important; }
.review-card__text {
  margin: 0 0 16px !important;
  padding: 0 !important;
}
.review-card__src {
  margin-top: auto !important;
  padding-top: 16px !important;
  border-top: 1px solid rgba(44, 185, 198, 0.06);
}
@media (max-width: 768px) {
  .review-card {
    padding: 30px 28px !important;
  }
}


/* =====================================================================
   PASS 42 — Diplomas no empty + Citation mobile visible + Reviews padding
   ===================================================================== */

/* ---------- §A · DIPLOMAS mobile : slide pleine largeur + loop ---------- */
@media (max-width: 768px) {
  .diplomas-strip.swiper {
    overflow: hidden !important;
    padding: 0 16px 36px !important;
  }
  .diplomas-strip__wrapper {
    display: flex !important;
    gap: 0 !important;
  }
  .diplomas-strip__item.swiper-slide,
  .diplomas-strip__item.swiper-slide-duplicate {
    width: 100% !important;
    max-width: 100% !important;
    flex: 0 0 100% !important;
    box-sizing: border-box;
    height: auto;
  }
}

/* ---------- §B · CITATION MOBILE — visible et centrée ---------- */
@media (max-width: 768px) {
  body main section.fixed-quote,
  body section.fixed-quote {
    display: block !important;
    min-height: 60vh !important;
    padding: 80px 0 60px !important;
  }
  body main section.fixed-quote > .container,
  body section.fixed-quote > .container {
    max-width: 100% !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 20px !important;
    text-align: center !important;
    display: block !important;
  }
  body main section.fixed-quote > .container > blockquote,
  body section.fixed-quote > .container > blockquote {
    text-align: center !important;
    margin: 0 auto !important;
    max-width: 90% !important;
    display: block !important;
  }
  body main section.fixed-quote .k,
  body section.fixed-quote .k {
    display: block !important;
    text-align: center !important;
    margin-bottom: 16px !important;
  }
  body main section.fixed-quote blockquote p,
  body section.fixed-quote blockquote p {
    text-align: center !important;
    margin: 0 auto !important;
    max-width: 26ch !important;
    font-size: 1.3rem !important;
    line-height: 1.4 !important;
    color: #fff !important;
  }
  body main section.fixed-quote cite,
  body section.fixed-quote cite {
    display: block !important;
    text-align: center !important;
    margin: 18px auto 0 !important;
  }
}

/* ---------- §C · REVIEWS padding interne — selectors max spécificité ---------- */
.reviews-grid .review-card,
.reviews-swiper .review-card,
section .review-card.review-card,
body main .review-card {
  padding: 36px 38px !important;
  box-sizing: border-box !important;
}
.review-card .review-card__head {
  padding: 0 !important;
  margin: 0 0 20px !important;
}
.review-card .review-card__text {
  padding: 0 !important;
  margin: 0 0 14px !important;
}
.review-card .review-card__src {
  padding: 14px 0 0 !important;
  margin: 0 !important;
  border-top: 1px solid rgba(44, 185, 198, 0.06);
}
@media (max-width: 768px) {
  .reviews-grid .review-card,
  .reviews-swiper .review-card,
  section .review-card.review-card,
  body main .review-card {
    padding: 28px 26px !important;
  }
}


/* =====================================================================
   PASS 43 — Carousels soin (diplomas + why) = même CSS que reviews qui
   fonctionne + Hero card mobile remontée encore
   ===================================================================== */

/* ---------- §A · CAROUSELS soin mobile = config reviews qui marche ---------- */
@media (max-width: 768px) {
  /* Réinitialise les rules conflictuelles des PASS antérieurs sur diplomas + why */
  .diplomas-strip.swiper,
  .why-grid.swiper {
    display: block !important;
    overflow: hidden !important;
    padding: 12px 0 50px !important;
    margin: 32px 0 0 !important;
    width: 100% !important;
    position: relative !important;
    touch-action: pan-y !important;
  }
  /* Wrapper = flex row, pas de grid, pas de gap (Swiper gère espacement via spaceBetween) */
  .diplomas-strip__wrapper,
  .diplomas-strip.swiper .swiper-wrapper,
  .why-grid.swiper .swiper-wrapper,
  .why-grid.swiper .why-grid__wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    grid-template-columns: unset !important;
    grid-template-rows: unset !important;
    grid: unset !important;
    gap: 0 !important;
    width: auto !important;
    transition-property: transform !important;
    touch-action: pan-y !important;
  }
  /* Slides : flex-shrink: 0, taille naturelle calculée par Swiper */
  .diplomas-strip__item.swiper-slide,
  .why-grid.swiper .why-card.swiper-slide {
    flex-shrink: 0 !important;
    height: auto !important;
    box-sizing: border-box !important;
    margin: 0 !important;
    padding: 0 !important;
    touch-action: pan-y !important;
  }
  /* Card visuel à l'intérieur de la slide */
  .diplomas-strip__item.swiper-slide {
    padding: 8px !important;
  }
  .diplomas-strip__item.swiper-slide .diplomas-strip__thumb,
  .diplomas-strip__item.swiper-slide .diplomas-strip__caption {
    /* contenu naturel */
  }
  .why-grid.swiper .why-card.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 22px !important;
    padding: 26px 24px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
  }
  /* Pagination dots en bas */
  .diplomas-swiper__pagination,
  .why-swiper__pagination {
    position: absolute !important;
    bottom: 8px !important;
    left: 0 !important; right: 0 !important;
    text-align: center !important;
    z-index: 5;
    display: block !important;
  }
}

/* ---------- §B · HERO mobile carte REMONTÉE — sans toucher desktop ---------- */
@media (max-width: 768px) {
  .hero.hero--mosaic {
    padding: 60px 16px 24px !important;  /* padding-top réduit à 60px */
    gap: 12px !important;                  /* gap entre photo et carte minimal */
    min-height: auto !important;
  }
  .hero__mobile-photo {
    aspect-ratio: 16/8 !important;          /* photo très courte (banner) */
    max-width: 360px !important;            /* photo plus petite */
    width: 92% !important;
  }
  .hero.hero--mosaic .hero__mosaic-card {
    padding: 22px 20px !important;          /* card padding réduit */
    max-width: 100% !important;
    width: 100% !important;
  }
  .hero.hero--mosaic .hero__title {
    font-size: 1.6rem !important;           /* titre plus petit pour réduire hauteur */
    line-height: 1.15 !important;
    margin-bottom: 10px !important;
  }
  .hero.hero--mosaic .hero__subtitle {
    font-size: 0.92rem !important;
    line-height: 1.5 !important;
    margin-bottom: 16px !important;
  }
  .hero.hero--mosaic .hero__actions {
    margin-bottom: 14px !important;
    flex-wrap: wrap;
    gap: 8px;
  }
  .hero.hero--mosaic .hero__insights {
    margin-top: 14px !important;
    padding-top: 14px !important;
    gap: 6px !important;
  }
}


/* =====================================================================
   PASS 44 — Hero mobile compact (carte au TOP) + Slides 100% width
   + Services-swiper accueil + Titre "Un cadre solide" centré
   ===================================================================== */

/* ---------- §A · HERO mobile : carte en HAUT (override les 4 min-height clamps) ---------- */
@media (max-width: 768px) {
  body main section.hero.hero--mosaic,
  body section.hero.hero--mosaic {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: flex-start !important;
    min-height: 0 !important;
    height: auto !important;
    padding: 70px 16px 24px !important;
    gap: 12px !important;
    place-items: unset !important;
    grid-template-columns: unset !important;
    grid-template-rows: unset !important;
  }
  body main section.hero.hero--mosaic > .hero__mobile-photo {
    order: 1 !important;
    align-self: center !important;
    margin: 0 auto !important;
  }
  body main section.hero.hero--mosaic > .hero__mosaic-card {
    order: 2 !important;
    align-self: stretch !important;
    margin: 0 !important;
    transform: none !important;
    grid-column: unset !important;
    grid-row: unset !important;
    justify-self: unset !important;
  }
}

/* ---------- §B · CAROUSELS mobile : slides 100% width (annule les widths antérieurs) ---------- */
@media (max-width: 768px) {
  body main .reviews-swiper .swiper-slide,
  body main .diplomas-strip.swiper .swiper-slide,
  body main .why-grid.swiper .swiper-slide,
  body main .why-grid.swiper .why-card.swiper-slide,
  body main .diplomas-strip__item.swiper-slide,
  body main .services-swiper .swiper-slide {
    width: 100% !important;
    max-width: 100% !important;
    flex: 0 0 100% !important;
    margin: 0 !important;
    box-sizing: border-box;
  }
  body main .swiper-wrapper,
  body main .diplomas-strip__wrapper,
  body main .why-grid__wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    grid: unset !important;
    grid-template-columns: unset !important;
    grid-template-rows: unset !important;
    gap: 0 !important;
    width: auto !important;
    align-items: stretch !important;
  }
}

/* ---------- §C · SERVICES-SWIPER (accueil mobile) ---------- */
.services-swiper {
  position: relative;
}
@media (max-width: 768px) {
  body main .services-swiper.swiper {
    display: block !important;
    overflow: hidden !important;
    padding: 12px 0 50px !important;
    width: 100% !important;
    touch-action: pan-y !important;
  }
  body main .services-swiper .swiper-wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    grid-template-columns: unset !important;
    gap: 0 !important;
  }
  body main .services-swiper .service-card.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 22px !important;
    padding: 26px 24px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
  }
  body main .services-swiper__pagination {
    position: absolute !important;
    bottom: 8px !important;
    left: 0 !important; right: 0 !important;
    text-align: center !important;
    z-index: 5;
    display: block !important;
  }
  body main .services-swiper__pagination .swiper-pagination-bullet {
    background: rgba(46,41,34, 0.22);
    opacity: 1; width: 8px; height: 8px; margin: 0 5px;
  }
  body main .services-swiper__pagination .swiper-pagination-bullet-active {
    background: var(--color-accent);
    transform: scale(1.25);
  }
}
@media (min-width: 769px) {
  /* Sur desktop, .services-swiper reste un grid normal (Swiper destroyed) */
  .services-swiper.swiper .swiper-wrapper {
    display: grid !important;
    grid-template-columns: repeat(4, 1fr);
    gap: var(--grid-gap, 24px);
    transform: none !important;
  }
  .services-swiper.swiper .service-card.swiper-slide {
    width: 100% !important;
    flex: initial !important;
  }
}


/* =====================================================================
   PASS 45 — Services-swiper desktop : force grid 4 cols (override Swiper CSS)
   ===================================================================== */

@media (min-width: 769px) {
  /* Container : remettre en grid sur desktop (Swiper non initialisé) */
  body main .services-swiper.swiper,
  body main .services-grid.services-swiper {
    display: block !important;
    overflow: visible !important;
    padding: 0 !important;
    width: 100% !important;
    touch-action: auto !important;
  }
  /* Wrapper Swiper : devient un GRID 4 cols, override le display: flex de Swiper */
  body main .services-swiper.swiper > .swiper-wrapper,
  body main .services-grid.services-swiper .swiper-wrapper {
    display: grid !important;
    grid-template-columns: repeat(4, 1fr) !important;
    gap: var(--grid-gap, 24px) !important;
    width: 100% !important;
    height: auto !important;
    transform: none !important;
    transition: none !important;
    flex-wrap: unset !important;
    flex-direction: unset !important;
  }
  /* Slides : width auto (taille de la cell grid), pas flex-shrink */
  body main .services-swiper .service-card.swiper-slide,
  body main .services-grid.services-swiper .swiper-slide {
    width: auto !important;
    max-width: none !important;
    flex: initial !important;
    flex-shrink: initial !important;
    margin: 0 !important;
    transform: none !important;
  }
  /* Pagination cachée desktop */
  body main .services-swiper__pagination,
  body main .services-swiper .swiper-pagination {
    display: none !important;
  }
}


/* =====================================================================
   PASS 46 — Carrousels mobile : laisse Swiper calculer naturellement
   (annule les overrides circulaires de PASS 44 §B)
   ===================================================================== */

@media (max-width: 768px) {
  /* On RETIRE les forced widths sur swiper-wrapper/slide — Swiper bundle gère.
     On laisse juste les container styles. */
  body main .reviews-swiper .swiper-wrapper,
  body main .diplomas-strip.swiper .swiper-wrapper,
  body main .why-grid.swiper .swiper-wrapper,
  body main .services-swiper .swiper-wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    grid: unset !important;
    grid-template-columns: unset !important;
    grid-template-rows: unset !important;
    gap: 0 !important;
    /* PAS de width override → laisse Swiper calculer */
    width: auto;
    height: auto;
    align-items: stretch;
  }
  /* Swiper-slide : pas de width forcé, laisse Swiper bundle calculer */
  body main .reviews-swiper .swiper-slide,
  body main .diplomas-strip.swiper .swiper-slide,
  body main .why-grid.swiper .swiper-slide,
  body main .services-swiper .swiper-slide {
    height: auto;
    margin: 0;
    box-sizing: border-box;
    /* PAS de width: 100% !important → casse les calculs Swiper */
  }
  /* Container swiper : overflow hidden */
  body main .reviews-swiper,
  body main .diplomas-strip.swiper,
  body main .why-grid.swiper,
  body main .services-swiper.swiper {
    overflow: hidden !important;
    width: 100% !important;
    touch-action: pan-y !important;
  }
  /* Le contenu intérieur de chaque card peut s'étirer librement */
  body main .why-grid.swiper .why-card,
  body main .services-swiper .service-card {
    width: 100%;
    box-sizing: border-box;
    margin: 0;
  }
}


/* =====================================================================
   PASS 47 — Carrousels mobile : 1 slide = 1 viewport (style Instagram)
   ===================================================================== */

@media (max-width: 768px) {
  /* === SWIPER CONTAINER : largeur viewport, overflow hidden strict === */
  body main .reviews-swiper.swiper,
  body main .reviews-grid.swiper,
  body main .diplomas-strip.swiper,
  body main .why-grid.swiper,
  body main .services-swiper.swiper {
    width: 100% !important;
    max-width: 100% !important;
    overflow: hidden !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    box-sizing: border-box;
    touch-action: pan-y !important;
  }
  /* Le PARENT .container peut avoir du padding, mais le swiper full width interne */
  body main section .container:has(> .swiper),
  body main section .container:has(> .swiper) {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* === SWIPER WRAPPER : flex row strict === */
  body main .swiper > .swiper-wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    grid: unset !important;
    grid-template-columns: unset !important;
    gap: 0 !important;
  }

  /* === SLIDES : EXACTEMENT 100% du container, pas de spillover === */
  body main .swiper > .swiper-wrapper > .swiper-slide {
    flex: 0 0 100% !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 100% !important;
    box-sizing: border-box;
    padding: 0 16px !important;  /* padding interne pour aérer le contenu de la card */
    height: auto !important;
    margin: 0 !important;
  }

  /* === Cards À L'INTÉRIEUR des slides === */
  body main .swiper-slide > .review-card,
  body main .swiper-slide > .service-card,
  body main .swiper-slide > .why-card,
  body main .swiper-slide.diplomas-strip__item,
  body main .swiper-slide > .diplomas-strip__item {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
    margin: 0 !important;
  }

  /* === Texte des reviews : force wrap dans la card === */
  body main .review-card,
  body main .review-card__text,
  body main .review-card__head,
  body main .review-card__src {
    width: 100% !important;
    max-width: 100% !important;
    overflow-wrap: break-word !important;
    word-wrap: break-word !important;
    box-sizing: border-box !important;
  }
  body main .review-card {
    padding: 24px 22px !important;  /* padding interne raisonnable mobile */
  }

  /* === PAGINATION dots : visible sous chaque carousel === */
  body main .swiper-pagination,
  body main .reviews-swiper .swiper-pagination,
  body main .diplomas-swiper__pagination,
  body main .why-swiper__pagination,
  body main .services-swiper__pagination {
    position: relative !important;
    bottom: auto !important;
    margin-top: 18px !important;
    text-align: center !important;
    z-index: 5;
    display: block !important;
  }
}


/* =====================================================================
   PASS 48 — Fixed-quote hauteur réduite desktop + Carousels mobile slide
   exact viewport width
   ===================================================================== */

/* ---------- §A · FIXED-QUOTE desktop : hauteur réduite ---------- */
@media (min-width: 769px) {
  body main section.fixed-quote,
  body section.fixed-quote {
    min-height: 50vh !important;
    padding: 60px 0 !important;
  }
}
@media (max-width: 768px) {
  body main section.fixed-quote,
  body section.fixed-quote {
    min-height: 40vh !important;
    padding: 50px 0 40px !important;
  }
}

/* ---------- §B · CAROUSELS mobile : slide width = viewport exact ---------- */
@media (max-width: 768px) {
  /* La section parente : padding 0 pour que le swiper aille bord à bord */
  body main section:has(.reviews-swiper) > .container,
  body main section:has(.diplomas-strip.swiper) > .container,
  body main section:has(.why-grid.swiper) > .container,
  body main section:has(.services-swiper) > .container {
    padding-left: 0 !important;
    padding-right: 0 !important;
    max-width: 100vw !important;
    overflow: hidden !important;
  }

  /* Container swiper PURE : 100vw, overflow hidden strict */
  body main .reviews-swiper.swiper,
  body main .diplomas-strip.swiper,
  body main .why-grid.swiper,
  body main .services-swiper.swiper {
    width: 100vw !important;
    max-width: 100vw !important;
    overflow: hidden !important;
    padding: 0 !important;
    margin: 0 !important;
    box-sizing: border-box;
    touch-action: pan-y !important;
    position: relative !important;
  }

  /* Wrapper flex */
  body main .swiper > .swiper-wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    gap: 0 !important;
    width: auto !important;
    transition-property: transform !important;
  }

  /* Slide = EXACTEMENT 100vw, sans padding (le padding va sur la card) */
  body main .swiper > .swiper-wrapper > .swiper-slide {
    flex: 0 0 100vw !important;
    width: 100vw !important;
    max-width: 100vw !important;
    min-width: 100vw !important;
    box-sizing: border-box !important;
    padding: 0 16px !important;   /* le padding crée la marge visuelle autour de la card */
    margin: 0 !important;
    height: auto !important;
  }

  /* Cards : 100% de la slide (qui est 100vw - 32px de padding) */
  body main .swiper-slide > .review-card,
  body main .swiper-slide > .service-card,
  body main .swiper-slide > .why-card,
  body main .swiper-slide.diplomas-strip__item,
  body main .swiper-slide > .diplomas-strip__item {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
    margin: 0 !important;
    overflow: hidden;
  }

  /* Reviews text wrap forced */
  body main .review-card__text {
    overflow-wrap: anywhere !important;
    word-break: break-word !important;
    max-width: 100% !important;
    width: 100% !important;
    white-space: normal !important;
  }
}


/* =====================================================================
   PASS 49 — Carousels bord-à-bord via NEGATIVE MARGIN (sans casser les boutons)
   ===================================================================== */

@media (max-width: 768px) {

  /* §2 · ANNULATION PASS 48 §B — restaure le padding du .container
        pour que les boutons CTA ne touchent plus les bords */
  body main section > .container {
    padding-left: 20px !important;
    padding-right: 20px !important;
    max-width: var(--container) !important;
    overflow: visible !important;
  }

  /* §3 · BOUTONS CTA mobile : padding garanti */
  body main section .actions,
  body main section .section-cta,
  body main section .actions--center {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    box-sizing: border-box;
  }
  body main section .actions .btn,
  body main section .section-cta .btn,
  body main section .actions--center .btn {
    max-width: 100%;
    width: auto !important;
  }

  /* §1 · NEGATIVE MARGIN TRICK : le swiper escape son container
        vers les bords du viewport, sans toucher au padding du .container */
  body main .reviews-swiper.swiper,
  body main .reviews-grid.swiper,
  body main .diplomas-strip.swiper,
  body main .why-grid.swiper,
  body main .services-swiper.swiper {
    margin-left: -20px !important;
    margin-right: -20px !important;
    width: calc(100% + 40px) !important;
    max-width: calc(100% + 40px) !important;
    overflow: hidden !important;
    padding: 0 !important;
    box-sizing: content-box;
    touch-action: pan-y !important;
  }

  /* Wrapper : flex row strict, Swiper gère le transform */
  body main .swiper > .swiper-wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    gap: 0 !important;
    align-items: stretch !important;
    width: auto !important;
    transition-property: transform !important;
    grid: unset !important;
    grid-template-columns: unset !important;
  }

  /* Slide : 100% du swiper container (qui fait 100vw grâce au calc) */
  body main .swiper > .swiper-wrapper > .swiper-slide {
    flex: 0 0 100% !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 100% !important;
    box-sizing: border-box !important;
    padding: 0 20px !important;  /* marge visuelle de la card dans la slide */
    margin: 0 !important;
    height: auto !important;
  }

  /* §4 · REVIEWS TEXT : force word-wrap */
  body main .review-card,
  body main .review-card *,
  body main .review-card__text {
    overflow-wrap: anywhere !important;
    word-break: break-word !important;
    hyphens: auto !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
  }
  body main .review-card {
    padding: 24px 22px !important;
  }

  /* Pagination dots visibles sous chaque carousel */
  body main .swiper-pagination,
  body main .reviews-swiper .swiper-pagination,
  body main .diplomas-swiper__pagination,
  body main .why-swiper__pagination,
  body main .services-swiper__pagination {
    position: relative !important;
    bottom: auto !important;
    margin-top: 18px !important;
    text-align: center !important;
    display: block !important;
    z-index: 5;
  }
}


/* =====================================================================
   PASS 50 — Polish visuel des cards swiper mobile (bg, border, shadow,
   padding propre)
   ===================================================================== */

@media (max-width: 768px) {
  /* ---- SERVICES cards : carte propre blanche + ombre ---- */
  body main .services-swiper .service-card.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 20px !important;
    padding: 26px 24px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
    /* Le padding 0 20px de la slide PASS 49 contient déjà la marge externe */
    margin: 0 !important;
    height: auto !important;
    overflow: hidden;
  }
  body main .services-swiper .service-card__icon {
    width: 56px !important;
    height: 56px !important;
    border-radius: 16px !important;
    background: rgba(252,245,232, 0.85) !important;
    border: 1px solid rgba(232, 181, 74, 0.25) !important;
    display: grid !important;
    place-items: center !important;
    font-size: 26px !important;
    color: var(--color-primary-strong) !important;
    margin-bottom: 18px !important;
  }
  body main .services-swiper .service-card__title {
    font-family: var(--font-heading) !important;
    font-size: 1.15rem !important;
    font-weight: 600 !important;
    margin: 0 0 8px !important;
    color: var(--color-text) !important;
  }
  body main .services-swiper .service-card__alt {
    font-style: italic !important;
    color: var(--color-text-muted) !important;
    font-weight: 400 !important;
    display: inline !important;
  }
  body main .services-swiper .service-card__text {
    font-size: 0.95rem !important;
    line-height: 1.55 !important;
    color: var(--color-text-muted) !important;
    margin: 0 0 18px !important;
  }
  body main .services-swiper .service-card__link {
    font-weight: 600 !important;
    color: var(--color-primary-strong) !important;
    display: inline-flex !important;
    align-items: center;
    gap: 6px;
  }

  /* ---- WHY cards : carte propre + style éditorial ---- */
  body main .why-grid.swiper .why-card.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 20px !important;
    padding: 28px 26px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
    margin: 0 !important;
    height: auto !important;
  }
  body main .why-grid.swiper .why-card__num {
    font-family: var(--font-heading) !important;
    font-size: 56px !important;
    line-height: 1 !important;
    font-weight: 500 !important;
    color: var(--color-accent) !important;
    margin-bottom: 10px !important;
    text-align: left !important;
  }
  body main .why-grid.swiper .why-card__title {
    font-family: var(--font-heading) !important;
    font-size: 1.15rem !important;
    font-weight: 600 !important;
    margin: 0 0 10px !important;
    color: var(--color-text) !important;
    text-align: left !important;
  }
  body main .why-grid.swiper .why-card__text {
    font-size: 0.95rem !important;
    line-height: 1.55 !important;
    color: var(--color-text-muted) !important;
    margin: 0 !important;
    text-align: left !important;
  }

  /* ---- DIPLOMAS cards : container blanc autour image + caption ---- */
  body main .diplomas-strip.swiper .diplomas-strip__item.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 20px !important;
    padding: 16px 16px 20px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
    margin: 0 !important;
    height: auto !important;
    cursor: pointer;
  }
  body main .diplomas-strip__item .diplomas-strip__thumb {
    display: block;
    width: 100%;
    margin-bottom: 12px;
  }
  body main .diplomas-strip__item .diplomas-strip__thumb img {
    width: 100%;
    height: auto;
    display: block;
    border-radius: 12px;
  }
  body main .diplomas-strip__item .diplomas-strip__caption {
    display: block;
    text-align: center;
    font-family: var(--font-heading);
    font-size: 1.05rem;
    color: var(--color-text);
    line-height: 1.4;
  }
  body main .diplomas-strip__item .diplomas-strip__year {
    display: block;
    margin-top: 4px;
    font-size: 0.92rem;
    color: var(--color-text-muted);
    font-weight: 400;
  }

  /* ---- REVIEW cards : déjà polish PASS 41-49, juste assurer le visuel ---- */
  body main .reviews-swiper .review-card.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 18px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
    margin: 0 !important;
  }
}


/* =====================================================================
   PASS 51 — Fixed-quote hauteur réduite + Carousels mobile : swiper
   DANS le container (pas de negative margin extension)
   ===================================================================== */

/* ---------- §A · FIXED-QUOTE hauteur réduite ---------- */
body main section.fixed-quote,
body section.fixed-quote {
  min-height: auto !important;
  padding: 80px 0 60px !important;
}
body main section.fixed-quote .container,
body section.fixed-quote .container {
  min-height: 320px;  /* hauteur raisonnable pour le texte sans dominer l'écran */
}
@media (min-width: 769px) {
  body main section.fixed-quote,
  body section.fixed-quote {
    min-height: 380px !important;
    padding: 70px 0 !important;
  }
}
@media (max-width: 768px) {
  body main section.fixed-quote,
  body section.fixed-quote {
    min-height: 320px !important;
    padding: 60px 0 50px !important;
  }
}

/* ---------- §B · CAROUSELS mobile : swiper RESTE dans le container ---------- */
/* On annule PASS 49 §1 negative margin qui faisait déborder le swiper */
@media (max-width: 768px) {
  body main .reviews-swiper.swiper,
  body main .reviews-grid.swiper,
  body main .diplomas-strip.swiper,
  body main .why-grid.swiper,
  body main .services-swiper.swiper {
    margin-left: 0 !important;
    margin-right: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    overflow: hidden !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    touch-action: pan-y !important;
    position: relative !important;
  }

  /* Slide = 100% du swiper (= 100% du .container content area) */
  body main .swiper > .swiper-wrapper > .swiper-slide {
    flex: 0 0 100% !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 100% !important;
    padding: 0 !important;  /* pas de padding sur la slide — direct sur la card */
    margin: 0 !important;
    box-sizing: border-box !important;
    height: auto !important;
  }

  /* Card prend toute la slide, padding INTERNE pour l'air entre bord et texte */
  body main .swiper-slide > .review-card,
  body main .swiper-slide > .service-card,
  body main .swiper-slide.diplomas-strip__item,
  body main .swiper-slide > .diplomas-strip__item,
  body main .why-grid.swiper .swiper-slide.why-card {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    box-sizing: border-box !important;
  }
}


/* =====================================================================
   PASS 52 — Carousels mobile : padding visible côté écran + why-grid CSS
   ===================================================================== */

/* ---------- §A · TOUS les carousels mobile : marge interne propre ---------- */
@media (max-width: 768px) {
  /* Container parent : padding latéral garanti */
  body main section > .container {
    padding-left: 20px !important;
    padding-right: 20px !important;
  }

  /* Swipers : restent dans le container, pas de débordement */
  body main .reviews-swiper.swiper,
  body main .reviews-grid.swiper,
  body main .diplomas-strip.swiper,
  body main .why-grid.swiper,
  body main .services-swiper.swiper {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
    box-sizing: border-box;
  }

  /* Wrapper Swiper flex */
  body main .swiper > .swiper-wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    gap: 0 !important;
    align-items: stretch !important;
  }

  /* Slides : laisse Swiper calculer la width via slidesPerView 1 */
  body main .swiper > .swiper-wrapper > .swiper-slide {
    flex-shrink: 0 !important;
    height: auto !important;
    box-sizing: border-box !important;
    margin: 0;
    /* PAS de width force — Swiper bundle calcule */
  }

  /* === Cards INTERNES avec leur propre styling visible === */
  body main .why-grid.swiper .why-card.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 20px !important;
    padding: 28px 26px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
  }
  body main .services-swiper .service-card.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 20px !important;
    padding: 28px 26px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
  }
  body main .diplomas-strip.swiper .diplomas-strip__item.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 20px !important;
    padding: 18px 18px 22px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
  }
  body main .reviews-swiper .review-card.swiper-slide {
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 18px !important;
    padding: 26px 24px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
  }
}

/* ---------- §B · DESKTOP why-grid : grid 3 cols (annule Swiper inline) ---------- */
@media (min-width: 769px) {
  body main .why-grid.swiper {
    display: grid !important;
    grid-template-columns: repeat(3, 1fr) !important;
    gap: 32px !important;
    overflow: visible !important;
    padding: 0 !important;
  }
  body main .why-grid.swiper > .swiper-wrapper {
    display: contents !important;  /* le wrapper s'efface, les cards sont enfants directs du grid */
  }
  body main .why-grid.swiper .why-card.swiper-slide {
    width: 100% !important;
    transform: none !important;
    margin: 0 !important;
    background: transparent;
    border: 0;
    box-shadow: none;
    padding: 24px 0 0;
    border-top: 2px solid var(--color-border);
  }
}


/* =====================================================================
   PASS 53 — Force padding visible carrousels + force touch
   ===================================================================== */

@media (max-width: 768px) {

  /* 1. Container parent : padding 20px GARANTI, overflow visible */
  html body main section > .container,
  html body section > .container {
    padding-left: 20px !important;
    padding-right: 20px !important;
    box-sizing: border-box !important;
    overflow: visible !important;
  }

  /* 2. Swiper container : 100% du container (donc 100vw - 40px), overflow hidden */
  html body main .swiper.reviews-swiper,
  html body main .swiper.reviews-grid,
  html body main .swiper.diplomas-strip,
  html body main .swiper.why-grid,
  html body main .swiper.services-swiper {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
    box-sizing: border-box !important;
    /* Touch events */
    touch-action: pan-y !important;
    pointer-events: auto !important;
    user-select: none !important;
    -webkit-user-select: none !important;
    -webkit-touch-callout: none !important;
  }

  /* 3. Wrapper et slides : touch propagés */
  html body main .swiper > .swiper-wrapper {
    touch-action: pan-y !important;
    pointer-events: auto !important;
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
  }

  html body main .swiper > .swiper-wrapper > .swiper-slide {
    touch-action: pan-y !important;
    pointer-events: auto !important;
    flex-shrink: 0 !important;
    box-sizing: border-box !important;
    height: auto !important;
    /* Pas de width forcé → Swiper bundle calcule selon slidesPerView */
  }

  /* 4. ANNULE tout pointer-events:none / touch-action:none sur les couches au-dessus */
  html body main .page-organic-shapes,
  html body main .page-organic-shape {
    pointer-events: none !important;
    touch-action: none !important;
    z-index: -1 !important;  /* envoyé tout en arrière pour ne plus interférer */
  }

  /* 5. Pas de transform qui désaligne sur les slides actives */
  html body main .swiper-slide-active {
    transform: none !important;
  }
}


/* =====================================================================
   PASS 54 — Nettoyage radical MOBILE UNIQUEMENT
   - Supprime le layer organic-shapes qui bloque les touches
   - Force le padding container 20px (override toute la cascade)
   - Carrousels Instagram-style propre
   ===================================================================== */

@media (max-width: 768px) {

  /* === 1. SUPPRIME complètement le layer organic-shapes sur mobile === */
  html body main .page-organic-shapes,
  html body main .page-organic-shape,
  html body .page-organic-shapes {
    display: none !important;
    visibility: hidden !important;
    pointer-events: none !important;
    z-index: -999 !important;
    width: 0 !important;
    height: 0 !important;
    overflow: hidden !important;
  }

  /* === 2. CONTAINER : padding 20px IMPOSSIBLE à override === */
  html body main section.section > div.container,
  html body main section > div.container,
  html body section > div.container,
  body main section > .container {
    padding-left: 20px !important;
    padding-right: 20px !important;
    padding-inline: 20px !important;
    max-width: 100% !important;
    width: 100% !important;
    margin-left: auto !important;
    margin-right: auto !important;
    box-sizing: border-box !important;
    overflow: visible !important;
  }

  /* === 3. SWIPERS bord-à-bord container, overflow hidden === */
  html body main div.swiper,
  html body main .swiper.reviews-swiper,
  html body main .swiper.reviews-grid,
  html body main .swiper.diplomas-strip,
  html body main .swiper.why-grid,
  html body main .swiper.services-swiper {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
    box-sizing: border-box !important;
    position: relative !important;
    touch-action: pan-y !important;
    -webkit-user-select: none;
    user-select: none;
  }

  /* === 4. WRAPPER flex strict === */
  html body main .swiper > .swiper-wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    gap: 0 !important;
    touch-action: pan-y !important;
  }

  /* === 5. SLIDE : pas de width forcé (laisse Swiper) + touch === */
  html body main .swiper > .swiper-wrapper > .swiper-slide {
    flex-shrink: 0 !important;
    height: auto !important;
    box-sizing: border-box !important;
    touch-action: pan-y !important;
    transform: none;  /* annule GSAP transform potentiel */
    opacity: 1 !important;  /* annule GSAP opacity 0 */
    filter: none !important;  /* annule GSAP blur */
  }

  /* === 6. PAGINATION dots sous chaque carousel === */
  html body main .swiper-pagination,
  html body main .reviews-swiper .swiper-pagination,
  html body main .diplomas-swiper__pagination,
  html body main .why-swiper__pagination,
  html body main .services-swiper__pagination {
    position: relative !important;
    margin-top: 20px !important;
    text-align: center !important;
    display: block !important;
    bottom: auto !important;
  }
}

/* Sur desktop, organic-shapes restent visibles (décoratives) */
@media (min-width: 769px) {
  html body main .page-organic-shapes {
    display: block;
    visibility: visible;
  }
}


/* =====================================================================
   PASS 55 — Why-grid mobile : fallback visuel propre même si Swiper rate
   ===================================================================== */

@media (max-width: 768px) {

  /* === WHY-GRID : flex horizontal forcé, scroll-snap pour fallback === */
  html body main section .why-grid,
  html body main section .why-grid.swiper {
    display: block !important;
    width: 100% !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    -webkit-overflow-scrolling: touch !important;
    scroll-snap-type: x mandatory !important;
    scrollbar-width: none;
    margin: 0 !important;
    padding: 0 0 20px !important;
  }
  html body main section .why-grid::-webkit-scrollbar {
    display: none;
  }

  /* Wrapper interne (que Swiper ou pas) */
  html body main section .why-grid > .swiper-wrapper,
  html body main section .why-grid > .why-grid__wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    width: max-content !important;
    gap: 16px !important;
    padding: 0 !important;
    margin: 0 !important;
  }

  /* Why-card : largeur fixe, scroll-snap-align */
  html body main section .why-card.swiper-slide,
  html body main section .why-card {
    flex: 0 0 calc(100vw - 40px) !important;
    width: calc(100vw - 40px) !important;
    max-width: calc(100vw - 40px) !important;
    box-sizing: border-box !important;
    scroll-snap-align: center !important;
    /* === VISUEL CARTE === */
    background: #fff !important;
    border: 1px solid rgba(44, 185, 198, 0.10) !important;
    border-radius: 20px !important;
    padding: 28px 26px !important;
    box-shadow: 0 6px 18px -8px rgba(46,41,34, 0.12) !important;
    margin: 0 !important;
    transform: none !important;
    opacity: 1 !important;
    filter: none !important;
  }

  /* Numéro 01/02/03 */
  html body main section .why-card .why-card__num {
    font-family: var(--font-heading) !important;
    font-size: 52px !important;
    line-height: 1 !important;
    color: var(--color-accent) !important;
    margin: 0 0 10px !important;
    text-align: left !important;
  }
  html body main section .why-card .why-card__title {
    font-family: var(--font-heading) !important;
    font-size: 1.15rem !important;
    font-weight: 600 !important;
    margin: 0 0 10px !important;
    text-align: left !important;
    color: var(--color-text) !important;
  }
  html body main section .why-card .why-card__text {
    font-size: 0.95rem !important;
    line-height: 1.55 !important;
    color: var(--color-text-muted) !important;
    margin: 0 !important;
    text-align: left !important;
  }

  /* Container du why-grid : padding 20px latéral garanti */
  html body main section .container:has(.why-grid) {
    padding-left: 20px !important;
    padding-right: 20px !important;
  }
}


/* =====================================================================
   PASS 56 — Fixed-quote : section taillée au texte, montagne alignée
   horizontalement avec le bloc texte (pas full viewport)
   + Reviews-swiper : flèches masquées sur desktop
   ===================================================================== */

/* ---------- §A · FIXED-QUOTE : hauteur adaptée au contenu ---------- */
/* La section ne doit plus prendre tout le viewport — sa hauteur suit le texte */
body main section.fixed-quote,
body section.fixed-quote {
  min-height: 0 !important;
  height: auto !important;
}
@media (min-width: 769px) {
  body main section.fixed-quote,
  body section.fixed-quote {
    padding: 96px 0 !important;
  }
}
@media (max-width: 768px) {
  body main section.fixed-quote,
  body section.fixed-quote {
    padding: 64px 0 !important;
  }
}

/* ---------- §B · Montagne SVG : position absolute restaurée ---------- */
/* La règle `main > section > *` force position: relative et z-index 2
   sur tous les enfants de section, ce qui sort la montagne du flux normal
   et l'empile au-dessus du texte. On la repasse en absolute pour qu'elle
   redevienne une décoration superposée et n'ajoute plus de hauteur. */
html body main section.fixed-quote > svg.section-mountain,
html body section.fixed-quote > svg.section-mountain {
  position: absolute !important;
}

/* ---------- §C · Montagne : alignée horizontalement avec le bloc texte ---------- */
/* Le bloc texte (.container > blockquote, max-width 760px) est gauche-aligné
   dans .container (padding-inline: clamp(20px, 5vw, 80px) sur .fixed-quote).
   On colle la montagne sur la même bande horizontale : même left que le texte,
   même largeur max (760px), pour qu'elle se lise comme un trait sous le texte
   plutôt qu'un décor pleine largeur. */
html body main section.fixed-quote .section-mountain,
html body section.fixed-quote .section-mountain {
  top: auto !important;
  right: auto !important;
  bottom: 32px !important;
  left: clamp(20px, 5vw, 80px) !important;
  transform: none !important;
  width: min(760px, calc(100% - 2 * clamp(20px, 5vw, 80px))) !important;
  max-width: 760px !important;
  height: auto !important;
  max-height: 86px !important;
  opacity: 0.7 !important;
}
@media (max-width: 768px) {
  html body main section.fixed-quote .section-mountain,
  html body section.fixed-quote .section-mountain {
    bottom: 20px !important;
    max-height: 56px !important;
  }
}

/* ---------- §D · REVIEWS-SWIPER : flèches masquées sur desktop ---------- */
/* Le carrousel témoignage garde la pagination (dots), mais plus de boutons
   prev/next sur desktop — la navigation se fait au swipe + clic sur dots. */
@media (min-width: 769px) {
  html body main .reviews-swiper__prev,
  html body main .reviews-swiper__next,
  html body .reviews-swiper__prev,
  html body .reviews-swiper__next {
    display: none !important;
  }
  /* Le padding latéral réservé aux flèches n'est plus nécessaire */
  html body main .reviews-swiper {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }
}


/* =====================================================================
   PASS 57 — Carousels mobile : fix largeur slide (override PASS 48/49/51/53)
   PASS 48 supprimait le padding du .container des sections à swiper et
   forçait .swiper-slide à 100vw → cartes pleine viewport, décalées et
   croppées (la wrapper flex gonflait au-delà du container quand width:100%
   s'appliquait, ou les slides débordaient à 100vw quand elles étaient
   forcées). Ici on remet :
     · .container retrouve son padding 20px sur les sections à carousel
     · .swiper occupe la largeur du container (= 100vw − 40px)
     · .swiper-slide laisse Swiper calculer sa largeur inline (= largeur swiper)
   ===================================================================== */

@media (max-width: 768px) {
  /* §A · Container des sections à carousel : padding 20px restauré */
  html body main section:has(.reviews-swiper) > .container,
  html body main section:has(.services-swiper) > .container,
  html body main section:has(.why-swiper) > .container,
  html body main section:has(.diplomas-swiper) > .container,
  html body main section:has(.why-grid.swiper) > .container,
  html body main section:has(.diplomas-strip.swiper) > .container {
    padding-left: 20px !important;
    padding-right: 20px !important;
    max-width: 100% !important;
    overflow: visible !important;
    box-sizing: border-box !important;
  }

  /* §B · Swiper container : 100% du parent (donc 100vw − 40px) */
  html body main .reviews-swiper.swiper,
  html body main .services-swiper.swiper,
  html body main .why-grid.swiper,
  html body main .why-swiper.swiper,
  html body main .diplomas-strip.swiper,
  html body main .diplomas-swiper.swiper {
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
    box-sizing: border-box !important;
  }

  /* §C · Slide width = largeur du swiper container (100vw − 40px)
     Override les anciens 100vw et 100% qui faisaient gonfler les slides */
  html body main .swiper > .swiper-wrapper > .swiper-slide,
  html body main .reviews-swiper > .swiper-wrapper > .swiper-slide,
  html body main .services-swiper > .swiper-wrapper > .swiper-slide,
  html body main .diplomas-swiper > .swiper-wrapper > .swiper-slide,
  html body main .diplomas-strip.swiper > .swiper-wrapper > .swiper-slide,
  html body main .why-swiper > .swiper-wrapper > .swiper-slide,
  html body main .why-grid.swiper > .swiper-wrapper > .swiper-slide {
    flex: 0 0 calc(100vw - 40px) !important;
    width: calc(100vw - 40px) !important;
    min-width: calc(100vw - 40px) !important;
    max-width: calc(100vw - 40px) !important;
    padding: 0 !important;
    box-sizing: border-box !important;
  }

  /* §D · La carte intérieure prend toute la largeur de la slide */
  html body main .swiper > .swiper-wrapper > .swiper-slide > .review-card,
  html body main .swiper > .swiper-wrapper > .swiper-slide > .service-card,
  html body main .swiper > .swiper-wrapper > .swiper-slide > .why-card,
  html body main .swiper > .swiper-wrapper > .swiper-slide.why-card,
  html body main .swiper > .swiper-wrapper > .swiper-slide.diplomas-strip__item,
  html body main .swiper > .swiper-wrapper > .swiper-slide.review-card,
  html body main .swiper > .swiper-wrapper > .swiper-slide.service-card {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    box-sizing: border-box !important;
  }
}


/* =====================================================================
   PASS 58 — Reviews-swiper desktop/tablet : laisser Swiper gérer la largeur
   Une ancienne règle `display: flex !important` sur .swiper-slide (combinée
   à `.review-card { width: 100% !important; display: flex !important }`)
   forçait la slide en flex container et son intrinsic width prenait le pas
   sur la `width: 685px` inline de Swiper. Résultat : slide rendue ~844px,
   désalignement complet sur tablet (~820px) — la carte de droite finissait
   tronquée. On force la slide en block et on laisse Swiper inscrire la
   largeur inline. La carte interne, elle, garde sa flex column.
   ===================================================================== */

@media (min-width: 769px) {
  html body main .reviews-swiper > .swiper-wrapper > .swiper-slide {
    display: block !important;
    box-sizing: border-box !important;
    /* Pas de width/flex forcés : on laisse l'inline de Swiper (ex. 537px / 685px) */
  }
}


/* =====================================================================
   PASS 60 — Carrousels premium v3 unifiés (services / reviews / why / diplomas)
   Référence visuelle : site/maquettes-carrousel/v3-premium.html

   Comportement :
   - Mobile :   1 carte + 12 % de peek de la suivante
   - Tablette : 2 cartes côte à côte
   - Desktop :  3 cartes côte à côte
   Pagination : compteur 01 / NN + progress bar fine + boutons prev/next ronds.
   Cartes : radius 22 px, padding aéré, halo radial, shadow soft → strong hover.
   Aucune largeur en pixel sur la card ; tout est calculé en % du parent.

   Cette PASS bat toutes les précédentes (PASS 48 → 59) grâce à la spécificité
   "html body main ..." + l'ordre dans la cascade.
   ===================================================================== */

/* ---------- §A · Container .swiper : custom props + reset bloc ---------- */
html body main .services-swiper.swiper,
html body main .reviews-swiper.swiper,
html body main .why-swiper.swiper,
html body main .why-grid.swiper,
html body main .diplomas-swiper.swiper,
html body main .diplomas-strip.swiper {
  --slides: 1.12;
  --gap: 16px;
  display: block !important;
  overflow: visible !important;
  padding: 0 !important;
  margin: 32px 0 0 !important;
  width: 100% !important;
  max-width: 100% !important;
  height: auto !important;
  position: relative !important;
  transform: none !important;
  scroll-snap-type: none !important;
  touch-action: auto !important;
}
@media (min-width: 640px) {
  html body main .services-swiper.swiper,
  html body main .reviews-swiper.swiper,
  html body main .why-swiper.swiper,
  html body main .why-grid.swiper,
  html body main .diplomas-swiper.swiper,
  html body main .diplomas-strip.swiper {
    --slides: 2;
    --gap: 22px;
  }
}
@media (min-width: 1024px) {
  html body main .services-swiper.swiper,
  html body main .reviews-swiper.swiper,
  html body main .why-swiper.swiper,
  html body main .why-grid.swiper,
  html body main .diplomas-swiper.swiper,
  html body main .diplomas-strip.swiper {
    --slides: 3;
    --gap: 28px;
  }
}
html body main .diplomas-row {
  overflow: visible !important;
}

/* ---------- §B · Viewport (le .swiper-wrapper) : flex row + scroll-snap ---------- */
html body main .services-swiper.swiper > .swiper-wrapper,
html body main .reviews-swiper.swiper > .swiper-wrapper,
html body main .why-swiper.swiper > .swiper-wrapper,
html body main .why-grid.swiper > .swiper-wrapper,
html body main .why-grid.swiper > .why-grid__wrapper,
html body main .diplomas-swiper.swiper > .swiper-wrapper,
html body main .diplomas-strip.swiper > .swiper-wrapper,
html body main .diplomas-strip.swiper > .diplomas-strip__wrapper {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  align-items: stretch !important;
  gap: var(--gap) !important;
  overflow-x: auto !important;
  overflow-y: visible !important;
  overscroll-behavior-x: contain !important;
  scroll-snap-type: x mandatory !important;
  scroll-behavior: smooth !important;
  -webkit-overflow-scrolling: touch !important;
  scrollbar-width: none !important;
  -ms-overflow-style: none !important;
  width: 100% !important;
  max-width: 100% !important;
  min-width: 0 !important;
  height: auto !important;
  transform: none !important;
  padding: 8px 4px 16px !important;
  margin: 0 !important;
  grid: unset !important;
  grid-template-columns: unset !important;
  /* Pas de mask-image : il rognait visuellement la première carte sur mobile.
     Le scroll-snap + le peek de la slide suivante suffisent comme signaux UX. */
}
/* Cacher la scrollbar (webkit) */
html body main .services-swiper.swiper > .swiper-wrapper::-webkit-scrollbar,
html body main .reviews-swiper.swiper > .swiper-wrapper::-webkit-scrollbar,
html body main .why-swiper.swiper > .swiper-wrapper::-webkit-scrollbar,
html body main .why-grid.swiper > .swiper-wrapper::-webkit-scrollbar,
html body main .why-grid.swiper > .why-grid__wrapper::-webkit-scrollbar,
html body main .diplomas-swiper.swiper > .swiper-wrapper::-webkit-scrollbar,
html body main .diplomas-strip.swiper > .swiper-wrapper::-webkit-scrollbar,
html body main .diplomas-strip.swiper > .diplomas-strip__wrapper::-webkit-scrollbar {
  display: none !important;
  width: 0 !important;
  height: 0 !important;
}

/* ---------- §C · Slides : flex-basis calculé, AUCUNE largeur en px ----------
   La formule est la même partout. Pas de pixel codé en dur.
   --slides et --gap pilotent toute la responsivité. */
html body main .services-swiper.swiper > .swiper-wrapper > .swiper-slide,
html body main .reviews-swiper.swiper > .swiper-wrapper > .swiper-slide,
html body main .why-swiper.swiper > .swiper-wrapper > .swiper-slide,
html body main .why-grid.swiper > .swiper-wrapper > .swiper-slide,
html body main .why-grid.swiper > .why-grid__wrapper > .swiper-slide,
html body main .why-grid.swiper > .swiper-wrapper > .why-card,
html body main .why-grid.swiper > .why-grid__wrapper > .why-card,
html body main .diplomas-swiper.swiper > .swiper-wrapper > .swiper-slide,
html body main .diplomas-strip.swiper > .swiper-wrapper > .swiper-slide,
html body main .diplomas-strip.swiper > .diplomas-strip__wrapper > .swiper-slide,
html body main .diplomas-strip.swiper > .swiper-wrapper > .diplomas-strip__item,
html body main .diplomas-strip.swiper > .diplomas-strip__wrapper > .diplomas-strip__item {
  flex: 0 0 calc((100% - (var(--slides) - 1) * var(--gap)) / var(--slides)) !important;
  width: auto !important;
  max-width: none !important;
  min-width: 0 !important;
  margin: 0 !important;
  height: auto !important;
  transform: none !important;
  scroll-snap-align: start !important;
  scroll-snap-stop: always !important;
  box-sizing: border-box !important;
}

/* ---------- §D · Chrome card (radius / padding / shadow / halo) ----------
   Appliqué aux 4 types de card sans toucher au contenu interne (icon, avatar,
   image, num restent en place selon le type).
   Spécificité gonflée à 4 classes pour battre les anciens PASS 51-57 qui
   ciblaient `.why-grid.swiper > .swiper-wrapper > .swiper-slide` avec
   `padding: 0 !important`. */
html body main .services-swiper.swiper > .swiper-wrapper > .service-card,
html body main .reviews-swiper.swiper > .swiper-wrapper > .review-card,
html body main .why-swiper.swiper > .swiper-wrapper > .why-card,
html body main .why-grid.swiper > .swiper-wrapper > .why-card,
html body main .why-grid.swiper > .why-grid__wrapper > .why-card,
html body main .diplomas-swiper.swiper > .swiper-wrapper > .diplomas-strip__item,
html body main .diplomas-strip.swiper > .swiper-wrapper > .diplomas-strip__item,
html body main .diplomas-strip.swiper > .diplomas-strip__wrapper > .diplomas-strip__item {
  display: flex !important;
  flex-direction: column !important;
  gap: 16px !important;
  background: #FFFFFF !important;
  border: 1px solid rgba(44, 185, 198, 0.08) !important;
  border-radius: 22px !important;
  padding: 40px 36px !important;        /* + d'espacement texte / bords */
  box-shadow: 0 8px 28px -16px rgba(46,41,34, 0.22) !important;
  position: relative !important;
  overflow: hidden !important;
  transition: transform 0.45s cubic-bezier(0.22, 0.61, 0.36, 1),
              box-shadow 0.45s cubic-bezier(0.22, 0.61, 0.36, 1) !important;
}
/* Diplômes : padding aéré aussi, et un peu moins large parce que la card
   contient surtout une vignette image */
html body main .diplomas-swiper.swiper > .swiper-wrapper > .diplomas-strip__item,
html body main .diplomas-strip.swiper > .swiper-wrapper > .diplomas-strip__item,
html body main .diplomas-strip.swiper > .diplomas-strip__wrapper > .diplomas-strip__item {
  padding: 32px 28px 34px !important;
  gap: 14px !important;
}
/* Halo radial décoratif coin sup. droit */
html body main .services-swiper.swiper .service-card::before,
html body main .reviews-swiper.swiper .review-card::before,
html body main .why-swiper.swiper .why-card::before,
html body main .why-grid.swiper .why-card::before,
html body main .diplomas-swiper.swiper .diplomas-strip__item::before,
html body main .diplomas-strip.swiper .diplomas-strip__item::before {
  content: "" !important;
  position: absolute !important;
  inset: -40% -40% auto auto !important;
  width: 220px !important;
  height: 220px !important;
  background: radial-gradient(circle, rgba(232, 181, 74, 0.14) 0%, transparent 70%) !important;
  pointer-events: none !important;
  z-index: 0 !important;
}
/* On garde le contenu au-dessus du halo */
html body main .services-swiper.swiper .service-card > *,
html body main .reviews-swiper.swiper .review-card > *,
html body main .why-swiper.swiper .why-card > *,
html body main .why-grid.swiper .why-card > *,
html body main .diplomas-swiper.swiper .diplomas-strip__item > *,
html body main .diplomas-strip.swiper .diplomas-strip__item > * {
  position: relative !important;
  z-index: 1 !important;
}
/* Hover : lift + shadow renforcée */
@media (hover: hover) {
  html body main .services-swiper.swiper .service-card:hover,
  html body main .reviews-swiper.swiper .review-card:hover,
  html body main .why-swiper.swiper .why-card:hover,
  html body main .why-grid.swiper .why-card:hover,
  html body main .diplomas-swiper.swiper .diplomas-strip__item:hover,
  html body main .diplomas-strip.swiper .diplomas-strip__item:hover {
    transform: translateY(-6px) !important;
    box-shadow: 0 24px 60px -28px rgba(46,41,34, 0.30) !important;
  }
}

/* Reviews : texte intégral (plus de line-clamp) — la card grandit avec son contenu */
html body main .reviews-swiper.swiper .review-card__text {
  -webkit-line-clamp: unset !important;
  line-clamp: unset !important;
  display: block !important;
  -webkit-box-orient: unset !important;
  overflow: visible !important;
}
html body main .reviews-swiper.swiper .review-card__more {
  display: none !important;
}

/* ---------- §E · Pagination injectée par JS (compteur + progress + nav) ---------- */
html body main .carousel__progress-wrap {
  display: flex !important;
  align-items: center !important;
  gap: 20px !important;
  margin: 28px auto 0 !important;
  padding-inline: clamp(0px, 2vw, 24px);
  max-width: 600px;
}
html body main .carousel__counter {
  font-family: var(--font-heading, 'Cormorant Garamond', serif) !important;
  font-size: 1.1rem !important;
  color: var(--color-dark, #2CB9C6) !important;
  font-weight: 600 !important;
  flex-shrink: 0 !important;
  min-width: 64px !important;
  letter-spacing: 0.02em;
}
html body main .carousel__counter em {
  font-style: normal !important;
  color: var(--color-text-muted, #6B6358) !important;
  font-size: 0.85em !important;
}
html body main .carousel__progress {
  flex: 1 !important;
  height: 2px !important;
  background: rgba(46,41,34, 0.12) !important;
  border-radius: 999px !important;
  overflow: hidden !important;
  position: relative !important;
}
html body main .carousel__progress-bar {
  position: absolute !important;
  inset: 0 auto 0 0 !important;
  width: 0 !important;
  background: var(--color-accent, #F1C338) !important;
  border-radius: 999px !important;
  transition: width 0.4s cubic-bezier(0.22, 0.61, 0.36, 1) !important;
}
html body main .carousel__nav {
  display: flex !important;
  gap: 8px !important;
  flex-shrink: 0 !important;
}
html body main .carousel__btn {
  width: 40px !important;
  height: 40px !important;
  border-radius: 50% !important;
  border: 1px solid rgba(44, 185, 198, 0.08) !important;
  background: #FFFFFF !important;
  color: var(--color-text, #2E2922) !important;
  cursor: pointer !important;
  display: grid !important;
  place-items: center !important;
  font-size: 18px !important;
  line-height: 1 !important;
  padding: 0 !important;
  transition: background 0.3s ease, color 0.3s ease, transform 0.3s ease, border-color 0.3s ease !important;
  font-family: inherit;
}
html body main .carousel__btn:hover:not(:disabled) {
  background: var(--color-dark, #2CB9C6) !important;
  color: #FFFFFF !important;
  transform: scale(1.06) !important;
  border-color: var(--color-dark, #2CB9C6) !important;
}
html body main .carousel__btn:disabled {
  opacity: 0.30 !important;
  cursor: not-allowed !important;
}
/* Mobile compact : compteur en ligne 1, progress bar pleine largeur, nav en bas */
@media (max-width: 639px) {
  html body main .carousel__progress-wrap {
    flex-wrap: wrap !important;
    justify-content: center !important;
    gap: 14px !important;
  }
  html body main .carousel__counter {
    width: 100% !important;
    text-align: center !important;
    min-width: 0 !important;
  }
  html body main .carousel__progress {
    order: 2 !important;
    width: 100% !important;
    flex-basis: 100% !important;
  }
  html body main .carousel__nav {
    order: 3 !important;
  }
}

/* ---------- §F · Neutralisation Swiper (anciens éléments) ---------- */
/* La pagination Swiper native et les prev/next reviews sont remplacés par
   le DOM injecté par premiumCarousels(). */
html body main .services-swiper .swiper-pagination,
html body main .services-swiper__pagination,
html body main .reviews-swiper .swiper-pagination,
html body main .why-swiper .swiper-pagination,
html body main .why-swiper__pagination,
html body main .why-grid.swiper .swiper-pagination,
html body main .diplomas-swiper .swiper-pagination,
html body main .diplomas-swiper__pagination,
html body main .diplomas-strip.swiper .swiper-pagination,
html body main .reviews-swiper__prev,
html body main .reviews-swiper__next {
  display: none !important;
}

/* ---------- §G · Pagination masquée UNIQUEMENT quand toutes les cartes tiennent ----------
   Ancienne version : masquage en dur sur desktop pour services/why/diplomas.
   Problème : services a 4 cartes pour 3 visibles → la 4e tuile (Périnatalité)
   était inaccessible sur desktop. Désormais le JS (premiumCarousels) pose
   .carousel--fits quand pageCount <= 1 (toutes les cartes visibles) ; on ne
   masque la pagination que dans ce cas. why/diplomas (3/3) restent sans
   pagination sur desktop, comme avant ; services la garde et la 4e tuile
   redevient atteignable. */
@media (min-width: 1024px) {
  html body main .reviews-swiper .carousel__progress-wrap {
    margin-top: 36px !important;
  }
}
html body main .swiper.carousel--fits .carousel__progress-wrap {
  display: none !important;
}


/* ---------- §H · Services-swiper en 4 colonnes sur DESKTOP (≥1024px) ----------
   Seul ce carrousel (« Une même technique, quatre champs d'action ») compte
   exactement 4 cartes. On les affiche toutes les 4 d'un coup. Les autres
   carrousels (reviews, why, diplomas) restent en 3 colonnes desktop.
   Mobile (<640px) et tablette (640-1023) NE SONT PAS modifiés. */
@media (min-width: 1024px) {
  html body main .services-swiper.swiper {
    --slides: 4 !important;
    --gap: 26px !important;   /* gap légèrement réduit pour aérer 4 cartes */
  }
}

/* Fin PASS 60 */


/* =====================================================================
   PASS 61 — Sections .fixed-quote : hauteur réduite sur DESKTOP (≥1024px)
   Sur desktop, ces sections (« Mon approche », « Pour le système nerveux »…)
   prenaient ~681px de haut, ce qui dominait l'écran. On compresse le
   padding section + container pour ramener à ~480-520px.
   Mobile et tablette ne sont PAS modifiés.
   ===================================================================== */
@media (min-width: 1024px) {
  html body main section.fixed-quote,
  html body section.fixed-quote {
    padding: 48px 0 !important;
    min-height: 0 !important;
  }
  html body main section.fixed-quote > .container,
  html body section.fixed-quote > .container {
    padding-block: 36px !important;
    min-height: 0 !important;
  }
}


/* =====================================================================
   PASS 62 — Ambient gradient background piloté au scroll
   - 1 div #ambient-bg position:fixed, gradient morphing via custom props.
   - Toutes les sections opaques deviennent transparentes pour laisser
     l'ambient transparaître → fond perçu continu, sans saut entre sections.
   - Exceptions : .hero, .fixed-quote, .process gardent leur image.
   - JS associé : ambientGradientScroll() dans animations.js (PASS 62 §JS).
   ===================================================================== */

:root {
  /* Phase 1 (top de page) — blanc chaud pâle, halo safran très discret */
  --bg-base: #FEFCF6;
  --bg-c1: #FCF6E2;  /* voile sable */
  --bg-c2: #F9F2D6;  /* touche safran doux */
  --bg-c3: #FDF9EA;  /* halo chaud doux */
  --bg-x1: 18%; --bg-y1: 22%;
  --bg-x2: 78%; --bg-y2: 32%;
  --bg-x3: 52%; --bg-y3: 78%;
  --bg-r1: 55%;
  --bg-r2: 60%;
  --bg-r3: 65%;
}

#ambient-bg {
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  will-change: background;
  background-color: var(--bg-base);
  background-image:
    radial-gradient(circle at var(--bg-x1) var(--bg-y1), var(--bg-c1) 0%, transparent var(--bg-r1)),
    radial-gradient(circle at var(--bg-x2) var(--bg-y2), var(--bg-c2) 0%, transparent var(--bg-r2)),
    radial-gradient(circle at var(--bg-x3) var(--bg-y3), var(--bg-c3) 0%, transparent var(--bg-r3));
  /* Mix doux entre les blobs */
  background-blend-mode: normal;
}

/* Body : on garde une couleur de secours au cas où #ambient-bg n'est pas injecté
   (no-JS, premier paint). Une fois la div en place, c'est elle qui domine. */
html body {
  background: var(--bg-base) !important;
}

/* ===== Sections « calques » : transparentes pour laisser passer l'ambient ===== */
html body main .section.section--bg,
html body main .section.section--alt,
html body main .section.section--dark,
html body main .section.has-blob,
html body main .section.cta-final,
html body main aside.reassurance,
html body main section.affiliations-band,
html body main aside.reassurance,
html body .reassurance,
html body .affiliations-band {
  background: transparent !important;
  background-image: none !important;
  background-color: transparent !important;
}

/* Ancien blocage des halos radials chauds — neutralisé : PASS 71
   réintroduit des blobs colorés sur ces mêmes pseudo-éléments. */

/* Exceptions : on NE TOUCHE PAS .hero, .fixed-quote, .process.
   Leur background-image / overlay continue de couvrir l'ambient localement.
   On évite seulement de leur ajouter un fond solide hérité. */
html body main section.fixed-quote {
  /* la couleur de fond solide #2CB9C6 n'a plus de raison d'être quand
     une image est servie ; on la neutralise pour éviter un flash entre
     deux états de chargement. L'image et le scrim couvrent toute la zone. */
  background-color: transparent !important;
}

/* Conserve le rendering reduce-motion : aucun changement, le JS skip
   simplement la timeline. Le fond reste statique = phase 1. */


/* =====================================================================
   PASS 63 — Section-mountain : plus petites et SOUS le contenu
   - Largeur fortement réduite (max 480px desktop, 70vw mobile).
   - Opacité du halo + line plus discrète.
   - z-index −1 : passe derrière tout le contenu de la section.
   - Le contenu (.container, header, cards) repasse explicitement au-dessus.
   ===================================================================== */
html body main .section-mountain,
html body main section .section-mountain,
html body main .hero .section-mountain,
html body main .process .section-mountain {
  width: min(420px, 56vw) !important;
  max-width: 420px !important;
  z-index: -1 !important;
  opacity: 0.6 !important;
  pointer-events: none !important;
}
html body main .section-mountain__line {
  stroke-width: 1 !important;
  opacity: 0.55 !important;
}
html body main .section-mountain__halo {
  opacity: 0.35 !important;
}

/* Repositionnement : sous le bord bas de section, peu débordante */
html body main .section-mountain--warm  { bottom: 4% !important; right: -4% !important; top: auto !important; left: auto !important; }
html body main .section-mountain--sand  { top: 8% !important;    left: -4% !important; bottom: auto !important; right: auto !important; }
html body main .section-mountain--sage  { bottom: 10% !important; left: -2% !important; top: auto !important; right: auto !important; }
html body main .section-mountain--cream { bottom: 12% !important; right: -3% !important; top: auto !important; left: auto !important; max-width: 360px !important; width: min(360px, 50vw) !important; }

/* Force tout le contenu de section au-dessus de la montagne */
html body main section > .container,
html body main .hero > .container,
html body main .hero > .hero__mosaic,
html body main .process > .container,
html body main section > header,
html body main section > .actions {
  position: relative !important;
  z-index: 2 !important;
}

/* Mobile : encore plus discrètes */
@media (max-width: 768px) {
  html body main .section-mountain,
  html body main section .section-mountain {
    width: min(280px, 65vw) !important;
    max-width: 280px !important;
    opacity: 0.45 !important;
  }
}

/* PASS 63 §B — extension pour le hero mosaïque (avait une règle plus spécifique
   .hero.hero--mosaic .section-mountain qui battait la précédente). */
html body main .hero.hero--mosaic .section-mountain,
html body main .hero .section-mountain {
  z-index: -1 !important;
  opacity: 0.55 !important;
}


/* =====================================================================
   PASS 64 — Hero banner format 16:9 paysage
   - Force aspect-ratio 16/9 sur .hero, .hero--mosaic, .hero--home, .hero--secondary
   - Override des min-height/clamp existants qui forçaient 96vh / 900px.
   - Sur mobile (<640px) où 16:9 donnerait un hero trop bas (< 360px), on
     garde une hauteur minimale pour le contenu.
   ===================================================================== */
html body main .hero,
html body main .hero.hero--home,
html body main .hero.hero--secondary,
html body main .hero.hero--mosaic,
html body main .hero.hero--home.hero--mosaic,
html body main .hero.hero--secondary.hero--mosaic {
  aspect-ratio: 16 / 9 !important;
  min-height: 0 !important;
  height: auto !important;
  max-height: none !important;
}

/* Mobile : on tolère plus de hauteur pour respecter la lisibilité du contenu
   (titre, sous-titre, boutons, mosaïque réduite). aspect-ratio 16/9 sur 375px
   donne 211px, beaucoup trop court. On force un min-height plancher. */
@media (max-width: 640px) {
  html body main .hero,
  html body main .hero.hero--home,
  html body main .hero.hero--secondary,
  html body main .hero.hero--mosaic,
  html body main .hero.hero--home.hero--mosaic,
  html body main .hero.hero--secondary.hero--mosaic {
    aspect-ratio: auto !important;
    min-height: 480px !important;
  }
}


/* =====================================================================
   PASS 65 — Desktop : espaces sections réduits + cap viewport
   - Padding-block des sections divisé par ~2 (108 → 56px).
   - Marges du header de section + actions resserrées.
   - max-height: 100vh sur chaque section pour ne pas dépasser le viewport.
     Combiné à overflow:visible le contenu peut visuellement déborder mais
     ne contraint pas la hauteur de la section dans le flux.
   - Mobile & tablette : aucun changement.
   ===================================================================== */
@media (min-width: 1024px) {
  /* Sections normales */
  html body main > section.section,
  html body main > section.section--bg,
  html body main > section.section--alt,
  html body main > section.section--dark {
    padding-block: 56px !important;
  }

  /* Header de section : moins de respiration */
  html body main > section .section-header {
    margin-bottom: 32px !important;
  }
  html body main > section .section-header .section-title {
    margin-bottom: 8px !important;
  }
  html body main > section .section-header .section-intro {
    margin-top: 4px !important;
  }

  /* Bandes spéciales */
  html body main > section.affiliations-band {
    padding-block: 44px !important;
  }
  html body main > section.cta-final {
    padding-block: 56px !important;
  }
  html body main > .process {
    padding-block: 56px !important;
  }
  html body main > .reassurance {
    padding-block: 20px !important;
  }

  /* CTAs en bas de section : marge réduite */
  html body main > section .actions {
    margin-top: 28px !important;
  }

  /* PAS de max-height — la contrainte 100vh coupait le contenu de process,
     section--alt, affiliations-band, etc. On laisse la section respirer son
     contenu naturel après réduction du padding. */

  /* En revanche, on force overflow:visible pour annuler les overflow:hidden
     antérieurs qui clippaient encore le contenu débordant. */
  html body main > section,
  html body main > aside {
    max-height: none !important;
    overflow: visible !important;
  }
}


/* =====================================================================
   PASS 66 — Halos colorés transformés en blobs organiques modernes
   Couche fixe en surcouche de #ambient-bg, ~6 formes asymétriques rondes,
   couleurs chaudes douces, gros filter:blur() pour effet "lumière diffuse"
   moderne. Float lente pour la vie. Injection JS dans PASS 66 §JS.
   ===================================================================== */
#organic-blobs {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
  will-change: transform;
}
.organic-blob {
  position: absolute;
  opacity: 0.5;
  pointer-events: none;
  filter: blur(70px);
  mix-blend-mode: multiply;
  will-change: transform, border-radius;
  animation: blob-float 28s ease-in-out infinite;
}
@keyframes blob-float {
  0%, 100% {
    transform: translate(0, 0) rotate(0deg) scale(1);
    border-radius: 60% 40% 50% 50% / 40% 60% 50% 50%;
  }
  25% {
    transform: translate(20px, -15px) rotate(20deg) scale(1.05);
    border-radius: 40% 60% 60% 40% / 60% 40% 50% 50%;
  }
  50% {
    transform: translate(-15px, 20px) rotate(-15deg) scale(0.95);
    border-radius: 55% 45% 40% 60% / 50% 50% 60% 40%;
  }
  75% {
    transform: translate(10px, 10px) rotate(10deg) scale(1.02);
    border-radius: 50% 50% 55% 45% / 45% 55% 45% 55%;
  }
}

/* Variantes : taille / position / couleur / décalage d'animation */
.organic-blob--1 {
  top: 8%; left: 6%;
  width: 360px; height: 360px;
  background: #F2C9A0;       /* pêche caramel */
  animation-delay: 0s;
}
.organic-blob--2 {
  top: 30%; right: 8%;
  width: 420px; height: 420px;
  background: #E8B484;       /* abricot doré */
  animation-delay: -7s;
}
.organic-blob--3 {
  bottom: 18%; left: 14%;
  width: 320px; height: 320px;
  background: #D8C29A;       /* sable tendre */
  animation-delay: -14s;
}
.organic-blob--4 {
  bottom: 8%; right: 4%;
  width: 380px; height: 380px;
  background: #EFCFA8;       /* crème caramel */
  animation-delay: -21s;
}
.organic-blob--5 {
  top: 50%; left: 38%;
  width: 280px; height: 280px;
  background: #DEC7A8;       /* greige chaud */
  animation-delay: -10s;
  opacity: 0.4;
}
.organic-blob--6 {
  top: 12%; right: 32%;
  width: 240px; height: 240px;
  background: #C8B89C;       /* greige bleuté léger */
  animation-delay: -18s;
  opacity: 0.4;
}

/* Masque les anciens halos SVG (section-mountain__halo) pour laisser les
   nouveaux blobs porter seuls la décoration colorée. La ligne mountain
   reste visible mais sans son halo radial. */
html body main .section-mountain__halo {
  opacity: 0 !important;
}

/* Reduce-motion : pas d'animation */
@media (prefers-reduced-motion: reduce) {
  .organic-blob { animation: none !important; }
}

/* Mobile : moins de blobs, plus petits */
@media (max-width: 768px) {
  .organic-blob--5,
  .organic-blob--6 { display: none; }
  .organic-blob { opacity: 0.35; filter: blur(60px); }
  .organic-blob--1 { width: 220px; height: 220px; }
  .organic-blob--2 { width: 260px; height: 260px; }
  .organic-blob--3 { width: 200px; height: 200px; }
  .organic-blob--4 { width: 240px; height: 240px; }
}


/* =====================================================================
   PASS 67 — Retirer le dégradé fondu sur l'image montagne (.process__bg)
   Les passes 2675/3783 posaient un linear-gradient en haut/bas qui fondait
   l'image vers var(--color-bg). On neutralise ce fondu pour laisser l'image
   pleinement visible.
   ===================================================================== */
html body main .process .process__bg::after,
html body .process .process__bg::after {
  background: none !important;
  content: none !important;
}


/* =====================================================================
   PASS 68 — Montagnes oneline plus visibles + bord-à-bord
   - Largeur = 100vw : la ligne part du bord gauche de l'écran et finit
     au bord droit.
   - Position flush left:0 (annule les -4% / -3% / -8% des précédentes
     positions par variante).
   - Opacité de la ligne remontée (0.55 → 0.85), stroke-width épaissi.
   - Le z-index reste -1 (sous le contenu).
   ===================================================================== */
html body main .section-mountain,
html body main section .section-mountain,
html body main .hero .section-mountain,
html body main .hero.hero--mosaic .section-mountain {
  width: 100vw !important;
  max-width: 100vw !important;
  left: 0 !important;
  right: auto !important;
  opacity: 1 !important;
}

/* La ligne SVG : plus présente */
html body main .section-mountain__line {
  stroke-width: 1.8 !important;
  opacity: 0.85 !important;
}

/* Repositionnement vertical par variante — flush bord d'écran */
html body main .section-mountain--warm  { bottom: 6% !important; top: auto !important; }
html body main .section-mountain--sand  { top: 10% !important; bottom: auto !important; }
html body main .section-mountain--sage  { bottom: 12% !important; top: auto !important; }
html body main .section-mountain--cream { bottom: 16% !important; top: auto !important; max-width: 100vw !important; width: 100vw !important; }

@media (max-width: 768px) {
  html body main .section-mountain,
  html body main section .section-mountain {
    width: 100vw !important;
    max-width: 100vw !important;
    opacity: 0.9 !important;
  }
  html body main .section-mountain__line {
    stroke-width: 1.4 !important;
    opacity: 0.75 !important;
  }
}


/* =====================================================================
   PASS 69 — Montagnes onelines : refonte DESKTOP uniquement
   - Line plus fin, sous le contenu.
   - Hero : retirer la ligne.
   - "À quels maux" : retirer.
   - "Chiffres clés" : ajoutée via data-mountain dans le HTML, visible derrière les cards.
   - Héloïse Miermon : remplacer par une ligne sur le bas de sa photo (largeur photo).
   - Autres sections sans montagne : blobs organiques bleu+brun.
   ===================================================================== */

@media (min-width: 1024px) {

  /* §A · Ligne montagne par défaut : fine + sous le contenu */
  html body main .section-mountain__line {
    stroke-width: 0.9 !important;
    opacity: 0.65 !important;
  }
  html body main .section-mountain {
    z-index: -1 !important;
  }

  /* §B · HERO : pas de montagne */
  html body main .hero .section-mountain,
  html body main .hero.hero--mosaic .section-mountain {
    display: none !important;
  }

  /* §C · "À quels maux répondons-nous ?" — section--alt[data-mountain="sand"] */
  html body main section.section--alt[data-mountain="sand"] .section-mountain {
    display: none !important;
  }

  /* §D · "Héloïse Miermon — Thérapeute" — hide default, add line at bottom of photo */
  html body main section[data-mountain="sage"] > .section-mountain {
    display: none !important;
  }
  html body main section[data-mountain="sage"] .about__media {
    position: relative;
  }
  html body main section[data-mountain="sage"] .about__media::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -2px;
    height: 56px;
    background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 80" preserveAspectRatio="none"><path d="M 0 60 C 90 50 165 25 220 25 C 280 25 320 60 380 55 C 440 50 480 15 540 18 C 600 22 660 60 720 55 C 760 52 790 35 800 30" fill="none" stroke="%232CB9C6" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" opacity="0.85"/></svg>');
    background-size: 100% 100%;
    background-repeat: no-repeat;
    pointer-events: none;
    z-index: 1;
  }

  /* §E · Blobs organiques bleu+brun sur les autres sections (Une pratique reconnue,
     reviews, instagram, faq, affiliations). Couleurs douces sage + caramel. */
  html body main section.section--alt:not([data-mountain]):not(.affiliations-band),
  html body main section.section--bg:not([data-mountain]):not(.fixed-quote),
  html body main section.affiliations-band {
    position: relative;
  }
  html body main section.section--alt:not([data-mountain]):not(.affiliations-band)::before,
  html body main section.section--bg:not([data-mountain]):not(.fixed-quote)::before,
  html body main section.affiliations-band::before {
    content: "";
    position: absolute;
    top: 10%;
    right: -6%;
    width: 380px;
    height: 380px;
    background: radial-gradient(circle, rgba(44, 185, 198, 0.32) 0%, rgba(44, 185, 198, 0) 65%);
    border-radius: 60% 40% 50% 50% / 40% 60% 50% 50%;
    pointer-events: none;
    z-index: -1;
    filter: blur(20px);
  }
  html body main section.section--alt:not([data-mountain]):not(.affiliations-band)::after,
  html body main section.section--bg:not([data-mountain]):not(.fixed-quote)::after,
  html body main section.affiliations-band::after {
    content: "";
    position: absolute;
    bottom: 8%;
    left: -4%;
    width: 320px;
    height: 320px;
    background: radial-gradient(circle, rgba(184, 134, 42, 0.30) 0%, rgba(184, 134, 42, 0) 65%);
    border-radius: 50% 50% 60% 40% / 55% 45% 55% 45%;
    pointer-events: none;
    z-index: -1;
    filter: blur(20px);
  }
}


/* =====================================================================
   PASS 70 — Retrait global de TOUS les halos colorés
   - Couche #organic-blobs (PASS 66) entièrement masquée
   - Halos SVG des montagnes (.section-mountain__halo)
   - Pseudo-éléments décoratifs ajoutés en PASS 69 §E (blobs sage/caramel)
   - Anciens halos radiaux ::before des sections (par sécurité)
   Le gradient ambient #ambient-bg reste en place, c'est lui qui porte
   l'ambiance chromatique du site.
   ===================================================================== */
html body #organic-blobs,
html body #organic-blobs .organic-blob,
html body main #organic-blobs,
html body main #organic-blobs .organic-blob {
  display: none !important;
}

html body main .section-mountain__halo {
  display: none !important;
  opacity: 0 !important;
}

/* PASS 70 §B (ancien blocage) — supprimé : PASS 71 réintroduit des blobs
   sur ces mêmes pseudo-éléments avec un design inspiré du preview vercel.
   Si tu veux à nouveau couper les blobs, supprime PASS 71 plutôt qu'ajouter
   un blocage ici. */

/* Garde-fou pour tous les anciens halos radial qui pourraient ressortir */
html body main > section:not(.fixed-quote)::before,
html body main > section:not(.fixed-quote)::after {
  background: none !important;
}


/* =====================================================================
   PASS 71 — Blobs organiques inspirés du preview vercel
   Style : grands cercles asymétriques, couleurs CARAMEL (#F1C338) + SAGE
   (#2CB9C6 = la touche bleutée du brand) avec alphas très basses (0.18-0.28)
   et blur(40-60px) pour un rendu doux moderne. Posés en coin de section
   via ::before/::after, derrière le contenu (z-index -1).
   Desktop ≥1024px uniquement.
   ===================================================================== */
@media (min-width: 1024px) {

  /* Active la position relative sur les sections décorées (sauf hero,
     fixed-quote, process, cta-final qui ont leur propre identité). */
  html body main > section.section--bg:not(.fixed-quote),
  html body main > section.section--alt,
  html body main > section.affiliations-band,
  html body main > section.process,
  html body main > section.cta-final {
    position: relative;
    overflow: visible;
  }

  /* §A · Force overflow visible sur les sections décorées pour ne pas
     clipper les blobs qui débordent de leurs bords. */
  html body main > section:nth-of-type(n):not(.fixed-quote):not(.hero):not(.process) {
    overflow: visible !important;
  }

  /* Blob CARAMEL en haut à droite — spécificité alignée sur les anciens
     overrides (5 classes via :nth-of-type + 4 :not) pour battre les rules
     PASS 18 qui posaient display:none / background:none. */
  html body main > section:nth-of-type(n):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before,
  html body main > section.affiliations-band::before,
  html body main > section.process::before,
  html body main > section.cta-final::before {
    content: "" !important;
    display: block !important;
    position: absolute !important;
    top: 8% !important;
    right: -4% !important;
    width: 520px !important;
    height: 520px !important;
    background: radial-gradient(circle, rgba(232, 181, 74, 0.75) 0%, rgba(232, 181, 74, 0.30) 35%, rgba(232, 181, 74, 0) 75%) !important;
    border-radius: 58% 42% 50% 50% / 42% 58% 50% 50% !important;
    pointer-events: none !important;
    z-index: 0 !important;
    filter: blur(15px) !important;
    inset: auto !important;
    margin: 0 !important;
    opacity: 1 !important;
  }

  /* Blob SAGE (touche bleutée) en bas à gauche */
  html body main > section:nth-of-type(n):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::after,
  html body main > section.affiliations-band::after,
  html body main > section.process::after,
  html body main > section.cta-final::after {
    content: "" !important;
    display: block !important;
    position: absolute !important;
    bottom: 10% !important;
    left: -4% !important;
    width: 460px !important;
    height: 460px !important;
    background: radial-gradient(circle, rgba(44, 185, 198, 0.70) 0%, rgba(44, 185, 198, 0.28) 35%, rgba(44, 185, 198, 0) 75%) !important;
    border-radius: 50% 50% 60% 40% / 55% 45% 55% 45% !important;
    pointer-events: none !important;
    z-index: 0 !important;
    filter: blur(15px) !important;
    inset: auto !important;
    margin: 0 !important;
    opacity: 1 !important;
  }

  /* Sections paires : on inverse les positions pour varier le rythme */
  html body main > section:nth-of-type(even).section--bg:not(.fixed-quote)::before,
  html body main > section:nth-of-type(even).section--alt::before,
  html body main > section:nth-of-type(even).affiliations-band::before,
  html body main > section:nth-of-type(even).cta-final::before {
    right: auto;
    left: -7%;
    top: 12%;
  }
  html body main > section:nth-of-type(even).section--bg:not(.fixed-quote)::after,
  html body main > section:nth-of-type(even).section--alt::after,
  html body main > section:nth-of-type(even).affiliations-band::after,
  html body main > section:nth-of-type(even).cta-final::after {
    left: auto;
    right: -4%;
    bottom: 14%;
  }
}


/* =====================================================================
   PASS 72 — Retrait des blobs PASS 71 (jugés moches)
   Désactive les pseudo-éléments décoratifs ::before / ::after sur toutes
   les sections. Le gradient ambient #ambient-bg reste seul à porter
   l'ambiance chromatique.
   ===================================================================== */
@media (min-width: 1024px) {
  html body main > section:nth-of-type(n):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before,
  html body main > section:nth-of-type(n):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::after,
  html body main > section.affiliations-band::before,
  html body main > section.affiliations-band::after,
  html body main > section.process::before,
  html body main > section.process::after,
  html body main > section.cta-final::before,
  html body main > section.cta-final::after {
    content: none !important;
    display: none !important;
    background: none !important;
  }
}


/* =====================================================================
   PASS 73 — Desktop : onelines strictement en arrière-plan derrière les
   cartes + ré-activation de la montagne animée sur la section "Héloïse
   Miermon" + ajout de ronds organiques doux sur les sections sans oneline.
   ---------------------------------------------------------------------
   §A · Stacking context propre :
        - section[data-mountain]  → position:relative + isolation:isolate
        - .section-mountain       → z-index:0 (inside section, sous tout
                                     ce qui est dans .container)
        - .container, grids, .section-header, .about__inner, actions
          → z-index:2 explicite pour passer DEVANT la ligne.

   §B · "Une même technique…" (#soins, warm) :
        rien à faire de plus — .container z-index:1 existe déjà, mais on
        renforce explicitement pour les enfants (services-grid + swiper).

   §C · "Chiffres clés" (warm) : idem, on renforce stats-grid.

   §D · "Héloïse Miermon — Thérapeute" (sage) :
        - réactive le .section-mountain SVG (était display:none en PASS 69)
        - supprime le pseudo statique .about__media::after (qui remplaçait
          la ligne mais n'était pas animé).
        - la ligne SVG bénéficie de la GSAP ScrollTrigger déjà câblée dans
          animations.js mountainShapes(), donc elle se dessine au scroll.

   §E · Ronds organiques sur sections sans oneline (À quels maux, Une
        pratique reconnue, Avis, Instagram, FAQ, Affiliations, CTA finale) :
        - 2 ronds par section : sage (haut-droite) + caramel (bas-gauche)
        - tailles ~ 260-320px, alphas faibles (0.16-0.22), blur 32-40px
        - border-radius légèrement asymétriques pour un côté organique
        - z-index:0 (derrière le contenu), pointer-events:none
        - alternance des positions selon parité nth-of-type
        - surcharge avec une spécificité ≥ PASS 72 (sélecteur identique +
          déclarations qui ré-allument content/display).
   ===================================================================== */
@media (min-width: 1024px) {

  /* §A · Mountains derrière les cartes */
  html body main > section[data-mountain] {
    position: relative !important;
    isolation: isolate;
  }
  html body main > section[data-mountain] > .section-mountain {
    z-index: 0 !important;
    pointer-events: none !important;
  }
  html body main > section[data-mountain] > .container,
  html body main > section[data-mountain] .section-header,
  html body main > section[data-mountain] .services-grid,
  html body main > section[data-mountain] .stats-grid,
  html body main > section[data-mountain] .maux-list,
  html body main > section[data-mountain] .about__inner,
  html body main > section[data-mountain] .actions,
  html body main > section[data-mountain] .section-cta {
    position: relative;
    z-index: 2 !important;
  }
  /* Les cartes elles-mêmes : on s'assure que leur fond couvre la ligne */
  html body main > section[data-mountain] .service-card,
  html body main > section[data-mountain] .stat {
    position: relative;
    z-index: 2;
  }

  /* §D · Réactivation de la ligne SVG animée sur Héloïse Miermon */
  html body main section[data-mountain="sage"] > .section-mountain {
    display: block !important;
  }
  html body main section[data-mountain="sage"] .about__media::after {
    content: none !important;
    display: none !important;
    background: none !important;
  }

  /* §E · Ronds organiques doux — sections sans oneline visible.
     Spécificité alignée sur PASS 72 (5 classes + :not chains) pour
     surcharger ses content:none / display:none / background:none. */
  html body main > section:nth-of-type(n).section--alt:not([data-mountain="warm"]):not([data-mountain="sage"]):not(.fixed-quote):not(.hero):not(.process),
  html body main > section:nth-of-type(n).section--bg:not([data-mountain="warm"]):not([data-mountain="sage"]):not(.fixed-quote):not(.hero):not(.process),
  html body main > section.affiliations-band,
  html body main > section.cta-final {
    position: relative;
    isolation: isolate;
    overflow: visible;
  }

  /* ::before — rond SAGE en haut à droite */
  html body main > section:nth-of-type(n).section--alt:not([data-mountain="warm"]):not([data-mountain="sage"]):not(.fixed-quote):not(.hero):not(.process)::before,
  html body main > section:nth-of-type(n).section--bg:not([data-mountain="warm"]):not([data-mountain="sage"]):not(.fixed-quote):not(.hero):not(.process)::before,
  html body main > section.affiliations-band::before,
  html body main > section.cta-final::before {
    content: "" !important;
    display: block !important;
    position: absolute !important;
    top: 12% !important;
    right: -5% !important;
    width: 320px !important;
    height: 320px !important;
    background: radial-gradient(circle at 45% 45%,
                rgba(44, 185, 198, 0.22) 0%,
                rgba(44, 185, 198, 0.10) 40%,
                rgba(44, 185, 198, 0) 72%) !important;
    border-radius: 62% 38% 55% 45% / 48% 60% 40% 52% !important;
    filter: blur(34px) !important;
    pointer-events: none !important;
    z-index: 0 !important;
    inset: auto !important;
    margin: 0 !important;
    opacity: 1 !important;
  }

  /* ::after — rond CARAMEL en bas à gauche */
  html body main > section:nth-of-type(n).section--alt:not([data-mountain="warm"]):not([data-mountain="sage"]):not(.fixed-quote):not(.hero):not(.process)::after,
  html body main > section:nth-of-type(n).section--bg:not([data-mountain="warm"]):not([data-mountain="sage"]):not(.fixed-quote):not(.hero):not(.process)::after,
  html body main > section.affiliations-band::after,
  html body main > section.cta-final::after {
    content: "" !important;
    display: block !important;
    position: absolute !important;
    bottom: 10% !important;
    left: -4% !important;
    width: 130px !important;
    height: 130px !important;
    background: radial-gradient(circle at 55% 50%,
                rgba(232, 181, 74, 0.18) 0%,
                rgba(232, 181, 74, 0.08) 42%,
                rgba(232, 181, 74, 0) 72%) !important;
    border-radius: 50% 50% 60% 40% / 58% 42% 55% 45% !important;
    filter: blur(28px) !important;
    pointer-events: none !important;
    z-index: 0 !important;
    inset: auto !important;
    margin: 0 !important;
    opacity: 1 !important;
  }

  /* Alternance de placement — sections paires : on swap les côtés pour
     éviter une diagonale visuelle trop régulière. */
  html body main > section:nth-of-type(even).section--alt:not([data-mountain="warm"]):not([data-mountain="sage"])::before,
  html body main > section:nth-of-type(even).section--bg:not([data-mountain="warm"]):not([data-mountain="sage"])::before,
  html body main > section:nth-of-type(even).affiliations-band::before,
  html body main > section:nth-of-type(even).cta-final::before {
    top: 14% !important;
    right: auto !important;
    left: -5% !important;
  }
  html body main > section:nth-of-type(even).section--alt:not([data-mountain="warm"]):not([data-mountain="sage"])::after,
  html body main > section:nth-of-type(even).section--bg:not([data-mountain="warm"]):not([data-mountain="sage"])::after,
  html body main > section:nth-of-type(even).affiliations-band::after,
  html body main > section:nth-of-type(even).cta-final::after {
    bottom: 12% !important;
    left: auto !important;
    right: -4% !important;
  }

  /* Garde-fou : le contenu des sections à ronds reste au-dessus */
  html body main > section.section--alt > .container,
  html body main > section.section--bg > .container,
  html body main > section.affiliations-band > .container,
  html body main > section.cta-final > .container {
    position: relative;
    z-index: 2;
  }
}


/* =====================================================================
   PASS 74 — Force réelle : oneline EN ARRIÈRE-PLAN derrière les cartes.
   ---------------------------------------------------------------------
   Problème PASS 73 : `position: relative` n'était pas !important, donc
   les grids (.services-grid, .stats-grid, .maux-list) ignoraient le
   z-index appliqué (les transforms swiper créaient en plus leurs propres
   stacking contexts à z-index auto, qui peuvent écraser le z-index 0
   de la ligne).
   Solution :
     • La ligne descend à z-index: -1 dans le stacking context de la
       section (isolation:isolate confine, elle ne s'échappe pas vers
       l'ambient-bg).
     • Tous les enfants directs de .container + les grids + le swiper-
       wrapper reçoivent position: relative !important et z-index élevé.
   Desktop ≥ 1024px uniquement.
   ===================================================================== */
@media (min-width: 1024px) {

  /* Section avec oneline = stacking context fermé */
  html body main > section[data-mountain] {
    position: relative !important;
    isolation: isolate !important;
    overflow: hidden !important;
  }

  /* La ligne plonge derrière, mais reste enfermée par isolation */
  html body main > section[data-mountain] > svg.section-mountain {
    z-index: -1 !important;
    pointer-events: none !important;
  }

  /* Le conteneur du contenu remonte explicitement au-dessus */
  html body main > section[data-mountain] > .container {
    position: relative !important;
    z-index: 5 !important;
  }

  /* Tous les enfants directs du container : position + z-index forcés */
  html body main > section[data-mountain] > .container > * {
    position: relative;
    z-index: 5;
  }

  /* Grids et swiper : ils ont parfois transform/inline qui interfèrent */
  html body main > section[data-mountain] .services-grid,
  html body main > section[data-mountain] .stats-grid,
  html body main > section[data-mountain] .maux-list,
  html body main > section[data-mountain] .about__inner {
    position: relative !important;
    z-index: 5 !important;
  }
  html body main > section[data-mountain] .swiper,
  html body main > section[data-mountain] .swiper-wrapper,
  html body main > section[data-mountain] .swiper-slide {
    z-index: 5 !important;
  }

  /* Cards : fond opaque (déjà var(--color-surface) blanc) + z-index propre.
     Ainsi la ligne passe DERRIÈRE les cartes (couvertes par leur fond)
     et reste visible dans les interstices entre les cartes. */
  html body main > section[data-mountain] .service-card,
  html body main > section[data-mountain] .stat,
  html body main > section[data-mountain] .maux-item {
    position: relative;
    z-index: 6;
    background: var(--color-surface);
  }

  /* Sur la section Héloïse (about) : pas de cartes, le portrait passe
     devant la ligne grâce à son media. */
  html body main > section[data-mountain="sage"] .about__media,
  html body main > section[data-mountain="sage"] .about__text {
    position: relative;
    z-index: 5;
  }
}


/* =====================================================================
   PASS 75 — Repositionner la ligne pour qu'elle TRAVERSE les cartes.
   ---------------------------------------------------------------------
   Avant : warm était en bas (bottom: 6%), sage en bas, sand en haut.
   Résultat : la ligne ne croisait pas les cards (cards centrées dans
   la section). L'utilisateur veut « superposé avec les cartes » =
   la ligne doit passer à travers la zone des cartes, derrière elles.
   On centre verticalement la ligne dans la section, peu importe la
   variante. Desktop ≥ 1024px uniquement.
   ===================================================================== */
@media (min-width: 1024px) {
  html body main > section[data-mountain] > svg.section-mountain,
  html body main > section[data-mountain] > .section-mountain {
    position: absolute !important;
    top: 35% !important;
    bottom: auto !important;
    left: 0 !important;
    right: auto !important;
    transform: none !important;
  }
  /* Override des positions par variante PASS 69 §A — sans transform,
     simples valeurs top:X% qui placent le haut de la SVG box.
     SVG h=504, sections h~1100-1300, on cible la zone des cards :
     warm  (services + chiffres clés)  → top 35 % (cards milieu-bas)
     sand  (À quels maux, liste icons) → top 25 %
     sage  (Héloïse texte+portrait)    → top 30 % */
  /* "Une même technique" (#soins) — cards centrées dans la section */
  html body main #soins .section-mountain--warm {
    position: absolute !important;
    top: 28% !important;
    bottom: auto !important;
    transform: none !important;
  }
  /* "Chiffres clés" (warm, mais stats grid plus haute dans la section) */
  html body main section[data-mountain="warm"]:not(#soins) .section-mountain--warm {
    position: absolute !important;
    top: 12% !important;
    bottom: auto !important;
    transform: none !important;
  }
  /* Sand — actuellement caché par PASS 69 §C, on conserve */
  html body main .section-mountain--sand {
    position: absolute !important;
    top: 25% !important;
    bottom: auto !important;
    transform: none !important;
  }
  /* Sage — Héloïse, portrait+texte */
  html body main .section-mountain--sage {
    position: absolute !important;
    top: 22% !important;
    bottom: auto !important;
    transform: none !important;
  }
}


/* =====================================================================
   PASS 77 — Section « À quels maux répondons-nous ? » :
   - retire le fond opaque ajouté par PASS 74 sur .maux-item
     (il bloquait la lecture de l'ambient-bg derrière)
   - enrichit l'effet de hover : léger lift + tint caramel + icône
     qui s'anime (couleur + scale subtil)
   ===================================================================== */
html body main section[data-mountain="sand"] .maux-item,
html body main .maux-item {
  background: transparent !important;
  transition:
    background-color 280ms cubic-bezier(0.22, 0.61, 0.36, 1),
    transform 280ms cubic-bezier(0.22, 0.61, 0.36, 1),
    box-shadow 280ms cubic-bezier(0.22, 0.61, 0.36, 1),
    border-color 280ms cubic-bezier(0.22, 0.61, 0.36, 1) !important;
  cursor: default;
}

/* L'icône phosphor à l'intérieur — animation indépendante */
html body main .maux-item i {
  transition:
    color 280ms cubic-bezier(0.22, 0.61, 0.36, 1),
    transform 380ms cubic-bezier(0.34, 1.56, 0.64, 1) !important;
  transform-origin: center;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Hover — tint caramel léger + lift + ombre douce + icône qui « réagit » */
html body main .maux-item:hover {
  background: linear-gradient(135deg,
              rgba(232, 181, 74, 0.10) 0%,
              rgba(232, 181, 74, 0.04) 60%,
              rgba(44, 185, 198, 0.06) 100%) !important;
  transform: translateY(-2px);
  box-shadow: 0 14px 30px -22px rgba(46,41,34,0.30),
              0 4px 10px -8px rgba(232, 181, 74,0.25);
  border-color: rgba(232, 181, 74, 0.35);
}
html body main .maux-item:hover i {
  color: #B8862A;
  transform: scale(1.18) rotate(-3deg);
}

/* Focus clavier — accessibilité */
html body main .maux-item:focus-within {
  background: rgba(232, 181, 74, 0.08) !important;
  outline: 2px solid rgba(232, 181, 74, 0.45);
  outline-offset: -2px;
}


/* =====================================================================
   PASS 78 — Cards témoignage (.review-card) plus compactes + bouton
   « En savoir plus » plus visible (pilule caramel discrète, avec icône).
   ===================================================================== */
html body main .review-card {
  padding: 22px 22px 18px !important;
  display: flex !important;
  flex-direction: column;
  gap: 10px;
}

/* Head plus serré, avatar légèrement plus petit */
html body main .review-card__head {
  margin-bottom: 6px !important;
  gap: 10px !important;
}
html body main .review-card__avatar {
  width: 38px !important;
  height: 38px !important;
  font-size: 0.98rem !important;
}
html body main .review-card__name { font-size: 0.95rem; }
html body main .review-card__stars { font-size: 0.85rem; letter-spacing: 1px; }

/* Texte — clamp à 3 lignes (au lieu de 4), interligne resserré,
   marge-bas pour aérer avec le bouton. */
/* IMPORTANT : la spécificité doit battre la règle ligne 9376
   `html body main .reviews-swiper.swiper .review-card__text` qui annulait
   le line-clamp. On reprend le même chemin de sélecteur.
   Le `:not(.is-expanded)` permet au bouton « En savoir plus » d'ouvrir
   le texte intégral en retirant le clamp dès que .is-expanded est posé. */
html body main .reviews-swiper.swiper .review-card:not(.is-expanded) .review-card__text,
html body main .review-card:not(.is-expanded) .review-card__text {
  -webkit-line-clamp: 4 !important;
  line-clamp: 4 !important;
  display: -webkit-box !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
  font-size: 0.92rem !important;
  line-height: 1.5 !important;
  margin: 0 !important;
}

/* Quand .is-expanded est posé sur la card, on retire le clamp avec
   la MÊME spécificité (+1 classe pour battre le clamp ci-dessus). */
html body main .reviews-swiper.swiper .review-card.is-expanded .review-card__text,
html body main .review-card.is-expanded .review-card__text {
  -webkit-line-clamp: unset !important;
  line-clamp: unset !important;
  display: block !important;
  -webkit-box-orient: unset !important;
  overflow: visible !important;
  font-size: 0.92rem !important;
  line-height: 1.5 !important;
  margin: 0 !important;
}
/* Ré-active le bouton « En savoir plus » que la même règle masquait */
html body main .reviews-swiper.swiper .review-card__more {
  display: inline-flex !important;
}

/* Bouton « En savoir plus » — pilule caramel subtile, alignée à gauche,
   avec icône flèche qui glisse au hover. Le label est piloté par
   ::before (Voir moins / En savoir plus) injecté en JS. */
html body main .review-card__more {
  align-self: flex-start;
  margin-top: 4px !important;
  padding: 6px 14px !important;
  background: rgba(232, 181, 74, 0.08) !important;
  border: 1px solid rgba(232, 181, 74, 0.30) !important;
  border-radius: 999px !important;
  color: #B8862A !important;
  font-size: 0.82rem !important;
  font-weight: 500 !important;
  text-decoration: none !important;
  letter-spacing: 0.01em;
  display: inline-flex !important;
  align-items: center;
  gap: 8px;
  transition:
    background 220ms cubic-bezier(0.22, 0.61, 0.36, 1),
    border-color 220ms cubic-bezier(0.22, 0.61, 0.36, 1),
    color 220ms cubic-bezier(0.22, 0.61, 0.36, 1),
    transform 220ms cubic-bezier(0.22, 0.61, 0.36, 1) !important;
}
html body main .review-card__more::after {
  content: "→";
  display: inline-block;
  transition: transform 280ms cubic-bezier(0.34, 1.56, 0.64, 1);
  transform: translateX(0);
  font-size: 0.95rem;
}
html body main .review-card.is-expanded .review-card__more::after {
  transform: rotate(90deg);
}
html body main .review-card__more:hover,
html body main .review-card__more:focus-visible {
  background: rgba(232, 181, 74, 0.18) !important;
  border-color: rgba(232, 181, 74, 0.55) !important;
  color: #8E5B27 !important;
  transform: translateY(-1px);
  outline: none;
}
html body main .review-card__more:hover::after {
  transform: translateX(3px);
}
html body main .review-card.is-expanded .review-card__more:hover::after {
  transform: rotate(90deg) translateX(3px);
}

/* La source Google passe sous le bouton sans grand espace */
html body main .review-card__src {
  margin-top: 8px !important;
  font-size: 0.75rem !important;
}


/* =====================================================================
   PASS 80 — Mots en italique <em> des hero banners : caramel → bleu teal.
   La palette brand contient déjà --color-primary (#2CB9C6) et
   --color-primary-strong (#2CB9C6). On les utilise pour remplacer
   --color-accent (#F1C338) sur les <em> des titres hero.
   ---------------------------------------------------------------------
   §A · Hero sur fond clair (carte mosaic, glassmorphisme)
        → teal profond #2CB9C6 pour le contraste sur fond crème
   §B · Hero sur fond image sombre (overlay scrim noir)
        → bleu clair lumineux #2CB9C6 / fallback secondary
   ===================================================================== */

/* §A · Hero light card (mosaic, qui-suis-je, etc.) */
html body main .hero .hero__title em,
html body main .hero.hero--mosaic .hero__mosaic-card .hero__title em,
html body main .hero--home .hero__mosaic-card .hero__title em,
html body .hero__mosaic-card .hero__title em {
  color: var(--color-primary-strong, #2CB9C6) !important;
  font-style: italic !important;
}

/* §B · Hero immersif avec image plein cadre + scrim sombre
   (les .hero--home / .hero[style*="--hero-bg"] où le texte est blanc) */
html body main .hero--home .hero__title em,
html body main .hero[style*="--hero-bg"] .hero__title em {
  color: var(--color-secondary, #2CB9C6) !important;
}

/* §C · Override autres hero-like (reservation, pages internes) :
   on garde le teal profond comme accent unifié. */
html body main .reservation-hero__title em {
  color: var(--color-primary-strong, #2CB9C6) !important;
}


/* =====================================================================
   PASS 81 — Overlay accessibilité sur .process__bg
   La section « Comment se passe une séance » utilise désormais
   cabinet-soin-1.png en background. On ajoute un overlay discret
   (radial + linear) pour garantir la lisibilité du texte par-dessus
   sans assombrir l'image au point de la dénaturer.
   - Le overlay est posé en ::before sur .process__bg (pour ne pas casser
     l'éventuel ::after déjà neutralisé en PASS 67).
   - Contraste cible WCAG AA pour le texte (foncé sur clair / clair sur
     foncé selon la zone).
   - pointer-events:none, aria invisible.
   ===================================================================== */
html body main .process .process__bg,
html body .process .process__bg {
  position: absolute;
  isolation: isolate;
}
html body main .process .process__bg::before,
html body .process .process__bg::before {
  content: "" !important;
  position: absolute;
  inset: 0;
  background:
    /* Zone centre / haut : très léger assombrissement pour la lisibilité du h2 */
    radial-gradient(ellipse 80% 60% at 50% 30%,
        rgba(46,41,34, 0.32) 0%,
        rgba(46,41,34, 0.18) 45%,
        rgba(46,41,34, 0.10) 70%,
        rgba(46,41,34, 0.05) 100%),
    /* Léger scrim global pour aider le contraste sans étouffer la photo */
    linear-gradient(180deg,
        rgba(46,41,34, 0.10) 0%,
        rgba(46,41,34, 0.04) 50%,
        rgba(46,41,34, 0.12) 100%);
  pointer-events: none;
  z-index: 1;
}

/* Le contenu de la section reste au-dessus de l'overlay */
html body main .process .process__inner,
html body .process .process__inner {
  position: relative;
  z-index: 2;
}

@media (max-width: 768px) {
  /* Sur mobile, l'image est plus serrée et le texte plus dense :
     on renforce légèrement l'overlay pour rester confortable. */
  html body main .process .process__bg::before,
  html body .process .process__bg::before {
    background:
      radial-gradient(ellipse 100% 70% at 50% 35%,
          rgba(46,41,34, 0.42) 0%,
          rgba(46,41,34, 0.26) 50%,
          rgba(46,41,34, 0.16) 100%),
      linear-gradient(180deg,
          rgba(46,41,34, 0.16) 0%,
          rgba(46,41,34, 0.08) 50%,
          rgba(46,41,34, 0.18) 100%);
  }
}


/* =====================================================================
   PASS 88 — HERO BANNERS + FIXED-QUOTE en CADRE arrondi détaché du
   bord de l'écran.
   ---------------------------------------------------------------------
   - margin-inline pour respirer (clamp 12-24px)
   - border-radius doux (clamp 18-28px)
   - overflow hidden pour que l'image cropée respecte le radius
   - L'effet est appliqué desktop + tablet. Sur mobile on garde un
     micro-radius / micro-margin pour ne pas étouffer le contenu.
   ===================================================================== */

/* =====================================================================
   PASS 93 — Section « Une pratique reconnue » refonte V2.
   Tout est contenu dans un PANNEAU cream rounded avec shadow soft pour
   donner l'effet visuel de la maquette (boîte distincte qui se détache
   de la section--alt). Affiliations (5 mini-cards icon + titre + sub)
   sur une ligne, diplômes (5 cards thumbnail + caption + CTA) sur une
   autre. Loupe ronde teal toujours visible sur les diplômes.
   ===================================================================== */

/* ---------- Panneau cream rounded conteneur (style maquette) ---------- */
.section--alt:has(> .container > .recognition-grid),
.section--alt:has(.recognition-grid) {
  position: relative;
}
.recognition-grid,
.recognition-diplomas {
  position: relative;
}
/* Wrapper visuel : on transforme les deux grilles + le section-cta en un
   bloc unique enveloppé via un padding + bg sur leur parent immédiat. */
.section--alt .container > .recognition-grid {
  background: linear-gradient(180deg, var(--color-surface, #FFF7DA) 0%, var(--color-bg, #FCE9AF) 100%);
  border: 1px solid var(--color-border, rgba(44, 185, 198, 0.28));
  border-radius: 26px 26px 0 0;
  padding: clamp(28px, 4vw, 44px) clamp(20px, 3vw, 36px) 18px;
  margin-top: 32px;
  border-bottom: none;
  box-shadow: 0 22px 48px -32px rgba(40,33,20, 0.22), 0 4px 14px -8px rgba(40,33,20, 0.08);
}
.section--alt .container > .recognition-diplomas {
  background: linear-gradient(180deg, var(--color-bg, #FCE9AF) 0%, var(--color-bg-alt, #F7DA85) 100%);
  border-left: 1px solid var(--color-border, rgba(44, 185, 198, 0.28));
  border-right: 1px solid var(--color-border, rgba(44, 185, 198, 0.28));
  padding: 24px clamp(20px, 3vw, 36px) clamp(28px, 4vw, 44px);
  margin-top: 0;
  position: relative;
}
.section--alt .container > .recognition-diplomas::before {
  content: ""; position: absolute;
  top: 0; left: 50%; transform: translateX(-50%);
  width: calc(100% - 32px); height: 1px;
  background: linear-gradient(90deg, transparent, var(--color-border, rgba(44, 185, 198, 0.28)) 20%, var(--color-border, rgba(44, 185, 198, 0.28)) 80%, transparent);
}
.section--alt .container > .section-cta:has(+ * .recognition-dipl),
.section--alt .container > .recognition-diplomas + .section-cta {
  background: linear-gradient(180deg, var(--color-bg-alt, #F7DA85) 0%, var(--color-surface, #FFF7DA) 100%);
  border: 1px solid var(--color-border, rgba(44, 185, 198, 0.28));
  border-top: none;
  border-radius: 0 0 26px 26px;
  padding: 24px clamp(20px, 3vw, 36px) 28px;
  margin-top: 0 !important;
  box-shadow: 0 22px 48px -32px rgba(40,33,20, 0.18);
}

/* ---------- Affiliations (ligne 1) ---------- */
.recognition-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 14px;
}
/* Adapt grid to number of cards (4 cards = 4 cols, 3 cards = 3 cols) */
.recognition-grid:has(> .recognition-aff:nth-child(4):last-child) {
  grid-template-columns: repeat(4, 1fr);
}
.recognition-grid:has(> .recognition-aff:nth-child(3):last-child) {
  grid-template-columns: repeat(3, 1fr);
}
.recognition-grid:has(> .recognition-aff:nth-child(2):last-child) {
  grid-template-columns: repeat(2, 1fr);
  max-width: 720px;
  margin-inline: auto;
}
@media (max-width: 1024px) {
  .recognition-grid,
  .recognition-grid:has(> .recognition-aff:nth-child(4):last-child) { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 640px) {
  .recognition-grid,
  .recognition-grid:has(> .recognition-aff:nth-child(4):last-child),
  .recognition-grid:has(> .recognition-aff:nth-child(3):last-child) { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 420px) {
  .recognition-grid,
  .recognition-grid:has(> .recognition-aff:nth-child(4):last-child),
  .recognition-grid:has(> .recognition-aff:nth-child(3):last-child),
  .recognition-grid:has(> .recognition-aff:nth-child(2):last-child) { grid-template-columns: 1fr; }
}
.recognition-aff {
  background: var(--color-surface, #FFF7DA);
  border: 1px solid var(--color-border, rgba(44, 185, 198, 0.28));
  border-radius: 18px;
  padding: 22px 14px 20px;
  text-align: center;
  transition: transform 0.3s var(--ease, cubic-bezier(0.22,0.61,0.36,1)),
              border-color 0.3s var(--ease, cubic-bezier(0.22,0.61,0.36,1)),
              box-shadow 0.3s var(--ease, cubic-bezier(0.22,0.61,0.36,1));
}
.recognition-aff:hover {
  transform: translateY(-3px);
  border-color: rgba(116,182,178, 0.55);
  box-shadow: 0 14px 28px -18px rgba(46,110,114, 0.22);
}
.recognition-aff__ic {
  width: 48px; height: 48px;
  border-radius: 50%;
  background:
    radial-gradient(circle at 35% 30%, rgba(255,255,255, 0.8), transparent 60%),
    linear-gradient(135deg, rgba(62,156,162, 0.15), rgba(116,182,178, 0.28));
  color: var(--color-primary-strong, #2CB9C6);
  display: grid; place-items: center;
  font-size: 22px;
  margin: 0 auto 14px;
  box-shadow: inset 0 1px 0 rgba(255,255,255, 0.6), 0 6px 14px -8px rgba(46,110,114, 0.30);
}
.recognition-aff__ic img {
  width: 26px; height: 26px;
  object-fit: contain;
}
.recognition-aff__t {
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 0.92rem;
  color: var(--color-text, #2E2922);
  margin-bottom: 5px;
  line-height: 1.2;
}
.recognition-aff__s {
  font-size: 0.78rem;
  color: var(--color-text-muted, #6E6357);
  line-height: 1.4;
}

/* ---------- Diplômes (ligne 2) ---------- */
.recognition-diplomas {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 14px;
  justify-content: center;
}
/* Desktop : adapte aux nb de diplômes, max 240px par carte, centré */
@media (min-width: 1025px) {
  .recognition-diplomas:has(> .recognition-dipl:nth-child(4):last-child),
  .recognition-diplomas:has(> .recognition-dipl:nth-child(3):last-child),
  .recognition-diplomas:has(> .recognition-dipl:nth-child(2):last-child) {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
  }
  .recognition-diplomas:has(> .recognition-dipl:nth-child(4):last-child) > .recognition-dipl,
  .recognition-diplomas:has(> .recognition-dipl:nth-child(3):last-child) > .recognition-dipl,
  .recognition-diplomas:has(> .recognition-dipl:nth-child(2):last-child) > .recognition-dipl {
    flex: 0 1 220px;
    max-width: 240px;
  }
}
@media (max-width: 1024px) {
  .recognition-diplomas {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    touch-action: pan-x;
    padding: 24px 16px clamp(28px, 4vw, 44px) 16px !important;
    gap: 12px;
    scrollbar-width: none;
    justify-content: flex-start;
  }
  .recognition-diplomas::-webkit-scrollbar { display: none; }
  .recognition-diplomas > .recognition-dipl {
    flex: 0 0 calc(50vw - 32px);
    max-width: 280px;
    scroll-snap-align: center;
  }
}
@media (max-width: 640px) {
  .recognition-diplomas > .recognition-dipl {
    flex: 0 0 calc(100vw - 80px);
    max-width: 320px;
  }
}
.recognition-dipl {
  display: flex; flex-direction: column;
  background: var(--color-surface, #FFF7DA);
  border: 1px solid var(--color-border, rgba(44, 185, 198, 0.28));
  border-radius: 18px;
  overflow: hidden;
  cursor: zoom-in;
  text-decoration: none;
  color: inherit;
  padding: 0;
  font-family: inherit;
  text-align: center;
  transition: transform 0.3s var(--ease, cubic-bezier(0.22,0.61,0.36,1)),
              box-shadow 0.3s var(--ease, cubic-bezier(0.22,0.61,0.36,1));
}
.recognition-dipl:hover {
  transform: translateY(-5px);
  box-shadow: 0 24px 48px -22px rgba(40,33,20, 0.32), 0 4px 12px -6px rgba(40,33,20, 0.10);
}
.recognition-dipl__thumb {
  position: relative;
  aspect-ratio: 4 / 5;
  background: linear-gradient(180deg, var(--color-bg-alt, #F7DA85), var(--color-surface, #FFF7DA));
  border-bottom: 1px solid var(--color-border, rgba(44, 185, 198, 0.28));
  overflow: hidden;
}
.recognition-dipl__thumb img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform 0.5s var(--ease, cubic-bezier(0.22,0.61,0.36,1));
}
.recognition-dipl:hover .recognition-dipl__thumb img {
  transform: scale(1.05);
}
.recognition-dipl__zoom {
  position: absolute; top: 12px; right: 12px;
  width: 36px; height: 36px;
  border-radius: 50%;
  background: var(--color-primary-strong, #2CB9C6);
  color: #fff;
  display: grid; place-items: center;
  font-size: 17px;
  box-shadow: 0 10px 22px -8px rgba(46,110,114, 0.55), inset 0 1px 0 rgba(255,255,255, 0.18);
  z-index: 2;
  transition: transform 0.3s var(--ease, cubic-bezier(0.22,0.61,0.36,1)),
              background 0.3s var(--ease, cubic-bezier(0.22,0.61,0.36,1));
}
.recognition-dipl:hover .recognition-dipl__zoom {
  background: var(--color-accent, #F1C338);
  transform: scale(1.08) rotate(-4deg);
}
.recognition-dipl__caption {
  padding: 14px 12px 8px;
}
.recognition-dipl__caption strong {
  display: block;
  font-weight: 600;
  font-size: 0.88rem;
  color: var(--color-text, #2E2922);
  line-height: 1.2;
}
.recognition-dipl__caption span {
  display: block;
  font-family: var(--font-heading);
  font-style: italic;
  color: var(--color-accent, #F1C338);
  font-size: 0.95rem;
  margin-top: 3px;
}
.recognition-dipl__action {
  display: flex; align-items: center; justify-content: center; gap: 7px;
  padding: 11px 12px;
  background: linear-gradient(180deg, var(--color-bg, #FCE9AF), var(--color-bg-alt, #F7DA85));
  color: var(--color-primary-strong, #2CB9C6);
  font-size: 0.8rem;
  font-weight: 600;
  border-top: 1px solid var(--color-border, rgba(44, 185, 198, 0.28));
  transition: background 0.25s var(--ease, cubic-bezier(0.22,0.61,0.36,1)),
              color 0.25s var(--ease, cubic-bezier(0.22,0.61,0.36,1));
}
.recognition-dipl:hover .recognition-dipl__action {
  background: linear-gradient(180deg, var(--color-primary-strong, #2CB9C6), #235A5E);
  color: #fff;
}


/* =====================================================================
   PASS 92 — .legal-flag déborde du container mobile.
   Le span en display:inline avec padding 4 8 + border-left + texte
   long créait une boîte plus large que le parent (le wrap inline ne
   respecte pas le max-width du parent). On passe en inline-block +
   max-width 100% + word-break.
   ===================================================================== */
.legal-flag {
  display: inline-block !important;
  max-width: 100% !important;
  box-sizing: border-box !important;
  overflow-wrap: anywhere !important;
  word-break: break-word !important;
  hyphens: auto !important;
  vertical-align: top;
}
/* Sur les paragraphes texte-aligné centre qui contiennent un legal-flag
   plus large que voulu, on garde le centrage propre. */
.reviews-band p:has(> .legal-flag),
.reviews-band__body p:has(> .legal-flag) {
  text-align: center;
  padding-inline: 4px;
}


/* =====================================================================
   PASS 91 — Mobile : touch-swipe natif sur TOUS les carrousels.
   Sans Swiper actif, on s'appuie sur scroll-snap horizontal + overflow-x
   touch pour permettre de glisser les cartes au doigt, en plus des
   flèches directionnelles qui restent fonctionnelles.
   ===================================================================== */
@media (max-width: 768px) {

  /* Carrousels : conteneur horizontal scrollable au touch */
  html body main .services-swiper.swiper,
  html body main .reviews-swiper.swiper,
  html body main .reviews-grid.swiper,
  html body main .why-swiper.swiper,
  html body main .why-grid.swiper,
  html body main .diplomas-swiper.swiper,
  html body main .diplomas-strip.swiper {
    overflow-x: auto !important;
    overflow-y: visible !important;
    scroll-snap-type: x mandatory !important;
    -webkit-overflow-scrolling: touch !important;
    scrollbar-width: none !important;
    scroll-behavior: smooth !important;
    /* Padding latéral pour qu'on voie un peu la carte suivante */
    padding: 4px 16px 18px !important;
    margin-inline: -16px !important;
    /* Touch action explicite : autorise pan-x, bloque pan-y vertical */
    touch-action: pan-x !important;
  }
  html body main .services-swiper.swiper::-webkit-scrollbar,
  html body main .reviews-swiper.swiper::-webkit-scrollbar,
  html body main .why-swiper.swiper::-webkit-scrollbar,
  html body main .why-grid.swiper::-webkit-scrollbar,
  html body main .diplomas-swiper.swiper::-webkit-scrollbar,
  html body main .diplomas-strip.swiper::-webkit-scrollbar {
    display: none !important;
    height: 0 !important;
    width: 0 !important;
  }

  /* Wrapper : flex row aligné, pas de transform Swiper résiduel */
  html body main .services-swiper.swiper > .swiper-wrapper,
  html body main .reviews-swiper.swiper > .swiper-wrapper,
  html body main .reviews-grid.swiper > .swiper-wrapper,
  html body main .why-swiper.swiper > .swiper-wrapper,
  html body main .why-grid.swiper > .swiper-wrapper,
  html body main .diplomas-swiper.swiper > .swiper-wrapper,
  html body main .diplomas-strip.swiper > .swiper-wrapper {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    gap: 14px !important;
    width: max-content !important;
    transform: none !important;
    align-items: stretch !important;
  }

  /* Slides : largeur fixe + snap centré */
  html body main .services-swiper.swiper > .swiper-wrapper > .swiper-slide,
  html body main .reviews-swiper.swiper > .swiper-wrapper > .swiper-slide,
  html body main .reviews-grid.swiper > .swiper-wrapper > .swiper-slide,
  html body main .why-swiper.swiper > .swiper-wrapper > .swiper-slide,
  html body main .why-grid.swiper > .swiper-wrapper > .swiper-slide,
  html body main .diplomas-swiper.swiper > .swiper-wrapper > .swiper-slide,
  html body main .diplomas-strip.swiper > .swiper-wrapper > .swiper-slide {
    flex: 0 0 calc(100vw - 64px) !important;
    width: calc(100vw - 64px) !important;
    max-width: 360px !important;
    scroll-snap-align: center !important;
    scroll-snap-stop: always !important;
    transform: none !important;
    margin: 0 !important;
    height: auto !important;
  }

  /* Les diplomas-strip__item étant plus petits visuels, on les rétrécit */
  html body main .diplomas-strip.swiper > .swiper-wrapper > .diplomas-strip__item.swiper-slide {
    flex: 0 0 76% !important;
    width: 76% !important;
    max-width: 280px !important;
  }
}


/* =====================================================================
   PASS 90 — Footer en CADRE glassmorphisme assorti au header.
   Reprend exactement les tokens visuels du header (PASS 13 ligne 2505) :
   - margin 14px du bord (cadre flottant comme le header)
   - border-radius 22px
   - background crème très translucide
   - backdrop-filter blur 26px + saturate
   - bordure claire + reflets intérieurs
   ===================================================================== */
html body .footer,
html body footer.footer {
  position: relative;
  margin: 14px !important;
  border-radius: 22px !important;
  background: rgba(252,245,232, 0.38) !important;
  background-image: none !important;
  -webkit-backdrop-filter: blur(26px) saturate(1.75);
          backdrop-filter: blur(26px) saturate(1.75);
  border: 1px solid rgba(255,255,255, 0.55) !important;
  box-shadow:
    0 22px 48px -24px rgba(46,41,34, 0.38),
    0 6px 14px -6px rgba(46,41,34, 0.14),
    inset 0 1px 0 rgba(255,255,255, 0.65),
    inset 0 -1px 0 rgba(255,255,255, 0.18) !important;
  overflow: hidden !important;
}

/* Padding intérieur ajusté pour respirer dans le cadre arrondi */
html body .footer {
  padding-block: 60px 32px !important;
  padding-inline: clamp(20px, 4vw, 48px) !important;
}

/* La barre de copyright bottom reste discrète, plus claire */
html body .footer .footer__bottom {
  border-top-color: rgba(44, 185, 198, 0.10) !important;
}

@media (max-width: 768px) {
  html body .footer,
  html body footer.footer {
    margin: 10px !important;
    border-radius: 18px !important;
  }
  html body .footer {
    padding-block: 44px 24px !important;
    padding-inline: 20px !important;
  }
}


/* =====================================================================
   PASS 89 — HERO MOBILE = STACKED CARD (variante V3 maquette).
   La logique est portée par animations.js → setupHeroMobileStackedCard()
   qui injecte <img.hero__photo> + force les inline styles uniquement
   sur viewport ≤ 768 px (cleanup au resize si desktop).
   Ici on garde uniquement les pseudo-éléments (handle + gradient overlay)
   qui ne peuvent pas être posés en inline.
   ===================================================================== */

@media (max-width: 768px) {

  /* Layout simple : flex column avec gap. Pas d'overlap, pas de handle,
     pas de pseudos. Image + card empilées proprement avec 12 px d'espace. */
  html body main section.hero.hero--mosaic[data-stacked],
  html body section.hero.hero--mosaic[data-stacked] {
    background-image: none !important;
    background-color: transparent !important;
    padding: 0 !important;
    padding-block: 0 !important;
    padding-inline: 0 !important;
    margin: 12px !important;
    border-radius: 0 !important;
    overflow: visible !important;
    min-height: 0 !important;
    max-height: none !important;
    height: auto !important;
    display: flex !important;
    flex-direction: column !important;
    gap: 12px !important;
    align-items: stretch !important;
    justify-content: flex-start !important;
  }

  html body main section.hero.hero--mosaic[data-stacked] > .hero__photo,
  html body section.hero.hero--mosaic[data-stacked] > .hero__photo {
    display: block !important;
    width: 100% !important;
    height: 42vh !important;
    min-height: 280px !important;
    max-height: 400px !important;
    aspect-ratio: auto !important;
    object-fit: cover !important;
    /* Cadrage réglable page par page via --hero-focus posé en inline sur la
       section .hero (ex. périnatalité : recentrer sur la mère et le bébé, qui
       sont à gauche de la photo et se faisaient couper par le recadrage).
       Sans variable → `center`, donc aucun changement sur les autres pages. */
    object-position: var(--hero-focus, center) !important;
    margin: 0 !important;
    padding: 0 !important;
    border-radius: 20px !important;
    position: relative !important;
    z-index: 1 !important;
    order: 1 !important;
    flex: none !important;
  }

  html body main section.hero.hero--mosaic[data-stacked] .hero__mosaic-card,
  html body section.hero.hero--mosaic[data-stacked] .hero__mosaic-card {
    display: block !important;
    position: relative !important;
    top: auto !important;
    right: auto !important;
    bottom: auto !important;
    left: auto !important;
    inset: auto !important;
    transform: none !important;
    margin: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    min-height: 0 !important;
    height: auto !important;
    background: var(--color-surface, #FFF7DA) !important;
    border-radius: 20px !important;
    padding: 26px 22px 24px !important;
    z-index: 2 !important;
    box-shadow: 0 12px 28px -16px rgba(40,33,20, 0.14) !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    order: 2 !important;
    flex: none !important;
  }

  /* Aucun pseudo : ni handle, ni gradient overlay. Visuel propre. */
  html body main section.hero.hero--mosaic[data-stacked]::before,
  html body main section.hero.hero--mosaic[data-stacked]::after,
  html body section.hero.hero--mosaic[data-stacked]::before,
  html body section.hero.hero--mosaic[data-stacked]::after {
    content: none !important;
    display: none !important;
  }
  /* Handle décoratif retiré — visuel propre sans pseudo */
  html body main section.hero.hero--mosaic[data-stacked] .hero__mosaic-card::before,
  html body section.hero.hero--mosaic[data-stacked] .hero__mosaic-card::before {
    content: none !important;
    display: none !important;
  }

  /* Force le texte de la carte en couleurs « light bg » (pas le scrim
     blanc du hero immersif). */
  html body main section.hero.hero--mosaic .hero__mosaic-card .hero__title,
  html body section.hero.hero--mosaic .hero__mosaic-card .hero__title {
    color: var(--color-text, #2E2922) !important;
    text-shadow: none !important;
    font-size: 1.75rem !important;
    line-height: 1.1 !important;
    margin-bottom: 10px !important;
  }
  html body main section.hero.hero--mosaic .hero__mosaic-card .hero__title em,
  html body section.hero.hero--mosaic .hero__mosaic-card .hero__title em {
    color: var(--color-primary-strong, #2CB9C6) !important;
    font-style: italic !important;
  }
  html body main section.hero.hero--mosaic .hero__mosaic-card .hero__subtitle,
  html body section.hero.hero--mosaic .hero__mosaic-card .hero__subtitle {
    color: var(--color-text-muted, #6E6357) !important;
    text-shadow: none !important;
    font-size: 0.92rem !important;
    line-height: 1.5 !important;
    margin-bottom: 16px !important;
  }
  html body main section.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow,
  html body section.hero.hero--mosaic .hero__mosaic-card .hero__eyebrow {
    color: var(--color-primary-strong, #2CB9C6) !important;
    text-shadow: none !important;
  }

  /* CTAs en colonne, full-width */
  html body main section.hero.hero--mosaic .hero__mosaic-card .hero__actions,
  html body section.hero.hero--mosaic .hero__mosaic-card .hero__actions {
    flex-direction: column !important;
    gap: 10px !important;
    margin-top: 8px !important;
  }
  html body main section.hero.hero--mosaic .hero__mosaic-card .hero__actions .btn,
  html body section.hero.hero--mosaic .hero__mosaic-card .hero__actions .btn {
    width: 100% !important;
    justify-content: center !important;
  }
}


/* §A · Hero banners — incluant explicitement .hero--mosaic / .hero--home /
   .hero--secondary qui avaient des spécificités plus fortes. */
html body main section.hero,
html body main section.hero.hero--mosaic,
html body main section.hero.hero--home,
html body main section.hero.hero--secondary,
html body section.hero {
  margin: clamp(18px, 1.8vw, 28px) clamp(18px, 1.8vw, 28px) 0 !important;
  margin-inline: clamp(18px, 1.8vw, 28px) !important;
  border-radius: clamp(20px, 2.4vw, 32px) !important;
  overflow: hidden !important;
  width: auto !important;
  box-sizing: border-box !important;
}

/* §B · Fixed-quote (parallax + image) */
html body main section.fixed-quote,
html body section.fixed-quote {
  margin: clamp(16px, 1.6vw, 24px) clamp(18px, 1.8vw, 28px) !important;
  margin-inline: clamp(18px, 1.8vw, 28px) !important;
  border-radius: clamp(20px, 2.4vw, 32px) !important;
  overflow: hidden !important;
  width: auto !important;
  box-sizing: border-box !important;
}

/* §C · Section .process (« Comment se passe une séance ») — même
   cadre arrondi + espacé des bords. */
html body main section.process,
html body section.process {
  margin: clamp(16px, 1.6vw, 24px) clamp(18px, 1.8vw, 28px) !important;
  margin-inline: clamp(18px, 1.8vw, 28px) !important;
  border-radius: clamp(20px, 2.4vw, 32px) !important;
  overflow: hidden !important;
  width: auto !important;
  box-sizing: border-box !important;
}

/* §D · Titre process entièrement BLANC (em inclus) + intro « Cinq étapes,
   à votre rythme. » en BLEU teal pour ressortir sur la photo cabinet. */
html body main section.process .section-title,
html body section.process .section-title {
  color: #FFFFFF !important;
  text-shadow: 0 2px 18px rgba(20,16,10,0.30);
}
html body main section.process .section-title em,
html body section.process .section-title em {
  color: #FFFFFF !important;
  font-style: italic !important;
  text-shadow: 0 2px 18px rgba(20,16,10,0.30);
}
/* Kicker reste blanc, intro passe en bleu teal */
html body main section.process .section-kicker,
html body section.process .section-kicker {
  color: rgba(255,255,255, 0.92) !important;
}
html body main section.process .section-intro,
html body section.process .section-intro {
  color: var(--color-primary-strong, #2CB9C6) !important;
  text-shadow: 0 2px 12px rgba(255,251,242, 0.60);
  font-weight: 500 !important;
}

/* Mobile — micro radius/margin pour cohérence sans étouffer */
@media (max-width: 768px) {
  html body main section.hero,
  html body main section.hero.hero--mosaic,
  html body main section.hero.hero--home,
  html body main section.hero.hero--secondary,
  html body section.hero {
    margin: 12px 12px 0 !important;
    margin-inline: 12px !important;
    border-radius: 22px !important;
    overflow: hidden !important;
  }
  html body main section.fixed-quote,
  html body section.fixed-quote {
    margin: 14px 12px !important;
    margin-inline: 12px !important;
    border-radius: 18px !important;
  }
  html body main section.process,
  html body section.process {
    margin: 14px 12px !important;
    margin-inline: 12px !important;
    border-radius: 18px !important;
  }
}


/* =====================================================================
   PASS 87 — Section .process « Comment se passe une séance » :
   simple overlay BEIGE LUMINEUX au-dessus de la photo. Pas de formes,
   juste un voile crème caramel pour réchauffer l'image sans déborder.
   ===================================================================== */
html body main section.process,
html body section.process {
  overflow: hidden !important;
  position: relative;
  isolation: isolate;
}

html body main section.process::before,
html body section.process::before {
  content: "" !important;
  display: block !important;
  position: absolute !important;
  inset: 0 !important;
  background:
    radial-gradient(ellipse 90% 70% at 70% 30%,
        rgba(245, 225, 168, 0.42) 0%,
        rgba(245, 225, 168, 0.20) 45%,
        rgba(245, 225, 168, 0.06) 75%,
        transparent 100%),
    linear-gradient(180deg,
        rgba(252,245,232, 0.28) 0%,
        rgba(252,245,232, 0.12) 50%,
        rgba(245, 225, 168, 0.22) 100%) !important;
  pointer-events: none !important;
  z-index: 1 !important;
  mix-blend-mode: screen;
}

/* Le contenu reste au-dessus de l'overlay */
html body main section.process .process__inner,
html body section.process .process__inner {
  position: relative;
  z-index: 2;
}


/* =====================================================================
   PASS 85 — Forme décorative warm (forme.svg) en arrière-plan
   ---------------------------------------------------------------------
   Hiérarchie z-index :
     #ambient-bg  : z-index -2  (couche la plus en arrière)
     .warm-shape  : z-index -1  (juste au-dessus de l'ambient)
     contenu      : auto / 0+   (au-dessus)
   Le SVG original utilise une palette rose / corail. Filter pour la caler
   sur le caramel brand : hue-rotate(28deg) saturate(0.85) brightness(1.02).
   ===================================================================== */

/* On enfonce #ambient-bg pour que .warm-shape s'affiche au-dessus */
html body #ambient-bg {
  z-index: -2 !important;
}

html body .warm-shape {
  position: fixed !important;
  pointer-events: none !important;
  z-index: -1 !important;
  background-image: url('../images/forme.webp') !important;  /* etait forme.svg : 1154 ko -> 60 ko, meme rendu (voile a 38-48% d'opacite) */
  background-repeat: no-repeat !important;
  background-position: center !important;
  background-size: contain !important;
  /* Saturation renforcée pour des formes safran vives, non ternes */
  filter: saturate(1.35) brightness(1.03) contrast(1.05);
  opacity: 1;
  will-change: transform;
  display: block !important;
}

html body .warm-shape--tr {
  top: -6vh !important;
  right: -14vw !important;
  width: 78vw !important;
  height: 70vh !important;
  transform: rotate(-8deg);
}
html body .warm-shape--bl {
  bottom: -10vh !important;
  left: -18vw !important;
  width: 62vw !important;
  height: 58vh !important;
  transform: rotate(168deg);
  opacity: 0.72;
}

@media (max-width: 1024px) {
  html body .warm-shape--tr { width: 95vw !important; height: 62vh !important; opacity: 0.48; }
  html body .warm-shape--bl { width: 85vw !important; height: 52vh !important; opacity: 0.38; }
}
@media (max-width: 768px) {
  html body .warm-shape--tr {
    top: -3vh !important; right: -25vw !important;
    width: 120vw !important; height: 50vh !important;
    opacity: 0.42;
  }
  html body .warm-shape--bl {
    bottom: -6vh !important; left: -30vw !important;
    width: 110vw !important; height: 42vh !important;
    opacity: 0.32;
  }
}

@media (prefers-reduced-motion: reduce) {
  html body .warm-shape { will-change: auto; }
}


/* =====================================================================
   PASS 84 — Hauteur réduite des cards « Une même technique, quatre
   champs d'action » (#soins .service-card) sur la page d'accueil.
   - Padding vertical resserré (40px → 24px desktop, 28px → 20px tablet)
   - Icône légèrement plus petite + marges resserrées
   - Titre / texte interlignes réduits
   - Lien plus haut, moins de margin-top
   Touche uniquement la section homepage #soins pour ne pas impacter
   les autres .service-card.
   ===================================================================== */
html body main #soins .service-card,
html body #soins .service-card {
  padding: 24px 22px 22px !important;
  gap: 0;
}
html body main #soins .service-card__icon,
html body #soins .service-card__icon {
  width: 42px !important;
  height: 42px !important;
  font-size: 18px !important;
  margin-bottom: 12px !important;
}
html body main #soins .service-card__title,
html body #soins .service-card__title {
  font-size: 1.15rem !important;
  line-height: 1.25 !important;
  margin-bottom: 8px !important;
}
html body main #soins .service-card__text,
html body #soins .service-card__text {
  font-size: 0.92rem !important;
  line-height: 1.45 !important;
  margin: 0 !important;
}
html body main #soins .service-card__link,
html body #soins .service-card__link {
  margin-top: 14px !important;
  font-size: 0.86rem !important;
}

@media (max-width: 768px) {
  html body main #soins .service-card,
  html body #soins .service-card {
    padding: 22px 20px 20px !important;
  }
  html body main #soins .service-card__icon,
  html body #soins .service-card__icon {
    width: 38px !important;
    height: 38px !important;
    margin-bottom: 10px !important;
  }
}


/* =====================================================================
   PASS 86 — Oneline .fixed-quote : plus grosse, ancrée à droite du
   viewport, animée R→L (forcé en JS pour variant cream).
   ---------------------------------------------------------------------
   - Trait SVG nettement plus présent : stroke-width 2.4 (desktop)
   - Position : ancrée right: 0 de la SECTION (pas du bloc texte) :
     le mountain occupe la moitié droite (jusqu'à 60vw), indépendante
     du flow du blockquote qui reste centré dans son container.
   - Verticalement centré pour gagner en présence (transform translateY).
   - Anim R→L imposée côté JS (cf. animations.js mountainShapes).
   ===================================================================== */
html body main section.fixed-quote .section-mountain__line,
html body section.fixed-quote .section-mountain__line {
  stroke-width: 2.4 !important;
  opacity: 0.92 !important;
}

/* §C · Layout 2 colonnes : texte GAUCHE / oneline DROITE.
   IMPORTANT : on doit battre PASS 75 (`html body main > section[data-mountain]
   > svg.section-mountain`) qui forçait left:0 / right:auto sur toutes les
   sections [data-mountain]. On utilise le SAME pattern (> direct + attribut
   + types) en ajoutant `.fixed-quote` pour gagner +1 classe. */
html body main section.fixed-quote .container,
html body section.fixed-quote .container {
  display: flex !important;
  align-items: center;
  justify-content: flex-start;
  min-height: inherit;
}
html body main section.fixed-quote blockquote,
html body section.fixed-quote blockquote {
  max-width: 48% !important;
  margin: 0 !important;
  text-align: left;
  flex: 0 1 auto;
}

html body main > section.fixed-quote[data-mountain] > svg.section-mountain,
html body main > section.fixed-quote[data-mountain] > .section-mountain,
html body > section.fixed-quote[data-mountain] > svg.section-mountain,
html body > section.fixed-quote[data-mountain] > .section-mountain {
  left: auto !important;
  right: clamp(20px, 4vw, 60px) !important;
  top: 50% !important;
  bottom: auto !important;
  transform: translateY(-50%) !important;
  width: 46% !important;
  max-width: 620px !important;
  height: auto !important;
  max-height: 220px !important;
  opacity: 0.92 !important;
  pointer-events: none !important;
}

@media (max-width: 1024px) {
  html body main section.fixed-quote blockquote,
  html body section.fixed-quote blockquote {
    max-width: 52% !important;
  }
  html body main > section.fixed-quote[data-mountain] > svg.section-mountain,
  html body main > section.fixed-quote[data-mountain] > .section-mountain {
    width: 42% !important;
    max-width: 42% !important;
    max-height: 160px !important;
  }
  html body main section.fixed-quote .section-mountain__line,
  html body section.fixed-quote .section-mountain__line {
    stroke-width: 2.2 !important;
  }
}

@media (max-width: 768px) {
  /* Mobile : on revient en mode empilé — container redevient block,
     blockquote pleine largeur, oneline en bas. */
  html body main section.fixed-quote .container,
  html body section.fixed-quote .container {
    display: block !important;
  }
  html body main section.fixed-quote blockquote,
  html body section.fixed-quote blockquote {
    max-width: 100% !important;
  }
  html body main > section.fixed-quote[data-mountain] > svg.section-mountain,
  html body main > section.fixed-quote[data-mountain] > .section-mountain {
    top: auto !important;
    bottom: 24px !important;
    right: 0 !important;
    left: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    max-height: 90px !important;
    transform: none !important;
    opacity: 0.85 !important;
  }
  html body main section.fixed-quote .section-mountain__line,
  html body section.fixed-quote .section-mountain__line {
    stroke-width: 1.8 !important;
    opacity: 0.82 !important;
  }
}


/* =====================================================================
   PASS 82 — Retirer l'overlay scrim sur la section "Mon approche"
   (.fixed-quote) et autres sections du même type avec image en
   background. L'overlay rendait l'image moins visible : on le neutralise.
   La citation reste lisible car la photo (lac-montagne / soin-crane)
   est suffisamment douce et le texte porte sa propre lisibilité via
   typo + couleur claire.
   Sections concernées : .fixed-quote partout (index.html + pages soin).
   ===================================================================== */
html body main section.fixed-quote::after,
html body section.fixed-quote::after,
html body main section.fixed-quote::before,
html body section.fixed-quote::before {
  background: none !important;
  background-image: none !important;
  content: none !important;
  display: none !important;
}




/* =====================================================================
   PASS 94 — Sous-segments perinatalite : composant responsive
   « tabs sticky mobile + split vertical desktop ».
   Remplace les 3 sections (01 bebes, 02 personnes enceintes, 03 lien)
   par un seul composant a onglets.
   - Desktop (>=900px) : rail sidebar caramel a gauche + panel droite.
   - Mobile (<900px) : tabs pill sticky en haut + panel + CTA.
   ===================================================================== */
.perinat-tabs{
  display:grid;
  grid-template-columns:320px 1fr;
  gap:0;
  background:#FFF7DA;
  border-radius:28px;
  box-shadow:
    0 30px 80px -30px rgba(46,41,34,0.2),
    0 0 0 1px rgba(46,41,34,0.08);
  overflow:hidden;
  min-height:600px;
}
.perinat-tabs__rail{
  background:
    radial-gradient(circle at 20% 90%, rgba(232, 181, 74,0.18) 0%, transparent 60%),
    linear-gradient(180deg, #F7DA85 0%, #EFE0C2 100%);
  padding:40px 28px;
  display:flex;
  flex-direction:column;
  border-right:1px solid rgba(44, 185, 198, 0.08);
}
.perinat-tabs__kicker{
  font-size:11px;
  letter-spacing:1.6px;
  text-transform:uppercase;
  color:#B8862A;
  font-weight:600;
  margin-bottom:14px;
}
.perinat-tabs__rail-title{
  font-family:var(--font-heading, 'Cormorant Garamond', serif);
  font-size:30px;
  line-height:1.15;
  font-weight:600;
  color:#2CB9C6;
  letter-spacing:-0.4px;
  margin:0 0 10px;
}
.perinat-tabs__rail-title em{
  font-style:italic;
  color:#B8862A;
}
.perinat-tabs__rail-intro{
  font-size:13.5px;
  color:#6E6357;
  line-height:1.6;
  margin:0 0 28px;
}
.perinat-tabs__tablist{
  display:flex;
  flex-direction:column;
  gap:8px;
  margin-bottom:auto;
}
.perinat-tabs__tab{
  display:flex;
  align-items:center;
  gap:14px;
  padding:14px 18px;
  border-radius:14px;
  background:rgba(255,251,242,0.55);
  border:1px solid transparent;
  font-family:var(--font-body, 'Manrope', sans-serif);
  font-size:14px;
  font-weight:600;
  color:#6E6357;
  cursor:pointer;
  text-align:left;
  transition:background 0.2s, color 0.2s, border-color 0.2s, box-shadow 0.25s;
  width:100%;
}
.perinat-tabs__tab-num{
  font-family:var(--font-heading, 'Cormorant Garamond', serif);
  font-size:18px;
  font-style:italic;
  color:#B8862A;
  font-weight:600;
  width:24px;
  flex-shrink:0;
}
.perinat-tabs__tab-label{
  flex:1;
  line-height:1.25;
}
.perinat-tabs__tab-arrow{
  color:#9A8E7E;
  opacity:0;
  transform:translateX(-4px);
  transition:opacity 0.25s, transform 0.25s, color 0.25s;
  font-size:18px;
  flex-shrink:0;
}
.perinat-tabs__tab:hover{
  background:#FFF7DA;
  color:#2CB9C6;
  border-color:rgba(44, 185, 198, 0.14);
}
.perinat-tabs__tab.is-active{
  background:linear-gradient(135deg, #2CB9C6, #2CB9C6);
  color:#FFF7DA;
  border-color:transparent;
  box-shadow:0 8px 22px rgba(31,82,86,0.28);
}
.perinat-tabs__tab.is-active .perinat-tabs__tab-num{
  color:rgba(255,251,242,0.8);
}
.perinat-tabs__tab.is-active .perinat-tabs__tab-arrow{
  opacity:1;
  transform:translateX(0);
  color:#FFF7DA;
}
.perinat-tabs__rail-foot{
  margin-top:28px;
  padding-top:24px;
  border-top:1px solid rgba(44, 185, 198, 0.10);
  font-size:11.5px;
  color:#9A8E7E;
  line-height:1.55;
}

.perinat-tabs__panels{position:relative}
.perinat-tabs__panel{
  display:none;
  padding:48px 56px;
  animation:perinatFadeIn 0.32s ease;
}
.perinat-tabs__panel.is-active{display:block}
.perinat-tabs__panel[hidden]{display:none}
.perinat-tabs__panel.is-active[hidden]{display:block}
@keyframes perinatFadeIn{
  from{opacity:0; transform:translateY(8px)}
  to{opacity:1; transform:translateY(0)}
}
.perinat-tabs__panel-head{margin-bottom:32px}
.perinat-tabs__panel-num{
  display:inline-block;
  font-family:var(--font-heading, 'Cormorant Garamond', serif);
  font-size:14px;
  font-style:italic;
  color:#B8862A;
  letter-spacing:2px;
  margin-bottom:8px;
}
.perinat-tabs__panel-title{
  font-family:var(--font-heading, 'Cormorant Garamond', serif);
  font-size:40px;
  line-height:1.1;
  font-weight:600;
  color:#2CB9C6;
  letter-spacing:-0.6px;
  margin:0;
}
.perinat-tabs__panel-title em{
  font-style:italic;
  color:#B8862A;
}
.perinat-tabs__panel-intro{
  margin:12px 0 0;
  font-size:15px;
  color:#6E6357;
  line-height:1.6;
  max-width:520px;
  font-style:italic;
}

.perinat-tabs__grid{
  display:grid;
  grid-template-columns:repeat(2, 1fr);
  gap:16px;
  margin:32px 0 28px;
}
.perinat-tabs__card{
  padding:22px 20px;
  background:linear-gradient(180deg, #FFF7DA 0%, #FCE9AF 100%);
  border:1px solid rgba(44, 185, 198, 0.08);
  border-radius:16px;
  transition:transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
  box-shadow:0 1px 2px rgba(46,41,34,0.03);
}
.perinat-tabs__card:hover{
  border-color:#2CB9C6;
  transform:translateY(-2px);
  box-shadow:0 10px 28px -10px rgba(46,41,34,0.12);
}
.perinat-tabs__card--wide{grid-column:span 2}
.perinat-tabs__card-head{
  display:flex;
  align-items:center;
  gap:12px;
  margin-bottom:8px;
}
.perinat-tabs__card-icon{
  width:36px;
  height:36px;
  border-radius:10px;
  background:linear-gradient(135deg, rgba(62,156,162,0.14), rgba(116,182,178,0.24));
  color:#2CB9C6;
  display:grid;
  place-items:center;
  font-size:17px;
  flex-shrink:0;
}
.perinat-tabs__card-title{
  font-family:var(--font-body, 'Manrope', sans-serif);
  font-size:14.5px;
  font-weight:600;
  color:#2E2922;
  line-height:1.25;
  margin:0;
}
.perinat-tabs__card-sub{
  font-size:12.5px;
  color:#6E6357;
  line-height:1.55;
  margin:0;
}

.perinat-tabs__cta{
  display:inline-flex;
  align-items:center;
  gap:10px;
  padding:14px 26px;
  border-radius:30px;
  background:linear-gradient(135deg, #2CB9C6, #2CB9C6);
  color:#FFF7DA !important;
  font-family:var(--font-body, 'Manrope', sans-serif);
  font-size:14px;
  font-weight:600;
  text-decoration:none;
  box-shadow:0 8px 22px rgba(31,82,86,0.28);
  transition:transform 0.2s, box-shadow 0.2s;
  letter-spacing:0.2px;
}
.perinat-tabs__cta:hover{
  transform:translateY(-2px);
  box-shadow:0 12px 30px rgba(31,82,86,0.35);
}
.perinat-tabs__cta i{font-size:18px}
.perinat-tabs__cta-hint{
  margin:10px 0 0;
  font-size:12px;
  color:#9A8E7E;
  font-style:italic;
}

/* MOBILE <=900px : pile rail + tabs sticky + panel */
@media (max-width:900px){
  .perinat-tabs{
    display:flex;
    flex-direction:column;
    border-radius:22px;
    min-height:0;
  }
  .perinat-tabs__rail{
    padding:24px 22px 8px;
    border-right:none;
    border-bottom:1px solid rgba(44, 185, 198, 0.08);
  }
  .perinat-tabs__rail-title{font-size:24px}
  .perinat-tabs__rail-intro{font-size:13px; margin-bottom:0}
  .perinat-tabs__tablist{
    flex-direction:row;
    gap:6px;
    overflow-x:auto;
    padding:14px 16px;
    margin:14px -22px -8px;
    background:rgba(255,251,242,0.96);
    backdrop-filter:blur(10px);
    -webkit-backdrop-filter:blur(10px);
    border-top:1px solid rgba(44, 185, 198, 0.08);
    border-bottom:1px solid rgba(44, 185, 198, 0.08);
    position:sticky;
    top:64px;
    z-index:5;
    scrollbar-width:none;
  }
  .perinat-tabs__tablist::-webkit-scrollbar{display:none}
  .perinat-tabs__tab{
    flex-direction:column;
    align-items:flex-start;
    gap:2px;
    padding:10px 14px;
    border-radius:14px;
    flex-shrink:0;
    min-width:auto;
    font-size:12px;
    text-align:left;
    border:1px solid rgba(44, 185, 198, 0.10);
    background:#FFF7DA;
  }
  .perinat-tabs__tab-num{font-size:11px; color:#B8862A; width:auto}
  .perinat-tabs__tab-label{
    font-size:12px;
    line-height:1.2;
    white-space:nowrap;
  }
  .perinat-tabs__tab-arrow{display:none}
  .perinat-tabs__tab.is-active{
    background:linear-gradient(135deg, #2CB9C6, #2CB9C6);
  }
  .perinat-tabs__tab.is-active .perinat-tabs__tab-num{
    color:rgba(255,251,242,0.8);
  }
  .perinat-tabs__rail-foot{display:none}

  .perinat-tabs__panel{padding:24px 20px 28px}
  .perinat-tabs__panel-title{font-size:26px; letter-spacing:-0.3px}
  .perinat-tabs__panel-intro{
    font-size:13.5px;
    padding:12px 14px;
    background:rgba(255,251,242,0.7);
    border-left:3px solid #F1C338;
    border-radius:0 8px 8px 0;
    margin-top:14px;
  }
  .perinat-tabs__grid{
    grid-template-columns:1fr;
    gap:10px;
    margin:22px 0 20px;
  }
  .perinat-tabs__card{
    padding:16px 16px;
    border-radius:14px;
  }
  .perinat-tabs__card--wide{grid-column:span 1}
  .perinat-tabs__card-icon{width:34px; height:34px}
  .perinat-tabs__card-title{font-size:13.5px}
  .perinat-tabs__card-sub{font-size:12px}
  .perinat-tabs__cta{
    display:flex;
    justify-content:center;
    width:100%;
    padding:14px 18px;
    border-radius:14px;
  }
}

/* Tablet 901-1100px */
@media (min-width:901px) and (max-width:1100px){
  .perinat-tabs{grid-template-columns:280px 1fr}
  .perinat-tabs__rail{padding:32px 22px}
  .perinat-tabs__panel{padding:36px 36px}
  .perinat-tabs__panel-title{font-size:32px}
  .perinat-tabs__grid{gap:12px}
}


/* =====================================================================
   PASS 96 — Sections .process SANS image de fond : titre en bleu teal
   (au lieu de blanc). Cible les pages soin sub-pages ou .process
   n'a pas de .process__bg enfant.
   ===================================================================== */
html body main section.process:not(:has(.process__bg)) .section-title,
html body section.process:not(:has(.process__bg)) .section-title,
html body main section.process:not(:has(.process__bg)) .section-title em,
html body section.process:not(:has(.process__bg)) .section-title em {
  color: var(--color-primary-strong, #2CB9C6) !important;
  text-shadow: none !important;
}
html body main section.process:not(:has(.process__bg)) .section-kicker,
html body section.process:not(:has(.process__bg)) .section-kicker {
  color: rgba(46, 110, 114, 0.7) !important;
}
html body main section.process:not(:has(.process__bg)) .section-intro,
html body section.process:not(:has(.process__bg)) .section-intro {
  color: var(--color-text-muted, #6E6357) !important;
  text-shadow: none !important;
  font-weight: 400 !important;
}




/* =====================================================================
   PASS 97 — Bon cadeau : section unique fusionnée avec onglets
   switchables (Occasions / Conditions).
   ===================================================================== */
.bc-tabs{
  background:linear-gradient(180deg, var(--color-surface, #FFF7DA) 0%, var(--color-bg, #FCE9AF) 100%);
  border:1px solid var(--color-border, rgba(44, 185, 198, 0.08));
  border-radius:24px;
  padding:clamp(22px, 3vw, 32px) clamp(20px, 3vw, 36px);
  box-shadow:0 22px 48px -32px rgba(40,33,20,0.22), 0 4px 14px -8px rgba(40,33,20,0.08);
  margin-top:18px;
}
.bc-tabs__nav{
  display:flex;
  justify-content:center;
  gap:8px;
  padding:8px;
  background:rgba(46,41,34,0.04);
  border-radius:30px;
  width:fit-content;
  margin:0 auto 22px;
}
.bc-tabs__tab{
  padding:11px 24px;
  border:none;
  border-radius:24px;
  background:transparent;
  cursor:pointer;
  font-family:var(--font-body, 'Manrope', sans-serif);
  font-size:13.5px;
  font-weight:600;
  color:var(--color-text-muted, #6E6357);
  transition:background 0.25s, color 0.25s, box-shadow 0.25s;
  display:inline-flex;
  align-items:center;
  gap:8px;
  letter-spacing:0.2px;
}
.bc-tabs__tab i{font-size:18px}
.bc-tabs__tab:hover:not(.is-active){
  background:rgba(255,251,242,0.6);
  color:var(--color-primary-strong, #2CB9C6);
}
.bc-tabs__tab.is-active{
  background:linear-gradient(135deg, #2CB9C6, #2CB9C6);
  color:var(--color-surface, #FFF7DA);
  box-shadow:0 6px 16px rgba(31,82,86,0.25);
}
.bc-tabs__label{}
.bc-tabs__count{
  background:rgba(46,41,34,0.08);
  color:var(--color-text-muted, #9A8E7E);
  padding:2px 9px;
  border-radius:30px;
  font-size:11px;
  font-weight:600;
}
.bc-tabs__tab.is-active .bc-tabs__count{
  background:rgba(255,251,242,0.18);
  color:rgba(255,251,242,0.92);
}

.bc-tabs__panel{display:none}
.bc-tabs__panel.is-active{display:block;animation:bcFade 0.32s ease}
.bc-tabs__panel[hidden]{display:none}
.bc-tabs__panel.is-active[hidden]{display:block}
@keyframes bcFade{
  from{opacity:0;transform:translateY(6px)}
  to{opacity:1;transform:translateY(0)}
}

/* --- Grille Occasions (3 cols desktop) --- */
.bc-occasions{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  gap:14px;
}
.bc-occasion{
  padding:22px 18px;
  border-radius:16px;
  background:linear-gradient(180deg, var(--color-surface, #FFF7DA) 0%, var(--color-bg, #FCE9AF) 100%);
  border:1px solid var(--color-border, rgba(44, 185, 198, 0.08));
  text-align:center;
  transition:transform 0.3s, box-shadow 0.3s, border-color 0.3s;
}
.bc-occasion:hover{
  transform:translateY(-3px);
  box-shadow:0 10px 24px -10px rgba(46,41,34,0.12);
  border-color:var(--color-accent-soft, rgba(232, 181, 74,0.40));
}
.bc-occasion__icon{
  width:46px;
  height:46px;
  border-radius:50%;
  background:linear-gradient(135deg, rgba(232, 181, 74,0.20), rgba(232, 181, 74,0.36));
  color:var(--color-accent-strong, #B8862A);
  display:grid;
  place-items:center;
  font-size:22px;
  margin:0 auto 12px;
}
.bc-occasion__title{
  font-family:var(--font-body, 'Manrope', sans-serif);
  font-size:14px;
  font-weight:600;
  color:var(--color-text, #2E2922);
  margin:0 0 4px;
  line-height:1.3;
}
.bc-occasion__text{
  font-size:12.5px;
  color:var(--color-text-muted, #6E6357);
  line-height:1.5;
  margin:0;
}

/* --- Grille Conditions (2 cols desktop) --- */
.bc-conditions{
  display:grid;
  grid-template-columns:repeat(2, 1fr);
  gap:14px;
}
.bc-condition{
  padding:20px 22px;
  border-radius:16px;
  background:linear-gradient(180deg, var(--color-surface, #FFF7DA) 0%, var(--color-bg, #FCE9AF) 100%);
  border:1px solid var(--color-border, rgba(44, 185, 198, 0.08));
  display:flex;
  gap:14px;
  align-items:flex-start;
}
.bc-condition__icon{
  width:40px;
  height:40px;
  border-radius:12px;
  background:linear-gradient(135deg, rgba(62,156,162,0.14), rgba(116,182,178,0.24));
  color:var(--color-primary-strong, #2CB9C6);
  display:grid;
  place-items:center;
  font-size:18px;
  flex-shrink:0;
}
.bc-condition__body{flex:1;min-width:0}
.bc-condition__title{
  font-family:var(--font-body, 'Manrope', sans-serif);
  font-size:14px;
  font-weight:600;
  color:var(--color-text, #2E2922);
  margin:0 0 3px;
  line-height:1.3;
}
.bc-condition__text{
  font-size:12.5px;
  color:var(--color-text-muted, #6E6357);
  line-height:1.55;
  margin:0;
}
.bc-condition__text a{
  color:var(--color-accent-strong, #B8862A);
  text-decoration:underline;
}

/* --- Responsive --- */
@media (max-width: 768px){
  .bc-tabs{padding:24px 18px;border-radius:20px}
  .bc-tabs__nav{
    width:100%;
    flex-direction:row;
    border-radius:18px;
    padding:6px;
  }
  .bc-tabs__tab{
    flex:1;
    justify-content:center;
    padding:10px 12px;
    font-size:12.5px;
  }
  .bc-occasions{grid-template-columns:repeat(2, 1fr);gap:10px}
  .bc-conditions{grid-template-columns:1fr;gap:10px}
}
@media (max-width: 480px){
  .bc-occasions{grid-template-columns:1fr}
}


/* =====================================================================
   PASS 98 — Média : filtre vidéos par catégorie (dropdown select).
   Composant .video-filter qui regroupe dropdown + compteur live.
   ===================================================================== */
.video-filter{
  margin:24px auto 28px;
  max-width:520px;
  display:flex;
  flex-direction:column;
  gap:10px;
  position:relative;
  z-index:50;
  isolation:isolate;
}
.video-filter__dropdown{
  background:var(--color-surface, #FFF7DA);
  border:1px solid var(--color-border, rgba(44, 185, 198, 0.14));
  border-radius:14px;
  padding:12px 14px;
  display:flex;
  align-items:center;
  gap:12px;
  cursor:pointer;
  box-shadow:0 4px 14px -6px rgba(46,41,34,0.10);
  transition:border-color 0.2s, box-shadow 0.2s;
  user-select:none;
}
.video-filter__dropdown:hover{
  border-color:var(--color-primary-light, #2CB9C6);
  box-shadow:0 8px 20px -8px rgba(46,41,34,0.14);
}
.video-filter__icon{
  width:38px;
  height:38px;
  border-radius:11px;
  background:linear-gradient(135deg, rgba(232, 181, 74,0.20), rgba(232, 181, 74,0.36));
  color:var(--color-accent-strong, #B8862A);
  display:grid;
  place-items:center;
  font-size:18px;
  flex-shrink:0;
}
.video-filter__label{flex:1;min-width:0}
.video-filter__hint{
  font-size:10px;
  text-transform:uppercase;
  letter-spacing:1.4px;
  color:var(--color-text-muted, #9A8E7E);
  font-weight:600;
  margin-bottom:2px;
}
.video-filter__value{
  font-family:var(--font-heading, 'Cormorant Garamond', serif);
  font-size:19px;
  font-weight:600;
  color:var(--color-primary-strong, #2CB9C6);
  line-height:1.1;
}
.video-filter__caret{
  color:var(--color-text-muted, #9A8E7E);
  font-size:20px;
  transition:transform 0.25s;
}
.video-filter__dropdown[aria-expanded="true"] .video-filter__caret{
  transform:rotate(180deg);
}
.video-filter__options{
  position:absolute;
  top:64px;
  left:0;
  right:0;
  z-index:20;
  background:var(--color-surface, #FFF7DA);
  border:1px solid var(--color-border, rgba(44, 185, 198, 0.14));
  border-radius:14px;
  box-shadow:0 18px 36px -16px rgba(46,41,34,0.20), 0 4px 14px -6px rgba(46,41,34,0.10);
  overflow:hidden;
  animation:vfFade 0.2s ease;
}
.video-filter__options[hidden]{display:none}
@keyframes vfFade{
  from{opacity:0; transform:translateY(-6px)}
  to{opacity:1; transform:translateY(0)}
}
.video-filter__opt{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:12px 16px;
  font-size:13.5px;
  color:var(--color-text, #2E2922);
  cursor:pointer;
  border-bottom:1px solid var(--color-border, rgba(44, 185, 198, 0.08));
  transition:background 0.18s;
}
.video-filter__opt:last-child{border-bottom:none}
.video-filter__opt:hover{
  background:linear-gradient(90deg, rgba(252,245,232,0.7), transparent);
}
.video-filter__opt.is-active{
  background:linear-gradient(90deg, rgba(46,110,114,0.10), transparent);
  color:var(--color-primary-strong, #2CB9C6);
  font-weight:600;
}
.video-filter__opt-count{
  font-size:11px;
  color:var(--color-text-muted, #9A8E7E);
  background:rgba(46,41,34,0.08);
  padding:2px 9px;
  border-radius:30px;
  flex-shrink:0;
  font-weight:600;
}
.video-filter__opt.is-active .video-filter__opt-count{
  background:rgba(46,110,114,0.16);
  color:var(--color-primary-strong, #2CB9C6);
}
.video-filter__count{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:6px 14px;
  border-radius:30px;
  background:rgba(46,110,114,0.10);
  color:var(--color-primary-strong, #2CB9C6);
  font-size:12px;
  font-weight:600;
  width:fit-content;
  align-self:flex-start;
}
.video-filter__count i{font-size:14px}

/* Masquage des vidéos filtrées */
.video-grid > [data-vf-cat][hidden]{display:none !important}

/* Animation grille filtrée */
.video-grid > [data-vf-cat]{
  animation:vfShow 0.32s ease both;
}
@keyframes vfShow{
  from{opacity:0; transform:translateY(6px)}
  to{opacity:1; transform:translateY(0)}
}

@media (max-width: 640px){
  .video-filter{margin:18px auto 22px}
  .video-filter__dropdown{padding:10px 12px}
  .video-filter__value{font-size:17px}
}


/* =====================================================================
   PASS 99 — Vidéos en carrousel horizontal sur TOUS les viewports avec
   flèches directionnelles below grille.
   ===================================================================== */
.video-carousel{
  position:relative;
}
/* Override la grille pour qu'elle soit horizontale sur desktop aussi */
.video-carousel > .video-grid{
  display:flex !important;
  grid-template-columns:none !important;
  overflow-x:auto;
  scroll-snap-type:x mandatory;
  gap:18px !important;
  padding:4px 4px 18px !important;
  margin-inline:0 !important;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
  scroll-behavior:smooth;
}
.video-carousel > .video-grid::-webkit-scrollbar{display:none}
.video-carousel > .video-grid > div{
  flex:0 0 calc((100% - 3 * 18px) / 4);
  scroll-snap-align:start;
  scroll-snap-stop:always;
  min-width:0;
}
@media (max-width: 1100px){
  .video-carousel > .video-grid > div{
    flex:0 0 calc((100% - 2 * 18px) / 3);
  }
}
@media (max-width: 768px){
  .video-carousel > .video-grid{
    gap:14px !important;
    padding:4px 4px 14px !important;
  }
  .video-carousel > .video-grid > div{
    flex:0 0 calc((100% - 18px) / 2);
  }
}
@media (max-width: 480px){
  .video-carousel > .video-grid > div{
    flex:0 0 70%;
    scroll-snap-align:center;
  }
}

/* Boutons prev/next */
.video-carousel__btn{
  position:absolute;
  top:50%;
  transform:translateY(-50%);
  width:44px;
  height:44px;
  border-radius:50%;
  border:1px solid var(--color-border, rgba(44, 185, 198, 0.10));
  background:rgba(255,251,242,0.96);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
  color:var(--color-primary-strong, #2CB9C6);
  cursor:pointer;
  display:grid;
  place-items:center;
  font-size:20px;
  z-index:10;
  box-shadow:0 6px 16px -6px rgba(46,41,34,0.18), 0 2px 6px rgba(46,41,34,0.08);
  transition:background 0.2s, transform 0.2s, opacity 0.25s;
}
.video-carousel__btn:hover:not(:disabled){
  background:var(--color-primary-strong, #2CB9C6);
  color:var(--color-surface, #FFF7DA);
  transform:translateY(-50%) scale(1.08);
}
.video-carousel__btn:disabled{
  opacity:0.30;
  cursor:not-allowed;
}
.video-carousel__btn--prev{left:-22px}
.video-carousel__btn--next{right:-22px}

/* Mobile + tablette : flèches en pied au CENTRE, side by side */
@media (max-width: 768px){
  .video-carousel{
    padding-bottom:64px;
  }
  .video-carousel__btn{
    position:absolute;
    top:auto;
    bottom:8px;
    transform:none;
    width:44px;
    height:44px;
    font-size:18px;
  }
  .video-carousel__btn:hover:not(:disabled){transform:scale(1.06)}
  .video-carousel__btn--prev{
    left:50%;
    margin-left:-52px;
  }
  .video-carousel__btn--next{
    right:50%;
    margin-right:-52px;
  }
}
@media (max-width: 480px){
  .video-carousel__btn{width:42px;height:42px}
}

/* ---- Blog filter dropdown ---- */
.blog-filter-wrap{
  position:relative;
  max-width:340px;
  margin:0 auto 44px;
  display:flex;
  justify-content:center;
  z-index:60;
}
.blog-filter-wrap.is-open{z-index:200}
.blog-filter__toggle{
  width:100%;
  display:inline-flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  padding:14px 22px;
  border-radius:999px;
  background:#FFFFFF;
  border:1px solid rgba(44,185,198,0.32);
  color:#1E2938;
  font-family:'Manrope',sans-serif;
  font-size:0.98rem;
  font-weight:500;
  cursor:pointer;
  box-shadow:0 8px 24px -18px rgba(30,41,56,0.35);
  transition:border-color .2s ease,box-shadow .2s ease,background .2s ease;
}
.blog-filter__toggle:hover{
  border-color:#2CB9C6;
  box-shadow:0 12px 32px -18px rgba(44,185,198,0.5);
}
.blog-filter__label{
  display:inline-flex;
  align-items:center;
  gap:10px;
  color:inherit;
}
.blog-filter__label i{color:#F1C338;font-size:1.15rem}
.blog-filter__caret{
  color:#2CB9C6;
  font-size:1rem;
  transition:transform .25s ease;
}
.blog-filter-wrap.is-open .blog-filter__caret{transform:rotate(180deg)}
.blog-filter__menu{
  position:absolute;
  top:calc(100% + 8px);
  left:0;
  right:0;
  margin:0;
  padding:8px;
  list-style:none;
  background:#FFFFFF;
  border:1px solid rgba(44,185,198,0.32);
  border-radius:20px;
  box-shadow:0 24px 48px -24px rgba(30,41,56,0.28);
  opacity:0;
  visibility:hidden;
  transform:translateY(-6px);
  transition:opacity .2s ease,transform .2s ease,visibility .2s ease;
  z-index:20;
  max-height:360px;
  overflow-y:auto;
}
.blog-filter-wrap.is-open .blog-filter__menu{
  opacity:1;
  visibility:visible;
  transform:translateY(0);
}
.blog-filter__menu li{margin:0}
.blog-filter__option{
  width:100%;
  display:inline-flex;
  align-items:center;
  gap:10px;
  padding:11px 16px;
  border:none;
  background:transparent;
  border-radius:14px;
  color:#1E2938;
  font-family:'Manrope',sans-serif;
  font-size:0.95rem;
  font-weight:500;
  text-align:left;
  cursor:pointer;
  transition:background .18s ease,color .18s ease;
}
.blog-filter__option i{color:#F1C338;font-size:1.1rem;flex-shrink:0}
.blog-filter__option:hover{background:rgba(241,195,56,0.14)}
.blog-filter__option.is-active{
  background:#2CB9C6;
  color:#FFFFFF;
}
.blog-filter__option.is-active i{color:#FFFFFF}

/* =====================================================================
   FIX ESPACEMENTS — SVG montagne HORS FLUX à toutes les largeurs.
   PASS 34 (main > section > * { position: relative !important }) mettait
   les .section-mountain injectés EN FLUX sur <1024px : un bloc invisible
   de ~131px (mobile) à ~315px (tablette) s'insérait en haut de chaque
   section [data-mountain] et du hero → les « grands espaces vides ».
   PASS 75 ne corrigeait cela qu'en ≥1024px. Ici : toutes les largeurs.
   Les offsets par variante (PASS 63 §A) reprennent alors leur effet
   normal, comme sur desktop.
   ===================================================================== */
html body main > section > svg.section-mountain,
html body main > section > .section-mountain,
html body main > .hero > svg.section-mountain,
html body main section .section-mountain {
  position: absolute !important;
}


/* =====================================================================
   PASS 97 — Retrait de TOUS les halos bleus décoratifs (demande cliente).
   ---------------------------------------------------------------------
   Les seuls halos qui restent sont les lueurs CHAUDES (caramel/sable).
   On neutralise uniquement la teinte SAGE #2CB9C6 (rgba(44,185,198)) là
   où elle sert de halo/blob radial décoratif. On NE touche PAS aux
   boutons, bordures, liens ou textes teal : ils portent l'identité brand.
   ===================================================================== */

/* 1 · Voile global du <body> : on retire la 3e couche radiale (bleue),
   on conserve les deux couches chaudes (caramel + sable). */
html body.theme-femine::before {
  background:
    radial-gradient(35% 40% at 15% 18%, rgba(232, 181, 74, 0.10) 0%, transparent 60%),
    radial-gradient(40% 45% at 88% 75%, rgba(217, 187, 122, 0.12) 0%, transparent 60%) !important;
  background-attachment: scroll !important; /* ex-fixed : fluidité scroll (plus de repaint plein cadre) */
}

/* 2 · Blobs de section : le halo ::before portait la teinte SAGE (bleue)
   — PASS 73 §E sur desktop, ainsi que les anciens halos §B/§E. On le
   neutralise partout ; le halo chaud ::after (caramel) reste intact, donc
   chaque section garde sa lueur chaude sans aucune trace de bleu.
   Volontairement SANS @media : couvre aussi < 1024px et les autres pages. */
html body main > section:nth-of-type(n).section--alt:not([data-mountain="warm"]):not([data-mountain="sage"]):not(.fixed-quote):not(.hero):not(.process)::before,
html body main > section:nth-of-type(n).section--bg:not([data-mountain="warm"]):not([data-mountain="sage"]):not(.fixed-quote):not(.hero):not(.process)::before,
html body main > section.affiliations-band::before,
html body main > section.cta-final::before,
html body main section.section--alt:not([data-mountain]):not(.affiliations-band)::before,
html body main section.section--bg:not([data-mountain]):not(.fixed-quote)::before,
main > section:nth-of-type(3n+3):not(.fixed-quote):not(.cta-final):not(.hero):not(.process)::before {
  background: none !important;
}


/* =====================================================================
   PASS 98 — Avertissement contre-indication (hero diapasons / pacemaker).
   Pastille d'alerte : croix rouge + fond rougeâtre discret. Le texte étant
   plus long que les autres pastilles, on autorise le retour à la ligne.
   ===================================================================== */
.hero__insight--warning {
  background: rgba(214, 69, 63, 0.10) !important;
  border-color: rgba(214, 69, 63, 0.45) !important;
  color: #8A2B27;
  font-weight: 600;
  white-space: normal;
  max-width: 340px;
  align-items: flex-start;
}
.hero__insight--warning i {
  color: #D6453F !important;
  font-size: 1.2em;
  margin-top: 1px;
}


/* =====================================================================
   PASS 99 — soin à 4 mains, section « Pour les corps qui ont besoin
   d'être portés » : le CTA passe SOUS le titre (dans le header) et on
   retire le halo décoratif de cette section (demande cliente).
   L'ID bat la spécificité des blobs PASS 73 §E.
   ===================================================================== */
#indications-4mains::before,
#indications-4mains::after {
  content: none !important;
  background: none !important;
}
#indications-4mains .section-header {
  align-self: start;
}
#indications-4mains .section-header .actions {
  margin-top: 22px;
}


/* =====================================================================
   PASS 100 — Cellules de fond (.warm-shape) nettement réduites (demande
   cliente : « réduis encore la taille des cellules en arrière plan »).
   Ce sont ces grandes formes safran (forme.svg) qui dominaient le fond —
   surtout en mobile où elles dépassaient la largeur de l'écran (~120vw).
   On les ramène à des accents de coin, plus discrets. Placé en fin de
   fichier → même spécificité, source postérieure = ces valeurs gagnent.
   ===================================================================== */
html body .warm-shape--tr { width: 30vw !important; height: 28vh !important; }
html body .warm-shape--bl { width: 26vw !important; height: 26vh !important; }
@media (max-width: 1024px) {
  html body .warm-shape--tr { width: 38vw !important; height: 26vh !important; }
  html body .warm-shape--bl { width: 32vw !important; height: 24vh !important; }
}
@media (max-width: 768px) {
  html body .warm-shape--tr { width: 44vw !important; height: 22vh !important; }
  html body .warm-shape--bl { width: 38vw !important; height: 20vh !important; }
}


/* =====================================================================
   PASS 104 — Dates de publication sur les cartes du blog (demande cliente).
   ===================================================================== */
.article-card__meta { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.article-card__date { font-size: 0.8rem; color: var(--color-text-muted); white-space: nowrap; }
.article-featured__date { display: block; font-size: 0.82rem; color: var(--color-text-muted); margin: 3px 0 8px; }


/* =====================================================================
   PASS 105 — Pastilles hero (hero__insight) : autoriser le retour à la
   ligne pour ne PAS déborder quand le texte est long (ex. soin 4-mains
   « …trauma, burn-out, hypersensibilité, mais aussi bien-être et détente »).
   Les pastilles courtes restent sur une ligne (le texte court ne wrappe pas).
   ===================================================================== */
.hero__insight { white-space: normal; max-width: 100%; }


/* =====================================================================
   PASS 106 — Bouton flottant (sticky-cta) avec logo OneDoc :
   fond blanc au lieu du teal pour que le pingouin couleur ressorte
   proprement (l'orange/violet du logo jurait sur le fond teal).
   Le bouton d'appel (soin 4-mains, icône téléphone) reste teal.
   ===================================================================== */
.sticky-cta:has(img) {
  background: #fff;
  border: 1px solid rgba(31, 42, 55, 0.08);
}
.sticky-cta:has(img) img { width: 40px; height: 40px; }


/* =====================================================================
   PASS 107 — Rétablir l'effet « image fixe au scroll » (parallaxe) sur
   les bandeaux photo (.fixed-quote, parallax), à la demande du client.
   Desktop uniquement (min-width 1025px) : on garde background-attachment:
   scroll sur tablette/mobile où « fixed » provoque du jank et des bugs de
   zoom (iOS/Android). Cette règle, placée en dernier, prime sur les
   « scroll !important » précédents grâce au contexte @media min-width.
   ===================================================================== */
@media (min-width: 1025px) {
  section.fixed-quote,
  .fixed-quote,
  .section--parallax,
  .process__bg {
    background-attachment: fixed !important;
  }
}


/* =====================================================================
   PASS 108 — Lisibilité des encarts hero sur DESKTOP (retour cliente).
   La carte hero était à 0.72 d'opacité : sur grand écran la photo
   transparaît derrière et « mange » le texte (surtout les mots en <em>,
   en safran #F1C338 sur crème = contraste très faible).
   Le mobile était déjà à 0.94 et la cliente le trouve parfait → on aligne
   simplement le desktop sur ce réglage. Mobile volontairement NON touché
   (media min-width 769px), couleurs et design inchangés.
   ===================================================================== */
@media (min-width: 769px) {
  /* Sélecteur volontairement fort : un ancien passage « HERO GLASS PLUS
     MARQUÉ » (§C) impose `.hero.hero--mosaic .hero__mosaic-card` à 0.55
     d'opacité — c'est lui qui rendait le texte illisible sur grand écran.
     On le bat en spécificité, sur desktop uniquement. */
  html body .hero.hero--mosaic .hero__mosaic-card,
  html body .hero__mosaic-card {
    background: rgba(252, 245, 232, 0.93) !important;
  }
  /* « Retrouver », « vitalité »… : le teal de marque #2CB9C6 sur la carte
     crème ne donne que 2,2:1 de contraste → mots difficiles à lire (retour
     cliente). On garde EXACTEMENT la même teinte de marque, simplement
     assombrie (#1A6F77 ≈ 5:1) : lisible sans changer l'identité visuelle.
     Mobile volontairement intact (la cliente le trouve parfait). */
  html body main section.hero.hero--mosaic .hero__mosaic-card .hero__title em,
  html body section.hero.hero--mosaic .hero__mosaic-card .hero__title em,
  html body main .hero.hero--mosaic .hero__mosaic-card .hero__title em {
    color: #1A6F77 !important;
  }
}


/* =====================================================================
   PASS 109 — Diplômes au format PAYSAGE dans une carte verticale (4/5).
   Les vignettes sont en object-fit: cover → un certificat paysage
   (Steve Haines, PVI Polyvagal) se faisait massacrer au recadrage.
   Avec --doc on passe en `contain` : le certificat est affiché ENTIER,
   centré sur le fond sablé de la vignette (effet document encadré).
   L'image d'origine reste intacte pour le zoom. Retour cliente :
   « le diplôme de Steve Haines en vertical, je préfère ».
   ===================================================================== */
.recognition-v4__diplomas .recognition-dipl--doc .recognition-dipl__thumb img {
  object-fit: contain;
  padding: 6px;
}


/* =====================================================================
   PASS 110 — Accueil mobile : le 4e volet des soins (Périnatalité) était
   inatteignable. Le carrousel s'appuyait uniquement sur le JS (qui pilote
   track.scrollLeft) alors que la piste n'était pas réellement scrollable.
   On la rend scrollable NATIVEMENT (swipe du doigt) : les 4 cartes sont
   atteignables même si le JS échoue — et les flèches JS continuent de
   fonctionner puisqu'elles écrivent dans ce même track.scrollLeft.
   Desktop non touché (règle sous max-width 768px).
   ===================================================================== */
@media (max-width: 768px) {
  body main .services-swiper .swiper-wrapper {
    overflow-x: auto !important;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    -ms-overflow-style: none;
  }
  body main .services-swiper .swiper-wrapper::-webkit-scrollbar { display: none; }
  body main .services-swiper .service-card.swiper-slide {
    scroll-snap-align: center;
  }
}


/* =====================================================================
   PASS 111 — Section « Mes cabinets » (page Réservation).
   Héloïse exerce bientôt sur plusieurs adresses (Pâquis, Eysins dès
   novembre, Eaux-Vives cet automne), chacune avec SON agenda Onedoc.
   Une carte par cabinet ; les cartes à venir portent un emplacement
   prêt à recevoir l'agenda (voir commentaires dans reservation.html).
   ===================================================================== */
.cabinets {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 18px;
}
.cabinet-card {
  background: #fff;
  border: 1px solid rgba(44, 185, 198, 0.18);
  border-radius: 20px;
  padding: 24px 22px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  box-shadow: 0 8px 22px -14px rgba(46, 41, 34, 0.18);
}
.cabinet-card--open { border-color: rgba(44, 185, 198, 0.45); }
.cabinet-card__head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 10px; flex-wrap: wrap;
}
.cabinet-card__name {
  font-family: var(--font-heading, 'Cormorant Garamond', serif);
  font-size: 1.3rem; font-weight: 600; margin: 0;
  color: var(--color-text);
}
.cabinet-card__badge {
  font-size: 0.7rem; letter-spacing: 0.08em; text-transform: uppercase;
  font-weight: 600; padding: 4px 10px; border-radius: 999px;
  background: rgba(46, 41, 34, 0.08); color: var(--color-text-muted);
  white-space: nowrap;
}
.cabinet-card__badge--open { background: rgba(44, 185, 198, 0.14); color: #1A6F77; }
.cabinet-card__addr {
  margin: 0; color: var(--color-text-muted);
  line-height: 1.6; font-size: 0.95rem;
}
.cabinet-card__addr i { color: var(--color-primary); margin-right: 4px; }
.cabinet-card__note {
  margin: 0; font-size: 0.86rem; font-style: italic;
  color: var(--color-text-muted); opacity: 0.85;
}
.cabinet-card__actions { margin-top: auto; padding-top: 6px; display: flex; }
.cabinet-card__actions .btn { width: 100%; justify-content: center; }
@media (max-width: 980px) { .cabinets { grid-template-columns: 1fr 1fr; } }
@media (max-width: 680px) { .cabinets { grid-template-columns: 1fr; } }


/* =====================================================================
   PASS 112 — Flèche de défilement des diplômes (retour cliente).
   Le bandeau déborde horizontalement (surtout sur mobile, et plus encore
   depuis le 6e diplôme) sans aucun indice visuel. Le bouton est injecté
   par global.js et n'est AFFICHÉ que si .is-scrollable est posée, c'est-
   à-dire uniquement quand il y a réellement de quoi défiler (donc jamais
   sur desktop où la grille tient sur place). Collé à droite en sticky.
   ===================================================================== */
.recognition-v4__diplomas .dipl-next { display: none; }
.recognition-v4__diplomas.is-scrollable .dipl-next {
  display: flex; align-items: center; justify-content: center;
  position: -webkit-sticky; position: sticky; right: 2px;
  flex: 0 0 34px; width: 34px; height: 34px;
  align-self: center;
  padding: 0; border: none; border-radius: 50%;
  background: rgba(31, 82, 86, 0.92); color: #FFF7DA;
  font-size: 15px; line-height: 1; cursor: pointer;
  box-shadow: 0 4px 14px -4px rgba(46, 41, 34, 0.45);
  scroll-snap-align: none;
  transition: background 0.2s ease, transform 0.2s ease;
  z-index: 2;
}
.recognition-v4__diplomas.is-scrollable .dipl-next i {
  display: block;
  transition: transform 0.25s ease;
}
.recognition-v4__diplomas.is-scrollable .dipl-next:hover {
  background: #1F5256; transform: scale(1.06);
}
/* Arrivé au bout : la flèche se retourne (elle ramène au début) */
.recognition-v4__diplomas.is-scrollable .dipl-next.is-end i { transform: rotate(180deg); }


/* =====================================================================
   PASS 113 — ÉVÉNEMENTS (page liste /evenements + page détail
   /evenement-<slug>, rendues par api/evenements.js et api/evenement.js).
   Même langage visuel que les cartes du site : fond blanc, accents teal,
   coins arrondis, ombre douce. Les événements passés sont légèrement
   estompés pour que les prochains ressortent.
   ===================================================================== */
.events-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
@media (max-width: 1024px) { .events-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 680px)  { .events-grid { grid-template-columns: 1fr; } }

.event-card {
  background: #fff;
  border: 1px solid rgba(44, 185, 198, 0.16);
  border-radius: 20px;
  overflow: hidden;
  display: flex; flex-direction: column;
  box-shadow: 0 8px 22px -14px rgba(46, 41, 34, 0.18);
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.event-card:hover { transform: translateY(-3px); box-shadow: 0 16px 32px -18px rgba(46, 41, 34, 0.26); }
.event-card--past { opacity: 0.82; }
.event-card__media { aspect-ratio: 16 / 9; background: var(--color-soft, #F3EFE6); }
.event-card__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.event-card__body { padding: 20px 20px 18px; display: flex; flex-direction: column; gap: 10px; flex: 1; }
.event-card__meta {
  font-size: 0.8rem; color: var(--color-primary); font-weight: 600;
  display: flex; align-items: center; gap: 6px;
}
.event-card--past .event-card__meta { color: var(--color-text-muted); }
.event-card__title {
  font-family: var(--font-heading, 'Cormorant Garamond', serif);
  font-size: 1.35rem; font-weight: 600; margin: 0;
  color: var(--color-text); line-height: 1.2;
}
.event-card__excerpt { margin: 0; font-size: 0.93rem; line-height: 1.6; color: var(--color-text-muted); }
.event-card__foot {
  margin-top: auto; padding-top: 8px;
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
}
.event-card__tarif {
  font-size: 0.82rem; font-weight: 600; color: #1A6F77;
  background: rgba(44, 185, 198, 0.12); padding: 3px 10px; border-radius: 999px;
}
.events-empty {
  grid-column: 1 / -1; text-align: center; font-style: italic;
  color: var(--color-text-muted); padding: 24px 0;
}

/* ---- page détail d'un événement ---- */
.event-detail { padding-top: clamp(120px, 16vw, 170px); }
.event-detail__back { margin-bottom: 18px; }
.event-detail__status {
  display: inline-block; font-size: 0.72rem; text-transform: uppercase;
  letter-spacing: 0.1em; font-weight: 600; padding: 4px 12px; border-radius: 999px;
  background: rgba(46, 41, 34, 0.08); color: var(--color-text-muted);
}
.event-detail__status.is-upcoming { background: rgba(44, 185, 198, 0.14); color: #1A6F77; }
.event-detail__title {
  font-family: var(--font-heading, 'Cormorant Garamond', serif);
  font-size: clamp(2rem, 4.4vw, 3rem); line-height: 1.08;
  margin: 14px 0 10px; color: var(--color-text);
}
.event-detail__lead { font-size: 1.05rem; line-height: 1.65; color: var(--color-text-muted); margin: 0 0 20px; }
.event-detail__meta {
  display: flex; flex-wrap: wrap; gap: 10px 20px; padding: 14px 0;
  border-top: 1px solid rgba(44, 185, 198, 0.18);
  border-bottom: 1px solid rgba(44, 185, 198, 0.18);
  margin-bottom: 26px;
}
.event-detail__meta span { display: inline-flex; align-items: center; gap: 7px; font-size: 0.92rem; color: var(--color-text); }
.event-detail__meta i { color: var(--color-primary); font-size: 17px; }
.event-detail__cover { margin: 0 0 26px; border-radius: 20px; overflow: hidden; }
.event-detail__cover img { width: 100%; height: auto; display: block; }
.event-detail__cta { margin-top: 30px; display: flex; justify-content: center; }


/* =====================================================================
   PASS 101 — Marquees affiliations / réseau : glissables à la main.
   Quand le JS est actif (voir global.js → setupAffMarquees), il ajoute
   .is-draggable : on remplace l'animation transform CSS par un scroll
   natif horizontal (drag souris + swipe tactile + dérive auto douce).
   Sans JS ou en prefers-reduced-motion, le comportement CSS d'origine
   reste inchangé. Fin de fichier → source postérieure = gagne.
   ===================================================================== */
.aff-marquee.is-draggable .aff-marquee__track {
  animation: none !important;
  transform: none !important;
  width: -webkit-max-content;
  width: max-content;
}
.aff-marquee.is-draggable .aff-marquee__viewport {
  overflow-x: auto;
  overflow-y: hidden;
  scroll-behavior: auto;
  cursor: -webkit-grab;
  cursor: grab;
  -webkit-overflow-scrolling: touch;   /* momentum tactile iOS */
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.aff-marquee.is-draggable .aff-marquee__viewport::-webkit-scrollbar { display: none; }
.aff-marquee.is-draggable .aff-marquee__viewport.is-grabbing {
  cursor: -webkit-grabbing;
  cursor: grabbing;
}
/* Pendant un drag souris : pas de sélection ni de drag-fantôme des liens/images */
.aff-marquee.is-draggable .aff-marquee__viewport.is-grabbing,
.aff-marquee.is-draggable .aff-marquee__viewport.is-grabbing * {
  -webkit-user-select: none; -moz-user-select: none; user-select: none;
  cursor: grabbing !important;
}
.aff-marquee.is-draggable .aff-chip,
.aff-marquee.is-draggable .aff-chip img {
  -webkit-user-drag: none;
}


/* =====================================================================
   PASS 102 — Accueil : les 4 infos de réassurance intégrées dans la carte
   hero (demande cliente), en plus du drapeau LGBTQIA et du sélecteur de
   langue. Les 4 faits texte passent en 2 colonnes (comme l'ancienne barre) ;
   le drapeau LGBTQIA et le sélecteur restent des pastilles compactes.
   ===================================================================== */
.hero__insights--facts { gap: 8px !important; }
.hero__insights--facts .hero__insight:not(.hero__insight--icon):not(.hero__insight--langs) {
  flex: 1 1 calc(50% - 4px);
  min-width: 0;
  white-space: normal;
  justify-content: flex-start;
  line-height: 1.25;
}
.hero__insights--facts .hero__insight--icon { padding: 8px; }
@media (max-width: 768px) {
  .hero__insights--facts .hero__insight:not(.hero__insight--icon):not(.hero__insight--langs) { flex-basis: 100%; }
}


/* =====================================================================
   PASS 103 — Diplômes (qui-suis-je & pages soins) : carrousel horizontal
   sur mobile (demande cliente) au lieu de la grille 2 colonnes. Swipe
   natif + scroll-snap ; ~2 vignettes visibles + aperçu de la suivante.
   ===================================================================== */
@media (max-width: 768px) {
  .recognition-v4__diplomas {
    display: flex;
    grid-template-columns: none;
    flex-wrap: nowrap;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    -ms-overflow-style: none;
    gap: 12px;
    padding-bottom: 4px;
    scroll-padding-left: 2px;
  }
  .recognition-v4__diplomas::-webkit-scrollbar { display: none; }
  .recognition-v4__diplomas .recognition-dipl {
    flex: 0 0 46%;
    scroll-snap-align: start;
  }
}



/* =====================================================================
   PASS 114 — ÉVÉNEMENTS : lisibilité des informations pratiques.
   Retour cliente : « les infos ne sont pas assez démarquées ». Tout
   était aggloméré sur une seule ligne (date · horaire · lieu), en teal
   clair, qui repassait à la ligne n'importe où.
   Désormais : la date est une pastille en tête de carte, l'horaire et
   le lieu ont chacun leur ligne et leur icône sous un filet, et la page
   détail présente chaque info dans un bloc étiqueté (Date, Horaire…).
   Les sélecteurs reprennent le parent (.event-detail__meta) car PASS 113
   cible « .event-detail__meta span » (0,1,1) — sinon il l'emporterait.
   Fin de fichier → source postérieure = gagne.
   ===================================================================== */

/* ---- carte : la date, mise en avant ---- */
.event-card__date {
  margin: 0;
  align-self: flex-start;
  display: inline-flex; align-items: center; gap: 7px;
  padding: 6px 13px; border-radius: 999px;
  background: rgba(44, 185, 198, 0.12);
  color: #1A6F77;
  font-size: 0.8rem; font-weight: 600; line-height: 1.3;
}
.event-card__date i { font-size: 15px; flex: 0 0 auto; }
.event-card--past .event-card__date {
  background: rgba(46, 41, 34, 0.07);
  color: var(--color-text-muted);
}

/* ---- carte : horaire et lieu, une ligne chacun ---- */
.event-card__facts {
  list-style: none; margin: 0; padding: 13px 0 0;
  border-top: 1px solid rgba(44, 185, 198, 0.16);
  display: grid; gap: 8px;
}
.event-card__facts li {
  display: grid; grid-template-columns: 17px 1fr; gap: 9px;
  align-items: start;
  font-size: 0.86rem; line-height: 1.45;
  color: var(--color-text);
}
.event-card__facts i { color: var(--color-primary); font-size: 16px; line-height: 1.35; }
.event-card--past .event-card__facts i { color: var(--color-text-muted); }
.event-card__foot { padding-top: 14px; }

/* ---- page détail : un bloc étiqueté par information ---- */
.event-detail__meta {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: 18px 24px;
  padding: 20px 0;
}
.event-detail__meta .event-detail__bit {
  display: grid; grid-template-columns: 20px 1fr; gap: 10px; align-items: start;
}
.event-detail__meta .event-detail__bit i {
  color: var(--color-primary); font-size: 19px; line-height: 1.25;
}
.event-detail__meta .event-detail__bit-txt { display: block; min-width: 0; }
.event-detail__meta .event-detail__bit-label {
  display: block; margin-bottom: 3px;
  font-size: 0.68rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.12em;
  color: var(--color-text-muted);
}
.event-detail__meta .event-detail__bit-value {
  display: block;
  font-size: 0.95rem; font-weight: 600; line-height: 1.45;
  color: var(--color-text);
}

/* ---- page détail : mise en forme du texte rédigé par la cliente ----
   Le contenu écrit dans l'éditeur (paragraphes, titres, listes à puces)
   n'avait aucun style : la classe « prose » utilisée au départ n'existe
   nulle part, et la remise à zéro globale « ul { list-style: none } »
   supprimait les puces et les retraits. On reprend ici la typographie
   des articles de blog (.article-prose, définie dans api/article.js). */
.event-detail__content {
  font-family: var(--font-body);
  font-size: 17px; line-height: 1.75;
  color: var(--color-text);
}
.event-detail__content p { margin: 0 0 22px; }
.event-detail__content h2 {
  font-family: var(--font-heading);
  font-size: clamp(26px, 3.2vw, 34px); font-weight: 600;
  color: #1F5256; margin: 44px 0 16px; line-height: 1.2;
  letter-spacing: -0.01em;
}
.event-detail__content h3 {
  font-family: var(--font-heading);
  font-size: clamp(21px, 2.5vw, 25px); font-weight: 600;
  color: #1F5256; margin: 34px 0 12px; line-height: 1.3;
}
.event-detail__content h2:first-child,
.event-detail__content h3:first-child { margin-top: 0; }
.event-detail__content ul,
.event-detail__content ol { margin: 0 0 24px; padding-left: 22px; }
.event-detail__content ul { list-style: disc; }
.event-detail__content ol { list-style: decimal; }
.event-detail__content li { margin-bottom: 10px; display: list-item; }
.event-detail__content li::marker { color: #B47A3F; }
.event-detail__content strong { color: #1F5256; font-weight: 600; }
.event-detail__content em { font-style: italic; }
.event-detail__content a {
  color: #2C6E72; text-decoration: underline;
  text-decoration-thickness: 1px; text-underline-offset: 3px;
}
.event-detail__content a:hover { color: #B47A3F; }
.event-detail__content img { max-width: 100%; border-radius: 16px; margin: 8px 0 22px; }
.event-detail__content blockquote {
  margin: 0 0 24px; padding: 2px 0 2px 18px;
  border-left: 3px solid rgba(44, 185, 198, 0.4);
  color: var(--color-text-muted); font-style: italic;
}


/* =====================================================================
   PASS 115 — Pied de page : deux cabinets au lieu d'un (demande cliente
   « je serai aussi à Eysins, chez Sana Mente »). Les deux adresses sont
   empilées, chacune précédée du nom du lieu — sans étiquette on lirait
   une seule adresse de six lignes. Le <em> « dès novembre » disparaîtra
   à l'ouverture du cabinet (voir le commentaire dans le HTML).
   Fin de fichier → source postérieure = gagne.
   ===================================================================== */
.footer__contact .footer__cab {
  display: block;
  font-size: 0.74rem; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.1em;
  color: var(--color-primary-strong);
  margin-bottom: 3px;
}
.footer__contact p + p { padding-top: 2px; }
.footer__contact .footer__cab-soon {
  display: inline-block; margin-top: 4px;
  font-style: normal; font-size: 0.72rem; font-weight: 600;
  letter-spacing: 0.04em;
  padding: 2px 9px; border-radius: 999px;
  background: rgba(44, 185, 198, 0.12); color: #1A6F77;
}


/* =====================================================================
   PASS 116 — Diapasons : citation « Le corps écoute » illisible sur mobile
   (retour cliente). Le texte blanc italique fin était posé sur les
   diapasons et les boules colorées, avec un voile de 6 à 18 % seulement.
   Uniquement cette section (modificateur --diapasons) et uniquement en
   mobile : le desktop et les autres citations ne changent pas.
   ===================================================================== */
@media (max-width: 768px) {
  html body section.fixed-quote.fixed-quote--diapasons::after {
    background: rgba(16, 24, 28, 0.62) !important;
  }
  /* !important : l'italique et la taille de la citation sont deja
     imposes en !important par une passe precedente. */
  html body section.fixed-quote.fixed-quote--diapasons blockquote p {
    font-style: normal !important;
    font-weight: 600 !important;
    font-size: 1.4rem !important;
    line-height: 1.38 !important;
  }
}


/* =====================================================================
   PASS 117 — Fiche événement : l'image de couverture prenait toute la
   largeur à hauteur libre ; une affiche verticale (1080x1350) occupait
   ainsi plus de 1600 px de haut (retour cliente). On plafonne la hauteur
   et on centre : une image horizontale garde sa largeur, une affiche
   verticale s'affiche entière, en format raisonnable.
   ===================================================================== */
.event-detail__cover {
  display: flex; justify-content: center;
  background: transparent;
}
.event-detail__cover img {
  width: auto; max-width: 100%;
  height: auto; max-height: 520px;
  border-radius: 20px;
}
@media (max-width: 680px) {
  .event-detail__cover img { max-height: 420px; }
}


/* =====================================================================
   PASS 118 — Fiche événement : l'image passe À CÔTÉ du texte au lieu
   d'au-dessus (retour cliente). Seulement si l'événement a une image
   (.event-detail--avec-image) : la page s'élargit, titre et infos
   pratiques restent pleine largeur, puis texte à gauche / image à
   droite, qui reste visible pendant la lecture (sticky). Sous 900 px :
   une seule colonne, l'image revient au-dessus du texte.
   ===================================================================== */
.event-detail--avec-image .container--narrow { max-width: 1080px; }
.event-detail--avec-image .event-detail__body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(260px, 360px);
  gap: 48px;
  align-items: start;
}
.event-detail--avec-image .event-detail__cover {
  grid-column: 2; grid-row: 1;
  position: sticky; top: 120px;
  margin: 0;
}
.event-detail--avec-image .event-detail__main { grid-column: 1; grid-row: 1; min-width: 0; }
.event-detail--avec-image .event-detail__cover img {
  width: 100%; height: auto; max-height: 640px; object-fit: contain;
}
.event-detail--avec-image .event-detail__cta { justify-content: flex-start; }
@media (max-width: 900px) {
  .event-detail--avec-image .container--narrow { max-width: var(--container-narrow); }
  .event-detail--avec-image .event-detail__body { display: flex; flex-direction: column; gap: 0; }
  .event-detail--avec-image .event-detail__cover { order: -1; position: static; margin: 0 0 26px; }
  /* Jamais de recadrage : une affiche contient du texte (titre, date).
     L'image s'affiche entiere, centree, au plus 460 px de haut. */
  .event-detail--avec-image .event-detail__cover { width: 100%; display: flex; justify-content: center; }
  .event-detail--avec-image .event-detail__cover img {
    width: auto; max-width: 100%; height: auto; max-height: 460px;
    object-fit: contain;
  }
  .event-detail--avec-image .event-detail__cta { justify-content: center; }
}


/* =====================================================================
   PASS 119 — Carrousels bloqués au DOIGT sur téléphone (retour cliente :
   « le 4e soin n'est jamais apparu »). 16 règles touch-action se
   contredisaient : le conteneur finissait en pan-x, la zone qui défile
   en pan-y. Le navigateur applique l'INTERSECTION des valeurs d'un
   élément et de ses ancêtres → aucun geste autorisé, carrousel figé au
   toucher (alors qu'il défilait à la souris, d'où les tests trompeurs).
   pan-y était un héritage de Swiper JS, retiré depuis : les carrousels
   défilent désormais nativement et doivent accepter les deux directions.
   `:root` + !important pour passer devant les 16 règles existantes.
   ===================================================================== */
@media (max-width: 768px) {
  html:root body main .swiper,
  html:root body main .swiper > .swiper-wrapper,
  html:root body main .swiper-wrapper,
  html:root body main .swiper-slide,
  html:root body main .swiper-slide *,
  html:root body main .swiper > .swiper-wrapper > .swiper-slide,
  html:root body main .swiper > .swiper-wrapper > .swiper-slide *,
  /* grilles defilantes qui ne portent pas la classe .swiper (ex. avis de
     en/soin-biomecanique) */
  html:root body main .reviews-grid,
  html:root body main .reviews-grid *,
  html:root body main .why-grid,
  html:root body main .why-grid *,
  html:root body main .diplomas-strip,
  html:root body main .diplomas-strip * {
    touch-action: pan-x pan-y !important;
  }
}
