/* ============================================================
   Souki Lodges & Spa — Couche typographique
   Chargée en dernier : elle arbitre la mesure, les alignements,
   les coupes et le rythme vertical, après que chaque section a
   posé sa mise en page.

   Trois règles gouvernent tout ce fichier :

   1. MESURE — 60 à 72 signes par ligne. Les valeurs sont en `ch`
      mais calées sur des relevés faits dans le navigateur, car le
      `ch` (largeur du zéro) est plus large que la moyenne des
      bas-de-casse : 62ch rendait 72 à 80 signes réels.

   2. ALIGNEMENT — le texte courant est au fer à gauche, jamais
      justifié : en français, les mots longs et les espaces avant
      signes doubles creusent des rivières de blanc. Le centrage
      est réservé aux blocs courts et symboliques : surtitres,
      titres, respirations, bandes d'appel à l'action.

   3. COUPES — `text-wrap: pretty` sur le texte courant (le
      navigateur évite les lignes veuves), `balance` sur les titres
      (il égalise les lignes). Les navigateurs qui l'ignorent
      retombent sur le rendu actuel, sans rien casser.
   ============================================================ */

/* ────────────────────────────────────────────────────────────
   1 · MESURE
   ──────────────────────────────────────────────────────────── */

/* La narration partage désormais la même voix que la home. Les éléments
   d'interface, métadonnées, boutons et informations techniques restent en
   Jost pour conserver une lecture immédiate. */
:is(
  .phero__lede,
  .lhero__lede,
  .pprose,
  .pband__body,
  .plist,
  .faq__a,
  .legal p,
  .legal li,
  .presse-item__texte,
  .xp-intro__lead,
  .xp-intro__final,
  .xp__ligne,
  .resa-etape__chapo,
  .suite__ligne,
  .appel__texte,
  .sortie__txt,
  .newsletter__texte
) {
  font-family: var(--font-editorial);
  font-weight: 400;
}

/* Texte courant : UNE mesure, une seule source — var(--mesure).

   Recalibrée le 7 août 2026. Tout le calibrage en `ch` de ce fichier
   datait du 29 juillet, sous Jost ; Instrument Serif est arrivé le
   5 août, et son `0` est large pour sa chasse réelle : 1 ch y rend
   environ 1,38 signe. Les 66-80ch d'alors composaient donc des lignes
   de 89 à 141 signes — mesuré au navigateur, en comptant les signes
   ligne à ligne. Le patchwork d'exceptions par page (58, 62, 68,
   80ch…) compensait la longueur des mots d'une page à l'autre : des
   écarts de quelques signes, tolérés autour de la cible commune.

   La cible est en SIGNES — 72 — et la valeur en `ch` n'est qu'un
   moyen : à re-mesurer au navigateur à tout changement du caractère
   de labeur, jamais à recopier. */
.pprose,
.intro__body,
.territoire__body,
.resa__body,
.moment__desc,
.lodge__desc,
.volet__text,
.suite__ligne,
.presse-item__texte,
.appel__texte,
.xp__ligne,
.xp-intro__lead,
.pband__body,
.jour__sub,
.hero__subtitle {
  max-width: var(--mesure);
}
/* Les blocs composés sur l'axe restent sur l'axe : la boîte se centre
   quand la mesure la borne. L'axe des bandes d'appel et des expériences
   est un arbitrage du 1er août — on ne le ferre pas à gauche. */
.appel__texte,
.xp__ligne,
.xp-intro__lead,
.pband__body,
.jour__sub,
.hero__subtitle {
  margin-inline: auto;
}
.pduo .pmeta { max-width: none; }
/* La FAQ et les pages légales font porter la mesure à leur CONTENEUR —
   titres et textes partagent le même bord — via .faq__group et
   .legal__inner, tous deux à var(--mesure) dans pages.css. Au niveau du
   paragraphe, rien ne doit la doubler. */
.legal p,
.legal li,
.faq__a {
  max-width: none;
}

/* Accroches — phrases isolées en grand corps, pas un texte de labeur :
   mesure plus courte. Le chapô du hero « story » de La Maison garde ses
   42ch propres dans pages.css (.phero--story .phero__lede). */
.phero__lede,
.lhero__lede,
.presse-item__titre,
.lodges__sub,
.moments__sub,
.xp-intro__final {
  max-width: var(--mesure-etroite);
}
.lodges__sub,
.moments__sub,
.xp-intro__final {
  margin-inline: auto;
}

/* Titres : on borne la mesure pour choisir OÙ ils cassent. */
h1,
.hero__title {
  max-width: var(--mesure-titre);
}
.psec h2,
.pband h2,
.legal h2,
.lhero h1,
.intro__title,
.jour__title,
.lodges__title,
.moments__title,
.resa__title,
.territoire__title {
  max-width: var(--mesure-titre-l);
}
/* Exception : .faq__cat n'est pas un titre de lecture mais une
   étiquette de rubrique en petites capitales, soulignée sur toute
   la colonne. La borner couperait son filet. */
.faq__cat { max-width: none; }

/* Les blocs centrés gardent leur mesure centrée dans la colonne.
   Les chapôs de hero (.phero__lede, .lhero__lede) en sont SORTIS le
   7 août 2026 : leur titre est ferré à gauche, et dès que la mesure
   les a bornés, ce margin-inline les décollait du bord — chapô centré
   sous un titre à gauche, mesuré sur lodges. Ils restent calés sous
   leur titre. */
.psec__narrow .pprose,
.psec__narrow .plist,
.intro__inner .intro__body,
.pband__inner .pband__body,
.jour__head .jour__sub,
.lodges__head .lodges__sub,
.scene__intro .moments__sub {
  margin-inline: auto;
}

/* ────────────────────────────────────────────────────────────
   2 · ALIGNEMENT
   ──────────────────────────────────────────────────────────── */

/* Jamais de justification : la règle vaut pour tout le site. */
.pprose,
.legal p,
.legal li,
.faq__a,
.intro__body,
.territoire__body,
.plist li {
  text-align: left;
}

/* Les colonnes étroites restent centrées pour leurs TITRES, mais
   leur prose passe au fer à gauche : au-delà de deux lignes, un
   texte centré oblige l'œil à chercher chaque début de ligne. */
.psec__narrow .pprose,
.psec__narrow .plist,
.intro__inner .intro__body {
  text-align: left;
}

/* Restent centrés, parce que courts et symboliques :
   surtitres, titres, respirations, métas, bandes d'appel.
   La liste est explicite pour qu'aucun bloc ne le devienne par
   héritage sans qu'on l'ait voulu. */
.psec__narrow .eyebrow,
.psec__narrow h2,
.psec__narrow h3,
.intro__inner .eyebrow,
.intro__inner .intro__title,
.intro__inner .intro__badge,
.breath__text,
.pband__inner,
.resa__inner,
.jour__head,
.lodges__head,
.scene__intro {
  text-align: center;
}

/* Bienvenue est en deux colonnes : le titre et le surtitre vivent dans une
   colonne latérale, où un centrage les ferait flotter sans axe. Ces règles
   annulent le centrage déclaré plus haut au § 2 pour .intro__inner. */
.intro .intro__inner .eyebrow,
.intro .intro__inner .intro__title,
.intro .intro__inner .intro__badge {
  text-align: left;
}

/* ────────────────────────────────────────────────────────────
   3 · COUPES — orphelines, veuves, titres mal cassés
   ──────────────────────────────────────────────────────────── */

/* Texte courant : le navigateur remonte un mot pour éviter qu'une
   ligne finale ne porte qu'un mot isolé. */
.pprose,
.legal p,
.legal li,
.faq__a,
.intro__body,
.territoire__body,
.resa__body,
.pband__body,
.phero__lede,
.hero__subtitle,
.lhero__lede,
.moment__desc,
.volet__text,
.lodge__desc,
.plist li,
.pmeta,
.moment__meta {
  text-wrap: pretty;
}

/* Titres et courtes accroches : lignes égalisées. */
h1, h2, h3,
.hero__title,
.faq__q,
.jour__sub,
.lodges__sub,
.moments__sub,
.intro__badge,
.pband__note,
.resa__note,
.breath__text {
  text-wrap: balance;
}

/* Les noms propres du domaine ne se coupent jamais en fin de ligne. */
.pprose, .legal p, .faq__a, .intro__body, .territoire__body,
.moment__desc, .volet__text, .lodge__desc, .pband__body {
  hyphens: none;
}

/* ────────────────────────────────────────────────────────────
   4 · RYTHME VERTICAL
   Une seule échelle : --pas-2 entre paragraphes, --pas-3 du titre
   à son texte, --pas-4 entre blocs. Plus aucune valeur isolée.
   ──────────────────────────────────────────────────────────── */

.pprose,
.legal p,
.territoire__body,
.intro__body {
  line-height: var(--interligne);
  margin-bottom: 0;
}
.pprose + .pprose,
.legal p + p,
.legal p + ul,
.legal ul + p,
.territoire__body + .territoire__body,
.intro__body + .intro__body,
.faq__a + .faq__a {
  margin-top: var(--pas-2);
}

/* Du titre à son premier paragraphe */
.psec h2 + .pprose,
.psec h3 + .pprose,
.legal h2 + p,
.lhero h1 + .lhero__lede,
.faq__q + .faq__a {
  margin-top: var(--pas-3);
}

/* Entre deux blocs de même nature */
.legal__block + .legal__block { margin-top: var(--pas-4); }
.faq__item + .faq__item { margin-top: var(--pas-4); }

/* Surtitre collé à son titre, titre détaché de son texte */
.eyebrow { margin-bottom: var(--pas); }

/* Exception : le surtitre de la barre de presse ne précède pas un titre — il
   ouvre la bande. Le pas serré ci-dessus le collait à la ligne des marques
   (14 px sous, 129 px au-dessus). Il reprend l'air de la bande et se retrouve
   centré entre le haut de la bande et les noms de médias. Vaut pour les douze
   implantations, calcaire comme nuit. */
.presse-bar .presse-bar__titre { margin-bottom: var(--presse-air); }
.pmeta { margin-top: var(--pas-3); }

/* ────────────────────────────────────────────────────────────
   5 · RESPONSIVE
   Le texte ne touche jamais le bord, et la mesure ne s'effondre
   pas sur les petites largeurs.
   ──────────────────────────────────────────────────────────── */

@media (max-width: 620px) {
  /* Sous cette largeur, la mesure est imposée par l'écran : on
     laisse le texte occuper la colonne et on protège les marges. */
  .pprose, .legal p, .legal li, .faq__a, .intro__body,
  .territoire__body, .resa__body, .pband__body, .phero__lede,
  .hero__subtitle, .lhero__lede, .jour__sub, .lodges__sub,
  .moments__sub, .pduo .pprose, .pduo .pmeta {
    max-width: none;
  }
  /* Les titres cassent au plus large : bornés, ils empileraient
     trop de lignes courtes sur un écran étroit. */
  h1, h2, .hero__title, .intro__title, .jour__title, .lodges__title,
  .moments__title, .resa__title, .territoire__title {
    max-width: none;
  }
  /* Plancher de gouttière : sur mobile, aucun texte ne s'approche à moins de
     24 px du bord. Le retrait passe des SECTIONS à leurs CONTENEURS internes :
     les fonds, vidéos et voiles restent ainsi pleine largeur, seul le texte
     rentre. Mesuré auparavant entre 19 et 23 px selon les blocs. */
  .psec, .legal, .lhero, .pband, .faq, .intro, .territoire, .resa,
  .jour, .moments, .hero, .phero, .breath {
    padding-inline: 0;
  }
  .psec__narrow, .psec__inner, .pduo, .legal__inner, .lhero__inner,
  .pband__inner, .faq__group, .faq__toc, .intro__inner, .territoire__wrap,
  .resa__inner, .jour__head, .volet__content, .scene__content, .scene__intro,
  .hero__content, .phero__inner, .breath__text {
    padding-inline: var(--gouttiere);
  }
  /* Les médias de duo, eux, restent au bord : ils font image pleine largeur. */
  .pduo { padding-inline: 0; }
  .pduo > div:not(.pduo__media) { padding-inline: var(--gouttiere); }
}

/* La section des moments déclarait 19 px de défilement horizontal fantôme aux
   largeurs intermédiaires — aucun élément ne dépassait, mais la page se laissait
   pousser latéralement. Défaut antérieur à cette passe. `clip` contient la zone
   sans créer de conteneur de défilement, contrairement à `hidden`, et laisse les
   masques de fondu intacts. */
.moments { overflow-x: clip; }

/* Volets de « Une journée » aux largeurs intermédiaires : le retrait tombait à
   22 px, sous le plancher de 24 px. */
@media (min-width: 621px) and (max-width: 1019px) {
  .volet__content { padding-inline: var(--gouttiere); }
}

/* Très grands écrans : la mesure tient déjà, mais les sections
   pleine largeur ne doivent pas étirer leurs conteneurs. */
@media (min-width: 1800px) {
  .psec__inner, .pduo, .phero__inner { max-width: 82rem; }
}

/* ────────────────────────────────────────────────────────────
   6 · MOUVEMENT RÉDUIT — rien à neutraliser ici, la couche
   typographique ne pose aucune transition.
   ──────────────────────────────────────────────────────────── */

/* Colonnes de duo : les mesures propres par page (55ch, 56ch) qui
   vivaient ici battaient var(--mesure) par leur spécificité (0,2,0) —
   quatrième plafond fantôme retiré le 7 août 2026. La mesure commune
   s'applique aussi dans les colonnes de duo. */


/* ────────────────────────────────────────────────────────────
   6 · BORD DROIT
   Le texte reste en drapeau à gauche — aucune justification, qui
   creuserait des rivières de blanc dans des colonnes de 75 signes.
   Le navigateur se charge seulement de mieux répartir les lignes.
   ──────────────────────────────────────────────────────────── */

/* `pretty` : le moteur essaie plusieurs répartitions et évite la dernière
   ligne réduite à un mot. Coût nul là où il n'est pas implémenté, où il
   retombe simplement sur `wrap`. */
.pprose, .legal p, .faq__a, .intro__body, .territoire__body,
.moment__desc, .volet__text, .lodge__desc, .pband__body,
.resa__body, .scene__text p, .pmeta, .plist li {
  text-wrap: pretty;
}

/* `balance` : égalise la longueur des lignes d'un titre court. C'est lui qui
   règle les coupures absurdes et les mots seuls en dernière ligne, sans
   jamais forcer de `nowrap` ni toucher au corps. */
h1, h2, h3,
.hero__title, .hero__subtitle, .breath__text, .intro__title,
.phero__lede, .lhero__lede, .pband__title, .resa__title,
.territoire__title, .eyebrow {
  text-wrap: balance;
}

/* Les chapôs sont assez courts pour profiter de `balance` eux aussi. */
.phero__lede, .lhero__lede, .pband__body { text-wrap: balance; }


/* ────────────────────────────────────────────────────────────
   7 · CHAPÔS DE HERO — l'exemption de mesure est LEVÉE, 7 août 2026
   Un `max-width: none` vivait ici sur .phero__lede, .lhero__lede et
   .hero__subtitle. Il datait de l'époque où --mesure-large (51ch)
   les resserrait en lignes courtes — et, placé en fin de fichier,
   il annulait silencieusement toute mesure posée plus haut : le
   chapô de hero montait à 118 signes par ligne à 1440.
   Les accroches prennent désormais var(--mesure-etroite) et le
   sous-titre du hero var(--mesure), au bloc unique du haut de ce
   fichier. Ne pas rétablir un plafond local ici : c'est le
   troisième plafond fantôme de ce chantier (57ch de pages.css,
   50ch de home.css, celui-ci).
   ──────────────────────────────────────────────────────────── */


/* ────────────────────────────────────────────────────────────
   8 · FERRAGE À GAUCHE DU TEXTE COURANT — 8 août 2026
   La justification du 1ᵉʳ août est ABANDONNÉE avec le changement
   de caractère de labeur : les quatre sélecteurs justifiés passent
   ferrés à gauche, et la césure automatique — qui ne servait qu'à
   combler les lézardes de la justification — tombe avec elle.
   `hyphens: none` PARTOUT sur la prose : aucun cas relevé où la
   césure resterait utile en drapeau à 72 signes de mesure.
   Les sélecteurs préfixés (0,2,0) neutralisent les text-align
   posés plus haut dans les gabarits, comme du temps du justifié.
   ──────────────────────────────────────────────────────────── */
.intro__prose .intro__body,
.psec__narrow .pprose,
.psec__narrow--duo .pprose,
.pduo .pprose,
.pprose,
.legal p,
.faq__a,
.intro__body,
.territoire__body,
.lodge__desc,
.resa__body {
  text-align: left;
  hyphens: none;
  -webkit-hyphens: none;
  text-wrap: pretty;
}

/* Noms du domaine — jamais coupés en fin de ligne, quelle que soit la
   césure active autour d'eux. Balisage posé par scripts/proteger-noms.py,
   à relancer si un texte change. */
.nc { hyphens: none; -webkit-hyphens: none; }

/* ────────────────────────────────────────────────────────────
   9 · CARACTÈRE DE LABEUR — MULISH, 8 août 2026
   La prose passe d'Instrument Serif (un caractère d'AFFICHAGE
   employé comme labeur : contrastes forts, formes serrées,
   illisible à 18 px) à Mulish, graisses 300 et 400, italique
   compris. Les 6 accroches restent en Instrument Serif, les
   titres et l'interface ne bougent pas.
   `html body[data-page]` : porte la spécificité à (0,2,2). La liste
   `body[data-page="home"] :is(…)` de home.css contient un sélecteur
   COMPOSÉ (`.avis-home__rating strong`) qui hisse toute sa règle à
   (0,2,2) — un `:is()` pèse le plus lourd de ses membres. À égalité,
   ce fichier arbitre en dernier.
   ──────────────────────────────────────────────────────────── */
html body[data-page] :is(
  .pprose,
  .intro__body,
  .territoire__body,
  .resa__body,
  .moment__desc,
  .lodge__desc,
  .volet__text,
  .suite__ligne,
  .presse-item__texte,
  .faq__a,
  .xp__ligne,
  .xp-intro__lead
) {
  font-family: var(--font-labeur);
  font-weight: 400;
  font-size: var(--t-labeur);
  line-height: var(--interligne-labeur);
  /* 84 % d'encre et non 74 : à 74 %, la prose de presse tombait à
     4,06:1 — sous le plancher de 4,5. Mesuré le 8 août 2026. */
  color: color-mix(in srgb, var(--ink) 84%, var(--calcaire));
}
body[data-page] .legal p,
body[data-page] .legal li {
  font-family: var(--font-labeur);
  font-weight: 400;
  font-size: var(--t-labeur);
  line-height: var(--interligne-labeur);
  color: color-mix(in srgb, var(--ink) 84%, var(--calcaire));
}
/* Prose en grand corps : un cran au-dessus, graisse allégée pour
   que le sans ne s'épaississe pas à cette taille. */
html body[data-page] :is(
  .appel__texte,
  .pband__body,
  .jour__sub,
  .hero__subtitle
) {
  font-family: var(--font-labeur);
  font-weight: 300;
  font-size: var(--t-labeur-grand);
  line-height: 1.7;
}
/* La citation de La Maison suit le labeur (elle était comptée dans
   la prose au relevé) ; l'italique est le Mulish italique. */
body[data-page] .citation p {
  font-family: var(--font-labeur);
  font-weight: 300;
  font-size: var(--t-labeur-grand);
  line-height: 1.7;
}
