/* === index === */
/* Design tokens canoniques, repris tels quels des fichiers tokens du design system
   Patrimoine humain (colors.css, effects.css, fonts.css, spacing.css, typography.css).
   Un seul bloc racine pour tout le thème. */
:root{
/* Base, Diversico brand */
--ph-marine:#252d3a;
--ph-marine-2:#2d3a4d;
--ph-marine-3:#36445a;
--ph-mint:#46be9e;
--ph-mint-ink:#196b55;
--ph-mint-strong:#156650;
--ph-mint-bright:#62cfb0;
--ph-mint-soft:#dff3ec;
--ph-gold:#ebac00;
--ph-gold-soft:#f0d893;
--ph-gold-ink:#392918;
--ph-white:#ffffff;
--ph-offwhite:#f9fafb;
--ph-secondary:#f0f2f5;
--ph-muted:#e8ebed;
--ph-border:#e2e5e9;
--ph-paper:#fbf8f4;
--ph-paper-soft:#f4f0e6;
--ph-ink:#0f1b29;
--ph-ink-muted:#5e6a78;
--ph-mrex-raisin:#1d232d;
--ph-mrex-teal:#349e89;
--ph-mrex-coral:#f58b6e;
--ph-success:#196b55;
--ph-warning:#ebac00;
--ph-danger:#ef4444;

--surface-page-dark:var(--ph-marine);
--surface-card-dark:var(--ph-marine-2);
--surface-page-light:var(--ph-offwhite);
--surface-section-light:var(--ph-secondary);
--surface-card-light:var(--ph-white);
--surface-paper:var(--ph-paper);
--surface-overlay:rgba(37,45,58,.75);
--text-on-dark:var(--ph-offwhite);
--text-on-dark-muted:rgba(249,250,251,.8);
--text-on-dark-subtle:rgba(249,250,251,.6);
--text-on-light:var(--ph-ink);
--text-on-light-muted:var(--ph-ink-muted);
--text-accent:var(--ph-mint);
--text-accent-on-light:var(--ph-mint-ink);
--text-gold:var(--ph-gold);
--action-primary:var(--ph-mint);
--action-primary-hover:var(--ph-mint-bright);
--action-on:var(--ph-marine);
--border-light:var(--ph-border);
--border-dark:rgba(255,255,255,.1);
--border-dark-strong:rgba(255,255,255,.2);
--focus-ring:var(--ph-mint);

--shadow-marine:0 24px 60px -32px rgba(37,45,58,.5);
--shadow-mint:0 22px 54px -22px rgba(70,190,158,.42),inset 0 1px 0 rgba(249,250,251,.12);
--shadow-mint-btn:0 10px 30px -10px rgba(70,190,158,.25);
--shadow-gold:0 18px 40px -24px rgba(235,172,0,.7);
--shadow-paper:0 8px 24px -12px rgba(37,45,58,.15);
--shadow-focus:0 0 0 3px rgba(70,190,158,.45);
--halo-mint:rgba(70,190,158,.05);
--halo-gold:rgba(235,172,0,.03);
--blur-header:12px;
--blur-overlay:8px;
--ease-out:cubic-bezier(.22,1,.36,1);
--dur-fast:140ms;
--dur-base:240ms;
--dur-slow:480ms;

--font-display:"Playfair Display",Georgia,serif;
--font-body:"Inter",system-ui,sans-serif;
--fw-light:300;
--fw-regular:400;
--fw-medium:500;
--fw-semibold:600;
--fw-bold:700;
--fs-display:60px;--fs-h2:48px;--fs-h3:28px;--fs-h4:23px;--fs-lead:26px;
--lh-display:1.0;
--lh-heading:1.1;
--ls-display:-0.01em;
--ls-title:-0.022em;
--ls-h4:-0.025em;
--fs-body:16px;--fs-s:14px;--fs-nav:13px;--fs-eyebrow:11px;--fs-stat:10px;
--lh-body:1.5;
--ls-eyebrow:0.3em;
--ls-link:0.18em;
--ls-nav:0.025em;
--type-heading-font:var(--font-display);
--type-body-font:var(--font-body);

--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--space-9:96px;--space-10:128px;
--container-max:1400px;--content-max:1152px;--container-pad:32px;--prose-max:40rem;
--section-pad-y:112px;
--radius-xs:6px;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--radius-xl:24px;--radius-pill:9999px;
--control-h-sm:36px;--control-h-md:48px;--control-h-lg:56px;
--header-h:81px;--header-h-sm:64px;--eyebrow-rule:28px;
}

*, *::before, *::after { box-sizing: border-box; }
/* --ph-header-live : hauteur réelle de l'en-tête de l'accueil, mesurée par ph.js (repli : token). */
html { scroll-behavior: smooth; scroll-padding-top: var(--ph-header-live, var(--header-h)); }
body.ph-page {
  margin: 0;
  background: var(--ph-marine);
  color: var(--ph-offwhite);
  font-family: var(--font-body);
  -webkit-font-smoothing: antialiased;
  /* Chiffres alignés sur la ligne de base : Playfair affiche sinon des chiffres elzéviriens
     (« DIX30 », « 18 h 15 », « 30 novembre » descendent sous la ligne). Hérité par les titres,
     les prix, les heures de l'agenda, les stats et les numéros d'ordre. */
  font-variant-numeric: lining-nums;
}
/* Sélection de texte : menthe de la marque, texte inchangé. */
.ph-page ::selection { background: rgba(70,190,158,.28); }
.ph-page ::-moz-selection { background: rgba(70,190,158,.28); }
.ph-page img { max-width: 100%; display: block; }
/* Icônes : SVG Lucide en ligne (ph_icon() dans functions.php), taille pilotée par le font-size du parent. */
.ph-icon { display: inline-block; flex: none; width: 1em; height: 1em; vertical-align: middle; }
.ph-page a { color: var(--ph-mint); text-decoration: none; }
@media (hover: hover) { .ph-page a:hover { color: var(--ph-mint-strong); } }
.ph-page a:focus-visible, .ph-page button:focus-visible, .ph-faq__question:focus-visible {
  outline: none; box-shadow: var(--shadow-focus); border-radius: var(--radius-xs);
}
.ph-page .ph-btn:focus-visible { box-shadow: var(--shadow-focus), var(--shadow-mint-btn); border-radius: var(--radius-pill); }

/* === headings === */
/* Ce que les 10 h2 de section ET le h1 du hero partagent réellement (mêmes valeurs
   littérales) : margin, police, graisse, letter-spacing. Le hero garde son propre
   font-size/line-height (plus grand, ratio différent), sinon le hero rétrécirait
   visuellement au format d'un h2 de section. */
/* .ph-fermeture__title est un h2 dans .ph-section mais garde son propre gabarit (clamp et
   interligne différents, comme le hero) : exclu ici, sinon cette règle plus spécifique
   l'écrase (réfuteur, round 1, must-fix 1). */
.ph-page .ph-section h2:not(.ph-fermeture__title), .ph-page .ph-hero h1 { margin: 0; font-family: var(--font-display); font-weight: 700; letter-spacing: var(--ls-title); }
/* Taille et interligne : identiques sur les 10 h2 de section seulement. */
.ph-page .ph-section h2:not(.ph-fermeture__title) { font-size: clamp(30px,4vw,48px); line-height: 1.1; }

/* text-wrap : la maquette l'applique partout pour éviter les orphelins (revue design 2.1).
   Préfixées .ph-page (0,2,0) : ces leads sont des <p>, sinon .ph-page p (0,1,1) écrase le
   balance par du pretty (réfuteur, round 1, must-fix 4). */
.ph-page h1, .ph-page h2, .ph-page h3,
.ph-page .ph-hero__lead, .ph-page .ph-pourquoi__lead, .ph-page .ph-conferenciers__tagline,
.ph-page .ph-pourquoi__callout, .ph-page .ph-levier__highlight, .ph-page .ph-pillar__text,
.ph-page .ph-fondations__note, .ph-page .ph-fermeture__cta-line { text-wrap: balance; }
.ph-page p, .ph-faq__answer, .ph-ticket__desc { text-wrap: pretty; }

/* === layout === */
.ph-container { max-width: var(--content-max); margin: 0 auto; padding: 0 var(--container-pad); box-sizing: border-box; }
.ph-section { padding: var(--section-pad-y) 0; background: var(--surface-page-dark); color: var(--text-on-dark); border-top: 1px solid rgba(255,255,255,.08); position: relative; overflow: hidden; overflow: clip; }
.ph-section--no-border { border-top: none; }
.ph-section--light { background: var(--surface-page-light); color: var(--text-on-light); }
.ph-section--secondary { background: var(--surface-section-light); color: var(--text-on-light); }
.ph-halo { position: absolute; border-radius: 50%; pointer-events: none; filter: blur(90px); }
.ph-halo--levier { right: -160px; top: -120px; width: 520px; height: 520px; background: var(--halo-mint); }
.ph-halo--conferenciers { left: -220px; top: 30%; width: 560px; height: 560px; background: var(--halo-gold); }
.ph-halo--programme { right: -200px; bottom: -200px; width: 520px; height: 520px; background: var(--halo-mint); }
.ph-halo--fondations { left: 30%; top: -200px; width: 600px; height: 600px; background: var(--halo-gold); }
.ph-halo--pourquoi30 { left: 50%; top: 50%; transform: translate(-50%,-50%); width: 700px; height: 500px; background: var(--halo-gold); filter: blur(110px); }
.ph-halo--fermeture-1 { right: -120px; top: -160px; width: 600px; height: 600px; background: var(--halo-mint); filter: blur(100px); }
.ph-halo--fermeture-2 { left: -200px; bottom: -200px; width: 520px; height: 520px; background: var(--halo-gold); filter: blur(100px); }

/* === eyebrow === */
.ph-eyebrow { display: inline-flex; align-items: center; gap: 12px; font-family: var(--font-body); font-size: var(--fs-eyebrow); font-weight: var(--fw-semibold); letter-spacing: var(--ls-eyebrow); text-transform: uppercase; color: var(--text-accent); }
.ph-eyebrow::before { content: ""; display: block; width: var(--eyebrow-rule); height: 1px; background: currentColor; flex: none; }
.ph-eyebrow--ink { color: var(--text-accent-on-light); }
.ph-eyebrow--gold { color: var(--text-gold); }
.ph-eyebrow--centered { justify-content: center; }
.ph-eyebrow--centered::after { content: ""; display: block; width: var(--eyebrow-rule); height: 1px; background: currentColor; flex: none; }

/* === buttons === */
.ph-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; border-radius: var(--radius-pill); font-family: var(--font-body); font-weight: var(--fw-semibold); font-size: 16px; height: var(--control-h-md); padding: 0 32px; background: var(--action-primary); color: var(--action-on); box-shadow: var(--shadow-mint-btn); transition: background var(--dur-base) var(--ease-out), transform var(--dur-fast) var(--ease-out); border: none; cursor: pointer; white-space: nowrap; }
/* .ph-page a (0,1,1) écrase sinon .ph-btn (0,1,0) : le texte des boutons devenait mint sur fond mint.
   Toutes les règles de couleur du bouton sont donc réaffirmées sous .ph-page pour gagner la cascade. */
.ph-page .ph-btn, .ph-page .ph-btn:hover, .ph-page .ph-btn:visited { color: var(--action-on); }
.ph-btn:hover { background: var(--action-primary-hover); color: var(--action-on); }
.ph-btn:active { transform: scale(.98); }
.ph-btn--sm { height: var(--control-h-sm); padding: 0 20px; font-size: 14px; }
.ph-btn--lg { height: var(--control-h-lg); padding: 0 36px; }
.ph-btn--secondary { background: rgba(255,255,255,.05); color: var(--text-on-dark); border: 2px solid var(--border-dark-strong); box-shadow: none; }
.ph-btn--secondary:hover { background: rgba(255,255,255,.1); color: var(--text-on-dark); }
.ph-page .ph-btn--secondary, .ph-page .ph-btn--secondary:hover { color: var(--text-on-dark); }
.ph-btn__arrow { display: inline-block; transition: transform var(--dur-fast) var(--ease-out); }
.ph-btn--block { width: 100%; }
.ph-text-link { display: inline-flex; align-items: center; gap: 6px; padding: 12px 0; font-family: var(--font-body); font-size: 14px; font-weight: 600; letter-spacing: var(--ls-link); text-transform: uppercase; color: var(--text-accent); }
.ph-text-link:active { color: var(--ph-mint-strong); }

/* Rétroaction tactile : on retire le flash gris WebKit, l'état :active prend le relais. */
.ph-btn, .ph-text-link, .ph-nav a, .ph-nav-toggle, .ph-faq__question { -webkit-tap-highlight-color: transparent; }

/* Survol décoratif seulement sur pointeur précis : pas d'état collant après un tap. */
@media (hover: hover) {
  .ph-btn:hover .ph-btn__arrow { transform: translateX(3px); }
  .ph-faq__question:hover { color: var(--ph-mint); }
  .ph-nav a:hover { color: var(--ph-mint-ink); }
}

/* === badge === */
.ph-badge { display: inline-flex; align-items: center; align-self: flex-start; padding: 4px 14px; border-radius: var(--radius-pill); font-family: var(--font-body); font-size: 12px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; }
.ph-badge--mint { background: rgba(70,190,158,.12); color: var(--ph-mint); }
.ph-badge--gold { background: rgba(235,172,0,.15); color: var(--ph-gold); }
.ph-ticket--marine .ph-badge--gold { background: rgba(235,172,0,.10); }

/* === card === */
.ph-card { border-radius: var(--radius-lg); }
.ph-card--paper { background: var(--surface-paper); color: var(--text-on-light); padding: 32px; box-shadow: var(--shadow-paper); }

/* === quote === */
.ph-quote { margin: 0; background: none; border-left: 0; padding: 0; font-family: var(--font-display); font-style: italic; font-size: 22px; line-height: 1.3; color: var(--text-on-dark-muted); }
.ph-quote--gold { color: var(--ph-gold); }
.ph-quote--lg { font-size: 30px; padding: 0; }
.ph-quote cite { display: block; margin-top: 14px; font-style: normal; font-family: var(--font-body); font-size: 13px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--text-on-dark-subtle); }

/* === cobrand === */
.ph-cobrand { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 16px; }
.ph-cobrand__label { font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: .2em; text-transform: uppercase; color: var(--text-on-dark-subtle); }
.ph-cobrand__logos { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 16px; }
.ph-cobrand__logos img { height: 26px; width: auto; }
.ph-cobrand__x { font-family: var(--font-body); font-size: 15px; color: var(--text-on-dark-subtle); }
.ph-cobrand__logos img[alt="Diversico"] { height: 22px; }
.ph-cobrand__logos img[alt="Collège MREX"] { height: 36px; }
.ph-cobrand__logos img[alt="Hedhofis"] { height: 18px; }

/* === header === */
.ph-header { position: sticky; top: 0; z-index: 20; background: rgba(249,250,251,.85); backdrop-filter: blur(var(--blur-header)); -webkit-backdrop-filter: blur(var(--blur-header)); border-bottom: 1px solid var(--ph-border); }
.ph-header__inner { max-width: var(--container-max); margin: 0 auto; padding: 16px 32px; box-sizing: border-box; min-height: var(--header-h); display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 24px; }
.ph-wordmark { font-family: var(--font-display); font-weight: 700; font-size: 22px; letter-spacing: -0.01em; color: var(--ph-marine); order: 1; }
.ph-page .ph-wordmark { color: var(--ph-marine); }
.ph-wordmark em { font-style: italic; font-weight: 400; color: var(--ph-mint-ink); }
.ph-wordmark { display: inline-flex; align-items: center; gap: 18px; }
.ph-wordmark__mark { display: block; flex: none; width: 48px; height: 48px; }
.ph-nav { display: flex; justify-content: center; gap: 12px 24px; flex-wrap: wrap; order: 2; flex: 1 1 360px; min-width: 0; }
.ph-nav a { font-family: var(--font-body); font-size: var(--fs-nav); font-weight: 600; letter-spacing: var(--ls-nav); color: var(--ph-ink); white-space: nowrap; }
.ph-nav a:active { color: var(--ph-mint-ink); }
.ph-header__cta { order: 3; display: flex; }
.ph-lbl-court { display: none; }
.ph-nav-toggle { display: none; order: 4; flex-direction: column; justify-content: center; gap: 5px; width: 36px; height: 36px; background: none; border: none; cursor: pointer; padding: 0; }
.ph-nav-toggle span { display: block; width: 100%; height: 2px; background: var(--ph-marine); border-radius: 2px; transition: transform var(--dur-fast) var(--ease-out), opacity var(--dur-fast) var(--ease-out); }
.ph-nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.ph-nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.ph-nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* En-tête qui se matérialise (accueil seulement, et seulement si le JS tourne : classe ph-js).
   Au-dessus du hero : transparent, sans flou ni bordure, marque et liens clairs, et l'en-tête
   passe en position fixed pour que le hero se glisse dessous. Après 80 px de défilement, ph.js
   pose is-scrolled : fond clair translucide, flou, ombre douce. Menu mobile ouvert : fond
   solide (is-menu-open). Sans JS ou hors accueil : en-tête solide sticky, comme avant. */
.ph-wordmark__marks { display: grid; flex: none; }
.ph-wordmark__marks .ph-wordmark__mark { grid-area: 1 / 1; transition: opacity var(--dur-base) var(--ease-out); }
.ph-wordmark__mark--dark { opacity: 0; }
.ph-wordmark, .ph-wordmark em, .ph-nav a { transition: color var(--dur-base) var(--ease-out); }
.ph-scroll-sentinel { position: absolute; top: 0; left: 0; width: 1px; height: 80px; pointer-events: none; }
.ph-js .ph-has-hero .ph-header {
  position: fixed; left: 0; right: 0; width: 100%;
  background: rgba(249,250,251,0);
  -webkit-backdrop-filter: blur(0px) saturate(100%); backdrop-filter: blur(0px) saturate(100%);
  border-bottom: 0;
  box-shadow: 0 1px 0 rgba(37,45,58,0), 0 8px 24px -16px rgba(37,45,58,0);
  transition: background-color var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out), backdrop-filter var(--dur-base) var(--ease-out), -webkit-backdrop-filter var(--dur-base) var(--ease-out);
}
.ph-js .ph-has-hero .ph-header.is-scrolled, .ph-js .ph-has-hero .ph-header.is-menu-open {
  background: rgba(249,250,251,.85);
  -webkit-backdrop-filter: blur(var(--blur-header)) saturate(180%); backdrop-filter: blur(var(--blur-header)) saturate(180%);
  box-shadow: 0 1px 0 rgba(37,45,58,.06), 0 8px 24px -16px rgba(37,45,58,.25);
}
.ph-js .ph-has-hero .ph-header.is-menu-open { background: var(--ph-offwhite); -webkit-backdrop-filter: none; backdrop-filter: none; }
/* État transparent : couleurs claires, marque pour fond sombre. */
.ph-js .ph-has-hero .ph-header:not(.is-scrolled):not(.is-menu-open) .ph-wordmark { color: var(--ph-offwhite); }
.ph-js .ph-has-hero .ph-header:not(.is-scrolled):not(.is-menu-open) .ph-wordmark em { color: var(--ph-mint); }
.ph-js .ph-has-hero .ph-header:not(.is-scrolled):not(.is-menu-open) .ph-nav a { color: var(--ph-offwhite); }
.ph-js .ph-has-hero .ph-header:not(.is-scrolled):not(.is-menu-open) .ph-nav a:hover { color: var(--ph-mint); }
.ph-js .ph-has-hero .ph-header:not(.is-scrolled):not(.is-menu-open) .ph-nav-toggle span { background: var(--ph-offwhite); }
.ph-js .ph-has-hero .ph-header:not(.is-scrolled):not(.is-menu-open) .ph-wordmark__mark--light { opacity: 0; }
.ph-js .ph-has-hero .ph-header:not(.is-scrolled):not(.is-menu-open) .ph-wordmark__mark--dark { opacity: 1; }
/* Voile de tête : garde les liens clairs lisibles quand la photo passe sous l'en-tête. */
.ph-js .ph-has-hero .ph-hero__veil::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 160px; background: linear-gradient(180deg, rgba(37,45,58,.6) 0, rgba(37,45,58,0) 100%); }
/* Le hero se glisse sous l'en-tête fixe : le contenu garde la même position qu'avant. */
.ph-js .ph-has-hero .ph-hero__inner { padding-top: calc(120px + var(--ph-header-live, var(--header-h))); }
.ph-js .admin-bar.ph-has-hero .ph-header { top: 32px; }
@media (max-width: 782px) { .ph-js .admin-bar.ph-has-hero .ph-header { top: 46px; } }
@media (prefers-reduced-transparency: reduce) {
  .ph-header, .ph-js .ph-has-hero .ph-header.is-scrolled { background: var(--ph-offwhite); -webkit-backdrop-filter: none; backdrop-filter: none; }
}

/* === hero === */
.ph-hero { position: relative; background: var(--ph-marine); color: var(--ph-offwhite); overflow: hidden; border-top: none; padding: 0; }
.ph-hero__bg { position: absolute; inset: 0; pointer-events: none; }
.ph-hero__photo { position: absolute; top: 0; bottom: 0; right: 0; width: 62%; pointer-events: auto; overflow: hidden; }
.ph-hero__photo img { width: 100%; height: 100%; object-fit: cover; object-position: 20% center; }
.ph-hero__veil { position: absolute; inset: 0; background: linear-gradient(90deg, #252d3a 42%, rgba(37,45,58,.86) 62%, rgba(37,45,58,.25) 100%); }
.ph-hero__inner { position: relative; max-width: var(--content-max); margin: 0 auto; padding: 120px 32px 104px; box-sizing: border-box; display: flex; flex-direction: column; gap: 28px; pointer-events: none; }
.ph-hero__eyebrow-wrap, .ph-hero__ctas, .ph-hero__cobrand { pointer-events: auto; }
.ph-hero__title { font-size: clamp(1.95rem, 6vw, 4rem); line-height: 1.02; max-width: 820px; }
.ph-hero__title em { font-weight: 400; font-style: italic; color: var(--ph-mint); }
.ph-hero__lead { margin: 0; font-family: var(--font-display); font-size: clamp(20px, 2.2vw, 26px); line-height: 1.3; color: var(--ph-mint); max-width: 680px; }
.ph-hero__text { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--text-on-dark-muted); max-width: 36rem; }
.ph-hero__meta { display: flex; flex-wrap: wrap; gap: 12px 32px; font-family: var(--font-body); font-size: 14px; color: var(--text-on-dark-muted); max-width: 820px; }
.ph-hero__meta-item { display: inline-flex; align-items: center; gap: 8px; }
.ph-hero__meta-item .ph-icon { font-size: 18px; color: var(--ph-mint); }
.ph-hero__ctas { display: flex; gap: 12px; flex-wrap: wrap; padding-top: 4px; }
.ph-hero__cobrand { padding-top: 12px; }

/* === hero cast === */
.ph-hero__cast { order: 3; flex: 0 0 100%; display: flex; flex-direction: column; gap: 10px; padding-top: 12px; }
.ph-hero__cast-row { display: flex; flex-wrap: wrap; gap: 10px 28px; }
.ph-hero__cast-person { display: flex; align-items: center; gap: 12px; min-width: 0; }
.ph-hero__cast-photo { flex: 0 0 56px; width: 56px; height: 56px; border-radius: 50%; overflow: hidden; border: 2px solid var(--ph-mint); box-sizing: border-box; background: var(--ph-marine-2); }
.ph-hero__cast-photo img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center 20%; }
.ph-hero__cast-photo .ph-img-placeholder { min-height: 0; padding: 0; border: 0; border-radius: 50%; font-size: 0; }
.ph-hero__cast-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; font-family: var(--font-body); font-size: 13px; line-height: 17px; color: var(--text-on-dark-muted); }
.ph-hero__cast-txt strong { font-size: 15px; line-height: 19px; font-weight: 700; color: var(--ph-offwhite); }
.ph-hero__cast-price { margin: 0; font-family: var(--font-body); font-size: 14px; line-height: 20px; color: var(--text-on-dark-muted); }
.ph-hero__cast-price strong { color: var(--ph-offwhite); font-weight: 700; }

/* === bandeau === */
.ph-bandeau { background: var(--ph-marine-2); border-top: 1px solid rgba(255,255,255,.08); border-bottom: 1px solid rgba(255,255,255,.08); padding: 0; }
.ph-bandeau__grid { max-width: var(--content-max); margin: 0 auto; padding: 24px 32px; box-sizing: border-box; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,280px), 1fr)); gap: 16px 40px; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--text-on-dark-muted); }
.ph-bandeau__item { display: flex; gap: 12px; align-items: flex-start; }
.ph-bandeau__item .ph-icon { font-size: 20px; margin-top: 1px; color: var(--ph-mint); }

/* === pourquoi === */
.ph-pourquoi__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,380px), 1fr)); gap: 56px 80px; }
.ph-pourquoi__aside { display: flex; flex-direction: column; gap: 24px; align-self: start; }
.ph-pourquoi__aside h2 { color: var(--ph-marine); }
.ph-pourquoi__lead { margin: 0; font-family: var(--font-display); font-size: 23px; line-height: 1.3; color: var(--ph-mint-ink); max-width: 30rem; }
.ph-pourquoi__body { display: flex; flex-direction: column; gap: 20px; font-family: var(--font-body); font-size: 17px; line-height: 27px; color: var(--ph-ink); max-width: var(--prose-max); }
.ph-pourquoi__body p { margin: 0; }
.ph-pourquoi__callout { margin: 8px 0 0; font-family: var(--font-display); font-size: 28px; line-height: 1.2; font-weight: 700; color: var(--ph-marine); }
.ph-pourquoi__divider { height: 1px; background: var(--ph-border); margin: 16px 0; }
.ph-pourquoi__subhead { margin: 0; font-family: var(--font-display); font-size: 23px; line-height: 1.3; font-weight: 600; color: var(--ph-marine); }
.ph-pourquoi__cta { padding-top: 12px; }

/* === levier === */
.ph-levier__inner { position: relative; display: flex; flex-direction: column; gap: 64px; }
.ph-levier__top { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,380px), 1fr)); gap: 48px 80px; align-items: start; }
.ph-levier__intro { display: flex; flex-direction: column; gap: 24px; }
.ph-levier__intro h2 { color: var(--ph-offwhite); }
.ph-levier__stats { display: flex; gap: 48px; flex-wrap: wrap; padding-top: 16px; }
.ph-levier__stat { display: flex; flex-direction: column; gap: 6px; }
.ph-levier__stat-num { font-family: var(--font-display); font-size: 64px; font-weight: 700; line-height: 1; color: var(--ph-offwhite); }
.ph-levier__stat-num--mint { color: var(--ph-mint); }
.ph-levier__stat-label { font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: .2em; text-transform: uppercase; color: var(--text-on-dark-muted); }
.ph-levier__text { display: flex; flex-direction: column; gap: 18px; font-family: var(--font-body); font-size: 16px; line-height: 25px; color: var(--text-on-dark-muted); max-width: var(--prose-max); }
.ph-levier__text p { margin: 0; }
.ph-levier__highlight { font-family: var(--font-display); font-size: 23px; line-height: 1.3; font-weight: 600; color: var(--ph-offwhite); }
.ph-levier__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,300px), 1fr)); gap: 0; border: 1px solid var(--border-dark); border-radius: var(--radius-lg); overflow: hidden; }
.ph-pillar { position: relative; padding: 36px 32px; border-right: 1px solid var(--border-dark); border-bottom: 1px solid var(--border-dark); display: flex; flex-direction: column; gap: 14px; min-height: 180px; box-sizing: border-box; }
.ph-pillar__num { display: block; font-family: var(--font-display); font-size: 22px; font-weight: 700; line-height: 1; color: rgba(249,250,251,.4); }
.ph-pillar__text { margin: 0; font-family: var(--font-display); font-size: 20px; line-height: 1.35; color: var(--ph-offwhite); position: relative; }
.ph-pillar--cta { justify-content: flex-end; background: rgba(70,190,158,.08); }
.ph-pillar:nth-child(3n) { border-right: 0; }
.ph-pillar--cta p { margin: 0; font-family: var(--font-display); font-style: italic; font-size: 22px; line-height: 1.3; color: var(--ph-mint); }

/* === conferenciers === */
.ph-conferenciers__inner { position: relative; display: flex; flex-direction: column; gap: 80px; }
.ph-conferenciers__intro { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,380px), 1fr)); gap: 40px 80px; align-items: start; }
.ph-conferenciers__intro-text { display: flex; flex-direction: column; gap: 24px; }
.ph-conferenciers__intro-text h2 { color: var(--ph-offwhite); }
.ph-conferenciers__tagline { margin: 0; font-family: var(--font-display); font-size: 26px; line-height: 1.25; color: var(--ph-mint); }
.ph-conferenciers__intro-body { display: flex; flex-direction: column; gap: 18px; font-family: var(--font-body); font-size: 16px; line-height: 25px; color: var(--text-on-dark-muted); max-width: var(--prose-max); }
.ph-conferenciers__intro-body p { margin: 0; }
.ph-conferenciers__intro-body strong { color: var(--ph-offwhite); }

.ph-speaker { display: grid; grid-template-columns: 1fr; gap: 48px 64px; align-items: start; border-top: 1px solid var(--border-dark); padding-top: 64px; }
.ph-speaker__media { display: flex; flex-direction: column; gap: 20px; }
.ph-speaker__photo { position: relative; width: 100%; aspect-ratio: 4 / 5; max-width: 480px; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-marine); }
.ph-speaker__photo img { width: 100%; height: 100%; object-fit: cover; }
.ph-img-placeholder { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; min-height: 160px; border: 1px dashed rgba(255,255,255,.3); border-radius: inherit; background: rgba(255,255,255,.04); color: var(--text-on-dark-subtle); font-family: var(--font-body); font-size: 13px; text-align: center; padding: 16px; box-sizing: border-box; }
.ph-img-placeholder--light { border-color: var(--ph-ink-muted); background: rgba(15,27,41,.04); color: var(--ph-ink-muted); }
.ph-speaker__order { display: flex; align-items: center; gap: 12px; font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: .2em; text-transform: uppercase; color: var(--text-on-dark-muted); }
.ph-speaker__order-num { font-family: var(--font-display); font-size: 28px; font-weight: 700; letter-spacing: 0; text-transform: none; color: rgba(249,250,251,.35); }
.ph-speaker__content { display: flex; flex-direction: column; gap: 20px; }
.ph-speaker__content h3 { margin: 0; font-family: var(--font-display); font-size: clamp(28px,3vw,36px); line-height: 1.1; font-weight: 700; letter-spacing: -0.01em; color: var(--ph-offwhite); }
.ph-speaker__role { margin: 0; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--text-on-dark-muted); }
.ph-speaker__title-box { display: flex; flex-direction: column; gap: 6px; padding: 20px 24px; border-radius: var(--radius-md); background: var(--ph-marine-2); border: 1px solid var(--border-dark); }
.ph-speaker__title-box-title { font-family: var(--font-display); font-size: 26px; line-height: 1.2; font-weight: 700; letter-spacing: -0.01em; color: var(--ph-mint); }
.ph-speaker__title-box-title--gold { color: var(--ph-gold); }
.ph-speaker__title-box-sub { font-family: var(--font-display); font-style: italic; font-size: 17px; line-height: 1.4; color: var(--text-on-dark-muted); }
.ph-speaker__bio p { margin: 0 0 18px; font-family: var(--font-body); font-size: 16px; line-height: 25px; color: var(--text-on-dark-muted); }
.ph-speaker__bio p:last-child { margin-bottom: 0; }
.ph-speaker__quote { padding: 8px 0; }
.ph-speaker__program-label { font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: .3em; text-transform: uppercase; color: var(--ph-mint); padding-top: 12px; }
.ph-speaker__program { display: flex; flex-direction: column; gap: 14px; font-family: var(--font-body); font-size: 15px; line-height: 23px; color: var(--text-on-dark-muted); }
.ph-speaker__program-item { display: flex; gap: 12px; align-items: flex-start; }
.ph-speaker__program-item .ph-icon { font-size: 18px; margin-top: 1.5px; color: var(--ph-mint); }
.ph-speaker__program-item strong { color: var(--ph-offwhite); }

.ph-conferenciers__outro { display: flex; flex-direction: column; align-items: center; gap: 28px; text-align: center; border-top: 1px solid var(--border-dark); padding-top: 64px; }
.ph-conferenciers__outro p { margin: 0; font-family: var(--font-display); font-size: clamp(20px,2.4vw,26px); line-height: 1.35; color: var(--ph-offwhite); max-width: 44rem; }
.ph-conferenciers__outro em { font-style: italic; color: var(--ph-mint); }

/* === programme === */
.ph-programme__inner { position: relative; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,340px), 1fr)); gap: 48px 64px; }
.ph-programme__intro { display: flex; flex-direction: column; gap: 20px; align-self: start; }
.ph-programme__intro h2 { color: var(--ph-offwhite); }
.ph-programme__intro p { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--text-on-dark-muted); max-width: 28rem; }
.ph-programme__cta { padding-top: 8px; }
.ph-programme__list { border-bottom: 1px solid var(--border-dark); }

.ph-agenda-item { display: flex; gap: 20px; flex-wrap: wrap; align-items: flex-start; padding: 24px 0; border-top: 1px solid var(--border-dark); }
.ph-agenda-item--highlight { padding: 24px; margin: 0 -24px; border-radius: var(--radius-md); background: rgba(70,190,158,.06); }
.ph-agenda-item__time { flex: 0 0 96px; font-family: var(--font-display); font-size: 18px; font-weight: 700; color: var(--ph-offwhite); }
.ph-agenda-item__time span { display: block; font-family: var(--font-body); font-size: 12px; font-weight: 500; color: var(--text-on-dark-subtle); }
.ph-agenda-item__body { flex: 1 1 240px; display: flex; flex-direction: column; gap: 6px; }
.ph-agenda-item__type { font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: .2em; text-transform: uppercase; color: var(--ph-mint); }
.ph-agenda-item__title { font-family: var(--font-display); font-size: 20px; font-weight: 600; color: var(--ph-offwhite); }
.ph-agenda-item__meta { font-family: var(--font-body); font-size: 14px; line-height: 21px; color: var(--text-on-dark-muted); }

/* === galerie === */
/* Jusqu'à 6 photos 4:3 (section rendue seulement si au moins une photo est renseignée). Desktop :
   grille de 3 colonnes sur 2 rangées. Mobile : défilement horizontal avec scroll-snap. */
.ph-galerie { padding: var(--space-8) 0; }
.ph-galerie__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.ph-galerie__grid--n1 { grid-template-columns: 1fr; }
.ph-galerie__grid--n2 { grid-template-columns: repeat(2, 1fr); }
.ph-galerie__grid--n5 { grid-template-columns: repeat(6, 1fr); }
.ph-galerie__grid--n5 .ph-galerie__item { grid-column: span 2; }
.ph-galerie__grid--n5 .ph-galerie__item:nth-child(-n+2) { grid-column: span 3; }
.ph-galerie__grid:focus-visible { outline: none; box-shadow: var(--shadow-focus); border-radius: var(--radius-lg); }
.ph-galerie__item { margin: 0; aspect-ratio: 4 / 3; border-radius: var(--radius-lg); overflow: hidden; background: var(--ph-marine-2); }
.ph-galerie__item img { width: 100%; height: 100%; object-fit: cover; }

/* === a-qui === */
.ph-a-qui__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,380px), 1fr)); gap: 48px 80px; align-items: start; }
.ph-a-qui__intro { display: flex; flex-direction: column; gap: 24px; }
.ph-a-qui__intro h2 { color: var(--ph-offwhite); }
.ph-a-qui__intro p { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 25px; color: var(--text-on-dark-muted); max-width: 36rem; }
.ph-a-qui__intro p strong { color: var(--ph-offwhite); }
.ph-a-qui__card { display: flex; flex-direction: column; gap: 0; border-radius: var(--radius-lg); background: var(--ph-marine-2); border: 1px solid var(--border-dark); padding: 8px 32px; }
.ph-a-qui__card-label { font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: .3em; text-transform: uppercase; color: var(--ph-mint); padding: 24px 0 8px; }
.ph-a-qui__item { display: flex; gap: 14px; align-items: flex-start; padding: 18px 0; border-top: 1px solid var(--border-dark); font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--ph-offwhite); }
.ph-a-qui__item .ph-icon { font-size: 18px; margin-top: 3px; color: var(--ph-mint); }
.ph-a-qui__item:last-child { padding-bottom: 26px; }

/* === fondations === */
.ph-fondations__inner { position: relative; display: flex; flex-direction: column; gap: 48px; }
.ph-fondations__head { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 24px; }
.ph-fondations__head h2 { color: var(--ph-offwhite); }
.ph-fondations__head p { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 25px; color: var(--text-on-dark-muted); max-width: var(--prose-max); }
.ph-fondations__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,320px), 1fr)); gap: 24px; }
.ph-fondations__grid--single { max-width: 560px; margin: 0 auto; }
.ph-fondation__logo { width: 100%; height: 96px; border-radius: var(--radius-sm); overflow: hidden; background: var(--ph-paper-soft); display: flex; align-items: center; justify-content: center; }
.ph-fondation__logo img { max-width: 100%; max-height: 100%; object-fit: contain; }
.ph-fondation__nom { font-family: var(--font-display); font-size: 23px; line-height: 28px; letter-spacing: -0.025em; font-weight: 700; color: var(--ph-marine); padding-top: 8px; }
.ph-fondation__texte { margin-top: 8px; font-family: var(--font-body); font-size: 15px; line-height: 23px; color: var(--ph-ink); }
.ph-fondations__outro { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 16px; max-width: 44rem; margin: 0 auto; }
.ph-fondations__outro p { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 25px; color: var(--text-on-dark-muted); }
.ph-fondations__outro strong { color: var(--ph-offwhite); }
.ph-fondations__note { margin: 0; font-family: var(--font-display); font-style: italic; font-size: 20px; line-height: 1.4; color: var(--ph-gold); }
/* .ph-fondations__outro p (0,1,1) écrase sinon .ph-fondations__note (0,1,0) : la note
   ressortait en Inter gris au lieu de Playfair italique or (revue design 2.3). */
.ph-fondations__outro .ph-fondations__note { font-family: var(--font-display); font-size: 20px; line-height: 1.4; color: var(--ph-gold); }

/* === repartir === */
.ph-repartir__inner { display: flex; flex-direction: column; gap: 48px; }
.ph-repartir__head { display: flex; flex-direction: column; gap: 20px; max-width: 720px; }
.ph-repartir__head h2 { color: var(--ph-offwhite); }
.ph-repartir__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,300px), 1fr)); gap: 0; border: 1px solid var(--border-dark); border-radius: var(--radius-lg); overflow: hidden; }
.ph-repartir__item { position: relative; padding: 32px; border-right: 1px solid var(--border-dark); border-bottom: 1px solid var(--border-dark); display: flex; flex-direction: column; gap: 16px; box-sizing: border-box; }
.ph-repartir__icon { width: 48px; height: 48px; border-radius: 50%; background: rgba(70,190,158,.12); display: flex; align-items: center; justify-content: center; }
.ph-repartir__icon .ph-icon { font-size: 22px; color: var(--ph-mint); }
.ph-repartir__title { font-family: var(--font-display); font-size: 23px; line-height: 28px; letter-spacing: -0.025em; font-weight: 700; color: var(--ph-offwhite); }
.ph-repartir__text { margin: 0; font-family: var(--font-body); font-size: 15px; line-height: 23px; color: var(--text-on-dark-muted); }
.ph-repartir__item--cta { background: rgba(70,190,158,.08); }
.ph-repartir__item--cta .ph-repartir__icon { background: rgba(70,190,158,.16); }
.ph-repartir__item:nth-child(3n) { border-right: 0; }

/* === pourquoi30 === */
.ph-pourquoi30__inner { position: relative; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 32px; }
.ph-pourquoi30__lead { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--text-on-dark-muted); }
.ph-pourquoi30__quote-wrap { max-width: 52rem; }
.ph-pourquoi30__tagline { margin: 0; font-family: var(--font-display); font-size: 23px; line-height: 1.3; color: var(--ph-offwhite); }
.ph-pourquoi30__tagline em { font-style: italic; color: var(--ph-mint); }

/* === billets === */
.ph-billets__inner { display: flex; flex-direction: column; gap: 48px; }
.ph-billets__head { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 20px; }
.ph-billets__head h2 { color: var(--ph-marine); }
.ph-billets__head p { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--ph-ink-muted); max-width: 36rem; }
.ph-billets__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,320px), 1fr)); gap: 24px; max-width: 960px; width: 100%; margin: 0 auto; box-sizing: border-box; }
.ph-ticket { display: flex; flex-direction: column; gap: 16px; padding: 40px; border-radius: var(--radius-lg); }
.ph-ticket--light { background: var(--ph-white); color: var(--ph-ink); border: 1px solid var(--ph-border); }
.ph-ticket--marine { background: var(--ph-marine-2); color: var(--ph-offwhite); }
.ph-ticket__label { font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: .3em; text-transform: uppercase; color: var(--ph-mint-ink); }
.ph-ticket--marine .ph-ticket__label { color: var(--ph-mint); }
.ph-ticket__header-row { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.ph-ticket__price-row { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.ph-ticket__price { font-family: var(--font-display); font-size: 56px; font-weight: 700; line-height: 1; color: var(--ph-marine); }
.ph-ticket--marine .ph-ticket__price { color: var(--ph-offwhite); }
.ph-ticket__price-barre { font-family: var(--font-body); font-size: 20px; color: var(--ph-ink-muted); text-decoration: line-through; }
.ph-ticket__price-note { font-family: var(--font-body); font-size: 14px; color: var(--text-on-dark-muted); }
.ph-ticket__desc { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--ph-ink-muted); }
.ph-ticket--marine .ph-ticket__desc { color: var(--text-on-dark-muted); }
.ph-ticket__features { display: flex; flex-direction: column; gap: 10px; padding: 8px 0 20px; font-family: var(--font-body); font-size: 15px; }
.ph-ticket__feature { display: flex; gap: 10px; align-items: center; }
.ph-ticket__feature .ph-icon { font-size: 18px; color: var(--ph-mint); }
.ph-ticket--light .ph-ticket__feature .ph-icon { color: var(--ph-mint-ink); }
.ph-ticket__cta { margin-top: auto; }
.ph-billets__note { margin: 0; text-align: center; font-family: var(--font-body); font-size: 14px; line-height: 22px; color: var(--ph-ink-muted); font-style: italic; }

/* === entreprises === */
.ph-entreprises__inner { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 40px; }
.ph-entreprises__head { display: flex; flex-direction: column; align-items: center; gap: 20px; }
.ph-entreprises__head h2 { color: var(--ph-offwhite); }
.ph-entreprises__head p { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--text-on-dark-muted); max-width: 36rem; }
.ph-entreprises__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,200px), 1fr)); gap: 16px; width: 100%; }
.ph-entreprises__logo { height: 110px; border-radius: var(--radius-md); overflow: hidden; background: var(--ph-paper); box-shadow: var(--shadow-paper); display: flex; align-items: center; justify-content: center; }
.ph-entreprises__logo img { max-width: 80%; max-height: 70%; object-fit: contain; }
.ph-entreprises__note { margin: 0; font-family: var(--font-body); font-size: 15px; line-height: 23px; color: var(--text-on-dark-subtle); max-width: 36rem; }

/* === faq === */
.ph-faq__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,320px), 1fr)); gap: 48px 80px; }
.ph-faq__intro { display: flex; flex-direction: column; gap: 20px; align-self: start; }
.ph-faq__intro h2 { color: var(--ph-offwhite); }
.ph-faq__intro p { margin: 0; font-family: var(--font-body); font-size: 16px; line-height: 24px; color: var(--text-on-dark-muted); max-width: 28rem; }
.ph-faq__intro a { color: var(--ph-mint); font-weight: 600; }
.ph-faq__list { display: flex; flex-direction: column; border-top: 1px solid var(--border-dark); }
.ph-faq__item { border-bottom: 1px solid var(--border-dark); }
.ph-faq__question { all: unset; -webkit-tap-highlight-color: transparent; box-sizing: border-box; cursor: pointer; width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 24px; padding: 22px 0; font-family: var(--font-display); font-size: 20px; line-height: 1.3; font-weight: 600; color: var(--ph-offwhite); text-align: left; }
.ph-faq__question:active { color: var(--ph-mint); }
.ph-faq__question .ph-icon { font-size: 20px; stroke-width: 3; color: var(--ph-mint); transition: transform var(--dur-base) var(--ease-out); }
.ph-faq__item.is-open .ph-faq__question .ph-icon { transform: rotate(45deg); }
/* Ouverture fluide : wrapper grid dont la rangée passe de 0fr à 1fr, l'enfant coupe son
   débordement. Une réponse fermée est en visibility:hidden (après la transition), donc
   hors de l'ordre de tabulation et de l'arbre d'accessibilité. */
.ph-faq__answer { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 300ms var(--ease-out); }
.ph-faq__item.is-open .ph-faq__answer { grid-template-rows: 1fr; }
.ph-faq__answer-inner { overflow: hidden; min-height: 0; visibility: hidden; transition: visibility 0s linear 300ms; }
.ph-faq__item.is-open .ph-faq__answer-inner { visibility: visible; transition-delay: 0s; }
.ph-faq__answer p { margin: 0; padding: 0 48px 24px 0; font-family: var(--font-body); font-size: 16px; line-height: 25px; color: var(--text-on-dark-muted); opacity: 0; transition: opacity var(--dur-fast) var(--ease-out); }
.ph-faq__item.is-open .ph-faq__answer p { opacity: 1; transition: opacity 300ms var(--ease-out) 60ms; }

/* === fermeture === */
.ph-fermeture { padding: 128px 0 96px; }
.ph-fermeture__inner { position: relative; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 32px; }
.ph-fermeture__title { margin: 0; font-family: var(--font-display); font-weight: 700; font-size: clamp(32px,5vw,60px); line-height: 1.02; letter-spacing: var(--ls-title); color: var(--ph-offwhite); max-width: 880px; }
.ph-fermeture__title em { font-weight: 400; font-style: italic; color: var(--ph-mint); }
.ph-fermeture__body { display: flex; flex-direction: column; gap: 16px; max-width: var(--prose-max); font-family: var(--font-body); font-size: 17px; line-height: 27px; color: var(--text-on-dark-muted); }
.ph-fermeture__body p { margin: 0; }
.ph-fermeture__body strong { color: var(--ph-offwhite); }
.ph-fermeture__cta-line { margin: 0; font-family: var(--font-display); font-size: 24px; line-height: 1.3; color: var(--ph-offwhite); }
.ph-fermeture__meta { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px 32px; font-family: var(--font-body); font-size: 14px; color: var(--text-on-dark-muted); }
.ph-fermeture__meta span { display: inline-flex; align-items: center; gap: 8px; }
.ph-fermeture__meta .ph-icon { font-size: 18px; color: var(--ph-mint); }
.ph-fermeture__cobrand { display: flex; flex-direction: column; align-items: center; gap: 12px; padding-top: 24px; }
.ph-fermeture__cobrand .ph-cobrand, .ph-fermeture__cobrand .ph-cobrand__logos { justify-content: center; }
.ph-fermeture__cobrand p { margin: 0; font-family: var(--font-body); font-size: 13px; line-height: 20px; color: var(--text-on-dark-subtle); max-width: 30rem; }

/* === footer === */
.ph-footer { background: var(--ph-marine); color: var(--text-on-dark-muted); padding: 64px 0 40px; border-top: 1px solid var(--border-dark); }
.ph-footer__inner { max-width: var(--content-max); margin: 0 auto; padding: 0 var(--container-pad); box-sizing: border-box; display: flex; flex-direction: column; gap: 40px; }
.ph-footer__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%,200px), 1fr)); gap: 40px; }
.ph-footer__brand { display: flex; flex-direction: column; gap: 16px; }
.ph-wordmark--footer { display: flex; flex-direction: column; gap: 6px; font-family: var(--font-display); font-weight: 700; font-size: 28px; color: var(--ph-offwhite); }
.ph-wordmark--footer em { font-style: italic; font-weight: 400; color: var(--ph-mint); }
.ph-wordmark--footer span { font-family: var(--font-body); font-size: 13px; font-weight: 500; letter-spacing: .05em; color: var(--text-on-dark-subtle); }
.ph-page .ph-wordmark--footer { color: var(--ph-offwhite); }
.ph-wordmark--footer { flex-direction: row; align-items: center; gap: 18px; }
.ph-wordmark--footer .ph-wordmark__mark { width: 56px; height: 56px; }
.ph-wordmark--footer .ph-wordmark__text { display: flex; flex-direction: column; gap: 6px; }
.ph-footer__col { display: flex; flex-direction: column; gap: 12px; }
.ph-footer__label { font-family: var(--font-body); font-size: 11px; font-weight: 600; letter-spacing: .3em; text-transform: uppercase; color: var(--ph-mint); }
.ph-footer__col a, .ph-footer__col span { font-family: var(--font-body); font-size: 14px; line-height: 22px; color: inherit; }
.ph-footer__col a { display: inline-block; padding: 12px 0; }
.ph-footer__bottom { border-top: 1px solid var(--border-dark); padding-top: 24px; display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; font-family: var(--font-body); font-size: 13px; color: var(--text-on-dark-subtle); }

/* === desktop (>= 1024 px) === */
@media (min-width: 1024px) {
  /* Colonnes de titre collantes : le titre reste à l'écran pendant qu'on lit la colonne de droite.
     Le sticky exige qu'aucun ancêtre n'ait overflow hidden ou auto : .ph-section utilise clip. */
  .ph-pourquoi__aside, .ph-programme__intro, .ph-a-qui__intro, .ph-faq__intro, .ph-speaker__media { position: sticky; top: calc(var(--header-h) + 40px); align-self: start; }
  /* Bandeau de crédibilité : plus lisible */
  .ph-bandeau__grid { font-size: 16px; line-height: 24px; color: var(--text-on-dark); }
  .ph-bandeau__item .ph-icon { font-size: 22px; margin-top: 1px; }
}

/* === motion === */
/* Fondu critique, sans rebond, interruptible : seulement opacity et transform, jamais de
   blocage de l'input. Les blocs marqués data-ph-reveal ne sont cachés que si le JS tourne
   (classe ph-js sur <html>) ; ph.js pose is-in une seule fois, avec un décalage de 60 ms
   entre frères. Le hero n'est jamais caché au chargement (LCP) : un fondu de 240 ms sur son
   contenu, sans masquer la photo. */
@keyframes ph-fade-in { from { opacity: 0; } to { opacity: 1; } }
.ph-js [data-ph-reveal] { opacity: 0; transform: translateY(12px); transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); transition-delay: var(--ph-delay, 0ms); }
.ph-js [data-ph-reveal].is-in { opacity: 1; transform: none; }
.ph-js [data-ph-reveal].is-instant { transition: none; }
.ph-js .ph-hero__inner { animation: ph-fade-in var(--dur-base) var(--ease-out) both; }

/* === responsive === */

/* Deux colonnes seulement dès 821 px : les règles de miroir de Pierre (photo à droite, ligne
   d'ordre packée à droite) ne valent qu'en deux colonnes. En une colonne, Pierre reprend la
   même structure que Jérémy : photo, ligne d'ordre alignée à gauche, puis le contenu. */
@media (min-width: 821px) {
  .ph-speaker { grid-template-columns: 1fr 1fr; }
  .ph-speaker--reverse .ph-speaker__media { order: 2; align-items: flex-end; }
  .ph-speaker--reverse .ph-speaker__content { order: 1; }
  .ph-speaker--reverse .ph-speaker__order { flex-direction: row-reverse; }
}

@media (max-width: 820px) {
  /* Un seul bloc racine canonique en tête du fichier : on resserre les gouttières et le
     rythme vertical mobile en réaffirmant les propriétés consommatrices, pas le token
     lui-même (revue design 4.1, 4.2). */
  .ph-section { padding: 72px 0; }
  .ph-container, .ph-footer__inner { padding: 0 20px; }
  .ph-nav { display: none; width: 100%; order: 4; flex-direction: column; align-items: flex-start; gap: 12px; padding-top: 16px; border-top: 1px solid var(--ph-border); }
  .ph-nav.is-open { display: flex; }
  .ph-nav a { display: block; padding: 12px 0; font-size: 16px; }
  .ph-nav-toggle { display: flex; }
  .ph-hero__photo { width: 100%; }
  .ph-hero__photo img { object-position: 25% top; }
  .ph-hero__veil { background: linear-gradient(180deg, rgba(37,45,58,.72) 0%, rgba(37,45,58,.9) 40%, #252d3a 70%); }
  .ph-hero__inner { padding: 48px 20px 56px; }
  .ph-js .ph-has-hero .ph-hero__inner { padding-top: calc(48px + var(--ph-header-live, var(--header-h))); }
  .ph-conferenciers__inner, .ph-levier__inner { gap: 48px; }
  .ph-galerie__grid { display: flex; gap: 12px; overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scroll-padding: 0 20px; margin: 0 -20px; padding: 0 20px 8px; scrollbar-width: none; }
  .ph-galerie__grid::-webkit-scrollbar { display: none; }
  .ph-galerie__item { flex: 0 0 78%; scroll-snap-align: start; }
}

/* En-tête mobile : mot-symbole, bouton et menu tenaient sur 2 lignes (revue design 7.1, 8.2) */
@media (max-width: 520px) {
  .ph-header__inner { padding: 10px 16px; min-height: var(--header-h-sm); gap: 8px; }
  .ph-js .ph-has-hero .ph-hero__inner { padding-top: calc(48px + var(--ph-header-live, var(--header-h-sm))); }
  .ph-wordmark { font-size: 17px; gap: 8px; }
  .ph-wordmark__mark { width: 36px; height: 36px; }
  .ph-wordmark--footer { gap: 14px; font-size: 19px; }
  .ph-wordmark--footer .ph-wordmark__mark { width: 48px; height: 48px; }
  .ph-header__cta { margin-left: auto; }
  .ph-header__cta .ph-btn { height: 44px; padding: 0 14px; }
  .ph-lbl-long { display: none; }
  .ph-lbl-court { display: inline; }
  .ph-nav-toggle { order: 3; width: 44px; height: 44px; }
}

@media (max-width: 480px) {
  .ph-ticket { padding: 28px 24px; }
}

/* Hero mobile (< 520 px) : le paragraphe d'accroche et la ligne des conférenciers sont masqués
   par la classe utilitaire (le DOM desktop reste intact), et le voile est allégé en haut pour
   que la foule se voie dans le tiers supérieur, puis marine plein sous le texte. */
@media (max-width: 519.98px) {
  .ph-hide-sm { display: none; }
  /* Premier écran : les deux visages, les noms et le prix tiennent sous le bouton d'achat (iPhone 13, 390 x 664). */
  .ph-hero__ctas-prog { order: 4; }
  .ph-hero__inner { gap: 14px; }
  .ph-js .ph-has-hero .ph-hero__inner { padding-top: calc(16px + var(--ph-header-live, var(--header-h-sm))); }
  .ph-hero__title { font-size: 1.75rem; }
  .ph-hero__lead { font-size: 17px; }
  .ph-hero__meta { gap: 6px 24px; font-size: 13px; }
  .ph-hero__ctas { gap: 10px; padding-top: 0; }
  .ph-hero__cast { gap: 8px; padding-top: 2px; }
  .ph-hero__cast-row { gap: 8px 16px; }
  .ph-hero__cast-photo { flex-basis: 48px; width: 48px; height: 48px; }
  .ph-hero__cast-person { gap: 10px; }
  .ph-hero__veil { background: linear-gradient(180deg, rgba(37,45,58,.42) 0%, rgba(37,45,58,.5) 22%, rgba(37,45,58,.84) 36%, rgba(37,45,58,.93) 48%, #252d3a 66%); }
  /* L'eyebrow menthe (11 px) passe en clair sur la photo : le menthe n'atteint pas 4,5:1 sur un fond de foule. */
  .ph-hero .ph-eyebrow { color: var(--text-on-dark); }
  .ph-hero .ph-eyebrow::before { background: var(--ph-mint); }
}

/* Mouvement réduit : aucune translation, aucune apparition, défilement instantané, tout visible dès le chargement. */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .ph-js [data-ph-reveal], .ph-js [data-ph-reveal].is-in { opacity: 1; transform: none; transition: none; }
  .ph-js .ph-hero__inner { animation: none; }
  .ph-btn:hover .ph-btn__arrow, .ph-btn:active { transform: none; }
  .ph-faq__answer, .ph-faq__answer-inner, .ph-faq__answer p, .ph-faq__item.is-open .ph-faq__answer p, .ph-faq__question .ph-icon { transition: none; }
  .ph-js .ph-has-hero .ph-header, .ph-wordmark, .ph-wordmark em, .ph-nav a, .ph-wordmark__marks .ph-wordmark__mark { transition: none; }
}

/* === tableau === */
/* Page /tableau (template page-tableau.php) : tout est scopé sous .ph-tableau, tokens --ph-* du thème. */
/* !important : style.css du thème impose body{background-color:marine !important}. */
body.ph-page.ph-tableau { background-color: var(--ph-paper) !important; color: var(--ph-ink); font-size: 15px; line-height: 1.45; }
.ph-tableau .tb-entete { background: var(--ph-marine); color: var(--ph-offwhite); }
.ph-tableau .tb-entete__in { max-width: 1100px; margin: 0 auto; padding: 14px 18px; display: flex; align-items: center; gap: 12px; }
.ph-tableau .tb-entete svg { width: 40px; height: 40px; flex: none; }
.ph-tableau .tb-entete__titre { font-family: var(--font-display); font-size: 19px; line-height: 1.1; margin: 0; }
.ph-tableau .tb-entete__sous { font-size: 12.5px; color: rgba(249,250,251,.7); margin: 2px 0 0; }
.ph-tableau .tb-main { max-width: 1100px; margin: 0 auto; padding: 16px 14px 8px; display: grid; gap: 14px; }
.ph-tableau .tb-bloc { background: var(--ph-white); border: 1px solid var(--ph-border); border-radius: 14px; padding: 18px 16px; box-shadow: var(--shadow-paper); min-width: 0; }
.ph-tableau .tb-bloc h2 { font-family: var(--font-body); font-size: 12px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--ph-ink-muted); margin: 0 0 10px; }
.ph-tableau .tb-chiffre { font-family: var(--font-display); font-weight: 700; line-height: 1; color: var(--ph-marine); font-variant-numeric: lining-nums; }
.ph-tableau .tb-note { font-size: 12.5px; color: var(--ph-ink-muted); margin: 12px 0 0; }
.ph-tableau .tb-indispo p { margin: 0; font-size: 14px; color: var(--ph-ink-muted); }
.ph-tableau .tb-indispo--plein { border-color: var(--ph-gold); }
/* 1. Places */
.ph-tableau .tb-places .tb-chiffre { font-size: 96px; letter-spacing: -.02em; }
.ph-tableau .tb-places .tb-sur { font-family: var(--font-display); font-size: 34px; color: var(--ph-ink-muted); font-weight: 400; }
.ph-tableau .tb-jauge { position: relative; height: 16px; border-radius: 99px; background: var(--ph-secondary); margin: 16px 0 6px; overflow: hidden; }
.ph-tableau .tb-jauge span { position: absolute; inset: 0 auto 0 0; background: var(--ph-gold); border-radius: 99px; }
.ph-tableau .tb-jauge-legende { display: flex; justify-content: space-between; font-size: 12.5px; color: var(--ph-ink-muted); }
.ph-tableau .tb-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 12px; margin-top: 16px; }
.ph-tableau .tb-stat b { display: block; font-family: var(--font-display); font-size: 26px; line-height: 1.1; color: var(--ph-marine); font-weight: 700; }
.ph-tableau .tb-stat small { display: block; font-size: 12.5px; color: var(--ph-ink-muted); }
.ph-tableau .tb-pos b { color: var(--ph-mint-ink); }
/* 2. Revenus */
.ph-tableau .tb-revenus .tb-chiffre { font-size: 52px; }
.ph-tableau .tb-revenus .tb-sous { font-size: 13px; color: var(--ph-ink-muted); margin-top: 4px; }
/* 3. Qui vend */
.ph-tableau table { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums; }
.ph-tableau th { font-size: 11.5px; font-weight: 600; color: var(--ph-ink-muted); text-align: right; padding: 0 0 6px 6px; border-bottom: 1px solid var(--ph-border); }
.ph-tableau th:first-child, .ph-tableau td:first-child { text-align: left; padding-left: 0; }
.ph-tableau td { text-align: right; padding: 9px 0 9px 6px; border-bottom: 1px solid var(--ph-border); vertical-align: top; font-size: 14px; }
.ph-tableau tr:last-child td { border-bottom: 0; }
.ph-tableau td:not(:first-child) { white-space: nowrap; }
.ph-tableau th:last-child, .ph-tableau td:last-child { padding-left: 14px; }
.ph-tableau .tb-nom { font-weight: 600; line-height: 1.25; }
.ph-tableau .tb-codes { display: block; font-size: 11px; color: var(--ph-ink-muted); font-weight: 400; margin-top: 2px; letter-spacing: .02em; }
.ph-tableau .tb-barre { display: block; height: 4px; border-radius: 2px; background: var(--ph-mint); margin-top: 6px; }
.ph-tableau .tb-places-col { font-family: var(--font-display); font-size: 20px; font-weight: 700; color: var(--ph-marine); line-height: 1; }
.ph-tableau .tb-inconnu .tb-nom { color: var(--ph-ink-muted); }
.ph-tableau .tb-inconnu .tb-barre { background: var(--ph-border); }
/* Graphiques SVG */
.ph-tableau .tb-graph { width: 100%; margin-top: 6px; }
.ph-tableau .tb-graph svg { display: block; width: 100%; height: auto; overflow: visible; }
.ph-tableau .tb-graph text { font-family: var(--font-body); font-size: 11px; fill: var(--ph-ink-muted); }
.ph-tableau .tb-legende { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 12.5px; color: var(--ph-ink-muted); margin-top: 8px; }
.ph-tableau .tb-legende i { display: inline-block; width: 12px; height: 12px; border-radius: 3px; vertical-align: -2px; margin-right: 6px; }
.ph-tableau .tb-lg-menthe { background: var(--ph-mint); }
.ph-tableau .tb-lg-marine { background: var(--ph-marine); }
.ph-tableau .tb-lg-gris { background: #c9cfd7; }
.ph-tableau .tb-lg-cap { border: 2px dashed var(--ph-marine); }
/* 5. Pubs */
.ph-tableau .tb-ads { list-style: none; margin: 14px 0 0; padding: 0; }
.ph-tableau .tb-ads li { display: grid; grid-template-columns: 1fr auto; gap: 2px 12px; padding: 9px 0; border-top: 1px solid var(--ph-border); }
.ph-tableau .tb-ads .tb-ad-nom { font-size: 13.5px; font-weight: 600; overflow-wrap: anywhere; min-width: 0; }
.ph-tableau .tb-ads .tb-ad-val { font-size: 13px; color: var(--ph-ink-muted); text-align: right; white-space: nowrap; }
.ph-tableau .tb-ads .tb-ad-val b { color: var(--ph-mint-ink); font-weight: 700; }
.ph-tableau .tb-sous-titre { font-size: 13px; font-weight: 600; margin: 18px 0 0; color: var(--ph-ink); }
/* Pied */
.ph-tableau .tb-pied { max-width: 1100px; margin: 0 auto; padding: 6px 14px 36px; }
.ph-tableau .tb-ventes { list-style: none; margin: 0; padding: 0; }
.ph-tableau .tb-ventes li { display: grid; grid-template-columns: 62px 1fr auto; gap: 10px; padding: 8px 0; border-top: 1px solid var(--ph-border); font-size: 13.5px; }
.ph-tableau .tb-ventes .tb-v-date { color: var(--ph-ink-muted); }
.ph-tableau .tb-ventes .tb-v-code { font-size: 11.5px; color: var(--ph-ink-muted); text-align: right; }
.ph-tableau .tb-ventes .tb-plan { color: var(--ph-ink-muted); font-size: 12.5px; margin-left: 4px; }
.ph-tableau .tb-ventes .tb-table { color: var(--ph-mint-ink); font-weight: 600; }
.ph-tableau .tb-bas { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 18px; font-size: 12.5px; color: var(--ph-ink-muted); }
.ph-tableau .tb-bas a, .ph-tableau .tb-bas a:hover { color: var(--ph-marine); font-weight: 600; }
@media (min-width: 860px) {
  .ph-tableau .tb-main { grid-template-columns: 7fr 5fr; padding-top: 22px; gap: 18px; }
  .ph-tableau .tb-bloc { padding: 22px 24px; }
  .ph-tableau .tb-places .tb-chiffre { font-size: 120px; }
  .ph-tableau .tb-places .tb-stats { grid-template-columns: repeat(4, 1fr); }
  .ph-tableau .tb-pubs .tb-stats { grid-template-columns: repeat(4, 1fr); }
  .ph-tableau .tb-pubs, .ph-tableau .tb-indispo { grid-column: 1 / -1; }
  .ph-tableau .tb-pubs__grille { margin-top: 22px; display: grid; grid-template-columns: 7fr 5fr; gap: 28px; align-items: start; }
  .ph-tableau .tb-pubs__grille .tb-sous-titre:first-child { margin-top: 0; }
}
