/* ============================================
   MAIN/MON-APPROCHE.CSS — « Le manifeste »
   Charge sur : page slug 'mon-approche'

   RUPTURE SCÉNOGRAPHIQUE, registre manifeste : pas de photo en ouverture
   (typo géante alignée à gauche + trois chiffres-clés), face-à-face
   refus barrés / promesses serif, ponctuation encre, deux rendez-vous
   compacts en vis-à-vis d'une photo, quatre temps du silence en grille.
   Chaque section se scanne en quelques secondes — punchy, épuré, direct.
   Rythme des fonds : crème / sable / encre / crème / sable / teal.
   ============================================ */

/* base.css plafonne TOUS les p/li à var(--container-text) (640px) : les
   <li>/<p> de mise en page doivent en être libérés. */
.approche-refus__row,
.approche-rdv__scene,
.approche-silence__phase,
.approche-ouverture__stat {
  max-width: none;
}

/* ── 1. OUVERTURE — manifeste typographique ── */

.approche-ouverture {
  min-height: 100svh;
  display: flex;
  align-items: stretch;
  background: var(--surface-default, #faf7f3);
  overflow: clip;
}

.approche-ouverture__inner {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: var(--space-lg);
  padding-top: calc(var(--nav-height, 72px) + clamp(28px, 5vh, 56px));
  padding-bottom: clamp(28px, 5vh, 56px);
}

.approche-ouverture__folio {
  font-family: var(--font-sans);
  font-size: var(--t-small);
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--em-primary);
  margin: 0;
  display: flex;
  align-items: center;
  gap: 14px;
  opacity: 0;
  animation: approcheFadeIn 0.8s cubic-bezier(0.22, 1, 0.36, 1) 0.25s forwards;
}

.approche-ouverture__folio::after {
  content: '';
  flex: 1 1 auto;
  max-width: 160px;
  height: 1px;
  background: color-mix(in oklch, var(--em-primary) 38%, transparent);
  transform: scaleX(0);
  transform-origin: left center;
  animation: approcheLigne 0.9s cubic-bezier(0.22, 1, 0.36, 1) 0.7s forwards;
}

.approche-ouverture__title {
  font-family: var(--font-serif);
  font-weight: 300;
  font-size: clamp(2.6rem, 1.2rem + 6vw, 5.5rem);
  line-height: 1.04;
  letter-spacing: -0.015em;
  color: var(--em-text);
  margin: 0 0 clamp(20px, 3vw, 34px);
  max-width: 16ch;
  text-wrap: balance;
  clip-path: inset(100% 0 0 0);
  animation: approcheReveal 1s cubic-bezier(0.22, 1, 0.36, 1) 0.5s forwards;
}

.approche-ouverture__title em {
  font-style: italic;
  color: var(--em-primary);
}

/* Lead 3 mots — l'écho du titre, en serif italique. */
.approche-ouverture__lead {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(1.25rem, 1rem + 1vw, 1.7rem);
  line-height: 1.4;
  color: var(--em-text-light);
  margin: 0;
  max-width: 52ch;
  opacity: 0;
  animation: approcheFadeIn 0.9s cubic-bezier(0.22, 1, 0.36, 1) 1.05s forwards;
}

/* Chiffres-clés — la méthode en un regard. */
.approche-ouverture__stats {
  margin: 0;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(16px, 3vw, 40px);
  max-width: 980px;
  opacity: 0;
  animation: approcheFadeIn 0.9s cubic-bezier(0.22, 1, 0.36, 1) 1.35s forwards;
}

.approche-ouverture__stat {
  padding-top: 14px;
  border-top: 1px solid color-mix(in oklch, var(--ivoire-900) 22%, transparent);
}

.approche-ouverture__stat-num {
  font-family: var(--font-serif);
  font-weight: 300;
  font-size: clamp(2.6rem, 2rem + 2.4vw, 4.2rem);
  line-height: 0.95;
  color: var(--em-primary);
  margin: 0 0 6px;
  font-feature-settings: 'lnum';
}

.approche-ouverture__stat-label {
  font-family: var(--font-sans);
  font-size: var(--t-small);
  line-height: 1.5;
  color: var(--em-text-light);
  margin: 0;
  max-width: 24ch;
}

@keyframes approcheReveal {
  to { clip-path: inset(0 0 0 0); }
}

@keyframes approcheFadeIn {
  to { opacity: 1; }
}

@keyframes approcheLigne {
  to { transform: scaleX(1); }
}

/* ── 2. LE FACE-À-FACE — refus barrés / promesses ── */

.approche-refus__title {
  max-width: 20ch;
}

.approche-refus__list {
  list-style: none;
  margin: var(--space-xl) 0 0;
  padding: 0;
}

.approche-refus__row {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: clamp(20px, 4vw, 72px);
  align-items: baseline;
  padding-block: clamp(18px, 2.4vw, 28px);
  border-bottom: 1px solid color-mix(in oklch, var(--ivoire-900) 12%, transparent);
}

.approche-refus__row:first-child {
  border-top: 1px solid color-mix(in oklch, var(--ivoire-900) 12%, transparent);
}

/* L'usage du secteur — court, muted, barré au scroll. */
.approche-refus__avant {
  font-family: var(--font-sans);
  font-size: var(--t-body);
  line-height: 1.5;
  color: var(--em-text-muted);
  margin: 0;
  max-width: none;
}

.approche-refus__avant-texte {
  text-decoration: line-through;
  text-decoration-thickness: 1px;
  text-decoration-color: color-mix(in oklch, var(--em-accent-light) 75%, transparent);
}

@supports (animation-timeline: view()) {
  .approche-refus__avant-texte {
    animation: approcheBarre linear both;
    animation-timeline: view();
    animation-range: entry 25% entry 85%;
  }
}

@keyframes approcheBarre {
  from { text-decoration-color: transparent; }
  to { text-decoration-color: color-mix(in oklch, var(--em-accent-light) 75%, transparent); }
}

/* La promesse — serif encre, la voix qui répond. */
.approche-refus__apres {
  font-family: var(--font-serif);
  font-weight: 400;
  font-size: clamp(1.3rem, 1.05rem + 0.9vw, 1.7rem);
  line-height: 1.3;
  color: var(--em-text);
  margin: 0;
  max-width: none;
  text-wrap: pretty;
}

/* ── 3. LES DEUX RENDEZ-VOUS — compact, photo en vis-à-vis ── */

.approche-rdv__layout {
  margin-top: var(--space-xl);
}

.approche-rdv__media {
  margin: 0 0 var(--space-lg);
  line-height: 0;
}

.approche-rdv__media img {
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
}

@media (min-width: 1025px) {
  .approche-rdv__layout--media {
    display: grid;
    grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
    gap: clamp(40px, 5vw, 88px);
    align-items: start;
  }

  .approche-rdv__media {
    margin: 0;
    position: sticky;
    top: 96px;
  }

  .approche-rdv__media img {
    max-height: calc(100vh - 144px);
  }

  /* Sujet sticky : la timeline view() reste à 0 (cf. fix Partenaires). */
  @supports (animation-timeline: view()) {
    .approche-rdv__media.reveal {
      animation: none;
      opacity: 1;
      transform: none;
    }
  }
}

.approche-rdv__scenes {
  list-style: none;
  margin: 0;
  padding: 0;
}

.approche-rdv__scene {
  display: grid;
  grid-template-columns: clamp(56px, 6vw, 96px) minmax(0, 1fr);
  gap: clamp(16px, 2.5vw, 32px);
  align-items: start;
  padding-block: clamp(24px, 3.2vw, 40px);
}

.approche-rdv__scene + .approche-rdv__scene {
  border-top: 1px solid color-mix(in oklch, var(--ivoire-900) 12%, transparent);
}

.approche-rdv__scene:first-child {
  padding-top: 0;
}

.approche-rdv__numero {
  font-family: var(--font-serif);
  font-weight: 300;
  font-size: clamp(3rem, 2.4rem + 2.4vw, 5rem);
  line-height: 0.9;
  color: color-mix(in oklch, var(--em-accent-light) 55%, transparent);
}

.approche-rdv__title {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem);
  line-height: 1.12;
  color: var(--em-text);
  margin: 0 0 4px;
  max-width: none;
}

.approche-rdv__duree {
  font-family: var(--font-sans);
  font-size: var(--t-small);
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--em-accent);
  margin: 0 0 var(--space-sm);
}

.approche-rdv__objectif {
  font-family: var(--font-serif);
  font-weight: 300;
  font-size: clamp(1.15rem, 1rem + 0.5vw, 1.35rem);
  line-height: 1.5;
  color: var(--em-text);
  margin: 0 0 var(--space-sm);
  max-width: 44ch;
  text-wrap: pretty;
}

.approche-rdv__objectif em {
  font-style: italic;
  color: var(--em-primary);
}

/* Livrable — note courte sur filet rose. */
.approche-rdv__livrable {
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin: 0;
  padding-left: var(--space-md);
  border-left: 2px solid var(--em-accent-light);
  max-width: 520px;
}

.approche-rdv__livrable-label {
  font-family: var(--font-sans);
  font-size: var(--t-small);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--em-accent);
}

.approche-rdv__livrable-text {
  font-family: var(--font-sans);
  font-size: var(--t-body);
  color: var(--em-text-light);
  line-height: 1.55;
}

/* ── 4. BANDE PANORAMIQUE + LE SILENCE ── */

.approche-bande {
  margin: 0;
  line-height: 0;
  overflow: clip;
}

.approche-bande img {
  width: 100%;
  height: clamp(220px, 42vh, 460px);
  object-fit: cover;
  object-position: center 55%;
}

/* Quatre temps courts — grille scannable (parité processus Partenaires). */
.approche-silence__phases {
  list-style: none;
  margin: var(--space-xl) 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(24px, 3.5vw, 48px);
}

.approche-silence__phase {
  position: relative;
  padding-top: var(--space-md);
}

.approche-silence__phase::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 1px;
  background: color-mix(in oklch, var(--ivoire-900) 14%, transparent);
}

.approche-silence__phase::after {
  /* Jalon rose : la séquence se lit d'un regard. */
  content: '';
  position: absolute;
  top: -3px;
  left: 0;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--em-accent-light);
}

.approche-silence__label {
  display: block;
  font-family: var(--font-serif);
  font-weight: 300;
  font-size: clamp(1.8rem, 1.4rem + 1.2vw, 2.6rem);
  line-height: 1;
  color: color-mix(in oklch, var(--em-accent-light) 55%, transparent);
  margin-bottom: var(--space-xs);
  font-feature-settings: 'lnum';
}

.approche-silence__headline {
  font-family: var(--font-serif);
  font-weight: 500;
  font-size: clamp(1.2rem, 1.05rem + 0.5vw, 1.45rem);
  line-height: 1.2;
  color: var(--em-text);
  margin: 0 0 8px;
  max-width: none;
}

.approche-silence__text {
  margin: 0;
  font-family: var(--font-sans);
  font-size: var(--t-body);
  line-height: 1.6;
  color: var(--em-text-light);
  max-width: none;
}

.approche-silence__outro {
  margin: var(--space-xl) 0 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 300;
  font-size: clamp(1.3rem, 1.1rem + 0.8vw, 1.7rem);
  color: var(--em-text);
  text-align: center;
  max-width: none;
}

/* ── MOTION LUXE — scroll-driven CSS pur (pas de GSAP sur cette page) ── */

/* Entrée des chiffres-clés : cascade individuelle (2 → 0 → 90). */
.approche-ouverture__stat {
  opacity: 0;
  transform: translateY(14px);
  animation: approcheStatRise 0.8s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.approche-ouverture__stat:nth-child(1) { animation-delay: 1.35s; }
.approche-ouverture__stat:nth-child(2) { animation-delay: 1.5s; }
.approche-ouverture__stat:nth-child(3) { animation-delay: 1.65s; }

@keyframes approcheStatRise {
  to { opacity: 1; transform: translateY(0); }
}

@supports (animation-timeline: view()) {
  /* Les quatre temps du silence : la ligne se dessine, le jalon éclot. */
  .approche-silence__phase::before {
    transform-origin: left center;
    animation: approcheTrace linear both;
    animation-timeline: view();
    animation-range: entry 0% entry 70%;
  }

  .approche-silence__phase::after {
    animation: approcheJalon linear both;
    animation-timeline: view();
    animation-range: entry 30% entry 85%;
  }

  /* Bande panoramique : parallax de cadre en CSS pur — l'image
     sur-échantillonnée débat dans la figure en overflow clip. */
  .approche-bande img {
    scale: 1.12;
    animation: approcheParallax linear both;
    animation-timeline: view();
  }
}

@keyframes approcheTrace {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}

@keyframes approcheJalon {
  from { opacity: 0; transform: scale(0.4); }
  to { opacity: 1; transform: scale(1); }
}

@keyframes approcheParallax {
  from { translate: 0 -4%; }
  to { translate: 0 4%; }
}

/* ── MOTION — reduced-motion : tout visible immédiatement ── */

@media (prefers-reduced-motion: reduce) {
  .approche-ouverture__folio,
  .approche-ouverture__lead,
  .approche-ouverture__stats,
  .approche-ouverture__stat {
    opacity: 1;
    transform: none;
    animation: none;
  }

  .approche-ouverture__title {
    clip-path: none;
    animation: none;
  }

  .approche-ouverture__folio::after {
    transform: none;
    animation: none;
  }

  .approche-refus__avant-texte {
    animation: none;
  }

  .approche-silence__phase::before,
  .approche-silence__phase::after {
    animation: none;
    opacity: 1;
    transform: none;
  }

  .approche-bande img {
    scale: none;
    translate: none;
    animation: none;
  }
}

/* ── RESPONSIVE ── */

@media (max-width: 1024px) {
  .approche-silence__phases {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 767px) {
  /* Rythme compact mobile (parité pages validées). */
  .main-mon-approche .section--contenu {
    padding-block: clamp(56px, 14vw, 72px);
  }

  .approche-ouverture__inner {
    padding-top: calc(var(--nav-height, 64px) + 20px);
    padding-bottom: max(24px, env(safe-area-inset-bottom, 0px));
  }

  .approche-ouverture__title {
    max-width: none;
  }

  /* Chiffres empilés en lignes compactes : numéro à gauche, label à droite. */
  .approche-ouverture__stats {
    grid-template-columns: 1fr;
    gap: 0;
  }

  .approche-ouverture__stat {
    display: flex;
    align-items: baseline;
    gap: 16px;
    padding-block: 12px;
  }

  .approche-ouverture__stat-num {
    font-size: 2.2rem;
    min-width: 58px;
    margin: 0;
  }

  .approche-ouverture__stat-label {
    max-width: none;
  }

  .approche-refus__list,
  .approche-rdv__layout,
  .approche-silence__phases {
    margin-top: var(--space-lg);
  }

  /* Face-à-face empilé : le refus barré au-dessus de la promesse. */
  .approche-refus__row {
    grid-template-columns: 1fr;
    gap: 6px;
    padding-block: 16px;
  }

  .approche-rdv__scene {
    grid-template-columns: clamp(40px, 12vw, 56px) minmax(0, 1fr);
    padding-block: 20px;
  }

  .approche-silence__phases {
    grid-template-columns: 1fr;
    gap: 24px;
  }

  .approche-silence__outro {
    margin-top: var(--space-lg);
    text-align: left;
  }
}
