/*
Theme Name: Médianes
Theme URI: https://medianes.org
Description: Thème enfant d'Ollie pour le site Médianes 2026 (Full Site Editing). Trois univers (Média, Studio, Réseau) et une section commune racine.
Author: Médianes
Author URI: https://medianes.org
Template: ollie
Version: 0.1.0
Requires at least: 6.5
Requires PHP: 8.2
License: GNU General Public License v3 or later
License URI: https://www.gnu.org/licenses/gpl-3.0.html
Text Domain: medianes
Tags: full-site-editing, block-styles, translation-ready
*/

/* Le système de design (tokens) est défini dans theme.json à partir des
   variables Figma. Cette feuille ne contient que les styles de composants non
   exprimables en theme.json (états contextuels, micro-layout). Valeurs issues
   du Dev Mode Figma (node 2777:38254 « Header général »). */

/* Réglages typographiques globaux (recette)
---------------------------------------------------------------------------- */

/* #18 : chiffres alignés (« lining ») partout — les chiffres elzéviriens de
   Loretta rendent les « 1 » illisibles en début de phrase. */
body {
	font-variant-numeric: lining-nums;
	font-feature-settings: "lnum" 1;
}

/* #59 : soulignement des hyperliens fin — spec composant Hyperlien Dev Mode :
   « decoration-from-font » (fallback 1px pour les moteurs sans support). */
.wp-site-blocks a {
	text-decoration-thickness: 1px;
	text-decoration-thickness: from-font;
	text-underline-offset: 0.15em;
}

.no-wrap {
	white-space: nowrap;
}

@media (max-width: 1300px) {
	.no-padding-left-right-mobile {
		padding-left: 0px !important;
		padding-right: 0px !important;
	}
}


.align-self-flex-end {
	align-self: flex-end !important;
}

/* Fond #F5F9FF (bleu-00) des contextes éditoriaux — vérifié sur les maquettes
   (2026-07-05, le #F5F9FF est quasi indiscernable du blanc mais reste bleu-00) :
   TOUT l'univers Média (accueil, articles, podcasts, hub, auteur, veille, job
   board) + les contenus éditoriaux Studio (fiches pratiques, séries, projets /
   cas clients). Les pages marketing Studio (le studio, formations, tarifs, nos
   services) et la racine (accueil, à-propos, expertises, FAQ, contact…) gardent
   leur fond propre (blanc / beige). */
body.univers-media,
body.single-fiche_pratique,
body.post-type-archive-cas_client,
body.tax-serie {
	background-color: var(--wp--preset--color--bleu-00);
}

/* Détail projet (single cas_client, maquette 152:8666) : corps BLANC, avec
   l'ouverture et la section « Projets similaires » en bandes bleu-00 (contraste
   de la maquette). Retiré de la règle « contextes éditoriaux bleu-00 » ci-dessus
   (divergence assumée avec la déc. 2026-07-05 pour ce gabarit précis). */

/* Ticket #85 : la page Podcast (hub) fait exception — fond de PAGE blanc, seule
   la section d'ouverture (bandeau `medianes-podcast-tete`) reste en bleu-0. */
body.post-type-archive-podcast {
	background-color: var(--wp--preset--color--blanc);
}

/* Même exception pour la page de présentation d'une newsletter (consigne Noé
   2026-07-31) : fond de PAGE blanc, seul le bandeau d'ouverture
   (`medianes-nl-single__hero`) garde son fond beige. Depuis le 2026-09-21
   (ADR-038), ces pages sont des PAGES enfants de /newsletters/ servies par le
   gabarit `page-newsletter` — d'où la classe de gabarit et non plus
   `single-newsletter`, qui désigne désormais une ÉDITION et garde le bleu-00
   des articles. */
body.page-template-page-newsletter {
	background-color: var(--wp--preset--color--blanc);
}

/* Index des projets clients (node 3220:19973, hero + sections de liste en
   bleu-00) : la page a été rattachée à l'univers STUDIO le 2026-07-31 quand
   elle est passée des offres d'emploi aux projets clients — son fond bleu-00,
   jusque-là hérité de `body.univers-media`, est donc redéclaré ici. */
body.medianes-page-index-des-missions {
	background-color: var(--wp--preset--color--bleu-00);
}

/* Accueil du Studio (/studio/) : fond bleu-00 lui aussi, à la demande de
   Baptiste (2026-09-23) — exception à la règle du 2026-07-05 qui laissait les
   pages marketing Studio en blanc. Les bandes qui portent leur propre fond
   (beige, bleu foncé) le gardent ; seul le fond de page change. */
body.medianes-page-studio {
	background-color: var(--wp--preset--color--bleu-00);
}

/* Troisième page du même cas (consigne Noé 2026-08-03) : /livre/ garde un
   fond de PAGE blanc, seul le bandeau d'ouverture (`medianes-livre-tete`, déjà en
   bleu-00 dans le contenu) doit ressortir. La page appartient à l'univers Média,
   elle héritait donc du bleu-00 général — bandeau et page étaient de la même
   teinte, donc l'ouverture ne se distinguait pas.

   ⚠️ CETTE CLASSE SUIT LE SLUG DE LA PAGE, elle n'est pas choisie : `functions.php`
   la fabrique avec `'medianes-page-' . $post->post_name`. La page est passée de
   `notre-livre` à `livre` le 2026-09-22 (renommage demandé par Baptiste), donc les
   neuf sélecteurs de cette feuille aussi — sans quoi ils auraient cessé de
   s'appliquer en silence, sans erreur nulle part. */
body.medianes-page-livre {
	background-color: var(--wp--preset--color--blanc);
}

/* Ticket #6 : les chapos des ouvertures de page et des blocs éditoriaux
   (Qui sommes-nous, Nos newsletters…) doivent être en Chapo 22px, pas 18px.
   `!important` justifié : WordPress génère les classes de taille du theme.json
   (`.has-corps-font-size`) avec `!important` — seul un `!important` les surcharge
   sans toucher le contenu de chaque page. */
/* `.has-corps-serif-font-size` exclu (2026-07-30) : la maquette de
   /nos-services/ (2346:33277) met le texte de l'encart « Médianes ? » en
   Loretta corps-serif 19/1.4 — un choix explicite posé dans le contenu ne
   doit pas être rabattu au chapo. */
/* `.medianes-newsletter__rgpd` exclu : la mention RGPD du bloc newsletter
   reste en Note (15px, Degular Mono) même quand le bloc est repris dans une
   bande de recirculation — ce n'est pas un chapo éditorial. */
/* `.medianes-retour` exclu (2026-09-21, demande Baptiste : « le lien Retour à nos
   expertises doit passer en 18px ») : c'est un lien de navigation, pas un chapô
   éditorial — le node le donne en style « Hyperlien » (Degular Medium 18/1,3), et
   ce `!important` le poussait à 22 parce qu'il se trouve être un `<p>` enfant
   direct de l'ouverture. Sa taille est posée juste en dessous, avec le reste de
   son style. */
.medianes-ouverture>p:not(.medianes-newsletter__rgpd):not(.medianes-retour),
.medianes-qsn p:not(.medianes-newsletter__rgpd),
.medianes-recirculation p:not(.medianes-lien-fleche):not(.medianes-hyperlien):not(.medianes-newsletter__rgpd),
.medianes-recirc-cote p:not(.medianes-lien-fleche):not(.medianes-hyperlien):not(.has-corps-serif-font-size):not(.medianes-newsletter__rgpd) {
	font-size: var(--wp--preset--font-size--chapo) !important;
	line-height: 1.15;
}

/* Bandeau « traduction automatique » (Weglot)
---------------------------------------------------------------------------- */

/* Rendu par medianes_bandeau_traduction() sur wp_body_open, donc AVANT le header
   dans le flux — ce qui est exactement ce qu'il faut pour l'empiler au-dessus de
   lui : les deux sont collants, le bandeau à 0 et le header à la hauteur du
   bandeau (cf. --medianes-bandeau-h). Le bandeau étant premier dans le flux, il
   n'a aucun décalage à appliquer au chargement et se colle naturellement en
   défilant.

   z-index 85 : au-dessus du header (80) et du sous-header (70), sous le toaster
   promotionnel (90), qui reste l'élément le plus prioritaire.

   Volontairement sobre — c'est un avertissement de service, pas un élément de la
   maquette (aucun node Figma : Weglot est arrivé après). */
.medianes-bandeau-traduction {
	position: sticky;
	top: 0;
	z-index: 85;
	background: var(--wp--preset--color--beige-01);
	color: var(--wp--preset--color--bleu-10);
	border-bottom: 1px solid var(--wp--preset--color--bleu-01);
}

.medianes-bandeau-traduction p {
	margin: 0 auto;
	padding: var(--wp--preset--spacing--petit) clamp(24px, 6.667vw, 96px);
	max-width: 1248px;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.4;
	text-align: center;
}

/* Bandeau d'annonce (functions.php, medianes_bandeau_annonce())
   Hors maquette : jetons de la charte seulement — bleu-10 / blanc, Degular
   « note », lien souligné en graisse 500 comme .medianes-lien-fleche, pictos du
   thème. Non collant : il défile avec la page et ne décale pas le header. Le
   texte vient d'une composition synchronisée (un paragraphe, un lien). */
.medianes-bandeau-annonce {
	background: var(--wp--preset--color--bleu-10);
	color: var(--wp--preset--color--blanc);
}

/* Message déjà fermé : classe posée sur <html> par le script de tête
   (medianes_bandeau_annonce_tete()), avant le rendu — pas de clignotement. */
.medianes-annonce-fermee .medianes-bandeau-annonce {
	display: none;
}

.medianes-bandeau-annonce__inner {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--petit);
	margin: 0 auto;
	padding: var(--wp--preset--spacing--petit) clamp(24px, 6.667vw, 96px);
	max-width: 1248px;
}

.medianes-bandeau-annonce__texte {
	flex: 1;
	text-align: center;
}

.medianes-bandeau-annonce__texte p {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.4;
}

.medianes-bandeau-annonce__texte a {
	color: inherit;
	font-weight: 500;
	text-decoration: underline;
	text-underline-position: from-font;
	white-space: nowrap;
}

/* Flèche « vers l'extérieur » : le lien mène hors du site (formulaire Tally). */
.medianes-bandeau-annonce__texte a::after {
	content: "";
	display: inline-block;
	width: 16px;
	height: 16px;
	margin-left: var(--wp--preset--spacing--nano);
	vertical-align: -2px;
	background: url(assets/icon-arrow-up-right-blanc.svg) center / contain no-repeat;
}

.medianes-bandeau-annonce__texte a:hover {
	text-decoration-thickness: 2px;
}

.medianes-bandeau-annonce__texte a:focus-visible,
.medianes-bandeau-annonce__fermer:focus-visible {
	outline: 2px solid var(--wp--preset--color--blanc);
	outline-offset: 2px;
}

/* Croix du thème (icon-x.svg, tracé bleu-10) recolorée en blanc par masque :
   la couleur suit `background-color`, sans second fichier. Le masque est posé sur
   le PSEUDO-ÉLÉMENT, pas sur le bouton : un masque rogne aussi le contour de
   focus de l'élément masqué, qui deviendrait invisible au clavier. Cible 32px. */
.medianes-bandeau-annonce__fermer {
	display: grid;
	place-items: center;
	flex: none;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 0;
	border-radius: 4px;
	background: none;
	cursor: pointer;
}

.medianes-bandeau-annonce__fermer::before {
	content: "";
	width: 20px;
	height: 20px;
	background-color: var(--wp--preset--color--blanc);
	-webkit-mask: url(assets/icon-x.svg) center / contain no-repeat;
	mask: url(assets/icon-x.svg) center / contain no-repeat;
}

.medianes-bandeau-annonce__fermer:hover::before {
	background-color: var(--wp--preset--color--bleu-02);
}

@media (max-width: 781px) {

	.medianes-bandeau-annonce__inner {
		padding-right: var(--wp--preset--spacing--regulier);
		padding-left: var(--wp--preset--spacing--regulier);
	}

	.medianes-bandeau-annonce__texte {
		text-align: left;
	}
}

/* Header global
---------------------------------------------------------------------------- */

/* Hauteur nominale du header (rangée 72px + 1px de bordure basse), exposée en
   variable pour les ancrages (scroll-margin) et le sous-header sticky sur
   /a-propos/. */
:root {
	/* Hauteur du bandeau « traduction automatique » quand il est affiché, sinon 0.
	   Renseignée par assets/bandeau-traduction.js, qui la mesure : le texte tient
	   sur une ligne en grand écran et se replie en petit, aucune valeur fixe ne
	   conviendrait. Sans JavaScript elle reste à 0 — le bandeau défile alors sous
	   le header au lieu de rester collé, ce qui reste lisible en haut de page. */
	--medianes-bandeau-h: 0px;

	/* Hauteur de la zone fixe SURPLOMBANT le contenu (rangée du header 72px +
	   1px de bordure), à laquelle s'ajoute le bandeau quand il est là. Utilisée
	   par les `top` des éléments collants qui se placent sous le header et par les
	   `scroll-margin-top` des ancres : dans tous les cas, la question posée est
	   « combien de chrome fixe au-dessus ? ». L'intégrer ici évite de reprendre
	   les huit règles concernées une par une. */
	--medianes-header-h: calc(73px + var(--medianes-bandeau-h));
}

/* Recette #100 : header sticky sur tout le site. z-index 80 sous le toaster
   promo (bloc medianes/toaster à 90).
   Le bloc Navigation enveloppe le header dans <header class="wp-block-template-
   part"> (enfant direct de .wp-site-blocks). Le sticky doit porter sur CE
   wrapper : mis sur .medianes-header, son bloc conteneur est le wrapper (même
   hauteur que le header) → aucune marge de défilement, donc rien ne colle. */
.wp-block-template-part:has(> .medianes-header) {
	position: sticky;
	/* Se cale sous le bandeau de traduction quand il y en a un (0 sinon). */
	top: var(--medianes-bandeau-h);
	z-index: 80;
}

.medianes-header a {
	text-decoration: none;
}

.medianes-logo {
	display: flex;
	align-items: center;
}

.medianes-logo img {
	display: block;
	width: 166px;
	height: 20px;
}

/* Sélecteur d'univers (pilules) : conteneur bleu-01 arrondi, pilule active
   bleu-09 selon l'univers courant (classe posée sur le body). */
.medianes-univers-switch .wp-block-navigation__container {
	background: var(--wp--preset--color--bleu-01);
	border-radius: 6px;
	padding: 0 var(--wp--preset--spacing--micro);
	min-height: 39px;
	align-items: center;
	gap: var(--wp--preset--spacing--nano);
}

.medianes-univers-switch .wp-block-navigation-item__content {
	padding: var(--wp--preset--spacing--nano) var(--wp--preset--spacing--micro);
	border-radius: 6px;
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-09);
}

/* États des entrées de menu (ticket 25, contre-vérifié sur le composant
   Header EN CONTEXTE 2777:38254) : sélecteur d'univers → survol pastille
   blanche (visible sur le conteneur bleu-01), actif pastille bleu-09 texte
   blanc ; entrées de droite (sur header blanc) → nues, survol et actif =
   barre basse 3px bleu-09 (comme le sous-header). */
.medianes-univers-switch .wp-block-navigation-item__content:hover {
	background: var(--wp--preset--color--blanc);
}

.univers-media .medianes-pill--media .wp-block-navigation-item__content,
.univers-studio .medianes-pill--studio .wp-block-navigation-item__content,
.univers-reseau .medianes-pill--reseau .wp-block-navigation-item__content {
	background: var(--wp--preset--color--bleu-09);
	color: var(--wp--preset--color--blanc);
}

/* Entrées de droite (survol/actif) : texte centré, barre 3px au ras du bas du
   header (maquette 2955:17306). Recette #100 : les liens remplissent la hauteur
   du header (72px, cf. --medianes-header-h) et la barre ::after se pose en
   bottom:0 — plus de position calculée à partir de la ligne de texte, plus de
   sauts entre l'état hover et l'état actif. */
.medianes-header__nav .wp-block-navigation-item__content {
	position: relative;
	display: inline-flex;
	align-items: center;
	height: 72px;
	padding: 0;
	line-height: 1.2;
}

.medianes-header__nav .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	height: 3px;
	background: transparent;
	transition: background 0.15s ease;
}

.medianes-header__nav .wp-block-navigation-item__content:hover::after,
.medianes-header__nav .current-menu-item .wp-block-navigation-item__content::after {
	background: var(--wp--preset--color--bleu-09);
}

/* EXCEPTION (demande Baptiste, 2026-08-07) : la recherche n'a JAMAIS de barre —
   ni au survol, ni au focus, ni en état actif. La barre de 3px court sur toute la
   largeur de l'entrée : sous un mot elle se lit, sous une icône de 24px elle
   n'est qu'un moignon.
   Première version limitée à `.current-menu-item` : sans effet, WordPress ne
   marquant jamais cette entrée comme courante (mesuré sur `/?s=`, `/?s=media` et
   l'accueil). Ce qu'on voyait était le survol — et il persiste après un clic tant
   que le pointeur reste sur l'icône. D'où la suppression pure et simple du
   pseudo-élément, plutôt qu'un fond transparent état par état. */
.medianes-header__nav .medianes-header__recherche .wp-block-navigation-item__content::after {
	content: none;
}

/* Recherche en pictogramme (Lucide « search »), 2026-08-07 : le mot « Recherche »
   est remplacé par la loupe et l'entrée passe en tête de la nav de droite, à
   gauche de « Newsletters » (demande Baptiste). « Expertises » a été retirée du
   header le même jour — la page reste en ligne et joignable par les cartes et les
   pastilles de thématique.

   Le libellé n'est pas supprimé du balisage, seulement masqué visuellement : le
   lien garde un nom accessible pour les lecteurs d'écran et la navigation vocale.
   L'icône passe par `::before`, `::after` portant déjà la barre de survol. */
.medianes-header__recherche .wp-block-navigation-item__label {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

.medianes-header__recherche .wp-block-navigation-item__content::before {
	content: "";
	width: 24px;
	height: 24px;
	flex: none;
	background: url(assets/icon-search.svg) center / contain no-repeat;
}

.medianes-header__nav .current-menu-item .wp-block-navigation-item__content {
	font-weight: 700;
}

/* Recette #98/#99 : état actif des liens custom du header (pas de current-menu-item
   auto sur les liens custom → ciblage par classe de slug du body + href). */
body.medianes-page-expertises .medianes-header__nav .wp-block-navigation-item__content[href="/expertises/"],
body.medianes-page-newsletters .medianes-header__nav .wp-block-navigation-item__content[href="/newsletters/"],
body.medianes-page-a-propos .medianes-header__nav .wp-block-navigation-item__content[href="/a-propos/"],
body.search .medianes-header__nav .wp-block-navigation-item__content[href="/?s="] {
	font-weight: 700;
}

body.medianes-page-expertises .medianes-header__nav .wp-block-navigation-item__content[href="/expertises/"]::after,
body.medianes-page-newsletters .medianes-header__nav .wp-block-navigation-item__content[href="/newsletters/"]::after,
body.medianes-page-a-propos .medianes-header__nav .wp-block-navigation-item__content[href="/a-propos/"]::after,
body.search .medianes-header__nav .wp-block-navigation-item__content[href="/?s="]::after {
	background: var(--wp--preset--color--bleu-09);
}

/* Actions du header (compte, langue) */
.medianes-header__account {
	display: flex;
	align-items: center;
}

/* Recette #61 : bouton langue transparent (sans ombre ni habillage natif),
   avec pictos Lucide « languages » + chevron (capture maquette). */
.medianes-header__lang {
	display: inline-flex;
	align-items: center;
	/* Ticket #75 : 6px entre l'icône traduction, « Français » et le chevron. */
	gap: var(--wp--preset--spacing--micro);
}

/* ⚠️ L'ICÔNE EST PORTÉE PAR LE `<summary>`, PAS PAR LE CONTENEUR.
   Elle était un `::before` de `.medianes-header__lang`, c'est-à-dire du `<div>`
   qui ENVELOPPE le `<details>` : cliquer dessus ne déclenchait donc rien, alors
   que le chevron — porté par le résumé — ouvrait bien le menu. Deux pictogrammes
   côte à côte dont un seul répond : relevé par Baptiste le 2026-09-14.

   Le déplacer suffit, le résumé étant déjà la zone sensible du composant. Le
   `gap` de 6px est le même de part et d'autre, l'espacement ne bouge pas. */
.medianes-header__lang .medianes-langue__barre::before {
	content: "";
	width: 24px;
	height: 24px;
	flex: none;
	background: url(assets/icon-languages.svg) center / contain no-repeat;
}

/* 2026-08-07 : le `<select>` natif a été remplacé par le menu déroulant maison
   (§ « Sélecteur de langue » plus bas). Le chevron est désormais porté par le
   `<summary>`, comme dans le filtre « Filtrer par domaine » — il pivote à
   l'ouverture, ce qu'un `::after` sur le conteneur ne saurait faire. C'est aussi
   ce conteneur qui sert d'ancre au panneau, en position absolue. */
.medianes-header__lang {
	position: relative;
}

/* Sélecteur de langue (composant)
----------------------------------------------------------------------------
   Un `<select>` natif était utilisé jusqu'au 2026-08-07 : le navigateur impose
   à sa liste déroulante le style du système d'exploitation, impossible à mettre
   en charte. Remplacé par le composant maison du thème, celui du filtre
   « Filtrer par domaine » (§ .medianes-filtre) : `<details>` + `<summary>` +
   liste de liens, sans une ligne de JavaScript.

   Ce qui est REPRIS du filtre : le vocabulaire visuel du panneau — carte blanche,
   bordure 0,5px bleu-08, rayon 6px, ombre douce, lignes séparées par un filet,
   cercle de sélection à droite, survol bleu-00, sélection bleu-02 + cercle pointé.

   Ce qui ne l'est PAS : les dimensions. Le filtre est calibré pour une carte de
   345px en Degular Medium 22 posée dans le contenu ; le header demande la taille
   de ses propres liens. Les classes sont donc distinctes plutôt que partagées —
   les mutualiser aurait obligé à défaire dans le header la moitié des règles du
   filtre.

   La BARRE, elle, ne prend pas l'encadré du filtre : elle garde l'apparence
   dessinée pour le header (icône « langues » du conteneur, libellé, chevron),
   seul le panneau ouvert adopte le langage du menu déroulant. */

.medianes-langue {
	display: inline-flex;
}

.medianes-langue__barre {
	display: inline-flex;
	align-items: center;
	gap: var(--wp--preset--spacing--micro);
	cursor: pointer;
	list-style: none;
}

.medianes-langue__barre::-webkit-details-marker {
	display: none;
}

.medianes-langue__barre::after {
	content: "";
	width: 16px;
	height: 16px;
	flex: none;
	background: url(assets/icon-chevron-down.svg) center / contain no-repeat;
	transition: transform 0.15s ease;
}

.medianes-langue[open] .medianes-langue__barre::after {
	transform: rotate(180deg);
}

/* Panneau : sorti du flux pour se superposer au contenu plutôt que déformer le
   header. Aligné à DROITE (`right: 0`) et non à gauche comme celui du filtre :
   le sélecteur est la dernière chose du header, un panneau aligné à gauche
   déborderait de la fenêtre.
   z-index 90 : au-dessus des autres enfants du header, lui-même à 80. */
.medianes-langue__options {
	position: absolute;
	top: calc(100% + 8px);
	right: 0;
	z-index: 90;
	display: flex;
	flex-direction: column;
	min-width: 100%;
	width: max-content;
	margin: 0;
	padding: 0;
	list-style: none;
	border: 0.5px solid var(--wp--preset--color--bleu-08);
	border-radius: 6px;
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 12px var(--wp--preset--color--bleu-02);
	/* Le panneau est détaché de la barre (8px) : sans bordure commune, les quatre
	   coins sont arrondis, contrairement au filtre dont le panneau se raccorde au
	   bouton. `overflow: hidden` évite que le fond d'une ligne survolée déborde
	   des coins. */
	overflow: hidden;
}

.medianes-langue__option {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--petit);
	padding: var(--wp--preset--spacing--micro) var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-08);
	text-decoration: none;
	white-space: nowrap;
}

.medianes-langue__options li+li .medianes-langue__option {
	border-top: 0.5px solid var(--wp--preset--color--bleu-08);
}

.medianes-langue__option::after {
	content: "";
	width: 20px;
	height: 20px;
	flex: none;
	background: url(assets/icon-circle.svg) center / contain no-repeat;
}

.medianes-langue__option:hover,
.medianes-langue__option:focus-visible {
	background: var(--wp--preset--color--bleu-00);
}

.medianes-langue__option.is-active {
	background: var(--wp--preset--color--bleu-02);
}

.medianes-langue__option.is-active::after {
	background-image: url(assets/icon-circle-dot.svg);
}

/* Header mobile (composant Figma « bloc header mobile » 2777:38910 : logo +
   burger seulement ; les univers passent dans le menu). */
/* Recette #17 : les pastilles d'univers (Le média / Le studio) restent visibles ;
   elles ne se replient dans le menu que sur mobile (≤600px). */
@media (max-width: 600px) {

	.medianes-univers-switch {
		display: none;
	}
}

/* Bascule menu mobile ↔ navigation desktop, à 1276px (point demandé en recette
   #52/#17 ; c'était déjà le seuil auquel le burger natif était forcé).
   2026-07-28 : l'overlay natif du bloc Navigation a été remplacé par le pattern
   medianes/menu-mobile — il n'accepte que des blocs de navigation en enfants,
   donc ni la carte newsletters ni le CTA de la maquette 3228:29132 ne pouvaient
   y entrer (cf. ADR-009). Le bloc Navigation est passé en overlayMenu:"never" :
   il ne rend plus qu'un <nav><ul>, sans bouton ni conteneur responsive — d'où
   un simple display:none ici, et un script core en moins sur tout le site.
   Compte et langue suivent le même seuil : ils étaient masqués dès 781px « repris
   dans le menu » alors qu'ils n'y étaient pas (l'overlay natif ne contenait que
   la navigation) ; ils y sont désormais pour de vrai. */
@media (max-width: 1276px) {

	.medianes-header__liens,
	.medianes-header__account,
	.medianes-header__lang {
		display: none;
	}
}

/* Menu mobile (pattern medianes/menu-mobile, maquette 3228:29132)
---------------------------------------------------------------------------- */

.medianes-burger {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	/* !important : le cœur pose `.is-layout-flex > :is(*, div) { margin: 0 }`
	   sur tout enfant direct d'un bloc en layout flex (spécificité 0,1,1, contre
	   0,1,0 ici) — sans ça la marge négative est silencieusement annulée et le
	   burger ne s'aligne plus avec la croix du panneau ouvert (recette
	   2026-07-29). */
	margin-right: calc(var(--wp--preset--spacing--petit) * -1) !important;
	padding: 0;
	border: 0;
	background: none;
	cursor: pointer;
}

/* Le masquage desktop doit suivre la règle ci-dessus : même spécificité (0,1,0),
   c'est donc l'ordre source qui tranche. */
@media (min-width: 1277px) {

	.medianes-burger {
		display: none;
	}
}

/* Panneau : <dialog> ouvert en modal, donc dans la top layer — aucun z-index à
   arbitrer avec le header sticky (80) ni le toaster (90). Les styles par défaut
   du <dialog> (largeur au contenu, marges auto, bordure) sont neutralisés. */
.medianes-menu-mobile {
	display: none;
	width: 100%;
	max-width: none;
	max-height: none;
	height: 100%;
	margin: 0;
	padding: 0;
	border: 0;
	background: var(--wp--preset--color--bleu-00);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-menu-mobile[open] {
	display: flex;
	flex-direction: column;
}

.medianes-menu-mobile::backdrop {
	background: var(--wp--preset--color--bleu-00);
}

/* Barre haute : reprend la hauteur et la bordure du header pour que le passage
   du header au panneau soit invisible. Le padding gauche/droite doit être
   EXACTEMENT celui du header (le padding racine `has-global-padding`, un
   clamp() qui varie avec la largeur), pas le token `regulier` figé à 24px :
   sinon le logo et le bouton (burger ↔ croix) sautent de ~2px entre l'état
   fermé et ouvert (recette 2026-07-29). */
.medianes-menu-mobile__barre {
	display: flex;
	flex: none;
	align-items: center;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--regulier);
	min-height: 72px;
	padding: 0 var(--wp--style--root--padding-right) 0 var(--wp--style--root--padding-left);
	border-bottom: 1px solid var(--wp--preset--color--bleu-01);
	background: var(--wp--preset--color--blanc);
}

.medianes-menu-mobile__fermer {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	margin-right: calc(var(--wp--preset--spacing--petit) * -1);
	padding: 0;
	border: 0;
	background: none;
	cursor: pointer;
}

/* Le panneau occupe tout l'écran, son CONTENU s'arrête à une largeur de téléphone.
   ─────────────────────────────────────────────────────────────────────────────
   Ce menu sert jusqu'à 781px : au-delà, le header desktop prend la main. Entre la
   maquette (393px) et cette limite, rien n'arrêtait les lignes — mesuré à 781px
   avant correctif : le chevron d'un univers finissait à **650px de son libellé**,
   les deux flottant chacun à un bord. C'est ce que Baptiste décrit par « les
   éléments qui flottent ».

   430px = la plus large des largeurs de téléphone courantes. Valeur CHOISIE, pas
   relevée : aucune maquette ne dessine ce menu au-delà de 393px. Le panneau, lui,
   garde sa pleine largeur — il ferme l'écran, c'est son rôle. */
.medianes-menu-mobile__corps {
	flex: 1;
	max-width: 430px;
	overflow-y: auto;
	padding: 0 0 var(--wp--preset--spacing--double);
}

.medianes-menu-mobile a {
	color: inherit;
	text-decoration: none;
}

/* Univers : bandes bleu-01 pleines, zones de dégradé en dessous, et RIEN entre
   les deux — les blocs se touchent.

   2026-09-21 (Baptiste : « il n'y a pas sur la maquette d'éléments de bordure de
   séparation de 1px qui flottent »). Cette liste portait une gouttière de 3px.
   Le filet de bas de sous-liste se retrouvait donc posé 3px AU-DESSUS de la bande
   suivante, sur le fond du panneau : une ligne qui ne touchait rien, ni au-dessus
   ni en dessous. La maquette `7605:20698` empile ses quatre cadres sans le moindre
   interstice (72 → 280 → 328 → 560 → 608, relevé au node), et c'est ce contact qui
   fait du filet un séparateur plutôt qu'un trait flottant. */
.medianes-menu-mobile__univers {
	display: flex;
	flex-direction: column;
	gap: 0;
}

.medianes-menu-mobile__u {
	margin: 0;
	background: var(--wp--preset--color--bleu-01);
}

/* 2026-08-07 (demande Baptiste) : les univers ne sont plus des accordéons. Tout
   est déplié en permanence — plus de `<details>`, plus de chevron, plus d'état
   ouvert/fermé à distinguer. La tête d'univers est un simple `<p>` : elle nomme
   la section, elle ne commande plus rien.

   Le fond bleu-02 de l'état ouvert disparaît avec lui : sans bascule à signaler,
   la tête garde le bleu-01 du bloc.

   Le padding vertical est sorti en variables : le lien de la tête (plus bas) doit
   reprendre EXACTEMENT ces valeurs en marge négative pour couvrir toute la bande.
   Deux littéraux à tenir en phase se seraient désynchronisés au premier ajustement
   — celui d'en dessous est arrivé le jour même. */
.medianes-menu-mobile__u-tete,
.medianes-menu-mobile__u--statique .medianes-menu-mobile__u-tete {
	--medianes-tete-haut: var(--wp--preset--spacing--petit);
	--medianes-tete-bas: var(--wp--preset--spacing--petit);

	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--petit);
	box-sizing: border-box;
	min-height: 48px;
	margin: 0;
	padding: var(--medianes-tete-haut) var(--wp--preset--spacing--regulier) var(--medianes-tete-bas);
	border-top: 1px solid var(--wp--preset--color--bleu-02);
	border-bottom: 1px solid var(--wp--preset--color--bleu-02);
	font-family: var(--wp--preset--font-family--degular);

	/* 22px EN LITTÉRAL, comme les sous-liens le sont à 20 (plus bas).
	   `--wp--preset--font-size--chapo` vaut bien 22px, mais l'échelle du thème est
	   fluide : à 393px — la largeur de la maquette — elle rend 20px, soit
	   exactement la taille des sous-liens. La hiérarchie que dessine
	   `7605:20698` (tête 22 Medium, sous-liens 20 Regular) disparaissait donc là
	   où elle compte le plus. Mesuré le 2026-09-14 avant correction. */
	font-size: 22px;
	font-weight: 500;
	line-height: 1.2;
}

/* Chevron de la maquette `7605:20698` : collé au bord droit de la bande.
   Le libellé porte déjà `flex: 1` — c'est lui qui pousse le chevron, pas une
   marge automatique. */
.medianes-menu-mobile__u-chevron {
	flex: 0 0 auto;
}

/* 2026-08-08 (demande Baptiste : « descends-les un tout petit peu, notamment pour
   qu'elles touchent moins le haut »). La tête ne était pas désalignée avec son
   icône — mesuré à 0,5px près dans Chromium — mais elle collait au sommet de sa
   bande bleue : 18px d'air au-dessus du texte, contre 37px avant le premier
   sous-lien. D'où l'impression, juste, d'une tête poussée en haut du bloc.

   Le correctif ne vise QUE les têtes suivies d'une liste. Le Club, seul dans sa
   bande, était déjà symétrique (18px au-dessus, 17px en dessous) : lui appliquer le
   même décalage l'aurait déséquilibré à son tour, dans l'autre sens. */
.medianes-menu-mobile__u:not(.medianes-menu-mobile__u--statique) .medianes-menu-mobile__u-tete {
	--medianes-tete-haut: 20px;
}

.medianes-menu-mobile__u-label {
	flex: 1;
}

/* 2026-08-08 (demande Baptiste) : la tête d'univers est un lien vers sa landing,
   comme les pastilles du header. Elle ne se distingue pas visuellement — couleur et
   soulignement sont déjà neutralisés pour tout le menu — mais elle doit se CLIQUER
   comme une ligne, pas comme un mot.

   D'où les marges négatives : le `<a>` est étiré (`align-self: stretch` l'emporte sur
   le `align-items: center` du `<p>`) puis débordé du padding de son parent, qu'il
   reprend à son compte. La zone sensible couvre alors toute la bande de 48px et va
   jusqu'au bord droit, au lieu des ~24px du texte seul. Même logique que les
   sous-liens, qui prennent déjà la largeur entière de leur ligne. Le padding gauche
   n'est pas repris : il porte l'icône, qui est décorative (`alt=""`) et ne fait pas
   partie du lien. */
a.medianes-menu-mobile__u-label {
	display: flex;
	align-items: center;
	align-self: stretch;
	margin: calc(-1 * var(--medianes-tete-haut)) calc(-1 * var(--wp--preset--spacing--regulier)) calc(-1 * var(--medianes-tete-bas)) 0;
	padding: var(--medianes-tete-haut) var(--wp--preset--spacing--regulier) var(--medianes-tete-bas) 0;
}

/* Sous-liste d'un univers : décalée sous l'icône du parent (24px + gap 12px).

   Dégradé de la maquette `7605:20698` : elle descend du bleu de la tête vers le
   fond du panneau, ce qui détache la bande d'univers sans y poser de filet. La
   tête, elle, garde son bleu-01 plein. */
.medianes-menu-mobile__u>ul {
	margin: 0;
	padding: 0;
	list-style: none;
	background-image: linear-gradient(180deg, var(--wp--preset--color--bleu-01) 0%, var(--wp--preset--color--bleu-00) 100%);
}

/* PLUS DE FILET SOUS LA SOUS-LISTE, et c'est ce qui règle la jointure.

   Elle portait un `border-bottom` en `bleu-04` (#96beff), le ton le plus soutenu
   du menu — la maquette le déclare bien sous la sous-liste Studio (`7605:20866`,
   Bleu/400), pas sous celle du Média (`7605:20817`), et un arbitrage du 2026-09-14
   l'avait étendu aux deux. C'était ce trait-là qui flottait : avec la gouttière de
   3px, il se détachait de la bande suivante ; sans elle, il se serait empilé avec
   son `border-top` clair en une double ligne de 2px.

   2026-09-21 (Baptiste : « ces séparateurs plus clairs doivent séparer les zones de
   dégradés ») : un seul filet par jointure, et c'est le CLAIR — le `border-top` en
   `bleu-02` que chaque bande d'univers porte déjà. La sous-liste s'arrête donc net
   sur son dégradé, et la ligne qui la suit appartient à la bande d'après, qu'elle
   touche. Écart assumé avec le Bleu/400 du node, sur consigne. */

.medianes-menu-mobile__u>ul li {
	margin: 0;
}

/* Demande 2026-07-29 : le lien occupe toute la largeur de la ligne (plus de
   marge gauche/droite portée par le <ul>, qui laissait la zone cliquable plus
   étroite que la ligne) ; texte Degular 20px, 12px d'espacement (padding
   uniforme, remplace l'indentation de 36px calée sous l'icône du sommaire). */
.medianes-menu-mobile__u>ul a {
	display: block;
	/* Vertical 8px (demande Baptiste 2026-07-29) : réduit du même coup l'écart
	   entre deux liens et l'écart Se former → séparateur, qui partagent ce
	   padding — les deux restent égaux. */
	padding: 8px var(--wp--preset--spacing--regulier);
	font-family: var(--wp--preset--font-family--degular);
	font-size: 20px;
	line-height: 1.4;
}

/* Léger surplus en tête (Projets) et en pied (Se former) de la liste, sans
   toucher à l'écart régulier entre deux liens ni à l'écart Se former →
   séparateur (demande Baptiste 2026-07-29). */
.medianes-menu-mobile__u>ul li:first-child a {
	padding-top: var(--wp--preset--spacing--petit);
}

.medianes-menu-mobile__u>ul li:last-child a {
	padding-bottom: var(--wp--preset--spacing--petit);
}

/* Nos expertises : réutilise le composant `.medianes-tag` existant (étiquette
   d'article) plutôt que d'en créer un nouveau — seuls le fond (blanc) et la typo
   (mono) sont adaptés au contexte.

   2026-08-07 : la section a quitté l'univers Studio pour clore le menu (demande
   Baptiste). Elle n'est donc plus posée sur la bande bleu-01 d'un accordéon mais
   sur le fond du panneau, d'où la marge haute qui la détache de l'encart
   newsletters. Le séparateur et le texte-témoin (« Extrait de démonstration —
   contenu à remplacer. ») qui la précédaient ont été retirés : leurs règles ont
   disparu avec eux. */
.medianes-menu-mobile__expertises {
	margin-top: var(--wp--preset--spacing--regulier);
	padding: 0 var(--wp--preset--spacing--regulier) var(--wp--preset--spacing--regulier);
}

.medianes-menu-mobile__expertises h2 {
	margin: 0 0 var(--wp--preset--spacing--petit);
	color: var(--wp--preset--color--bleu-10);
	font-family: var(--wp--preset--font-family--degular);
	font-size: 20px;
	font-weight: 500;
	line-height: 1.2;
}

.medianes-menu-mobile__expertises .medianes-tag {
	margin: 0;
	padding: 0;
	list-style: none;
}

/* Les 4px qui séparent deux étiquettes viennent ailleurs du séparateur du bloc
   `post-terms` — ici la liste est écrite à la main, il n'y en a pas, et les
   pastilles se touchaient. Même écart, autre véhicule. */
.medianes-menu-mobile__expertises .medianes-tag li+li {
	margin-top: 4px;
}

/* 15px : demande Baptiste 2026-07-29, propre à cette pastille — le token
   `note-detail` (13px) reste inchangé partout ailleurs (dates de carte,
   étiquette « à la une »…), pas touché dans theme.json.
   Le padding n'est redéclaré que pour l'écrire avec le token `petit` ; le
   vertical reste nul, pour la raison exposée sur `.medianes-tag a`. */
.medianes-menu-mobile__expertises .medianes-tag a {
	background: var(--wp--preset--color--blanc);
	padding: 0 var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: 15px;
}

/* Accès transverses (à propos, compte, recherche, langue). */
.medianes-menu-mobile__acces {
	margin: var(--wp--preset--spacing--regulier) 0 0;
	padding: 0 var(--wp--preset--spacing--regulier);
	list-style: none;
}

.medianes-menu-mobile__acces li {
	margin: 0;
}

/* Style de texte Figma « Corps sans » : Degular Text, Regular (400), 18px,
   line-height 135% — relevé sur les cinq entrées de `7605:20704` (« À propos de
   Médianes », « Newsletters », « Mon compte », « Recherche », « Français »).

   2026-09-21 (Baptiste : « les typographies des éléments en-dessous de Le club
   doivent être plus légères — Degular Text 400, or elles sont en 500 »). Ces
   lignes étaient en Degular Medium : elles pesaient autant que les têtes d'univers
   au-dessus d'elles, alors que le dessin les veut secondaires. La famille change
   avec la graisse — Degular Text est le dessin de labeur, pas le Degular de
   titrage, et c'est déjà celui qu'emploie le reste du site pour ce style.

   Les deux titres de cette zone ne bougent PAS : « Les newsletters » et « Nos
   expertises » sont des H4 Degular Medium (500) au node, et « Voir les
   newsletters » un Hyperlien Medium. Seules les entrées de menu s'allègent. */
.medianes-menu-mobile__acces>li>a,
.medianes-menu-mobile__lang {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--petit);
	min-height: 44px;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 400;
	line-height: 1.35;
}

/* 2026-08-07 : comme dans le header, le `<select>` a laissé place au menu
   déroulant maison. Le chevron est porté par le `<summary>` (il doit pivoter),
   et l'entrée sert d'ancre au panneau. L'icône « langues », elle, reste dans le
   balisage : contrairement au header, elle s'aligne sur celles des entrées
   voisines de la liste d'actions. */
.medianes-menu-mobile__lang {
	position: relative;
}

/* Le `<details>` occupe la largeur restante de la ligne pour que le chevron
   reste plaqué à droite, où le `::after` du `li` le posait auparavant. */
.medianes-menu-mobile__lang .medianes-langue,
.medianes-menu-mobile__lang .medianes-langue__barre {
	flex: 1;
}

.medianes-menu-mobile__lang .medianes-langue__barre {
	justify-content: space-between;
}

/* CTA : placeholder de la maquette (« Un bouton d'action », sans destination) —
   rendu en <span> non cliquable, mais visuellement identique à
   .medianes-lien-fleche pour que la maquette soit lisible en recette. */
.medianes-menu-mobile__cta {
	margin: var(--wp--preset--spacing--regulier) 0 0;
	padding: 0 var(--wp--preset--spacing--regulier);
}

.medianes-menu-mobile__cta span {
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--degular);
	font-size: 18px;
	font-weight: 500;
	line-height: 1.3;
	text-decoration: underline;
	text-underline-position: from-font;
}

.medianes-menu-mobile__cta span::after {
	content: "";
	display: inline-block;
	width: 24px;
	height: 24px;
	margin-left: var(--wp--preset--spacing--petit);
	vertical-align: middle;
	background: url(assets/icon-arrow-right.svg) center / contain no-repeat;
}

/* Carte newsletters : carte blanche du design system (cf. .medianes-nl-optin). */
.medianes-menu-mobile__nl {
	margin: var(--wp--preset--spacing--regulier) var(--wp--preset--spacing--regulier) 0;
	padding: var(--wp--preset--spacing--regulier);
	border-radius: 6px;
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
}

/* Style de texte Figma « H4 » (Dev Mode, capture 2026-07-29) : Degular Medium
   (500), 26px, line-height 100%. */
.medianes-menu-mobile__nl h2 {
	margin: 0;
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--h-4);
	font-weight: 500;
	line-height: 1;
}

/* Style de texte Figma « Corps serif » (Dev Mode, capture 2026-07-29) :
   Loretta Light (300), 19px, line-height 140%. */
.medianes-menu-mobile__nl p {
	margin: var(--wp--preset--spacing--petit) 0 0;
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--loretta);
	font-size: var(--wp--preset--font-size--corps-serif);
	font-weight: 300;
	line-height: 1.4;
}

.medianes-menu-mobile__nl-lien a {
	font-family: var(--wp--preset--font-family--degular);
	font-size: 18px;
	font-weight: 500;
	text-decoration: underline;
	text-underline-position: from-font;
}

/* Sous-header d'univers
---------------------------------------------------------------------------- */

/* Collé sous le header : on annule le block-gap (24px) ajouté entre les blocs
   de premier niveau du template (header part puis bloc sous-header).
   Recette #100 : sticky sous le header.
   -1px (marge + décalage sticky) : resserrage à -3px demandé par Baptiste le
   2026-07-29, redescendu de 2px par Noé le 2026-07-30 (le bandeau chevauchait
   le header de 2px). Les deux valeurs bougent ensemble pour que la position ne
   saute pas entre l'état posé (haut de page) et l'état collé (scroll) ; le
   padding vertical des liens (12px, .wp-block-navigation-item__content)
   absorbe largement ce décalage sans rogner le texte. */
.wp-block-medianes-subheader {
	margin-top: -1px;
	position: sticky;
	top: calc(var(--medianes-header-h) - 1px);
	z-index: 70;
}

.medianes-subheader .wp-block-navigation-item__content {
	padding: var(--wp--preset--spacing--petit) 0;
	border-bottom: 3px solid transparent;
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-09);
	text-decoration: none;
}

/* États (recette #25, maquette 2777:38461) : l'indicateur est une barre 3px
   sous le mot (largeur du mot), pas un soulignement de texte. Survol = barre
   bleu-08 ; actif = barre bleu-08 + graisse. */
.medianes-subheader .wp-block-navigation-item__content:hover,
.medianes-subheader .wp-block-navigation-item__content:focus-visible {
	border-bottom-color: var(--wp--preset--color--bleu-08);
	text-decoration: none;
}

.medianes-subheader .current-menu-item .wp-block-navigation-item__content {
	font-weight: 700;
	border-bottom-color: var(--wp--preset--color--bleu-08);
}

/* Sortie de site (2026-09-12, demande Baptiste) : « Nos outils » quitte le
   domaine pour socle.media. Le pictogramme
   est posé en `::after`, pas en markup : `wp:navigation-link` n'accepte pas
   d'enfant, et une image glissée dans le libellé serait traduite par Weglot
   comme du texte.

   2026-09-14 : IL N'EN RESTE QU'UNE ADRESSE, MAIS DEUX ENDROITS. L'entrée
   « Ressources » du Média portait aussi cette flèche, parce que la page vivait
   côté Studio ; renommée « Fiches pratiques » et rapatriée dans le Média le même
   jour, elle ne quitte plus rien et l'a perdue. Ne reste que `socle.media`, seul
   lien du site à sortir du domaine — et il apparaît DEUX FOIS : dans le
   sous-header studio et dans le menu mobile, où la flèche avait d'abord été omise
   avant que Baptiste ne la demande. Les deux sélecteurs visent la même adresse,
   pas la même position. */
.medianes-subheader--studio .wp-block-navigation-item__content[href^="https://socle.media"]::after,
.medianes-menu-mobile__u>ul a[href^="https://socle.media"]::after {
	content: "";
	display: inline-block;
	width: 14px;
	height: 14px;
	margin-left: 0.3em;
	vertical-align: baseline;
	background: url(assets/icon-arrow-up-right.svg) center / contain no-repeat;
}

@media (min-width: 782px) {

	/* « Nos outils » est collé au bord droit de la bande (demande Baptiste). Il
	   faut les trois règles : le bloc Navigation est un élément flexible dimensionné
	   à son contenu, sa liste ne s'étire donc pas, et `margin-left:auto` seul
	   n'aurait aucune place à absorber.

	   AU-DESSUS DE 782px SEULEMENT : en dessous, la liste passe en défilement
	   horizontal (`flex-wrap:nowrap` + `overflow-x:auto`, plus bas dans ce fichier)
	   et une marge automatique y creuserait un vide au lieu d'aligner. */
	.medianes-subheader--studio nav.wp-block-navigation {
		flex-grow: 1;
	}

	.medianes-subheader--studio ul.wp-block-navigation__container {
		width: 100%;
	}

	.medianes-subheader--studio ul.wp-block-navigation__container>.wp-block-navigation-item:last-child {
		margin-left: auto;
	}
}

/* Bandeau : fond bleu-00 + ombre basse (token « Ombre bleue clair »). */
.wp-block-medianes-subheader .medianes-subheader {
	background: var(--wp--preset--color--bleu-00);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
}

/* Cartes article (composants Figma « Grand article » 105:2676 / « Petit article »)
---------------------------------------------------------------------------- */
/* Grille de cartes robuste (classe `medianes-grille`). Le Site Editor de WordPress
   réinitialise souvent l'attribut `layout` du bloc post-template en `default`
   (→ grille cassée, 1 colonne géante) ; on ne s'appuie donc PAS sur `is-layout-grid`
   ni le style de conteneur injecté, mais sur des classes CSS (préservées, elles,
   par le Site Editor). Colonnes et gouttière encodées dans le className. */
.medianes-grille {
	display: grid;
	gap: var(--wp--preset--spacing--double);
	grid-template-columns: repeat(4, minmax(0, 1fr));
}

.medianes-grille--3 {
	grid-template-columns: repeat(3, minmax(0, 1fr));
}

.medianes-grille--4 {
	grid-template-columns: repeat(4, minmax(0, 1fr));
}

/* Même réinitialisation, autre symptôme (ticket du 2026-09-21, pages Services
   /studio/expertises/<slug>/) : quand le post-template retombe en `default`,
   WordPress le rend en `is-layout-flow` et injecte `> * + * { margin-block-start:
   <blockGap> }` — 48px de marge haute sur toutes les cartes SAUF la première,
   qui se retrouve seule calée en haut de la rangée, et 96px entre deux rangées
   au lieu de 48. Sur une grille, la gouttière est portée par `gap` : aucune
   marge n'a sa place sur les items. Deux classes (0,2,0) : plus spécifique que
   le style injecté `.wp-container-core-post-template-is-layout-* > * + *`
   (0,1,0), quel que soit l'ordre des feuilles. */
.medianes-grille>.wp-block-post {
	margin-block: 0;
}

/* Paliers responsives des grilles de cartes construites avec le layout NATIF.
   ─────────────────────────────────────────────────────────────────────────────
   Les grilles du thème utilisent `.medianes-grille` (paliers plus bas), mais celles
   qui vivent dans le contenu des pages sont des `core/post-template` en
   `is-layout-grid` : leurs colonnes viennent d'une classe `.wp-container-*` générée
   par WordPress, **sans aucune media query**. Une grille de 4 colonnes le restait
   donc jusqu'à 781px, où elle tombait d'un coup à 2 — et entre les deux, une carte
   n'offrait que ~112 à 153px de texte utile. Mesuré : à 800px, 8 titres sur 16
   coupaient un mot en plein milieu (« L'abonneme|nt », « indépen|dant »), visible
   sur les captures de Noé du 2026-08-04.

   Spécificité (0,3,0) contre (0,1,0) pour la classe de conteneur du cœur : ces
   règles l'emportent sans `!important`. La carte « à la une » n'est pas concernée,
   elle est en `is-layout-flow`. */
@media (max-width: 999px) {

	.wp-block-post-template.medianes-cartes.is-layout-grid,
	.medianes-grille,
	.medianes-grille--4 {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

/* `/le-media/` : sa colonne principale est rétrécie par le rail de 300px, qui ne
   s'empile qu'à 781px (mécanisme d'entrelacement borné là, cf. ADR-010 — le
   remonter changerait l'ordre des sections voulu par la maquette mobile). Entre 782
   et 999px, il ne reste donc que ~400px pour la grille : trois colonnes y donnent
   ~100px de texte par carte. Deux colonnes rendent ~154px, de quoi contenir le mot
   le plus long des titres (« L'abonnement », 139px en Degular Medium 26). */
@media (min-width: 782px) and (max-width: 999px) {

	body.medianes-page-le-media .wp-block-post-template.medianes-cartes.is-layout-grid {
		grid-template-columns: 1fr;
	}
}

/* Un cran de plus sous 900px : à cette largeur, trois colonnes ne laissent que
   ~174px de texte utile, et les titres les plus longs (« Accompagnement », 185px)
   passent encore à la ligne au milieu du mot. Mesuré sur /projets/. */
@media (max-width: 899px) {

	.wp-block-post-template.medianes-cartes.is-layout-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 781px) {

	.wp-block-post-template.medianes-cartes.is-layout-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 480px) {

	.wp-block-post-template.medianes-cartes.is-layout-grid {
		grid-template-columns: 1fr;
	}
}

/* Gouttière canonique des cards côte à côte = 48px (preset `double`), partout sur
   le site (maquettes : les cartes sont toujours espacées de 48px).
   La sélection est en spécificité (0,2,0) pour l'emporter sur les styles de layout
   générés par WordPress (`.wp-container-*{gap:…}`, issus du blockGap enregistré en
   base) : la valeur ne dépend donc plus de ce qui a été saisi dans l'éditeur, et
   elle survit aux réinitialisations du Site Editor.
   `--gap-regulier` (24px) a été retiré : il créait l'incohérence entre sections. */
.wp-block-post-template.medianes-grille,
.wp-block-post-template.medianes-cartes,
.wp-block-columns.medianes-avis,
.wp-block-columns.medianes-avis-liste,
.wp-block-columns.medianes-onparle,
.wp-block-columns.medianes-nl-temoignages,
.wp-block-group.medianes-offres,
.wp-block-group.medianes-series-index {
	gap: var(--wp--preset--spacing--double);
}

@media (max-width: 781px) {

	.medianes-grille {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

/* Consigne Baptiste 2026-07-29 : sur mobile, la gouttière entre cartes (articles,
   projets…) passe à 24px (« regulier ») partout — la maquette desktop (48px) n'est
   plus la référence pour ce point. Même sélecteur que la règle canonique 48px
   ci-dessus, pour l'emporter avec la même spécificité côté mobile. */
@media (max-width: 781px) {

	.wp-block-post-template.medianes-grille,
	.wp-block-post-template.medianes-cartes,
	.wp-block-columns.medianes-avis,
	.wp-block-columns.medianes-avis-liste,
	.wp-block-columns.medianes-onparle,
	.wp-block-columns.medianes-nl-temoignages,
	.wp-block-group.medianes-offres,
	.wp-block-group.medianes-series-index {
		gap: var(--wp--preset--spacing--regulier);
	}
}

@media (max-width: 480px) {

	.medianes-grille {
		grid-template-columns: 1fr;
	}
}

.medianes-cartes>.wp-block-post {
	display: flex;
	flex-direction: column;
	/* 12px entre les blocs de la carte. Le seul écart de 6px vient du conteneur
	   `__entete` (étiquette de type + titre), pas de marges de compensation —
	   voir le bloc « Rythme vertical » plus bas. */
	gap: var(--wp--preset--spacing--petit);
	background: var(--wp--preset--color--blanc);
	border: 0.5px solid transparent;
	/* réserve le contour du survol (pas de saut) */
	border-radius: 6px;
	padding: var(--wp--preset--spacing--petit);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	transition: box-shadow 0.15s ease, border-color 0.15s ease;
}

/* Survol (recette #55, spec Dev Mode « Petit article » variante survol) :
   contour 0,5px bleu-08 + ombre dure « survol ». */
.medianes-cartes>.wp-block-post:hover {
	border-color: var(--wp--preset--color--bleu-08);
	box-shadow: 3px 3px 0 var(--wp--preset--color--bleu-08);
}



/* ─── Rythme vertical de la carte ────────────────────────────────────────────
   Un seul écart resserré, et il est porté par un vrai conteneur :

     image ──12── [ TYPE ──6── titre ] ──12── [chapô] ──12── pastille ──12── signature
                  └──── __entete ────┘

   `.medianes-carte__entete` réunit l'étiquette de type et le titre à 6px
   (`--micro`) ; tout le reste est espacé de 12px par la gouttière de la carte
   (`--petit`). Consigne Noé du 2026-08-04 : « il faut que ces deux éléments soient
   dans un groupe avec 6px d'espacement UNIQUEMENT contre 12px pour le reste des
   éléments ».

   Écart assumé avec la maquette : « Petit article » (108:6139) réunit aussi la
   pastille et la signature dans un groupe à 6px (108:2980). Ce second
   resserrement a été retiré sur consigne — ne pas le réintroduire sans le
   redemander.

   Un conteneur plutôt que des marges de compensation (état antérieur au
   2026-08-04) : le rythme se lit dans la structure, et il n'y a plus de marge à
   corriger quand un créneau apparaît ou disparaît.

   Note pour plus tard : une tentative de compenser l'interlignage de chaque texte
   par des marges négatives — pour que le blanc PERÇU fasse exactement 6px partout
   — a été retirée. Elle atteignait la cible au dixième de pixel près, mais le
   résultat paraissait collé : 6px entre les lettres se lisent plus serré que 6px
   entre les boîtes, l'œil ayant besoin de l'air de l'interlignage. */
.medianes-carte__entete {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: var(--wp--preset--spacing--micro);
}

/* Même raison que le reset des enfants directs plus bas : les marges propres du
   titre s'ajouteraient à la gouttière du conteneur. */
.medianes-carte__entete>* {
	margin-top: 0;
	margin-bottom: 0;
}

/* Recette #39 : le rythme vertical interne vient du gap de la carte (6px depuis
   le 2026-08-04) —
   on neutralise les marges propres des blocs enfants (titre 18px + extrait
   24px s'additionnaient au gap → grands vides). */
.medianes-cartes>.wp-block-post>* {
	margin-top: 0;
	margin-bottom: 0;
}

/* Hauteur ajustée au contenu, sur TOUTES les grilles (consigne Noé 2026-08-04).
   ─────────────────────────────────────────────────────────────────────────────
   Une grille CSS étire ses éléments sur la hauteur de la rangée par défaut
   (`align-items: stretch`) : une carte au titre court héritait donc de la hauteur
   de sa voisine la plus longue, et son fond blanc descendait dans le vide sous la
   signature. `align-self: start` la ramène à la hauteur de son contenu.

   La maquette dit la même chose là où le contenu diffère : dans la rangée
   « En ce moment » de l'accueil Studio (`197:23868`), les quatre instances
   « Petit article » mesurent 359, 307, 215 et 163 px de haut. Les rangées où
   toutes les cartes font 401 px (archive Projets, grille projets de l'accueil)
   ne sont pas un étirement, seulement un contenu de longueur égale.

   Remplace deux règles qui ne visaient que la carte « à la une »
   (`medianes-cartes--grand`, recette #46, node 98:3988) et les archives
   auteur·rice (node 2636:14834) : le comportement est désormais général, ces
   deux cas particuliers n'ont plus de raison d'être. */
.medianes-cartes>.wp-block-post {
	align-self: start;
	height: auto;
}

/* Padding bas de la DERNIÈRE carte d'une grille, mangé par le thème parent.
   ─────────────────────────────────────────────────────────────────────────────
   Ollie pose `.entry-content :not(.wp-block-group) li:last-child { padding-bottom:
   0 }` pour resserrer les listes éditoriales. Or WordPress rend une grille de
   cartes en `<ul>` / `<li class="wp-block-post">` : dans toute grille placée dans
   le contenu d'une page, la dernière carte perdait donc ses 12px de padding bas et
   son étiquette touchait le bord (mesuré le 2026-08-04 : 1px au lieu de 12).

   Défaut préexistant, révélé seulement en passant les cartes en hauteur ajustée —
   avant, l'étirement à la rangée masquait le manque. Spécificité (0,3,1) contre
   (0,3,1) : c'est l'ordre de chargement qui tranche, et le thème enfant charge
   après le parent. */
.medianes-cartes>li.wp-block-post:last-child {
	padding-bottom: var(--wp--preset--spacing--petit);
}

/* Bloc « Vidéos » (medianes/videos, CPT video, node 2636:14834 / composant vidéo
   197:23101) : grille de vignettes portrait 276×490, coins 6px, poster object-cover,
   compteur de vues en surimpression bas-gauche. */
.medianes-videos__titre {
	margin: 0 0 var(--wp--preset--spacing--gouttiere);
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--h-2);
	line-height: 1;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-videos__grille {
	display: grid;
	/* auto-fill : 4 colonnes en pleine largeur (page auteur), 1 dans le rail 300px. */
	grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
	gap: var(--wp--preset--spacing--double);
}

.medianes-video {
	position: relative;
	display: block;
	aspect-ratio: 276 / 490;
	border-radius: 6px;
	overflow: hidden;
	background: var(--wp--preset--color--bleu-01);
	text-decoration: none;
}

.medianes-video__poster {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.medianes-video__poster--vide {
	background: var(--wp--preset--color--bleu-01);
}

/* Compteur de vues : pastille translucide bas-gauche (œil + nombre), blanc. */
.medianes-video__vues {
	position: absolute;
	left: var(--wp--preset--spacing--petit);
	bottom: var(--wp--preset--spacing--petit);
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 4px 10px 4px 8px;
	border-radius: 999px;
	background: rgba(0, 0, 26, 0.55);
	color: var(--wp--preset--color--blanc);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1;
}

.medianes-video__oeil {
	flex: none;
}

@media (max-width: 1024px) {

	.medianes-videos__grille {
		grid-template-columns: repeat(3, 1fr);
	}
}

/* Recette mobile 2026-07-31 (consigne Noé) : vidéo en PLEINE largeur sur
   mobile — une seule colonne. Au ratio 276/490 de la carte, la vidéo occupe
   toute la largeur de contenu, comme l'encart vidéo de la maquette
   (329:11275 : 1 vidéo de 301px pleine largeur dans l'encart). */
@media (max-width: 600px) {

	.medianes-videos__grille {
		grid-template-columns: 1fr;
	}
}


.medianes-cartes .wp-block-post-featured-image {
	margin: 0;
}

.medianes-cartes .wp-block-post-featured-image img {
	display: block;
	width: 100%;
	aspect-ratio: 1200 / 628;
	object-fit: cover;
	border-radius: 3px;
}

/* Titres de cartes : h-4 (26px Degular Medium), conforme aux composants
   Petit/Grand article du Dev Mode (contre-vérification recette #37 — la
   taille fautive venait du bloc related, corrigé plus bas). */
.medianes-cartes .wp-block-post-title {
	color: var(--wp--preset--color--bleu-08);
	font-size: var(--wp--preset--font-size--h-4);
}

.medianes-cartes .wp-block-post-title a,
.medianes-cartes .wp-block-post-excerpt a {
	text-decoration: none;
	color: inherit;
}

.medianes-cartes .wp-block-post-excerpt {
	color: var(--wp--preset--color--bleu-08);
	line-height: 1.2;
}

/* Tag éditorial (composant « Tag article », spec Dev Mode 108:6322) :
   padding 6/12, radius 3, Degular Mono 15 lh1.3 rogné au cap-height
   (text-box-trim — c'est lui qui « réduit la hauteur », recette #54) ;
   états : passif bleu-01, survol bleu-02, actif bleu-08/blanc.

   ⚠️ LE CONTENEUR EST EN FLUX, PAS EN FLEX — et c'est la condition du
   découpage demandé le 2026-08-08 (capture comparative de Baptiste) : le fond
   d'une étiquette sur deux lignes doit être COUPÉ AU TEXTE de chaque ligne
   — « MANAGEMENT ET GESTION » puis « DE PROJET », chacun le sien — au lieu
   d'un rectangle unique de la largeur de la carte.

   Cela demande `display: inline` + `box-decoration-break: clone` sur la
   pastille. Or **un enfant de conteneur flex est blockifié** : tant que
   `.medianes-tag` était en `display: flex`, l'`inline` du lien était réécrit
   en `block` par le moteur, et le découpage ne pouvait pas se produire. La
   gouttière n'est donc plus un `gap` mais une marge sur la pastille, et
   l'écart vertical vient de l'interligne du conteneur.

   L'interligne commande l'écart entre fragments ; la hauteur d'un fragment,
   elle, vaut celle de sa boîte peinte, que la boîte de ligne ne compte pas.
   Les deux doivent donc être calés à la main — mesuré à −6px de chevauchement
   avant réglage. Depuis la recette du 2026-09-21 la pastille mesure 21px et
   non plus 33 (voir `.medianes-tag a` juste dessous) : l'interligne vaut
   exactement cela — 1,4 × 15, la boîte de la fonte — et les lignes se
   touchent, comme dans la maquette. */
.medianes-tag {
	display: block;
	line-height: calc(1.4 * var(--wp--preset--font-size--note));
}

/* UNE ÉTIQUETTE PAR LIGNE — et il faut la provoquer.

   Avec les pastilles en `inline`, elles s'enchaînent, et une étiquette coupée
   se retrouve mêlée à ses voisines : sur une carte, « DESIGN » et « TECH & »
   partageaient une ligne, « PRODUIT » tombait dessous — on ne voyait plus que
   « Tech & produit » était UNE étiquette. Le découpage du fond, qui est
   justement ce qu'on cherche, rendait la lecture ambiguë. Consigne de
   Baptiste : « TECH & PRODUIT devrait directement être sur la deuxième ligne,
   on n'autorise pas à couper » — une étiquette ne se coupe que si elle ne tient
   pas SEULE sur une ligne.

   Avant, l'empilement venait d'un effet de bord : une pastille `inline-block`
   est une boîte atomique, elle occupait sa largeur entière et repoussait la
   suivante. Il faut donc le demander explicitement.

   Le séparateur du bloc cœur (« , », qui n'a jamais eu à s'afficher) sert de
   rupture : un bloc entre deux contenus en ligne casse la ligne, et sa hauteur
   devient l'écart entre étiquettes — il est déjà là, dans chaque liste de
   termes.

   ⚠️ CETTE HAUTEUR EST LE SEUL ENDROIT QUI SÉPARE DEUX ÉTIQUETTES, et c'est
   voulu : elle ne touche pas aux fragments d'une MÊME étiquette, qui doivent
   rester bord à bord comme dans la maquette. Passer par l'interligne du
   conteneur les écarterait aussi. 4px demandés par Baptiste le 2026-08-08 —
   sans quoi deux étiquettes empilées se touchent et se lisent comme une seule.
   Le dernier terme n'ayant pas de séparateur, rien ne dépasse en bas. */
.medianes-tag .wp-block-post-terms__separator {
	display: block;
	height: 4px;
	overflow: hidden;
}

/* `box-decoration-break: clone` donne à CHAQUE fragment de ligne son padding,
   son fond et son rayon ; sans lui, seul le premier serait arrondi et rembourré.
   `line-height` est ré-affirmé ici : sans ça la pastille hériterait de
   l'interligne du conteneur et grandirait d'autant.
   `margin-right` remplace le `gap` disparu avec le flex.

   ⚠️ AUCUN PADDING VERTICAL, ET C'EST VOLONTAIRE — la pastille serait sinon
   deux fois trop haute.
   ─────────────────────────────────────────────────────────────────────────────
   Le composant Figma (`98:4536`, « Tag article ») mesure **21px** de haut ;
   mesurée au navigateur le 2026-09-21, la pastille en ligne en faisait **33**.
   Le padding n'y était pour rien : il valait déjà 6/12 des deux côtés.

   Figma dessine 6px au-dessus des capitales et 6px sous la ligne de base en
   rognant d'abord la boîte du texte à sa hauteur de capitale — c'est ce que
   son propre export écrit, `text-box-trim: trim-both` + `text-box-edge: cap
   alphabetic`, et c'est ce que cette règle déclarait aussi. Mais **ces deux
   propriétés sont inertes sur une boîte EN LIGNE** : elles ne rognent que les
   lignes d'un conteneur de bloc. Sur un `display: inline`, le fond est peint
   sur la « content area », c'est-à-dire la boîte de la fonte — ascendante 15 +
   descendante 6 = 21px pour Degular Mono en 15px (mesuré). Or ces 6 + 6 px
   SONT déjà l'espace que la maquette dessine autour des capitales. Les
   redemander en padding les doublait : 21 + 12 = 33.

   Passer la pastille en `inline-block` rendrait le rognage opérant (21px
   également, boîte et position des capitales identiques au pixel — comparé au
   navigateur), mais ferait d'elle une boîte ATOMIQUE et tuerait le découpage
   en fragments exigé juste au-dessus. Le padding vertical tombe donc, et les
   deux propriétés de rognage avec lui : les garder laisserait croire qu'elles
   agissent. Seul le padding horizontal, lui bien réel, demeure. */
.medianes-tag a {
	display: inline;
	-webkit-box-decoration-break: clone;
	box-decoration-break: clone;
	background: var(--wp--preset--color--bleu-01);
	color: var(--wp--preset--color--bleu-08);
	padding: 0 12px;
	margin-right: var(--wp--preset--spacing--micro);
	border-radius: 3px;
	text-transform: uppercase;
	text-decoration: none;
	line-height: 1.3;
}

.medianes-tag a:hover,
.medianes-tag a:focus-visible {
	background: var(--wp--preset--color--bleu-02);
	text-decoration: none;
}

.medianes-tag a[aria-current] {
	background: var(--wp--preset--color--bleu-08);
	color: var(--wp--preset--color--blanc);
}

/* Étiquettes du côté STUDIO : fond beige au lieu du bleu (demande Baptiste,
   2026-09-13, avec la valeur `#F5F1E5`).
   ─────────────────────────────────────────────────────────────────────────────
   LA CLASSE VIENT DU SERVEUR, PAS DE L'ADRESSE. `medianes-tag--studio` est posée
   par `medianes_expertise_pastille_par_cote()` (medianes-core/expertises.php) et
   par l'index des années, c'est-à-dire par le code qui DÉCIDE du côté. Viser
   `a[href*="/studio/expertises/"]` aurait marché aujourd'hui et se serait tu le
   jour où l'adresse bouge — elle vient de bouger la veille (ADR-031), et six
   règles `:has()` mortes ont été retirées le même jour pour ce motif exact.

   « Beige 01bis » est le nom Figma de cette valeur (`#f5f1e5`), donné par Baptiste
   le 2026-09-14 : elle est entrée dans la palette de `theme.json` le jour même et
   n'est donc plus un littéral. Le thème compte maintenant trois beiges — 01
   (#faf8f2), 01bis (#f5f1e5) et 02 (#e2ded4).

   ⚠️ LE SLUG S'ÉCRIT `beige-01-bis`, AVEC UN TIRET AVANT « bis ». WordPress passe
   chaque slug de palette par `_wp_to_kebab_case()` pour fabriquer la variable, et
   cette fonction INSÈRE un tiret entre un chiffre et les lettres qui suivent :
   `beige-01bis` aurait produit `--wp--preset--color--beige-01-bis`. Écrit d'abord
   sans tiret, le slug et la variable divergeaient — `var()` ne résolvait rien et
   les étiquettes studio sont sorties TRANSPARENTES en ligne (mesuré :
   `rgba(0,0,0,0)`), sans la moindre erreur nulle part. Le slug porte donc
   maintenant le tiret lui-même, pour que les deux ne puissent plus diverger.

   Le survol reprend `beige-02`, le pas suivant de l'échelle beige — la maquette
   ne montre pas cet état. */
.medianes-tag--studio a {
	background: var(--wp--preset--color--beige-01-bis);
}

.medianes-tag--studio a:hover,
.medianes-tag--studio a:focus-visible {
	background: var(--wp--preset--color--beige-02);
}

/* Signature « par AUTEUR·RICE » */
.medianes-byline {
	color: var(--wp--preset--color--bleu-08);
}

.medianes-byline p {
	margin: 0;
}

/* Nom en majuscules (le « par »/byline devant reste en bas de casse) — le
   bloc medianes/auteurs {namesOnly:true} remplace le natif wp:post-author-name
   (recette mobile 2026-07-27 : celui-ci ignorait Co-Authors Plus et laissait
   un « par » orphelin sans auteur). */
.medianes-byline .medianes-byline__nom {
	text-transform: uppercase;
}

.medianes-byline a {
	text-decoration: none;
	color: inherit;
}

/* Ouverture (accueils) */
.medianes-ouverture h1 {
	max-width: 796px;
}

/* Le titre d'ouverture reste FERRÉ À GAUCHE. En layout « constrained », le cœur
   applique margin-inline:auto !important aux enfants plafonnés (align:wide
   compris), ce qui centrait le H1 sur les pages Expertises enfants et
   /index-des-missions/. Spécificité (0,2,1) > règle cœur (0,1,0) + !important
   pour rétablir le calage à gauche. */
.medianes-ouverture>h1.wp-block-heading {
	margin-inline: 0 !important;
}

/* Recette #98 : en-tête de /expertises/ (titre + description) plafonné à 800px,
   calé à gauche. */
body.medianes-page-expertises .medianes-ouverture>* {
	max-width: 800px;
	/* le layout « constrained » centre les enfants : on force le calage à gauche. */
	margin-inline: 0;
}

/* Rail latéral (accueils — node Figma 108:3076 : 924 | 24 | filet | 24 | 276)
---------------------------------------------------------------------------- */
.medianes-rail {
	border-left: 1px solid var(--wp--preset--color--bleu-01);
	padding-left: var(--wp--preset--spacing--regulier);
}

.medianes-rail h3 {
	margin-bottom: var(--wp--preset--spacing--regulier);
}

/* Recette mobile 2026-07-30 (consigne Noé) : empilé sous 781px, le rail perd
   son filet séparateur et son retrait gauche — ils n'ont de sens qu'en
   colonne latérale desktop. */
@media (max-width: 781px) {
	.medianes-rail {
		border-left: 0;
		padding-left: 0;
	}
}

/* Couverture du livre (ombre portée spécifique, node 108:2862) */
.medianes-livre-cover img {
	box-shadow: 4px 4px 9px 0 rgba(0, 0, 0, 0.25);
}

/* Formulaire newsletter (statique en attendant le bloc Brevo)
---------------------------------------------------------------------------- */
.medianes-form-nl {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	margin-top: var(--wp--preset--spacing--petit);
}

/* 2026-08-07 : fond, rayon, ombre, typo, couleurs et états viennent désormais du
   composant « Champ » (§ en fin de feuille). Ne subsiste ici que la hauteur fixe
   de la barre d'inscription, qui aligne le champ sur son bouton. */
.medianes-form-nl input[type="email"] {
	height: 46px;
}

.medianes-form-nl .wp-element-button {
	width: 100%;
	cursor: pointer;
}

/* Variante en ligne (404, bandes) : champ + bouton côte à côte */
.medianes-form-nl--inline {
	flex-direction: row;
	flex-wrap: wrap;
}

.medianes-form-nl--inline input[type="email"] {
	flex: 1 1 240px;
}

.medianes-form-nl--inline .wp-element-button {
	width: auto;
}

/* Recette mobile 2026-07-29 (consigne Noé : tous les boutons en pleine
   largeur) : la variante en ligne se réempile sous 781px — champ puis bouton,
   chacun pleine largeur. Sans quoi le « width:auto » ci-dessus (plus
   spécifique que la règle générique des boutons mobiles) laissait le bouton
   « S'inscrire » à sa largeur de contenu. */
@media (max-width: 781px) {

	.medianes-form-nl--inline {
		flex-direction: column;
	}

	.medianes-form-nl--inline input[type="email"] {
		flex: 1 1 auto;
		width: 100%;
	}

	.medianes-form-nl--inline .wp-element-button {
		width: 100%;
	}
}

/* Boutons (spec Dev Mode 114:4937) : bordure 0,5px bleu-08 sur tous les
   états ; survol = fond bleu-04 texte marine + ombre dure « survol »
   (3px 3px 0 #000052). */
.wp-element-button {
	border: 0.5px solid var(--wp--preset--color--bleu-08);
	transition: box-shadow 0.15s ease, background-color 0.15s ease, color 0.15s ease;
}

/* ⚠️ LE SURVOL SEUL — PAS LE FOCUS (ticket Baptiste, 2026-09-22).

   `:focus-visible` prenait ici la variante « CTAsurvol » de Figma : fond
   bleu-04, texte marine, ombre dure. Un bouton simplement FOCALISÉ se
   présentait donc comme un bouton survolé — et la modale du parcours de compte
   pose le focus toute seule à l'ouverture (`placerFocus()`), si bien que
   « Recevoir un nouveau lien » s'affichait d'emblée en bleu clair, sa bordure
   0,5px bleu-08 devenue visible sur ce fond, DOUBLÉE par l'anneau de focus
   accessible (2px bleu-08 à 2px, §accessibilité plus bas) : deux traits
   parallèles là où la maquette n'en dessine aucun.

   Le survol et le focus sont deux états distincts, et Figma n'en dessine qu'un.
   Le focus garde donc le seul anneau — visible, conforme, unique — et le bouton
   reste le CTA marine du composant, dont la bordure de même couleur que le fond
   ne se voit pas. C'est exactement ce que demandait Baptiste : « sans les
   bordures, comme les autres boutons ». */
.wp-element-button:hover {
	background-color: var(--wp--preset--color--bleu-04) !important;
	color: var(--wp--preset--color--bleu-08);
	box-shadow: 3px 3px 0 var(--wp--preset--color--bleu-08);
}

/* Boutons outline (404, CTA) : fond transparent, bordure fine ; survol = fond
   bleu-01 + ombre dure (variante « secondaire survol » de Figma).
   `outline: none` neutralise la règle d'Ollie (assets/styles/core-button.css :
   outline 2px offset -3.5px) qui, cumulée à la bordure, dessinait un double
   trait avec liseré clair (retour recette du 2026-07-03). Le focus clavier
   est rétabli juste en dessous. */
.wp-block-button.is-style-outline .wp-block-button__link {
	background: transparent;
	border: 1px solid currentcolor;
	color: var(--wp--preset--color--bleu-08);
	outline: none;
}

.wp-block-button.is-style-outline .wp-block-button__link:focus-visible {
	outline: 2px solid var(--wp--preset--color--bleu-08);
	outline-offset: 2px;
}

/* Même partage que pour le CTA ci-dessus : le fond « secondaire survol » est
   réservé au survol, le focus n'a que son anneau. */
.wp-block-button.is-style-outline .wp-block-button__link:hover {
	background: var(--wp--preset--color--bleu-01);
	color: var(--wp--preset--color--bleu-08);
}

/* Hyperlien du composant « recirculation centrée » (2955:40670) : lien souligné
   simple (pas de flèche), Degular Medium 18, soulignement from-font (règle
   globale #59). */
.medianes-hyperlien a {
	text-decoration: underline;
}

/* Page « Nous contacter » : ses liens suivent le style Figma « Hyperlien »
   (Degular Medium 500) — demande Baptiste du 2026-09-23. Ils sont pris dans le
   texte courant (Degular Text 430), et Gutenberg ne sait pas poser une graisse
   500 sur un mot seul (le gras donne 700) : la règle vit donc ici, et vise le
   groupe `.medianes-contact` du contenu, si bien qu'un lien ajouté dans
   l'éditeur la reçoit d'office. */
.medianes-contact a:not(.wp-element-button) {
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
}

/* Lien retour des pages enfants Expertise (bouton « Retour aux expertises »,
   node 2955:42648) : picto flèche gauche 24 + libellé souligné.

   Style de texte Figma « Hyperlien » : Degular Medium (500), 18px, line-height
   130% — relevé sur `7699:28460` comme sur `2955:42648`. Il rendait 22px jusqu'au
   2026-09-21, hérité de la règle du chapô qui vise tous les `<p>` enfants directs
   de `.medianes-ouverture` ; l'exclusion est posée plus haut. Treize pages
   portent ce lien (les six expertises studio, les six média, l'index des
   missions) : elles passent toutes à 18 d'un coup, ce qui est le but — une seule
   convention pour un seul composant. */
.medianes-retour {
	font-size: 18px;
	font-weight: 500;
	line-height: 1.3;
}

.medianes-retour a {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	text-decoration: underline;
}

/* Footer (node Figma 108:4186 — footer clair)
---------------------------------------------------------------------------- */
.medianes-footer a {
	text-decoration: none;
	color: var(--wp--preset--color--bleu-08);
}

/* Recette #38 (spec Dev Mode 486:36841) : descriptif Degular Text 18 lh 1.2,
   filet fin avant crédits. */
.medianes-footer p {
	line-height: 1.2;
}

.medianes-footer .wp-block-separator {
	border: 0;
	height: 1px;
}

/* Recette #50 : sous ~1080px la colonne NL (492px) écrase les colonnes de
   liens. WP force flex-wrap:nowrap !important sur .wp-block-columns ≥782px —
   surcharge nécessaire pour laisser la colonne passer à la ligne.

   2026-09-11 — LE PASSAGE À LA LIGNE N'ÉTAIT QU'AUTORISÉ, JAMAIS PROVOQUÉ, et
   la borne haute était trop basse. La colonne de gauche est en `flex: 1 1 0` :
   plutôt que de renvoyer la colonne NL à la ligne, elle se laissait comprimer
   pour lui laisser ses 492px. Mesuré à 900px : colonne de gauche à 240px,
   descriptif à 87px — un mot par ligne — et « Mentions légales » coupé en
   « Menti/ons » ; à 1100px, hors de l'ancienne media query, descriptif à 165px.
   Défaut antérieur au bloc Qualiopi entré dans cette colonne le même jour.

   Le correctif ne fixe donc PAS une largeur d'écran mais la largeur minimale
   réelle de la colonne : ses trois colonnes internes valent 276 + 168 + 168,
   plus deux gouttières `regulier`, soit 660px. En base de 660 au lieu de 0, elle
   ne peut plus être comprimée : tant que 660 + 48 (gouttière) + 492 (colonne NL)
   tiennent dans la largeur de contenu, la mise en page à deux colonnes est
   intacte — 708px pour la colonne de gauche à 1248 de contenu, comme avant ;
   en dessous, la colonne NL passe d'elle-même à la ligne. Plus de borne à tenir
   à jour quand une largeur de colonne change.

   La colonne NL garde ses 492px une fois passée à la ligne : le `flex-grow: 1`
   qui vivait ici ne l'a jamais élargie — le core pose `flex-grow: 0` sur toute
   colonne portant un `flex-basis` en style inline, avec une spécificité que ce
   sélecteur-ci ne pouvait pas battre (mesuré : 492px de large dans toute la
   bande). Règle inerte, retirée. */
@media (min-width: 782px) {

	.medianes-footer>.wp-block-columns,
	.medianes-footer .wp-block-columns.alignwide {
		flex-wrap: wrap !important;
		/* justification : contre le nowrap !important du core */
	}

	.medianes-footer>.wp-block-group>.wp-block-columns>.wp-block-column:not(.medianes-footer__nl) {
		flex-basis: 660px;
	}
}

.medianes-footer__logo {
	display: inline-flex;
}

.medianes-footer__logo img {
	display: block;
	width: 241px;
	height: 29px;
}

.medianes-footer__nav .wp-block-navigation-item__content {
	color: var(--wp--preset--color--bleu-08);
	line-height: 1.3;
}

.medianes-footer__social,
.medianes-footer__projets {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--wp--preset--spacing--regulier);
	margin-top: var(--wp--preset--spacing--regulier);
	font: 400 15px/1.3 var(--wp--preset--font-family--degular-mono);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-footer__social a,
.medianes-footer__projets a {
	display: inline-flex;
	align-items: center;
	gap: var(--wp--preset--spacing--petit);
	color: inherit;
}

.medianes-footer__projets a {
	gap: var(--wp--preset--spacing--micro);
}

/* Picto « sortie de site » (↗) : flèche discrète (~moitié des icônes sociales,
   conforme au glyphe inséré 25 % de la maquette), pas une icône pleine 24px. */
.medianes-footer__projets a img {
	width: 14px;
	height: 14px;
	flex: none;
}

/* Marge haute `regulier` et non `petit` depuis le 2026-09-11 (demande Baptiste) :
   le bloc Qualiopi respire autant sous « Plus de projets Médianes » que celle-ci
   sous la ligne des réseaux sociaux. Les trois briques de la colonne partagent
   désormais la même marge — mesuré avant : 24px entre réseaux et projets, 12
   seulement entre projets et logo. En mobile, la gouttière de la pile s'y ajoute
   pour les trois pareillement (48px), l'égalité tient donc aux deux largeurs. */
.medianes-footer__labels {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--regulier);
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-footer__labels img {
	height: auto;
}

/* Mention de portée de la certification, sous le logo Qualiopi (demande Baptiste
   2026-08-11, texte et style relevés dans le node Figma 108:4186).

   Style « Note » de la maquette : Degular Mono 15px, interligne 1.3, bleu/700 —
   les mêmes tokens que la ligne « Plus de projets Médianes » juste au-dessus,
   dont elle prolonge visuellement le bloc.

   ⚠️ 2026-09-11 : la mention est REVENUE DANS la colonne de gauche, sous le
   logo (demande Baptiste). Elle en était sortie le 2026-08-11 pour tenir sur une
   seule ligne comme dans la maquette (bloc de 936px contre 708px pour la
   colonne) ; l'arbitrage est renversé et elle passe sur deux lignes. Le rang
   mobile qui va avec est posé plus bas, dans la media query 781px.

   Marge nulle, et surtout PAS négative : elle suit immédiatement le logo, et un
   `-24px` destiné à rattraper un `blockGap` faisait chevaucher le texte et la
   mention « RÉPUBLIQUE FRANÇAISE » du logo — mesuré à 24px de recouvrement le
   2026-08-11. */
.medianes-footer__certification {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-footer__certification a {
	color: inherit;
	text-decoration: underline;
}

/* Saut de ligne d'agrément, desktop seulement (2026-09-11). Un `<br>` en
   `display: none` ne rompt plus la ligne : le texte se recompose alors tout
   seul, à condition qu'une espace le précède dans le balisage — sans elle les
   deux mots se colleraient en mobile.

   Né de la mention de portée du footer, où la coupure donne deux lignes nettes à
   708px mais isolait « délivrée » sur une ligne à elle seule en mobile. La
   classe n'est PAS bornée au footer : elle vaut pour toute coupure de confort. */
@media (max-width: 781px) {

	.medianes-br-desktop {
		display: none;
	}
}

.medianes-encart-nl>*+* {
	margin-top: var(--wp--preset--spacing--petit);
}

/* Footer mobile — conformité à la maquette (capture Baptiste 2026-07-30).
   Trois écarts mesurés sur le rendu live et corrigés ici, mobile uniquement :

   1. L'encart newsletters arrivait EN DERNIER (après réseaux, projets et logos)
      alors que la maquette le place juste après les colonnes de liens. Il vit
      dans une colonne sœur de tout le reste : on efface donc la colonne de
      gauche de la mise en page (`display: contents`) pour que ses enfants
      deviennent frères de l'encart dans le même conteneur flex, ce qui rend
      `order` utilisable entre eux. `flex: 0 0 100%` remet chacun sur sa propre
      rangée (sans lui, les enfants promus, qui ne sont pas des
      `.wp-block-column`, échappent au `flex-basis: 100%` du cœur et se
      remettent côte à côte).
   2. Les deux colonnes de liens s'empilaient (chacune pleine largeur) au lieu
      d'être côte à côte : le cœur force `flex-basis: 100% !important` sur toute
      `.wp-block-column` sous 782px, d'où le `!important` ici pour les ramener à
      50 % — la colonne du descriptif, elle, reste pleine largeur.
   3. Les logos étaient dans l'ordre Qualiopi puis Ministère, la maquette montre
      l'inverse. Corrigé par `order` (mobile seulement : aucune maquette desktop
      du footer n'a été fournie, l'ordre desktop reste donc tel quel — à
      confirmer).

   NON repris de la maquette, volontairement (cf. figma-inventaire.md) :
   les liens « Confidentialité » et « Cookies » qu'elle affiche pointent vers
   `/confidentialite/`, qui répond en 404 (vérifié) — ils avaient été retirés à
   raison ; et la mention RGPD sous « S'inscrire », absente de la maquette, est
   conservée (obligation légale, recette #10). */
@media (max-width: 781px) {

	.medianes-footer>.wp-block-group>.wp-block-columns>.wp-block-column:not(.medianes-footer__nl) {
		display: contents;
	}

	.medianes-footer>.wp-block-group>.wp-block-columns>.wp-block-column:not(.medianes-footer__nl)>* {
		flex: 0 0 100%;
	}

	.medianes-footer>.wp-block-group>.wp-block-columns>.wp-block-column:not(.medianes-footer__nl)>.wp-block-columns {
		order: 1;
	}

	.medianes-footer__nl {
		order: 2;
	}

	.medianes-footer__social {
		order: 3;
	}

	.medianes-footer__projets {
		order: 4;
	}

	.medianes-footer__labels {
		order: 5;
	}

	/* La mention de portée est entrée dans la colonne de gauche le 2026-09-11 :
	   elle devient donc, en mobile, un frère de la pile `display: contents` et
	   doit y prendre son rang. Sans cette ligne elle garde `order: 0` et remonte
	   AVANT les colonnes de liens (order 1) — soit tout en haut du footer. */
	.medianes-footer__certification {
		order: 6;
	}

	/* Colonnes de liens côte à côte, descriptif pleine largeur au-dessus. */
	.medianes-footer .wp-block-columns .wp-block-columns>.wp-block-column:not(:first-child) {
		flex-basis: calc(50% - var(--wp--preset--spacing--petit)) !important;
	}

	/* Ministère à gauche, Qualiopi à droite. */
	.medianes-footer__labels img:first-child {
		order: 2;
	}
}

/* Entrées de veille (composant « entrée de veille » 108:3164) : encart
   « Nos lectures » de /media/ (cadre 108:3080 de l'accueil Média).
   Depuis le 2026-09-21, l'encart est une boucle de requête sur le type
   `veille` (grille de 6, `medianes-veille-grille`) et non plus six colonnes
   recopiées à la main : ce qui est ajouté en veille paraît à la fois sur
   /veille/ et ici. Les sélecteurs `.wp-block-column` restent le temps que
   `scripts/migration/lemedia-nos-lectures-veille.php` ait remplacé le contenu
   de la page — ensuite, ils ne matchent plus rien.
---------------------------------------------------------------------------- */
.medianes-veille .wp-block-column,
.medianes-veille .wp-block-post {
	padding: var(--wp--preset--spacing--petit) 0;
}

/* Une entrée est une pile à 12px (node 108:3278 : date à y=12, titre à +12,
   URL à +12) ; les marges propres des blocs date/titre/URL sont remises à
   zéro pour que seul cet écart compte. */
.medianes-veille .wp-block-post>* {
	margin: 0;
}

.medianes-veille .wp-block-column>*+*,
.medianes-veille .wp-block-post>*+* {
	margin-top: var(--wp--preset--spacing--petit);
}

.medianes-veille .wp-block-post-date,
.medianes-veille .wp-block-post-title {
	color: var(--wp--preset--color--bleu-08);
}

.medianes-veille__url a {
	color: var(--wp--preset--color--bleu-08);
	overflow-wrap: anywhere;
}

/* Sous 781px, la grille passe en une colonne, comme s'empilaient les six
   colonnes qu'elle remplace (le cœur ne rabat une grille `columnCount` qu'à
   600px). Deux classes : plus spécifique que le style de disposition généré
   par le cœur (`.wp-container-core-post-template-is-layout-N`, une classe). */
@media (max-width: 781px) {

	.medianes-veille .medianes-veille-grille {
		grid-template-columns: 1fr;
	}
}

/* Archive Veille (node 486:42653) : liste d'entrées en une colonne. Rythme repris
   du composant « entrée de veille » (`108:3162`) après constat Noé 2026-08-03 :
   l'entrée y est une pile de 12px d'écart, 12px de padding haut et bas, et un
   filet bleu-02 SOUS chaque entrée (y compris la dernière). L'intégration avait
   posé 24px de padding, 6px entre les lignes et un filet bleu-01 seulement entre
   deux entrées — d'où un rythme irrégulier, la date paraissant collée au titre
   précédent. La pile en flex rend l'écart uniforme quelle que soit la ligne
   présente : une entrée sans lien de source n'ouvre pas de trou.
--------------------------------------------------------------------------- */
.medianes-veille-liste>.wp-block-post {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	padding-block: var(--wp--preset--spacing--petit);
	border-bottom: 1px solid var(--wp--preset--color--bleu-02);
}

.medianes-veille-liste .wp-block-post-date,
.medianes-veille-liste .wp-block-post-title,
.medianes-veille-liste .medianes-veille__url {
	margin: 0;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-veille-liste .medianes-veille__url {
	overflow-wrap: anywhere;
}

/* Le lien de la source EST le seul lien de l'entrée : souligné, et cible de
   survol assez large pour être confortable malgré ses 13px. */
.medianes-veille-liste .medianes-veille__url a {
	color: inherit;
	text-decoration: underline;
	text-decoration-thickness: from-font;
	text-underline-offset: 0.15em;
}

.medianes-veille-liste .medianes-veille__url a:hover,
.medianes-veille-liste .medianes-veille__url a:focus-visible {
	color: var(--wp--preset--color--bleu-09);
}

/* Job board (node 3201:26981) : encadré « à la une » en tête de la liste. */
.medianes-aune {
	margin-bottom: var(--wp--preset--spacing--gouttiere);
}

.medianes-aune>* {
	margin-top: var(--wp--preset--spacing--micro);
	margin-bottom: var(--wp--preset--spacing--micro);
}

/* Étiquette « À la une » : spec Dev Mode job board (mono 14, interligne 1.5). */
.medianes-aune__label {
	margin-top: 0;
	text-transform: uppercase;
	letter-spacing: 1px;
	font-size: 14px;
	line-height: 1.5;
}

.medianes-aune .wp-block-post-title {
	margin-bottom: var(--wp--preset--spacing--micro);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-aune .wp-block-post-title a {
	text-decoration: none;
	color: inherit;
}

.medianes-aune .medianes-veille__url {
	margin-bottom: 0;
	color: var(--wp--preset--color--bleu-08);
	overflow-wrap: anywhere;
	text-decoration: underline;
}

/* Hub Podcast (node 486:40839)
---------------------------------------------------------------------------- */
.medianes-podcast-tete__intro,
.medianes-podcast-tete__ecoute {
	color: var(--wp--preset--color--bleu-08);
}

.medianes-podcast-tete__ecoute a {
	color: inherit;
}

/* Visuel d'en-tête : placeholder carré en attendant la pochette fournie par
   Médianes (la maquette n'embarque qu'un cadre vide à cet emplacement). */
.medianes-podcast-tete__visuel {
	width: 100%;
	max-width: 400px;
	margin-left: auto;
	aspect-ratio: 1 / 1;
	border-radius: 6px;
	background: var(--wp--preset--color--bleu-02);
}

/* Sections « saison » : titre (h2 Loretta 54 via theme.json) + intro + grille. */
.medianes-saisons>.medianes-saison+.medianes-saison {
	margin-top: var(--wp--preset--spacing--triple);
}

.medianes-saison__titre {
	margin: 0 0 var(--wp--preset--spacing--regulier);
}

.medianes-saison__intro {
	max-width: 815px;
	margin: 0 0 var(--wp--preset--spacing--regulier);
	color: var(--wp--preset--color--bleu-08);
	line-height: 1.15;
}

.medianes-saison__grille {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--wp--preset--spacing--double);
}

/* Pochette carrée (vs cartes article paysage). */
.medianes-saison__grille .wp-block-post-featured-image img {
	aspect-ratio: 1 / 1;
}

.medianes-saison__grille .wp-block-post-title {
	font-size: var(--wp--preset--font-size--h-4);
}

/* Signature « par AUTEUR » du bloc saisons (HTML brut → on rétablit l'inline). */
.medianes-saison__grille .medianes-byline {
	display: flex;
	gap: 0.35em;
}

@media (max-width: 1024px) {

	.medianes-saison__grille {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 600px) {

	.medianes-saison__grille {
		grid-template-columns: 1fr;
	}
}

/* Page par série (taxonomy-serie) + liste de fiches pratiques (node 427:8259)
---------------------------------------------------------------------------- */

/* Visuel d'en-tête : placeholder carré générique (visuel à fournir). */
.medianes-visuel-placeholder {
	width: 100%;
	max-width: 400px;
	margin-left: auto;
	aspect-ratio: 1 / 1;
	border-radius: 6px;
	background: var(--wp--preset--color--bleu-02);
}

/* Ces trois emplacements carrés étaient de simples aplats ; depuis le lot d'images
   du 2026-08-03 ils reçoivent une vraie image (pochette du podcast, illustration
   des pages auteur·ice). Une `img` est `inline` par défaut : sans cette règle,
   l'espace réservé au jambage la fait dépasser de 8px du carré de 400px. */
.medianes-podcast-tete__visuel img,
img.medianes-visuel-placeholder,
.medianes-visuel-placeholder img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 6px;
}

/* Lignes « Fiche pratique » : vignette 257×150 | contenu. */
.medianes-fiches-liste>.wp-block-post {
	display: flex;
	gap: var(--wp--preset--spacing--double);
	align-items: flex-start;
	background: var(--wp--preset--color--blanc);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--regulier);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
}

.medianes-fiches-liste .wp-block-post-featured-image {
	flex: 0 0 257px;
	margin: 0;
}

.medianes-fiches-liste .wp-block-post-featured-image img {
	display: block;
	width: 257px;
	height: 150px;
	object-fit: cover;
	border-radius: 3px;
}

.medianes-fiche__corps .wp-block-post-title {
	color: var(--wp--preset--color--bleu-08);
}

.medianes-fiche__corps .wp-block-post-title a {
	text-decoration: none;
	color: inherit;
}

.medianes-fiche__corps .wp-block-post-excerpt {
	color: var(--wp--preset--color--bleu-08);
}

.medianes-fiche__corps .wp-block-post-excerpt p {
	margin: 0;
}

/* Lien « Consulter cette fiche pratique → » (flèche lucide). */
.medianes-fiche__lien {
	display: inline-flex;
	align-items: center;
	gap: var(--wp--preset--spacing--petit);
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: 18px;
	text-decoration: underline;
	text-underline-position: from-font;
}

.medianes-fiche__lien::after {
	content: "";
	display: inline-block;
	width: 24px;
	height: 24px;
	background: url(assets/icon-arrow-right.svg) center / contain no-repeat;
}

@media (max-width: 781px) {

	.medianes-fiches-liste>.wp-block-post {
		flex-direction: column;
	}

	.medianes-fiches-liste .wp-block-post-featured-image {
		flex-basis: auto;
		width: 100%;
	}

	.medianes-fiches-liste .wp-block-post-featured-image img {
		width: 100%;
	}
}

/* Bandeau Auteur·rice (bloc medianes/auteur-tete, node 2636:14834) : bandeau
   pleine largeur bleu-00, contenu contraint, colonnes texte | portrait. */
.medianes-auteur-tete {
	background: var(--wp--preset--color--bleu-00);
	padding-block: var(--wp--preset--spacing--triple);
	padding-inline: clamp(24px, 6.667vw, 96px);
}

.medianes-auteur-tete__inner {
	display: flex;
	gap: var(--wp--preset--spacing--double);
	align-items: flex-start;
	max-width: 1248px;
	margin-inline: auto;
}

.medianes-auteur-tete__corps {
	flex: 1 1 auto;
	max-width: 800px;
}

.medianes-auteur-tete__corps>*+* {
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-auteur-tete__nom {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-display);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--h-1);
	line-height: 0.9;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-auteur-tete__bio {
	color: var(--wp--preset--color--bleu-08);
	line-height: 1.15;
}

.medianes-auteur-tete__cta {
	margin-top: var(--wp--preset--spacing--regulier);
}

/* Bouton « Recevoir une alerte » : icône enveloppe + libellé (maquette). */
.medianes-btn-avec-icone {
	display: inline-flex;
	align-items: center;
	gap: var(--wp--preset--spacing--petit);
}

.medianes-btn-avec-icone .medianes-btn-icone {
	flex: none;
}

.medianes-auteur-tete .medianes-visuel-placeholder {
	flex: 0 0 400px;
	margin-left: 0;
}

@media (max-width: 781px) {

	.medianes-auteur-tete__inner {
		flex-direction: column;
	}

	.medianes-auteur-tete .medianes-visuel-placeholder {
		flex-basis: auto;
		order: -1;
		max-width: 240px;
	}
}

/* Ouverture des pages d'expertise média (/media/expertises/<slug>/) : composant
   « Hero » (nodes 7830:27229, 2636:14834) — texte 800px | 48 | image 400×400.
   L'image est l'image mise en avant de la page : sans elle, le bloc ne rend rien
   et la colonne vide disparaît (pas d'écart fantôme en pile mobile). Structure
   posée par scripts/migration/expertises-media-hero-visuel.php. */
.medianes-hero-expertise__visuel:empty {
	display: none;
}

@media (max-width: 781px) {

	/* Même règle que le bandeau auteur·ice ci-dessus : l'image passe en tête,
	   plafonnée à 240px. */
	.medianes-hero-expertise__visuel {
		order: -1;
		max-width: 240px;
	}
}

/* Index des séries (/fiches-pratiques/) : cartes liées vers chaque page de série. */
.medianes-serie-carte {
	gap: var(--wp--preset--spacing--petit);
	background: var(--wp--preset--color--blanc);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--regulier);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	transition: box-shadow 0.15s ease;
}

.medianes-serie-carte:hover {
	box-shadow: 3px 3px 0 var(--wp--preset--color--bleu-08);
}

.medianes-serie-carte__titre {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-4);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-serie-carte__titre a {
	text-decoration: none;
	color: inherit;
}

.medianes-serie-carte__desc {
	margin: 0;
	color: var(--wp--preset--color--bleu-08);
	line-height: 1.3;
}

/* Carte statique (encarts du rail : Vidéo, Job board, Podcast) — même recette
   que les cartes article. */

/* Recette #57 (composant « Fiche pratique », vérifié au Dev Mode sur
   plusieurs écrans) : padding 24 (régulier), rythme interne 12. */
.medianes-carte-static {
	background: var(--wp--preset--color--blanc);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--regulier);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
}

/* Recette #96 : sur la page d'accueil uniquement, les 3 encadrés
   (Un média / studio / réseau) sont à hauteur égale et leurs boutons alignés
   en bas. Scopé à body.home pour ne pas affecter les cartes de rail ailleurs
   (recette #97 : le rail de /le-media/ réutilise la même classe). */
body.home .medianes-carte-static {
	display: flex;
	flex-direction: column;
	height: 100%;
	/* Hauteur mini pour laisser respirer entre le texte et « Découvrir »
	   (poussé en bas). Combinée à l'étirement des colonnes → 3 cartes égales. */
	min-height: 12rem;
}

body.home .medianes-carte-static .medianes-lien-fleche {
	/* Poussé en bas de la carte → espace entre le texte et le bouton. */
	margin-top: auto;
	padding-top: var(--wp--preset--spacing--regulier);
}

.medianes-carte-static>*+* {
	margin-top: var(--wp--preset--spacing--petit);
}

.medianes-carte-static .wp-block-image {
	margin: 0;
}

.medianes-carte-static img {
	display: block;
	width: 100%;
	border-radius: 3px;
}

/* Recette #97 : carte « Vidéo » du rail /le-media/ = Reel Instagram (embed public,
   format portrait, coins 6px comme le composant Figma 197:23101). Hauteur fixe :
   l'embed IG inclut son propre bandeau + actions, non purement 9:16. */
.medianes-rail-video {
	border-radius: 6px;
	overflow: hidden;
	background: var(--wp--preset--color--bleu-01);
	line-height: 0;
}

.medianes-rail-video__frame {
	display: block;
	width: 100%;
	height: 500px;
	border: 0;
}

/* Hero de la racine (node 1:1142) — lettrage exporté de Figma (PNG/WebP) car
   le SVG natif pèse ~2,3 Mo (grain vectorisé). Le titre réel reste dans un h1
   visually-hidden (SEO, accessibilité, i18n) ; l'image est décorative (alt=""). */

/* Fond de page par univers (vérifié sur maquettes) : racine = beige
   « papier » ; média + studio = blanc (défaut theme.json). */
body.univers-racine {
	background-color: var(--wp--preset--color--beige-01);
}

/* ACCUEIL : dégradé Bleu/100 → Beige/100 en haut de page (maquette mise à jour
   par Baptiste le 2026-09-11, node `429:16977` desktop / `2694:15123` mobile —
   « pour différencier la page d'accueil »).

   Valeurs DONNÉES PAR FIGMA, transmises par Baptiste :

     linear-gradient(180deg, var(--Bleu-100, #E4EEFF) 0%, var(--Beige-100, #FAF8F2) 21.09%)

   Les deux couleurs existent en presets du thème (`bleu-01`, `beige-01`) : on
   les passe par leurs variables plutôt qu'en dur, l'hexadécimal ne vaut ici que
   de repli dans l'export Figma. L'arrêt, lui, est repris tel quel — un
   pourcentage de la hauteur de la boîte, même sémantique qu'en CSS.

   Porté par `main` et non par `body` : dans la maquette, le dégradé commence au
   sommet du cadre de contenu, SOUS le header — qui est blanc et opaque. Sur
   `body`, ses 73 premiers pixels passeraient derrière le header et la page
   démarrerait à une teinte déjà entamée. `main` est aussi ce qui donne son sens
   au pourcentage : sa hauteur est celle du cadre Figma.

   ⚠️ ÉCART MESURÉ SUR LE NODE MOBILE, SIGNALÉ, NON TRANCHÉ : `2694:31926` fait
   fondre son dégradé sur ~1096px, soit **10 %** d'un cadre de 10 956 de haut, et
   non 21 %. Les deux cadres ne portent donc pas le même réglage. Cette règle-ci
   applique 21,09 % partout : en mobile, le dégradé s'étire donc sur environ deux
   fois la longueur dessinée. Une media query le corrigerait en une ligne, le
   jour où Baptiste tranche.

   Sous le dernier arrêt, `linear-gradient` prolonge sa couleur finale : le reste
   de la page reste donc en beige, comme `body.univers-racine` le pose déjà. */
body.home main {
	background-image: linear-gradient(180deg, var(--wp--preset--color--bleu-01) 0%, var(--wp--preset--color--beige-01) 21.09%);
}

/* RÉSEAU passe du beige au bleu-00 le 2026-09-10. Le beige lui avait été donné
   par analogie avec la racine, faute de maquette — l'univers n'était dessiné
   nulle part. Le premier écran Réseau existe désormais (« Le club »,
   `7836:28388`) et son cadre de page porte un fond `#f5f9ff` = bleu-00 : c'est
   Figma qui tranche. La règle ne touche qu'une seule page — /club/ est le seul
   contenu de l'univers (vérifié en base le 2026-09-10). */
body.univers-reseau {
	background-color: var(--wp--preset--color--bleu-00);
}

.medianes-hero-racine {
	position: relative;
}

/* Recette #96 : encadré « première visite » en haut à droite du hero
   (maquette 429:16978). Repasse en flux normal sur mobile.
   Le hero est pleine largeur : on aligne le bord droit de l'encadré sur le bord
   droit du CONTENU (largeur wide, root-padding-aware) pour qu'il ne dérive pas
   vers le bord de l'écran sur grand écran. */
.medianes-premiere-visite {
	position: absolute;
	top: var(--wp--preset--spacing--regulier);
	right: max(var(--wp--style--root--padding-right, var(--wp--preset--spacing--regulier)),
			calc((100% - var(--wp--style--global--wide-size, 1248px)) / 2));
	display: inline-flex;
	flex-direction: column;
	align-items: flex-end;
	gap: var(--wp--preset--spacing--micro);
	padding: var(--wp--preset--spacing--micro) var(--wp--preset--spacing--petit);
	border: 0.5px solid var(--wp--preset--color--bleu-08);
	border-radius: 6px;
	text-align: right;
}

.medianes-premiere-visite__q {
	margin: 0;
	line-height: 1.3;
}

.medianes-premiere-visite .medianes-lien-fleche {
	margin: 0;
}

/* Lien souligné + flèche dans l'encadré (spec 429:16978). */
.medianes-premiere-visite .medianes-lien-fleche a {
	text-decoration: underline;
	text-underline-position: from-font;
}

@media (max-width: 781px) {

	.medianes-premiere-visite {
		position: static;
		width: 100%;
		align-items: center;
		margin-bottom: var(--wp--preset--spacing--regulier);
		text-align: center;
	}
}

.medianes-hero-racine__img {
	margin: 0 auto;
}

/* Recette mobile 2026-07-29 : le hero racine gardait « double » (48px), encore trop
   généreux comparé à la maquette mobile (captures Baptiste) — ramené à « regulier ». */
@media (max-width: 781px) {

	.medianes-hero-racine {
		padding-top: var(--wp--preset--spacing--regulier) !important;
		padding-bottom: var(--wp--preset--spacing--regulier) !important;
	}
}

/* Recette mobile 2026-07-29 — FAMILLE des bandes encadrées (fond + rayon 6px) :
   « Qui sommes-nous ? », « Vous avez un projet de média ? », recirculation
   newsletters, « Médianes ? », « Une autre question ? »… Cinq classes distinctes
   coexistent (héritage : certaines sont figées en base, sans CSS de thème), avec
   des paddings hétérogènes de 40 à 96px et des gouttières internes de 48 à 72px.
   Sur mobile la maquette les traite toutes pareil : padding 24px sur les quatre
   côtés, gouttière interne 24px. Le desktop garde ses valeurs d'origine.
   `!important` : ces paddings sont posés en style INLINE par les blocs, et la
   gouttière vient d'une règle `.wp-container-…` injectée après cette feuille. */
@media (max-width: 781px) {

	/* `medianes-temoignage` rejoint la famille le 2026-08-03 : c'est une bande
	   encadrée de plus (fond bleu-01, rayon 6px). Mesuré avant rattachement : ses
	   48px de padding ne laissaient que 249px de texte utile sur une carte de
	   345px — la citation, en 22px, y était à l'étroit.

	   `medianes-club-appel` la rejoint le 2026-09-10 pour la même raison :
	   l'appel intercalé de /club/ (node 7836:28715) est encore la même bande
	   encadrée beige, avec 60px de padding latéral. */
	.medianes-recirculation,
	.medianes-recirc-cote,
	.medianes-qsn,
	.medianes-cta-accomp,
	.medianes-cta-bande,
	.medianes-cta-finale,
	.medianes-club-appel,
	.medianes-temoignage {
		padding: var(--wp--preset--spacing--regulier) !important;
	}

	.medianes-recirculation>*+*,
	.medianes-recirc-cote>*+*,
	.medianes-qsn>*+*,
	.medianes-cta-accomp>*+*,
	.medianes-cta-bande>*+*,
	.medianes-cta-finale>*+* {
		margin-top: var(--wp--preset--spacing--regulier) !important;
	}

	/* La rangée d'étiquettes est masquée (voir plus bas) mais reste un enfant du
	   groupe : sans ceci le titre cumulait la gouttière et le padding (72px). */
	.medianes-cta-accomp__tags+* {
		margin-top: 0 !important;
	}


	/* Bouton pleine largeur, lien centré en dessous (la maquette les empile ; le
	   site les posait côte à côte, le lien ne passant à la ligne que par
	   débordement — d'où un bouton en largeur « hug »). La largeur et la
	   typographie du bouton lui-même sont traitées plus bas, pour TOUS les
	   boutons du site (règle « tous les boutons », 2026-07-29). */
	.medianes-cta-accomp__actions {
		flex-direction: column;
		align-items: stretch;
	}

	.medianes-cta-accomp__actions .medianes-lien-fleche,
	.medianes-cta-accomp__actions .medianes-hyperlien {
		text-align: center;
	}

	/* Valeurs relevées sur le node mobile `5097:19229` (« recirculation centrée »,
	   lu via le pont Dev Mode le 2026-07-29) — elles ne concernent que cette
	   famille de bande centrée, seule dont on ait la référence :
	   · titre → chapô : 12px (« petit »), et non la gouttière de 24px ;
	   · chapô : préset « chapô » (20px en mobile, 22px en desktop, lh 1,15),
	     là où le bloc utilisait « corps » (18px) ;
	   · bouton → lien : 6px (« micro »), et non 24px ;
	   · libellé de bouton : 22px lh 1. WordPress applique une typographie fluide
	     au `fontSize` du bouton déclaré dans theme.json et le rabat à 14,6px en
	     mobile, alors que la maquette le garde à 22px aux deux tailles. */
	.medianes-cta-accomp>h2+p,
	.medianes-cta-bande>h2+p,
	.medianes-cta-finale>h2+p {
		margin-top: var(--wp--preset--spacing--petit) !important;
	}

	/* Enfants DIRECTS seulement : sans le `>`, le sélecteur attrapait aussi les
	   paragraphes de la rangée d'étiquettes. */
	.medianes-cta-accomp>p:not(.medianes-lien-fleche):not(.medianes-hyperlien),
	.medianes-cta-bande>p:not(.medianes-lien-fleche):not(.medianes-hyperlien),
	.medianes-cta-finale>p:not(.medianes-lien-fleche):not(.medianes-hyperlien) {
		font-size: var(--wp--preset--font-size--chapo) !important;
		line-height: 1.15;
	}

	/* `!important` : le blockGap du groupe est posé par une règle
	   `.wp-container-…` de même spécificité, injectée après cette feuille. */
	.medianes-cta-accomp__actions {
		gap: var(--wp--preset--spacing--micro) !important;
	}
}

/* Recette mobile 2026-07-29 — TOUS les boutons du site (consigne Baptiste) :
   pleine largeur, libellé à 21px (22px et 24px d'abord essayés). `!important`
   sur le font-size : WordPress applique une typographie fluide au bouton qui
   le rabat à 14,6px en mobile (constaté sur plusieurs pages le 2026-07-29) —
   la maquette, elle, garde une taille fixe à toutes les largeurs. Desktop non
   concerné : le préset garde 22px. */
@media (max-width: 781px) {

	.wp-block-buttons {
		width: 100%;
		flex-direction: column;
	}

	.wp-block-button {
		width: 100%;
	}

	.wp-block-button__link,
	.wp-element-button {
		display: block;
		width: 100%;
		text-align: center;
		font-size: 21px !important;
	}
}

/* Recette mobile 2026-07-29 — TOUS les H1 (consigne Baptiste) : taille fixe à
   46px sur mobile, au lieu du plancher fluide de 40px du préset "h1"
   (clamp 40→60px, theme.json). Desktop non concerné : le préset garde son
   comportement fluide normal jusqu'à 60px. */
@media (max-width: 781px) {

	h1,
	.has-h-1-font-size {
		font-size: 46px !important;
	}
}

/* Recette mobile 2026-07-31 — TOUTES les grilles de cartes (consigne Noé) :
   24px entre les cartes d'articles sur tout le site, quel que soit le blockGap
   saisi dans l'éditeur (souvent `double` = 48px, une gouttière desktop).
   Remplace aussi l'exception à 12px posée la veille sur /le-media/.
   !important : le gap vient des feuilles wp-container-* imprimées après
   celle-ci. Desktop non concerné (les gouttières 48px y sont la maquette). */
@media (max-width: 781px) {

	.wp-block-post-template {
		gap: var(--wp--preset--spacing--regulier) !important;
	}
}

/* En-tête de section « titre + Voir tout » : le lien est ferré EN BAS du titre.
   ─────────────────────────────────────────────────────────────────────────────
   Il était centré verticalement, donc suspendu **58px au-dessus** du bas du titre
   (mesuré sur /le-media/), ce qui le détachait de la ligne de titre au lieu de
   l'y poser (consigne Noé 2026-08-04).

   `flex-end` plutôt que `baseline` : dès que le titre passe sur deux lignes — ce
   qui arrive sur les colonnes étroites — `baseline` accroche le lien à la
   PREMIÈRE ligne et le laisse flotter au milieu du titre, alors que `flex-end` le
   garde en bas dans tous les cas. Les deux donnent le même résultat sur un titre
   d'une ligne (8 contre 9px d'écart entre les bas de texte, l'écart venant des
   jambages de Loretta qui débordent d'une interligne à 1).

   Le sélecteur exige un titre ET un lien enfants directs : les autres groupes
   flex du site (actions de CTA, rangées d'étiquettes) ne sont pas concernés.
   Sous 781px la règle ne s'applique pas — l'en-tête y passe en `display: contents`
   et le lien est renvoyé après la grille, cf. la règle ci-dessous.
--------------------------------------------------------------------------- */
.wp-block-group.is-layout-flex:has(> :is(h1, h2, h3)):has(> :is(.medianes-lien-fleche, .medianes-hyperlien)) {
	align-items: flex-end;
}

/* Recette mobile 2026-07-29 — lien « Voir tous les X » des sections à grille
   de cartes (Accueil, Le média) : la maquette mobile le place APRÈS la grille,
   le desktop le garde dans l'en-tête de section (titre à gauche, lien à
   droite, flex space-between). L'ordre stocké reste celui du desktop (le
   déplacement dans post_content du 2026-07-27 a été rétabli le 2026-07-29 :
   régression desktop constatée par Noé) ; en mobile, l'en-tête passe en
   display:contents et seul le lien est renvoyé en fin de section. */
@media (max-width: 781px) {

	.wp-block-group:has(> .wp-block-group > .medianes-lien-fleche):has(> .wp-block-query) {
		display: flex;
		flex-direction: column;
	}

	.wp-block-group:has(> .wp-block-query)>.wp-block-group:has(> .medianes-lien-fleche) {
		display: contents;
	}

	.wp-block-group:has(> .wp-block-query)>.wp-block-group>.medianes-lien-fleche {
		order: 1;
		margin-top: var(--wp--preset--spacing--regulier);
	}
}

/* Recette mobile 2026-07-29 — espacements de page (consigne Noé) : 24px
   partout autour des sections de contenu. (a) Côtés : le padding racine
   fluide (clamp 24→96px, soit ~26px à 393px) est figé à 24px — !important
   car les global styles du cœur (feuille inline) sont imprimés après
   celle-ci. (b) Haut/bas : les marges inline triple/grand des sections de
   gabarit et de contenu sont normalisées — hors alignfull (bandes pleine
   largeur collées au header : carte À propos, Mentions légales…) ; les
   règles par page plus spécifiques (À propos) restent prioritaires. */
@media (max-width: 781px) {

	body {
		--wp--style--root--padding-left: var(--wp--preset--spacing--regulier) !important;
		--wp--style--root--padding-right: var(--wp--preset--spacing--regulier) !important;
	}

	/* /le-media/ exclue (2026-07-30, entrelacement) : son seul wp:group enfant
	   direct de .wp-block-post-content est medianes-qsn — cette règle (3
	   classes) bat la marge dédiée que lui pose la recette /le-media/ plus bas
	   (2 classes + body), lui imposant 24px des deux côtés au lieu de 48/0. */
	/* `single-cas_client` exclue elle aussi (2026-08-03) : le corps des projets a
	   son propre rythme de 48px, porté par le `blockGap` du gabarit. Sans cette
	   exclusion, tout groupe du contenu — le témoignage, par exemple — retombait
	   à 24px là où ses voisins sont à 48 (mesuré). */
	body:not(:is(.medianes-page-le-media, .single-cas_client)) main>.wp-block-group:not(.alignfull),
	body:not(:is(.medianes-page-le-media, .single-cas_client)) .wp-block-post-content>.wp-block-group:not(.alignfull) {
		margin-top: 0 !important;
		margin-bottom: var(--wp--preset--spacing--regulier) !important;
	}
}

/* Rythme inter-sections de 48px sur mobile (demande Baptiste 2026-07-30 :
   « 48px partout entre les sections »). Complète — sans la remplacer — la règle
   de 24px ci-dessus, sur deux points :
   · elle vise TOUS les enfants directs, pas seulement `.wp-block-group` :
     plusieurs sections sont des `wp:columns` ou des titres et échappaient à la
     normalisation (relevé sur /le-media/ avant correction : 96/24/24/96px, les
     96px venant de `margin-top: grand` posés en style INLINE — d'où
     `!important`, seule façon de les atteindre) ;
   · elle EXCLUT les pages à carte unique (À propos, Mentions légales, Charte,
     Job board, Veille) : elles n'ont qu'une seule section de premier niveau,
     donc aucun écart inter-sections à régler, et la consigne « 48px » ne les
     concerne pas (précision Baptiste 2026-07-30, après un premier essai qui
     avait porté leur marge basse de 24 à 48px). Elles restent donc sur la règle
     de 24px ci-dessus, et leurs règles par page (marge haute à 0, carte collée
     au header) gardent la priorité qu'elles avaient.
   Haut ET bas à la même valeur : en flux les marges de deux sections adjacentes
   fusionnent, l'écart obtenu est donc 48px, pas 96px.

   La PREMIÈRE section est ramenée à 0 (2026-07-30) : la règle portait sur tous
   les enfants directs, y compris le premier, qui recevait donc 48px de marge
   haute — un vide visible entre le sous-header et le titre de page, alors que
   les 48px ne concernent que l'espace ENTRE deux sections. Le zéro est posé
   dans un sélecteur de même spécificité placé après, pour trancher par l'ordre
   source, et il doit aussi neutraliser les 24px de la règle précédente (qui
   visait, elle aussi, le premier enfant).

   /le-media/ EXCLUE à son tour (2026-07-30, entrelacement) : le commentaire
   ci-dessus notait déjà que cette règle avait été calibrée SUR /le-media/,
   sur l'hypothèse que ses marges collapsent en flux normal (« Haut ET bas à
   la même valeur… l'écart obtenu est 48px, pas 96 »). Cette hypothèse ne
   tient plus : le entrelacement mobile de /le-media/ passe `.wp-block-post-
   content` en `display:flex`, qui NE fusionne JAMAIS les marges de ses
   enfants directs (medianes-titre-lectures, medianes-veille, medianes-qsn en
   restent) — cette règle leur ajoutait alors 48px PAR-DESSUS le margin-top
   déjà posé par la recette dédiée plus bas (96px au lieu de 48/24). La page a
   désormais son propre système de rythme complet (recette /le-media/, plus
   bas) : cette règle générale ne lui apporte plus rien et ne peut plus que la
   perturber.

   Correctif 2026-07-31 (constat Noé : « l'espacement entre sections n'est
   parfois pas de 48px » sur l'accueil) — cause exacte : `:is(main,
   .wp-block-post-content)` prend, en spécificité, celle de son membre le PLUS
   spécifique pris ISOLÉMENT (`.wp-block-post-content`, une classe) et
   n'accumule PAS le `main` de l'autre branche. La règle des 24px ci-dessus,
   elle, écrit ses deux branches en toutes lettres (`main > .wp-block-group`,
   `.wp-block-post-content > .wp-block-group`), plus spécifiques — sur toute
   page utilisant des blocs Groupe (l'accueil, notamment), c'est donc ELLE qui
   gagnait : 24px au lieu de 48 sur 9 sections sur 11 (seule la 1ʳᵉ, un bloc
   Colonnes hors de portée de la règle des 24px, avait le bon écart). Les deux
   sélecteurs ci-dessous sont réécrits en toutes lettres (plus de `:is()`) et
   l'exclusion `.medianes-page-le-media` est dupliquée : à spécificité égale
   avec la règle des 24px sans cet ajout, la duplication fait STRICTEMENT
   gagner cette règle-ci, sans dépendre de l'ordre des règles dans le fichier
   (répéter un sélecteur simple est valide CSS et compte deux fois dans le
   calcul de spécificité). */

.no-underline {
	text-decoration: none !important;

	a {
		text-decoration: none !important;

	}
}

.blue-bg-on-hover {
	&:hover {
		background-color: #cadeff !important;
	}
}

@media (max-width: 781px) {



	.flex-col-mobile {
		display: flex;
		flex-direction: column;
	}

	.no-margin-right-mobile {
		padding-right: 0 !important;
	}

	.padding-mobile {
		padding-right: 22px !important;
		padding-left: 22px !important;
	}

	body:not(:is(.medianes-page-a-propos,
			.medianes-page-mentions-legales,
			.medianes-page-charte-editoriale-et-deontologique,
			.post-type-archive-mission,
			.post-type-archive-veille,
			.medianes-page-le-media,
			.single-cas_client)):not(.medianes-page-le-media):not(.medianes-page-le-media) main>*:not(.alignfull),
	body:not(:is(.medianes-page-a-propos,
			.medianes-page-mentions-legales,
			.medianes-page-charte-editoriale-et-deontologique,
			.post-type-archive-mission,
			.post-type-archive-veille,
			.medianes-page-le-media,
			.single-cas_client)):not(.medianes-page-le-media):not(.medianes-page-le-media) .wp-block-post-content>*:not(.alignfull) {
		margin-top: var(--wp--preset--spacing--double) !important;
		margin-bottom: var(--wp--preset--spacing--double) !important;
	}

	body:not(:is(.medianes-page-a-propos,
			.medianes-page-mentions-legales,
			.medianes-page-charte-editoriale-et-deontologique,
			.post-type-archive-mission,
			.post-type-archive-veille,
			.medianes-page-le-media,
			.single-cas_client)):not(.medianes-page-le-media):not(.medianes-page-le-media) main>*:first-child,
	body:not(:is(.medianes-page-a-propos,
			.medianes-page-mentions-legales,
			.medianes-page-charte-editoriale-et-deontologique,
			.post-type-archive-mission,
			.post-type-archive-veille,
			.medianes-page-le-media,
			.single-cas_client)):not(.medianes-page-le-media):not(.medianes-page-le-media) .wp-block-post-content>*:first-child {
		margin-top: 0 !important;
	}
}

/* Plafond de 24px sur les espacements DANS le contenu (demande Baptiste
   2026-07-30 : « supprime l'espacement et le margin supérieur à 24px »).
   Relevé sur /le-media/ avant correction : 16 éléments dépassaient, tous à
   cause des presets `triple` (72px) et `grand` (96px) posés en style INLINE par
   les blocs — un grand vide au-dessus du H1 (`padding-top: triple` sur la
   section) et avant la première carte (`margin-bottom: triple` sur
   `.medianes-ouverture`), puis tous les titres de section à `margin-top: triple`.

   Plutôt que de réécrire chaque sélecteur (impossible à faire proprement : CSS
   ne sait pas « plafonner », et remettre 24px partout écraserait aussi les
   valeurs déjà à 0 ou 12px), on redéfinit les DEUX PRESETS à la source, dans le
   périmètre du contenu. Tout ce qui demandait 72 ou 96px reçoit 24px ; tout ce
   qui demandait 0, 6, 12, 24 ou 48px est inchangé, et aucun `!important` n'est
   nécessaire — la substitution opère y compris dans les styles inline, qui
   résolvent la variable dans le contexte de l'élément.

   Portée limitée à `main` : le header, le footer et le menu mobile gardent
   leurs valeurs.

   `gouttiere` (40px) plafonné aussi : le balayage des 16 pages après le premier
   passage l'a fait ressortir comme seule valeur restante au-dessus de 24px
   (rangées de boutons, titres, blocs Query, barre newsletters — sur /le-studio/,
   /newsletters/, /nos-services/, /projets/, /faq/, /contact/, /job-board/,
   /veille/, /mentions-legales/).

   Révisé 2026-07-30 (2e passe) : la cible est 48px, pas 24px. Les deux consignes
   — « 48px entre les sections » puis « rien au-dessus de 24px » — se
   contredisaient sur les frontières IMBRIQUÉES : la règle inter-sections
   ci-dessus ne porte que sur les enfants directs, or la plupart des frontières
   que Baptiste lit comme des sections sont un niveau plus bas (intro → grille de
   cartes, grille → titre H2, titre → grille, tous dans la MÊME section de
   premier niveau). Relevé après le plafond à 24px : ces frontières tombaient à
   24px et seules 4 restaient à 48px. Baptiste ayant réaffirmé les 48px, les
   trois presets « séparateurs » sont ramenés à 48px et non à 24px : le rythme
   entre blocs devient uniforme, tandis que les espacements réellement internes
   (issus du blockGap racine, 24px) ne sont pas touchés puisqu'ils n'utilisent
   aucun de ces trois presets. `--double` reste la valeur cible, donc la règle
   inter-sections et l'écart pagination ↔ articles restent cohérents avec elle. */
@media (max-width: 781px) {

	main {
		--wp--preset--spacing--triple: var(--wp--preset--spacing--double);
		--wp--preset--spacing--grand: var(--wp--preset--spacing--double);
		--wp--preset--spacing--gouttiere: var(--wp--preset--spacing--double);
	}

	/* Exception : le haut de la première section reste resserré (24px), sans quoi
	   le plafond à 48px rouvrirait le vide entre le sous-header et le titre de
	   page que Baptiste a fait retirer juste avant.
	   `.wp-block-post-content` exclu (2026-07-31, consigne Noé) : sur les pages
	   dont le contenu commence par une bande pleine largeur (Ressources,
	   Nos services…), ce wrapper transparent recevait lui aussi les 24px — un
	   liseré blanc apparaissait entre le sous-header et la bande. La règle
	   s'applique alors à la première section RÉELLE, un cran plus bas. */
	:is(main, .wp-block-post-content)>*:first-child:not(.wp-block-post-content) {
		padding-top: var(--wp--preset--spacing--regulier) !important;
	}

	main>.wp-block-post-content:first-child {
		padding-top: 0 !important;
	}

	/* Côtés des bandes pleine largeur à 24px (consigne Noé 2026-07-31, relevé
	   sur le hero de /formations/) : les paddings latéraux inline en presets
	   larges (grand = 96px, plafonné à 48px par le remap ci-dessus) restent une
	   valeur desktop. Ciblé sur les bandes qui portent un padding latéral
	   INLINE ([style*=padding-left]) : les bandes sans padding propre laissent
	   leurs enfants « constrained » gérer les 24px du padding racine — leur
	   en ajouter doublerait le retrait. !important : style inline. */
	:is(main, .wp-block-post-content) .wp-block-group.alignfull[style*="padding-left"] {
		padding-left: var(--wp--preset--spacing--regulier) !important;
		padding-right: var(--wp--preset--spacing--regulier) !important;
	}
}

/* Recette mobile 2026-07-30 — /le-media/ conforme à sa maquette (295:7933),
   ENTRELACEMENT complet (option 2, décision Noé après comparaison Figma/live :
   « Ok tu peux faire l'option 2 »). La maquette mobile présente un flux
   linéaire unique, quand le live affichait jusqu'ici colonne principale puis
   rail, deux fois de suite (une par bloc wp:columns) — cf. figma-inventaire
   §6 pt 20. Les 5 rubriques et les 6 encarts de rail portent désormais des
   classes stables posées en base (medianes-rubrique--1..5, medianes-rail-
   encart--{nl,livre,10liens,video,job,podcast}, medianes-a-la-une, medianes-
   titre-lectures) : le CSS cible chaque bloc individuellement au lieu de
   dépendre de sa position DOM.

   Mécanisme : `display:contents` aplatit les DEUX niveaux de conteneurs
   (wp:columns puis wp:column) qui séparaient colonne principale et rail,
   ramenant tous les blocs cibles au rang d'enfants directs EN RENDU de
   `.wp-block-post-content` (passé en flex-column) — display:contents ne
   change pas le DOM (les combinators `>`/`+` d'autres règles restent
   fiables), mais un élément en display:contents perd sa propre boîte
   (padding/margin/border sans effet), d'où les neutralisations plus bas.
   Seuls les DEUX wp:columns racine contenant un rail sont concernés
   (`:has(> .medianes-rail)` exclut medianes-veille, le 3e wp:columns racine,
   qui doit rester tel quel).

   Bornées à max-width:781px : le DOM desktop garde sa structure normale
   (display:contents inactif), donc le rendu 2 colonnes (924px + rail 300px)
   n'est pas concerné et ne nécessite aucun rebuild. */
@media (max-width: 781px) {

	body.medianes-page-le-media .wp-block-post-content>.wp-block-columns:has(> .medianes-rail),
	body.medianes-page-le-media .wp-block-post-content>.wp-block-columns:has(> .medianes-rail)>.wp-block-column {
		display: contents;
	}

	body.medianes-page-le-media .wp-block-post-content {
		display: flex;
		flex-direction: column;
	}

	/* Séquence Figma (295:7933) : intro → à la une → rubrique 1 (« Articles »)
	   → 10 liens → « Nos lectures » → veille → QSN → livre → rubrique 2
	   (« Notre sélection ») → vidéo → rubrique 3 (« Tribunes ») → job board →
	   rubrique 4 (« Interviews ») → podcast → rubrique 5 (« Chroniques », en
	   trop par rapport à la maquette — cf. figma-inventaire §6 pt 20,
	   divergence d — placée en fin de flux plutôt que supprimée, aucun
	   arbitrage éditorial ne m'appartenant). */
	body.medianes-page-le-media .medianes-ouverture {
		order: 10;
	}

	body.medianes-page-le-media .medianes-a-la-une {
		order: 20;
	}

	body.medianes-page-le-media .medianes-rubrique--1 {
		order: 30;
	}

	body.medianes-page-le-media .medianes-rail-encart--10liens {
		order: 40;
	}

	body.medianes-page-le-media .medianes-titre-lectures {
		order: 50;
	}

	body.medianes-page-le-media .medianes-veille {
		order: 60;
	}

	body.medianes-page-le-media .medianes-qsn {
		order: 70;
	}

	body.medianes-page-le-media .medianes-rail-encart--livre {
		order: 80;
	}

	body.medianes-page-le-media .medianes-rubrique--2 {
		order: 90;
	}

	body.medianes-page-le-media .medianes-rail-encart--video {
		order: 100;
	}

	body.medianes-page-le-media .medianes-rubrique--3 {
		order: 110;
	}

	body.medianes-page-le-media .medianes-rail-encart--job {
		order: 120;
	}

	body.medianes-page-le-media .medianes-rubrique--4 {
		order: 130;
	}

	body.medianes-page-le-media .medianes-rail-encart--podcast {
		order: 140;
	}

	body.medianes-page-le-media .medianes-rubrique--5 {
		order: 150;
	}

	/* Absent du flux mobile de la maquette, cf. figma-inventaire §6 pt 20,
	   divergence b (Newsletter n'apparaît que sur la maquette desktop). */
	body.medianes-page-le-media .medianes-rail-encart--nl {
		display: none;
	}

	/* La maquette mobile ne montre que 4 rubriques contre 5 en ligne — oubli
	   confirmé par Noé (2026-07-30), pas un choix éditorial : cf. figma-
	   inventaire §6 pt 20/22. Masquée en mobile seulement (desktop montre
	   toujours les 5, aucune maquette desktop n'indiquant qu'il faille en
	   retirer une) ; dernière de la séquence, sans position Figma définie. */
	body.medianes-page-le-media .medianes-rubrique--5 {
		display: none !important;
	}

	/* Rythme uniforme 48px entre blocs consécutifs de la séquence, posé sur
	   CHAQUE bloc individuellement (jamais en margin-bottom) : un conteneur
	   flex ne fusionne pas les marges verticales de ses items — 48 + 48
	   s'additionneraient sans jamais fusionner à 48, contrairement au flux
	   normal. Exceptions ci-dessous : premier bloc de la page (ouverture) et
	   duo « Nos lectures »/veille (24px, une seule section). */
	body.medianes-page-le-media .medianes-a-la-une,
	body.medianes-page-le-media .medianes-rubrique,
	body.medianes-page-le-media .medianes-rail-encart:not(.medianes-rail-encart--nl),
	body.medianes-page-le-media .medianes-titre-lectures,
	body.medianes-page-le-media .medianes-qsn {
		margin-top: var(--wp--preset--spacing--double) !important;
	}

	body.medianes-page-le-media .medianes-veille {
		margin-top: var(--wp--preset--spacing--regulier) !important;
	}

	/* Chaque écart n'est porté QUE par le margin-top du bloc SUIVANT (ci-
	   dessus) : tout margin-bottom résiduel sur le bloc lui-même s'additionne
	   au lieu de fusionner (rappel ci-dessus) et double l'écart réel. Deux
	   sources vues à la mesure : le style inline de l'intro (margin-bottom:
	   triple) et une marge de bas par défaut posée par le cœur sur heading/
	   columns/group de premier niveau — neutralisées ici plutôt qu'au cas par
	   cas, sur l'ensemble de la séquence (y compris rubrique--1, régie par la
	   règle margin-top ci-dessus mais qui n'a pas de margin-bottom propre —
	   aucun risque à l'inclure aussi, par cohérence et prévention). */
	body.medianes-page-le-media .medianes-ouverture,
	body.medianes-page-le-media .medianes-a-la-une,
	body.medianes-page-le-media .medianes-rubrique,
	body.medianes-page-le-media .medianes-rail-encart,
	body.medianes-page-le-media .medianes-titre-lectures,
	body.medianes-page-le-media .medianes-veille,
	body.medianes-page-le-media .medianes-qsn {
		margin-bottom: 0 !important;
	}

	/* Le premier bloc n'a plus de wrapper affiché (columns#1 est en
	   display:contents) pour porter le reset du haut de page posé plus haut
	   (`:first-child { padding-top: regulier }`, sans effet une fois
	   l'élément en display:contents) : reporté directement sur l'intro. */
	body.medianes-page-le-media .medianes-ouverture {
		margin-top: 0 !important;
		padding-top: var(--wp--preset--spacing--regulier) !important;
	}

	/* Neutralise les marges internes désormais en double-comptage avec la
	   marge de section posée ci-dessus sur le conteneur : le titre de
	   rubrique 1 (heading nu, seule rubrique sans sous-groupe « titre + voir
	   tout ») et les titres H3 de chaque encart de rail portaient déjà 48px
	   (`triple`, plafonné à `double` par la règle de cap plus haut) en style
	   inline — sans ceci, chaque section afficherait 96px avant son titre. */
	body.medianes-page-le-media .medianes-rubrique--1>h2,
	body.medianes-page-le-media .medianes-rail-encart h3 {
		margin-top: 0 !important;
	}

	/* Idem pour les rubriques 2 à 5 : le sous-groupe interne (titre + « voir
	   tout ») porte le même margin-top:triple en style inline. */
	body.medianes-page-le-media .medianes-rubrique>.wp-block-group:first-child {
		margin-top: 0 !important;
	}

	/* Titre de rubrique 1 (heading nu, sans sous-groupe) → sa grille : 12px. */
	body.medianes-page-le-media .medianes-rubrique--1>h2+.wp-block-query {
		margin-top: var(--wp--preset--spacing--petit) !important;
	}

	/* Rubriques 2 à 5 : 12px entre le sous-groupe « titre + voir tout » et la
	   grille qui suit (la maquette resserre à `petit`, le blockGap racine
	   donnait 24px). */
	body.medianes-page-le-media .medianes-rubrique>.wp-block-group+.wp-block-query {
		margin-top: var(--wp--preset--spacing--petit) !important;
	}

	/* (Règle « 12px entre cartes » retirée le 2026-07-31 : consigne Noé, 24px
	   entre TOUTES les cartes d'articles sur tout le site — la règle globale
	   plus haut fait foi, y compris ici.) */

	/* Intro (medianes-ouverture) : titre / texte / « En savoir plus » espacés
	   de 12px, lien en 18px (valeurs du node 295:7935). */
	body.medianes-page-le-media .medianes-ouverture>*+* {
		margin-top: var(--wp--preset--spacing--petit) !important;
	}

	/* !important : le lien porte la classe de preset has-corps-font-size, que le
	   cœur émet elle-même avec !important. */
	body.medianes-page-le-media .medianes-ouverture>p:last-child {
		font-size: 18px !important;
	}

	/* Rubrique « Articles » (medianes-rubrique--1) : la maquette mobile montre
	   3 cartes, la requête en sert 6 (valeur desktop) — les suivantes sont
	   masquées sous 781px. */
	body.medianes-page-le-media .medianes-rubrique--1 .wp-block-query li:nth-child(n + 4) {
		display: none;
	}
}

/* Recette mobile 2026-07-30 — /le-studio/ conforme à sa maquette (211:10710),
   passe section par section demandée par Noé (le volet contenu — liens
   manquants, visuels des cartes — est réglé dans le post_content, cf.
   figma-inventaire §6). */
@media (max-width: 781px) {

	/* « Les projets réalisés » : la maquette mobile montre 5 cartes, la requête
	   en sert 8 (valeur desktop) — les suivantes sont masquées sous 781px. */
	body.medianes-page-le-studio .wp-block-query li.cas_client:nth-child(n + 6) {
		display: none;
	}

	/* « Avis de nos clients » : filet fin entre deux avis empilés, à 24px de
	   part et d'autre (lignes 44-46 de la maquette). !important sur la marge :
	   blockGap posé par une feuille wp-container-* imprimée après celle-ci.
	   Desktop non concerné (avis côte à côte). */
	body.medianes-page-le-studio .medianes-avis>.wp-block-column+.wp-block-column {
		border-top: 1px solid var(--wp--preset--color--bleu-02);
		padding-top: var(--wp--preset--spacing--regulier);
		margin-top: var(--wp--preset--spacing--regulier) !important;
	}

	/* La bande CTA finale appartient visuellement à la section avis : 24px
	   entre les deux (le rythme global les écarte de 48px) — les deux côtés de
	   la frontière sont abaissés, sinon la fusion des marges garde 48px. */
	body.medianes-page-le-studio .entry-content>*:has(+ .medianes-cta-accomp) {
		margin-bottom: var(--wp--preset--spacing--regulier) !important;
	}

	body.medianes-page-le-studio .entry-content>*+.medianes-cta-accomp {
		margin-top: var(--wp--preset--spacing--regulier) !important;
	}
}

/* Recette 2026-08-03 — /le-studio/, deux écarts signalés par Noé. Relevé dans
   les maquettes desktop (`176:6236`) et mobile (`211:10710`) : les deux écarts
   qu'il faut ouvrir sont DESKTOP UNIQUEMENT, le mobile est déjà conforme à ses
   24px — d'où les `min-width: 782px` (le mobile n'est pas touché).

     écart                  desktop   mobile   live avant
     H1 → bouton              48        24        24 / 24
     titre → intro            12        12        24 / 24
     intro → grille projets   48        24        24 / 24

   Le composant Figma « Titre intro » (`197:23815`) groupe le H2 (Loretta Light
   54/1) et l'intro (Degular Text 22/1.15) avec un `gap: petit` — 12px, aux deux
   breakpoints : c'est ce resserrement qui fait lire titre+intro comme UN bloc,
   nettement séparé de la grille. Le blockGap racine leur donnait 24px partout,
   d'où l'impression d'écart insuffisant signalée.

   Pas de `!important` : la règle du cœur qui pose ces 24px
   (`:root :where(.is-layout-flow) > *`) neutralise sa propre spécificité avec
   `:where()`, ces sélecteurs la battent donc largement.

   PORTÉE ÉLARGIE le 2026-08-03 sur consigne de Noé : « les mêmes [écarts]
   partout où il y a des titres similaires sur le site et des cards similaires
   en dessous », « En ce moment » nommément incluse, les autres sections de la
   page explicitement exclues. **Écart assumé avec la maquette** : celle-ci
   donne 24px après le « Titre intro » de « En ce moment » (`197:23868` à y=165
   pour un titre haut de 141) comme des sections services — c'est donc un
   arbitrage de Noé qui prime sur la maquette, pas un relevé.

   Motif retenu, structurel et non lié à une page : une section (`wp-block-group`)
   dont un ENFANT DIRECT est un bloc Query contenant une grille de cards
   (`.medianes-cartes`), et dont le titre est suivi d'un paragraphe de
   description. Balayage des 15 pages principales avant de généraliser : ce
   motif ne se rencontre QUE sur /le-studio/, sur les deux sections visées —
   « Les projets réalisés » et « En ce moment ». Les autres sections à cards du
   site (Articles, Ressources, Podcast des pages Expertises, rubriques de
   /le-media/) n'ont pas de paragraphe de description et ne sont donc pas
   touchées ; les sections sans cards de /le-studio/ (services en accordéons,
   mur de logos, avis clients) non plus, comme demandé.

   Non aligné, à confirmer : le hub /podcasts/ présente le même motif à l'œil
   (titre de saison + intro + grille d'épisodes) mais une structure différente
   (`section.medianes-saison`, grille hors bloc Query) — et ses 24/24 ont été
   validés contre sa propre maquette (point 25). Il reste donc à 24px. */
.wp-block-group:has(> .wp-block-query .medianes-cartes)>h2+p {
	margin-top: var(--wp--preset--spacing--petit);
}

@media (min-width: 782px) {

	body.medianes-page-le-studio .medianes-ouverture>h1+.wp-block-buttons {
		margin-top: var(--wp--preset--spacing--double);
	}

	.wp-block-group:has(> .wp-block-query .medianes-cartes)>h2+p+.wp-block-query {
		margin-top: var(--wp--preset--spacing--double);
	}
}

/* Recette mobile 2026-07-30 — hub Podcast /podcasts/ conforme à sa maquette
   (2346:36426), demande Noé. La maquette mobile recompose la carte épisode en
   carte horizontale compacte (vignette 66×66 à gauche, titre H3 puis pastille
   à droite, ni byline ni grande pochette) et resserre les textes du bandeau à
   12px. Desktop (node 486:40839) inchangé. Écart assumé : padding haut du
   bandeau 24px et non 48px (maquette) — plafond global « rien au-dessus de
   24px en haut de page » demandé par Baptiste le 2026-07-30, toutes pages.
   Écart contenu connu (hors CSS) : 2 épisodes par saison en base, la maquette
   en montre 6 — en attente des contenus réels. */
@media (max-width: 781px) {

	/* Bandeau : titre / intro / plateformes espacés de 12px (le blockGap de la
	   colonne donnait 24px). La pochette, seule dans sa colonne, garde ses 24px
	   d'écart avec le texte (frontière entre colonnes empilées — conforme). */
	.medianes-podcast-tete .wp-block-column>*+* {
		margin-top: var(--wp--preset--spacing--petit);
	}

	/* Pochette pleine largeur (345×345 dans la maquette, carrée) : la règle
	   générale mobile plafonne les visuels placeholder à 220px centrés, mais la
	   maquette Podcast dessine la sienne pleine largeur. Spécificité (0,2,0)
	   pour battre le plafond (0,1,0) sans dépendre de l'ordre source. */
	.medianes-podcast-tete .medianes-podcast-tete__visuel {
		max-width: none;
	}

	/* Grille d'épisodes : 24px entre cartes (48px = gouttière desktop). */
	.medianes-saison__grille {
		gap: var(--wp--preset--spacing--regulier);
	}

	/* Carte épisode « mobile/Petit article chemins » (2498:34812) : grille
	   2 colonnes — vignette 66×66 rayon 2px en haut à gauche, titre à droite,
	   pastille sous le titre. L'ordre stocké (tag avant titre) est inversé par
	   le placement grid, pas dans le contenu. La byline n'existe pas dans la
	   maquette mobile. Fond blanc / rayon 6 / ombre / padding 12 : déjà portés
	   par la carte générique (.medianes-cartes), identiques dans la maquette.
	   display et gaps l'emportent sur le flex 12px générique (même spécificité,
	   source postérieure). */
	.medianes-saison__grille>.wp-block-post {
		display: grid;
		grid-template-columns: 66px 1fr;
		column-gap: var(--wp--preset--spacing--regulier);
		row-gap: var(--wp--preset--spacing--petit);
		align-items: start;
	}

	.medianes-saison__grille .wp-block-post-featured-image {
		grid-row: 1 / 3;
		grid-column: 1;
		width: 66px;
	}

	.medianes-saison__grille .wp-block-post-featured-image img {
		border-radius: 2px;
	}

	/* !important : le titre porte la classe de preset has-h-4-font-size, que le
	   cœur émet elle-même avec !important — la maquette mobile est en H3 (28px
	   à 393px via le preset fluide). */
	.medianes-saison__grille .wp-block-post-title {
		grid-row: 1;
		grid-column: 2;
		font-size: var(--wp--preset--font-size--h-3) !important;
	}

	.medianes-saison__grille .medianes-tag {
		grid-row: 2;
		grid-column: 2;
	}

	.medianes-saison__grille .medianes-byline {
		display: none;
	}

	/* Recirculation : 48px avant (maquette), au lieu de 24. Sur ce template
	   d'archive la recirculation est un wp-block-group enfant DIRECT de main :
	   la règle générale « 24px sur les groupes de premier niveau » (plus haut,
	   (0,3,2) + !important) écrase son margin-top inline (var(--grand),
	   substitué à 48px) et toute règle simple. Même spécificité + !important +
	   ordre source postérieur pour la battre ; sa marge fusionne ensuite avec
	   les 24px de marge basse du groupe des saisons (max = 48, flux normal). */
	body.post-type-archive-podcast main>.wp-block-group.medianes-recirculation {
		margin-top: var(--wp--preset--spacing--double) !important;
	}
}

/* Recette mobile 2026-07-31 — /notre-livre/ conforme à sa maquette
   (2435:16467), demande Noé. Le contenu stocké ne bouge pas (ordre = desktop,
   node 2435:16195 validé) : l'inversion galerie/texte du mobile est faite en
   CSS. Deux blocs de la maquette mobile n'existent NI en desktop NI en ligne
   (bandeau H1+intro+couverture en tête, toaster « Commander le livre ») :
   signalés à arbitrer, pas ajoutés — cf. figma-inventaire §6. Les valeurs des
   miniatures sont mises à l'échelle dans la maquette (gaps ~14px, hors
   échelle de tokens) : lues comme `petit` (12px), l'équivalent desktop étant
   `regulier` (24px). */
@media (max-width: 781px) {

	/* La maquette mobile place la galerie AVANT le bloc titre/prix/description
	   (l'ordre stocké — texte puis galerie — est celui du desktop, où ils sont
	   côte à côte). Le conteneur columns est déjà flex : `order` suffit. */
	body.medianes-page-livre .wp-block-columns:has(> .wp-block-column > .medianes-livre-visuel)>.wp-block-column:has(> .medianes-livre-visuel) {
		order: -1;
	}

	/* Titre → prix : 12px (blockGap de la colonne = 24). `:is(h1, h2)` : le
	   titre produit « Créer un média » était un h1, rétrogradé en h2 le
	   2026-08-03 lors de l'ajout du bandeau d'ouverture (qui porte désormais
	   le seul h1 de la page) — les deux formes sont acceptées pour que la
	   règle survive à ce genre de bascule. */
	body.medianes-page-livre :is(h1, h2)+.medianes-livre__prix {
		margin-top: var(--wp--preset--spacing--petit);
	}

	/* Prix « 14 € » : H3 mobile (28px à 393), interligne 1 — la règle de base
	   le pose en h4 (22px à 393) avec l'interligne hérité (1.5). */
	body.medianes-page-livre .medianes-livre__prix {
		font-size: var(--wp--preset--font-size--h-3);
		line-height: 1;
	}

	/* Grande photo → miniatures : 12px. !important : le bloc porte
	   margin-top:regulier en style INLINE. */
	body.medianes-page-livre .medianes-livre-visuel+.medianes-livre__miniatures {
		margin-top: var(--wp--preset--spacing--petit) !important;
	}

	/* Miniatures : les 3 restent CÔTE À CÔTE (le cœur empile toute colonne
	   sous 782px via flex-basis:100% !important — contré à l'identique) ;
	   gouttière 12px, !important : le blockGap vient d'une feuille
	   wp-container-* imprimée après celle-ci. */
	body.medianes-page-livre .medianes-livre__miniatures {
		flex-wrap: nowrap;
		gap: var(--wp--preset--spacing--petit) !important;
	}

	body.medianes-page-livre .medianes-livre__miniatures>.wp-block-column {
		flex-basis: 0 !important;
		flex-grow: 1;
	}

	/* Titres de section « Description » / « Informations complémentaires » :
	   24px avant (margin-top:grand posé en style INLINE, substitué à 48 par le
	   plafond global — la maquette resserre à 24), 12px avant leur texte. */
	body.medianes-page-livre .wp-block-post-content h2.has-h-3-font-size {
		margin-top: var(--wp--preset--spacing--regulier) !important;
	}

	body.medianes-page-livre .wp-block-post-content h2+.medianes-livre__texte {
		margin-top: var(--wp--preset--spacing--petit);
	}
}

/* Recette mobile 2026-07-31 — pages enfants Expertises (les 6 partagent
   `body.parent-pageid-52`), demande Noé (« gère mieux les espacements »).
   Leurs 8 sections de premier niveau (intro, Articles, Ressources, Notre
   livre, Podcast, Nos projets, Newsletters, CTA) sont de simples wp:group —
   exactement le motif qui, sur /le-media/ et la recirculation du hub
   Podcast, fait perdre la règle « 48px entre sections » (2026-07-30,
   spécificité (0,3,1)) face à la règle plus ancienne « 24px sur tout
   wp-block-group » (2026-07-29, (0,4,1)) : cette dernière l'emporte sur le
   nombre de classes, pas sur l'intention. Résultat avant correctif : 24px
   partout au lieu de 48, et l'intro cumulait 24px de padding-top (correct)
   ET 24px de margin-top (la règle de reset du premier enfant perd le même
   combat) — 48px de vide sous le header au lieu de 24.
   Même mécanisme de correction que /le-media/ et /podcasts/ : un sélecteur
   de spécificité égale (0,4,1) mais posé après dans le fichier, qui gagne
   par l'ordre source. Ce motif (sections en wp:group nu) est probablement
   présent sur d'autres pages non auditées — non traité ici, hors périmètre
   de la demande. */
@media (max-width: 781px) {

	body.parent-pageid-52 .wp-block-post-content>.wp-block-group:not(.alignfull) {
		margin-top: var(--wp--preset--spacing--double) !important;
		margin-bottom: var(--wp--preset--spacing--double) !important;
	}

	/* .wp-block-group.medianes-ouverture (5 classes) : sans le doublon de
	   classe, cette règle (auparavant 4 classes, la même spécificité que la
	   règle générale ci-dessus) perdait contre ELLE, dans le désordre — la
	   preuve en a été faite en vérifiant (margin-top résolu à 48 au lieu de
	   0). */
	body.parent-pageid-52 .wp-block-post-content>.wp-block-group.medianes-ouverture {
		margin-top: 0 !important;
	}

	/* Intro (retour ← / H1 / chapô) : 12px entre chaque élément, comme sur
	   /le-media/ (recette du 2026-07-30). Sans ce resserrement, retour→H1 et
	   H1→chapô valent chacun 48px (margin-top:double posé en style inline sur
	   le H1 ; gouttiere sur le chapô, plafonné à double=48 par la règle
	   générale de cap mobile) — un vide jugé excessif par Noé (2026-07-31).
	   !important : bat les styles inline. */
	body.parent-pageid-52 .medianes-ouverture>*+* {
		margin-top: var(--wp--preset--spacing--petit) !important;
	}

	/* Dernier bloc de la page : marge basse à 0, symétrique du reset du
	   premier bloc ci-dessus. L'écart avant le footer est déjà porté par le
	   margin-top DÉDIÉ du footer (grand=96px, cf. plus bas « Écart standard
	   avant le footer », qui s'applique à toutes les largeurs) : sans ce
	   reset, la règle générale ci-dessus (margin-bottom:48px sur tout groupe)
	   s'additionnait aux 96px du footer (144px avant le footer, contre 96px
	   voulu — la même famille de bug que le premier bloc, jugée excessive par
	   Noé). Spécificité (0,5,1), au-dessus de la règle générale (0,4,1) :
	   gagne sans dépendre de l'ordre source. */
	body.parent-pageid-52 .wp-block-post-content>.wp-block-group:not(.alignfull):last-child {
		margin-bottom: 0 !important;
	}
}

/* Recette mobile 2026-07-30 — /projets/ conforme à sa maquette (2304:30099),
   demande Noé (« traite l'ensemble »). Les coquilles (bouton hero, libellé du
   bouton de fin de grille) et l'écart lié à la surcharge wp_template 3313 sont
   corrigés dans le contenu, cf. figma-inventaire §6 : ici, uniquement les deux
   écarts propres au mobile. */
@media (max-width: 781px) {

	/* Intro : 12px entre le titre et le texte (la maquette mobile resserre
	   l'écart du gabarit d'archive, fixé à 24px en style inline pour tous les
	   breakpoints — desktop non revérifié contre sa propre maquette, donc
	   changement borné au mobile par prudence). Ce gabarit d'archive n'a PAS de
	   wrapper « .entry-content » (spécifique aux templates singuliers) : le
	   sélecteur suit la vraie chaîne main > group > columns > column > p. */
	body.post-type-archive-cas_client main .wp-block-columns:first-of-type>.wp-block-column p.has-corps-font-size {
		margin-top: var(--wp--preset--spacing--petit) !important;
	}

	/* Titre des cartes projet : la maquette le fige à 26px (préset h4, plafond
	   du clamp fluide) au lieu de le laisser descendre à 22px comme le reste du
	   site utilisant ce préset — scopé à cette grille pour ne pas changer le
	   comportement fluide ailleurs. !important : le cœur pose déjà
	   « .has-h-4-font-size { font-size: var(...) !important } » (global styles). */
	body.post-type-archive-cas_client .medianes-cartes .wp-block-post-title {
		font-size: 26px !important;
	}
}

/* Harmonisation des titres d'encarts newsletter sur mobile (consigne Noé
   2026-07-30, « passe ce texte en H3 ») : la bande newsletters du Studio est
   un h2 natif dans un groupe medianes-qsn, pas le bloc medianes/newsletter —
   même taille H3 que lui sous 781px pour que les deux composants concordent
   (écart relevé lors de la recette de /le-studio/). */
@media (max-width: 781px) {
	.medianes-qsn:has(.medianes-form-nl) h2 {
		font-size: var(--wp--preset--font-size--h-3);
		line-height: 1;
	}
}

/* Section « Chiffres clés » — espacements du composant « Chiffre clé »
   (node 432:17070, partagé desktop/mobile) et de la grille mobile
   (node 2694:32155). Corrigé le 2026-08-03 (demande Noé) : le blockGap racine
   posait 24px partout, là où la maquette veut 12px entre le nombre et son
   libellé, 24px de padding vertical par chiffre, et 48px entre les colonnes en
   desktop — 4 × 276px dans les 1248px du contenu, soit les 275px du node.
---------------------------------------------------------------------------- */
.medianes-chiffres {
	/* `!important` : le blockGap du bloc Colonnes est posé par une feuille
	   `wp-container-…` injectée après celle-ci. */
	gap: var(--wp--preset--spacing--double) !important;
}

.medianes-chiffres>.wp-block-column {
	padding-block: var(--wp--preset--spacing--regulier);
}

/* Nombre → libellé : 12px (`gap-petit` du composant) au lieu des 24px du
   blockGap racine. */
.medianes-chiffres>.wp-block-column>*+* {
	margin-top: var(--wp--preset--spacing--petit);
}

/* Recette mobile 2026-07-29 : « Chiffres clés » (node 2694:32155) s'affiche en
   grille 2×2 sur mobile, pas empilé en une colonne (comportement par défaut de
   core/columns). */
@media (max-width: 781px) {

	.medianes-chiffres {
		display: grid !important;
		grid-template-columns: repeat(2, 1fr);
		/* Rangées jointives (le conteneur du node est en `gap-0`) : l'écart
		   visuel entre deux rangées vient des 24px de padding de chaque chiffre,
		   soit les blocs de 144px qui se touchent dans la maquette. 12px entre
		   les colonnes (rangée 1 du node ; sa rangée 2 en montre 48 — écart
		   interne à la maquette, signalé). */
		gap: 0 var(--wp--preset--spacing--petit) !important;
	}

	.medianes-chiffres>.wp-block-column {
		flex-basis: auto !important;
		width: auto !important;
	}

	.medianes-chiffres .has-h-3-font-size {
		font-size: 40px !important;
	}
}

.medianes-hero-racine__img img {
	display: block;
	width: 100%;
	max-width: 757px;
	height: auto;
}

.medianes-hero-racine__sr {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* Accordéon « Champ déployable » (node 197:25609) : carte blanche, padding 24,
   ombre bleue, chevron à droite.
---------------------------------------------------------------------------- */
.medianes-expertise {
	background: var(--wp--preset--color--blanc);
	border: 1px solid transparent;
	border-radius: 6px;
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	padding: var(--wp--preset--spacing--regulier);
	margin-top: var(--wp--preset--spacing--regulier);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-expertise summary {
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--h-4);
	font-weight: 500;
	line-height: 1;
	cursor: pointer;
	list-style: none;
	position: relative;
	padding-right: 36px;
}

.medianes-expertise summary::-webkit-details-marker {
	display: none;
}

.medianes-expertise summary::after {
	content: "";
	position: absolute;
	right: 0;
	top: 50%;
	width: 24px;
	height: 24px;
	transform: translateY(-50%);
	background: url(assets/icon-chevron-down.svg) center / contain no-repeat;
	transition: transform 0.15s ease;
}

.medianes-expertise[open] summary::after {
	transform: translateY(-50%) rotate(180deg);
}

/* Ticket #83 (maquette accordéon ouvert) : l'état déplié se distingue par une
   bordure marine et une ombre dure décalée. Vaut pour les deux familles
   d'accordéons (expertises Studio et accordéons tarifs/FAQ/services).
   Ticket #100 : l'ombre portée de l'état ouvert est bleu-700 (bleu-08), pas
   bleu clair. */
.medianes-expertise[open],
.medianes-accordeon[open] {
	border-color: var(--wp--preset--color--bleu-08);
	box-shadow: 3px 3px 0 var(--wp--preset--color--bleu-08);
}

.medianes-expertise> :not(summary) {
	margin-top: var(--wp--preset--spacing--regulier);
}

/* Liste à coches (lue/check) */
.medianes-liste-checks {
	list-style: none;
	padding-left: 0;
}

.medianes-liste-checks li {
	position: relative;
	padding-left: 36px;
	margin-bottom: var(--wp--preset--spacing--petit);
}

.medianes-liste-checks li::before {
	content: "✓";
	position: absolute;
	left: 0;
	top: 0;
	font-weight: 700;
	color: var(--wp--preset--color--bleu-08);
}

/* Lien avec flèche (lucide arrow-right, liens « manifeste » / « équipe »)
   Spec Dev Mode « lien » : Degular Medium 18px lh 1.3, souligné from-font.
---------------------------------------------------------------------------- */
.medianes-lien-fleche a {
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--degular);
	font-size: 18px;
	font-weight: 500;
	line-height: 1.3;
	text-decoration: underline;
	text-underline-position: from-font;
}

/* Hero Studio : titre limité à 808px (spec Dev Mode 176:6236). Ticket #82 :
   FERRÉ À GAUCHE du conteneur. Passe d'harmonisation 2026-07-22 : la taille
   54px (h-2) de la spec est abandonnée — tous les titres d'ouverture en
   Degular Display sont au canon 60px (h-1), décision Baptiste. */
body.page.univers-studio .medianes-ouverture h1 {
	max-width: 808px;
	margin-left: 0;
}

.medianes-lien-fleche a::after {
	content: "";
	display: inline-block;
	width: 24px;
	height: 24px;
	margin-left: var(--wp--preset--spacing--petit);
	vertical-align: middle;
	background: url(assets/icon-arrow-right.svg) center / contain no-repeat;
}

/* Variante « retour » : flèche à gauche (arrow-left = arrow-right miroir). */
.medianes-lien-fleche--retour a::after {
	display: none;
}

.medianes-lien-fleche--retour a::before {
	content: "";
	display: inline-block;
	width: 24px;
	height: 24px;
	margin-right: var(--wp--preset--spacing--petit);
	vertical-align: middle;
	background: url(assets/icon-arrow-right.svg) center / contain no-repeat;
	transform: scaleX(-1);
}

/* Bloc recherche (page Recherche, node 3177:22942) : champ + bouton centrés.
   Recette #16 : champ et bouton à la même hauteur, styles natifs du navigateur
   neutralisés (croix d'effacement WebKit, halo de saisie).
   `position: relative` sert de repère au panneau de suggestions :
   `medianes/recherche-auto` s'y insère et se cale sur les `offsetTop`/
   `offsetLeft` du champ. Sans lui, le repère remonterait à un ancêtre
   imprévisible. */
.medianes-recherche {
	position: relative;
	max-width: 480px;
	margin-left: auto;
	margin-right: auto;
}

.medianes-recherche .wp-block-search__inside-wrapper {
	align-items: stretch;
}

/* !important sur padding/font : Ollie pose `input:not([type="submit"]):not(
   [type="radio"]) { padding: 0.5em 1em; font-size: var(--wp--preset--font-
   size--small); }`, plus spécifique (0,2,1 contre 0,2,0 ici, le sélecteur de
   type l'emportant) — masqué jusqu'ici par le stretch flex qui forçait la
   hauteur de la ligne complète, révélé en empilant le champ et le bouton sur
   mobile (recette 2026-07-29). */
/* 2026-08-07 : l'habillage vient du composant « Champ » (§ en fin de feuille).
   Restent l'`appearance` (le champ `search` natif porte ses propres atours) et le
   `!important` du padding, que le bloc de recherche du cœur impose en inline. */
.medianes-recherche .wp-block-search__input {
	appearance: none;
	-webkit-appearance: none;
	padding: var(--wp--preset--spacing--petit) !important;
}

.medianes-recherche input[type="search"]::-webkit-search-cancel-button,
.medianes-recherche input[type="search"]::-webkit-search-decoration {
	-webkit-appearance: none;
	appearance: none;
	display: none;
}

.medianes-recherche .wp-block-search__button {
	margin-left: var(--wp--preset--spacing--petit);
}

/* Mobile : bouton sous le champ plutôt qu'à côté (demande Baptiste 2026-07-29).
   `align-items: stretch` posé plus haut fait que les deux enfants remplissent
   déjà la largeur une fois l'axe transversal devenu horizontal. */
@media (max-width: 781px) {

	.medianes-recherche .wp-block-search__inside-wrapper {
		flex-direction: column;
	}

	.medianes-recherche .wp-block-search__button {
		margin-left: 0;
		margin-top: var(--wp--preset--spacing--petit);
	}
}

/* Suggestions pendant la frappe (bloc medianes/recherche-auto, 2026-08-07)
----------------------------------------------------------------------------
   AUCUNE MAQUETTE, et c'est un arbitrage explicite de Baptiste : « dérive du
   composant déroulant existant ». Le vocabulaire vient donc entièrement du
   panneau de `.medianes-filtre` (filtre « Filtrer par domaine », node
   5100:18403), lui-même repris par le sélecteur de langue — carte blanche,
   bordure 0,5px bleu-08, rayon bas de 6px, ombre `0 1px 12px bleu-02`, lignes
   en 18px Degular Text séparées d'un filet, survol bleu-00.

   Ce qui en diffère, et pourquoi :
     · pas de cercle de sélection — on ouvre un contenu, on ne choisit pas une
       option persistante ;
     · deux niveaux par ligne (titre puis type) au lieu d'un libellé ;
     · le panneau se cale sur le CHAMP et non sur le conteneur : `top`, `left` et
       `width` sont posés en JavaScript (cf. `caler()` dans view.js). En desktop
       le champ ne fait pas toute la largeur du bloc de recherche — le bouton en
       prend une part — alors qu'en mobile si. Mesurer évite de tenir deux jeux
       de règles en phase avec une mise en page qui change de direction.

   z-index 20 : au-dessus du contenu, sous le header collant (80). Même valeur
   que le panneau du filtre. */
.medianes-autocomp {
	position: absolute;
	z-index: 20;
}

/* `border-top: 0` et coins arrondis en bas seulement : le champ au-dessus porte
   déjà sa bordure, les deux se lisent comme une carte unique. C'est exactement
   ce que fait le panneau du filtre sous son `<summary>`. Sans cela, deux filets
   se superposent au raccord. */
.medianes-autocomp__liste,
.medianes-autocomp__vide {
	margin: 0;
	padding: 0;
	list-style: none;
	border: 0.5px solid var(--wp--preset--color--bleu-08);
	border-top: 0;
	border-radius: 0 0 6px 6px;
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 12px var(--wp--preset--color--bleu-02);
}

.medianes-autocomp__lien {
	display: flex;
	flex-direction: column;
	gap: 2px;
	padding: var(--wp--preset--spacing--petit) var(--wp--preset--spacing--regulier);
	text-decoration: none;
}

.medianes-autocomp__item+.medianes-autocomp__item {
	border-top: 0.5px solid var(--wp--preset--color--bleu-08);
}

/* Le titre peut être long : une seule ligne, coupée. Une ligne qui se replie
   ferait sauter la hauteur du panneau à chaque frappe. */
.medianes-autocomp__titre {
	overflow: hidden;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: 18px;
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-08);
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* Le type reprend TRAIT POUR TRAIT l'étiquette des cartes
   (`.medianes-type-contenu`) : Degular Mono, « Note détail » 13px, interligne
   1,3, capitales, bleu-08 plein. Même rôle, même lecture — c'est ce qui permet
   de reconnaître un podcast d'un coup d'œil dans le panneau comme dans une
   grille. Les valeurs sont dupliquées et non héritées : l'étiquette des cartes
   est un `<p>` produit par `medianes_etiquette_type_html()`, ici c'est un
   `<span>` rempli par le script — pas de balisage commun à partager. */
.medianes-autocomp__type {
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
	text-transform: uppercase;
}

/* Survol ET option désignée au clavier partagent le même état : ce sont deux
   façons de pointer la même chose, les distinguer n'apprendrait rien. */
.medianes-autocomp__item:hover,
.medianes-autocomp__item.is-active {
	background: var(--wp--preset--color--bleu-00);
}

/* Seule la dernière ligne s'arrondit : le haut du panneau est droit, il prolonge
   le champ. Sans ce rayon, le fond de survol déborderait des coins de la carte. */
.medianes-autocomp__item:last-child {
	border-radius: 0 0 6px 6px;
}

.medianes-autocomp__vide {
	padding: var(--wp--preset--spacing--petit) var(--wp--preset--spacing--regulier);
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: 18px;
	line-height: 1.2;
	color: var(--wp--preset--color--gris-fonce);
}

/* `[hidden]` seul ne suffit pas : les règles ci-dessus posent `display: flex`
   sur les descendants, et le cœur ne pose `display: none` qu'à (0,0,1). */
.medianes-autocomp [hidden] {
	display: none;
}

/* « Vouliez-vous dire… ? » (bloc medianes/recherche-suggestion, 2026-08-07)
----------------------------------------------------------------------------
   ⚠️ AUCUNE MAQUETTE. Le node Recherche (3177:22942) ne dessine ni correction
   ni suggestion : il montre le titre, le champ, puis « Accès rapide ». Rien
   n'est donc inventé ici — la ligne reprend à l'identique des valeurs déjà en
   service ailleurs sur la page : la largeur du champ (480px), son centrage, le
   corps de texte et le lien souligné du thème. À confronter à Figma si Baptiste
   fait dessiner l'écran. */
.medianes-suggestion {
	max-width: 480px;
	margin: var(--wp--preset--spacing--petit) auto 0;
	text-align: center;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	color: var(--wp--preset--color--gris-fonce);
}

/* Le terme corrigé est ce sur quoi on clique : il porte la couleur de lien et le
   soulignement, le reste de la phrase non. */
.medianes-suggestion a {
	color: var(--wp--preset--color--bleu-09);
	font-weight: 500;
	text-decoration: underline;
	text-underline-offset: 0.2em;
}

/* Ticket recherche : le texte indicatif de TOUS les placeholders (recherche,
   newsletter, recherche…) est en corps sans 18px, pleinement opaque. */
::placeholder {
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	opacity: 1;
}

/* Cartes Expertise (node 2955:17226) : carte blanche, illustration, titre H3,
   liste, deux boutons pleine largeur.

   2026-09-12 : les sept règles du PICTOGRAMME sont parties d'ici — la base
   `.medianes-carte-expertise__picto` et les six `:has()` qui lui posaient un fond
   par expertise. Elles ciblaient un élément qui n'existe plus dans le DOM : les
   cartes portent de vraies illustrations (`<figure><img>`) depuis leur refonte,
   et la classe ne survit que dans d'anciennes révisions de la page #52. Vérifié
   au navigateur avant suppression. Ne pas les réécrire sans remettre d'abord
   l'élément dans le contenu. */
/* Recette #98 : un spacer récupérait le block-gap du thème (24px) EN PLUS de sa
   hauteur → espacement faussé. Sa hauteur suffit : on annule sa marge. */
.wp-block-spacer {
	margin-block: 0;
}

.medianes-carte-expertise {
	/* Recette #98 : hauteur selon le contenu (pas d'étirement ni d'espace blanc). */
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	align-self: start;
}

/* Les DEUX boutons de la carte (maquette `2955:17226`, 2026-09-12) : « Nos
   services » vers le côté studio, « Nos articles et podcasts » vers le côté
   média. Filet 0,5px conforme au token `Stroke` du node — surcharge ciblée du
   style outline global, qui pose 1px ; même procédé que le bouton de
   téléchargement des formations. */
.medianes-carte-expertise__cta .wp-block-button.is-style-outline .wp-block-button__link {
	border-width: 0.5px;
}

.medianes-carte-expertise .wp-block-buttons,
.medianes-carte-expertise .wp-block-button,
.medianes-carte-expertise .wp-block-button__link {
	width: 100%;
}

.medianes-carte-expertise .wp-block-button__link {
	text-align: center;
}

/* Recette #98 : titre + sous-titre + liste forment un groupe resserré à 12px
   entre eux ; le reste de la carte (picto, bouton) reste à 24px. */
.medianes-carte-expertise>p,
.medianes-carte-expertise .medianes-liste-puces {
	margin-block-start: var(--wp--preset--spacing--petit);
}

.medianes-liste-puces {
	margin: 0;
	padding-left: 1.2em;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-liste-puces li {
	line-height: 1.3;
	margin-bottom: var(--wp--preset--spacing--nano);
}

.medianes-tags-row {
	letter-spacing: 0.04em;
}

/* Pagination d'archive (composant « Numérotation pages » 271:7380, recette #35 :
   chevrons aux extrémités, page courante encadrée).
   Revu 2026-07-27 (Baptiste) : les libellés « Page précédente / suivante » passent
   en Degular 18px (police du corps) pour être plus lisibles ; l'encadré de la page
   active est renforcé (2px). Numéros en Degular Mono 15px (inchangé, cf. maquette). */
.medianes-pagination {
	/* Écarté des articles (24px de blockGap par défaut → 48px), demande
	   Baptiste 2026-07-29. */
	margin-top: var(--wp--preset--spacing--double);
	gap: var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 400;
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
	align-items: center;
}

.medianes-pagination .wp-block-query-pagination-numbers a,
.medianes-pagination .wp-block-query-pagination-previous,
.medianes-pagination .wp-block-query-pagination-next {
	color: var(--wp--preset--color--bleu-08);
	text-decoration: none;
}

/* Ollie (thème parent) applique `font-size` sur les liens de pagination via une
   règle `:root :where(...)`. On la surcharge pour appliquer nos 18px Degular sur
   les libellés « Page précédente / suivante ». */
.medianes-pagination .wp-block-query-pagination-previous,
.medianes-pagination .wp-block-query-pagination-next,
.medianes-pagination a.wp-block-query-pagination-previous,
.medianes-pagination a.wp-block-query-pagination-next {
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 400;
	line-height: 1.3;
}

/* Numéros en cases 30×30 (spec Dev Mode 271:7380), Degular Mono 15px, page courante
   bordée en marine 2px. */
.medianes-pagination .wp-block-query-pagination-numbers a,
.medianes-pagination .wp-block-query-pagination-numbers .current,
.medianes-pagination .wp-block-query-pagination-numbers .dots {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	border-radius: 3px;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
}

.medianes-pagination .wp-block-query-pagination-numbers .current {
	border: 1px solid var(--wp--preset--color--bleu-08);
}

/* Chevrons Lucide 24px (icon-chevron-right pour « suivante », pivoté pour « précédente »). */
.medianes-pagination .wp-block-query-pagination-previous::before,
.medianes-pagination .wp-block-query-pagination-next::after {
	content: "";
	display: inline-block;
	width: 24px;
	height: 24px;
	vertical-align: -6px;
	background: url(assets/icon-chevron-right.svg) center / contain no-repeat;
}

.medianes-pagination .wp-block-query-pagination-previous::before {
	margin-right: var(--wp--preset--spacing--micro);
	transform: rotate(180deg);
}

.medianes-pagination .wp-block-query-pagination-next::after {
	margin-left: var(--wp--preset--spacing--micro);
}

/* Mobile : ne garder que les chevrons « précédent/suivant », sans le libellé
   texte, sur la même ligne que les numéros — demande Baptiste 2026-07-29.
   `font-size: 0` efface le texte (les pseudo-éléments ont leur propre largeur/
   hauteur en px, indépendantes du corps du texte, donc les chevrons restent
   intacts) ; les marges qui espaçaient l'icône du texte n'ont plus lieu d'être. */
@media (max-width: 781px) {

	.medianes-pagination {
		flex-wrap: nowrap;
	}

	/* !important : le sélecteur juste au-dessus inclut une variante
	   `a.wp-block-query-pagination-previous` (0,2,1) plus spécifique que
	   celui-ci (0,2,0) — sans lever la spécificité ou forcer la cascade,
	   cette variante continue de fixer 18px malgré l'ordre de déclaration. */
	.medianes-pagination .wp-block-query-pagination-previous,
	.medianes-pagination .wp-block-query-pagination-next {
		font-size: 0 !important;
	}

	.medianes-pagination .wp-block-query-pagination-previous::before,
	.medianes-pagination .wp-block-query-pagination-next::after {
		margin: 0;
	}
}

/* Bloc « Articles liés » (medianes/related) : grille de cartes (recette commune) */
.medianes-related {
	margin-top: var(--wp--preset--spacing--double);
}

/* Recette #37 (specs Dev Mode) : 4 cartes de 276px, gouttières 48px (grille
   studio 4×276 + 3×48 = 1248) ; titres h-4 — le h3 nu du bloc héritait du
   style global (40px), d'où les « titres beaucoup trop gros ». */
.medianes-related__grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: var(--wp--preset--spacing--double);
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-related .wp-block-post-title {
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--h-4);
	font-weight: 500;
	line-height: 1;
}

@media (max-width: 781px) {

	.medianes-related__grid {
		grid-template-columns: 1fr;
		/* Recette mobile 2026-07-27 : gouttière 48px (desktop) mesurée à 24px
		   entre cartes empilées sur les nodes Figma mobile (2346:35804,
		   2402:38002, 2306:33123). */
		gap: var(--wp--preset--spacing--regulier);
	}
}

/* Article (node 183:6892) : colonne de lecture, exergues Loretta, intertitres
   Degular.
---------------------------------------------------------------------------- */

/* Contenus migrés : rien ne doit dépasser la colonne d'article (600px)
   — constat Noé 2026-08-03 sur une image qui sortait du cadre.

   Les images elles-mêmes vont bien : la règle globale `img, figure` les plafonne
   et leur ratio est préservé (mesuré : 1294×832 d'origine rendus en 600×386).
   Ce qui déborde, ce sont les CONTENEURS à largeur en pixels, que le plafonnement
   des images ne peut pas rattraper puisqu'elles remplissent 100 % de ces
   conteneurs. Deux cas relevés sur les 491 articles :
   — le `div.wp-caption` de l'éditeur classique, qui porte la largeur de l'image
     d'origine en dur (`style="width: 910px"`) ;
   — 7 embeds gardés en `width="1080"`.

   `max-width` prime sur `width` : la largeur en dur devient un plafond au lieu
   d'une contrainte, sans toucher aux contenus eux-mêmes.
--------------------------------------------------------------------------- */
:is(.entry-content, .wp-block-post-content) :is(.wp-caption, iframe, video, embed, object) {
	max-width: 100%;
}

/* Ouverture article (node 5095:21794) : bandeau bleu-00, 3 colonnes. */
.medianes-article__auteur {
	display: flex;
	align-items: flex-start;
	gap: var(--wp--preset--spacing--regulier);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-article__auteur .wp-block-post-author__avatar img {
	border-radius: 4px;
}

/* Colonne de texte de l'encart (composant `7294:18748`, relu via le MCP le
   2026-09-23) : « Écrit par Owen Huchon » est UN SEUL texte, mono 15/1.3, qui
   passe à la ligne comme une phrase ; la date suit en dessous, mono 13/1.3, à 6px
   (`gap-[var(--micro,6px)]`).

   Byline et nom sont donc mis EN LIGNE, séparés par l'espace que render.php pose
   entre les deux paragraphes. Jusqu'au 2026-09-23, ils étaient empilés en
   colonne flex sur ordinateur, et la règle mobile censée les rapprocher
   (`flex-wrap`) ne défaisait pas cette colonne : ils restaient sur deux lignes
   partout. Un nom long (« Marine Doux et Dorine Planté ») passe maintenant à la
   ligne mot à mot, au lieu de partir en bloc sous la byline.
--------------------------------------------------------------------------- */
.medianes-article__auteur .wp-block-post-author__content {
	line-height: 1.3;
}

.medianes-article__auteur .wp-block-post-author__byline,
.medianes-article__auteur .wp-block-post-author__name,
.medianes-article__auteur .wp-block-post-author__date {
	margin: 0;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-article__auteur .wp-block-post-author__byline,
.medianes-article__auteur .wp-block-post-author__name {
	display: inline;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
}

/* Ticket #84 (composant 7294:18748) : la date « publication, modifié le … »
   vit sous le nom, en mono 13. */
.medianes-article__auteur .wp-block-post-author__date {
	margin-top: var(--wp--preset--spacing--micro);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	line-height: 1.3;
}

/* Ticket #84 : étiquettes de l'ouverture en pastilles espacées de 6px (wrap).
   Le `display: flex` posé ici a été retiré le 2026-08-08 : il rétablissait
   localement la blockification qui empêche le découpage du fond ligne par
   ligne (cf. le commentaire du composant, plus haut).
 La rupture entre
   étiquettes est désormais portée par le composant lui-même. */

/* Byline multi-auteur·rices (medianes/auteurs, Co-Authors Plus) : facepile
   chevauchée — le DOM est inversé dans render.php, le row-reverse remet le
   1er auteur à gauche et au-dessus de la pile. Liseré bleu-00 (fond du
   bandeau) entre les avatars ; repli initiales sur bleu-02 sous un Gravatar
   « blank ». Liens auteur·rice à la couleur du texte. */
.medianes-article__auteur .wp-block-post-author__avatar {
	display: flex;
	flex-direction: row-reverse;
	justify-content: flex-end;

	/* Le médaillon fait 50px (`size-[50px]`, 7294:18748). Sans ceci, la colonne
	   de texte l'écrasait à 30px sur ordinateur, 37px en mobile (mesuré le
	   2026-09-23). */
	flex-shrink: 0;

	/* Alignement sur la première ligne, pas sur le milieu de la colonne. Le
	   composant centre le médaillon (`items-center`) sur un texte de deux lignes
	   plus une date sur deux lignes : haut du médaillon à (19.5 + 6 + 2 × 16.9 −
	   50) / 2 = 4.65px sous le haut du texte, soit à hauteur de la première
	   ligne. Centré, un nom ou une date plus longs (date sur trois lignes à 202px
	   de colonne) faisaient descendre le médaillon d'environ 13px sous « Écrit
	   par ». On part donc du haut, avec le décalage du composant, calculé depuis
	   les tokens : il ne bouge plus, quelle que soit la longueur du texte. */
	margin-top: calc((1.3 * var(--wp--preset--font-size--note) + var(--wp--preset--spacing--micro) + 2.6 * var(--wp--preset--font-size--note-detail) - 50px) / 2);
}

.medianes-article__auteur .medianes-avatar {
	position: relative;
	display: block;
	border-radius: 4px;
	box-shadow: 0 0 0 2px var(--wp--preset--color--bleu-00);
}

.medianes-article__auteur .medianes-avatar:not(:last-child) {
	margin-left: -16px;
}

.medianes-article__auteur .medianes-avatar img {
	display: block;
}

.medianes-article__auteur .medianes-avatar__initiales {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 4px;
	background: var(--wp--preset--color--bleu-02);
	color: var(--wp--preset--color--bleu-08);
	font-size: var(--wp--preset--font-size--note-detail);
}

/* Les initiales ne sont qu'un REPLI, empilé sous un Gravatar transparent. Étant
   en position absolue, elles se peignent au-dessus d'une image en flux : dès
   qu'un vrai médaillon est servi (signatures collectives, cf.
   medianes-core/avatar-collectif.php), elles doivent donc s'effacer — sans quoi
   « LD » recouvrait le sigle Médianes (constat 2026-08-04). Même chose pour une
   photo de profil déposée dans wp-admin (`medianes-avatar__photo`, ADR-040). */
.medianes-avatar:has(img.medianes-avatar__medaillon) .medianes-avatar__initiales,
.medianes-avatar:has(img.medianes-avatar__photo) .medianes-avatar__initiales {
	display: none;
}

.medianes-article__auteur .wp-block-post-author__name a {
	color: inherit;
	text-decoration: none;
}

.medianes-article__auteur .wp-block-post-author__name a:hover,
.medianes-article__auteur .wp-block-post-author__name a:focus-visible {
	text-decoration: underline;
}

.medianes-ouverture-article .wp-block-post-date {
	color: var(--wp--preset--color--bleu-08);
	margin-top: var(--wp--preset--spacing--micro);
}

/* Corps : grille rail-partage | contenu 600 centré | espace */
.medianes-article-body {
	display: grid;
	grid-template-columns: minmax(48px, 1fr) minmax(0, 600px) minmax(0, 1fr);
	gap: var(--wp--preset--spacing--gouttiere);
	align-items: start;
}

.medianes-article__content {
	grid-column: 2;
}

.medianes-share {
	position: sticky;
	/* Recette #100 : header + sous-header sticky → décaler d'autant pour rester visible. */
	top: calc(var(--medianes-header-h) + 56px + var(--wp--preset--spacing--regulier));
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	justify-self: end;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-share__label {
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
}

.medianes-share__link {
	color: var(--wp--preset--color--bleu-08);
	text-decoration: none;
}

.medianes-share__link:hover {
	text-decoration: underline;
}

/* Recette #51 : bascule plus tôt (1024px au lieu de 781px) — aux largeurs
   intermédiaires, la colonne texte manquait d'espace et le rail de partage
   flottait à côté d'éléments voisins. */
@media (max-width: 1024px) {

	.medianes-article-body {
		grid-template-columns: 1fr;
	}

	.medianes-article__content {
		grid-column: 1;

		/* Recette du 2026-08-10 : 7 articles provoquaient un défilement horizontal
		   sur mobile. La piste `1fr` garde un minimum automatique égal au
		   min-content de son contenu ; celui-ci restait à 600px, si bien que
		   `.medianes-article__content` mesurait 600px de large dans un viewport de
		   390 (bord droit à 624px). `min-width: 0` autorise la piste à se
		   rétracter. Corrige 5 des 7 cas ; les 2 autres relèvent du contenu
		   (iframe mailchi.mp à largeur fixe de 550px, et une chaîne insécable). */
		min-width: 0;
	}

	.medianes-share {
		position: static;
		flex-direction: row;
		flex-wrap: wrap;
		gap: var(--wp--preset--spacing--regulier);
		justify-self: start;
		margin-bottom: var(--wp--preset--spacing--regulier);
	}
}

.medianes-article .wp-block-post-title {
	margin-top: var(--wp--preset--spacing--petit);
}

.medianes-article__chapo {
	color: var(--wp--preset--color--bleu-08);
}

/* Rail métadonnées de la page projet (bloc medianes/projet-rail) : Expertise /
   Dates (libellé Degular + filet, valeur Degular Mono) + lien « Voir le site
   client ». Node 152:8666. */
.medianes-projet-rail {
	margin-top: var(--wp--preset--spacing--regulier);
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--regulier);
}

.medianes-projet-rail__label {
	margin: 0 0 var(--wp--preset--spacing--petit);
	padding-bottom: var(--wp--preset--spacing--micro);
	border-bottom: 1px solid var(--wp--preset--color--bleu-02);
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-5);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-projet-rail__valeur {
	margin: 0;
	color: var(--wp--preset--color--bleu-08);
	line-height: 1.3;
}


.medianes-article__contenu {
	color: var(--wp--preset--color--bleu-08);

	/* Les articles migrés contiennent des URL collées en clair, dont certaines plus
	   longues que la colonne. Une chaîne insécable impose son min-content à la
	   piste de la grille : `reddit-opportunite-ou-nouvelle-dependance` débordait
	   ainsi de 8px en 390px AVANT toute intervention, et de 50px après la mise en
	   forme des encadrés, dont le padding s'ajoutait à la chaîne.
	   `anywhere` et non `break-word` : seul le premier réduit le min-content, donc
	   permet réellement à la piste de se rétracter. */
	overflow-wrap: anywhere;
}

/* Le bloc post-content porte sa propre disposition « constrained », qui retombe
   sur la `contentSize` GLOBALE (1248px) et non sur les 600px du conteneur parent :
   ses enfants reçoivent donc `max-width: 1248px`. La colonne de 600px n'est tenue
   que par `.medianes-article__content`. Ce plafond à 100% évite qu'un contenu
   large impose sa largeur à la piste de la grille sur mobile — voir le
   `min-width: 0` de `.medianes-article__content`. */
.medianes-article__contenu>* {
	max-width: 100%;
}

.medianes-article__contenu p {
	line-height: 1.45;
}

/* Titres internes des articles (recette du 2026-08-10).

   Avant : h2 et h3 partageaient EXACTEMENT la même déclaration (h-4, graisse 500,
   line-height 1) — aucun niveau de lecture n'était distinguable, pour 430 h2 et
   1 600 h3 dans le corpus. Ils sont désormais séparés par la taille ET par la
   graisse : à 390px le token h-4 tombe à 22px (il est fluide 22→26) et h5 en vaut
   20, soit 2px d'écart — la seule taille ne suffisait pas à créer la hiérarchie
   sur mobile.

   Les maquettes ne comportent pas d'échelle pour les titres DANS le corps
   d'article (seuls h1 et le chapô sont dessinés) : les valeurs ci-dessous
   n'utilisent que des tokens et des graisses déjà en service ailleurs dans le
   thème (700 = titre d'article, 500 = état antérieur). À revoir dès qu'un node
   Figma existe.

   Échelle du corps d'article : h2 26 (fluide 22→26) / h3 20 / h4 18 / h5 15. */
.medianes-article__contenu h2,
.medianes-article__contenu h3 {
	font-family: var(--wp--preset--font-family--degular);

	/* line-height 1 laissait les titres qui passent à la ligne sans aucun
	   interlignage : deux lignes de 26px collées bord à bord. Le cas est
	   marginal en 1440px mais systématique en 390px, où presque tous les titres
	   se replient sur deux lignes (mesuré sur `definir-son-modele-economique` :
	   8 titres sur 8). */
	line-height: 1.15;
	margin-top: var(--wp--preset--spacing--double);
}

.medianes-article__contenu h2 {
	font-size: var(--wp--preset--font-size--h-4);
	font-weight: 700;
}

.medianes-article__contenu h3 {
	font-size: var(--wp--preset--font-size--h-5);
	font-weight: 500;
}

/* h4 (52 occurrences) et h5 (9) doivent suivre, sinon l'échelle s'inverse.
   `theme.json` style TOUS les titres globalement — `elements.heading` (Degular,
   graisse 500, line-height 1) plus une taille par niveau : h3 → 40px, h4 → 26px,
   h5 → 20px. Le gabarit d'article ne surchargeait que h2 et h3, les ramenant tous
   deux à 26px ; h4 héritait donc de ses 26px globaux et se retrouvait AUSSI GROS
   que h2, et plus gros que h3 une fois celui-ci descendu à 20px.

   L'échelle du corps d'article prolonge donc simplement celle du thème vers le
   bas — 26 / 20 / 18 / 15, tous des tokens existants — sans rien inventer.

   (La recette annonçait h4 et h5 « pas stylés du tout, rendus en Loretta corps de
   texte » : c'était une déduction de l'absence de règle CSS, pas une mesure, et
   elle était fausse.) */
.medianes-article__contenu h4 {
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 500;
}

.medianes-article__contenu h5 {
	font-size: var(--wp--preset--font-size--note);
	font-weight: 500;

	/* `theme.json` pose `letter-spacing: 3px` sur h5 — pertinent pour un intertitre
	   de gabarit, illisible pour un titre au fil du texte. */
	letter-spacing: normal;
}

/* Pas de `margin-bottom` ici : la recette avait annoncé des titres collés au
   paragraphe suivant, c'était faux — le `margin-top` du paragraphe fournit déjà
   24px (mesuré). En ajouter doublerait l'écart. */

/* Légendes d'image (545 légendes, 230 articles). Ghost les composait à 12px/18px
   graisse 500, soit la moitié du corps. Ici elles se lisaient comme un paragraphe :
   même police, même taille, même couleur que le texte courant.

   La CAUSE n'était pas une absence de style mais une règle du thème parent qui
   tombe à vide. Ollie pose `div[class*="wp-block-"] figcaption { font-size:
   var(--wp--preset--font-size--x-small); color: var(--wp--preset--color--secondary) }`
   (ollie/style.css:51) — or **ni `x-small` ni `secondary` n'existent dans la
   palette du thème enfant** (vérifié au navigateur : les deux variables sont
   indéfinies). Les deux déclarations sont donc invalides au calcul et retombent
   sur l'héritage, d'où le corps de texte. Seuls son `margin-top` et son
   `text-align: center` prenaient effet.

   Conséquence sur le sélecteur : celui d'Ollie pèse (0,1,2) et battait un simple
   `.medianes-article__contenu figcaption` (0,1,1) — la taille de police restait
   à 18px. D'où le `figure` intercalé ci-dessous, qui égalise à (0,1,2) ; le thème
   enfant étant chargé après le parent, il l'emporte. `text-align` doit être remis
   explicitement pour la même raison.

   Reprise en Degular Mono, comme toutes les autres métadonnées du site (rail
   auteur, étiquettes, `cite` de citation), et en gris-fonce : 6,95:1 sur le fond
   bleu-00, conforme AA — là où le token `gris` ne donne que 3,64:1 et échouerait
   pour du texte.

   Même règle sur le corps des PROJETS (`.medianes-casclient__content`,
   single-cas_client.html), depuis le 2026-09-23 : leurs légendes gardaient le style
   cassé d'Ollie décrit ci-dessus (ticket Baptiste sur le projet #6738, « les
   légendes sont beaucoup trop grandes, il faut prendre le même style que sur les
   articles »). `:is()` prend la spécificité de son argument le plus lourd, (0,1,0) :
   le sélecteur reste à (0,1,2) et bat toujours celui d'Ollie. */
:is(.medianes-article__contenu, .medianes-casclient__content) figure figcaption {
	margin-top: var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	line-height: 1.4;
	color: var(--wp--preset--color--gris-fonce);
	text-align: left;
}

/* Soulignement hérité de Ghost : 2 310 balises `<u>` dans 177 articles, utilisées
   comme emphase. Rendues soulignées et de la même couleur que le texte, elles
   étaient impossibles à distinguer d'un lien. Le soulignement est retiré au profit
   de l'italique, qui est ce que l'auteur voulait dire.
   Le style des liens n'est PAS touché : la façon dont un lien se signale dans le
   corps d'article est une question de maquette, encore ouverte. La conversion
   propre de ces `<u>` en `<em>` relève du script de migration. */
.medianes-article__contenu u {
	text-decoration: none;
	font-style: italic;
}

.medianes-article__contenu blockquote,
.medianes-casclient__content blockquote {
	border: 0;
	margin: var(--wp--preset--spacing--double) 0;
	padding: 0;
	font-family: var(--wp--preset--font-family--loretta);
	font-size: var(--wp--preset--font-size--h-3);
	font-weight: 300;
	line-height: 1.1;
	color: var(--wp--preset--color--bleu-08);
	text-align: center;
}

.medianes-article__contenu blockquote cite {
	display: block;
	margin-top: var(--wp--preset--spacing--petit);
	font: 400 15px/1.3 var(--wp--preset--font-family--degular-mono);
	font-style: normal;
}

/* Passe responsive 393 (polish mobile transverse)
---------------------------------------------------------------------------- */
@media (max-width: 781px) {

	/* Sous-header : défilement horizontal plutôt que retour à la ligne. Le bloc
	   Navigation a min-width:auto (ne rétrécit pas) → on le force à 0 pour qu'il
	   tienne dans le parent, puis le conteneur défile en interne. */
	.medianes-subheader .wp-block-navigation {
		min-width: 0;
	}

	.medianes-subheader .wp-block-navigation__container {
		flex-wrap: nowrap;
		max-width: 100%;
		min-width: 0;
		overflow-x: auto;
		scrollbar-width: none;
	}

	.medianes-subheader .wp-block-navigation__container::-webkit-scrollbar {
		display: none;
	}

	.medianes-subheader .wp-block-navigation-item__content {
		white-space: nowrap;
	}

	/* Visuels d'en-tête (placeholders à fournir) : taille raisonnable, centrés. */
	.medianes-podcast-tete__visuel,
	.medianes-visuel-placeholder {
		max-width: 220px;
		margin-inline: auto;
	}

	/* Recette mobile 2026-07-27 (projet, node 2306:30632/31222) : le rail
	   (tag+métadonnées) et le titre sont dans deux `wp:column` distinctes ; le
	   cœur WP empile chaque colonne comme un bloc entier à ce même seuil
	   (781px, vérifié : .wp-block-columns > .wp-block-column passe à
	   flex-basis:100% !important), ce qui donnait Tag+Rail puis
	   Retour+Titre+Chapô — Figma attend Retour→Tag→Titre→Chapô→Rail. On
	   déplie les colonnes (display:contents) pour réordonner les éléments
	   individuellement. Scopé au gabarit projet via :has(.medianes-projet-rail)
	   (seul gabarit à porter ce bloc) pour ne pas affecter l'ordre, déjà
	   distinct, des autres gabarits qui partagent .medianes-ouverture-article. */
	.medianes-ouverture-article:has(.medianes-projet-rail) .wp-block-columns>.wp-block-column {
		display: contents;
	}

	.medianes-ouverture-article:has(.medianes-projet-rail) .medianes-lien-fleche--retour {
		order: -3;
	}

	.medianes-ouverture-article:has(.medianes-projet-rail) .medianes-tag {
		order: -2;
	}

	.medianes-ouverture-article:has(.medianes-projet-rail) .wp-block-post-title {
		order: -1;
	}

	.medianes-ouverture-article .medianes-projet-rail {
		order: 1;
	}

	/* Recette mobile 2026-07-27 (projet, node 5096:18913) : sur ce seul
	   gabarit, Figma conserve le bandeau bleu-00 en mobile mais réduit son
	   padding de triple (72px) à régulier (24px, mesure explicite sur les 4
	   côtés — l'inset horizontal ≈24-26px vient déjà du root-padding-aware du
	   thème, seul le vertical restait à 72). !important nécessaire : le
	   padding est posé en style INLINE par le bloc (attribut style="..." du
	   groupe), qu'aucune règle de classe externe ne peut surclasser sans lui
	   (override documenté, cf. doctrine CLAUDE.md §6). */
	.medianes-ouverture-article:has(.medianes-projet-rail) {
		padding-top: var(--wp--preset--spacing--regulier) !important;
		padding-bottom: var(--wp--preset--spacing--regulier) !important;
	}

	/* Recette mobile 2026-07-27 (article/podcast/fiche pratique, nodes
	   2346:35804, 2402:38002, 2306:33123) : mêmes 3 gabarits, même schéma —
	   DOM = [tag+auteur] [retour+titre+chapô] [bouton Traduire optionnel] ;
	   Figma veut Retour→Titre→Chapô→(tag+auteur)→Bouton. Exclut le gabarit
	   projet (:not(:has(.medianes-projet-rail))) qui a un ordre différent,
	   déjà traité ci-dessus. */
	.medianes-ouverture-article:not(:has(.medianes-projet-rail)) .wp-block-columns>.wp-block-column {
		display: contents;
	}

	.medianes-ouverture-article:not(:has(.medianes-projet-rail)) .medianes-lien-fleche--retour {
		order: -3;
	}

	.medianes-ouverture-article:not(:has(.medianes-projet-rail)) .wp-block-post-title {
		order: -2;
	}

	.medianes-ouverture-article:not(:has(.medianes-projet-rail)) .medianes-article__chapo {
		order: -1;
	}

	.medianes-ouverture-article:not(:has(.medianes-projet-rail)) .medianes-tag {
		order: 1;
	}

	.medianes-ouverture-article:not(:has(.medianes-projet-rail)) .medianes-article__auteur {
		order: 2;
	}

	.medianes-ouverture-article:not(:has(.medianes-projet-rail)) .wp-block-buttons {
		order: 3;
	}

	/* « Lire plus tard » ferme la marche, comme en desktop où il est
	   le dernier bloc de la colonne de gauche. Sans `order`, la mise à plat des
	   colonnes (`display: contents` ci-dessus) le remonterait avec le reste de
	   sa colonne, juste sous le lien de retour. Le node mobile de l'article
	   (2346:35804) est ANTÉRIEUR au bouton et ne le dessine pas : cette place
	   est déduite de l'ordre desktop, à confirmer par Baptiste. */
	.medianes-ouverture-article:not(:has(.medianes-projet-rail)) .medianes-sauvegarde-boite {
		order: 3;
	}

	/* Byline des gabarits article/podcast/fiche (node 2402:38330) : « Réalisé
	   par » et le nom sur UNE ligne, la date en dessous à 6px — désormais la
	   règle générale, plus haut (colonne de texte de l'encart). */

	/* Recette mobile 2026-07-27 (header, node 2777:38910) : en mobile fermé,
	   Figma remplace la bordure basse 1px du header par une ombre portée
	   (comme le sous-header) — le sous-header disparaissant du dessous, son
	   ombre migre sur le header lui-même. !important nécessaire : la bordure
	   est posée en style INLINE par le bloc (attribut style="..."). */
	.medianes-header {
		border-bottom: 0 !important;
		box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	}

	/* Recette mobile 2026-07-27 (CTA accompagnement, node 5097:19229) : Figma
	   masque entièrement la rangée d'étiquettes en mobile (elle ne se réempile
	   pas, elle disparaît). `!important` : le `display:flex` est posé en style
	   INLINE par le bloc (layout Gutenberg) — sans lui cette règle ne
	   s'appliquait jamais (constaté le 2026-07-29, malgré le « corrigé »
	   précédent).
	   Paddings, gouttières et disposition du bouton : traités pour toute la
	   famille des bandes encadrées, plus haut dans cette feuille. */
	.medianes-cta-accomp__tags {
		display: none !important;
	}
}

/* Formation — gabarit (bloc medianes/formation-details, node 496:14452)
---------------------------------------------------------------------------- */
.medianes-formation__inner {
	/* Le contenu doit faire la pleine largeur du site (1248, maquette 496:14455) :
	   la gouttière latérale est une MARGE, pas un padding retranché à la largeur
	   (sinon contenu = 1248 − 192 = 1056 et le texte du hero est écrasé). */
	width: min(1248px, 100% - 2 * clamp(24px, 6.667vw, 96px));
	margin-inline: auto;
}

/* Zone de composition libre du gabarit formation (`wp:post-content`, 2026-08-06).
   Elle est SŒUR du bloc `medianes/formation-details`, pas enfant : ni le rythme
   `.medianes-formation > * + *` (borné à ≥ 782px, § plus bas) ni la largeur
   `__inner` ne l'atteignent par héritage — d'où ces règles propres. La classe
   `__inner` est posée sur le bloc lui-même pour la largeur ; il ne reste que la
   marge haute. `:has(> *)` la réserve UNIQUEMENT quand des blocs libres ont été
   ajoutés : sans lui, toute fiche sans contenu libre gagnerait 60px de vide
   avant le pied de page. */
.medianes-formation__libre:has(> *) {
	margin-top: 60px;
	/* même valeur que le rythme inter-sections, cf. § rythme */
}

/* Bande hero : bannière + points clés sur fond bleu-00 (#67). */
.medianes-formation__hero {
	background: var(--wp--preset--color--bleu-00);
	padding-block: var(--wp--preset--spacing--triple);
}

.medianes-formation__tete-grille {
	display: flex;
	gap: var(--wp--preset--spacing--double);
	align-items: flex-start;
}

.medianes-formation__tete-corps {
	flex: 1 1 auto;
	max-width: 800px;
}

.medianes-formation__tete-corps>*+* {
	/* 24px entre titre, chapô, ligne de mise à jour et bouton (maquette
	   496:14456 : gap « régulier » sur toute la colonne). */
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-formation__titre {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-display);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--h-1);
	line-height: 0.9;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__resume {
	margin-top: var(--wp--preset--spacing--regulier);
	color: var(--wp--preset--color--bleu-08);
	line-height: 1.15;
}

.medianes-formation__meta {
	color: var(--wp--preset--color--bleu-08);
	line-height: 1.3;
}

.medianes-formation__tete-cta {
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-formation__tete-visuel {
	flex: 0 0 400px;
}

.medianes-formation__tete-visuel img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: 6px;
}

.medianes-formation .medianes-visuel-placeholder {
	flex: 0 0 400px;
	margin-left: 0;
}

/* Points clés — bande bleu-01 pleine largeur, 5 repères sur une ligne, chacun
   surmonté de son picto (maquette 496:14452 relue au node le 2026-08-03 :
   padding vertical 24 — pas 48 —, gouttière 48 entre repères). */
.medianes-formation__points-bande {
	background: var(--wp--preset--color--bleu-01);
	padding-block: var(--wp--preset--spacing--regulier);
}

.medianes-formation__points {
	display: grid;
	grid-template-columns: repeat(5, 1fr);
	gap: var(--wp--preset--spacing--double);
	margin: 0;
	padding: 0;
	list-style: none;
}

.medianes-formation__point {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: var(--wp--preset--spacing--petit);
}

/* Pictos des repères : illustrations dédiées de la maquette (496:15387), en image
   couleur. Chaque valeur ACF « icône » pointe vers son illustration. Les valeurs
   sans illustration dédiée retombent sur le masque Lucide monochrome (bleu-08). */
.medianes-formation__point-icone {
	/* Boîte du composant « Petit article » (496:14777) : ~108 × 110, dessin calé
	   à gauche comme les textes dessous. La recette mobile la ramène à 52. */
	width: 108px;
	height: 110px;
	background: left center / contain no-repeat;
}

/* Illustrées (maquette 496:15387). */
.medianes-picto--clock {
	background-image: url(assets/picto-temporalite.svg);
}

.medianes-picto--users {
	background-image: url(assets/picto-pour-qui.svg);
}

.medianes-picto--user-check {
	background-image: url(assets/picto-avec-qui.svg);
}

.medianes-picto--euro {
	background-image: url(assets/picto-quel-prix.svg);
}

.medianes-picto--help-circle {
	background-image: url(assets/picto-comment.svg);
}

/* « Certification » : illustration dessinée à la main dans la palette des cinq
   pictos exportés — la maquette des points clés (496:15387) ne compte pas ce
   repère, Figma n'avait donc rien à fournir (constat Noé 2026-08-03 : le masque
   Lucide de repli détonnait au milieu des illustrations). Remplacer le fichier
   si le designer livre l'emoji officiel. */
.medianes-picto--award {
	background-image: url(assets/picto-certification.svg);
}

/* Taille NATIVE de chaque dessin dans la boîte 108 × 110 (2ᵉ passe maquette,
   Noé 2026-08-03) : quatre fichiers sont exportés au ras du dessin (leur
   viewBox = le dessin seul) — le `contain` de la règle de base les gonflait
   donc jusqu'aux bords de la boîte, ~8 à 13 % de trop selon le picto. Les
   valeurs ci-dessous sont les retraits relevés dans les nodes (composant
   « emoji »). `picto-comment`, lui, est exporté AVEC sa boîte (viewBox
   109 × 111) : contain est déjà exact, on n'y touche pas. Borné au desktop :
   en mobile la boîte tombe à 52px et garde contain. */
@media (min-width: 782px) {

	.medianes-picto--clock {
		background-size: 100px 74px;
		background-position: 4px 17px;
	}

	.medianes-picto--users {
		background-size: 94px 78px;
		background-position: 7px 18px;
	}

	.medianes-picto--user-check {
		background-size: 94px 90px;
		background-position: 8px 11px;
	}

	.medianes-picto--euro {
		background-size: 102px 86px;
		background-position: 3px 15px;
	}

	.medianes-picto--award {
		background-size: 63px 94px;
		background-position: 6px 8px;
	}
}

/* Repli masque Lucide pour les valeurs sans illustration dédiée (calendar,
   map-pin, target, check — « award » a désormais la sienne, voir ci-dessus).
   Même boîte que les illustrés — sinon les libellés des cases ne partent pas de
   la même ligne — mais glyphe limité à 64px : un trait Lucide gonflé à 108px
   serait difforme. Ne PAS remettre ici une valeur qui reçoit une illustration :
   le masque découperait l'image. */
.medianes-picto--calendar,
.medianes-picto--map-pin,
.medianes-picto--target,
.medianes-picto--check {
	background-color: var(--wp--preset--color--bleu-08);
	-webkit-mask: var(--medianes-picto) left center / 64px no-repeat;
	mask: var(--medianes-picto) left center / 64px no-repeat;
}


.medianes-picto--calendar {
	--medianes-picto: url(assets/icon-calendar.svg);
}

.medianes-picto--map-pin {
	--medianes-picto: url(assets/icon-map-pin.svg);
}

.medianes-picto--target {
	--medianes-picto: url(assets/icon-target.svg);
}

.medianes-picto--check {
	--medianes-picto: url(assets/icon-check.svg);
}

/* Hiérarchie du repère (496:14777) : l'INTITULÉ est le grand texte (Degular
   Medium 26, H4) et la VALEUR la petite ligne mono dessous — l'intégration
   initiale l'avait inversée (intitulé en mono capitales, valeur en grand). */
.medianes-formation__point-titre {
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-4);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__point-valeur {
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
}

/* Bouton « Télécharger le programme » (#67). */
.medianes-formation__telecharger {
	margin-top: var(--wp--preset--spacing--regulier);
}

/* Galerie d'images (maquette 5196:17878 : une rangée de 3 puis une rangée de 2 plus
   grandes, même ratio ~657/429, gouttière double). */
.medianes-formation__galerie {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--double);
	margin-block: var(--wp--preset--spacing--grand);
}

.medianes-formation__galerie-rangee {
	display: grid;
	gap: var(--wp--preset--spacing--double);
	margin: 0;
	padding: 0;
	list-style: none;
}

.medianes-formation__galerie-rangee--3 {
	grid-template-columns: repeat(3, 1fr);
}

.medianes-formation__galerie-rangee--2 {
	grid-template-columns: repeat(2, 1fr);
}

.medianes-formation__galerie-item {
	aspect-ratio: 657 / 429;
	border-radius: 6px;
	overflow: hidden;
	background: var(--wp--preset--color--bleu-01);
}

.medianes-formation__galerie-item img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* Corps : accordéons + colonne sessions */
.medianes-formation__corps {
	display: grid;
	grid-template-columns: minmax(0, 1fr) 494px;
	gap: var(--wp--preset--spacing--double);
	align-items: start;
	margin-block: var(--wp--preset--spacing--grand);
}

.medianes-formation__h2 {
	margin: 0 0 var(--wp--preset--spacing--regulier);
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--h-3);
	color: var(--wp--preset--color--bleu-08);
}

/* Volets accordéon : la formation réutilise le composant partagé « Champ déployable »
   (.medianes-accordeon, même carte blanche + ombre bleue que la FAQ). Seul le CORPS
   reste spécifique (paragraphe + checklist + lien). */
.medianes-formation__accordeon-corps {
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__accordeon-corps>* {
	margin-block: 0;
}

.medianes-formation__accordeon-corps>*+* {
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-formation__accordeon-corps p {
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.2;
}

.medianes-formation__coches {
	list-style: none;
	padding: 0;
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
}

.medianes-formation__coches li {
	position: relative;
	padding-left: calc(24px + var(--wp--preset--spacing--petit));
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.2;
}

.medianes-formation__coches li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0;
	width: 24px;
	height: 24px;
	background: url(assets/icon-check.svg) center / contain no-repeat;
}

/* Lien « Lien » en bas de volet : picto chaîne + libellé souligné, aligné à droite. */
.medianes-formation__lien {
	margin: 0;
	text-align: right;
}

.medianes-formation__lien a {
	display: inline-flex;
	align-items: center;
	gap: var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--corps);
	color: var(--wp--preset--color--bleu-08);
	text-decoration: underline;
}

.medianes-formation__lien-icone {
	flex: none;
	width: 24px;
	height: 24px;
	background: url(assets/icon-link.svg) center / contain no-repeat;
}

/* Bouton « Télécharger le programme » : picto download avant le libellé. */
.medianes-formation__telecharger .wp-block-button__link {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	font-size: var(--wp--preset--font-size--chapo);
}

.medianes-formation__telecharger .medianes-formation__dl-icone {
	flex: none;
	width: 24px;
	height: 24px;
	background: url(assets/icon-download.svg) center / contain no-repeat;
}

/* Bordure 0.5px conforme au token (surcharge ciblée du style outline global, spécificité > .is-style-outline). */
.medianes-formation__telecharger .wp-block-button.is-style-outline .wp-block-button__link {
	border-width: 0.5px;
}

/* Sessions (colonne sticky) */
.medianes-formation__sessions {
	position: sticky;
	/* Recette #100 : header + sous-header sticky → offset combiné. */
	top: calc(var(--medianes-header-h) + 56px + var(--wp--preset--spacing--gouttiere));
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--regulier);
}

/* Carte « Prochaine session » : blanc, ombre bleue douce, contenu centré. */
.medianes-formation__session {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--regulier);
	background: var(--wp--preset--color--blanc);
	border-radius: 6px;
	box-shadow: 0 1px 12px var(--wp--preset--color--bleu-02);
	padding: var(--wp--preset--spacing--regulier);
	text-align: center;
}

.medianes-formation__session-tete {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--micro);
}

.medianes-formation__session-label {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__session-dates {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-3);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__session-filet {
	width: 100%;
	height: 0;
	margin: 0;
	border: 0;
	border-top: 1px solid var(--wp--preset--color--bleu-02);
}

.medianes-formation__session-meta {
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: 20px;
}

.medianes-formation__session-ligne {
	display: flex;
	flex-direction: column;
	align-items: center;
}

.medianes-formation__session-meta dt {
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-4);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__session-meta dd {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__session-contact {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 5px;
}

.medianes-formation__session-contact-titre {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-4);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__session-contact-nom {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__session-contact-lien {
	margin: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__session-contact-icone {
	flex: none;
	width: 24px;
	height: 24px;
	background: url(assets/icon-mail.svg) center / contain no-repeat;
}

.medianes-formation__session-contact-lien a {
	color: var(--wp--preset--color--bleu-08);
	text-decoration: underline;
}

/* Bande CTA */
.medianes-formation__cta-bande {
	margin-block: var(--wp--preset--spacing--grand);
	padding: var(--wp--preset--spacing--triple) var(--wp--preset--spacing--gouttiere);
	border-radius: 6px;
	text-align: center;
	/* Cible de l'ancre #candidater du CTA hero : dégager la pile header + sous-header sticky. */
	scroll-margin-top: calc(var(--medianes-header-h) + 56px + var(--wp--preset--spacing--gouttiere));
}

.medianes-formation__cta-titre {
	margin: 0 0 var(--wp--preset--spacing--regulier);
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--h-3);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__cta-action .wp-block-buttons {
	justify-content: center;
}

/* Avis : la section « Avis de nos clients » réutilise le composant de l'accueil
   (classes .medianes-avis*), rendu via do_blocks dans le bloc formation-details. */

/* FAQ */
.medianes-formation__faq {
	margin-bottom: var(--wp--preset--spacing--grand);
}

@media (max-width: 1024px) {

	.medianes-formation__corps {
		grid-template-columns: 1fr;
	}

	.medianes-formation__sessions {
		position: static;
	}

	/* Palier tablette : éviter 5 repères serrés entre 782 et 1024px. */
	.medianes-formation__points {
		grid-template-columns: repeat(3, 1fr);
	}
}

@media (max-width: 781px) {

	.medianes-formation__tete-grille {
		flex-direction: column;
	}

	/* Recette mobile 2026-07-27 (node 2310:12179) : le visuel doit suivre le
	   texte (le DOM le place déjà après .medianes-formation__tete-corps —
	   l'ancien `order:-1` le faisait passer AVANT à tort) et occuper la
	   pleine largeur (Figma : visuel quasi plein cadre, pas 220px). */
	.medianes-formation__tete-visuel,
	.medianes-formation .medianes-visuel-placeholder {
		flex-basis: auto;
		max-width: none;
	}

	/* Recette mobile 2026-07-27 (node 2346:12047) : 1 repère par ligne (au
	   lieu de 2 colonnes), en ligne icône+texte (au lieu d'empilé), picto
	   réduit à 52px (au lieu de 64px). */
	.medianes-formation__points {
		grid-template-columns: 1fr;
	}

	.medianes-formation__point {
		flex-direction: row;
		align-items: center;
	}

	.medianes-formation__point-icone {
		flex-shrink: 0;
		width: 52px;
		height: 52px;
	}

	/* Galerie : deux images par rangée et gouttière réduite sur mobile. */
	.medianes-formation__galerie {
		gap: var(--wp--preset--spacing--regulier);
	}

	.medianes-formation__galerie-rangee--3,
	.medianes-formation__galerie-rangee--2 {
		grid-template-columns: repeat(1, 1fr);
		gap: var(--wp--preset--spacing--regulier);
	}
}

/* Placeholder éditorial générique (zones image/visuel à fournir, pages éditoriales).
   Bloc remplaçable par Baptiste (image, vidéo…) dans « Modifier la page ».
---------------------------------------------------------------------------- */
.medianes-placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 220px;
	background: var(--wp--preset--color--bleu-02);
	border-radius: 6px;
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	text-transform: uppercase;
	letter-spacing: 1px;
	text-align: center;
	padding: var(--wp--preset--spacing--regulier);
}

.medianes-placeholder--carre {
	aspect-ratio: 1 / 1;
	min-height: 0;
}

.medianes-placeholder--portrait {
	aspect-ratio: 3 / 4;
	min-height: 0;
}

/* Recette #91 : textes de la page À propos en bleu-08 (« bleu/700 » du design
   system) au lieu du bleu-09 near-black hérité par défaut. Ciblage par slug
   (classe posée dans functions.php), agnostique de l'ID de page. */
body.medianes-page-a-propos,
body.medianes-page-mon-compte {
	color: var(--wp--preset--color--bleu-08);
}

/* Recette #100 : sur /a-propos/, blockGap parent = 24px (interne à un bloc).
   Les H2 marquent une nouvelle section → 72px avant, sauf le premier H2 s'il
   suit immédiatement l'ouverture de la carte. */
.medianes-carte-page>h2 {
	margin-top: var(--wp--preset--spacing--triple);
}

/* Les H3 de sous-section (Nos bureaux, La direction, Les membres…) prennent 48px
   pour une hiérarchie lisible 72 (section) / 48 (sous-section) / 24 (contenu). */
body.medianes-page-a-propos .medianes-carte-page>h3 {
	margin-top: var(--wp--preset--spacing--double);
}

/* Rangées de cards successives (bios de l'équipe, chronologie) : l'écart VERTICAL
   entre deux rangées s'aligne sur la gouttière horizontale des cards (48px). Sans
   cela les rangées paraissaient tassées par rapport aux colonnes (recette #100). */
body.medianes-page-a-propos .medianes-carte-page>.wp-block-columns+.wp-block-columns {
	margin-top: var(--wp--preset--spacing--double);
}

/* Le <main> des pages ne porte plus de marge haut/bas (fonds de page collés au
   header et au footer) : marges retirées de tous les templates. */

/* Charte éditoriale et déontologique : contenu migré de Ghost en HTML brut (pas
   de blocs Gutenberg) — même gabarit "page-libre" et même carte blanche que
   /mentions-legales/, à la demande de Baptiste (recette 2026-07-28). Le
   contenu est inséré tel quel dans un bloc HTML personnalisé (pour ne rien
   casser dans les liens/ancres migrés) : on stylise donc les balises brutes
   avec les mêmes tokens que les paragraphes/titres de Mentions légales,
   plutôt que des classes de bloc. */
body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content p,
body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content li {
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.2;
}

body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content h2 {
	margin-top: var(--wp--preset--spacing--gouttiere);
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--h-4);
	font-weight: 500;
	line-height: 1;
}

/* H3 absent de Mentions légales (pas de sous-section) : un cran sous le H2,
   même famille/couleur, taille "chapo" (22px) pour garder 72/48/24 lisible. */
body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content h3 {
	margin-top: var(--wp--preset--spacing--double);
	color: var(--wp--preset--color--bleu-08);
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--chapo);
	font-weight: 500;
	line-height: 1.1;
}

body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content ul,
body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content ol {
	margin: var(--wp--preset--spacing--regulier) 0;
	padding-left: var(--wp--preset--spacing--regulier);
}

body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content ul ul,
body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content ol ol {
	margin: 0;
}

body.medianes-page-charte-editoriale-et-deontologique .wp-block-post-content hr {
	border: none;
	border-top: 1px solid var(--wp--preset--color--bleu-01);
	margin: var(--wp--preset--spacing--gouttiere) 0;
}

/* Encadré Ghost (`kg-callout-card`) — 563 encadrés dans 268 articles.
   Hors design system Figma : aucun node ne décrit ce composant. Arbitrage de
   Baptiste du 2026-08-10 : fond bleu-01, UNE SEULE variante.

   Cette règle était auparavant limitée à la page « charte éditoriale », seul
   endroit où le composant avait été rencontré ; elle est généralisée à tout
   contenu (`.wp-block-post-content` couvre les articles, les pages et les
   gabarits de CPT qui copient single.html). Sans elle, l'encadré n'avait ni fond,
   ni padding, ni bordure : il était indistinguable d'un paragraphe, alors que
   c'est le dispositif éditorial signature de Médianes.

   Les valeurs reprennent l'intention du Ghost encore en ligne, mesurée puis
   retraduite en tokens (voir docs/proposition-reprise-composants-ghost.md § 1) :
   disposition en flex avec l'émoji à gauche du texte — il tombait seul sur sa
   propre ligne, `kg-callout-emoji` étant un `div` — et coins carrés, que le thème
   Ghost impose explicitement en écrasant le `border-radius: 8px` par défaut.
   Padding `regulier` (24px) et non les 32px de Ghost : la colonne fait ici 600px
   contre 708px là-bas.

   UNE SEULE variante : Ghost distinguait `-grey` (279) et `-blue` (278) sans que
   la distinction paraisse éditorialement signifiante. Cibler `.kg-callout-card`
   les uniformise sans avoir à neutraliser les deux classes. */
.wp-block-post-content .kg-callout-card {
	display: flex;
	align-items: flex-start;
	gap: var(--wp--preset--spacing--petit);
	padding: var(--wp--preset--spacing--regulier);
	background: var(--wp--preset--color--bleu-01);
	border-radius: 0;
}

.wp-block-post-content .kg-callout-emoji {
	flex: 0 0 auto;

	/* Aligne l'émoji sur la première ligne de texte, dont le line-height vaut
	   1.45 (règle `.medianes-article__contenu p`). */
	line-height: 1.45;
}

/* Deux encadrés consécutifs : Ghost les espace, sans quoi les fonds se touchent
   et se lisent comme un seul bloc. */
.wp-block-post-content .kg-callout-card+.kg-callout-card {
	margin-top: var(--wp--preset--spacing--regulier);
}

/* Encadré SANS émoji (2026-09-22, ADR-038) : les éditions de newsletter importées
   de Brevo enveloppent plusieurs blocs — titre, paragraphes, liste, bouton — dans
   ce même encadré (décision Baptiste : l'encart du site, pas une classe nouvelle).
   En flex ligne, ces blocs se rangeaient côte à côte, en colonnes d'un mot de
   large (recette de la première édition importée). Sans émoji, il n'y a rien à
   aligner horizontalement : l'encadré redevient un flux normal. Les encadrés
   Ghost (émoji + texte) ne sont pas touchés. Premier et dernier enfant sans
   marge extérieure : c'est le padding de l'encadré qui espace. */
.wp-block-post-content .kg-callout-card:not(:has(> .kg-callout-emoji)) {
	display: block;
}

.wp-block-post-content .kg-callout-card:not(:has(> .kg-callout-emoji))> :first-child {
	margin-top: 0;
}

.wp-block-post-content .kg-callout-card:not(:has(> .kg-callout-emoji))> :last-child {
	margin-bottom: 0;
}

/* Carte de lien Ghost (`kg-bookmark-card`) — 19 cartes dans 7 articles.
   Hors design system Figma, comme l'encadré. Même méthode : structure et intention
   reprises du Ghost encore en ligne, valeurs retraduites en tokens Médianes (voir
   docs/proposition-reprise-composants-ghost.md § 3).

   Avant : aucun style. Titre et description empilés en liens soulignés, favicon de
   256 px affiché EN PLEINE LARGEUR de colonne, auteur et éditeur concaténés sans
   séparateur (« MédianesL'équipe de Médianes »), vignette en pleine largeur —
   701 px de haut pour ce qui doit être une carte compacte.

   ── Le piège : wpautop dédouble la carte ──────────────────────────────────────
   Le HTML de Ghost place des `<div>` de bloc DANS un `<a>`. `wpautop` n'aime pas :
   au rendu il injecte un `<p>` vide en tête d'ancre, ferme l'ancre trop tôt, et
   réouvre une seconde `.kg-bookmark-container` VIDE dans un `<p>` en fin de figure.
   Mesuré : 4 cartes en base → **8 conteneurs dans le DOM**, dont 4 vides.
   Styler `.kg-bookmark-container` sans précaution dessinerait donc une boîte vide
   sous chaque carte. Les deux règles de neutralisation ci-dessous s'en chargent —
   même parti que celui pris pour les conteneurs vides en général : on neutralise
   la boîte plutôt que d'aller corriger le rendu.
   La cause étant au rendu et non en base, un correctif propre passerait par un
   filtre `the_content` ; ce n'est pas fait, le CSS suffit et ne risque rien
   ailleurs. */

.wp-block-post-content .kg-bookmark-card {
	margin: var(--wp--preset--spacing--regulier) 0;
}

/* Le `<p>` parasite en fin de figure ne contient que l'ancre vide dédoublée par
   wpautop : le masquer sur l'ancre seule laisserait les marges du paragraphe. */
.wp-block-post-content .kg-bookmark-card>p {
	display: none;
}

.wp-block-post-content a.kg-bookmark-container {
	display: flex;
	align-items: stretch;
	overflow: hidden;
	background: var(--wp--preset--color--blanc);
	color: var(--wp--preset--color--bleu-08);
	text-decoration: none;
}

/* Le `<p>` vide injecté en tête d'ancre : en contexte flex il deviendrait un
   élément à part entière et ses marges décaleraient la carte. */
.wp-block-post-content a.kg-bookmark-container>p:empty {
	display: none;
}

.wp-block-post-content .kg-bookmark-content {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	align-items: flex-start;
	gap: var(--wp--preset--spacing--micro);
	padding: var(--wp--preset--spacing--regulier);
}

.wp-block-post-content .kg-bookmark-title {
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 600;
	line-height: 1.2;
}

/* Ghost tronque la description à deux lignes : sans cela une description longue
   étire la carte et lui fait perdre son format de carte. */
.wp-block-post-content .kg-bookmark-description {
	display: -webkit-box;
	overflow: hidden;
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.35;
	color: var(--wp--preset--color--gris-fonce);
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
}

.wp-block-post-content .kg-bookmark-metadata {
	display: flex;
	flex-wrap: wrap;
	align-items: center;

	/* Remplace la puce `::before` de Ghost : règle du même coup les libellés
	   concaténés (« MédianesL'équipe de Médianes »). */
	gap: var(--wp--preset--spacing--micro);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	line-height: 1.4;
	color: var(--wp--preset--color--gris-fonce);
}

/* Favicon : 256 px dans le fichier, 24 px à l'écran comme chez Ghost. */
.wp-block-post-content .kg-bookmark-icon {
	flex: 0 0 auto;
	width: 24px;
	height: 24px;
	object-fit: contain;
}

.wp-block-post-content .kg-bookmark-thumbnail {
	flex: 0 0 200px;
	align-self: stretch;
}

.wp-block-post-content .kg-bookmark-thumbnail img {
	display: block;
	width: 100%;
	height: 100%;

	/* `cover` sur une vignette d'aspect quelconque : sans hauteur imposée l'image
	   dicterait la hauteur de la carte. */
	object-fit: cover;
}

/* Sous 600px la vignette et le texte ne tiennent plus côte à côte : à 200px de
   vignette il ne resterait que ~140px de colonne de texte. La carte s'empile,
   vignette en tête, hauteur bornée pour qu'elle ne mange pas l'écran. */
@media (max-width: 600px) {

	.wp-block-post-content a.kg-bookmark-container {
		flex-direction: column-reverse;
	}

	.wp-block-post-content .kg-bookmark-thumbnail {
		flex: 0 0 auto;
		height: 160px;
	}
}

/* Nav d'ancres (pages éditoriales longues : À propos…) — recette #91 : bandeau
   pleine largeur fond bleu-00 avec ombre basse, comme un sous-header (maquette
   450:14399). Survol = barre 3px sous le mot (pas de soulignement texte).
   Recette #100 : sticky sous le header (top = hauteur du header). */
.medianes-ancres {
	position: sticky;
	top: var(--medianes-header-h);
	z-index: 70;
	background: var(--wp--preset--color--bleu-00);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	gap: var(--wp--preset--spacing--gouttiere);
}

/* Cibles d'ancres : décalées de header + subnav pour ne pas passer dessous.
   Générique à toute page dotée d'un bandeau d'ancres (À propos, FAQ…). */
main:has(.medianes-ancres) :is(h1, h2, h3)[id] {
	scroll-margin-top: calc(var(--medianes-header-h) + 56px);
}

/* Contenu collé au header (sous-header → main) sur tout le site : on annule le
   block-gap racine posé au-dessus du <main>. */
.wp-site-blocks>main {
	margin-block-start: 0;
}

/* Écart standard avant le footer : grand (96px, valeur d'origine des gabarits —
   c'était le margin-bottom du <main> avant la passe « fonds collés »). Le cœur
   pose « margin-top:0 !important » sur TOUTE template-part
   (:root :where(.wp-block-template-part)) ; restaurer l'écart impose donc un
   !important de spécificité supérieure (override cœur documenté, doctrine §6).
   Ramené à 0 (fond collé au footer) uniquement sur les pages voulues par la
   maquette : À propos, Mentions légales, Job board (archive « mission »),
   Veille (archive « veille »). Recette 2026-07-27. Charte éditoriale et
   déontologique ajoutée le 2026-07-28 (même gabarit/carte que Mentions
   légales, cf. figma-inventaire.md). */
.wp-site-blocks>footer.wp-block-template-part {
	margin-top: var(--wp--preset--spacing--grand) !important;
}

body.medianes-page-a-propos .wp-site-blocks>footer.wp-block-template-part,
body.medianes-page-club .wp-site-blocks>footer.wp-block-template-part,
body.medianes-page-mon-compte .wp-site-blocks>footer.wp-block-template-part,
body.medianes-page-mentions-legales .wp-site-blocks>footer.wp-block-template-part,
body.medianes-page-charte-editoriale-et-deontologique .wp-site-blocks>footer.wp-block-template-part,
body.post-type-archive-mission .wp-site-blocks>footer.wp-block-template-part,
body.post-type-archive-veille .wp-site-blocks>footer.wp-block-template-part,
/* Single projet ajouté le 2026-08-03 (consigne Noé) : la page finit sur la bande
   bleu-00 « Projets similaires », dont la couleur doit rejoindre le footer sans
   bande blanche intercalaire. */
body.single-cas_client .wp-site-blocks>footer.wp-block-template-part {
	margin-top: 0 !important;
}

.single-cas_client {

	h2 {
		font-size: 40px !important;
		font-family: "degular-variable";
		font-weight: 500;
	}

	h3 {
		margin-top: 12px;
		font-size: 26px !important;
	}
}

/* Idem quand la page finit par une bande pleine largeur colorée : la couleur
   doit courir jusqu'au footer, sans liseré blanc (consigne Noé 2026-08-03,
   relevé sur les pages de détail de service dont la FAQ bleu-00 est la dernière
   section — conforme au node 2047:29383). Règle générique : `:has()` sur le
   dernier enfant du contenu, donc valable pour toute page bâtie ainsi.

   FORMATIONS (2026-09-23, ticket Baptiste : « retirer le bandeau blanc en bas de
   page »). Leur FAQ, la bande `medianes-faq-bande`, prend la pleine largeur par la
   mise en page du contenu, sans la classe `alignfull` : la règle ne la voyait pas,
   d'où 96px de blanc avant le footer, et 144 en mobile. Les 48px de plus venaient
   de la marge basse que la règle mobile de rythme (plus haut, `!important`) pose
   sur chaque bloc du contenu ET sur le conteneur du contenu. La seconde règle
   ci-dessous l'annule sur ces deux éléments seulement, avec un `!important` de
   spécificité supérieure : même override documenté. Mesuré avant et après sur les
   152 pages de contenu, à 1440 et 390px : seules les deux formations changent.
   Les encarts colorés en `alignwide` (CTA de fin de page) ne sont pas concernés :
   ce sont des cartes, et le blanc sous elles est voulu. */
body:has(.wp-block-post-content > *:last-child.has-background:is(.alignfull, .medianes-faq-bande)) .wp-site-blocks>footer.wp-block-template-part {
	margin-top: 0 !important;
}

body:has(.wp-block-post-content > *:last-child.has-background:is(.alignfull, .medianes-faq-bande)) :is(.wp-site-blocks > main > .wp-block-post-content:last-child, .wp-block-post-content > *:last-child) {
	margin-bottom: 0 !important;
}

/* Les libellés sont dans des <p> : on les efface de la mise en page (display:
   contents) pour que les liens soient les items flex du bandeau, avec un padding
   vertical propre — la barre active tombe alors au ras du bas du bandeau (comme
   le sous-header d'univers), pas flottante sous le mot. Le padding vertical du
   groupe est mis à 0 côté contenu. */
.medianes-ancres p {
	display: contents;
}

.medianes-ancres a {
	/* Colonne flex : le libellé visible + un fantôme en graisse 700 (::after,
	   hauteur 0) → la largeur du lien est toujours celle de l'état actif, donc
	   le bandeau ne se recentre pas quand le scrollspy passe un item en gras. */
	display: inline-flex;
	flex-direction: column;
	align-items: center;
	padding-top: var(--wp--preset--spacing--petit);
	padding-bottom: var(--wp--preset--spacing--petit);
	border-bottom: 3px solid transparent;
	color: var(--wp--preset--color--bleu-08);
	text-decoration: none;
	line-height: 1.2;
}

.medianes-ancres a[data-label]::after {
	content: attr(data-label);
	height: 0;
	overflow: hidden;
	visibility: hidden;
	font-weight: 700;
	pointer-events: none;
}

/* Survol = barre 3px. Actif (section en cours, classe posée par ancres.js) =
   gras + barre, comme le sous-header d'univers. */
.medianes-ancres a:hover,
.medianes-ancres a:focus-visible,
.medianes-ancres a.is-active {
	border-bottom-color: var(--wp--preset--color--bleu-08);
}

.medianes-ancres a.is-active {
	font-weight: 700;
}

/* Carte « méthodologie » / bio / jalon (pages éditoriales) : recette légère,
   éditable (groupe + placeholder + titre + texte). */
.medianes-bio__role {
	color: var(--wp--preset--color--gris-bleu);
}

/* Offres / tarifs : carte « bloc avec liste » (node 5098:20162) — Tarifs & Nos services.
---------------------------------------------------------------------------- */
.medianes-offres {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	/* Gouttière de cards : 48px (`double`), pas 40px (`gouttiere`). */
	gap: var(--wp--preset--spacing--double);
	align-items: stretch;
}

/* Le bloc est rendu en layout « flow » : le cœur pose un margin-block-start sur
   les enfants après le 1er, qui décalait les cartes 2 et 3 vers le bas dans la
   grille. On l'annule (le gap de grille gère l'espacement). */
.medianes-offres>* {
	margin-block: 0;
}

/* Cartes tarif à hauteur égale, prix aligné en bas (maquette). */
.medianes-offre {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--regulier);
	height: 100%;
	background: var(--wp--preset--color--blanc);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--regulier);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
}

/* /nos-services/ : cartes calées en haut, hauteur ajustée au contenu (demande
   Baptiste). Scopé à la page pour préserver la hauteur égale de /tarifs/. */
body.medianes-page-nos-services .medianes-offres {
	align-items: start;
}

body.medianes-page-nos-services .medianes-offre {
	height: auto;
}

.medianes-offre__titre {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-3);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-offre__liste {
	margin: 0;
	padding: 0;
	list-style: none;
}

.medianes-offre__liste li {
	position: relative;
	padding-left: calc(24px + var(--wp--preset--spacing--petit));
	margin-bottom: var(--wp--preset--spacing--petit);
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-offre__liste li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0;
	width: 24px;
	height: 24px;
	background: url(assets/icon-check.svg) center / contain no-repeat;
}

.medianes-offre__prix {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	color: var(--wp--preset--color--bleu-08);
}

/* Page « Notre livre » (spec Dev Mode 2435:16195) : titre Loretta 54, prix
   h-4, corps Loretta Light 22/1.25, visuel principal sur carte bleu-01. */
.medianes-livre__prix {
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-4);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-livre__texte {
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--chapo);
	line-height: 1.25;
}

.medianes-livre__liste {
	margin: 0;
	padding-left: 1.1em;
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--chapo);
	line-height: 1.25;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-livre-visuel {
	border-radius: 6px;
	overflow: hidden;
	aspect-ratio: 1 / 1;
	display: flex;
	align-items: center;
	justify-content: center;
}

.medianes-livre-visuel__img,
.medianes-livre-visuel__img img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	margin: 0;
}

.medianes-livre__miniatures img {
	border-radius: 6px;
	aspect-ratio: 1 / 1;
	object-fit: cover;
	width: 100%;
}

/* Galerie produit /livre/ (livre-galerie.js) : miniature cliquable,
   image affichée en grand. Bordure 2px transparente réservée pour l'état actif
   — évite un saut de taille au clic. */
.medianes-livre__miniature {
	cursor: pointer;
	border: 2px solid transparent;
	transition: border-color 0.15s ease, opacity 0.15s ease;
}

.medianes-livre__miniature:hover,
.medianes-livre__miniature:focus-visible {
	opacity: 0.85;
}

.medianes-livre__miniature.is-active {
	border-color: var(--wp--preset--color--bleu-08);
}

/* Visionneuse de la galerie /livre/ (lightbox, 2026-09-23)
----------------------------------------------------------------------------
   ÉCRAN NON MAQUETTÉ. Aucune valeur neuve : le fond reprend la teinte du
   backdrop de la modale de compte (rgb(0 0 41)), assombrie pour que l'image
   se détache ; les boutons reprennent la pastille de `.medianes-modale__fermer`
   (fond bleu-01 au survol), en blanc sur fond sombre, et le rayon de 6px des
   visuels de la page.

   Rendu par `medianes_livre_lightbox()` (functions.php), piloté par
   `assets/livre-galerie.js`. Le <dialog> occupe tout l'écran : un clic hors de
   l'image et des boutons tombe sur lui, et ferme. */
.medianes-livre-visuel__agrandir {
	cursor: zoom-in;
}

.medianes-lightbox {
	width: 100vw;
	max-width: none;
	height: 100dvh;
	max-height: none;
	margin: 0;
	padding: var(--wp--preset--spacing--regulier);
	border: 0;
	background: transparent;
	color: var(--wp--preset--color--blanc);
	box-sizing: border-box;
}

.medianes-lightbox::backdrop {
	background: rgb(0 0 41 / 90%);
}

.medianes-lightbox[open] {
	display: grid;
	grid-template:
		"fermer fermer fermer" auto
		"prec image suiv" minmax(0, 1fr) "compteur compteur compteur" auto
		/ auto minmax(0, 1fr) auto;
	align-items: center;
	gap: var(--wp--preset--spacing--petit) var(--wp--preset--spacing--regulier);
}

.medianes-lightbox__figure {
	grid-area: image;
	display: flex;
	align-items: center;
	justify-content: center;
	height: 100%;
	min-height: 0;
	margin: 0;
}

.medianes-lightbox__img {
	display: block;
	max-width: 100%;
	max-height: 100%;
	width: auto;
	height: auto;
	object-fit: contain;
	border-radius: 6px;
}

.medianes-lightbox__bouton {
	width: 48px;
	height: 48px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: var(--wp--preset--color--blanc);
	line-height: 0;
	cursor: pointer;
}

.medianes-lightbox__bouton:hover {
	background: var(--wp--preset--color--bleu-01);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-lightbox__bouton:focus-visible {
	outline: 2px solid var(--wp--preset--color--blanc);
	outline-offset: 2px;
}

.medianes-lightbox__fermer {
	grid-area: fermer;
	justify-self: end;
}

.medianes-lightbox__prec {
	grid-area: prec;
}

.medianes-lightbox__suiv {
	grid-area: suiv;
}

.medianes-lightbox__compteur {
	grid-area: compteur;
	margin: 0;
	text-align: center;
	font-size: var(--wp--preset--font-size--note);
}

/* Sur mobile, les flèches passent sous l'image, de part et d'autre du
   compteur : de chaque côté, elles lui prendraient un tiers de la largeur. */
@media (max-width: 781px) {

	.medianes-lightbox[open] {
		grid-template:
			"fermer fermer fermer" auto
			"image image image" minmax(0, 1fr) "prec compteur suiv" auto
			/ auto minmax(0, 1fr) auto;
		padding: var(--wp--preset--spacing--petit);
	}
}

/* Variante « sortie de site » du lien flèche : ↗ au lieu de →. */
.medianes-lien-fleche--sortie a::after {
	background-image: url(assets/icon-arrow-up-right.svg);
}

@media (max-width: 1024px) {

	.medianes-offres {
		grid-template-columns: 1fr;
	}
}

/* Picto dans un bouton (recette #45 : remplace les glyphes unicode ↗) */
.medianes-btn-picto {
	display: inline-block;
	width: 24px;
	height: 24px;
	vertical-align: middle;
}

/* Ticket #70 : dans un bouton, le picto suit la couleur du TEXTE (y compris au
   survol, où le texte passe en marine sur fond bleu-04). L'image sert de masque
   à un aplat currentColor ; son contenu bitmap est déplacé hors cadre. */
.wp-element-button img.medianes-btn-picto {
	background-color: currentcolor;
	object-fit: none;
	object-position: -999px -999px;
	-webkit-mask: var(--medianes-picto-mask) center / contain no-repeat;
	mask: var(--medianes-picto-mask) center / contain no-repeat;
}

.wp-element-button img.medianes-btn-picto[src*="arrow-right"] {
	--medianes-picto-mask: url(assets/icon-arrow-right.svg);
}

.wp-element-button img.medianes-btn-picto[src*="arrow-up-right"] {
	--medianes-picto-mask: url(assets/icon-arrow-up-right.svg);
}

.wp-element-button img.medianes-btn-picto[src*="arrow-left"] {
	--medianes-picto-mask: url(assets/icon-arrow-left.svg);
}

/* Visuel carré des cartes de projet.
   ─────────────────────────────────────────────────────────────────────────────
   Le format suit le TYPE DE CONTENU et non la page : dans la maquette, les
   instances « Petit article » de l'archive Projets (`2047:35566`) et celles de
   l'accueil Studio (`2961:36554`) ont exactement les mêmes dimensions,
   276 × 401 — même carte, visuel carré (`imgCarre`, 252px) dans les deux cas.
   Le visuel d'un projet est un logo de média, qui a besoin d'un cadre carré.

   Signalé par Noé le 2026-08-04 : les cartes de /projets/ ne ressemblaient pas
   à celles de l'accueil, parce que le carré venait d'une classe posée sur la
   grille (`--carre`) — donc présent sur l'archive seulement. `:has()` déplace la
   décision dans la carte elle-même, via l'étiquette de type qu'elle porte : un
   projet est carré partout, sans que la page ait à le savoir.

   La classe de grille reste prise en charge : elle sert encore aux quelques
   grilles non typées, et ne coûte rien. */
.medianes-cartes--carre .wp-block-post-featured-image img,
.medianes-cartes>.wp-block-post:has(.medianes-type-contenu--cas_client) .wp-block-post-featured-image img {
	aspect-ratio: 1 / 1;
}

/* Zone logo du média dans un avis client (recette #8). Tant que le logo n'est
   pas téléversé, l'emplacement reste visible (boîte placeholder). */
.medianes-avis__logo {
	margin: 0 0 var(--wp--preset--spacing--petit);
}

.medianes-avis__logo:not(:has(img)) {
	height: 40px;
	max-width: 160px;
	border-radius: 3px;
	background: var(--wp--preset--color--bleu-01);
}

.medianes-avis__logo img {
	max-height: 40px;
	width: auto;
}

/* Avis de l'accueil racine (node 432:17681) : portrait 60×60 + nom du média.
   Groupe portrait vide = zone éditable en attente de la photo (convention
   .medianes-avis__logo). */
.medianes-avis__portrait {
	width: 60px;
	height: 60px;
	flex-shrink: 0;
}

.medianes-avis__portrait:not(:has(img)) {
	background: var(--wp--preset--color--bleu-01);
	border-radius: 3px;
}

.medianes-avis__portrait img {
	width: 60px;
	height: 60px;
	object-fit: cover;
}

/* Mention RGPD sous les formulaires newsletter (recette #10) */
.medianes-form-nl__rgpd,
.medianes-newsletter__rgpd,
.medianes-nl-bar__legal {
	margin: var(--wp--preset--spacing--micro) 0 0;
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
}



/* Bouton « Traduire » — RETIRÉ le 2026-08-07 (demande Baptiste) : il faisait
   doublon avec le sélecteur de langue du header, désormais présent sur toutes
   les pages. Une cinquantaine de lignes d'habillage ont été supprimées avec lui
   (contour 0,5px, pictos Lucide languages/chevron-down, pleine largeur de
   colonne, et le calage à 24px de padding qui lui évitait de passer sur deux
   lignes dans ses 276px — recette #53, consigne Noé du 2026-08-03).
   L'historique git garde le tout si le bouton devait revenir ; la colonne de
   droite des gabarits `single`, `single-podcast` et `single-fiche_pratique` est
   conservée, vide, pour tenir la longueur de ligne du titre. */

/* Bloc newsletter (medianes/newsletter → Brevo)
---------------------------------------------------------------------------- */
/* Titre en Loretta Light à TOUS les breakpoints (consigne Noé 2026-07-30 :
   même style que mobile, seule la taille peut différer — elle reste pilotée
   par le contexte : h-2 fluide via « .medianes-recirculation h2 » dans les
   bandes, chapo sinon, 48px fixes en mobile plus bas). */
.medianes-newsletter__titre {
	margin: 0 0 var(--wp--preset--spacing--regulier);
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--chapo);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

/* Respiration interne du bloc (consigne Noé 2026-07-30 : « tout est trop
   serré ») : 24px entre titre, intro et formulaire — le 12px générique de
   .medianes-form-nl et le 6px de la mention RGPD restaient calibrés pour
   l'ancien titre en 22px. Sélecteurs à 2 classes pour primer sur les règles
   génériques partagées (form-nl, rgpd). */
.medianes-newsletter .medianes-form-nl {
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-newsletter .medianes-newsletter__rgpd {
	margin-top: var(--wp--preset--spacing--petit);
}

/* Recette mobile (consignes Noé 2026-07-29 puis 2026-07-30) : sur mobile, le
   titre du bloc newsletter garde le Loretta Light mais à la taille H3 (préset
   fluide, 28px à 393px) — le 48px initial prenait trop de place à l'écran.
   Vaut pour toutes les instances du bloc (recirculation NL, NL côté, page
   Newsletters…). Le NL compact (carte du menu mobile) est un autre composant,
   non concerné. Sélecteur à 2 classes : « .medianes-recirculation h2 »
   (h-2 fluide → 34px à 393px) doit perdre. */
@media (max-width: 781px) {
	.medianes-newsletter .medianes-newsletter__titre {
		font-family: var(--wp--preset--font-family--loretta);
		font-weight: 300;
		font-size: var(--wp--preset--font-size--h-3);
		line-height: 1;
	}
}

.medianes-newsletter__intro {
	margin: 0;
	color: var(--wp--preset--color--bleu-08);
}

/* Lien « Voir toutes les newsletters » intercalé entre l'intro et le formulaire. */
.medianes-newsletter__lien {
	margin: var(--wp--preset--spacing--petit) 0 0;
}

.medianes-newsletter__status {
	margin: var(--wp--preset--spacing--petit) 0 0;
	min-height: 1.3em;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-newsletter__status.is-error {
	color: var(--wp--preset--color--bleu-07);
}

/* Page Newsletters : cartes « NL - optin » (spec Dev Mode 480:24464 :
   encre bleu-10, cover carrée, gouttières 48)
---------------------------------------------------------------------------- */
.medianes-nl-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: var(--wp--preset--spacing--double);
}

.medianes-nl-optin {
	gap: var(--wp--preset--spacing--regulier);
	background: var(--wp--preset--color--blanc);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--regulier);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
}

.medianes-nl-optin__cover {
	display: block;
	width: 100%;
	aspect-ratio: 1 / 1;
	border-radius: 6px;
	background: var(--wp--preset--color--bleu-02);
	object-fit: cover;
}

/* Recette #99 : variante « Alertes e-mail » (composant Figma 484:25035) : titre +
   intro, cartes à picto livre illustré + bascule Choisir/Retirer, bandeau en ligne. */
.medianes-nl-alertes__titre {
	margin: 0 0 var(--wp--preset--spacing--regulier);
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--h-2);
	line-height: 1;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-alertes__intro {
	margin: 0 0 var(--wp--preset--spacing--double);
	max-width: 720px;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--chapo);
	line-height: 1.15;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-grid--alertes {
	grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
}

.medianes-nl-optin--alerte {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	border: 1px solid transparent;
}

/* Carte sélectionnée : liseré encre (maquette). */
.medianes-nl-optin--alerte.is-selected {
	border-color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-optin__picto {
	display: block;
	width: 102px;
	height: auto;
}

/* Bandeau récapitulatif en ligne (pas le toaster fixe). */
.medianes-nl-bar--inline {
	position: static;
	margin-top: var(--wp--preset--spacing--double);
	border-radius: 6px;
	box-shadow: none;
}

/* Recette #99 — page single newsletter (template single-newsletter.html,
   maquette Figma 176:10176) : hero, inscription, témoignages, archives.
---------------------------------------------------------------------------- */
.medianes-nl-single__visuel {
	aspect-ratio: 1 / 1;
	width: 100%;
	max-width: 400px;
	margin-left: auto;
	border-radius: 6px;
	background: var(--wp--preset--color--bleu-01);
}

.medianes-nl-inscription__freq {
	margin: 0 0 var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-inscription__form {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--regulier);
	max-width: 560px;
}

.medianes-nl-inscription__form input[type="email"] {
	flex: 1 1 300px;
	padding: var(--wp--preset--spacing--micro) var(--wp--preset--spacing--petit);
	border: 0;
	border-radius: 6px;
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	font: 400 18px/1.2 var(--wp--preset--font-family--degular-text);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-nl-inscription__status {
	margin: var(--wp--preset--spacing--petit) 0 0;
	min-height: 1.3em;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-nl-inscription__status.is-error {
	color: var(--wp--preset--color--bleu-09);
}

/* Témoignages : cartes d'avis empilées (réutilise .medianes-avis__logo). */
.medianes-avis>*+* {
	margin-top: var(--wp--preset--spacing--petit);
}

.medianes-avis__citation {
	margin: 0 0 var(--wp--preset--spacing--regulier);
}

/* Parcourir les archives : liste d'éditions + pagination. */
.medianes-nl-archives__titre {
	margin: 0 0 var(--wp--preset--spacing--double);
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--h-2);
	line-height: 1;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-archives__row {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--regulier);
	padding: var(--wp--preset--spacing--regulier) 0;
	border-bottom: 1px solid var(--wp--preset--color--bleu-01);
	font-size: var(--wp--preset--font-size--corps);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-archives__num,
.medianes-nl-archives__date {
	flex: 0 0 auto;
	font-family: var(--wp--preset--font-family--degular-mono);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-nl-archives__titre-edition {
	flex: 1 1 auto;
}

.medianes-nl-archives__lien {
	flex: 0 0 auto;
	color: var(--wp--preset--color--bleu-10);
	text-decoration: underline;
	text-underline-position: from-font;
	white-space: nowrap;
}

.medianes-nl-archives__pagination {
	justify-content: center;
	margin-top: var(--wp--preset--spacing--double);
}

@media (max-width: 781px) {

	.medianes-nl-archives__row {
		flex-wrap: wrap;
		gap: 4px var(--wp--preset--spacing--petit);
	}

	.medianes-nl-archives__titre-edition {
		order: 3;
		flex-basis: 100%;
	}
}

/* LES INTERLIGNAGES DE LA CARTE SONT CEUX DU NODE `480:24464`, et ils ne sont pas
   tous égaux : fréquence (Degular Mono 15) **1,3**, nom (H4 26) **1**,
   description (Corps sans 18) **1,35**, « Sélectionner » (Corps sans 18)
   **1,35**, « Voir la newsletter » (Hyperlien 18) **1,3**.

   TROIS CONSIGNES LE 2026-09-21, dans cet ordre. (1) « Tous les textes dans les
   cartes doivent avoir le même interlignage : 135 % » — la carte en comptait
   alors cinq valeurs, mais fausses : 1,5 / 1 / 1,2 / 1,5 / 1,3, trois écrites
   ici et deux héritées. Tout est passé à 1,35, avec l'écart au node signalé.
   (2) « Garde le 1 du node pour les titres » — le nom est revenu à 1. (3)
   « Rends aussi la fréquence et l'hyperlien au node » — 1,3 pour les deux.

   Ce qui reste de la première consigne, et qui était le vrai défaut : la
   description et « Sélectionner » à 1,35, là où ils rendaient 1,2 et 1,5. Le
   dessin le disait déjà. */
.medianes-nl-optin__freq {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	/* Degular Mono 15 au node : interlignage 1,3. */
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-optin__nom {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-4);
	/* Style H4 du node : interlignage 1. Voir le commentaire ci-dessus. */
	line-height: 1;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-optin__desc {
	margin: 0;
	color: var(--wp--preset--color--bleu-10);
	line-height: 1.35;
}

/* Lien « Voir la newsletter » (recette #21) : Hyperlien Degular Medium 18/1,3. */
.medianes-nl-optin__voir {
	font-family: var(--wp--preset--font-family--degular);
	font-size: 18px;
	font-weight: 500;
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-10);
	text-decoration: underline;
	text-underline-position: from-font;
	/* Recette #99 : « Voir la newsletter » sur une seule ligne (pas de coupure). */
	white-space: nowrap;
}

@media (max-width: 1024px) {

	.medianes-nl-grid {
		grid-template-columns: 1fr;
	}
}

/* Bloc « Newsletters — sélection » (medianes/newsletters) : cases + barre fly-out
---------------------------------------------------------------------------- */
.medianes-newsletters .medianes-nl-optin {
	display: flex;
	flex-direction: column;
}

.medianes-nl-optin__pied {
	margin-top: auto;
	padding-top: var(--wp--preset--spacing--petit);
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--petit);
}

.medianes-nl-select {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	line-height: 1.35;
	cursor: pointer;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	color: var(--wp--preset--color--bleu-10);
}

/* « Vous êtes inscrit·e. » — prend la place exacte de la case à cocher pour une
   personne connectée et déjà abonnée (demande Baptiste, 2026-09-21). Mêmes
   famille, taille et interlignage que le libellé qu'elle remplace : la ligne de
   pied ne doit pas sauter d'une carte à l'autre selon l'état de la personne. */
.medianes-nl-optin__inscrit {
	margin: 0;
	line-height: 1.35;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	color: var(--wp--preset--color--bleu-10);
}

/* Case à cocher en pictos Lucide square / square-check (recette #11). */
/* Recette #97 : dans le rail compact, les libellés de newsletters tiennent sur
   une seule ligne (« La newsletter Coulisses » ne se coupe plus). */
.medianes-newsletters--compact .medianes-nl-select span {
	white-space: nowrap;
}

/* ⚠️ `input[type="checkbox"]` en tête du sélecteur : c'est de la spécificité, pas
   du zèle. Ollie pose `input:not([type="submit"]):not([type="radio"])` — (0,2,1),
   au-dessus d'un simple `.medianes-nl-select__box` (0,1,0) — et y déclare un
   padding de 13px et une ombre portée. La case en héritait : 26px de large au lieu
   de 24, et un liseré que la maquette ne prévoit pas. Mesuré le 2026-08-07.
   La maquette ne donne qu'un picto Lucide de 24×24, sans fond, bordure ni ombre. */
input[type="checkbox"].medianes-nl-select__box {
	appearance: none;
	-webkit-appearance: none;
	width: 24px;
	height: 24px;
	margin: 0;
	padding: 0;
	border: 0;
	box-shadow: none;
	cursor: pointer;
	background: url(assets/icon-square.svg) center / contain no-repeat;
}

/* ⚠️ LE MÊME `input[type="checkbox"]` QU'AU-DESSUS, ET POUR UNE AUTRE RAISON.
   Ici ce n'est plus Ollie qu'il faut battre, c'est la règle de base voisine :
   `input[type="checkbox"].medianes-nl-select__box` pèse (0,2,1), un simple
   `.medianes-nl-select__box:checked` (0,2,0). La base l'emportait donc — et comme
   elle pose `background` en RACCOURCI, elle réécrivait aussi `background-image`.

   Effet mesuré le 2026-09-12 sur `/newsletters/` : au clic, `input.checked`
   passait bien à `true` et le bandeau s'ouvrait, mais le picto restait
   `icon-square`. La case fonctionnait sans jamais le montrer, et on ne pouvait
   plus savoir laquelle on avait cochée. Le défaut datait du 2026-08-07, le jour
   où la base a gagné son `input[type="checkbox"]` pour passer devant Ollie : la
   règle d'état, elle, n'a pas suivi.

   Ne pas réduire ce sélecteur sans réduire l'autre d'autant. */
input[type="checkbox"].medianes-nl-select__box:checked {
	background-image: url(assets/icon-square-check.svg);
}

.medianes-nl-select__box:focus-visible {
	outline: 2px solid var(--wp--preset--color--bleu-08);
	outline-offset: 2px;
	border-radius: 3px;
}

/* Ligne déjà acquise dans le rail de `/media/` : case cochée et inerte, ligne
   grisée (demande Baptiste, 2026-09-21).

   L'opacité porte sur le LABEL entier, case et libellé ensemble : griser la seule
   case aurait laissé un intitulé plein noir à côté d'un picto éteint, qui se lit
   comme un défaut d'affichage plutôt que comme un état.

   0,6 est le plus bas qui reste lisible : le `bleu-10` (#000052) du libellé rend
   alors #666a94 sur blanc, soit un contraste de 5,4:1 — au-dessus des 4,5
   attendus, alors même qu'un contrôle inactif en serait dispensé. */
.medianes-nl-select--acquis {
	opacity: 0.6;
	cursor: default;
}

input[type="checkbox"].medianes-nl-select__box:disabled {
	cursor: default;
}

/* Toaster fixe (recette #20, node 5098:21355) : collé en bas du viewport,
   refermable. Ombre du token « 0 1px 5px bleu-05 » inversée (-1px) pour
   rester visible sur un élément ancré en bas. */
.medianes-nl-bar {
	position: fixed;
	right: 0;
	bottom: 0;
	left: 0;
	z-index: 90;
	background: var(--wp--preset--color--bleu-04);
	box-shadow: 0 -1px 5px var(--wp--preset--color--bleu-05);
	transition: translate 180ms ease-out;
}

.medianes-nl-bar[hidden] {
	display: none;
}

/* Le retour en place est animé, le glissé ne l'est pas : pendant que le doigt
   tire, le toaster doit suivre au pixel. `is-dragging` est posée par
   l'Interactivity API tant que `dragFrom` n'est pas `null`. */
.medianes-nl-bar.is-dragging {
	transition: none;
}

@media (prefers-reduced-motion: reduce) {

	.medianes-nl-bar {
		transition: none;
	}
}

.medianes-nl-bar__close {
	position: absolute;
	top: var(--wp--preset--spacing--petit);
	right: var(--wp--preset--spacing--petit);
	width: 32px;
	height: 32px;
	padding: 0;
	border: 0;
	cursor: pointer;
	background: url(assets/icon-x.svg) center / 24px no-repeat;
}

/* Poignée de fermeture, en mobile seulement (maquette du 2026-09-12).
   ─────────────────────────────────────────────────────────────────────────────
   C'est un <button> : elle se tire vers le bas au doigt, mais répond aussi au
   clic et à Entrée. Le geste n'est ni découvrable ni accessible au clavier, et
   quand il rate — doigt trop lent, seuil non atteint — il faut qu'il reste une
   façon de fermer.

   LA BARRE EST DESSINÉE EN `::before`, PAS DANS LE BOUTON. La cible tactile doit
   faire au moins 24px de haut ; la barre visible en fait 4. Les confondre aurait
   donné soit un trait impossible à attraper, soit une poignée grosse comme un
   bandeau.

   `touch-action: none` : sans lui, le navigateur interprète le glissé vertical
   comme un défilement de page et `touchmove` n'arrive jamais. */
.medianes-nl-bar__poignee {
	display: none;
	position: relative;
	width: 120px;
	height: 28px;
	margin: 0 auto;
	padding: 0;
	border: 0;
	background: none;
	cursor: grab;
	touch-action: none;
}

.medianes-nl-bar__poignee::before {
	content: "";
	position: absolute;
	top: 12px;
	left: 50%;
	width: 48px;
	height: 4px;
	translate: -50% 0;
	border-radius: 999px;
	background: var(--wp--preset--color--bleu-08);
}

.medianes-nl-bar__poignee:focus-visible {
	outline: 2px solid var(--wp--preset--color--bleu-08);
	outline-offset: -2px;
	border-radius: 4px;
}

.medianes-nl-bar__inner {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--wp--preset--spacing--regulier);
	max-width: 848px;
	margin-inline: auto;
	padding: var(--wp--preset--spacing--gouttiere) var(--wp--preset--spacing--regulier);
	text-align: center;
}

.medianes-nl-bar__count {
	margin: 0;
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--h-2);
	line-height: 1;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-bar__legal {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--chapo);
	line-height: 1.15;
	color: var(--wp--preset--color--bleu-10);
}

/* Bouton du toaster : encre bleu-10 (spec composant). */
.medianes-nl-bar .wp-element-button {
	background-color: var(--wp--preset--color--bleu-10);
	border-color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-bar__form {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--regulier);
	justify-content: center;
	width: 100%;
}

/* `display: flex` ci-dessus l'emporterait sinon sur le `[hidden]` natif posé
   par `data-wp-bind--hidden="state.isSuccess"` : une règle d'auteur bat
   toujours celle de l'agent utilisateur, quelle que soit la spécificité. */
.medianes-nl-bar__form[hidden] {
	display: none;
}

.medianes-nl-bar__form input[type="email"] {
	flex: 1 1 422px;
	max-width: 422px;
	padding: var(--wp--preset--spacing--micro) var(--wp--preset--spacing--petit);
	border: 0;
	border-radius: 6px;
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	font: 400 18px/1.2 var(--wp--preset--font-family--degular-text);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-nl-bar__status {
	margin: 0;
	min-height: 1.3em;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-nl-bar__status.is-error {
	color: var(--wp--preset--color--bleu-09);
}

/* Toaster en mobile (maquette du 2026-09-12, demande Baptiste « toaster NL trop
   grand »).
   ─────────────────────────────────────────────────────────────────────────────
   MESURÉ AVANT : 443px de haut à 390×844, soit 52 % du viewport — le toaster
   cachait la carte qu'on venait de cocher. Quatre postes le gonflaient, et tous
   se règlent par des tokens de l'échelle, sans valeur inventée :

     · 48px de padding haut ET bas (`gouttiere`) ;
     · 24px entre chacun des quatre enfants (`regulier`) ;
     · un `min-height: 1.3em` réservé au message d'état, VIDE tant qu'on n'a rien
       envoyé — 20px de blanc permanent ;
     · la croix, qui impose de dégager son coin.

   La poignée remplace la croix, comme sur la maquette : elle tient dans le flux,
   ne réserve pas de coin, et sert de zone de préhension au glissé.

   ⚠️ DEUX VALEURS RELEVÉES SUR LA CAPTURE DE BAPTISTE, PAS SUR UN NODE FIGMA :
   le rayon des coins hauts (16px) et la barre de la poignée (48×4). Le node du
   toaster cité en 2026-08 (`5098:21355`) n'existe plus dans le fichier — la
   maquette a été refaite. À confirmer dès que le node sera connu. */
@media (max-width: 781px) {

	.medianes-nl-bar {
		border-radius: 16px 16px 0 0;
	}

	.medianes-nl-bar__poignee {
		display: block;
	}

	.medianes-nl-bar__close {
		display: none;
	}

	.medianes-nl-bar__inner {
		gap: var(--wp--preset--spacing--petit);
		padding: 0 var(--wp--preset--spacing--regulier) var(--wp--preset--spacing--regulier);
	}

	/* Le message d'état reste dans le DOM — c'est une région `aria-live`, la
	   retirer la rendrait muette — mais il cesse de réserver sa ligne tant qu'il
	   est vide. */
	.medianes-nl-bar__status {
		min-height: 0;
	}
}

/* Variante compacte du bloc newsletters (recette #49, rail média) : encart
   bleu-00, visuel, liste de cases + formulaire inline.
---------------------------------------------------------------------------- */
.medianes-newsletters--compact {
	/* Recette #97 (2e passage) : pas de boîte (fond/padding) autour du bloc dans
	   le rail — le contenu est posé directement, comme la maquette. */
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-compact__cover {
	display: block;
	width: 100%;
	aspect-ratio: 383 / 240;
	border-radius: 6px;
	background: var(--wp--preset--color--bleu-02);
	object-fit: cover;
}

.medianes-nl-compact__titre {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-4);
	line-height: 1;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-compact__intro,
.medianes-nl-compact__choisir {
	margin: 0;
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-compact__liste {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--micro);
}

.medianes-nl-compact__rgpd {
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
}

/* « Vous êtes inscrit·e à nos newsletters. » — prend la place du formulaire quand
   toutes les listes du bloc sont déjà prises. Mêmes famille et taille que
   l'intro qu'elle remplace dans le fil de lecture ; pas d'opacité ici,
   contrairement aux lignes de la liste : ce n'est pas un contrôle désactivé mais
   une phrase, et la griser la rendrait moins lisible sans rien signifier. */
.medianes-nl-compact__acquis {
	margin: 0;
	line-height: 1.35;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	color: var(--wp--preset--color--bleu-10);
}

/* Bande de recirculation newsletters (composant « recirculation coté »
   484:26098) : fond bleu-01, titre Loretta h-2, visuel 400×400.
---------------------------------------------------------------------------- */
.medianes-recirculation h2 {
	font-size: var(--wp--preset--font-size--h-2);
}

.medianes-recirculation__visuel {
	width: 100%;
	max-width: 400px;
	margin-left: auto;
	border-radius: 3px;
	background: var(--wp--preset--color--bleu-02);
}

.medianes-recirculation__visuel img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 3px;
}

/* Visuels de côté sur TOUTE la hauteur de la carte (consigne Noé 2026-08-03,
   relevée sur la bande « Qui sommes-nous ? » ; les maquettes cadrent l'image sur
   la hauteur du texte, cf. node 5097:19324 où le conteneur fait 377px de haut).
   Posés à ratio libre, ces visuels s'arrêtaient avant le bas de la carte.

   Deux formes coexistent et reçoivent le même traitement : le bloc image des
   contenus (classe `medianes-visuel-cote`) et le conteneur des patterns
   (`medianes-recirculation__visuel`), dont le carré 1/1 a été retiré au profit de
   la hauteur de la colonne.

   `:has()` sert à n'étirer QUE la colonne qui porte un visuel : les colonnes de
   texte gardent leur alignement haut.
--------------------------------------------------------------------------- */
.wp-block-column:has(> .medianes-visuel-cote),
.wp-block-column:has(> .medianes-recirculation__visuel) {
	align-self: stretch;
}

.medianes-visuel-cote,
.medianes-recirculation__visuel {
	height: 100%;
	margin: 0 0 0 auto;
}

.medianes-visuel-cote img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 3px;
}

/* Sous 781px les colonnes s'empilent : la hauteur de référence disparaît, la
   photo reprend ses proportions au lieu d'être écrasée ou étirée. */
@media (max-width: 781px) {

	.medianes-visuel-cote,
	.medianes-recirculation__visuel,
	.medianes-visuel-cote img,
	.medianes-recirculation__visuel img {
		height: auto;
	}
}

/* Recette #66 : composant « recirculation côté » réutilisé sur fond beige-01
   (Qui sommes-nous) — même visuel, teinte adaptée pour rester visible sur
   fond clair (bleu-02 se fondrait dans le beige-01). */
.medianes-recirculation.has-beige-01-background-color .medianes-recirculation__visuel {
	background: var(--wp--preset--color--beige-02);
}

/* Cartes « renvoi newsletter » (Pays / InVivo, node 5098:20826) : carte
   blanche p24, picto 108×110, titre h-3, bouton secondaire pleine largeur.
---------------------------------------------------------------------------- */
.medianes-carte-renvoi {
	background: var(--wp--preset--color--blanc);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--regulier);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-carte-renvoi__picto {
	width: 108px;
	height: 110px;
	background: var(--wp--preset--color--bleu-01);
	border-radius: 6px;
}

/* L'aplat bleu n'est qu'un tenant-lieu : dès qu'une illustration est posée, elle
   se lit directement sur la carte, comme dans la maquette (node 450:15944). */
.medianes-carte-renvoi__picto:has(img) {
	background: none;
}

.medianes-carte-renvoi__picto img {
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.medianes-carte-renvoi .wp-block-buttons,
.medianes-carte-renvoi .wp-block-button,
.medianes-carte-renvoi .wp-block-button__link {
	width: 100%;
}

.medianes-carte-renvoi .wp-block-button__link {
	justify-content: center;
}

/* Même consigne, mêmes 135 %, pour les deux cartes de renvoi de la page
   Newsletters (« Pays, la newsletter » et « In Vivo ») : le texte y tombait à
   1,5 et le libellé du bouton à 1.

   ⚠️ PORTÉE LIMITÉE À CETTE PAGE, à dessein. `.medianes-carte-renvoi` sert aussi
   sur `/a-propos/`, avec trois cartes qui n'ont pas été passées en revue ici. La
   consigne portait sur « la page Newsletters » : l'élargir au composant entier
   changerait une page que personne n'a regardée. À réunir le jour où les deux
   seront arbitrées ensemble.

   Le titre, lui, garde le 1 du node (H3 Degular Medium 40) : passé à 1,35 le
   2026-09-21 avec le reste, il y est revenu le jour même sur arbitrage de
   Baptiste. Il ne pourrait de toute façon pas être réglé d'ici — son interlignage
   est écrit en style EN LIGNE par l'attribut du bloc, et seul un `!important` le
   battrait ; il vit dans le contenu, cf.
   `scripts/migration/newsletters-titres-au-node.php`. */
body.medianes-page-newsletters .medianes-carte-renvoi p,
body.medianes-page-newsletters .medianes-carte-renvoi .wp-block-button__link {
	line-height: 1.35;
}

/* Archives Veille / Job board (recette #31/#32, maquettes 486:42653 et
   3201:26981) : page sur fond bleu-00, colonne blanche ombrée.
---------------------------------------------------------------------------- */
body.post-type-archive-veille,
body.post-type-archive-mission {
	background-color: var(--wp--preset--color--bleu-00);
}

.medianes-colonne-carte {
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
}

/* Cartes « page froide » (À propos, Mentions légales, Charte éditoriale et
   déontologique, Job board, Veille) : sur mobile, ne garder que 24px (regulier)
   d'espace sur les 4 côtés et retirer le fond blanc (la carte s'efface, le
   fond de page bleu-00/beige-01 — ou bleu-00 posé sur le <body> pour les
   archives — devient le seul fond visible) — demande Baptiste 2026-07-29.
   Desktop non touché : ni le padding propre ni le fond blanc de ces cartes ne
   sont modifiés au-delà de 781px.
   Ces cartes portent chacune leur PROPRE padding (double/triple/grand selon la
   page), en plus du padding racine (clamp 24-96px, déjà ~24px à 393px) que
   `has-global-padding` applique à leur ancêtre direct (le bloc bleu-00/beige-01
   plein-large, ou <main> pour les archives) : les deux se cumulaient (jusqu'à
   72-96px d'un bord à l'autre). On neutralise donc le padding propre de la
   carte en haut/bas (ramené à 24px, seule source d'espacement vertical, rien
   d'autre n'en fournit) et à gauche/droite (ramené à 0, le padding racine du
   parent suffit déjà). Le margin-top:-30px de la carte À propos (chevauchement
   volontaire sous le hero) est neutralisé pour la même raison.
   `!important` sur background-color : la classe cœur `.has-blanc-background-
   color` pose déjà `!important` (vérifié dans le stylesheet global généré) —
   impossible de la battre sans la même arme. */
@media (max-width: 781px) {

	body.medianes-page-a-propos .medianes-carte-page,
	body.medianes-page-mon-compte .medianes-carte-page,
	body.medianes-page-mentions-legales .has-bleu-00-background-color>.has-blanc-background-color,
	body.medianes-page-charte-editoriale-et-deontologique .has-bleu-00-background-color>.has-blanc-background-color,
	body.post-type-archive-mission .medianes-colonne-carte,
	body.post-type-archive-veille .medianes-colonne-carte {
		margin-top: 0 !important;
		padding-top: var(--wp--preset--spacing--regulier) !important;
		padding-right: 0 !important;
		padding-bottom: var(--wp--preset--spacing--regulier) !important;
		padding-left: 0 !important;
		box-shadow: none !important;
	}

	/* À propos (consigne 2026-07-29) : fond BLANC sur mobile, pas
	   transparent — sinon le beige du groupe englobant se voit derrière. Les
	   4 autres sélecteurs ci-dessus gardent le transparent, non concernés. */
	body.medianes-page-mentions-legales .has-bleu-00-background-color>.has-blanc-background-color,
	body.medianes-page-charte-editoriale-et-deontologique .has-bleu-00-background-color>.has-blanc-background-color,
	body.post-type-archive-mission .medianes-colonne-carte,
	body.post-type-archive-veille .medianes-colonne-carte {
		background-color: transparent !important;
	}

	/* À propos mobile (maquette 2694:52995, recette 2026-07-29) : plus de carte
	   incrustée — la PAGE entière est blanche bord à bord, du header au footer.
	   Le blanc est posé sur le groupe englobant alignfull (beige-01 en desktop)
	   et sur la carte. !important : fonds posés en classes has-*-background-color
	   par l'éditeur, marge haute issue du blockGap racine. */
	body.medianes-page-a-propos .medianes-carte-page,
	body.medianes-page-mon-compte .medianes-carte-page,
	body.medianes-page-a-propos .entry-content>.has-beige-01-background-color,
	body.medianes-page-mon-compte .entry-content>.has-beige-01-background-color {
		background-color: var(--wp--preset--color--blanc) !important;
	}

	body.medianes-page-a-propos .entry-content>.has-beige-01-background-color,
	body.medianes-page-mon-compte .entry-content>.has-beige-01-background-color {
		margin-top: 0 !important;
	}

	/* Nav d'ancres (sous-header d'À propos) : aucune maquette mobile ne la
	   montre — constat recette 2026-07-27 (figma-inventaire §6 point 10),
	   confirmé par 2694:52995 (le contenu démarre au ras du header). Masquée
	   sous 781px, sur toute page qui en porte une. !important : le cœur émet
	   display:flex dans une feuille wp-container-* chargée après le thème. */
	.medianes-ancres {
		display: none !important;
	}

	/* Espacements du contenu (maquette 2694:52995) : 48px avant chaque section
	   H2, 24px partout ailleurs — remplace la hiérarchie desktop 72/48/24 posée
	   plus haut. !important : marges inscrites en styles inline par l'éditeur. */
	body.medianes-page-a-propos .medianes-carte-page>*+* {
		margin-top: var(--wp--preset--spacing--regulier) !important;
	}

	body.medianes-page-a-propos .medianes-carte-page>*+h2 {
		margin-top: var(--wp--preset--spacing--double) !important;
	}

	/* Bios (La direction, Les membres) : la maquette garde 2 cartes par rangée
	   (~160px) au lieu de l'empilement natif pleine largeur. En grid, le
	   flex-basis 100% imposé par le cœur aux colonnes devient inopérant. */
	body.medianes-page-a-propos .medianes-carte-page>.wp-block-columns:has(.medianes-bio) {
		display: grid !important;
		grid-template-columns: repeat(2, 1fr);
		gap: var(--wp--preset--spacing--regulier) !important;
	}

	/* Chronologie : 2 colonnes en maçonnerie (multicol), cartes insécables,
	   comme la maquette — pas d'empilement pleine largeur. */
	body.medianes-page-a-propos .medianes-chrono {
		display: block !important;
		columns: 2;
		column-gap: var(--wp--preset--spacing--regulier);
	}

	/* Ni filets ni padding interne en mobile (vérifié sur 2777:44698) : la
	   gouttière multicol suffit. */
	body.medianes-page-a-propos .medianes-chrono>.wp-block-column {
		break-inside: avoid;
		margin-bottom: var(--wp--preset--spacing--regulier);
		padding-inline: 0;
		border-left: none;
	}
}

/* Cartes d'offre de formation (maquette « Se former » 493:43653) : carte
   blanche, label mono, titre h-3, coches, logo Qualiopi, CTA. */
.medianes-offre-formation {
	height: 100%;
	background: var(--wp--preset--color--blanc);
	border-radius: 6px;
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	padding: var(--wp--preset--spacing--regulier);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-offre-formation__label {
	margin: 0 0 var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-offre-formation .medianes-liste-coches {
	margin: 0;
	padding: 0;
	list-style: none;
}

.medianes-offre-formation .medianes-liste-coches li {
	position: relative;
	padding-left: calc(24px + var(--wp--preset--spacing--petit));
	margin-bottom: var(--wp--preset--spacing--petit);
	line-height: 1.3;
}

.medianes-offre-formation .medianes-liste-coches li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0;
	width: 24px;
	height: 24px;
	background: url(assets/icon-check.svg) center / contain no-repeat;
}

/* CTA accompagnement (composant « recirculation centrée » 5097:19201) :
   fond beige, étiquettes centrées, titre Loretta, bouton + lien.
---------------------------------------------------------------------------- */
.medianes-cta-accomp__tags {
	gap: var(--wp--preset--spacing--petit);
}

.medianes-cta-accomp__tags p {
	margin: 0;
	background: var(--wp--preset--color--bleu-01);
	color: var(--wp--preset--color--bleu-09);
	padding: var(--wp--preset--spacing--micro) 12px;
	border-radius: 3px;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	text-transform: uppercase;
	line-height: 1.3;
	text-box-edge: cap alphabetic;
	text-box-trim: trim-both;
}

/* Étiquettes cliquables (constat Noé 2026-08-04 : elles n'étaient que du texte).
   Le lien reprend la pastille ENTIÈRE — d'où les marges négatives qui annulent le
   padding du `p` avant de le reposer sur le `a` : la cible du clic devient ce que
   l'œil voit, et non la seule ligne de texte. */
.medianes-cta-accomp__tags p a {
	display: block;
	margin: calc(-1 * var(--wp--preset--spacing--micro)) -12px;
	padding: var(--wp--preset--spacing--micro) 12px;
	border-radius: 3px;
	color: inherit;
	text-decoration: none;

	/* Le rognage est redéclaré ICI et pas seulement sur le `p` : c'est le lien
	   qui contient le texte, et `text-box-trim` ne rogne que les lignes de
	   l'élément qui les porte. Sans cette reprise, le `p` n'avait plus aucune
	   ligne à rogner et la pastille repassait à 31,5px au lieu de 21 (mesuré
	   le 2026-09-21). */
	text-box-edge: cap alphabetic;
	text-box-trim: trim-both;
}

.medianes-cta-accomp__tags p:has(a):hover,
.medianes-cta-accomp__tags p:has(a:focus-visible) {
	background: var(--wp--preset--color--bleu-02);
}

.medianes-cta-accomp__actions {
	gap: var(--wp--preset--spacing--regulier);
	align-items: center;
}

/* Filtre par domaine (archive Projets) — refait le 2026-08-03 d'après les nodes
   `5100:18403` (ouvert) et `5100:18445` (fermé, dans la maquette desktop
   `2047:35533`). Les deux maquettes donnent la MÊME largeur, 345px : le filtre
   n'est donc pas un bouton « hug » comme il l'était, et aucune media query
   n'est nécessaire — desktop et mobile partagent la même carte.

   Structure visée : l'ensemble bouton + liste se lit comme UNE carte bordée
   (0,5px bleu-08, rayon 6px, ombre « bleue clair » 0 1px 12px bleu-02), mais
   **le panneau ne doit pas repousser les cartes de la grille** : il se
   superpose (consigne Noé 2026-08-03). Bouton et panneau portent donc chacun
   ces traits et se raccordent — coins arrondis en haut pour l'un, en bas pour
   l'autre, pas de bordure haute sur le panneau — plutôt qu'une bordure unique
   sur le `<details>`, qui aurait imposé de garder le panneau dans le flux.
   Un seul filet à la jonction : la bordure basse du bouton, la maquette n'en
   dessinant pas d'autre à cet endroit. */
/* Conteneur du bloc (2026-09-10) : UN OU PLUSIEURS menus `.medianes-filtre`
   posés côte à côte (« Filtrer par expertise », « Filtrer par format »…),
   chacun un menu déroulant indépendant — pas un panneau commun à sections, la
   maquette attendant des boutons distincts. C'est ce conteneur qui porte
   l'alignement `alignwide`, pas les menus eux-mêmes.
   `alignwide` centre le bloc et l'étire à 1248px : on l'aligne sur le BORD
   GAUCHE DE LA GRILLE, qui est le bord du contenu (x=96 dans la maquette 1440).
   `!important` : les global styles du cœur posent `margin-left/right: auto
   !important` sur tout enfant d'un layout contraint qui n'est ni alignleft, ni
   alignright, ni alignfull — un `margin-inline: 0` simple perdait, le groupe
   restait centré (mesuré à left:548 au lieu de 96).
   Corrigé 2026-08-03 (constat Noé, alors sur `.medianes-filtre` seul) : un
   `margin-inline: 0` collait le bord au PADDING racine, pas au bord du
   contenu. Les deux coïncident jusqu'à 1440px (1248 + 2×96), mais au-delà la
   grille se recentre alors que le groupe restait à gauche — 110px de décalage
   à 1660px. La marge gauche reproduit donc le centrage du contenu : la moitié
   de l'espace restant, jamais négative sous 1440px. */
.medianes-filtre-groupe {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--petit);
	margin-inline: max(0px, (100% - var(--wp--style--global--wide-size)) / 2) auto !important;
}

.medianes-filtre {
	/* 345px est la largeur de la maquette, mais elle devient un PLANCHER et non une
	   largeur figée (2026-08-04). Mesuré : à Degular Medium 22, la boîte n'offre que
	   261px de texte utile (345 − 2×24 de padding − 24 de chevron − 12 de gouttière),
	   et deux contenus légitimes dépassent — le libellé « Filtrer par domaine
	   d'expertise » (276px) et surtout, en état actif, le nom du terme
	   « Management & gestion de projet » (297px). Ce second cas touchait déjà
	   /projets/ : la barre passait à deux lignes dès qu'un domaine au nom long était
	   sélectionné, et aucun raccourcissement de libellé n'y aurait rien changé, le
	   vocabulaire des six expertises étant fixé.
	   `max-content` garde donc exactement 345px dans le cas courant — conforme au
	   node — et n'élargit que ce qu'il faut quand le contenu l'exige, sans jamais
	   dépasser la largeur du contenu. */
	min-width: 345px;
	width: max-content;
	max-width: 100%;
	/* Ancre du panneau, qui est en position absolue (cf. plus bas). */
	position: relative;
}

/* FERMÉ : bordure et rayon seuls — ni fond, ni ombre (consigne Noé
   2026-08-03, conforme au node du bouton fermé `5100:18390`, qui ne porte
   qu'un `border` 0,5px et un `rounded` 6px). Le bouton se pose ainsi
   directement sur le fond de la page. Fond blanc et ombre n'apparaissent qu'à
   l'ouverture, où ils dessinent la carte formée par le bouton + le panneau. */
.medianes-filtre summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--petit);
	cursor: pointer;
	list-style: none;
	padding: var(--wp--preset--spacing--petit) var(--wp--preset--spacing--regulier);
	border: 0.5px solid var(--wp--preset--color--bleu-08);
	border-radius: 6px;
	font-family: var(--wp--preset--font-family--degular);
	/* Style « H4 » de la maquette : Degular Medium 22 / interligne 1. */
	font-size: 22px;
	font-weight: 500;
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-filtre summary::-webkit-details-marker {
	display: none;
}

/* Fond blanc + ombre dans DEUX cas (consigne Noé 2026-08-03) :
     · OUVERT — le bouton et le panneau forment alors une carte posée au-dessus
       du contenu (node `5100:18403`) ;
     · SÉLECTIONNÉ, même fermé (`--actif`, posé par le bloc quand un tri est en
       cours) — la carte reste « posée » pour signaler que la page est triée,
       là où l'état au repos se contente de sa bordure.
   Le rayon, lui, ne change qu'à l'ouverture (cf. règle suivante). */
.medianes-filtre[open] summary,
.medianes-filtre summary.medianes-filtre__barre--actif {
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 12px var(--wp--preset--color--bleu-02);
}

/* Ouvert : les coins bas s'effacent pour que le bouton et le panneau ne fassent
   qu'un ; la bordure basse du bouton sert de séparateur avec la 1ʳᵉ option, la
   maquette ne dessinant pas d'autre filet à cet endroit. */
.medianes-filtre[open] summary {
	border-radius: 6px 6px 0 0;
}

.medianes-filtre summary::after {
	content: "";
	width: 24px;
	height: 24px;
	flex: none;
	background: url(assets/icon-chevron-down.svg) center / contain no-repeat;
	transition: transform 0.15s ease;
}

.medianes-filtre[open] summary::after {
	transform: rotate(180deg);
}

/* DEUX structures d'options possibles, toutes deux couvertes ici (2026-08-03) :
     · `core/tag-cloud` → un <p> contenant des <a> frères ;
     · `medianes/filtre-taxonomie` → un <ul> de <li> contenant chacun un <a>
       (nouveau bloc qui trie sur place via `?domaine=slug` au lieu de renvoyer
       vers les archives de taxonomie).
   `list-style: none` est indispensable au second cas. */
/* Le panneau SE SUPERPOSE aux cartes, il ne les repousse pas (consigne Noé
   2026-08-03). Il est donc sorti du flux : `position: absolute` sous le bouton,
   calé sur les bords de `.medianes-filtre` (`left/right: 0`) pour reprendre sa
   largeur de 345px. Il reprend bordure, fond et ombre du bouton, sans bordure
   haute (celle du bas du bouton fait la frontière) et avec les coins arrondis
   seulement en bas : l'ensemble reste visuellement une carte unique, comme dans
   la maquette 5100:18403.
   z-index 20 : au-dessus des cartes, mais sous le header sticky (80). */
.medianes-filtre__termes {
	position: absolute;
	top: 100%;
	left: 0;
	right: 0;
	z-index: 20;
	display: flex;
	flex-direction: column;
	margin: 0;
	padding: 0;
	list-style: none;
	border: 0.5px solid var(--wp--preset--color--bleu-08);
	border-top: 0;
	border-radius: 0 0 6px 6px;
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 12px var(--wp--preset--color--bleu-02);
}

/* Chaque terme devient une ligne pleine largeur (padding 12/24) terminée par
   un cercle de sélection. Le bloc `core/tag-cloud` sépare ses liens par des
   nœuds de texte : sans effet ici, un conteneur flex les ignore. */
.medianes-filtre__termes a {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
	padding: var(--wp--preset--spacing--petit) var(--wp--preset--spacing--regulier);
	font-family: var(--wp--preset--font-family--degular-text);
	/* 18px = « Corps sans » de la maquette 5100:18403. Posé ici depuis le
	   2026-08-03 : la taille venait avant d'un style inline émis par
	   `core/tag-cloud` (attribut du bloc), que `medianes/filtre-taxonomie` ne
	   produit pas. */
	font-size: 18px;
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-08);
	text-decoration: none;
}

/* Filet entre options : `a + a` couvre les <a> frères de core/tag-cloud,
   `li + li` les <li> de medianes/filtre-taxonomie (où les <a> ne sont plus
   frères — le sélecteur `a + a` seul ne matcherait plus rien). */
.medianes-filtre__termes a+a,
.medianes-filtre__termes li+li {
	border-top: 0.5px solid var(--wp--preset--color--bleu-08);
}

.medianes-filtre__termes a::after {
	content: "";
	width: 24px;
	height: 24px;
	flex: none;
	background: url(assets/icon-circle.svg) center / contain no-repeat;
}

.medianes-filtre__termes a:hover {
	background: var(--wp--preset--color--bleu-00);
}

/* État sélectionné (fond bleu-02 + cercle pointé), conforme à la maquette.
   Historique : posé d'abord « à blanc », l'état étant inatteignable avec
   `core/tag-cloud` (ses options renvoyaient vers /domaine/{slug}/, où le filtre
   n'existe pas). Le bloc `medianes/filtre-taxonomie` rend l'état ATTEIGNABLE :
   il trie sur place et marque l'option active avec `aria-current="true"` ET
   `.is-active` — les deux crochets sont acceptés ici. Effectif depuis le
   2026-08-03 : la surcharge `wp_template` #3313 en base, qui servait encore
   l'ancien tag-cloud, rend désormais le nouveau bloc. */
.medianes-filtre__termes a[aria-current],
.medianes-filtre__termes a.is-active {
	background: var(--wp--preset--color--bleu-02);
}

.medianes-filtre__termes a[aria-current]::after,
.medianes-filtre__termes a.is-active::after {
	background-image: url(assets/icon-circle-dot.svg);
}

/* Option de remise à zéro du nouveau bloc : ce n'est pas un terme, donc pas de
   cercle de sélection. */
.medianes-filtre__termes a.medianes-filtre__terme--reset::after {
	content: none;
}

/* Visuel d'appoint 400×400 (hero Projets, recirculations). Gris + mention
   tant qu'aucune image n'est fournie (demande Noé 2026-07-30) : le fond
   bleu-01 d'origine le rendait invisible dans les encarts de même couleur —
   on doit VOIR qu'il y a un bloc photo à mettre à jour. */
.medianes-visuel-400 {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	max-width: 400px;
	aspect-ratio: 1 / 1;
	margin-left: auto;
	border-radius: 3px;
	background: var(--wp--preset--color--gris);
}

.medianes-visuel-400:empty::after {
	content: "Visuel à remplacer";
	color: var(--wp--preset--color--blanc);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	text-transform: uppercase;
	letter-spacing: 1px;
}

/* La ligne « Depuis AAAA » des cartes projets a été supprimée le 2026-08-04 :
   elle ne venait d'aucun composant de la maquette. Les deux seules cartes qui
   existent — « Petit article » (108:6139) et « Grand article » (108:6163) — n'ont
   qu'une propriété `date` désactivée par défaut, et qui affiche une plage
   (« 2020 — … ») en bleu réseau, pas une année de publication. Ce sélecteur n'a
   donc plus de cible ; il est retiré plutôt que laissé en CSS mort.
---------------------------------------------------------------------------- */

/* Accordéon générique (composant « Champ déployable » 197:25609) : carte
   blanche ombrée, chevron Lucide.
---------------------------------------------------------------------------- */
.medianes-accordeon {
	background: var(--wp--preset--color--blanc);
	border: 1px solid transparent;
	border-radius: 6px;
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	padding: var(--wp--preset--spacing--regulier);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-accordeon summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--wp--preset--spacing--petit);
	cursor: pointer;
	list-style: none;
	font-family: var(--wp--preset--font-family--degular);
	/* H4 (26px, 22px sous ~780px via le clamp fluide du préset) — consigne Noé
	   2026-08-03, confirmée par le composant Figma « Champ déployable »
	   (`7461:16331` : H4 Degular Medium 26 / interligne 1). Était `h-5` (20px
	   fixe), avec une surcharge mobile à 22px devenue inutile : le plancher
	   fluide de `h4` vaut exactement 22px, la valeur relevée sur les maquettes
	   mobiles. Une règle au lieu de deux, et la même valeur aux deux bouts. */
	font-size: var(--wp--preset--font-size--h-4);
	font-weight: 500;
	line-height: 1.3;
}

/* Titre optionnel (h3) dans le summary : porte la sémantique de titre (WCAG 1.3.1)
   tout en héritant de la présentation du summary. */
.medianes-accordeon__titre {
	flex: 1;
	margin: 0;
	font: inherit;
	color: inherit;
}

/* Espacement entre volets consécutifs = 24px (gouttière de la maquette « Champ
   déployable »), quand aucune marge inline n'est saisie dans l'éditeur. */
.medianes-accordeon+.medianes-accordeon {
	margin-top: var(--wp--preset--spacing--regulier);
}

/* Titre de section → premier volet = 48px (consigne Noé 2026-08-03, relevée sur
   /nos-services/ mais valable partout où une section FAQ suit la même forme).
   La règle vit ici, au niveau du composant, plutôt que dans chaque page : elle
   couvre d'un coup les six pages services, les deux sections de /faq/ et la FAQ
   de formation rendue en PHP (`medianes-formation__h2`), et vaudra pour toute
   nouvelle insertion du pattern `medianes/faq-section`. Les marges inline
   (24px, 12px) qui la contredisaient ont été retirées des contenus, ce qui
   évite un `!important`.
   Sélecteur limité au cas « titre immédiatement suivi d'un volet » : les
   accordéons d'expertises (/a-propos/) suivent un paragraphe et gardent leur
   rythme, et le sommaire d'article est explicitement exclu.
   La marge basse de 24px de `medianes-formation__h2` fusionne avec ces 48px
   (marges adjacentes, conteneur en flux normal) : l'écart reste 48px. */
:is(h1, h2, h3, h4, h5, h6)+.medianes-accordeon:not(.medianes-sommaire) {
	margin-top: var(--wp--preset--spacing--double);
}

/* La surcharge mobile à 22px (recette du 2026-07-30, maquette 2346:32647) a été
   retirée le 2026-08-03 : le passage du summary au préset `h-4` la rend
   redondante, son plancher fluide valant précisément ces 22px. */

.medianes-accordeon summary::-webkit-details-marker {
	display: none;
}

.medianes-accordeon summary::after {
	content: "";
	flex: none;
	width: 24px;
	height: 24px;
	background: url(assets/icon-chevron-down.svg) center / contain no-repeat;
	transition: transform 0.15s ease;
}

.medianes-accordeon[open] summary::after {
	transform: rotate(180deg);
}

.medianes-accordeon> :not(summary) {
	margin-top: var(--wp--preset--spacing--petit);
}

/* Duo de visuels d'ouverture (pattern medianes/galerie-duo-legende) — Figma
   318:8142. Les deux visuels doivent être à la MÊME HAUTEUR, la légende passant
   dessous (consigne Noé 2026-08-03) : la maquette les donne à 458 et 457px de
   haut pour 815 et 382px de large.

   Méthode : un `aspect-ratio` PAR COLONNE, reprenant les proportions de la
   maquette. Comme les colonnes gardent ces mêmes proportions à toute largeur
   (flex-basis 815 / 382), les deux hauteurs calculées restent égales — sans
   hauteur en dur, et quelles que soient les photos choisies.

   Pourquoi pas l'égalisation naturelle du flex (`align-items: stretch`) : la
   hauteur de rangée serait celle de la colonne la plus haute, or la colonne de
   droite porte EN PLUS sa légende — son image finirait donc plus courte que
   l'autre de la hauteur de la légende. C'est précisément le défaut signalé.
   `object-fit: cover` : les photos sont recadrées, jamais déformées.
--------------------------------------------------------------------------- */
.medianes-duo-visuels>.wp-block-column>.wp-block-image {
	margin: 0;
}

.medianes-duo-visuels>.wp-block-column>.wp-block-image img {
	width: 100%;
	height: auto;
	object-fit: cover;
}

.medianes-duo-visuels>.wp-block-column:first-child>.wp-block-image img {
	aspect-ratio: 815 / 458;
}

.medianes-duo-visuels>.wp-block-column:last-child>.wp-block-image img {
	aspect-ratio: 382 / 457;
}

/* Empilées sous 782px, les deux images n'ont plus de hauteur à accorder : on
   rend la main aux proportions d'origine plutôt que d'imposer un recadrage
   étroit hérité du desktop.
   Les deux sélecteurs reprennent `:first-child`/`:last-child` : sans eux la
   règle ne pesait que (0,3,1) contre (0,4,1) pour les règles par colonne
   ci-dessus, et le recadrage desktop survivait en mobile (mesuré). */
@media (max-width: 781px) {

	.medianes-duo-visuels>.wp-block-column:first-child>.wp-block-image img,
	.medianes-duo-visuels>.wp-block-column:last-child>.wp-block-image img {
		aspect-ratio: auto;
	}
}

/* Corps des projets : le blockGap du gabarit espace les éléments de 48px, mais
   un titre de section et son paragraphe forment un bloc — 12px, comme la
   maquette (Frame 841 : titre haut de 32px, texte à y=44). */
.medianes-casclient__content :is(h2, h3)+p {
	margin-top: var(--wp--preset--spacing--petit);
}

/* Marge du contenu central : 48px en haut ET en bas, et RIEN D'AUTRE autour
   (consigne Noé 2026-08-03). Relevé avant correction : 24px en haut (issus du
   blockGap racine, jamais décidés) et 96px en bas (style inline du gabarit),
   plus 24px de marge haute sur la bande « Projets similaires » qui fusionnaient
   avec eux — trois sources pour deux frontières.
   Les 48px sont désormais posés par le gabarit (attribut du bloc), et la marge
   de la bande suivante est annulée ici : l'écart n'a plus qu'une seule origine,
   donc plus rien ne peut s'y additionner en silence.
   `!important` : la marge de la bande vient de la règle du cœur
   `:root :where(.is-layout-constrained) > *`. */
body.single-cas_client .medianes-related-section {
	margin-top: 0 !important;
}

/* Mobile : 24px au lieu de 48. `!important` car le gabarit pose les 48px en
   style INLINE (attribut du bloc), hors de portée d'une règle simple. */
@media (max-width: 781px) {

	.medianes-casclient__content {
		margin-top: var(--wp--preset--spacing--regulier) !important;
		margin-bottom: var(--wp--preset--spacing--regulier) !important;
	}
}

/* Témoignage client (pattern medianes/temoignage) — composant Figma 427:8253.
   Fond bleu-01, padding 48px, rayon 6px, textes centrés : tout cela vient des
   attributs du pattern. Seul le titre a besoin de CSS : la maquette le donne à
   **32px** en Degular Regular / interligne 1, or 32px n'existe PAS dans
   l'échelle typographique du projet (…20, 22, 26, 40…). La valeur est donc
   écrite en dur ici plutôt qu'inventée à partir d'un préset voisin, et l'écart
   est signalé dans figma-inventaire §6 — à trancher : caler sur `h4` (26px) ou
   ajouter 32px à l'échelle.
   La largeur de 668px de la maquette n'est pas reprise : le pattern est posé
   dans un corps de texte contraint à 600px, qui fait déjà cette fonction.
--------------------------------------------------------------------------- */
.medianes-temoignage__titre {
	margin: 0;
	font-size: 32px;
	line-height: 1;
}

/* Sommaire (bloc medianes/sommaire) — maquette « Contenu : Détail projet »,
   entrée `7461:11066` : liste NUMÉROTÉE, Degular Text 18/1.2 (préset `corps`),
   retrait de 27px, entrées espacées de 12px et 3px de respiration verticale.
   Le bloc porte aussi `.medianes-accordeon` : carte blanche, ombre, chevron et
   titre H4 sont hérités du composant « Champ déployable », rien n'est redéclaré.
--------------------------------------------------------------------------- */
.medianes-sommaire__liste {
	margin: 0;
	padding-left: 27px;
	list-style: decimal;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-sommaire__entree {
	padding: var(--wp--preset--spacing--nano) 0;
}

.medianes-sommaire__entree+.medianes-sommaire__entree {
	margin-top: var(--wp--preset--spacing--petit);
}

/* Les H3 sont en retrait quand la personne qui rédige choisit de les inclure :
   sans cela, la hiérarchie du contenu disparaîtrait dans une liste à plat. */
.medianes-sommaire__entree--n3 {
	margin-left: var(--wp--preset--spacing--regulier);
}

.medianes-sommaire__entree a {
	color: inherit;
	text-decoration: none;
}

.medianes-sommaire__entree a:hover,
.medianes-sommaire__entree a:focus-visible {
	text-decoration: underline;
}

/* Les titres du contenu portent une ancre posée automatiquement (cf.
   medianes-blocks/inc/ancres.php) : on décale la cible du défilement pour que le
   titre ne finisse pas sous le header sticky. */
.medianes-casclient__content :is(h2, h3)[id],
.entry-content :is(h2, h3)[id] {
	scroll-margin-top: calc(var(--medianes-header-h) + var(--wp--preset--spacing--regulier));
}

/* Liste à coches (réutilise icon-check, cf. offres) dans les accordéons. */
.medianes-accordeon .medianes-liste-coches {
	margin: 0;
	padding: 0;
	list-style: none;
}

.medianes-accordeon .medianes-liste-coches li {
	position: relative;
	padding-left: calc(24px + var(--wp--preset--spacing--petit));
	margin-bottom: var(--wp--preset--spacing--petit);
	line-height: 1.3;
}

.medianes-accordeon .medianes-liste-coches li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0;
	width: 24px;
	height: 24px;
	background: url(assets/icon-check.svg) center / contain no-repeat;
}

/* À propos : galerie « Nos bureaux » (node 450:16050) — une grande photo, deux
   paires, une grande, 24px entre chaque. L'aplat gris `medianes-bureaux-visuel`
   qui tenait la place jusqu'au 2026-08-03 a été remplacé par les vraies photos ;
   la règle a donc été retirée avec lui. Seul reste ici le rythme vertical, la
   mise en colonnes et les coins arrondis venant des blocs. */
.medianes-bureaux img {
	width: 100%;
	height: auto;
}

.medianes-citation {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-citation__media {
	display: inline-block;
	align-self: flex-start;
	background: var(--wp--preset--color--bleu-01);
	color: var(--wp--preset--color--bleu-08);
	padding: var(--wp--preset--spacing--micro) 12px;
	border-radius: 3px;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	text-transform: uppercase;
	line-height: 1.3;
	text-box-edge: cap alphabetic;
	text-box-trim: trim-both;
}

/* Recette #100 — « On parle de nous » /a-propos/ (maquette 456:16622) :
   3 avis en colonnes (citation + logo carré 60px + nom média + « Lire l'article »),
   puis liste inline de citations séparées par filets.
   Le `display:flex + gap` a été retiré (recette du 2026-07-28) : ce groupe est en
   layout "flow" natif, qui applique déjà `margin-block-start: regulier` (24px) sur
   son 2e enfant (`__pied`) via la règle cœur `:root :where(.is-layout-flow) > *`.
   Le gap flex s'additionnait à cette marge (24+24 = 48px d'écart texte/photo). */
.medianes-avis-presse {
	color: var(--wp--preset--color--bleu-10);
}

.medianes-avis-presse__citation {
	margin: 0;
}

.medianes-avis-presse__pied {
	gap: var(--wp--preset--spacing--petit);
	align-items: center;
}

.medianes-avis-presse__logo {
	flex: 0 0 auto;
	width: 60px;
	height: 60px;
	border-radius: 3px;
	background: var(--wp--preset--color--bleu-01);
}

.medianes-avis-presse__logo img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.medianes-avis-presse__media {
	margin: 0;
	line-height: 1.2;
}

.medianes-avis-presse__pied .medianes-hyperlien {
	margin: 0;
	line-height: 1.2;
}

/* Liste de citations inline avec filet de séparation. */
/* Écart entre les avis avec photo (cartes presse) et les avis en texte : 48px.
   La maquette 456:16622 indique 24px ; valeur relevée à la demande de Baptiste
   (recette du 2026-07-27) pour bien séparer les deux sous-blocs. */
.medianes-onparle-liste {
	margin-top: var(--wp--preset--spacing--double);
}

/* Maquette 456:16622 : 24px entre la citation et le filet, et 24px entre le filet
   et la citation suivante (soit 48px d'un texte à l'autre). C'était 12px. */
.medianes-onparle-liste__item {
	margin: 0;
	padding: var(--wp--preset--spacing--regulier) 0;
	border-top: 1px solid var(--wp--preset--color--bleu-01);
}

.medianes-onparle-liste__item:first-child {
	border-top: 0;
	padding-top: 0;
}

.medianes-onparle-liste__item a {
	color: inherit;
	text-decoration: underline;
	text-underline-position: from-font;
}

/* Toaster promotionnel fixe (bloc medianes/toaster, composant 5087:20637) :
   bleu-04, coins hauts arrondis 20, refermable.
---------------------------------------------------------------------------- */
.medianes-toaster {
	position: fixed;
	right: 0;
	bottom: 0;
	left: 0;
	/* Recette #91 : le bloc n'a pas d'alignement `full`, donc la mise en page
	   « constrained » du thème lui impose un max-width (content-size) + centrage,
	   ce qui empêchait la barre d'occuper toute la largeur. On l'annule. */
	max-width: none;
	z-index: 95;
	background: var(--wp--preset--color--bleu-04);
	border-radius: 20px 20px 0 0;
	box-shadow: 0 -1px 5px var(--wp--preset--color--bleu-05);
	padding: var(--wp--preset--spacing--regulier);
	text-align: center;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-toaster[hidden] {
	display: none;
}

.medianes-toaster--editeur {
	position: static;
}

.medianes-toaster__close {
	position: absolute;
	top: var(--wp--preset--spacing--petit);
	right: var(--wp--preset--spacing--petit);
	width: 32px;
	height: 32px;
	padding: 0;
	border: 0;
	cursor: pointer;
	background: url(assets/icon-x.svg) center / 24px no-repeat;
}

.medianes-toaster__inner {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	max-width: 848px;
	margin-inline: auto;
}

.medianes-toaster__titre {
	margin: 0;
	font-family: var(--wp--preset--font-family--loretta);
	font-weight: 300;
	font-size: var(--wp--preset--font-size--h-2);
	line-height: 1;
}

.medianes-toaster__texte {
	margin: 0;
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.2;
}

.medianes-toaster__lien {
	margin: 0;
}

.medianes-toaster__lien a {
	font-family: var(--wp--preset--font-family--degular);
	font-size: 18px;
	font-weight: 500;
	color: var(--wp--preset--color--bleu-10);
	text-decoration: underline;
	text-underline-position: from-font;
}

/* Recette mobile 2026-07-27 : le node Figma mobile du toaster (5087:20636)
   est en bleu-02, plus clair que la variante desktop (5087:20637, bleu-04). */
@media (max-width: 781px) {
	.medianes-toaster {
		background: var(--wp--preset--color--bleu-02);
	}
}

/* Bloc bio (composant « bloc bio » 450:16073) : photo carrée, nom Degular 20
   interlettré, bio 17, compétences mono 15.
---------------------------------------------------------------------------- */
.medianes-bio {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	color: var(--wp--preset--color--bleu-10);
}

.medianes-bio__photo {
	width: 100%;
	aspect-ratio: 1 / 1;
	border-radius: 3px;
	/*background: var(--wp--preset--color--bleu-02);*/
}

.medianes-bio__photo img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 3px;
}

.medianes-bio__nom {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular);
	font-size: 20px;
	letter-spacing: 0.6px;
	line-height: 1;
}

.medianes-bio__texte {
	margin: 0;
	font-size: 17px;
	line-height: 1.3;
}

.medianes-bio__roles {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	white-space: pre-line;
}

/* Chronologie (À propos) — REFONTE DU 2026-09-11 d'après la maquette `7901:29714`
   (node de la bande : `7901:29779`).

   Ce qui change : la bande sort de la carte blanche de la page et prend toute la
   largeur, avec une ombre en haut ET en bas ; les deux rangées de 4 et 3 années
   n'en font plus qu'une de sept ; les filets de séparation laissent place à une
   gouttière de 24 ; l'année passe avant le visuel et grossit à 26px (H4) ; les
   textes prennent le nouveau style « Note sans » du fichier Figma.

   L'ombre : le node porte l'effet « Ombre bleue clair » (drop shadow, couleur
   Edito/Edito_02 = `#cadeff` = `bleu-02`, décalage 0/1, rayon 12). La capture du
   node montre le halo AU-DESSUS comme AU-DESSOUS de la bande (mesuré : environ
   12px de dégradé de part et d'autre), d'où les deux ombres — une vers le haut,
   une vers le bas. */
.medianes-chrono-bande {
	box-shadow:
		0 -1px 12px var(--wp--preset--color--bleu-02),
		0 1px 12px var(--wp--preset--color--bleu-02);
}

/* `minmax(0, 1fr)` et non `1fr` : la largeur minimale d'une colonne `1fr` est
   celle de son contenu, si bien que la première année — la seule sans image en
   pleine largeur — se faisait rogner de 25px par ses voisines (mesuré : 136px
   contre 161). Le zéro libère la contrainte et les sept colonnes deviennent
   égales, à 157,71px comme au node. Même correctif que `.medianes-grille`. */
/* ⚠️ SÉLECTEUR À DEUX CLASSES, ET C'EST LE CŒUR DU CORRECTIF. `.medianes-chrono`
   seul ne l'emportait PAS : WordPress imprime dans le `<head>`, après la feuille
   du thème, une règle `.wp-block-columns-is-layout-flex { display: flex }` de
   même spécificité, qui gagnait par l'ordre source. Mesuré : `display` calculé à
   `flex`, `grid-template-columns` inerte, et les colonnes réparties en `flex: 1
   1 0` — la première tombait à 136px quand les six autres tenaient 161. Le
   défaut était déjà là avant cette refonte, la grille de 4 n'ayant jamais été
   une grille. */
.wp-block-columns.medianes-chrono {
	display: grid;
	grid-template-columns: repeat(7, minmax(0, 1fr));
	gap: var(--wp--preset--spacing--regulier);
}

/* « Note sans » : le nouveau style de texte du fichier Figma (Degular Text
   Regular 15px, interligne 1.4). Le thème a déjà la taille (`note`, 15px) et la
   famille (celle du corps) : seul l'interligne manquait, l'ancien style « Note »
   étant en Degular Mono 1.3. Scopé à la chronologie, seul endroit où il est
   demandé à ce jour — à sortir en classe partagée s'il réapparaît ailleurs. */
.medianes-chrono p:not(.medianes-chrono__annee) {
	line-height: 1.4;
}

.medianes-chrono__visuel {
	width: 100%;
	aspect-ratio: 1 / 1;
	border-radius: 3px;
	background: var(--wp--preset--color--bleu-02);
	margin-bottom: var(--wp--preset--spacing--petit);
}

/* L'année ouvre la colonne (elle suivait le visuel jusqu'au 2026-09-11) et prend
   le style H4 du node : Degular Medium 26px, interligne 1. */
.medianes-chrono__annee {
	margin: 0 0 var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--h-4);
	line-height: 1;
}

/* Accessibilité — focus clavier visible (CLAUDE.md §15). Faible spécificité (:where)
   pour ne pas écraser les styles de composants ; complète les états :hover.
---------------------------------------------------------------------------- */
:where(a, button, summary, input, select, textarea, [tabindex]):focus-visible {
	outline: 2px solid var(--wp--preset--color--bleu-08);
	outline-offset: 2px;
	border-radius: 2px;
}

/* Lien « Consulter cette fiche pratique → » : cohérence hover (soulignement off). */
.medianes-fiche__lien:hover {
	text-decoration: none;
}

/* Chapô : interligne 1.15 (token Figma « Chapô »), au lieu de l'interligne de corps
   hérité (1.5) quand aucun n'est précisé. */
.has-chapo-font-size {
	line-height: 1.15;
}

/* Ticket #89 : index des projets clients (node 3220:19973) — bloc
   medianes/index-annees. Sections par année : h2 nu (Loretta, style global) +
   entrées « année | titre | étiquettes » (composant Figma « entrée d'archive »
   5098:21644 : séparateur bas bleu-02, padding vertical 24px, gouttière 96px
   entre l'année et le titre).
---------------------------------------------------------------------------- */
.medianes-index-annees__liste {
	list-style: none;
	margin: 0;
	padding: 0;
}

.medianes-index-annees__annee>h2 {
	margin-bottom: var(--wp--preset--spacing--regulier);
}

.medianes-index-annees__annee+.medianes-index-annees__annee {
	margin-top: var(--wp--preset--spacing--grand);
}

.medianes-index-annees__entree {
	display: grid;
	grid-template-columns: auto 1fr auto;
	align-items: center;
	gap: var(--wp--preset--spacing--regulier) var(--wp--preset--spacing--grand);
	padding: var(--wp--preset--spacing--regulier) 0;
	border-bottom: 1px solid var(--wp--preset--color--bleu-02);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-index-annees__date {
	/* Largeur figée sur l'année à 4 chiffres : les titres s'alignent entre eux. */
	min-width: 4ch;
	line-height: 1.2;
}

.medianes-index-annees__titre {
	margin: 0;
	font-weight: 400;
	line-height: 1.2;
}

.medianes-index-annees__titre a {
	color: inherit;
	text-decoration: none;
}

.medianes-index-annees__titre a:hover,
.medianes-index-annees__titre a:focus-visible {
	text-decoration: underline;
	text-underline-position: from-font;
}

/* Étiquettes : la gouttière est portée ici (le conteneur .medianes-tag ne pose
   que l'apparence des pastilles, cf. plus haut dans cette feuille). */
.medianes-index-annees__tags {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--petit);
	justify-content: flex-end;
}

/* …et c'est le seul endroit où la pastille n'est PAS une boîte en ligne : un
   enfant de conteneur flex est blockifié, le `display: inline` de la règle
   générique y est donc réécrit en `block`. Les deux conséquences s'inversent :
   le fond n'est plus peint sur la boîte de la fonte mais sur l'interligne, et
   `text-box-trim` — inerte en ligne — redevient opérant. Il faut donc reposer
   ici le padding vertical et le rognage, ceux-là mêmes que `.medianes-tag a`
   retire, pour retrouver les 21px du composant (mesuré le 2026-09-21 : 19,5px
   sans cette règle, 21 avec). */
.medianes-index-annees__tags a {
	padding: var(--wp--preset--spacing--micro) 12px;
	text-box-edge: cap alphabetic;
	text-box-trim: trim-both;
}

/* État inactif : projet listé dont la fiche n'est pas rédigée — aucun lien (les
   étiquettes gardent leur contraste, comme sur le node).
   ─────────────────────────────────────────────────────────────────────────────
   `bleu-03` (#b0ceff) était illisible : 1,5:1 sur le fond bleu-00 de la page,
   très loin des 4,5:1 qu'exige WCAG AA. Passé au token `gris` (#828282, « Gris
   (Inactif) » dans Figma) sur demande de Baptiste le 2026-09-21.

   ⚠️ LE GAIN EST RÉEL MAIS N'ATTEINT PAS AA : #828282 sur bleu-00 donne 3,6:1,
   et ces entrées sont en `corps` (18px), donc sous le seuil de « grand texte »
   (24px, ou 18,66px en gras) qui aurait suffi à 3:1. C'est l'écart déjà relevé
   par l'audit du 2026-08-11 (DC-088), qui vise le token lui-même et pas ce seul
   emploi. `gris-fonce` (#565656) passerait à 6,9:1 — arbitrage Baptiste, signalé
   avec la PR. */
.medianes-index-annees__entree--inactive .medianes-index-annees__date,
.medianes-index-annees__entree--inactive .medianes-index-annees__titre {
	color: var(--wp--preset--color--gris);
}

@media (max-width: 781px) {

	/* Mobile : année et titre sur la première ligne, étiquettes en dessous —
	   la grille 3 colonnes de la maquette desktop ne tient pas en 345px. */
	.medianes-index-annees__entree {
		grid-template-columns: auto 1fr;
		gap: var(--wp--preset--spacing--petit) var(--wp--preset--spacing--regulier);
	}

	.medianes-index-annees__tags {
		grid-column: 1 / -1;
		justify-content: flex-start;
	}
}

/* Ticket #90 : /nos-services/ (maquette 516:34983).
   Bloc beige « Médianes ? » (recirculation coté 516:35019) : visuel carré
   400 px, arrondi 3 px (--nano). Groupe vide = zone éditable en attente de
   l'image (convention .medianes-avis__logo / .medianes-avis__portrait).
---------------------------------------------------------------------------- */
.medianes-recirc-cote__visuel {
	width: 400px;
	max-width: 100%;
	aspect-ratio: 1 / 1;
	border-radius: 3px;
	overflow: hidden;
}

/* Tant qu'aucune image n'est fournie : gris + mention, même convention que
   .medianes-visuel-400 (demande Noé 2026-07-30 — on doit VOIR qu'il y a un
   bloc photo à mettre à jour ; le bleu-01 se fondait dans l'encart beige). */
.medianes-recirc-cote__visuel:not(:has(img)) {
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--wp--preset--color--gris);
}

.medianes-recirc-cote__visuel:not(:has(img))::after {
	content: "Visuel à remplacer";
	color: var(--wp--preset--color--blanc);
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	text-transform: uppercase;
	letter-spacing: 1px;
}

.medianes-recirc-cote__visuel img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* ─────────────────────────────────────────────────────────────────────────────
   Fiches Formation reconstruites en blocs (2026-08-03, consigne Noé « tout
   reconstruire en blocs », cf. pattern `medianes/formation` et ADR-012).

   Le contenu de ces pages passait par le bloc `medianes/formation-details`, qui
   fabriquait le HTML depuis des champs ACF. Il est désormais composé de blocs
   natifs portant LES MÊMES CLASSES aux mêmes positions : toutes les règles
   ci-dessus s'appliquent sans être touchées.

   Restent trois structures qu'aucun bloc natif ne sait produire — la liste de
   définitions de l'encadré de session, les `ul`/`li` de la galerie, les `span`
   des points clés. Elles reçoivent ici leur équivalent, AJOUTÉ à côté des
   sélecteurs d'origine, qui restent valables : l'ancien rendu doit continuer de
   fonctionner tant que les deux formations réelles ne sont pas migrées.
   ───────────────────────────────────────────────────────────────────────────── */

/* 1. Points clés : les trois `span` deviennent un groupe vide (le picto) et deux
   paragraphes. Les paragraphes ont une marge par défaut, les span non. */
.medianes-formation__point>p {
	margin: 0;
}

/* 2. Encadré de session : `dl`/`dt`/`dd` deviennent un groupe et deux
   paragraphes par ligne. Le conteneur étant en colonne, le premier paragraphe
   porte le libellé et le second la valeur. */
.medianes-formation__session-ligne>p {
	margin: 0;
}

.medianes-formation__session-ligne>p:first-child {
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--h-4);
	line-height: 1;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__session-ligne>p:last-child {
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-08);
}

/* Le filet est un bloc Séparateur, qui apporte ses propres bordures et son
   opacité : on les remplace plutôt que de les subir. */
.medianes-formation__session-filet.wp-block-separator {
	width: 100%;
	height: 0;
	margin: 0;
	border: 0;
	border-top: 1px solid var(--wp--preset--color--bleu-02);
	opacity: 1;
}

/* 3. Galerie : les `li` deviennent des blocs Image, donc des `figure` — qui ont
   une marge par défaut, contrairement aux `li`. */
.medianes-formation__galerie-rangee>figure {
	margin: 0;
	aspect-ratio: 657 / 429;
	border-radius: 6px;
	overflow: hidden;
	background: var(--wp--preset--color--bleu-01);
}

.medianes-formation__galerie-rangee>figure img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* Le visuel de la bannière passe lui aussi par un bloc Image. */
.medianes-formation__tete-visuel figure {
	margin: 0;
}

/* Corps des volets dépliants : il n'y a plus de conteneur
   `__accordeon-corps`, le contenu est directement dans le `details`. Portée
   limitée aux deux sections de la fiche pour ne pas toucher les accordéons du
   reste du site (page FAQ, menu mobile, filtre par domaine). */
.medianes-formation__contenu .medianes-accordeon> :not(summary),
.medianes-formation__faq .medianes-accordeon> :not(summary) {
	margin-block: 0;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-formation__contenu .medianes-accordeon> :not(summary)+ :not(summary),
.medianes-formation__faq .medianes-accordeon> :not(summary)+ :not(summary) {
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-formation__contenu .medianes-accordeon>p,
.medianes-formation__faq .medianes-accordeon>p {
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.2;
}

/* ─────────────────────────────────────────────────────────────────────────────
   Visuels d'ouverture de page : CARRÉ (consigne Noé 2026-08-03, « problème de
   format, valable sur toutes ouvertures de pages qui ont une photo »).

   Annule explicitement le choix inverse pris plus haut dans ce fichier — « le
   carré 1/1 a été retiré au profit de la hauteur de la colonne ». Mesuré, ce
   choix donnait deux défauts opposés selon la longueur du texte voisin :
   400 × 738 sur « Nos expertises » de /le-studio/, la photo s'étirant le long
   des cinq volets d'expertise ; et 395 × 263 sur l'ouverture de /formations/,
   où le texte est court. Les maquettes donnent un carré dans les deux cas
   (« Se former » 388 × 390, « Nos expertises » 445 × 445).

   Borné à 782px et plus : sous ce seuil les colonnes s'empilent et la photo doit
   reprendre ses proportions naturelles (décidé en recette mobile, cf. la règle
   `max-width: 781px` plus haut, laissée intacte).
   ───────────────────────────────────────────────────────────────────────────── */
@media (min-width: 782px) {

	.medianes-visuel-cote {
		height: auto;
		aspect-ratio: 1 / 1;
	}

	/* La colonne n'a plus à s'étirer : c'est le carré qui fixe la hauteur. */
	.wp-block-column:has(> .medianes-visuel-cote) {
		align-self: flex-start;
	}

	/* L'image remplit le carré : c'est le figure qui porte le ratio. */
	.medianes-visuel-cote img {
		height: 100%;
	}
}

/* ─────────────────────────────────────────────────────────────────────────────
   Fiche Formation : mise en conformité avec la maquette 496:14452 (2026-08-03).

   Le centrage des points clés posé plus tôt ce jour (réponse au « les icônes ne
   sont pas centrés ») est retiré : la maquette, relue au node près, les aligne À
   GAUCHE — le désordre perçu venait des tailles d'icônes disparates et de la
   hiérarchie typographique inversée, corrigées dans les règles de base
   (§ .medianes-formation__point*). Ne subsistent ici que les réglages DESKTOP
   qui contredisent la recette mobile du Lot 1, bornés à ≥ 782px pour la
   préserver (la recette mobile garde : points en lignes horizontales, icône 52,
   marges de sections propres).
   ───────────────────────────────────────────────────────────────────────────── */
@media (min-width: 782px) {

	/* Carte d'un point clé : padding 12, coins 6 (composant « Petit article »). */
	.medianes-formation__point {
		padding: var(--wp--preset--spacing--petit);
		border-radius: 6px;
	}

	/* Visuel d'ouverture : carré 400 × 400 recadré (maquette : image paysage
	   recadrée en 1/1, coins 6). En mobile la photo garde ses proportions. */
	.medianes-formation__tete-visuel img {
		aspect-ratio: 1 / 1;
		height: auto;
		object-fit: cover;
	}

	/* Rythme vertical des sections : 60px mesurés entre CHAQUE section de la
	   maquette (corps → CTA → galerie → avis → QSN), 72px après la bande de
	   points, 120px avant la FAQ (72 de fin de zone + 48 propres à la section).
	   60 n'appartient pas à l'échelle d'espacements du thème : valeur écrite en
	   dur, assumée, comme le 32px du titre de témoignage (documenté). Les
	   marges internes des sections (grand/96 posées à l'intégration) sont
	   remises à zéro — le rythme est porté ici, à un seul endroit. */
	.medianes-formation>*+* {
		margin-top: 60px;
	}

	.medianes-formation .medianes-formation__points-bande {
		margin-top: 0;
		/* flush sous le hero, comme la maquette */
	}

	.medianes-formation .medianes-formation__corps {
		margin-block: var(--wp--preset--spacing--triple) 0;
	}

	.medianes-formation .medianes-formation__cta-bande {
		margin-block: 0;
	}

	/* La galerie est un enfant direct : plus spécifique que le rythme (owl), elle
	   doit donc porter elle-même ses 60px — un simple `margin-block: 0` les lui
	   volait (constaté à la mesure : écart CTA → galerie tombé à 0). */
	.medianes-formation .medianes-formation__galerie {
		margin-block: 60px 0;
	}

	/* Le pattern « Qui sommes-nous » embarque un margin-top:grand EN LIGNE (96px)
	   qui fusionne à travers son conteneur et bat le rythme de 60. !important
	   nécessaire contre un style inline — même exception, documentée, que
	   l'archive podcast (voir la règle body.post-type-archive-podcast). */
	.medianes-formation>.medianes-formation__inner>.medianes-recirculation {
		margin-top: 0 !important;
	}

	.medianes-formation .medianes-formation__faq {
		margin-block: calc(var(--wp--preset--spacing--triple) + var(--wp--preset--spacing--double)) var(--wp--preset--spacing--double);
	}

	/* FAQ : titre centré, volets sur 818px centrés (maquette 499:46741 — la
	   colonne FAQ est plus étroite que le contenu courant). */
	.medianes-formation__faq {
		max-width: 818px;
	}

	.medianes-formation__faq .medianes-formation__h2 {
		text-align: center;
	}
}

/* « Contenu » : la maquette groupe le titre et son premier volet à 24px (la FAQ,
   elle, reste à 48 — règle générale titre + accordéon). Le margin-top nul laisse
   la marge basse du titre (24) donner l'écart par fusion. */
.medianes-formation__contenu .medianes-formation__h2+.medianes-accordeon {
	margin-top: 0;
}

/* ─────────────────────────────────────────────────────────────────────────────
   Étiquette « type de contenu » sur les cartes (demande Noé 2026-08-04),
   posée entre l'image et le titre par `medianes-core/type-contenu.php`.

   Volontairement DIFFÉRENTE de l'étiquette d'expertise (`.medianes-tag`) : c'est
   exactement la confusion signalée dans le fil Slack de l'équipe — deux familles
   d'étiquettes au même graphisme, dont l'une est cliquable et l'autre non. Ici :
   pas de fond, pas de cadre, un texte mono en capitales espacées, couleur
   atténuée. On lit « de quelle nature est ce contenu », pas « clique ici ».
   ───────────────────────────────────────────────────────────────────────────── */
.medianes-type-contenu {
	margin: 0;
	/* Les composants « Petit article » (108:6139) et « Grand article » (108:6163)
	   donnent le style « Note » : Degular Mono 15 px, interlignage 1,3,
	   `letterSpacing: 0`, couleur `media/08` PLEINE. L'interlignage, l'absence
	   d'interlettrage et la couleur pleine viennent donc de la maquette — j'avais
	   mis 1 px d'interlettrage et 70 % d'opacité, qui étaient inventés.

	   La TAILLE, elle, est un écart assumé : **13 px sur consigne de Noé
	   (2026-08-04)**, soit le style « Note détail », pour que l'étiquette de type
	   pèse moins que la pastille de thématique. C'est un choix de hiérarchie, pas
	   un relevé — à reverser à 15 px si la maquette doit primer. */
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
	line-height: 1.3;
	text-transform: uppercase;
	color: var(--wp--preset--color--bleu-08);
}


/* L'étiquette peut être un lien vers le hub du type (Articles → /le-media/,
   Podcasts → /podcasts/…). Elle doit rester une MENTION et non devenir une
   pastille comme l'étiquette d'expertise : ni fond, ni cadre, ni rayon. */
.medianes-type-contenu a {
	color: inherit;
	text-decoration: none;
	background: none;
	padding: 0;
	border-radius: 0;
}

.medianes-type-contenu a:hover,
.medianes-type-contenu a:focus-visible {
	text-decoration: underline;
	text-underline-offset: 2px;
}

/* Parcours de compte — connexion, inscription, mot de passe (2026-08-07)
----------------------------------------------------------------------------
   Écrans NON MAQUETTÉS : l'inventaire Figma ne contient aucune page de compte
   (cf. figma-inventaire.md). L'habillage est donc dérivé du langage déjà en
   place, sur consigne de Baptiste (« réutilise le langage graphique du site ») :
   champs repris du formulaire newsletter (§ .medianes-form-nl — hauteur 46px,
   rayon 6px, ombre douce bleu-02, Degular Text 18), boutons du thème
   (.wp-element-button), largeur de colonne du contenu éditorial.

   ⚠️ La palette ne comporte AUCUNE couleur d'alerte : bleu-07 à bleu-10 valent
   toutes #000052 et il n'y a pas de rouge. Plutôt que d'en inventer une (doctrine
   §5 : aucun token hors Figma), erreurs et succès se distinguent par leur fond —
   beige-01 pour l'erreur, bleu-01 pour la confirmation — et par un filet latéral
   de 3px. À revoir si Figma fournit un jour un rouge d'alerte. */

.medianes-compte {
	width: min(480px, 100%);
	margin-inline: auto;
}

.medianes-compte__form {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--regulier);
	margin-block: var(--wp--preset--spacing--regulier);
}


.medianes-compte__facultatif {
	font-weight: 400;
	color: var(--wp--preset--color--gris);
}


/* La case elle-même vient du composant partagé `.medianes-nl-select` ; il ne
   reste ici que la mise en page de la ligne. */
.medianes-compte__memoriser {
	margin: 0;
}

/* Case de consentement aux newsletters, dans « Créer un compte » (2026-09-21).
   Même composant partagé, à un détail près : son libellé fait deux phrases et
   passe donc à la ligne. `align-items: center` centrerait la case sur la hauteur
   du paragraphe — elle doit se tenir en face de la PREMIÈRE ligne, comme une
   puce. Et `flex: none` l'empêche de s'écraser quand le texte réclame la
   place. */
.medianes-compte__case {
	margin: 0;
}

.medianes-compte__case .medianes-nl-select {
	display: flex;
	align-items: flex-start;
}

.medianes-compte__case .medianes-nl-select__box {
	flex: none;
}

.medianes-compte__note {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.4;
	color: var(--wp--preset--color--gris);
}

/* Le bouton occupe la largeur du formulaire : c'est l'action unique de l'écran. */
.medianes-compte .wp-block-button,
.medianes-compte .wp-block-button__link {
	width: 100%;
}

.medianes-compte__erreur,
.medianes-compte__succes {
	margin-block: var(--wp--preset--spacing--regulier);
	padding: var(--wp--preset--spacing--petit);
	border-left: 3px solid var(--wp--preset--color--bleu-09);
	border-radius: 6px;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.4;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-compte__erreur {
	background: var(--wp--preset--color--beige-01);
}

.medianes-compte__succes {
	background: var(--wp--preset--color--bleu-01);
}

.medianes-compte__erreur p,
.medianes-compte__succes p {
	margin: 0;
}

.medianes-compte__liens {
	margin: 0;
	text-align: center;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--note);
	color: var(--wp--preset--color--bleu-08);
}

.medianes-compte__sep {
	margin-inline: var(--wp--preset--spacing--micro);
	color: var(--wp--preset--color--gris);
}

/* Pot de miel : masqué à l'œil ET aux lecteurs d'écran (aria-hidden + tabindex
   -1 dans le balisage). `display: none` suffit et n'est pas contournable par un
   robot lisant le CSS — celui qui remplit le champ se signale de lui-même. */
.medianes-compte__pot {
	display: none;
}

/* État connecté dans le header (2026-08-07)
----------------------------------------------------------------------------
   Déconnecté, le pictogramme mène à /connexion/. Connecté, il affiche le prénom
   (ou le nom complet à défaut) et ouvre un menu de déconnexion, sur la même
   mécanique que le sélecteur de langue : `<details>`, sans JavaScript.

   LES 48 PX. Consigne : « limiter la taille du prénom de sorte qu'il reste 48 px
   quand les éléments se décalent vers la gauche ». La rangée du header est en
   `space-between` : ajouter un prénom élargit le bloc de droite et grignote
   l'espace qui le sépare du logo. Plutôt que de plafonner le prénom à une largeur
   devinée, on pose un `column-gap: 48px` sur la rangée — flexbox le tient pour
   incompressible — et on fait du prénom le SEUL élément rétractable de la rangée
   (`min-width: 0` + `text-overflow`). Le prénom se tronque donc exactement autant
   qu'il faut pour que les 48px survivent, à toute largeur d'écran et pour
   n'importe quelle longueur de prénom. */

.medianes-header>.wp-block-group>.alignwide {
	column-gap: 48px;
}

/* Seul le bloc de droite se rétracte ; le logo et les pastilles d'univers gardent
   leur largeur. */
.medianes-header__nav {
	min-width: 0;
}

/* Lien vers « Mon compte ». C'était un `<details>` à menu déroulant dans une
   première version : remplacé par un lien direct le 2026-08-07 (demande
   Baptiste), le menu n'ayant qu'une entrée. La déconnexion vit dans l'espace. */
/* TYPOGRAPHIE : strictement celle des entrées de menu voisines. Le nom n'est pas
   un libellé à part, il se lit sur la même ligne que « Newsletters » et « À
   propos » ; toute différence se voit. Les trois valeurs sont donc reprises de
   leur source, une par une, parce qu'aucune ne vient du même endroit :
     - degular-text : la famille de corps (theme.json), pas `degular`, qui est le
       display réservé aux titres. C'était l'écart le plus visible ;
     - 500 : posé par le cœur sur le bloc navigation
       (`:root :where(.wp-block-navigation)`), là où le corps de page est à 430 ;
     - 1.2 : posé plus haut dans cette feuille sur `.wp-block-navigation-item__content`.
   Le lien n'étant pas un bloc navigation, il n'hérite d'aucune des trois.
   Mesuré dans Chromium : degular-text / 18px / 500 / 1.2 de part et d'autre. */
.medianes-header__compte {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--micro);
	min-width: 0;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 500;
	line-height: 1.2;
	color: var(--wp--preset--color--bleu-08);
	text-decoration: none;
}

.medianes-header__compte img {
	flex: none;
}

/* Le prénom : seul élément élastique, tronqué avec des points de suspension. */
.medianes-header__compte-nom {
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* EXCEPTION demandée le 2026-08-07 : sur /connexion/ et /inscription/, le
   pictogramme de compte ne prend pas d'état actif — pas de barre, pas de fond.
   Même motif que pour la loupe : un état permanent sous une icône seule n'est pas
   heureux. Le lien reste évidemment cliquable et visible. */
.medianes-header__account,
.medianes-header__account:hover,
.medianes-header__account:focus-visible {
	background: none;
	box-shadow: none;
}

.medianes-header__account::after {
	content: none;
}

/* Le compte suit le sort des autres entrées de droite sous 1277px : il est repris
   dans le menu mobile. */
@media (max-width: 1276px) {

	.medianes-header__compte {
		display: none;
	}
}

/* Espace « Mon compte » (2026-08-07)
----------------------------------------------------------------------------
   Quatre sections ancrées sous une sous-navigation collante. La barre reprend
   `.medianes-ancres`, le composant déjà en service sur /a-propos/ : sticky sous
   le header (z-index 70), scrollspy par assets/ancres.js. Rien de neuf à
   dessiner, la sous-navigation du site existe déjà. */

/* La largeur n'est plus portée ici : la carte de page la contraint à 816px,
   comme sur /a-propos/. Le bloc s'y coule. */
.medianes-compte--espace {
	width: 100%;
}

/* RYTHME. Le contenu de l'espace est produit par un bloc, il vit donc dans SON
   conteneur et non en enfant direct de la carte : les règles `.medianes-carte-page
   > h2` et le `blockGap` du groupe ne l'atteignent pas. On les rejoue ici à
   l'identique — 72px avant chaque section, 24px partout ailleurs — pour que
   l'espace batte la même mesure que /a-propos/. */
.medianes-compte--espace>*+* {
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-compte--espace>h3 {
	margin-top: var(--wp--preset--spacing--triple);
	margin-bottom: 0;
	/* Les ancres visent ces titres : on dégage la hauteur du chrome fixe (header
	   + barre d'ancres), sinon le titre se glisse dessous. Même valeur que les
	   ancres de /a-propos/. */
	scroll-margin-top: calc(var(--medianes-header-h) + 56px + var(--wp--preset--spacing--regulier));
}

/* Premier titre : il suit le H1 de la carte, le rythme de section serait de trop. */
.medianes-compte--espace>h3:first-child {
	margin-top: 0;
}

/* Newsletters : une ligne par lettre. Les cases sont celles du composant déjà en
   service sur /newsletters/ et dans le rail de /le-media/ (`.medianes-nl-select`,
   pictos Lucide square / square-check) — une seule case à cocher sur le site.
   Rien à styler ici que l'empilement des lignes. */
.medianes-compte__listes {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	margin: 0;
	padding: 0;
	list-style: none;
}

.medianes-compte__listes li {
	margin: 0;
}

/* Écran vide de l'espace : aucun article mis de côté (et, avant que la
   fonctionnalité n'existe, son annonce). La zone dit quoi faire pour la
   remplir — un cadre vide muet se lirait comme une panne. */
.medianes-compte__avenir {
	/* ⚠️ NE PAS REMETTRE `margin: 0` (ticket Baptiste, 2026-09-22).

	   Le raccourci écrasait aussi la marge HAUTE, et c'est la règle de rythme
	   ci-dessus (`.medianes-compte--espace > * + *`) qui la pose : l'écran vide se
	   collait donc à son titre — 0px, là où « Mes informations » et « Mes
	   newsletters » ouvrent à 24px sur leur formulaire. Les deux sélecteurs ont la
	   MÊME spécificité (0,1,0 — `>` et `*` ne comptent pas), c'est donc l'ordre du
	   fichier qui tranchait, en faveur de celui-ci. Un conflit qui ne se voit pas
	   à la lecture, d'où cette note.

	   On neutralise donc les marges par défaut du `<p>` SANS RIEN DÉCLARER EN
	   HAUT : la règle de rythme est alors la seule déclaration d'auteur pour
	   `margin-top` sur cet élément, elle s'applique, et le rythme de l'espace
	   reste seul maître de l'écart entre un titre et ce qui le suit. */
	margin-block-end: 0;
	margin-inline: 0;

	/* Zone volontairement aérée : elle ne présente pas de contenu, elle explique
	   comment en obtenir — un encadré serré se lirait comme une liste tronquée. */
	padding: var(--wp--preset--spacing--double) var(--wp--preset--spacing--regulier);
	border: 0.5px dashed var(--wp--preset--color--bleu-03);
	border-radius: 6px;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.4;
	color: var(--wp--preset--color--gris);
	text-align: center;
}

/* Articles sauvegardés : la grille de cartes de l'espace. Deux colonnes et non
   trois — la carte de page fait 816px, trois cartes de 276px et leurs deux
   gouttières de 48 en demanderaient 924. Les cartes elles-mêmes sont celles du
   site (`.medianes-cartes`), rien à redire de leur intérieur ici. */
.medianes-compte__sauvegardes {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--wp--preset--spacing--double);
}

/* Même resserrement que les autres grilles empilées en mobile
   (`.medianes-related__grid`, recette du 2026-07-27). */
@media (max-width: 781px) {

	.medianes-compte__sauvegardes {
		grid-template-columns: 1fr;
		gap: var(--wp--preset--spacing--regulier);
	}
}

/* Déconnexion : en pied de page, en bouton secondaire — c'est une sortie, pas
   l'action principale de l'écran. */
.medianes-compte__deconnexion {
	margin-top: var(--wp--preset--spacing--grand);
	padding-top: var(--wp--preset--spacing--regulier);
	border-top: 0.5px solid var(--wp--preset--color--bleu-02);
}

.medianes-compte__deconnexion .wp-block-button,
.medianes-compte__deconnexion .wp-block-button__link {
	width: auto;
}

/* Champ de formulaire — composant Figma « Champ » (node 7527:19521)
============================================================================
   Trois états, relevés le 2026-08-07 sur les variantes du composant :

   | état    | node         | hauteur | bordure                  | texte                |
   |---------|--------------|---------|--------------------------|----------------------|
   | vide    | 7527:19522   | 46px    | aucune                   | gris-fonce #565656   |
   | rempli  | 7527:19528   | 66px    | 1px bleu-04 #96beff      | noir-texte #121212   |
   | erreur  | 7527:19531   | 66px    | 1px rouge-erreur #d63600 | rouge-erreur         |

   Communs aux trois : fond blanc, rayon 6px (space/6), padding 12px (petit),
   ombre 0 1px 6px bleu-02, Degular Text Regular 18/1.2. Le passage de 46 à 66px
   vient du libellé qui remonte au-dessus de la valeur (gap 3px = nano), pas d'un
   changement de padding.

   DEUX ÉCARTS RELEVÉS DANS LA MAQUETTE, non résolus en silence (doctrine §5) :
   · le libellé du champ REMPLI est en `#616161` littéral, alors que le champ VIDE
     utilise la variable « Gris foncé » `#565656` — deux gris à 11 unités d'écart
     pour le même rôle. On retient la variable ;
   · la variable « Ombre bleue clair » déclare un rayon de 12, mais les trois
     instances rendent `0 1px 6px`. On suit les instances, qui concordent avec
     l'ombre déjà en service sur le champ newsletter.

   Ce socle porte sur les SÉLECTEURS D'ÉLÉMENT : il vaut donc pour tout champ du
   site — newsletter, recherche, parcours de compte — sans avoir à
   les énumérer. Les règles de contexte, plus spécifiques, ne redéclarent que ce
   qui leur est propre. */

/* ⚠️ SPÉCIFICITÉ. Ollie pose `input:not([type="submit"]):not([type="radio"])`,
   soit (0,2,1) — au-dessus d'un simple `input[type="email"]` (0,1,1). Sans les
   deux `:not()` ci-dessous, Ollie gagnait sur `padding` et `font-size`, et le
   champ retombait à 13px de police et 6,5px de padding : le composant n'était
   appliqué qu'à moitié, et la carte mesurait 72px au lieu des 66 de la maquette.
   Mesuré au navigateur le 2026-08-07. Les deux types exclus n'apparaissent
   jamais ici : la contrainte est de pure spécificité, elle ne change rien à la
   portée. */
input:is([type="text"], [type="email"], [type="password"], [type="search"], [type="tel"], [type="url"], [type="number"], [type="date"]):not([type="submit"]):not([type="button"]),
textarea:not([type="submit"]):not([type="button"]) {
	box-sizing: border-box;
	min-height: 46px;
	padding: var(--wp--preset--spacing--petit);
	/* La bordure d'état est dessinée en `box-shadow` et non en `border` : elle ne
	   prend alors AUCUNE place. La maquette donne 46px pour 12px de padding et un
	   texte de 21,6px (18 × 1,2) — soit 45,6px, sans bordure. Une vraie bordure de
	   1px porterait le champ à 47,6px et le ferait sauter de 2px au focus. */
	border: 0;
	border-radius: 6px;
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	font: 400 18px/1.2 var(--wp--preset--font-family--degular-text);
	color: var(--wp--preset--color--noir-texte);
	transition: box-shadow 0.15s ease;
}

textarea {
	min-height: 140px;
}

/* Le texte d'invite tient le rôle du libellé dans l'état vide : même gris. */
input::placeholder,
textarea::placeholder {
	color: var(--wp--preset--color--gris-fonce);
	opacity: 1;
}

/* RENSEIGNÉ ou EN COURS DE SAISIE : la bordure bleue apparaît. `:not(:placeholder-shown)`
   ne fonctionne que si le champ porte un `placeholder` — les champs du parcours de
   compte en portent un (espace insécable) précisément pour cela. */
/* ⚠️ La liste de types est REPRISE À L'IDENTIQUE du socle, et ce n'est pas une
   redondance : un `input` générique attraperait les cases à cocher et les boutons
   radio. Or une case n'a jamais de `placeholder`, donc `:not(:placeholder-shown)`
   y est TOUJOURS vrai — les cases héritaient de l'anneau bleu, un filet que la
   maquette ne prévoit pas (constaté le 2026-08-07 sur tout le site). */
input:is([type="text"], [type="email"], [type="password"], [type="search"], [type="tel"], [type="url"], [type="number"], [type="date"]):not([type="submit"]):not([type="button"]):focus,
textarea:not([type="submit"]):focus,
input:is([type="text"], [type="email"], [type="password"], [type="search"], [type="tel"], [type="url"], [type="number"], [type="date"]):not([type="submit"]):not([type="button"]):not(:placeholder-shown),
textarea:not([type="submit"]):not(:placeholder-shown) {
	box-shadow: inset 0 0 0 1px var(--wp--preset--color--bleu-04), 0 1px 6px var(--wp--preset--color--bleu-02);
	outline: none;
}

/* ERREUR : bordure et texte en rouge. Porté par `aria-invalid`, que les
   formulaires posent déjà pour les lecteurs d'écran — un seul attribut décrit
   l'état pour l'assistance ET pour l'œil. */
input:is([type="text"], [type="email"], [type="password"], [type="search"], [type="tel"], [type="url"], [type="number"], [type="date"])[aria-invalid="true"],
textarea[aria-invalid="true"] {
	box-shadow: inset 0 0 0 1px var(--wp--preset--color--rouge-erreur), 0 1px 6px var(--wp--preset--color--bleu-02);
	color: var(--wp--preset--color--rouge-erreur);
}

input[aria-invalid="true"]::placeholder,
textarea[aria-invalid="true"]::placeholder {
	color: var(--wp--preset--color--rouge-erreur);
}

/* Libellé flottant — états « vide » et « rempli » de la maquette
   --------------------------------------------------------------------------
   Le composant est porté par le CONTENEUR et non par l'`<input>` — c'est ainsi
   qu'il est construit dans Figma : « Champ » y est une carte contenant deux
   calques de texte. L'`<input>` est donc rendu transparent et sans habillage à
   l'intérieur.

   POURQUOI CE CHANGEMENT (2026-08-07, second passage). La première version posait
   l'habillage sur l'`<input>` et faisait flotter le libellé en absolu par-dessus.
   Elle se superposait au texte dès que le navigateur affichait un APERÇU DE
   REMPLISSAGE AUTOMATIQUE : Chrome et dérivés peignent alors une valeur sans la
   valider, `:placeholder-shown` reste donc VRAI, le libellé garde sa grande taille
   et vient se poser sur la valeur affichée. Constaté sur Opera.

   Deux parades, cumulées :
   · les deux textes sont désormais en FLUX (colonne inversée : le libellé s'affiche
     au-dessus alors que l'`<input>` le précède dans le balisage, comme l'exige le
     sélecteur d'état) — ils ne peuvent plus se chevaucher, quel que soit l'état ;
   · `:-webkit-autofill` est explicitement exclu de l'état « vide ».

   L'ombre portée vit sur la carte : elle est présente dans les trois états, et
   l'anneau de bordure s'y AJOUTE au lieu de la remplacer. */

.medianes-champ {
	position: relative;
	display: flex;
	/* Le libellé est affiché au-dessus, mais l'`<input>` doit le précéder dans le
	   DOM : le sélecteur d'état est un `+`, il ne remonte pas. */
	flex-direction: column-reverse;
	justify-content: center;
	gap: 3px;
	box-sizing: border-box;
	min-height: 46px;
	margin: 0;
	padding: var(--wp--preset--spacing--petit);
	border-radius: 6px;
	background: var(--wp--preset--color--blanc);
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
	transition: box-shadow 0.15s ease;
}

/* L'`<input>` ne porte plus rien : la carte s'en charge. */
.medianes-champ input:not([type="submit"]):not([type="button"]) {
	width: 100%;
	min-height: 0;
	padding: 0;
	border: 0;
	background: transparent;
	box-shadow: none;
	outline: none;
	font: 400 18px/1.2 var(--wp--preset--font-family--degular-text);
	color: var(--wp--preset--color--noir-texte);
}

/* Dans la carte, c'est ELLE qui porte l'état (`:focus-within`) : l'`<input>` ne
   doit rien dessiner. Sans cette neutralisation, l'anneau du socle se dessinait
   AUSSI à l'intérieur, et le champ rempli montrait DEUX bordures bleues emboîtées
   (constaté le 2026-08-07).

   ⚠️ La liste de types est reprise du socle À DESSEIN : celui-ci pèse (0,4,1)
   depuis qu'il a fallu passer devant Ollie. Une neutralisation en
   `.medianes-champ input:not(…)` ne pèse que (0,3,1) et perdait — c'est
   exactement ce qui a produit la régression. Avec la liste, on est à (0,5,1). */
.medianes-champ input:is([type="text"], [type="email"], [type="password"], [type="search"], [type="tel"], [type="url"], [type="number"], [type="date"]):not([type="submit"]):not([type="button"]):focus,
.medianes-champ input:is([type="text"], [type="email"], [type="password"], [type="search"], [type="tel"], [type="url"], [type="number"], [type="date"]):not([type="submit"]):not([type="button"]):not(:placeholder-shown),
.medianes-champ input:-webkit-autofill {
	box-shadow: none;
	outline: none;
}

.medianes-champ label {
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: 14px;
	line-height: 1.2;
	color: var(--wp--preset--color--gris-fonce);
	pointer-events: none;
	transition: font-size 0.15s ease;
}

/* VIDE : le libellé tient lieu de texte d'invite, en 18px. L'`<input>` est étiré
   sur toute la carte pour rester cliquable, mais il est vide — rien à recouvrir.
   `:-webkit-autofill` exclu : voir l'explication en tête de section. */
.medianes-champ:has(input:placeholder-shown:not(:focus):not(:-webkit-autofill)) label {
	font-size: 18px;
}

.medianes-champ:has(input:placeholder-shown:not(:focus):not(:-webkit-autofill)) input {
	position: absolute;
	inset: 0;
	padding: var(--wp--preset--spacing--petit);
}

/* RENSEIGNÉ ou EN COURS DE SAISIE : anneau bleu, ombre conservée. */
.medianes-champ:focus-within,
.medianes-champ:has(input:not(:placeholder-shown)),
.medianes-champ:has(input:-webkit-autofill) {
	box-shadow: inset 0 0 0 1px var(--wp--preset--color--bleu-04), 0 1px 6px var(--wp--preset--color--bleu-02);
}

/* ERREUR : anneau rouge, ombre conservée, textes en rouge. */
.medianes-champ:has(input[aria-invalid="true"]) {
	box-shadow: inset 0 0 0 1px var(--wp--preset--color--rouge-erreur), 0 1px 6px var(--wp--preset--color--bleu-02);
}

/* Les deux `:not()` sont là pour la spécificité, comme plus haut : sans eux,
   `.medianes-champ input:not(…):not(…)` (0,3,1) l'emporterait sur cette règle
   (0,2,2) et la valeur resterait en noir dans un champ en erreur. */
.medianes-champ:has(input[aria-invalid="true"]) label,
.medianes-champ:has(input[aria-invalid="true"]) input:not([type="submit"]):not([type="button"]) {
	color: var(--wp--preset--color--rouge-erreur);
}

.medianes-champ:has(input[aria-invalid="true"]) input::placeholder {
	color: var(--wp--preset--color--rouge-erreur);
}

/* Mur d'inscription (2026-08-10, ADR-023)
----------------------------------------------------------------------------
   ÉCRAN NON MAQUETTÉ : l'inventaire Figma ne contient pas de mur de contenu.
   L'habillage est dérivé du langage déjà en place, comme pour le parcours de
   compte — carte du composant « recirculation coté », bouton du thème.

   ⚠️ CETTE SECTION NE DESSINE PLUS LA CARTE. Depuis ADR-023, son habillage vit
   dans la template part `parts/mur-inscription.html`, éditable dans Apparence ▸
   Éditeur ▸ Compositions : couleurs, tailles, graisses et espacements y sont
   des ATTRIBUTS DE BLOCS. Y ajouter ici des règles de typographie ou de couleur
   remettrait la feuille de style en concurrence avec l'éditeur — l'équipe
   changerait un réglage sans effet visible. Ne restent donc que le rognage et
   les correctifs responsives, hors de portée des blocs.

   La carte est posée par `mu-plugins/medianes-core/mur.php` en dernier enfant
   du bloc `core/post-content` (colonne de 600px). Le rognage, lui, est CLIENT :
   `assets/mur.js` pose la classe et le `max-height`. Sans JavaScript, aucune de
   ces deux règles ne s'applique et l'article reste entier sous la carte —
   fail-open (ADR-023). */

.medianes-mur-rogne {
	position: relative;
	overflow: hidden;
}

/* Le fondu se cale sur le bas de la boîte rognée, donc sur la ligne de coupe.

   LA COULEUR D'ARRIVÉE EST CELLE DU FOND DE PAGE, ET ELLE N'EST PAS CELLE QUE
   theme.json ANNONCE : `styles.color.background` vaut « blanc », mais le fond
   effectif du body mesuré sur un article est bleu-00 (#f5f9ff, relevé Chromium
   2026-08-07) — un fondu vers le blanc laissait une bande claire visible. Plutôt
   que de figer une seconde valeur qui divergerait au prochain réglage, mur.js
   lit le fond réel du body et le pose en `--medianes-mur-fond` ; bleu-00 n'est
   que le repli si la lecture échoue.

   `transparent` en couleur de départ : les moteurs actuels interpolent les
   dégradés en alpha prémultiplié, aucun voile gris à craindre. */
.medianes-mur-rogne::after {
	content: "";
	position: absolute;
	inset-inline: 0;
	bottom: 0;
	height: 180px;

	/* Le fond devient OPAQUE 32 px AVANT la ligne de coupe (arrêt à 82 %) : sans
	   cette marge, la dernière ligne de texte restait tranchée en plein milieu de
	   ses lettres — il faut environ la hauteur d'une ligne, la ligne de corps du
	   site montant à 26 px sur mobile. Réglage mesuré en Chromium (1280 et 393)
	   le 2026-08-07 : plus d'opacité (par ex. 220 px, arrêt 80 %) ouvrait à
	   l'inverse un blanc de 110 px entre le texte et la carte. */
	background: linear-gradient(to bottom, transparent, var(--medianes-mur-fond, var(--wp--preset--color--bleu-00)) 82%);
	pointer-events: none;
}

/* L'`aside` que pose mur.php. Il n'habille rien : il place. */
.medianes-mur {
	margin-top: var(--wp--preset--spacing--regulier);
}

/* Mur de LISTE (archive Veille, medianes-mur/inc/liste.php, ADR-037) : la carte
   suit les cinq entrées visibles, à la distance d'une section (48px) — le filet
   sous la dernière entrée fait la séparation, pas besoin de fondu. */
.medianes-mur--liste {
	margin-top: var(--wp--preset--spacing--double);
}

/* Le bloc `core/template-part` s'intercale entre l'aside et la carte : sans
   cette remise à zéro, sa boîte ajouterait la marge de bloc du thème. */
.medianes-mur>.wp-block-template-part {
	margin: 0;
}

/* Les deux seuls correctifs responsives : la maquette n'existant pas, ils
   viennent de la mesure (Chromium 393×852).

   Le titre suffit d'un sélecteur à deux classes pour passer devant la classe de
   préréglage du bloc (`.has-h-3-font-size`), qui n'a pas de variante mobile.

   ⚠️ LA MARGE, ELLE, EXIGE `!important` — exception assumée à l'interdit du
   dépôt, et la seule du fichier. Gutenberg écrit l'espacement d'un bloc en
   STYLE INLINE (`style="padding-top:var(--wp--preset--spacing--double)…"`),
   qu'aucun sélecteur ne peut battre : sans `!important`, la règle est bien
   appariée mais perd, et la carte garde 48 px de marge sur un écran de 393 px.
   Mesuré : le texte tombait à 249 px de large dans une carte de 345, quand le
   corps de l'article en fait 353 — la carte paraissait rétrécie au milieu de
   l'article. Avec la règle : 321 px.

   L'alternative — sortir la marge des attributs de bloc pour la mettre ici —
   coûtait plus cher : l'équipe n'aurait plus pu la régler dans l'éditeur, alors
   que c'est précisément l'objet d'ADR-023. WordPress n'a pas d'espacement
   responsive côté blocs ; tant qu'il n'en a pas, le point de rupture ne peut
   vivre qu'ici. */
@media (max-width: 781px) {

	.medianes-mur .medianes-mur__carte {
		padding: var(--wp--preset--spacing--regulier) var(--wp--preset--spacing--petit) !important;
	}

	.medianes-mur .medianes-mur__titre {
		font-size: var(--wp--preset--font-size--h-4);
	}
}

/* Modale du parcours de compte (2026-08-16, ADR-026)
----------------------------------------------------------------------------
   ÉCRAN NON MAQUETTÉ. Le cadre reprend celui du parcours de compte
   (`.medianes-compte`) : fond blanc, rayon 6px, largeur de 480px, la même que
   les formulaires de /connexion/ — la modale ne redessine rien, elle transporte.

   Le panneau est un <dialog> ouvert par `showModal()` : le piégeage du focus, la
   fermeture par Échap, le backdrop et l'inertage de l'arrière-plan viennent du
   navigateur (même parti qu'ADR-009 pour le menu mobile).

   Rendu par `medianes_compte_modale()` (functions.php) et piloté par
   `assets/compte-modale.js`. Sans JavaScript, le serveur ouvre le <dialog> avec
   l'attribut `open` : il s'affiche alors en flux, non modal, et reste utilisable
   — c'est le repli du retour de lien reçu par e-mail. */

.medianes-modale {
	width: min(480px, calc(100vw - 2 * var(--wp--preset--spacing--regulier)));
	max-height: calc(100vh - 2 * var(--wp--preset--spacing--regulier));
	padding: 0;
	border: 0;
	border-radius: 6px;
	background: var(--wp--preset--color--blanc);
	color: var(--wp--preset--color--bleu-10);
	overflow: visible;
}

.medianes-modale::backdrop {
	background: rgb(0 0 41 / 55%);
}

/* Arrivée de la modale : un fondu et une montée de 8px, 180ms. Assez pour que
   l'œil suive d'où vient le panneau, assez court pour ne pas se mettre entre la
   personne et son geste.

   `@starting-style` donne l'état AVANT ouverture d'un élément qui passe de
   `display:none` à visible — sans lui, un `<dialog>` apparaît sec, la transition
   n'ayant aucun état de départ à interpoler. Les navigateurs qui l'ignorent
   affichent simplement la modale sans animation : c'est le bon repli.

   `allow-discrete` fait de même pour `display`, qui n'est pas animable autrement. */
@media (prefers-reduced-motion: no-preference) {

	.medianes-modale {
		opacity: 1;
		translate: 0 0;
		transition:
			opacity 180ms ease-out,
			translate 180ms ease-out,
			display 180ms allow-discrete,
			overlay 180ms allow-discrete;
	}

	.medianes-modale:not([open]) {
		opacity: 0;
		translate: 0 8px;
	}

	@starting-style {

		.medianes-modale[open] {
			opacity: 0;
			translate: 0 8px;
		}
	}

	.medianes-modale::backdrop {
		opacity: 1;
		transition:
			opacity 180ms ease-out,
			display 180ms allow-discrete,
			overlay 180ms allow-discrete;
	}

	.medianes-modale:not([open])::backdrop {
		opacity: 0;
	}

	@starting-style {

		.medianes-modale[open]::backdrop {
			opacity: 0;
		}
	}
}

.medianes-modale__cadre {
	position: relative;
	max-height: calc(100vh - 2 * var(--wp--preset--spacing--regulier));
	padding: var(--wp--preset--spacing--double) var(--wp--preset--spacing--gouttiere);
	overflow-y: auto;
}

/* Le panneau porte `tabindex="-1"` pour recevoir le focus à l'ouverture quand
   l'écran n'a pas de champ de saisie (cf. `assets/compte-modale.js`). Il n'est
   pas atteignable au clavier, il ne doit donc pas s'entourer d'un anneau — c'est
   un point d'ancrage pour les lecteurs d'écran, pas une commande. Les commandes
   qu'il contient, elles, gardent le leur. */
.medianes-modale__cadre:focus {
	outline: none;
}

/* Le bouton de fermeture est hors du flux : la maquette du parcours de compte
   centre ses formulaires, et une croix dans le flux décalerait le premier titre. */
.medianes-modale__fermer {
	position: absolute;
	top: var(--wp--preset--spacing--petit);
	right: var(--wp--preset--spacing--petit);
	width: 32px;
	height: 32px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: transparent;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: var(--wp--preset--color--bleu-08);
	line-height: 0;
	cursor: pointer;
}

.medianes-modale__fermer:hover {
	background: var(--wp--preset--color--bleu-01);
	color: var(--wp--preset--color--bleu-10);
}

/* Les états rendus par le serveur (confirmation, lien périmé, bienvenue) portent
   un titre. Sans cette règle il hérite de l'échelle des titres d'ARTICLE — mesuré
   sur dev26 : « Confirmer la connexion » tenait sur deux lignes dans une boîte de
   480px. On reprend l'échelle du parcours de compte, à laquelle la modale
   appartient. */
.medianes-modale__vue h2,
.medianes-modale__contenu h2 {
	margin: 0 0 var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--loretta);
	font-size: var(--wp--preset--font-size--h-4);
	font-weight: 300;
	line-height: 1.1;
	color: var(--wp--preset--color--bleu-10);
}

/* Les deux écrans rendus d'avance : `hidden` suffit, mais le bloc `medianes-compte`
   porte un `display` qui l'emporterait sur l'attribut. */
.medianes-modale__vue[hidden] {
	display: none;
}

/* Amorce contextuelle : la phrase que le déclencheur fait dire à la modale
   (« Créez votre compte pour mettre des articles de côté… »). Elle s'insère
   entre le titre et le formulaire, dans le corps de texte du parcours — c'est
   une explication, pas un second titre. */
.medianes-modale__amorce {
	margin: 0 0 var(--wp--preset--spacing--regulier);
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-modale__amorce[hidden] {
	display: none;
}

/* La modale porte le formulaire du bloc `medianes/compte` tel quel : on neutralise
   seulement la largeur que ce bloc se donne sur une page ordinaire. */
.medianes-modale .medianes-compte {
	max-width: none;
	margin: 0;
	padding: 0;
}

.medianes-modale__attente,
.medianes-modale__compte-a-rebours {
	margin: 0;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--note);
	color: var(--wp--preset--color--bleu-08);
	text-align: center;
}

.medianes-modale__compte-a-rebours {
	margin-top: var(--wp--preset--spacing--petit);
	min-height: 1.4em;
}

/* Sans JavaScript, le <dialog> est rendu `open` : il s'affiche en flux, dans la
   page, et doit alors se comporter comme une carte ordinaire plutôt que comme un
   panneau flottant. */
.medianes-modale[open]:not(:modal) {
	margin: var(--wp--preset--spacing--double) auto;
	box-shadow: 0 1px 6px var(--wp--preset--color--bleu-02);
}

@media (max-width: 781px) {

	.medianes-modale__cadre {
		padding: var(--wp--preset--spacing--double) var(--wp--preset--spacing--regulier);
	}
}

/* Interrupteurs de newsletters (2026-08-16, ADR-026)
----------------------------------------------------------------------------
   Rendus par `medianes_brevo_interrupteurs()` (medianes-core/brevo.php), aux
   deux endroits qui proposent les newsletters : la modale d'accueil après une
   connexion par lien, et « Mon compte ». Un seul rendu, donc un seul habillage.

   L'interrupteur est une CASE À COCHER habillée, pas un composant JavaScript :
   elle garde le clavier, le rôle et l'état natifs, et le formulaire fonctionne
   sans script. La case elle-même est masquée visuellement mais reste dans le
   flux du focus — d'où l'anneau porté par la piste via `:focus-visible`. */

.medianes-nl-switches {
	margin: 0 0 var(--wp--preset--spacing--regulier);
	padding: 0;
	list-style: none;
	border: 1px solid var(--wp--preset--color--bleu-02);
	border-radius: 6px;
}

.medianes-nl-switch+.medianes-nl-switch {
	border-top: 1px solid var(--wp--preset--color--bleu-02);
}

.medianes-nl-switch__label {
	display: flex;
	gap: var(--wp--preset--spacing--regulier);
	align-items: flex-start;
	justify-content: space-between;
	padding: var(--wp--preset--spacing--regulier) var(--wp--preset--spacing--petit);
	cursor: pointer;
}

.medianes-nl-switch__nom {
	display: block;
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 500;
	line-height: 1.3;
	color: var(--wp--preset--color--bleu-10);
}

.medianes-nl-switch__desc {
	display: block;
	margin-top: var(--wp--preset--spacing--nano);
	font-family: var(--wp--preset--font-family--degular-text);
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.35;
	color: var(--wp--preset--color--bleu-08);
}

/* La case reste focusable : on la réduit plutôt que de la retirer du flux. */
.medianes-nl-switch__box {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	border: 0;
	clip-path: inset(50%);
	overflow: hidden;
}

.medianes-nl-switch__piste {
	position: relative;
	flex: 0 0 auto;
	width: 44px;
	height: 24px;
	margin-top: 2px;
	border-radius: 12px;
	background: var(--wp--preset--color--bleu-03);
	transition: background-color 140ms ease-out;
}

.medianes-nl-switch__piste::after {
	content: "";
	position: absolute;
	top: 3px;
	left: 3px;
	width: 18px;
	height: 18px;
	border-radius: 50%;
	background: var(--wp--preset--color--blanc);
	transition: translate 140ms ease-out;
}

.medianes-nl-switch__box:checked+.medianes-nl-switch__piste {
	background: var(--wp--preset--color--bleu-08);
}

.medianes-nl-switch__box:checked+.medianes-nl-switch__piste::after {
	translate: 20px 0;
}

.medianes-nl-switch__box:focus-visible+.medianes-nl-switch__piste {
	outline: 2px solid var(--wp--preset--color--bleu-10);
	outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {

	.medianes-nl-switch__piste,
	.medianes-nl-switch__piste::after {
		transition: none;
	}
}


/* ------------------------------------------------------- Attente d'un bouton
 *
 * Entre le clic et l'écran suivant il y a un aller-retour réseau — court, mais
 * assez long pour qu'on doute d'avoir cliqué et qu'on recommence. Le bouton
 * porte donc son propre témoin d'attente.
 *
 * `aria-busy` est posé en même temps par le script : la roue est une information
 * visuelle, elle ne dit rien à qui n'y voit pas.
 */
[data-medianes-attente] {
	pointer-events: none;
	opacity: 0.8;
}

[data-medianes-attente]::before {
	display: inline-block;
	width: 1em;
	height: 1em;
	margin-inline-end: 0.6em;
	vertical-align: -0.15em;
	content: "";
	border: 2px solid currentcolor;
	border-top-color: transparent;
	border-radius: 50%;
	animation: medianes-attente-rotation 0.7s linear infinite;
}

@keyframes medianes-attente-rotation {

	to {
		transform: rotate(360deg);
	}
}

/*
 * Message d'état sans encadré : dans la modale, le panneau est déjà un cadre,
 * et un second à l'intérieur donnait un rectangle dans un rectangle.
 */
.medianes-compte__etat {
	margin: 0;
	font-size: var(--wp--preset--font-size--corps);
	line-height: 1.55;
	color: var(--wp--preset--color--bleu-10);
}

@media (prefers-reduced-motion: reduce) {

	[data-medianes-attente]::before {
		animation-duration: 2.4s;
	}
}

/*
 * Retour d'enregistrement des interrupteurs. Discret : c'est une confirmation,
 * pas une alerte — le vrai retour est la position de l'interrupteur lui-même.
 */
.medianes-nl-etat {
	margin: var(--wp--preset--spacing--petit) 0 0;
	font-size: var(--wp--preset--font-size--note);
	text-align: center;
	color: var(--wp--preset--color--gris-bleu);
}

/* Page « Le club » (/club/) — maquette 7836:28388
   ────────────────────────────────────────────────────────────────────────────
   Premier et seul écran de l'univers Réseau, arrivé le 2026-09-10 : la page
   cesse d'être un tenant-lieu. Le contenu est en blocs natifs, écrit par
   `scripts/migration/page-club.php` — ne sont ici que les valeurs Figma qui ne
   peuvent PAS vivre en attribut de bloc : la géométrie propre à l'écran (qui
   doit varier au mobile, alors qu'un padding d'attribut devient un style inline
   qu'aucune feuille ne reprend sans `!important`) et l'aplat hors palette de la
   bande sombre.

   ⚠️ AUCUN NODE MOBILE. Vérifié dans le fichier : la page Maquettes ne contient
   qu'un cadre « Le club », en 1440. Le repli suit donc les conventions DÉJÀ EN
   SERVICE sur le site — bascule à 781px, `triple`/`grand` remappés sur `double`
   par la règle générale de `main`, côtés ramenés à `regulier` sur les bandes qui
   portent leur propre padding, colonnes empilées, boutons pleine largeur — et
   non une maquette. À confronter à Figma si l'écran mobile est un jour dessiné.
--------------------------------------------------------------------------- */

/* La maquette casse le titre après « Médianes : ». Replié, ce retour découpait
   le titre à un endroit qui n'a plus de sens : il ne sert donc qu'en grand. */
@media (max-width: 781px) {

	.medianes-club-hero h1 br {
		display: none;
	}
}

/* Visuels 400×400 : UNE seule peinture, deux cadrages. Les pourcentages de la
   maquette sont ramenés en `object-position` — le héro (7836:28542) montre les
   montagnes (fenêtre basse, 88 %), la recirculation finale (7836:28801) le ciel
   (fenêtre haute, 5 %).

   Le carré est tenu à toutes les largeurs, pour les deux visuels : c'est ce que
   dessine la maquette, et ce que le site sert déjà (mesuré sur /formations/ le
   2026-09-10 — les visuels de côté y font 400×400, la colonne restant en
   `flex-start`, jamais étirée). */
.medianes-club-visuel img {
	display: block;
	width: 100%;
	aspect-ratio: 1 / 1;
	object-fit: cover;
}

.medianes-club-visuel--hero img {
	object-position: 50% 88%;
}

/* 3px de rayon (`nano`) sur celui de la recirculation seulement : la maquette
   arrondit ce visuel-là, pas celui du héro. */
.medianes-club-visuel--recirc img {
	object-position: 50% 5%;
	border-radius: 3px;
}

/* Bande éditoriale (7842:28844) : l'illustration (7839:28837) tapisse les 1024
   premiers pixels de la bande, la colonne blanche de 909px se pose dessus.

   `isolation: isolate` fait de la bande un contexte d'empilement, ce qui garde
   le `z-index: -1` du fond DANS la bande : sans lui le pseudo-élément passerait
   derrière le fond du document et disparaîtrait.

   Cadrage : la maquette ouvre une fenêtre de 1440×1024 sur une image de
   1826×2736, décalée de 975px vers le haut — soit `cover` à 86 % de hauteur. */
.medianes-club-bande {
	position: relative;
	isolation: isolate;
}

.medianes-club-bande::before {
	content: "";
	position: absolute;
	z-index: -1;
	inset: 0 0 auto;
	height: 100%;
	background: url(assets/club-illustration.webp) 50% 86% / cover no-repeat fixed;
}

/* Colonne éditoriale blanche (7836:28391) et sa clôture (7839:28843) : 72px
   d'air haut et bas, 96px sur les côtés. En CSS et non en attribut, pour que le
   mobile puisse reprendre les côtés sans `!important`. */
.medianes-club-colonne,
.medianes-club-cloture {
	padding: var(--wp--preset--spacing--triple) var(--wp--preset--spacing--grand);
}

/* Étiquette de section (style Figma « Étiquette » : Degular Mono 14px,
   interligne 1,5, capitales). 14px n'est pas dans l'échelle de theme.json —
   la valeur du style est écrite ici plutôt qu'un préset inventé. Les capitales
   viennent du CSS : le contenu garde sa casse naturelle, ce qui laisse la
   traduction lisible. */
.medianes-club-etiquette {
	margin: 0;
	font-size: 14px;
	line-height: 1.5;
	text-transform: uppercase;
}

/* Repère encadré (7836:28712) : deux filets bleu-03, 10px d'air. */
.medianes-club-repere {
	padding: 10px 0;
	border-top: 1px solid var(--wp--preset--color--bleu-03);
	border-bottom: 1px solid var(--wp--preset--color--bleu-03);
}

/* L'appel intercalé (7836:28715) centre tout son contenu, bouton compris — les
   titres le font par leur alignement de texte, la rangée de boutons non. */
.medianes-club-appel .wp-block-buttons {
	justify-content: center;
}

/* Bande des quatre briques (7836:28799) : large de 1248px (`alignwide`, wideSize
   du thème), 72/96 d'air, quatre cartes bleu-04 de hauteur égale — l'étirement
   vient du `stretch` par défaut des colonnes, rien à poser.

   ⚠️ ÉCART SIGNALÉ À BAPTISTE, NON TRANCHÉ : l'aplat de la bande est `#011e63`
   dans la maquette — une couleur SANS variable Figma, absente de la palette du
   site (Bleu/700 = #000052, le marine servi partout ailleurs). La valeur de la
   maquette est reprise telle quelle et en un seul endroit, en attendant de
   savoir s'il s'agit d'un token manquant ou d'un aplat posé à la main. */
.medianes-club-briques {
	padding: var(--wp--preset--spacing--triple) var(--wp--preset--spacing--grand);
	background: #011e63;
}

.medianes-club-brique {
	padding: var(--wp--preset--spacing--regulier);
	border-radius: 6px;
	background: var(--wp--preset--color--bleu-04);
}

/* Entre 782 et 1080px, quatre colonnes ne laissent que ~200px par brique : le
   titre en Degular 40px y tient sur cinq lignes. Repli en 2×2 — WP force
   `flex-wrap: nowrap !important` au-delà de 782px, d'où la surcharge.
   Même mécanique que la rangée du footer (recette #50). */
@media (min-width: 782px) and (max-width: 1080px) {

	.medianes-club-briques .wp-block-columns {
		flex-wrap: wrap !important;
		/* justification : contre le nowrap !important du cœur */
	}

	.medianes-club-brique {
		flex-basis: calc(50% - var(--wp--preset--spacing--regulier)) !important;
		/* justification : contre le flex-basis inline des colonnes */
	}
}

/* Côtés des bandes propres à cet écran ramenés à 24px : `grand` est déjà
   plafonné à 48px par le remap de `main`, ce qui laissait 249px de texte utile
   dans la colonne — le seuil où la même famille de bandes avait déjà été
   resserrée (voir `medianes-temoignage`). */
@media (max-width: 781px) {

	.medianes-club-colonne,
	.medianes-club-cloture,
	.medianes-club-briques {
		padding: var(--wp--preset--spacing--double) var(--wp--preset--spacing--regulier);
	}

	.medianes-contact {
		padding: 24px !important;
	}

	.post-type-archive-veille,
	.post-type-archive-mission {
		.medianes-colonne-carte {
			margin-top: 0 !important;
		}
	}

	.padding-top-mobile-0 {
		padding-top: 0 !important;
	}


}

@media (max-width: 781px) {
	/* il s'agit de la page contact */

	.page-id-31 {
		:is(main, .wp-block-post-content)>*:first-child:not(.wp-block-post-content) {
			padding-top: 0 !important;
		}
	}
}


.medianes-newsletter__rgpd {
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note) !important;
}

/* Fiches formation en blocs natifs (ADR-038, maquette 8054:29055)
   ─────────────────────────────────────────────────────────────────────────────
   Les patterns « Formation — … » réutilisent les classes de la première
   intégration (`medianes-formation__*`, `medianes-bio`, `medianes-avis`,
   `medianes-cta-accomp`, `medianes-recirculation`) partout où le dessin n'a pas
   changé. Ne vivent ici que les composants nouveaux ou redessinés. */

/* Points clés illustrés (maquette 8054:29067) : bande bleu-02 de 24px de marge
   verticale, quatre cartes de 12px de padding à gouttière 48, illustration
   108 × 110, titre Degular Medium 26, valeur mono 15, détail mono 13. */
.medianes-points-cles {
	padding-block: var(--wp--preset--spacing--regulier);
}

/* La bande est collée sous la bannière (cadre 152 de la maquette) : le
   `blockGap` du contenu en flux l'en écartait de 60px. Même chose pour les
   cartes dans la grille, que ce gap décalait de 24px à partir de la deuxième. */
.medianes-formation>.medianes-points-cles,
.medianes-points-cles__grille>* {
	margin-block-start: 0;
}

.medianes-points-cles__grille {
	display: grid;

	/* Autant de colonnes égales que de cartes : quatre sur « Créer un média »
	   (8054:29067), cinq sur « Le Programme Médianes » (496:15387). */
	grid-auto-flow: column;
	grid-auto-columns: minmax(0, 1fr);
	gap: var(--wp--preset--spacing--double);
}

.medianes-points-cles__carte {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--petit);
	padding: var(--wp--preset--spacing--petit);
	border-radius: 6px;
	color: var(--wp--preset--color--bleu-08);
}

.medianes-points-cles__carte>* {
	margin: 0;
}

.medianes-points-cles__illustration img {
	display: block;
	width: 108px;
	height: 110px;
}

@media (max-width: 999px) {

	.medianes-points-cles__grille {
		grid-auto-flow: row;
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 480px) {

	.medianes-points-cles__grille {
		grid-template-columns: 1fr;
	}
}

/* Rangées de photos du Programme Médianes (maquette 496:14452) : trois photos
   à gouttière 24 sur toute la largeur (8054:29715), deux photos (8054:30045) ou
   grille 2 × 2 (8054:29991) à gouttière 12 dans la colonne de 815. Figures au
   format 3/2, sans arrondi, comme la maquette. Le mobile est dérivé du desktop
   (consigne Baptiste 2026-09-22, maquette mobile non tenue à jour) : une
   colonne pour les rangées, deux pour la grille. */
.medianes-photos {
	display: grid;
	grid-auto-flow: column;
	grid-auto-columns: minmax(0, 1fr);
	gap: var(--wp--preset--spacing--regulier);
}

.medianes-photos--serree,
.medianes-photos--grille {
	gap: var(--wp--preset--spacing--petit);
}

.medianes-photos--grille {
	grid-auto-flow: row;
	grid-template-columns: repeat(2, minmax(0, 1fr));
}

.medianes-photos>figure {
	margin: 0;
	aspect-ratio: 3 / 2;
	overflow: hidden;
	background: var(--wp--preset--color--bleu-01);
}

.medianes-photos>figure img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

@media (max-width: 781px) {

	.medianes-photos {
		grid-auto-flow: row;
		grid-template-columns: 1fr;
	}

	.medianes-photos--grille {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

/* Avis du Programme Médianes (496:14748) : le « portrait » est le logo du
   média, entier dans ses 60 × 60 ; celui de MOB est posé sur un carré noir,
   comme dans la maquette. Le média est en italique après le nom. */
.medianes-avis__portrait figure {
	margin: 0;
}

.medianes-avis__portrait--logo img {
	object-fit: contain;
}

.medianes-avis__portrait--noir {
	background: var(--wp--preset--color--noir);
	border-radius: 3px;
}

/* Équipe formatrice (maquette 8054:30818) : six bios de 168px puis trois
   centrées, à la même largeur que celles de la première rangée ; texte en note
   sans 15/1,4 (la page À propos garde ses 17px, le composant y est plus large). */
.medianes-equipe .medianes-bio__texte {
	font-size: var(--wp--preset--font-size--note);
	line-height: 1.4;
}

@media (min-width: 782px) {

	.medianes-equipe__rangee--centree {
		justify-content: center;
	}

	/* Quatre classes : le cœur pose `flex-basis:0; flex-grow:1` sur
	   `.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column`,
	   soit (0,3,0) — à égalité, l'ordre des feuilles déciderait. */
	.medianes-equipe .wp-block-columns.medianes-equipe__rangee--centree>.wp-block-column {
		flex-basis: calc((100% - 5 * var(--wp--preset--spacing--double)) / 6);
		flex-grow: 0;
	}
}

/* Les groupes contraints (titre-intro, FAQ, programme) reçoivent du cœur la
   classe `has-global-padding`, donc 24px de padding latéral par côté sur mobile —
   en plus de la gouttière que `medianes-formation__inner` porte déjà en marge :
   le texte tombait à 290px pour 338 aux autres sections. La gouttière est une
   marge ici, pas un padding. */
.medianes-formation__inner.has-global-padding {
	padding-inline: 0;
}

/* Recirculation centrée : la maquette donne 200px de marge latérale, posés en
   attributs de bloc ; sous 781px ils rendraient la colonne de texte illisible.
   `!important` : l'espacement d'un bloc est un style inline (même cas, même
   justification que la carte du mur d'inscription, plus haut). */
@media (max-width: 781px) {

	.medianes-recirculation-centree {
		padding-left: var(--wp--preset--spacing--regulier) !important;
		padding-right: var(--wp--preset--spacing--regulier) !important;
	}
}

/* Page « Se former » (/formations/, maquette 493:43653 — contenu éditable depuis
   ADR-038, gabarit page-libre, plus de contenu en dur dans un gabarit)
   ─────────────────────────────────────────────────────────────────────────────
   Chaque section racine porte une classe `medianes-sf-*` : c'est ce qui permet
   l'ordre mobile demandé par Baptiste (2026-09-21) — « les formations en haut,
   et prévoir le reste de la page quand même ». Même procédé que l'entrelacement
   de /le-media/ (ADR-010) : `flex-direction: column` + `order`, le DOM ne bouge
   pas. Les marges des sections sont toutes en `margin-top` (un conteneur flex ne
   fusionne pas les marges verticales). */
@media (max-width: 781px) {

	body.medianes-page-formations .wp-block-post-content {
		display: flex;
		flex-direction: column;
	}

	body.medianes-page-formations .medianes-sf-hero {
		order: 10;
	}

	body.medianes-page-formations .medianes-sf-formations {
		order: 20;
	}

	body.medianes-page-formations .medianes-sf-approche {
		order: 30;
	}

	body.medianes-page-formations .medianes-sf-racontez {
		order: 40;
	}

	body.medianes-page-formations .medianes-sf-sur-mesure {
		order: 50;
	}

	body.medianes-page-formations .medianes-sf-qsn {
		order: 60;
	}

	body.medianes-page-formations .medianes-sf-financer {
		order: 70;
	}

	body.medianes-page-formations .medianes-sf-question {
		order: 80;
	}

	/* Les deux cartes de formation empilées : la première prend la marge de
	   section, la seconde 24px. */
	body.medianes-page-formations .medianes-sf-formations .wp-block-column+.wp-block-column {
		margin-top: var(--wp--preset--spacing--regulier);
	}
}

/* Les deux photos de « Notre approche » (maquette 8054:28429) : même hauteur
   quelle que soit la prise de vue, la légende en mono 15 dessous. */
.medianes-sf-photos .wp-block-image img {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	border-radius: 6px;
}

/* Listes de contenu : puces DANS le conteneur, rythme de la maquette
   ─────────────────────────────────────────────────────────────────────────────
   Ticket Baptiste, 2026-09-22 : « les puces sont sorties des containers, sur
   tout le site ». Cause : Ollie pose `ol, ul { padding: 0 }` puis rétablit
   `padding-inline-start: var(--wp--preset--spacing--medium)` — un préset
   d'espacement que ce thème enfant ne définit PAS (son échelle est petit /
   regulier / gouttiere / double…). La variable est invalide, la propriété tombe
   à sa valeur initiale, 0 : les marqueurs (`list-style-position: outside`)
   débordent à gauche du bloc. Mesuré sur une fiche formation et une fiche
   pratique : `padding-inline-start` calculé à 0px.

   Valeurs de la maquette (composant « Champ déployable » `8054:30546`, corps
   sans) : items indentés de 27px, 6px entre deux items, 12px autour d'une liste,
   interligne 1,35. Portée : les listes du bloc Liste (`.wp-block-list`) et les
   listes SANS classe des contenus (200 contenus importés de Ghost en portent) ;
   les listes de composants (`medianes-liste-coches`, filtres, menus…) gardent
   leurs règles propres, plus spécifiques. */
:is(ul, ol).wp-block-list,
.wp-block-post-content :is(ul, ol):where(:not([class])) {
	padding-inline-start: 27px;
	list-style-position: outside;
	line-height: 1.35;
}

:is(ul, ol).wp-block-list>li+li,
.wp-block-post-content :is(ul, ol):where(:not([class]))>li+li {
	margin-top: 6px;
}

/* Dans le corps d'article (Loretta, `.medianes-article__contenu p` à 1,45), les
   items de liste suivent le paragraphe qui les entoure, pas le corps sans. */
.medianes-article__contenu :is(ul, ol).wp-block-list {
	line-height: 1.45;
}

/* ══════════════════════════════════════════════════════════════════════════
   ÉDITION DE NEWSLETTER — la peau « courriel » (ADR-038, arbitrages du
   2026-09-22)

   Une édition n'est plus un article déguisé. Elle reprend trois traits du
   courriel d'origine, et trois seulement :

   1. le FOND D'ÉPOQUE, servi en variable par l'extension d'archives
      (`--medianes-nl-fond`, une déclaration par page vue). Cinq teintes sur
      quatre ans, dont trois sont des jetons du thème ; le repli bleu-00 sert
      les 58 numéros des « 10 liens » venus de Ghost, qui n'ont jamais été des
      courriels ;
   2. les CARTES blanches posées dessus (`.medianes-nl-carte`), émises par le
      convertisseur à partir des cellules blanches du gabarit nl2go ;
   3. la TYPOGRAPHIE de la newsletter, qui n'est NI Degular NI Loretta : les
      courriels déclarent `arial, helvetica, sans-serif` sur leurs 1 651 cellules
      de texte, sur toute la période 2022-2026, sans une seule exception (mesuré
      sur `scripts/recette/corpus-brevo/`). Les titres gardent l'échelle du corps
      d'article (26 / 20 / 18 / 15), que le courriel suit déjà — il compose ses
      titres entre 24 et 26px.

   Aucune couleur n'est écrite dans le `post_content` : changer cet habillage
   ne demande aucune reconversion. */

/* ÉCART AU-DESSUS DE LA BANDE. En desktop il vient du gabarit : 24px de marge
   puis 24px de marge intérieure, soit 48px entre le chapô et le bandeau du
   courriel, contre 88 à l'origine (Baptiste, 2026-09-22). La marge ne peut pas
   tomber à zéro : elle seule sépare le chapô du BORD de la teinte, qui sinon
   démarre sur sa dernière ligne — très visible sur une Coulisses, dont le beige
   tranche avec le bleu-00 de la page.

   En MOBILE il reste à 48px, et c'est délibéré : la règle d'espacement générique
   du thème pose `margin-bottom: 48px !important` sur chaque enfant direct de
   `main` qui n'est pas pleine largeur, pour tenir un rythme commun à tout le
   site. La contredire ici demandait un sélecteur plus spécifique qu'elle —
   (0,4,2) — donc une surenchère de classes répétées, pour désaccorder un seul
   gabarit du rythme mobile général. Pas le bon échange. */
body.single-newsletter .medianes-edition-bande {
	background-color: var(--medianes-nl-fond, var(--wp--preset--color--bleu-00));
}

/* La carte : la cellule blanche du courriel. Rayon et marge intérieure repris
   de l'encadré Ghost (`.kg-callout-card`), seul précédent du dépôt pour une
   boîte dans le fil du texte. */
.medianes-edition__contenu .medianes-nl-carte {
	background-color: var(--wp--preset--color--blanc);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--double);

	/* Même motif que `.medianes-article__contenu` : une URL collée en clair
	   impose son min-content à la piste de la grille, et la marge intérieure de
	   la carte s'ajoute à la chaîne. */
	overflow-wrap: anywhere;
}

.medianes-edition__contenu .medianes-nl-carte+.medianes-nl-carte {
	margin-top: var(--wp--preset--spacing--regulier);
}

.medianes-edition__contenu .medianes-nl-carte> :first-child {
	margin-top: 0;
}

.medianes-edition__contenu .medianes-nl-carte> :last-child {
	margin-bottom: 0;
}

/* Une carte qui ne porte que des images est un visuel pleine largeur : le
   bandeau de marque en tête d'édition mesure 570px dans 600px de carte, une
   marge intérieure de 32px le rétrécirait d'un quart. */
.medianes-edition__contenu .medianes-nl-carte--visuel {
	padding: 0;
	overflow: hidden;
}

.medianes-edition__contenu .medianes-nl-carte--visuel figure {
	margin: 0;
}

/* Les éditions d'avant le gabarit en cartes — et les numéros venus de Ghost —
   n'en produisent aucune : sans ce repli, leur texte flotterait à même le fond
   teinté. `:has()` est déjà en service plus haut (`.kg-callout-card`). */
.medianes-edition__contenu:not(:has(.medianes-nl-carte)) {
	background-color: var(--wp--preset--color--blanc);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--double);
}

/* La pile du courriel, telle qu'il la déclare. Elle n'est PAS un jeton du thème
   et ne doit pas le devenir : `theme.json` ne porte que Degular et Loretta
   (CLAUDE.md §5), et l'inscrire au catalogue la proposerait dans le sélecteur de
   polices de tous les blocs du site. Elle vit ici, et nulle part ailleurs.

   Les courriels composent leur corps à 16px jusqu'en 2024 et à 17px depuis 2026,
   avec un interlignage de 1,5. Le jeton `corps` (18px) est le plus proche ; on ne
   fabrique pas un jeton de 17px pour un pixel d'écart. La graisse 300 de
   l'article, dessinée pour Loretta, est trop maigre sur une grotesque système. */
body.single-newsletter {
	--medianes-nl-police: arial, helvetica, sans-serif;
}

/* Les titres sont visés explicitement : `.medianes-article__contenu h2` impose
   Degular avec une spécificité de (0,1,1), et `theme.json` style tous les titres
   globalement. Les surtitres et les légendes, eux, gardent la voix « note » du
   site (décision 18) : leur classe `has-degular-mono-font-family` est posée par
   WordPress avec `!important` et gagne sur cette règle. */
.medianes-edition__contenu,
.medianes-edition__contenu :is(h1, h2, h3, h4, h5, h6),
.medianes-edition__contenu :is(p, li, figcaption, blockquote, cite, a, strong, em) {
	font-family: var(--medianes-nl-police);
}

.medianes-edition__contenu {
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 400;
}

.medianes-edition__contenu p {
	line-height: 1.5;
}

.medianes-edition__contenu :is(ul, ol).wp-block-list {
	line-height: 1.5;
}

@media (max-width: 781px) {

	/* `:not(--visuel)` : sans cette exclusion, la règle mobile, plus tardive,
	   rendait sa marge intérieure à la carte du bandeau, qui rentrait de 24px
	   de chaque côté au lieu de toucher les bords. */
	.medianes-edition__contenu .medianes-nl-carte:not(.medianes-nl-carte--visuel),
	.medianes-edition__contenu:not(:has(.medianes-nl-carte)) {
		padding: var(--wp--preset--spacing--regulier);
	}
}