/*
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;
}

/* 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 d'une newsletter (single newsletter, consigne Noé
   2026-07-31) : fond de PAGE blanc, seul le bandeau d'ouverture
   (`medianes-nl-single__hero`) garde son fond beige. Le CPT `newsletter` est
   rattaché à l'univers Média, il héritait donc du bleu-00 de la règle
   ci-dessus. */
body.single-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);
}

/* Troisième page du même cas (consigne Noé 2026-08-03) : /notre-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. */
body.medianes-page-notre-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-ouverture > p,
.medianes-qsn p,
.medianes-recirculation p:not(.medianes-lien-fleche):not(.medianes-hyperlien),
.medianes-recirc-cote p:not(.medianes-lien-fleche):not(.medianes-hyperlien):not(.has-corps-serif-font-size) {
	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;
}

/* 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);
}

.medianes-header__lang::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;
}

.medianes-menu-mobile__corps {
	flex: 1;
	overflow-y: auto;
	padding: 0 0 var(--wp--preset--spacing--double);
}

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

/* Univers : bandes bleu-01 séparées par un filet de fond (3px), le panneau
   bleu-00 apparaissant entre elles. */
.medianes-menu-mobile__univers {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--nano);
}

.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);
	font-family: var(--wp--preset--font-family--degular);
	font-size: var(--wp--preset--font-size--chapo);
	font-weight: 500;
	line-height: 1.2;
}

/* 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). */
.medianes-menu-mobile__u > ul {
	margin: 0;
	padding: 0;
	list-style: none;
}

.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 + padding 6/12 : 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. */
.medianes-menu-mobile__expertises .medianes-tag a {
	background: var(--wp--preset--color--blanc);
	padding: var(--wp--preset--spacing--micro) 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;
}

.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);
	font-size: var(--wp--preset--font-size--corps);
	font-weight: 500;
	line-height: 1.2;
}

/* 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);
}

/* 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));
}

/* 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 son texte PLUS ses deux paddings, 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. 1,4 × 15 + 2 × 6 = 33px, soit exactement la
   hauteur d'une pastille : les lignes se touchent, comme dans la maquette. */
.medianes-tag {
	display: block;
	line-height: calc(1.4 * var(--wp--preset--font-size--note) + 2 * var(--wp--preset--spacing--micro));
}

/* 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 élargi du conteneur et grandirait d'autant.
   `margin-right` remplace le `gap` disparu avec le flex. */
.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: var(--wp--preset--spacing--micro) 12px;
	margin-right: var(--wp--preset--spacing--micro);
	border-radius: 3px;
	text-transform: uppercase;
	text-decoration: none;
	line-height: 1.3;
	text-box-edge: cap alphabetic;
	text-box-trim: trim-both;
}

.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);
}

/* 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;
}

.wp-element-button:hover,
.wp-element-button:focus-visible {
	background-color: var(--wp--preset--color--bleu-04);
	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;
}

.wp-block-button.is-style-outline .wp-block-button__link:hover,
.wp-block-button.is-style-outline .wp-block-button__link:focus-visible {
	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;
}

/* Lien retour des pages enfants Expertise (bouton « Retour aux expertises »,
   node 2955:42648) : picto flèche gauche 24 + libellé souligné. */
.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. */
@media (min-width: 782px) and (max-width: 1080px) {

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

	.medianes-footer__nl {
		flex-grow: 1;
	}
}

.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;
}

.medianes-footer__labels {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--regulier);
	margin-top: var(--wp--preset--spacing--petit);
}

.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.

   La mention vit HORS de la colonne de gauche, au niveau du footer : dans la
   maquette elle tient sur une seule ligne dans un bloc de 936px, plus large que
   la colonne de 708px qui la contient.

   Marge nulle, et surtout PAS négative : la colonne de gauche s'arrête pile au
   bas du logo Qualiopi, si bien qu'un `-24px` destiné à rattraper le `blockGap`
   du footer faisait chevaucher la mention et la mention « RÉPUBLIQUE FRANÇAISE »
   du logo — mesuré à 24px de recouvrement le 2026-08-11. L'écart restant est
   donc celui du `blockGap`, là où la maquette colle les deux (gap `zéro`) :
   trois pixels d'air en trop valent mieux qu'un texte sur un logo. */
.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;
}

.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;
	}

	/* 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)
---------------------------------------------------------------------------- */
.medianes-veille .wp-block-column {
	padding: var(--wp--preset--spacing--petit) 0;
}

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

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

/* 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;
	}
}

/* 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 + réseau = beige
   « papier » ; média + studio = blanc (défaut theme.json). */
body.univers-racine,
body.univers-reseau {
	background-color: var(--wp--preset--color--beige-01);
}

.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-recirculation,
	.medianes-recirc-cote,
	.medianes-qsn,
	.medianes-cta-accomp,
	.medianes-cta-bande,
	.medianes-cta-finale,
	.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: var(--wp--preset--spacing--regulier) !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é). */
@media (max-width: 781px) {

	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-notre-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-notre-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-notre-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-notre-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-notre-livre .medianes-livre__miniatures {
		flex-wrap: nowrap;
		gap: var(--wp--preset--spacing--petit) !important;
	}

	body.medianes-page-notre-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-notre-livre .wp-block-post-content h2.has-h-3-font-size {
		margin-top: var(--wp--preset--spacing--regulier) !important;
	}

	body.medianes-page-notre-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, Gravity Forms…) 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, picto, titre H3, liste,
   bouton pleine largeur marine. */
/* 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;
}

.medianes-carte-expertise__picto {
	width: 108px;
	height: 110px;
	background-repeat: no-repeat;
	background-position: center;
	background-size: contain;
}

/* Recette #98 : pictogrammes illustrés par carte (Design System 67:701),
   ciblés par le lien « En savoir plus » de chaque carte. */
.medianes-carte-expertise:has(a[href="/expertises/strategie-editoriale/"]) .medianes-carte-expertise__picto {
	background-image: url(assets/picto-strategie.png);
}

.medianes-carte-expertise:has(a[href="/expertises/management-gestion-de-projet/"]) .medianes-carte-expertise__picto {
	background-image: url(assets/picto-management.png);
}

.medianes-carte-expertise:has(a[href="/expertises/administratif-subvention/"]) .medianes-carte-expertise__picto {
	background-image: url(assets/picto-administratif.png);
}

.medianes-carte-expertise:has(a[href="/expertises/marketing-audience/"]) .medianes-carte-expertise__picto {
	background-image: url(assets/picto-marketing.png);
}

.medianes-carte-expertise:has(a[href="/expertises/design/"]) .medianes-carte-expertise__picto {
	background-image: url(assets/picto-design.png);
}

.medianes-carte-expertise:has(a[href="/expertises/tech-produit/"]) .medianes-carte-expertise__picto {
	background-image: url(assets/picto-tech.png);
}

.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: center;
	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 : « Écrit par », nom, date, séparés de 6px
   (`gap-[var(--micro,6px)]` du composant `7294:18748`). Le nom est un paragraphe
   et gardait les marges par défaut du thème — 15px en haut ET en bas, qui
   fusionnaient avec les 6px prévus pour la date : les trois lignes flottaient à
   15px les unes des autres (constat Noé 2026-08-03). La pile en flex tient
   l'écart au même endroit pour les trois, plutôt que trois marges à accorder.
--------------------------------------------------------------------------- */
.medianes-article__auteur .wp-block-post-author__content {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--micro);
}

.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 {
	font-size: var(--wp--preset--font-size--note);
}

.medianes-article__auteur .wp-block-post-author__name {
	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 {
	font-family: var(--wp--preset--font-family--degular-mono);
	font-size: var(--wp--preset--font-size--note-detail);
}

/* 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;
}

.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). */
.medianes-avatar:has(img.medianes-avatar__medaillon) .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. */
.medianes-article__contenu 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;
	}

	/* Recette mobile 2026-07-31 (podcast, node 2402:38004, demande Noé) : le
	   node mobile de l'ouverture podcast ne porte AUCUN fond — le bandeau
	   bleu-00 est un traitement desktop. Tranche la partie podcast du point 9
	   de figma-inventaire §6 ; single-fiche_pratique (même question) reste en
	   attente d'arbitrage. !important : le fond vient de la classe
	   has-bleu-00-background-color, émise avec !important par le cœur. */
	body.single-podcast .medianes-ouverture-article {
		background-color: transparent !important;
	}

	/* Byline des gabarits article/podcast/fiche (node 2402:38330) : la maquette
	   met « Réalisé par » et le nom sur UNE ligne, la date en dessous à 6px —
	   les <p> internes du bloc cœur empilaient le tout avec 15px de marges
	   (95px au lieu de ~59px). */
	.medianes-article__auteur .wp-block-post-author__content {
		display: flex;
		flex-wrap: wrap;
		align-items: baseline;
		column-gap: 6px;
	}

	.medianes-article__auteur .wp-block-post-author__content p {
		margin: 0;
	}

	.medianes-article__auteur .wp-block-post-author__date {
		flex-basis: 100%;
		margin-top: var(--wp--preset--spacing--micro);
	}

	/* 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(2, 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);
}

/* 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-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;
}

/* 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. */
body:has(.wp-block-post-content > *:last-child.alignfull.has-background) .wp-site-blocks > footer.wp-block-template-part {
	margin-top: 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 /notre-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);
}

/* 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;
	}
}

/* Gravity Forms : habillage aux tokens Médianes (doctrine §9 — pas de styles inline GF).
   stylelint-disable selector-class-pattern -- classes tierces (GF) non renommables.
---------------------------------------------------------------------------- */
/* stylelint-disable selector-class-pattern */
.gform_wrapper .gfield_label {
	display: block;
	margin: 0 0 var(--wp--preset--spacing--micro);
	font-family: var(--wp--preset--font-family--degular);
	font-weight: 500;
	font-size: var(--wp--preset--font-size--note);
	color: var(--wp--preset--color--bleu-08);
}

/* 2026-08-07 : l'habillage vient du composant « Champ » (§ en fin de feuille),
   qui couvre aussi l'état d'erreur de Gravity Forms (`.gfield_error`). Ne reste
   que la largeur, GF ne l'imposant pas. */
.gform_wrapper input[type="text"],
.gform_wrapper input[type="email"],
.gform_wrapper input[type="url"],
.gform_wrapper input[type="tel"],
.gform_wrapper select,
.gform_wrapper textarea {
	width: 100%;
}

.gform_wrapper .gform_footer input[type="submit"],
.gform_wrapper .gform_footer button,
.gform_wrapper .gform-button {
	border: 0.5px solid var(--wp--preset--color--bleu-08);
	border-radius: 6px;
	padding: var(--wp--preset--spacing--petit) var(--wp--preset--spacing--regulier);
	background: var(--wp--preset--color--bleu-09);
	color: var(--wp--preset--color--bleu-01);
	font: 500 22px/1 var(--wp--preset--font-family--degular);
	cursor: pointer;
	transition: box-shadow 0.15s ease;
}

.gform_wrapper .gform_footer input[type="submit"]:hover,
.gform_wrapper .gform_footer button:hover,
.gform_wrapper .gform-button:hover {
	box-shadow: 3px 3px 0 var(--wp--preset--color--bleu-08);
}

/* Ticket 44 : la mention « requis » reste en marine (le bleu-07 vif était
   perçu hors charte sur le formulaire de contact). */
.gform_wrapper .gfield_required {
	color: var(--wp--preset--color--bleu-08);
}

/* Recette #25 : le thème front GF (Orbital) injecte un bleu vif hors palette
   (focus, boutons, coches). On rabat ses variables CSS sur la charte. */
.gform_wrapper,
.gform_wrapper.gravity-theme,
.gform-theme--framework {
	--gform-theme-color-primary: var(--wp--preset--color--bleu-08);
	--gform-theme-color-primary-contrast: var(--wp--preset--color--blanc);
	--gform-theme-color-primary-darker: var(--wp--preset--color--bleu-09);
	--gform-theme-color-primary-lighter: var(--wp--preset--color--bleu-05);
	--gform-theme-control-border-color-focus: var(--wp--preset--color--bleu-08);
	--gform-theme-control-focus-box-shadow: 0 0 0 2px var(--wp--preset--color--bleu-03);

	accent-color: var(--wp--preset--color--bleu-08);
}

.gform_wrapper input:focus-visible,
.gform_wrapper select:focus-visible,
.gform_wrapper textarea:focus-visible {
	outline: 2px solid var(--wp--preset--color--bleu-08);
}

.gform_confirmation_message {
	padding: var(--wp--preset--spacing--regulier);
	border-radius: 6px;
	background: var(--wp--preset--color--bleu-00);
	color: var(--wp--preset--color--bleu-08);
}

/* Formulaire de candidature dans la bande CTA « Candidatez » : cadré et centré
   dans la bande beige, champs empilés à gouttière régulière, bouton centré
   (le thème orbital de GF impose sinon sa propre grille/ses marges). */
.medianes-formation__cta-action .gform_wrapper {
	max-width: 620px;
	margin-inline: auto;
	text-align: left;
}

.medianes-formation__cta-action .gform_wrapper .gform_fields {
	display: flex;
	flex-direction: column;
	gap: var(--wp--preset--spacing--regulier);
}

.medianes-formation__cta-action .gform_wrapper .gfield {
	margin: 0;
}

.medianes-formation__cta-action .gform_wrapper .gform_footer {
	margin-top: var(--wp--preset--spacing--regulier);
	padding: 0;
	display: flex;
	justify-content: center;
}

/* stylelint-enable selector-class-pattern */

/* 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);
}

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

/* 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%;
	}
}

.medianes-nl-optin__freq {
	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-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);
	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.2;
}

/* Lien « Voir la newsletter » (recette #21) : Hyperlien Degular Medium 18. */
.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;
	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);
}

/* 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;
}

.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;
}

/* 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);
}

.medianes-nl-bar[hidden] {
	display: 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;
}

.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%;
}

.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);
}

/* 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;
}

/* 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;
}

/* 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;
}

.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. */
.medianes-filtre {
	/* `alignwide` centre le bloc et l'étire à 1248px : on fixe la largeur de la
	   maquette et 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, la
	   carte restait centrée (mesuré à left:548 au lieu de 96).
	   Corrigé 2026-08-03 (constat Noé) : un `margin-inline: 0` collait la carte
	   au bord du 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 la carte 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. */
	/* 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%;
	margin-inline: max(0px, (100% - var(--wp--style--global--wide-size)) / 2) auto !important;
	/* 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 (maquette À propos) : colonnes séparées par des filets. */
.medianes-chrono {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 0;
}

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

.medianes-chrono > .wp-block-column:first-child {
	padding-left: 0;
}

.medianes-chrono > .wp-block-column + .wp-block-column {
	border-left: 1px solid var(--wp--preset--color--bleu-02);
}

.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);
}

.medianes-chrono__annee {
	margin: 0 0 var(--wp--preset--spacing--petit);
	font-family: var(--wp--preset--font-family--degular);
	font-size: 20px;
	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;
}

/* État inactif : projet listé dont la fiche n'est pas rédigée — texte pâle,
   aucun lien (les étiquettes gardent leur contraste, comme sur le node). */
.medianes-index-annees__entree--inactive .medianes-index-annees__date,
.medianes-index-annees__entree--inactive .medianes-index-annees__titre {
	color: var(--wp--preset--color--bleu-03);
}

@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;
}

.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;
}

/* Articles sauvegardés : la fonctionnalité n'existe pas encore. On l'annonce
   plutôt que de montrer une liste vide, qui se lirait comme « vous n'avez rien
   sauvegardé » et non comme « ce n'est pas encore possible ». */
.medianes-compte__avenir {
	/* Zone volontairement aérée : elle annonce une fonctionnalité, elle ne
	   présente pas de contenu — un encadré serré se lirait comme une liste vide. */
	margin: 0;
	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;
}

/* 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, Gravity Forms, 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"]),
.gform_wrapper select {
	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,
.gform_wrapper select: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"],
.gform_wrapper .gfield_error input,
.gform_wrapper .gfield_error textarea,
.gform_wrapper .gfield_error select {
	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);
}

/* 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 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;
}

/* 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);
}
