/* ============================================================================
 * style-custom.css — Child theme Prime FSE / LPO Vendée
 *
 * Ce fichier ne contient QUE les règles qu'on ne peut pas exprimer via
 * theme.json ou les blocs natifs. Chaque bloc est précédé d'un commentaire
 * justifiant pourquoi on ne passe pas par les voies natives.
 * ========================================================================== */


/* --- Wide size fluide : cap à 1600px sur grand écran, 90vw fluide -----------
 * Pourquoi du CSS : theme.json a `wideSize: "1600px"` fixe (pour stabilité
 * de l'UI Mise en page du Site Editor, qui n'accepte pas proprement un
 * `clamp()` dans son input — risque d'écrasement par le slider). On surcharge
 * ici la variable CSS générée à partir de theme.json pour avoir un
 * comportement adaptatif :
 *   - viewport ≥ 1882 px : 1600 px (cap)
 *   - viewport 1294 – 1882 px : 85vw fluide (~15 % de marge totale)
 *   - viewport ≤ 1294 px : 1100 px (cappé par viewport en pratique)
 * Sur MacBook 14" (viewport ~1512 px) : ~1285 px, marges ~113 px / côté.
 * Sur Full HD (1920 px) : 1600 px capé, marges ~160 px / côté.
 * Sur 27" 4K (2560 px) : 1600 px capé, marges ~480 px / côté.
 * -------------------------------------------------------------------------- */
:root {
	--wp--style--global--wide-size: clamp(1100px, 85vw, 1600px);
}

/* --- Content size élargi sur grand écran -----------------------------------
 * Le contentSize (largeur des paragraphes, titres et textes courants) reste
 * à 760 px par défaut (theme.json) — confort de lecture standard avec ~80
 * caractères par ligne. Sur très grand écran, on l'élargit progressivement
 * pour ne pas avoir d'énormes marges vides autour d'une bande de texte fine.
 *
 * Le contentSize reste à 760 px sous 1700 px de viewport (laptop, MacBook
 * 14", écran standard) pour préserver la lecture confort. Au-delà :
 *   - 1700–2200 px : 900 px
 *   - ≥ 2200 px : 1000 px
 * On reste sous 1100 px max — au-delà, la lecture devient inconfortable.
 * -------------------------------------------------------------------------- */
@media (min-width: 1700px) {
	:root {
		--wp--style--global--content-size: 900px;
	}
}
@media (min-width: 2200px) {
	:root {
		--wp--style--global--content-size: 1000px;
	}
}


/* --- Header pill : overlay au-dessus du hero ---------------------------------
 * Pourquoi du CSS ici : theme.json n'expose ni `position` ni `z-index`.
 * Sans ces propriétés, le hero qui a un `margin-top` négatif viendrait
 * passer PAR-DESSUS le header (puisqu'il vient après dans le DOM).
 * On ancre donc le wrapper template-part `<header class="wp-block-template-part">`
 * (généré automatiquement par WP autour de parts/header.html) avec un
 * `position: relative` + z-index élevé pour qu'il reste visible au-dessus
 * du hero. C'est le comportement Landscape : le pill flotte, le hero plein
 * écran passe en arrière-plan.
 * -------------------------------------------------------------------------- */
header.wp-block-template-part {
	position: relative;
	z-index: 20;
}


/* === Glassmorphisme — block styles « glass » et « glass-dark » ==============
 * Pourquoi du CSS ici : theme.json n'expose pas la propriété backdrop-filter
 * (flou d'arrière-plan). C'est l'unique recours pour obtenir l'effet « verre
 * dépoli ». On enregistre deux block styles via register_block_style() dans
 * functions.php (sur core/group, core/cover, core/column, core/columns) puis
 * on attache ces règles CSS via la classe générée par Gutenberg.
 *
 * Usage en éditeur : Styles → sélectionner « Verre » ou « Verre sombre ».
 *
 * Notes :
 *  - `!important` sur le background pour neutraliser un backgroundColor preset
 *    qui serait défini sur le bloc (Gutenberg sérialise sa propre couleur).
 *  - `border` reste subtil pour ne pas casser l'effet vitré.
 *  - `saturate(180%)` ravive les couleurs du fond filtré (sinon ça lave trop).
 *  - Sur navigateurs sans support backdrop-filter (vieux Firefox), le rendu
 *    retombe sur un fond semi-transparent simple — acceptable.
 * -------------------------------------------------------------------------- */
.is-style-glass,
.is-style-glass-dark {
	-webkit-backdrop-filter: blur(14px) saturate(180%);
	        backdrop-filter: blur(14px) saturate(180%);
	border: 1px solid rgba(255, 255, 255, 0.18);
	box-shadow: var(--wp--preset--shadow--sm);
}

/* Verre clair — utile sur fond image lumineux ou sur fond clair général */
.is-style-glass {
	background-color: rgba(255, 255, 255, 0.55) !important;
}

/* Verre sombre — utile sur fond image foncé ou sur section colorée
   (bleu LPO, par exemple). Texte forcé en clair pour rester lisible.
   Pour les descendants H1-H6 et liens, on doit utiliser `!important`
   sinon les règles `styles.elements.h1` du theme.json (qui imposent
   color = lpo-ink) gagnent la spécificité. */
.is-style-glass-dark {
	background-color: rgba(25, 25, 25, 0.45) !important;
	color: var(--wp--preset--color--lpo-paper);
	border-color: rgba(255, 255, 255, 0.08);
}
.is-style-glass-dark,
.is-style-glass-dark :is(p, li, span, strong, em, a, h1, h2, h3, h4, h5, h6) {
	color: var(--wp--preset--color--lpo-paper) !important;
}


/* --- Glass appliqué à core/button -------------------------------------------
 * Particularité du bloc Button : la classe `is-style-X` est posée sur le
 * wrapper `<div class="wp-block-button">`, pas sur le `<a class="wp-block-button__link">`
 * qui porte le visuel (background, padding, radius). Il faut donc :
 *  1. neutraliser les règles globales `.is-style-glass*` sur le wrapper
 *     (sinon il hérite d'une bordure et d'un blur invisibles mais qui
 *     peuvent générer un fantôme de stacking context)
 *  2. réappliquer l'effet glass sur le `__link` lui-même
 * -------------------------------------------------------------------------- */
.wp-block-button.is-style-glass,
.wp-block-button.is-style-glass-dark {
	-webkit-backdrop-filter: none;
	        backdrop-filter: none;
	border: none;
	box-shadow: none;
	background-color: transparent !important;
}

.wp-block-button.is-style-glass > .wp-block-button__link,
.wp-block-button.is-style-glass-dark > .wp-block-button__link {
	-webkit-backdrop-filter: blur(14px) saturate(180%);
	        backdrop-filter: blur(14px) saturate(180%);
	border: 1px solid rgba(255, 255, 255, 0.18);
	box-shadow: var(--wp--preset--shadow--sm);
}

.wp-block-button.is-style-glass > .wp-block-button__link {
	background-color: rgba(255, 255, 255, 0.55) !important;
}

.wp-block-button.is-style-glass-dark > .wp-block-button__link {
	background-color: rgba(25, 25, 25, 0.45) !important;
	color: var(--wp--preset--color--lpo-paper) !important;
	border-color: rgba(255, 255, 255, 0.18);
}


/* === Block styles « section avec fond illustré » ============================
 * Trois variantes pour remplacer le fond crème uni des sections alternées :
 *   - section-topo        : motif SVG topographique tileable (lignes ondulées)
 *   - section-carte-rouge : photo "carte rouge" (médiathèque ID 175) opacifiée
 *   - section-carte-papier: photo "cartes papier" (médiathèque ID 176) opacifiée
 *
 * Pour les 2 photos : on superpose l'image via un pseudo-élément ::before en
 * `position:absolute; opacity: 0.12` plutôt que `background-image` direct
 * sur le bloc — c'est le seul moyen d'avoir un vrai contrôle d'opacité sur
 * l'image (les blend-modes donnent des résultats imprévisibles selon le
 * fichier source). `isolation: isolate` crée un stacking context pour que
 * le z-index négatif du pseudo reste contenu, et `overflow: hidden` évite
 * que l'image dépasse sur les sections voisines.
 * -------------------------------------------------------------------------- */

/* Base commune : isolation + overflow pour les sections à fond illustré */
.is-style-section-carte-rouge,
.is-style-section-carte-papier {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	background-color: var(--wp--preset--color--lpo-warm-50);
}

.is-style-section-carte-rouge::before,
.is-style-section-carte-papier::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background-size: cover;
	background-position: center;
	background-repeat: no-repeat;
	opacity: 0.12;
	pointer-events: none;
}

/* Carte rouge — fichier dans le theme (assets/images/patterns/carte-rouge.jpg).
   Pour changer l'image : remplacer le fichier en gardant le même nom. */
.is-style-section-carte-rouge::before {
	background-image: url('images/patterns/carte-rouge.jpg');
}

/* Cartes papier — fichier dans le theme (assets/images/patterns/carte-papier.jpg). */
.is-style-section-carte-papier::before {
	background-image: url('images/patterns/carte-papier.jpg');
}

/* Motif topographique — fichier vectoriel SVG du theme, répété en tile.
   Couleur de fond `lpo-warm-50` pour rester dans l'esprit crème mais
   avec un motif ondulé qui évoque les courbes de niveau d'une carte. */
.is-style-section-topo {
	background-color: var(--wp--preset--color--lpo-warm-50);
	background-image: url('images/patterns/topographie.svg');
	background-repeat: repeat;
	background-size: 240px 120px;
}


/* === Block style « Oiseau — Pie-grièche (gauche) » =========================
 * Ajoute une 2e couche d'illustration PNG transparente PAR-DESSUS l'image
 * background du Cover existant. Utile pour superposer une silhouette
 * d'oiseau "détourée" sur un hero qui a déjà une photo de fond.
 *
 * Mécanique :
 *  - Pseudo-élément `::before` du Cover, position absolute, inset 0
 *  - `background-image` = illustration PNG transparente
 *  - `background-size: contain` + position `left bottom` pour caler en bas-gauche
 *  - z-index intermédiaire : au-dessus de l'image principale et de l'overlay,
 *    EN-DESSOUS de l'inner-container (pour ne pas masquer le H1/boutons)
 *  - `pointer-events: none` pour ne pas bloquer les clics du contenu
 *
 * Pour ajouter d'autres oiseaux plus tard : dupliquer le bloc en changeant
 * juste le `background-image` (ex. `oiseau-mesange-gauche`, etc.).
 * -------------------------------------------------------------------------- */
.wp-block-cover.is-style-oiseau-piaf-gauche,
.wp-block-group.is-style-oiseau-piaf-gauche {
	position: relative;
}

/* Force le contenu à passer au-dessus du pseudo-élément */
.wp-block-cover.is-style-oiseau-piaf-gauche > .wp-block-cover__inner-container,
.wp-block-group.is-style-oiseau-piaf-gauche > * {
	position: relative;
	z-index: 3;
}

/* Pseudo-élément qui porte l'illustration superposée.
   `mix-blend-mode: luminosity` fait que l'illustration affiche uniquement
   sa luminosité, en empruntant la teinte et la saturation du fond — donc
   le piaf se "fond" dans les couleurs de l'image background. */
.wp-block-cover.is-style-oiseau-piaf-gauche::before,
.wp-block-group.is-style-oiseau-piaf-gauche::before {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	top: 0;
	width: 50%;
	background-image: url('images/oiseau-piaf-grieche.png');
	background-size: contain;
	background-position: left bottom;
	background-repeat: no-repeat;
	pointer-events: none;
	z-index: 2;
	mix-blend-mode: luminosity;
}

/* Sur mobile, on cache l'illustration pour ne pas encombrer le contenu */
@media (max-width: 781px) {
	.wp-block-cover.is-style-oiseau-piaf-gauche::before,
	.wp-block-group.is-style-oiseau-piaf-gauche::before {
		display: none;
	}
}


/* === Sous-menus simples du bloc Navigation =================================
 * Pourquoi du CSS : WP n'expose pas dans le panneau de bloc Navigation les
 * propriétés visuelles (radius, marge top, ombre) du conteneur des sous-menus
 * déroulants. On les surcharge ici pour reproduire le look "rectangle flottant
 * arrondi" de Landscape — cohérent avec le header pill au-dessus.
 *
 * Périmètre : sous-menus simples gérés par WP core
 * (`.wp-block-navigation__submenu-container`). Les mega menus Ollie Menu
 * Designer ont leur propre conteneur et ne sont pas affectés.
 *
 * Spécificité : on doit DÉPASSER la spécificité du parent Prime FSE qui pose
 * son propre style sur le sélecteur
 *   `.wp-block-navigation .has-child .wp-block-navigation__submenu-container`
 * (3 classes = 0,3,0) avec :
 *   - border-radius: 0 0 6px 6px (dropdown "attaché" au parent)
 *   - box-shadow plus diffuse
 *   - padding asymétrique 10px 0 0 10px
 *
 * On ne peut pas s'aligner sur 3 classes : Prime FSE charge en réalité DEUX
 * feuilles (`prime-fse-parent` ET `prime-fse-style` auto-chargée par WP),
 * et `prime-fse-style` arrive APRÈS notre `primefsechild-custom` dans le
 * `<head>` — donc en égalité de spécificité, le parent gagne par ordre.
 * Solution : passer à 4 classes (`.wp-block-navigation-item.has-child`
 * compte 2 classes sur le même élément).
 *
 * Choix esthétiques :
 *  - radius 12px partout : flotte vraiment, look pill arrondi.
 *  - shadow `card` : ombre douce mais bien visible.
 *  - margin-top 8px : détache du parent (sinon il colle, look daté).
 *  - padding 8px symétrique : annule le `10px 0 0 10px` du parent.
 *  - background blanc opaque : lisibilité maximale.
 *  - hover : background lpo-warm-50 + texte lpo-blue, comme Landscape.
 * -------------------------------------------------------------------------- */
.wp-block-navigation .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container {
	background-color: var(--wp--preset--color--lpo-paper);
	border: 1px solid var(--wp--preset--color--lpo-warm-100);
	border-radius: 12px;
	box-shadow: var(--wp--preset--shadow--lg);
	padding: 8px;
	margin-top: 20px;
	/* Min-width généreux : les libellés du menu LPO sont parfois longs
	   (« OFFRE D'EMPLOIS, STAGES ET SERVICES CIVIQUES » mesuré à 413px
	   en non-wrap) et en uppercase 15px + letter-spacing 0.04em, ils
	   s'enroulent vite. 360px laisse ~316px utiles après padding interne
	   (container 8+8 + content 14+14) : les libellés courts/moyens
	   passent sur 1 ligne, les plus longs tiennent en 2 lignes avec de
	   l'air. Le bloc Navigation core n'expose aucun réglage de largeur
	   de sous-menu dans Gutenberg — d'où le CSS. */
	min-width: 360px;
	/* Le sous-menu doit flotter au-dessus du hero plein écran qui suit le
	   header. Le header pill a z-index 20 (cf. règle plus haut), on monte
	   le sous-menu au-dessus de tout stacking context concurrent. */
	z-index: 50;
}

/* WP core (feuille `wp-block-navigation`) réimpose `min-width: 200px` sur le
 * sous-menu, mais UNIQUEMENT dans ses états visibles — au survol (desktop)
 * et à l'ouverture au clic (toggle `aria-expanded="true"`) — via deux
 * sélecteurs à spécificité (0,5,0). C'est précisément au moment où le menu
 * s'affiche que notre `min-width` de base (0,4,0, ci-dessus) se fait écraser :
 * on ne voit jamais le 360px. On repasse devant en montant à (0,6,0) — on
 * reprend les mêmes états visibles en ajoutant `.wp-block-navigation-item`
 * (une classe de plus, sur le même <li>). Si une future version de core
 * change ces sélecteurs, c'est ici qu'il faudra réaligner. */
.wp-block-navigation .wp-block-navigation-item.has-child:not(.open-on-click):hover > .wp-block-navigation__submenu-container,
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation-submenu__toggle[aria-expanded="true"] ~ .wp-block-navigation__submenu-container {
	min-width: 360px;
}

/* Le thème parent Prime FSE ajoute un séparateur 1px gris sous chaque LI
 * du sous-menu via `.wp-block-navigation .has-child li::after` (position
 * absolute, bottom 0, left/right 20px, bg rgba(14,14,14,0.2)). Cette
 * border colle visuellement au bg du hover (le `__content` du hover prend
 * toute la hauteur du LI). On la supprime — le rythme visuel des items
 * est déjà donné par leur padding + le hover crème, et le séparateur
 * apparaîtrait aussi sous le dernier item (moche). */
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item::after,
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container li::after {
	display: none;
}

/* Pont invisible entre l'item parent et le sous-menu.
 * Sans ce pont, quand la souris descend du label parent vers le sous-menu,
 * elle traverse les 20px de `margin-top` qui sont HORS de la bounding box
 * du LI parent → le `:hover` se perd → le sous-menu se referme avant que
 * la souris ne l'atteigne. Le ::before couvre exactement cette zone, en
 * tant que descendant du sous-menu (lui-même descendant du LI parent),
 * il maintient le `:hover` actif sur toute la chaîne.
 * IMPORTANT : la `height` du pont doit toujours égaler le `margin-top` du
 * sous-menu. Si tu changes l'un, change l'autre. */
.wp-block-navigation .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container::before {
	content: "";
	position: absolute;
	/* R43 (18/09/2026) : le pont part du bord INTÉRIEUR du panneau, qui a 1px de bordure.
	   Avec 20px pour 20px de marge, il restait une bande de 1px non couverte juste sous
	   l'entrée : en passant vite on la sautait, en passant lentement (trackpad) le survol
	   s'y perdait et le panneau se refermait. 24px = marge 20 + bordure 1 + 3 de recouvrement
	   sur l'entrée (sans effet, c'est déjà la zone survolée). */
	top: -24px;
	left: 0;
	right: 0;
	height: 24px;
	/* Pas de background : le pont reste invisible, on veut seulement
	   capturer le pointeur. */
}

/* R43 — volets latéraux (niveau 2 → 3, ex. Nos actions › Informer › Presse) : ils s'ouvrent
   À DROITE de l'entrée, avec `margin-left: 4px` (règle plus bas) + 1px de bordure. Le pont
   hérité ci-dessus se plaçait AU-DESSUS du volet, donc à côté du problème : il restait un trou
   vertical de 5px entre l'entrée et son volet. On le remet sur le flanc gauche, sur toute la
   hauteur du volet. 16px = marge 4 + bordure 1 + recouvrement sur le padding du panneau parent.
   IMPORTANT : si `margin-left` du volet change, élargir ce pont d'autant. */
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container::before {
	top: 0;
	bottom: 0;
	left: -16px;
	right: auto;
	width: 16px;
	height: auto;
}
/* Le menu mobile (overlay) n'a ni survol ni volets flottants : pas de pont. */
.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container::before {
	display: none;
}

/* === R43 (18/09/2026) — TOLÉRANCE DE SURVOL DES SOUS-MENUS (desktop) ==========
 * Problème : en visant directement un item du volet (ex. Nos actions › Informer ›
 * Presse), la souris part en DIAGONALE, sort de « Informer » par le bas et traverse
 * du vide avant d'atteindre le volet, qui se refermait aussitôt. Au trackpad, c'était
 * inutilisable. Trois mesures, en CSS pur :
 *
 * 1. DÉLAI DE FERMETURE (0,34 s). Le cœur ferme un sous-menu avec `width:0; height:0`,
 *    propriétés qui ne savent pas attendre. On les neutralise et on ferme à la place par
 *    `visibility` + `transform: scale(0)`, qui acceptent un `transition-delay`.
 *    `scale(0)` (et non un simple `visibility:hidden`) pour qu'un volet fermé ne crée
 *    aucun débordement horizontal de la page.
 * 2. PAS DE DÉLAI ENTRE VOISINS : dès qu'une autre entrée du même niveau est survolée,
 *    les autres panneaux se ferment tout de suite — sinon deux volets se superposent.
 * 3. ZONE DE RATTRAPAGE sous la DERNIÈRE entrée d'un panneau (là où il n'y a rien à
 *    survoler d'autre) : tant que la souris descend vers le volet, elle reste « dedans ».
 *
 * Limite connue : une diagonale qui part d'une entrée du MILIEU croise les entrées
 * voisines, qui prennent légitimement la main. Seul un script (« triangle de sécurité »)
 * sait trancher ce cas ; le geste horizontal puis vertical, lui, fonctionne partout.
 * Hors périmètre : mega menus Ollie (autre balisage) et menu mobile (overlay).
 * -------------------------------------------------------------------------- */
@media (min-width: 1100px) and (hover: hover) {
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation-item.has-child:not(.open-always) > .wp-block-navigation__submenu-container {
		width: auto;
		height: auto;
		overflow: visible;
		min-width: 360px;
		transform: scale(0);
		transform-origin: 0 0;
		transition: opacity 0.12s linear 0.22s, visibility 0s linear 0.34s, transform 0s linear 0.34s;
	}
	/* États ouverts (survol, clic sur le chevron, clavier) : immédiats. */
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation-item.has-child:not(.open-on-click):hover > .wp-block-navigation__submenu-container,
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation-item.has-child .wp-block-navigation-submenu__toggle[aria-expanded="true"] ~ .wp-block-navigation__submenu-container,
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation-item.has-child:focus-within > .wp-block-navigation__submenu-container {
		transform: none;
		transition: opacity 0.1s linear 0s, visibility 0s linear 0s, transform 0s linear 0s;
	}
	/* 2. Une entrée voisine est survolée : les autres ferment sans attendre. */
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) :is(.wp-block-navigation__container, .wp-block-navigation__submenu-container):has(> li:hover) > .wp-block-navigation-item.has-child:not(:hover):not(:focus-within) > .wp-block-navigation__submenu-container {
		transition-delay: 0s, 0s, 0s;
		transition-duration: 0s, 0s, 0s;
	}
	/* 3. Zone de rattrapage sous la dernière entrée (volet latéral uniquement). Le volet démarre
	      8px au-dessus de son entrée, haute d'environ 44px : la zone commence donc à 52px. */
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container > .wp-block-navigation-item.has-child:last-child > .wp-block-navigation__submenu-container::after {
		content: "";
		position: absolute;
		top: 52px;
		bottom: 0;
		right: 100%;
		width: 360px;
	}
}


/* === R62 (21/09/2026) — DERNIER NIVEAU DU MENU : À PLAT, PAS EN VOLET (desktop) ===========
 * Un troisième volet latéral sort de l écran (vu sur Nos actions › Agriculture et biodiversité ›
 * Ferme en fête › Bilan : le volet partait à 1 460 px du bord gauche). Le bloc Navigation du cœur
 * ne sait pas détecter un débordement ni ouvrir à gauche. À cette profondeur, les entrées sont
 * peu nombreuses (1 à 3) : on les affiche donc en liste indentée, TOUJOURS visible, sous leur
 * entrée parente, dans le panneau lui-même. Rien à viser à la souris, et lisible au tactile.
 * Profondeur visée : un conteneur de sous-menu imbriqué dans DEUX autres (barre › panneau ›
 * volet › ICI). Les deux premiers niveaux gardent leurs volets. Menu mobile : non concerné.
 * Spécificité : on reprend le sélecteur de R43 avec un niveau de conteneur en plus.
 * -------------------------------------------------------------------------- */
@media (min-width: 1100px) {
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child:not(.open-always) {
		flex-wrap: wrap;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child:not(.open-always) > .wp-block-navigation__submenu-container,
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child:not(.open-always):hover > .wp-block-navigation__submenu-container,
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child:not(.open-always):focus-within > .wp-block-navigation__submenu-container {
		position: static;
		flex: 1 1 calc(100% - 14px); /* 14px = la marge gauche, sinon la liste dépasse du panneau */
		box-sizing: border-box;
		width: auto;
		height: auto;
		min-width: 0;
		overflow: visible;
		visibility: visible;
		opacity: 1;
		transform: none;
		transition: none;
		margin: 0 0 6px 14px;
		padding: 0 0 0 6px;
		background: transparent;
		border: 0;
		border-left: 2px solid var(--wp--preset--color--lpo-warm-100);
		border-radius: 0;
		box-shadow: none;
	}
	/* Ni pont de survol ni zone de rattrapage : il n y a plus de volet à rejoindre. */
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child:not(.open-always) > .wp-block-navigation__submenu-container::before,
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child:not(.open-always) > .wp-block-navigation__submenu-container::after {
		display: none;
	}
	/* Plus rien à ouvrir : le chevron disparaît. */
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child:not(.open-always) > .wp-block-navigation__submenu-icon {
		display: none;
	}
	/* Entrées un ton en dessous de leur parente. */
	.wp-block-navigation .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container .wp-block-navigation-item.has-child:not(.open-always) > .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
		padding-top: 6px;
		padding-bottom: 6px;
		font-size: 0.93em;
		font-weight: 500;
	}
}


/* Items du sous-menu : padding confortable + radius interne pour que le hover
   reste dans le rectangle arrondi (sinon le hover déborde aux coins). */
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	padding: 10px 14px;
	border-radius: 8px;
	color: var(--wp--preset--color--lpo-ink);
	transition: background-color 0.15s ease, color 0.15s ease;
}

/* Le `__content` est en `display: flex` (pour aligner le chevron à droite
 * sur les items qui ont un sous-sous-menu). Conséquence : `text-wrap` posé
 * sur lui ne s'applique PAS au texte des enfants. Le texte réel est dans
 * `.wp-block-navigation-item__label` (span enfant du <a>), c'est là qu'il
 * faut équilibrer le wrapping.
 *
 * `text-wrap: balance` répartit les mots harmonieusement quand le libellé
 * wrap — au lieu d'une ligne 1 longue et une ligne 2 courte, on obtient
 * deux lignes de longueur proche. Supporté Chrome 114+, Safari 17.4+,
 * Firefox 121+. Fallback gracieux : wrapping classique. */
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__label {
	text-wrap: balance;
}

.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover,
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content:focus {
	background-color: var(--wp--preset--color--lpo-warm-50);
	color: var(--wp--preset--color--lpo-blue);
}

/* Sous-sous-menu (niveau 3+) : on remonte légèrement et on décale à droite
   pour ne pas chevaucher le parent. WP positionne déjà en absolute, on
   ajuste uniquement margin-top et l'offset latéral. */
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container {
	margin-top: -8px;
	margin-left: 4px;
}

/* Chevron d'ouverture du sous-menu : un poil d'espace pour ne pas qu'il
   colle au libellé. */
.wp-block-navigation .wp-block-navigation__submenu-icon {
	padding-left: 4px;
}


/* === Mise en avant d'un parcours dans le menu ==============================
 * Classe utilitaire `lpo-menu-accent`, a poser sur une entree de navigation
 * depuis l'editeur (panneau « Avancé » > classes CSS additionnelles). Elle
 * pose un fond « Bleu grand large » (charte) et un texte blanc, pour signaler un
 * chemin prioritaire (avant le 02/09 : simple bleu LPO gras).
 * Posee aujourd'hui sur le parcours vers le benevolat : « Adhérer à la LPO »,
 * « Être bénévole de la LPO Vendée », « Actions bénévoles de la LPO85 ».
 *
 * Specificite : les items de sous-menu sont deja colores en `lpo-ink` par la
 * regle du dropdown plus haut (0,4,0) ; on monte donc a (0,5,0) pour la battre
 * dans les deux contextes (barre principale et sous-menu).
 * -------------------------------------------------------------------------- */
.wp-block-navigation .wp-block-navigation-item.lpo-menu-accent > .wp-block-navigation-item__content,
.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item.lpo-menu-accent > .wp-block-navigation-item__content {
	/* 02/09 (R14) : fond « Bleu grand large » de la charte (jeton lpo-grand-large,
	   #006982, Pantone 7469 C) et texte blanc, a la place du simple bleu LPO gras.
	   Le padding 10px 14px et le radius 8px viennent deja de la regle des items de
	   sous-menu : la classe ne fait que remplir la boite. */
	background-color: var(--wp--preset--color--lpo-grand-large);
	color: var(--wp--preset--color--lpo-paper);
	font-weight: 700;
}
/* Survol/focus : la regle generique du sous-menu (0,5,1) eclaircit le fond ; sur
   un fond plein on passe au bleu LPO pour garder du contraste avec le texte blanc. */
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item.lpo-menu-accent > .wp-block-navigation-item__content:hover,
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item.lpo-menu-accent > .wp-block-navigation-item__content:focus,
.wp-block-navigation .wp-block-navigation-item.lpo-menu-accent > .wp-block-navigation-item__content:hover,
.wp-block-navigation .wp-block-navigation-item.lpo-menu-accent > .wp-block-navigation-item__content:focus-visible {
	background-color: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-paper);
}


/* === Bascule hamburger anticipée (≤ 1023px) ================================
 * Problème : la barre de menu (6 entrées + logo + bouton « Mon espace »)
 * a besoin d'environ 1468px pour tenir sur une seule ligne. Avec le pill en
 * `clamp(1100px, 85vw, 1600px)`, elle ne tient inline qu'au-dessus de
 * ~1700px de viewport → en dessous, elle wrappe sur plusieurs lignes.
 *
 * Le hamburger natif de WP (overlay plein écran) ne s'active lui qu'en
 * dessous de 600px, via deux règles core dans `@media (min-width: 600px)` :
 *   - cache le bouton hamburger : `.…-open:not(.always-shown)`            (0,2,0)
 *   - affiche le menu inline : `.…container:not(.hidden-by-default):not(.is-menu-open)` (0,3,0)
 *
 * On relève ce seuil à 1100px (ajusté 03/08 : pill bloqué à 1100px de large en dessous) : sur tablette + mobile on bascule sur
 * l'overlay (qui supprime tout wrap), au-dessus de 1024px la barre inline
 * reste. On surcharge les deux règles core dans la plage 600 → 1023.98px,
 * sans `!important`, en dépassant leur spécificité. L'état `.is-menu-open`
 * n'est jamais ciblé → l'overlay s'ouvre normalement au clic à ces largeurs
 * (vérifié : le mécanisme overlay n'est pas borné par un min-width).
 * -------------------------------------------------------------------------- */
@media (min-width: 600px) and (max-width: 1099.98px) {
	/* Réafficher le bouton hamburger (0,3,0 > core 0,2,0). */
	.wp-block-navigation .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}
	/* Masquer le menu inline tant qu'il n'est pas ouvert en overlay
	   (0,5,0 > core 0,3,0). */
	.wp-block-navigation.is-responsive .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
		display: none;
	}
}


/* === Aplatissement des sous-menus dans l'overlay mobile ====================
 * Dans l'overlay plein écran (`.is-menu-open`), nos sous-menus héritent du
 * style « carte flottante » conçu pour le dropdown desktop (radius, ombre,
 * min-width 360, marge top + pont ::before) — empilés dans l'overlay, ça
 * donne des cartes incohérentes. On les remet à plat : pleine largeur, pas
 * d'ombre/bordure/radius, légère indentation pour matérialiser la hiérarchie.
 *
 * Spécificité : on préfixe par `.wp-block-navigation` pour atteindre (0,6,0)
 * et, placé après, ce bloc gagne aussi sur l'override min-width (0,6,0) du
 * dropdown desktop, qui pourrait sinon réimposer 360px sur les sous-menus
 * dont le toggle est `aria-expanded="true"` dans l'overlay. */
.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container {
	position: static;
	box-shadow: none;
	border: none;
	border-radius: 0;
	background: transparent;
	min-width: 0;
	margin-top: 0;
	padding: 0 0 0 12px;
}
.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container::before {
	display: none; /* pas de pont invisible dans l'overlay */
}


/* === MON ESPACE (plugin elito-mon-espace) =================================
 * Habillage des onglets (bloc elito/nav), de la zone de rendu (elito/outlet),
 * des formulaires et des messages. 100% tokens theme.json LPO : aucune valeur
 * en dur (couleurs/espacements/ombres/radius viennent des presets du child).
 * Le plugin reste sans présentation ; tout le style vit ici, côté thème. */

/* Barre au-dessus des onglets : Tableau de bord (gauche) + Déconnexion (droite). */
.mespace-bar {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: var(--wp--preset--spacing--small);
	margin-bottom: var(--wp--preset--spacing--small);
}
.mespace-bar__left {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--small);
	flex-wrap: wrap;
}
.mespace-bar__home,
.mespace-bar__admin,
.mespace-bar__logout {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 6px 12px;
	border-radius: 999px;
	font-family: var(--wp--preset--font-family--sora);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--small);
	text-decoration: none;
	color: var(--wp--preset--color--lpo-warm-700);
	transition: background-color 0.15s ease, color 0.15s ease;
}
.mespace-bar__home:hover,
.mespace-bar__logout:hover {
	color: var(--wp--preset--color--lpo-blue);
	background: var(--wp--preset--color--lpo-warm-50);
}
/* Bouton admin : bordé bleu pour le distinguer comme une action. */
.mespace-bar__admin {
	border: 1px solid var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-blue);
}
.mespace-bar__admin:hover {
	background: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-paper);
}
.mespace-bar .mespace-ic { flex: none; }

/* Onglets : pills horizontales scrollables, actif = bleu LPO plein. */
.mespace-nav__list {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--preset--spacing--small);
	list-style: none;
	margin: 0 0 var(--wp--preset--spacing--normal);
	padding: 0;
}
.mespace-nav__item { margin: 0; }
.mespace-tab {
	display: inline-block;
	padding: 10px 22px;
	border-radius: 999px;
	background: var(--wp--preset--color--lpo-warm-100);
	color: var(--wp--preset--color--lpo-ink);
	font-family: var(--wp--preset--font-family--sora);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--small);
	letter-spacing: 0.02em;
	text-decoration: none;
	transition: background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}
.mespace-tab:hover,
.mespace-tab:focus-visible {
	background: var(--wp--preset--color--lpo-warm-50);
	box-shadow: var(--wp--preset--shadow--pill);
}
.mespace-tab.is-active {
	background: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-paper);
	box-shadow: var(--wp--preset--shadow--glow-blue);
}

/* Onglets réservés aux gestionnaires/admins : teinte orange pour distinguer
 * d'un coup d'œil ce qui s'adresse aux admins (vs aux membres).
 * Ajouter ici le slug de tout nouvel onglet admin (classe mespace-tab--{slug}). */
.mespace-tab--documents,
.mespace-tab--admin-benevolat {
	color: var(--wp--preset--color--lpo-orange);
	box-shadow: inset 0 0 0 1px var(--wp--preset--color--lpo-orange);
}
.mespace-tab--documents:hover,
.mespace-tab--documents:focus-visible,
.mespace-tab--admin-benevolat:hover,
.mespace-tab--admin-benevolat:focus-visible {
	background: color-mix(in srgb, var(--wp--preset--color--lpo-orange) 14%, var(--wp--preset--color--lpo-warm-50));
}
.mespace-tab--documents.is-active,
.mespace-tab--admin-benevolat.is-active {
	background: var(--wp--preset--color--lpo-orange);
	color: var(--wp--preset--color--lpo-paper);
	box-shadow: none;
}

/* Conteneur dashboard : padding vertical (insensible au margin-collapsing du
 * thème) pour garantir l'air en haut et en bas, sans coller header/footer. */
.mespace-dashboard {
	padding-block: var(--wp--preset--spacing--medium) var(--wp--preset--spacing--section-tight);
}

/* Zone de rendu de la section courante : panneau crème qui porte des cartes. */
.mespace-outlet {
	background: var(--wp--preset--color--lpo-warm-50);
	border-radius: 16px;
	box-shadow: var(--wp--preset--shadow--card);
	padding: var(--wp--preset--spacing--medium);
}

/* Accueil rendu « nu » : pas de panneau crème, la page gère ses propres fonds. */
.mespace-outlet--bare {
	background: none;
	box-shadow: none;
	padding: 0;
}

/* Carte blanche posée sur le panneau crème (ex. « Mon profil », « Mes infos »). */
.mespace-card {
	background: var(--wp--preset--color--lpo-paper);
	border-radius: 14px;
	box-shadow: var(--wp--preset--shadow--sm);
	padding: var(--wp--preset--spacing--normal);
}
.mespace-card + .mespace-card { margin-top: var(--wp--preset--spacing--medium); }
.mespace-card > :first-child { margin-top: 0; }
.mespace-card > :last-child { margin-bottom: 0; }
.mespace-card h2 { margin-bottom: var(--wp--preset--spacing--small); }

/* Grille de cartes vers les sections (bloc « Cartes de l'espace »). */
.mespace-cards {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: var(--wp--preset--spacing--medium);
}
/* Espace entre le message de bienvenue (carte) et la grille de cartes. */
.mespace-card + .mespace-cards,
.wp-block-group + .mespace-cards {
	margin-top: var(--wp--preset--spacing--normal);
}

/* Placeholder d'aperçu des blocs dynamiques dans l'éditeur. */
.mespace-editor-ph {
	border: 1px dashed var(--wp--preset--color--lpo-warm-300, #a8a095);
	border-radius: 12px;
	padding: var(--wp--preset--spacing--normal);
	text-align: center;
	background: var(--wp--preset--color--lpo-warm-50, #f7f4ee);
}
.mespace-editor-ph__title {
	display: block;
	font-family: var(--wp--preset--font-family--lpo);
	font-size: var(--wp--preset--font-size--medium);
}
.mespace-editor-ph__desc {
	margin: 6px 0 0;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--lpo-warm-700);
}
.mespace-section-card {
	display: flex;
	flex-direction: column;
	gap: 8px;
	background: var(--wp--preset--color--lpo-paper);
	border-radius: 14px;
	border-top: 3px solid var(--wp--preset--color--lpo-blue);
	box-shadow: var(--wp--preset--shadow--card);
	padding: var(--wp--preset--spacing--normal);
	text-decoration: none;
	color: var(--wp--preset--color--lpo-ink);
	transition: box-shadow 0.15s ease, transform 0.05s ease;
}
.mespace-section-card:hover {
	box-shadow: var(--wp--preset--shadow--lg);
	transform: translateY(-2px);
}
.mespace-section-card__title {
	font-family: var(--wp--preset--font-family--lpo);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--large);
	line-height: 1.15;
}
.mespace-section-card__desc {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--lpo-warm-700);
}
.mespace-section-card__more {
	margin-top: auto;
	font-family: var(--wp--preset--font-family--sora);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--lpo-blue);
}
.mespace-section-card__more::after { content: " →"; }

/* Formulaires : champs empilés, libellés en Sora. */
.mespace-form { margin: 0; }
.mespace-field {
	display: flex;
	flex-direction: column;
	gap: 6px;
	margin: 0 0 var(--wp--preset--spacing--medium);
}
.mespace-field > label,
.mespace-field > legend {
	font-family: var(--wp--preset--font-family--sora);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--small);
}
.mespace-form input[type="text"],
.mespace-form input[type="email"],
.mespace-form input[type="password"] {
	width: 100%;
	max-width: 460px;
	padding: 10px 14px;
	border: 1px solid var(--wp--preset--color--lpo-warm-100);
	border-radius: 10px;
	background: var(--wp--preset--color--lpo-paper);
	font-size: var(--wp--preset--font-size--normal);
}
.mespace-form input:focus {
	outline: none;
	border-color: var(--wp--preset--color--lpo-blue);
	box-shadow: var(--wp--preset--shadow--glow-blue);
}
.mespace-hint {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--lpo-warm-700);
}
.mespace-optin,
.mespace-form fieldset {
	border: 1px solid var(--wp--preset--color--lpo-warm-100);
	border-radius: 12px;
	padding: var(--wp--preset--spacing--medium);
}
.mespace-radio { display: block; margin: 4px 0; }

/* Boutons des formulaires du plugin : pill conforme au thème (comme core/button). */
.mespace-actions .wp-element-button {
	display: inline-block;
	border: 0;
	border-radius: 999px;
	padding: 14px 28px;
	background: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-paper);
	font-family: var(--wp--preset--font-family--sora);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--normal);
	line-height: 1;
	cursor: pointer;
	transition: background-color 0.15s ease, box-shadow 0.15s ease, transform 0.05s ease;
}
.mespace-actions .wp-element-button:hover {
	background: var(--wp--preset--color--lpo-ink);
	box-shadow: var(--wp--preset--shadow--md);
}
.mespace-actions .wp-element-button:active { transform: translateY(1px); }

/* Conseil mot de passe robuste (page réinitialisation). */
.mespace-pw-tip {
	background: var(--wp--preset--color--lpo-warm-100);
	border-radius: 10px;
	padding: 10px 14px;
	margin: 0 0 var(--wp--preset--spacing--medium);
}

/* === Connexion : message de bienvenue + carte habillant wp_login_form ====== */
.mespace-login {
	max-width: 440px;
	margin-inline: auto;
	/* L'air vertical est porté par .mespace-dashboard (padding, anti-collapsing). */
}
/* Avec panneau de bienvenue : passage en deux colonnes, plus large. */
.mespace-login.has-welcome { max-width: 980px; }
.mespace-login__layout {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
	gap: var(--wp--preset--spacing--normal);
}
.mespace-login.has-welcome .mespace-login__card,
.mespace-login.has-welcome .mespace-login__welcome {
	flex: 1 1 360px;
}

/* Panneau de bienvenue : bloc bleu LPO, texte clair. */
.mespace-login__welcome {
	background: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-paper);
	border-radius: 18px;
	box-shadow: var(--wp--preset--shadow--panel);
	padding: var(--wp--preset--spacing--large);
}
.mespace-login__welcome > :first-child { margin-top: 0; }
.mespace-login__welcome > :last-child { margin-bottom: 0; }
.mespace-login__welcome strong {
	font-family: var(--wp--preset--font-family--lpo);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--large);
	line-height: 1.2;
	display: inline-block;
	margin-bottom: 4px;
}
.mespace-login__welcome a {
	color: var(--wp--preset--color--lpo-paper);
	text-decoration: underline;
}
.mespace-login__card {
	background: var(--wp--preset--color--lpo-paper);
	border-radius: 18px;
	border-top: 4px solid var(--wp--preset--color--lpo-blue);
	box-shadow: var(--wp--preset--shadow--panel);
	padding: var(--wp--preset--spacing--large);
}
.mespace-login__title {
	margin: 0 0 6px;
	font-family: var(--wp--preset--font-family--lpo);
	font-weight: 900;
	font-size: var(--wp--preset--font-size--big);
	color: var(--wp--preset--color--lpo-ink);
}
.mespace-login__intro {
	margin: 0 0 var(--wp--preset--spacing--normal);
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--lpo-warm-700);
}

/* Champs du formulaire natif (#loginform) */
.mespace-login #loginform p { margin: 0 0 var(--wp--preset--spacing--medium); }
.mespace-login #loginform label {
	display: block;
	margin-bottom: 6px;
	font-family: var(--wp--preset--font-family--sora);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--lpo-ink);
}
.mespace-login #loginform input.input,
.mespace-login #loginform input[type="text"],
.mespace-login #loginform input[type="password"] {
	width: 100%;
	padding: 11px 14px;
	border: 1px solid var(--wp--preset--color--lpo-warm-100);
	border-radius: 10px;
	background: var(--wp--preset--color--lpo-warm-50);
	font-size: var(--wp--preset--font-size--normal);
	box-sizing: border-box;
}
.mespace-login #loginform input.input:focus,
.mespace-login #loginform input[type="password"]:focus {
	outline: none;
	border-color: var(--wp--preset--color--lpo-blue);
	background: var(--wp--preset--color--lpo-paper);
	box-shadow: var(--wp--preset--shadow--glow-blue);
}

/* « Se souvenir de moi » : case + libellé en ligne, discret */
.mespace-login #loginform .login-remember label {
	display: flex;
	align-items: center;
	gap: 8px;
	font-weight: 400;
	color: var(--wp--preset--color--lpo-warm-700);
}
.mespace-login #loginform .login-remember input { margin: 0; }

/* Bouton : pill bleu LPO pleine largeur */
.mespace-login #loginform .login-submit { margin-bottom: 0; }
.mespace-login #loginform #wp-submit {
	width: 100%;
	padding: 13px 28px;
	border: 0;
	border-radius: 999px;
	background: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-paper);
	font-family: var(--wp--preset--font-family--sora);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--normal);
	letter-spacing: 0.02em;
	cursor: pointer;
	transition: background-color 0.15s ease, box-shadow 0.15s ease, transform 0.05s ease;
}
.mespace-login #loginform #wp-submit:hover {
	background: var(--wp--preset--color--lpo-ink);
	box-shadow: var(--wp--preset--shadow--md);
}
.mespace-login #loginform #wp-submit:active { transform: translateY(1px); }

/* Lien mot de passe oublié, centré et discret */
.mespace-lostpassword {
	margin: var(--wp--preset--spacing--medium) 0 0;
	text-align: center;
	font-size: var(--wp--preset--font-size--small);
}

/* CTA inscription sous le formulaire de connexion */
.mespace-login__register {
	margin-top: var(--wp--preset--spacing--medium);
	padding-top: var(--wp--preset--spacing--medium);
	border-top: 1px solid var(--wp--preset--color--lpo-warm-100);
	text-align: center;
}
.mespace-login__register p {
	margin: 0 0 var(--wp--preset--spacing--small);
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--lpo-warm-700);
}
.mespace-btn-secondary {
	display: inline-block;
	padding: 11px 24px;
	border-radius: 999px;
	background: var(--wp--preset--color--lpo-orange);
	color: var(--wp--preset--color--lpo-paper);
	font-family: var(--wp--preset--font-family--sora);
	font-weight: 700;
	text-decoration: none;
	transition: background-color 0.15s ease;
}
.mespace-btn-secondary:hover { background: var(--wp--preset--color--lpo-ink); }

/* === Inscription ========================================================== */
.mespace-register {
	max-width: 640px;
	margin-inline: auto;
	background: var(--wp--preset--color--lpo-warm-50);
	border-radius: 18px;
	border-top: 4px solid var(--wp--preset--color--lpo-blue);
	box-shadow: var(--wp--preset--shadow--panel);
	padding: var(--wp--preset--spacing--large);
}
.mespace-register__title {
	margin: 0 0 var(--wp--preset--spacing--normal);
	font-family: var(--wp--preset--font-family--lpo);
	font-weight: 900;
	font-size: var(--wp--preset--font-size--big);
	color: var(--wp--preset--color--lpo-ink);
}
.mespace-register__back {
	margin: var(--wp--preset--spacing--normal) 0 0;
	text-align: center;
	font-size: var(--wp--preset--font-size--small);
}

/* Honeypot : invisible pour les humains, présent pour les bots. */
.mespace-hp {
	position: absolute !important;
	left: -9999px !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

/* Messages (PRG). */
.mespace-notice {
	margin: 0 0 var(--wp--preset--spacing--normal);
	padding: 12px 18px;
	border-radius: 10px;
	font-size: var(--wp--preset--font-size--small);
}
.mespace-notice--success {
	background: rgba(0, 135, 205, 0.10);
	color: var(--wp--preset--color--lpo-warm-700);
}
.mespace-notice--error {
	background: rgba(245, 95, 25, 0.12);
	color: var(--wp--preset--color--lpo-warm-700);
}
.mespace-notice--info {
	background: var(--wp--preset--color--lpo-warm-100);
	color: var(--wp--preset--color--lpo-warm-700);
}

/* lpo-footer-menu-hover — Menu du footer : blanc par défaut (réglage du bloc),
   survol/focus en « Footer light blue » (palette). Scopé au footer uniquement,
   le menu du header n est pas concerné. */
footer.wp-block-template-part .wp-block-navigation a:hover,
footer.wp-block-template-part .wp-block-navigation a:focus-visible {
	color: var(--wp--preset--color--footer-light-blue) !important;
}

/* lpo-header-menu-fluid — Menu du header : jamais de passage à la ligne.
   La police (clamp posé sur le bloc nav) et le gap ci-dessous se compressent
   proportionnellement avec le viewport ; les libellés et le bouton restent
   insécables. Scopé au pill du header uniquement. */
/* ⚠️ `:not(.lpo-megamenu__mois)` : la nav des 12 mois du mega menu vit elle
   aussi DANS `.lpo-header-pill`. Sans l'exclusion, ce `gap !important` (prevu
   pour serrer la barre du header) ecrasait le gap de sa grille et etalait les
   mois sur toute la hauteur du panneau.
   L'exclusion porte sur le UL et NON sur le nav : la nav du mega menu est
   imbriquee dans la nav principale, qui resterait un ancetre valide.
   Meme exclusion pour `.is-style-lpo-liste` (menu des secteurs, R7 02/09). */
.lpo-header-pill nav.wp-block-navigation ul.wp-block-navigation__container:not(.lpo-megamenu__mois):not(.is-style-lpo-liste) {
	flex-wrap: nowrap !important;
	gap: clamp(7px, 1vw, 18px) !important;
}
.lpo-header-pill .wp-block-navigation-item__label,
.lpo-header-pill .wp-block-button__link {
	white-space: nowrap;
}

/* lpo-header-logo-fluid — logo du header : 122px de base, plancher 100px.
   Le conteneur logo et le bouton sont exclus de la compression flex
   (sinon max-width:100% + shrink écrasent le logo). */
.lpo-header-pill > .wp-block-group:first-child,
.lpo-header-pill .wp-block-site-logo,
.lpo-header-pill .wp-block-buttons {
	flex-shrink: 0;
}
.lpo-header-pill .wp-block-site-logo img {
	width: clamp(110px, 12.5vw - 40px, 140px) !important;
	max-width: none !important;
	height: auto !important;
}

/* lpo-header-menu-fluid (suite) — le toggle du mega menu reste sur une ligne
   (libellé + chevron insécables, comme les autres items).
   ⚠️ `white-space: nowrap` UNIQUEMENT sur le toggle : pose sur
   `.wp-block-ollie-mega-menu` (le <li> qui contient AUSSI le panneau), il
   etait herite par tout le contenu du mega menu — titres d'events, legendes,
   libelles — qui refusaient alors de passer a la ligne et debordaient sur la
   colonne voisine. */
.lpo-header-pill .wp-block-ollie-mega-menu {
	flex-wrap: nowrap;
}
.lpo-header-pill .wp-block-ollie-mega-menu__toggle {
	white-space: nowrap;
	flex-wrap: nowrap;
}

/* lpo-header-pill élargi — le pill seul dépasse un peu la wide-size globale
   (88vw au lieu de 85vw) pour absorber logo/menu dans la bande 1200-1300px
   où la wide-size est figée à son plancher de 1100px. */
.lpo-header-pill.alignwide {
	max-width: clamp(1100px, 88vw, 1600px);
}


/* === MEGA MENU « Nos RDV » (Ollie Menu Designer) ===========================
 * Contenu : template part `dropdown-menu` (post wp_template_part en BASE, pas
 * un fichier du thème) — 4 colonnes : prochains RDV (widget EM) / les mois /
 * les secteurs géographiques / l'affiche de l'année + CTA.
 *
 * Pourquoi du CSS : ni le bloc Navigation ni le bloc Catégories n'exposent de
 * mise en grille ni de style de liste dans l'éditeur. Tout le reste (couleurs,
 * arrondis, espacements, largeurs de colonnes) est piloté depuis l'éditeur et
 * ne doit PAS être surchargé ici.
 *
 * Scope : `.lpo-megamenu` (classe posée sur le Group racine du template part).
 * -------------------------------------------------------------------------- */

/* Le style de bloc `is-style-glass` du theme impose
   `background-color: rgba(255,255,255,.55) !important` — la valeur posee sur le
   bloc dans l'editeur (#fffffff0) ne passait donc jamais, et le hero defilait
   sous le panneau au point de gener la lecture. On remonte l'opacite ici ; le
   `!important` est obligatoire pour repasser devant le style de bloc. */
.lpo-megamenu.is-style-glass {
	background-color: rgba(255, 255, 255, 0.92) !important;
}

/* Le panneau doit rester lisible même quand une colonne est très haute :
   les colonnes s'alignent en haut et ne s'étirent pas les unes sur les autres. */
.lpo-megamenu .wp-block-columns {
	align-items: flex-start;
}

/* --- Appel a l'action en pied de colonne -----------------------------------
 * Un bouton pill orange par colonne, TOUS alignes sur la meme ligne en bas du
 * panneau quelle que soit la hauteur du contenu au-dessus.
 * Le bloc Colonne n'expose pas de layout flex dans l'editeur : on passe la
 * colonne en colonne flex et on pousse le dernier bloc vers le bas. */
.lpo-megamenu .wp-block-column {
	display: flex;
	flex-direction: column;
}
.lpo-megamenu .lpo-megamenu__cta {
	margin-top: auto;
	padding-top: var(--wp--preset--spacing--medium);
}
/* Le libelle peut passer sur deux lignes (« Voir la page des secteurs → ») :
   on garde les boutons a la meme hauteur et le texte centre. */
.lpo-megamenu .lpo-megamenu__cta .wp-block-button__link {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	text-align: center;
	line-height: 1.2;
	transition: background-color 0.15s ease, color 0.15s ease;
}
/* Boutons en contour : au survol ils se remplissent, pour que l'etat actif soit
   lisible (un simple changement de teinte sur du contour se voit mal).
   ⚠️ `!important` NECESSAIRE : les classes de palette generees par WordPress
   (`.has-lpo-paper-background-color`, `.has-lpo-orange-color`) portent elles-memes
   un `!important` — sans lui, le survol etait simplement sans effet. */
.lpo-megamenu .lpo-megamenu__cta .wp-block-button__link:hover,
.lpo-megamenu .lpo-megamenu__cta .wp-block-button__link:focus-visible {
	background-color: var(--wp--preset--color--lpo-orange) !important;
	color: var(--wp--preset--color--lpo-paper) !important;
}

/* --- Colonne 1 : widget « Prochains rendez-vous » (Events Manager) ---------
 * Le bloc `events-manager/events` sort toujours un `<h3>` de titre ; on le
 * blanchit par un espace dans l'éditeur (le bloc ignore une chaîne vide et
 * remet son titre par défaut). Reste un h3 vide à masquer. */
.lpo-megamenu .wp-block-events-manager__title {
	display: none;
}

/* Items du widget : EM les rend déjà en rangée « pastille date | infos ».
   On resserre l'interligne pour tenir 4 RDV sans allonger le panneau.
   ⚠️ Si les items repassent un jour en pile (pastille pleine largeur au-dessus
   du titre), le coupable est le CSS legacy de `lpo-events-front/css/event-list.css`
   qui forçait `flex-direction:column` sur `.em.em-list-widget .em-item` — cf. le
   commentaire dans ce fichier. */
.lpo-megamenu .em.em-list-widget {
	gap: 10px;
}
.lpo-megamenu .em.em-list-widget .em-item-name {
	line-height: 1.25;
}
/* Le lien de titre sort en bleu accent EM, en graisse normale : peu lisible sur
   le fond clair du panneau. On le passe en bleu nuit + gras.
   `!important` : la feuille pixelbones d'EM colore ses liens avec le sien. */
/* Le widget EM est rendu par le plugin, pas par un bloc : sa typo ne se regle
   pas dans l'editeur. On lui donne la meme que la grille des mois — la famille
   « LPO », seule a monter jusqu'a 900 (LPO Black) ; la police de texte du theme
   plafonne beaucoup plus bas et les titres restaient mous. */
.lpo-megamenu .em.em-list-widget .em-item-name a {
	color: var(--wp--preset--color--lpo-night) !important;
	font-family: var(--wp--preset--font-family--lpo);
	font-weight: 900;
	font-size: 15px;
	letter-spacing: -0.01em;
}
.lpo-megamenu .em.em-list-widget .em-item-name a:hover,
.lpo-megamenu .em.em-list-widget .em-item-name a:focus-visible {
	color: var(--wp--preset--color--lpo-blue) !important;
	/* soulignement retiré en R45 : le survol passe par le fond de la ligne */
}
/* EM pose `flex-wrap:nowrap` sur l'item et ne remet pas `min-width:0` sur le
   bloc d'infos : un titre long ne peut alors pas passer sous sa largeur de
   contenu minimale et deborde sur la colonne voisine. */
.lpo-megamenu .em.em-list-widget .em-item-info {
	min-width: 0;
}
.lpo-megamenu .em.em-list-widget .em-item-name a {
	overflow-wrap: anywhere;
}
/* Les events sans lieu renseigne sortent quand meme la ligne « lieu » : un
   picto epingle suivi d'un <span> vide. On masque la ligne entiere. */
.lpo-megamenu .em.em-list-widget .em-item-meta-line:has(> span:last-child:empty) {
	display: none;
}

/* --- Colonne 2 : les 12 mois en grille -------------------------------------
 * Le bloc Navigation ne propose que « horizontal » ou « vertical » ; une liste
 * verticale de 12 mois fait 12 lignes et déséquilibre tout le panneau. On passe
 * son conteneur en grille 2 colonnes (6 lignes), en neutralisant le flex vertical
 * posé par le bloc. */
.lpo-megamenu__mois ul.wp-block-navigation__container {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 8px;
	align-items: stretch;
}
.lpo-megamenu__mois .wp-block-navigation-item {
	margin: 0;
	display: flex; /* pour que la case remplisse toute la cellule de la grille */
}
/* Cases carrees a bordure grise : `aspect-ratio: 1` garde le carre quelle que
   soit la largeur de la colonne, le flex centre le libelle sur 1 ou 2 lignes. */
.lpo-megamenu__mois .wp-block-navigation-item__content {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	width: 100%;
	aspect-ratio: 1 / 1;
	padding: 4px;
	border: 1px solid var(--wp--preset--color--lpo-warm-100);
	border-radius: 10px;
	/* Gris clair opaque (jeton `color-6` de la palette) : le blanc plein etait
	   trop dur, et le blanc translucide laissait trop remonter le verre du
	   panneau. Le gris neutre pose les 12 cases sans les faire briller. */
	background-color: var(--wp--preset--color--color-6);
	color: var(--wp--preset--color--lpo-ink);
	text-align: center;
	text-decoration: none;
	line-height: 1.15;
	font-size: 13px;
	/* Le retour a la ligne avant l'annee NE se fait PAS en CSS : le libelle est
	   une seule chaine « Mois AAAA ». Essai infructueux avec `word-spacing:100vw`
	   (l'espace geant faisait exploser la largeur min-content du span, les
	   libelles sortaient des cases). Le `<br>` est donc pose dans les LIBELLES
	   du menu 414921 — WordPress passe les labels de navigation-link dans
	   `wp_kses_post()`, qui autorise `<br>`. */
	transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}
.lpo-megamenu__mois .wp-block-navigation-item__label {
	display: block;
	min-width: 0;
}
/* Sur un fond gris, le survol doit ECLAIRCIR : passer au creme aurait donne
   deux teintes proches et illisibles. La case s'allume en blanc, cerclee de bleu. */
.lpo-megamenu__mois .wp-block-navigation-item__content:hover,
.lpo-megamenu__mois .wp-block-navigation-item__content:focus-visible {
	background-color: var(--wp--preset--color--lpo-paper);
	border-color: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-blue);
}

/* --- Colonne 3 : secteurs géographiques (bloc Catégories) ------------------
 * Le bloc sort un `<ul>` de liste classique ; le thème parent Prime FSE ajoute
 * en plus un séparateur 1px sous chaque `li` (`li::after` en absolute), ce qui
 * donnait le rendu « rayé » signalé. On remet une liste nue, aux mêmes pastilles
 * que la colonne des mois pour que les deux colonnes se répondent. */
/* La liste collait a sa pastille de titre : la feuille du bloc Navigation pose
   `.wp-block-navigation ul {margin-top:0}` (0,1,1) et le panneau du mega menu
   est ENTIEREMENT contenu dans la nav du header — encore une fuite de la meme
   famille. Il faut donc monter a (0,2,1) pour reposer l'ecart. */
.lpo-megamenu ul.lpo-megamenu__secteurs {
	list-style: none;
	margin: var(--wp--preset--spacing--medium) 0 0;
	padding: 0;
}
.lpo-megamenu__secteurs ul {
	list-style: none;
	margin: 0;
	padding: 0;
}
/* Prime FSE habille `.wp-block-categories-list li` en ligne de tableau :
   `display:flex; justify-content:space-between; border-bottom:1px; padding:10px 0`.
   D'ou le rendu « raye » signale. On repasse en items simples — il faut monter
   a (0,3,0) pour depasser la regle du parent (0,2,0) chargee apres nous. */
.lpo-megamenu ul.lpo-megamenu__secteurs li {
	display: block;
	margin: 0;
	padding: 0;
	border: 0;
}
.lpo-megamenu ul.lpo-megamenu__secteurs a {
	display: block;
	padding: 6px var(--wp--preset--spacing--medium);
	border-radius: 8px;
	color: var(--wp--preset--color--lpo-ink);
	text-decoration: none;
	transition: background-color 0.15s ease, color 0.15s ease;
}
.lpo-megamenu ul.lpo-megamenu__secteurs a:hover,
.lpo-megamenu ul.lpo-megamenu__secteurs a:focus-visible {
	background-color: var(--wp--preset--color--lpo-warm-50);
	color: var(--wp--preset--color--lpo-blue);
}

/* --- Colonne 4 : affiche de l'année + appels à l'action -------------------- */
.lpo-megamenu__affiche img {
	width: 100%;
	height: auto;
	display: block;
}
.lpo-megamenu__affiche figcaption {
	margin-top: 8px;
	text-align: left;
	font-size: 13px;
	line-height: 1.35;
	color: var(--wp--preset--color--lpo-warm-700);
	/* La légende hérite d'un `text-align:center` + nowrap ailleurs dans le
	   thème ; ici elle doit s'enrouler dans la largeur de la colonne. */
	white-space: normal;
	overflow-wrap: anywhere;
}


/* --- Repli : sous 1100px le mega menu passe en overlay plein écran ---------
 * (`.is-menu-open` d'Ollie). Les 4 colonnes s'y empilent : on remet la colonne
 * des mois sur 2 colonnes serrées et on laisse le reste à plat. */
@media (max-width: 1099.98px) {
	.lpo-megamenu {
		padding: var(--wp--preset--spacing--medium) !important;
	}
	.lpo-megamenu__mois ul.wp-block-navigation__container {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}


/* === PAGES MENSUELLES du programme des sorties ============================
 * Pages `/sorties-animations/<mois>-<annee>/` (12 pages 2026), rendues par le
 * modele `templates/page-mois.html` : header + post-content + footer, SANS le
 * hero de titre ni la mise en avant de `page.html` — le contenu porte deja son
 * propre bandeau (bloc Cover `containerTitreMois` + `h1.titremois`), sinon le
 * titre et l'image apparaissaient TROIS fois.
 *
 * La mise en forme du bandeau et de la liste `.lito_event` vient du CSS legacy
 * porte de l'ancien theme (`mu-plugins/lpo-events-front/css/event-list.css`,
 * cf. backlog §1.5). Ci-dessous UNIQUEMENT les recalages rendus necessaires par
 * le changement de theme — rien qui duplique le legacy.
 * -------------------------------------------------------------------------- */

/* Le legacy demande `font-family:"LPO Light"` : ce nom de famille existait dans
   econature, pas dans le theme de la refonte (une seule famille « LPO » avec ses
   graisses 300/400/700/900). Sans ca, le titre retombait sur une serif systeme. */
/* ⚠️ Specificite : le CSS legacy pose `h1.titremois {font-family:"LPO Light"}`
   a (0,1,1) — EXACTEMENT la meme que nous — et `event-list.css` (mu-plugin,
   priorite 99) est enqueue APRES `style-custom.css` (theme) : a egalite, il
   gagne par l'ordre. On passe donc par le conteneur pour monter a (0,2,1). */
.containerTitreMois h1.titremois {
	font-family: var(--wp--preset--font-family--lpo);
	font-weight: 300;
}
.containerTitreMois h1.titremois strong {
	font-family: var(--wp--preset--font-family--lpo);
	font-weight: 900;
}

/* Titre de sortie dans le bandeau gris.
   - Police : la prod le rend en « LPO Regular » graisse 700 ; sur le theme de
     la refonte il retombait sur la pile Raleway en graisse 400 (nettement plus
     maigre). On reprend la famille `lpo` du theme, dont le 700 est la vraie
     graisse Bold.
   - Soulignement : les liens du theme sont soulignes, ce qui rend le bandeau
     brouillon (la prod ne l'avait pas). Le survol le ramene, pour l'affordance. */
/* La date herite de la pile Raleway posee par `.em.pixelbones` (feuille
   d'Events Manager), dans laquelle la liste est imbriquee. On la ramene sur la
   police de texte du site. */
.lito_event .bandeau .date {
	font-family: var(--wp--preset--font-family--sora);
}
.lito_event .bandeau .titre a {
	font-family: var(--wp--preset--font-family--lpo);
	font-weight: 700;
	text-decoration: none;
}
.lito_event .bandeau .titre a:hover,
.lito_event .bandeau .titre a:focus-visible {
	text-decoration: underline;
}

/* Le premier evenement collait au bandeau de titre du mois : la marge basse du
   Cover est mangee par la pastille du titre, qui deborde vers le bas
   (`margin-bottom: -60px` sur son conteneur interne, CSS legacy). On repose
   donc l'ecart sur le premier item plutot que de toucher au Cover. */
.em-events-list > .lito_event:first-child {
	margin-top: var(--wp--preset--spacing--large);
}

/* La couleur du titre n'est PAS corrigee ici : le bloc portait `color-2` (le
   jaune de l'ancienne charte) et WordPress genere `.has-color-2-color{… !important}`,
   imbattable sans empiler un `!important` de plus. Elle a ete corrigee A LA
   SOURCE, cote bloc, par `patch-pages-mois.py` : `textColor` -> `lpo-paper`. */


/* === BANDEAU D'ACTU ÉPINGLÉE ==============================================
 * Markup : patterns/bandeau-actu-epinglee.php — un Group `.lpo-actu-epinglee`
 * contenant une Query Loop `sticky:"only"`. La PISTE est le <ul> généré par
 * post-template (layout flex/nowrap), chaque <li> est une SLIDE. Aucun
 * conteneur supplémentaire n'a été ajouté au markup pour cela.
 *
 * Pourquoi du CSS : theme.json ne sait exprimer NI le scroll-snap, NI le style
 * des contrôles injectés en JS (ils n'existent pas en tant que blocs). Tout le
 * reste — couleurs, espacements, rayons, typographie — est piloté par les
 * attributs du bloc, en tokens.
 * -------------------------------------------------------------------------- */

/* La piste. `overflow-x` + `scroll-snap-type` font tout le carrousel sans une
   ligne de JS : sans script, le bandeau reste feuilletable au doigt. */
.lpo-actu-epinglee .wp-block-post-template {
	display: flex;
	flex-wrap: nowrap;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	/* Les slides doivent faire EXACTEMENT 100 % : le script calcule la position
	   de défilement en `index * clientWidth`. Un gap fausserait ce calcul. */
	gap: 0;
	margin: 0;
	padding: 0;
	list-style: none;
}

/* Une slide = toute la largeur visible. `min-width: 0` est indispensable : sans
   lui, un titre long empêche le flex-item de se réduire et casse le snap. */
.lpo-actu-epinglee .wp-block-post {
	flex: 0 0 100%;
	min-width: 0;
	scroll-snap-align: start;
	margin: 0;
	/* Respiration entre deux actualites : sans elle, le bouton « Lire la suite »
	   d'une slide touche l'image de la suivante pendant le defilement.
	   C'est un PADDING et non un `gap` sur la piste : avec `box-sizing:border-box`
	   la slide mesure toujours exactement 100 % de la piste, et le calcul
	   `index * clientWidth` du script reste juste. Un gap le fausserait. */
	padding-right: var(--wp--preset--spacing--normal);
}

/* La barre de défilement n'est masquée QUE si le script a pris la main : les
   puces deviennent alors l'affordance. Sans JS elle reste visible — c'est le
   seul indice qu'il y a plusieurs actualités. */
.lpo-actu-epinglee.is-enhanced .wp-block-post-template {
	scrollbar-width: none;
}
.lpo-actu-epinglee.is-enhanced .wp-block-post-template::-webkit-scrollbar {
	display: none;
}

/* Colonne de gauche, FIXE : le titre de section et les contrôles ne défilent
   pas avec les slides. `flex-basis` fixe pour que la piste ne se décale pas
   d'une slide à l'autre selon la longueur du titre. */
.lpo-actu-epinglee__intro {
	flex: 0 0 auto;
	width: 200px;
}

/* La piste occupe tout le reste. `min-width: 0` est obligatoire : sans lui, un
   flex-item refuse de descendre sous la largeur de son contenu et la piste
   déborde du bandeau au lieu de défiler. */
.lpo-actu-epinglee > .wp-block-query {
	flex: 1 1 auto;
	min-width: 0;
}

/* Le texte de la slide prend l'espace libre entre l'image et le bouton. */
.lpo-actu-epinglee__texte {
	flex: 1 1 auto;
	min-width: 0;
}

/* L'image et le bouton gardent leur taille : c'est le texte qui absorbe. */
.lpo-actu-epinglee .wp-block-post-featured-image,
.lpo-actu-epinglee .wp-block-read-more {
	flex: 0 0 auto;
}

/* « Lire la suite » : core/read-more sort un simple <a>, on lui donne l'allure
   d'un bouton en contour, comme le bouton pause, pour rester cohérent. */
.lpo-actu-epinglee .wp-block-read-more {
	display: inline-block;
	padding: 8px 16px;
	border: 0;
	border-radius: 999px;
	/* Blanc plein / texte rouge : c'est l'appel a l'action principal du bandeau,
	   il doit ressortir du fond. Le rouge est repris du token de fond du bloc,
	   pas ecrit en dur. */
	background: var(--wp--preset--color--color-9);
	color: var(--wp--preset--color--vivid-red) !important;
	font-size: var(--wp--preset--font-size--small);
	font-weight: 700;
	text-decoration: none;
	white-space: nowrap;
}
.lpo-actu-epinglee .wp-block-read-more:hover,
.lpo-actu-epinglee .wp-block-read-more:focus-visible {
	background: var(--wp--preset--color--lpo-warm-100);
	text-decoration: none;
}

/* Contrôles injectés en JS : n'existent pas quand il n'y a qu'une actualité. */
.lpo-actu-epinglee__controles {
	display: flex;
	align-items: center;
	gap: var(--wp--preset--spacing--small);
	margin-top: var(--wp--preset--spacing--small);
}

/* Bouton pause : VISIBLE en permanence (RGAA 13.8 — un contrôle de mise en
   pause ne doit pas être révélé au survol). Contour plutôt que fond plein,
   pour ne pas concurrencer visuellement les liens du bandeau. */
.lpo-actu-epinglee__pause {
	flex: 0 0 auto;
	/* Pastille ronde de 32px : bien au-dela des 24x24 exiges pour une cible
	   tactile (WCAG 2.5.8), tout en restant discrete a cote du CTA blanc. */
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 1px solid currentColor;
	border-radius: 50%;
	background: transparent;
	color: inherit;
	cursor: pointer;
}
/* Ceinture et bretelles : l'icone ne doit JAMAIS etre la cible d'un evenement
   de pointeur, sinon un changement d'etat pendant le clic peut faire perdre
   l'evenement `click` au bouton. */
.lpo-actu-epinglee__pause svg {
	pointer-events: none;
}
.lpo-actu-epinglee__pause svg[hidden] {
	display: none;
}
.lpo-actu-epinglee__pause:hover {
	background: rgba(255, 255, 255, 0.16);
}

.lpo-actu-epinglee__puces {
	display: flex;
	align-items: center;
	gap: 6px;
}

/* Puce : cible tactile de 24×24 (WCAG 2.5.8) obtenue par le padding, le point
   visible ne faisant que 10px. */
.lpo-actu-epinglee__puce {
	width: 24px;
	height: 24px;
	padding: 7px;
	border: 0;
	background: transparent;
	color: inherit;
	cursor: pointer;
	line-height: 0;
}
.lpo-actu-epinglee__puce::before {
	content: "";
	display: block;
	width: 10px;
	height: 10px;
	border: 1px solid currentColor;
	border-radius: 50%;
	background: transparent;
	transition: background-color 0.15s ease;
}
.lpo-actu-epinglee__puce[aria-current="true"]::before {
	background: currentColor;
}

/* Focus clavier : le contour par défaut se perd sur le fond rouge, on le repose
   explicitement en blanc avec un décalage lisible. */
.lpo-actu-epinglee__pause:focus-visible,
.lpo-actu-epinglee__puce:focus-visible {
	outline: 2px solid var(--wp--preset--color--color-9);
	outline-offset: 2px;
	border-radius: 999px;
}

/* Glisser-déposer à la souris (cf. le JS). Le curseur annonce l'affordance, et
   pendant le glissé on coupe scroll-snap ET le défilement fluide : sinon chaque
   pixel parcouru déclencherait un réaimantage et le geste serait inutilisable. */
.lpo-actu-epinglee.is-enhanced .wp-block-post-template {
	cursor: grab;
}
.lpo-actu-epinglee .wp-block-post-template.is-dragging {
	cursor: grabbing;
	scroll-snap-type: none;
	scroll-behavior: auto;
	user-select: none;
}
/* Sans ça, le navigateur lance son propre glisser-déposer d'image et le geste
   est capté par lui au lieu de faire défiler la piste. */
.lpo-actu-epinglee img {
	-webkit-user-drag: none;
	user-select: none;
}

/* Mouvement réduit : on neutralise aussi le défilement fluide CSS, sinon un clic
   sur une puce animerait encore alors que le script demande `behavior: auto`. */
@media ( prefers-reduced-motion: reduce ) {
	.lpo-actu-epinglee .wp-block-post-template {
		scroll-behavior: auto;
	}
	.lpo-actu-epinglee__puce::before {
		transition: none;
	}
}

/* Mobile : les 3 zones s'empilent. La colonne de gauche repasse pleine largeur,
   et l'image à la une passe au-dessus du texte plutôt que de l'écraser. */
@media ( max-width: 781px ) {
	.lpo-actu-epinglee {
		flex-wrap: wrap;
	}
	.lpo-actu-epinglee__intro {
		width: 100%;
	}
	.lpo-actu-epinglee__controles {
		justify-content: space-between;
	}
}
@media ( max-width: 600px ) {
	.lpo-actu-epinglee .wp-block-post > .wp-block-group {
		flex-wrap: wrap;
	}
}

/* === RETOUCHES CLIENT 02/09 =================================================
 * Cette feuille est chargée en front ET dans l'éditeur (add_editor_style dans
 * functions.php) : ce qu'on corrige ici se voit des deux côtés.
 * -------------------------------------------------------------------------- */

/* Sidebar Actus, bloc « Derniers articles » : le parent (prime-fse/style.css)
   arrondit les vignettes à 50 %, et l'éditeur ne voit pas cette feuille — le
   `add_editor_style('style.css')` du parent se résout dans le dossier de l'ENFANT.
   D'où des vignettes rondes en front, carrées dans l'éditeur. On tranche à 8 px.
   ⚠️ Pas via `styles.blocks.core/latest-posts.css` du theme.json : WP l'émet dans
   `:root :where(…)`, spécificité (0,1,0), qui perd contre le (0,1,1) du parent.
   Ici (0,2,1) : gagne sans !important. */
.wp-block-latest-posts .wp-block-latest-posts__featured-image img {
	border-radius: 8px;
}

/* Mega menu, colonne Secteurs (R7) : la liste de termes est remplacee par un bloc
   Navigation (nav 415270) portant le style de bloc « Liste du mega menu »
   (`is-style-lpo-liste`, declare dans functions.php avec ses couleurs repos /
   survol / focus). WordPress copie la className du bloc sur le <ul>. Ici : seulement
   ce que l'editeur ne sait pas regler par item. */
.lpo-megamenu nav.is-style-lpo-liste,
.lpo-megamenu ul.is-style-lpo-liste {
	/* Les styles globaux du bloc Navigation (15 px / 600 / 0.04em, penses pour le
	   header) s'appliquent au <nav> et au <ul> : on rend la main au panneau. */
	font-size: inherit;
	font-weight: inherit;
	letter-spacing: inherit;
}
.lpo-megamenu ul.is-style-lpo-liste .wp-block-navigation-item {
	margin: 0;
}
.lpo-megamenu ul.is-style-lpo-liste li.wp-block-navigation-item > a.wp-block-navigation-item__content {
	display: block;
	padding: 6px var(--wp--preset--spacing--medium);
	padding-block: 6px;
	padding-inline: var(--wp--preset--spacing--medium);
	border-radius: 8px;
	text-decoration: none;
	transition: background-color 0.15s ease, color 0.15s ease;
}
/* Couleur de survol : le style de bloc la declare (lpo-blue) mais le PARENT pose
   `.wp-block-navigation li.wp-block-navigation-item:hover > a {color: color-1}`
   a (0,3,1), hors de portee d'un style de bloc (emis en `:root :where()`, (0,1,0)).
   Le fond de survol, lui, vient bien du style. Seule la couleur est reprise ici. */
.lpo-megamenu ul.is-style-lpo-liste li.wp-block-navigation-item:hover > a.wp-block-navigation-item__content,
.lpo-megamenu ul.is-style-lpo-liste li.wp-block-navigation-item:focus-within > a.wp-block-navigation-item__content {
	color: var(--wp--preset--color--lpo-blue);
}
.lpo-megamenu ul.is-style-lpo-liste .wp-block-navigation-item__label {
	white-space: normal; /* le header impose nowrap a tous les libelles */
}

/* --- MEGA MENU — tailles fluides (R10, 02/09) ---------------------------------
 * Demande client : texte plus petit et plus lisible sur les petits ecrans desktop.
 * Le panneau tient 4 colonnes entre 1100 et 1700 px de viewport mais ses tailles
 * etaient fixes (15 / 13 / 16 px) : a 1200 px les cases des mois debordaient, la
 * pastille de date ecrasait les titres et un bouton sortait de sa pill.
 * Chaque taille est un `clamp(min, droite, max)` lineaire de 1100 px (min) a
 * 1700 px (max) : pente = (max - min) / 6 par vw, origine = min - 11 x pente.
 * Ces regles viennent APRES la section MEGA MENU et la remplacent a selecteur egal.
 * `!important` uniquement la ou la valeur d'origine en porte un (pastille de date
 * d'EM, presets de taille de WordPress) — jamais ailleurs. */

/* Colonne 1 — widget EM */
.lpo-megamenu .em.em-list-widget .em-item-name a {
	font-size: clamp(13px, 9.33px + 0.333vw, 15px);           /* 13 → 15 */
	line-height: 1.25;
}
.lpo-megamenu .em.em-list-widget .em-item-meta .em-item-meta-line {
	font-size: clamp(12.5px, 9.75px + 0.25vw, 14px);          /* 12.5 → 14 */
	line-height: 1.4;
	margin-bottom: 4px;
	grid-template-columns: 30px 1fr;
}
/* Pastille de date : EM la fige en 30 / 16 px `!important` (feuille widget). */
.lpo-megamenu .em.em-list-widget .em-item .em-item-image.has-placeholder .em-item-image-placeholder {
	max-width: clamp(56px, 30.33px + 2.333vw, 70px);         /* 56 → 70 */
}
.lpo-megamenu .em .em-item .em-item-image-placeholder div.date {
	min-width: 0;
}
.lpo-megamenu .em .em-item .em-item-image-placeholder div.date span.day {
	font-size: clamp(24px, 13px + 1vw, 30px) !important;      /* 24 → 30 */
	line-height: 1 !important;
}
.lpo-megamenu .em .em-item .em-item-image-placeholder div.date span.month {
	font-size: clamp(12px, 4.67px + 0.667vw, 16px) !important; /* 12 → 16 */
	line-height: 1 !important;
}

/* Colonne 2 — cases des mois (13 px fixe → 11 → 13) */
.lpo-megamenu__mois .wp-block-navigation-item__content {
	font-size: clamp(11px, 7.33px + 0.333vw, 13px);
	padding: 4px 2px;
}

/* Colonnes 3 — listes (secteurs, types de RDV) : 12.5 → 13.5 */
.lpo-megamenu .is-style-lpo-liste,
.lpo-megamenu ul.lpo-megamenu__secteurs {
	font-size: clamp(12.5px, 10.67px + 0.167vw, 13.5px);
	line-height: 1.45;
}

/* Titres de colonne (pills) : preset `normal` a `!important` → 13 → 16 */
.lpo-megamenu h4.wp-block-heading {
	font-size: clamp(13px, 7.5px + 0.5vw, 16px) !important;
}

/* Boutons de pied : preset `small` a `!important` → 12.5 → 14 ; et le
   `white-space: nowrap` que le header impose a tous ses boutons fuit ici — un
   libelle long (« Tous les types de RDV → ») sortait de sa pill au lieu de
   passer a la ligne. */
.lpo-megamenu .lpo-megamenu__cta .wp-block-button__link {
	font-size: clamp(12.5px, 9.75px + 0.25vw, 14px) !important;
	white-space: normal;
	padding-left: clamp(10px, 0.5px + 0.833vw + 1px, 16px);
	padding-right: clamp(10px, 0.5px + 0.833vw + 1px, 16px);
}

/* Colonne 4 — legende de l'affiche : 12 → 13 */
.lpo-megamenu__affiche figcaption {
	font-size: clamp(12px, 10.17px + 0.167vw, 13px);
}

/* Colonne 1 — largeur de l'image / pastille de date : 80 px au lieu de 120 (R11).
   Les 120 px sont un style INLINE code en dur dans le gabarit d'item du bloc EM
   (templates/formats/*list_item_format.php, pas un reglage du bloc) : seul un
   `!important` peut passer devant un style inline. L'alternative — surcharger tout
   le gabarit dans le theme enfant pour un seul chiffre — ne vaut pas le cout. */
.lpo-megamenu .em.em-list-widget .em-item .em-item-image {
	max-width: 80px !important;
}
/* EM ajoute 10 px de padding a droite de l'image (widget) : inutile ici, la
   bordure coloree de l'item fait deja l'ecart. */
.lpo-megamenu .em.em-list-widget .em-item .em-item-image img {
	padding: 0;
}

/* Légende de l'image (figcaption, quand le média en porte une) : masquée dans la colonne
   « Prochains rendez-vous », la vignette de 120 px n'a pas la place de la porter (21/09/2026). */
.lpo-megamenu .em.em-list-widget .em-item-image figure {
	margin: 0;
}
.lpo-megamenu .em.em-list-widget .em-item-image figcaption {
	display: none;
}

/* Colonne 1 — meta des events sur UNE ligne, sans pictos (R12) : « 5 Sep 26 · LA
   ROCHE SUR YON ». EM rend chaque meta en grille « picto | texte » sur sa propre
   ligne ; on passe le conteneur en flex, chaque ligne en bloc simple, les pictos
   masques, un point median entre les deux. Vient apres R10 (meme selecteur de
   ligne) et le remplace. */
.lpo-megamenu .em.em-list-widget .em-item-meta {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	column-gap: 8px;
	row-gap: 0;
}
.lpo-megamenu .em.em-list-widget .em-item-meta .em-item-meta-line {
	display: block;
	grid-template-columns: none;
	margin: 0;
}
.lpo-megamenu .em.em-list-widget .em-item-meta .em-item-meta-line .em-icon {
	display: none;
}
.lpo-megamenu .em.em-list-widget .em-item-meta .em-item-meta-line + .em-item-meta-line::before {
	content: "·";
	margin-right: 8px;
	color: var(--wp--preset--color--lpo-mute);
}
/* L'image d'un event est enveloppee dans un <figure> par notre hook de legende
   (lpo-events-front) : la marge basse de 25 px venait de pixelbones (EM) en
   `!important` — corrigee a la source dans em-custom-styles.css (mu-plugin), pour
   toutes les listes EM. Ici on ne garde que la boite de ligne de l'<img> inline. */
.lpo-megamenu .em.em-list-widget .em-item-image img {
	display: block;
}

/* === R45 (18/09/2026) — MEGA MENU « Nos RDV » : prochains rendez-vous traités comme les
 * autres entrées du panneau (demande user). Au survol, TOUTE la ligne prend le fond gris chaud
 * arrondi des listes (`lpo-warm-50`, rayon 8px) au lieu d'un simple titre souligné ; la ligne
 * entière devient cliquable (lien du titre étiré par `::after`) ; le titre n'est plus souligné.
 * Essai « blanc opaque » : poser la classe `lpo-rdv-blanc` sur la Colonne (Avancé › Classes CSS
 * additionnelles) → fond blanc plein + ombre légère à la place du gris.
 * Variante fond permanent (au repos aussi) : ajouter `lpo-rdv-permanent`.
 * -------------------------------------------------------------------------- */
.lpo-megamenu .em.em-list-widget {
	--lpo-rdv-fond: var(--wp--preset--color--lpo-warm-50);
	--lpo-rdv-ombre: none;
	gap: 2px;
}
.lpo-rdv-blanc .em.em-list-widget,
.lpo-megamenu.lpo-rdv-blanc .em.em-list-widget {
	--lpo-rdv-fond: #ffffff;
	--lpo-rdv-ombre: 0 6px 16px -8px rgba(25, 25, 25, 0.35);
}
.lpo-megamenu .em.em-list-widget .em-item {
	position: relative;
	padding: 6px 8px;
	border-radius: 8px;
	transition: background-color 0.15s ease, box-shadow 0.15s ease;
}
.lpo-megamenu .em.em-list-widget .em-item:hover,
.lpo-megamenu .em.em-list-widget .em-item:focus-within,
.lpo-rdv-permanent .em.em-list-widget .em-item {
	background-color: var(--lpo-rdv-fond);
	box-shadow: var(--lpo-rdv-ombre);
}
.lpo-rdv-permanent .em.em-list-widget {
	gap: 6px;
}
/* Toute la ligne est cliquable : le lien du titre s'étire sur l'item. */
.lpo-megamenu .em.em-list-widget .em-item-name a::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: 8px;
}
/* Titre : plus de soulignement, au repos comme au survol ; le bleu de survol reste. */
.lpo-megamenu .em.em-list-widget .em-item-name a,
.lpo-megamenu .em.em-list-widget .em-item-name a:hover,
.lpo-megamenu .em.em-list-widget .em-item-name a:focus-visible {
	text-decoration: none !important;
}
.lpo-megamenu .em.em-list-widget .em-item:hover .em-item-name a {
	color: var(--wp--preset--color--lpo-blue) !important;
}
.lpo-megamenu .em.em-list-widget .em-item-name a:focus-visible {
	outline: none;
}
.lpo-megamenu .em.em-list-widget .em-item:focus-within {
	outline: 2px solid var(--wp--preset--color--lpo-blue);
	outline-offset: 1px;
}


/* Page « Nos sorties » (318, page des événements EM) en grande largeur (R18).
   EM enveloppe le contenu de sa page dans un <div id="em-wrapper">, enfant direct
   du conteneur contraint : la regle core `.is-layout-constrained > :where(…)` le
   bride a la largeur de contenu (760 px), et le Groupe etendu pose dans la page ne
   peut pas depasser ce parent. On leve la contrainte sur ce seul wrapper, sur cette
   seule page : ses enfants (contenu de la page + liste EM) prennent la wide-size. */
.page-id-318 .entry-content.is-layout-constrained > #em-wrapper {
	max-width: none;
}

/* Entree `lpo-menu-accent` a l'interieur d'une liste du mega menu (R22) : le fond
   Bleu grand large (R14) s'applique, mais le survol de la liste (texte bleu LPO,
   (0,5,2)) passait devant celui de l'accent (texte blanc) — bleu sur bleu. */
.lpo-megamenu .is-style-lpo-liste li.wp-block-navigation-item.lpo-menu-accent:hover > a.wp-block-navigation-item__content,
.lpo-megamenu .is-style-lpo-liste li.wp-block-navigation-item.lpo-menu-accent:focus-within > a.wp-block-navigation-item__content {
	background-color: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-paper);
}

/* === Classe utilitaire `lpo-liens-nus` (R27, 03/09) ===========================
 * A poser sur un bloc (panneau Avance > classes CSS additionnelles) dont les liens
 * doivent prendre la couleur du texte, sans soulignement — ex. les cartes du hero
 * de la home, ou le soulignement etait neutralise par un style INLINE sur chaque
 * <a>, invisible et non modifiable depuis l'editeur. Le survol re-souligne, pour
 * garder l'affordance. */
.lpo-liens-nus a:where(:not(.wp-element-button)) {
	color: inherit;
	text-decoration: none;
}
.lpo-liens-nus a:where(:not(.wp-element-button)):hover,
.lpo-liens-nus a:where(:not(.wp-element-button)):focus-visible {
	text-decoration: underline;
	text-underline-offset: 0.15em;
}

/* Mon espace › infos bénévole (R29) : le fieldset « Carte grise du véhicule »
   (injecte par le theme via le crochet du plugin, juste apres le fieldset
   « Puissance fiscale ») se place EN COLONNE a cote de lui. Le formulaire devient
   une grille 2 colonnes : tout occupe la largeur, sauf ces deux fieldsets qui se
   partagent une ligne (le 1er en colonne 1, le 2e en colonne 2). */
.mespace-form--infos {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	column-gap: var(--wp--preset--spacing--medium);
	align-items: start;
}
.mespace-form--infos > * {
	grid-column: 1 / -1;
	min-width: 0;
}
.mespace-form--infos > fieldset.mespace-field {
	grid-column: 1;
}
.mespace-form--infos > fieldset.mespace-fieldset--doc {
	grid-column: 2;
}
.mespace-form--infos .mespace-hint--doc {
	display: block;
	margin: 0 0 8px;
	color: var(--wp--preset--color--lpo-warm-700);
}
.mespace-form--infos .mespace-actions--doc {
	margin: 0;
}
.mespace-form--infos .mespace-actions--doc .wp-element-button {
	font-size: var(--wp--preset--font-size--small);
	padding: 8px 18px;
}
@media (max-width: 599.98px) {
	.mespace-form--infos > fieldset.mespace-field,
	.mespace-form--infos > fieldset.mespace-fieldset--doc {
		grid-column: 1 / -1;
	}
}

/* === MENU MOBILE EN DRILL-DOWN (R30, 03/09) ==================================
 * Script : assets/js/menu-mobile.js — il pose `.lpo-drill` sur le conteneur de
 * l'overlay sous 1100 px et `.lpo-drill-open` sur un <li> dont le panneau est
 * ouvert. Sans lui, rien ici ne s'applique : l'overlay natif reste à plat.
 *
 * Principe : chaque sous-menu (le <ul> d'un item à enfants) devient un panneau
 * absolu qui couvre son parent et glisse depuis la droite. Les panneaux sont
 * IMBRIQUÉS dans le DOM (niveau 3 dans le niveau 2) : chacun se positionne par
 * rapport au panneau qui le contient, d'où `position: static` forcé sur les <li>
 * (core les positionne) pour que `inset: 0` vise bien le panneau et non l'item.
 *
 * Spécificité : (0,7,0), pour passer devant la règle d'« aplatissement » de
 * l'overlay plus haut (0,6,0) qui remet les sous-menus en `position: static`.
 * -------------------------------------------------------------------------- */
@media (max-width: 1099.98px) {
	/* Chaîne de hauteurs : l'overlay (fixed, hauteur définie) > .responsive-close
	   (élément flex à hauteur AUTO, d'où le premier échec : les 100 % en dessous
	   valaient la hauteur de la liste) > dialog > contenu > liste racine. */
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation__responsive-close,
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation__responsive-dialog,
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation__responsive-container-content {
		height: 100%;
		box-sizing: border-box;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation__responsive-container-content {
		overflow: hidden; /* les panneaux glissent dedans, jamais hors du cadre */
	}
	/* Niveau 1 : la liste racine est le repère des panneaux (ils démarrent SOUS la
	   croix de fermeture, pas par-dessus) et occupe toute la hauteur restante. */
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation__responsive-container-content > .wp-block-navigation__container {
		position: relative;
		flex: 1 1 auto;
		min-height: 0;
		height: auto;
		overflow-y: auto;
		overflow-x: hidden;
	}
	/* Core positionne les <li> : `static` pour que `inset: 0` d'un panneau vise le
	   panneau parent (ou la liste racine) et non l'item. */
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation-item {
		position: static;
	}
	/* Une entrée à enfants : toute la ligne descend d'un niveau ; chevron à
	   droite, chevron natif masqué (le script neutralise son clic). */
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation-item.has-child > .wp-block-navigation-item__content {
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 100%;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation-item.has-child > .wp-block-navigation-item__content::after {
		content: "›";
		font-size: 1.4em;
		line-height: 1;
		opacity: 0.6;
		margin-left: 12px;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation-item.has-child > .wp-block-navigation-submenu__toggle {
		display: none;
	}
	/* Le panneau : hors champ à droite, invisible et inerte tant qu'il est fermé. */
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container {
		display: block;
		position: absolute;
		inset: 0;
		z-index: 2;
		margin: 0;
		padding: 0 0 48px;
		/* ⚠️ `!important` NECESSAIRE : core force `background-color: inherit !important`
		   sur les sous-menus de l'overlay (selecteur a 4 classes repetees, (0,6,0)) ;
		   sans lui le panneau est transparent et laisse voir le niveau du dessous. */
		background-color: var(--wp--preset--color--lpo-paper) !important;
		overflow-y: auto;
		overflow-x: hidden;
		transform: translateX(100%);
		visibility: hidden;
		transition: transform 0.3s ease, visibility 0s linear 0.3s;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation-item.has-child.lpo-drill-open > .wp-block-navigation__submenu-container {
		transform: none;
		visibility: visible;
		transition: transform 0.3s ease;
	}
	/* Tête de panneau : « ‹ Retour » puis le titre du parent. */
	.lpo-drill__tete {
		display: flex;
		flex-direction: column;
		gap: 4px;
		margin: 0 0 12px;
		padding: 0 0 12px;
		border-bottom: 1px solid var(--wp--preset--color--lpo-warm-100);
	}
	.lpo-drill__retour {
		align-self: flex-start;
		padding: 6px 0;
		border: 0;
		background: none;
		color: var(--wp--preset--color--lpo-blue);
		font: inherit;
		font-weight: 700;
		cursor: pointer;
	}
	.lpo-drill__retour:focus-visible {
		outline: 2px solid var(--wp--preset--color--lpo-blue);
		outline-offset: 2px;
		border-radius: 4px;
	}
	.lpo-drill__titre {
		font-family: var(--wp--preset--font-family--lpo);
		font-weight: 900;
		font-size: 1.35em;
		color: var(--wp--preset--color--lpo-ink);
		text-decoration: none;
	}
	a.lpo-drill__titre::after {
		content: " →";
		font-weight: 400;
		opacity: 0.6;
	}
	@media (prefers-reduced-motion: reduce) {
		.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation-item.has-child > .wp-block-navigation__submenu-container,
		.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .wp-block-navigation-item.has-child.lpo-drill-open > .wp-block-navigation__submenu-container {
			transition: none;
		}
	}
}

/* --- Overlay mobile : logo en tête + texte à 16 px (R31, 03/09) -------------- */
@media (max-width: 1099.98px) {
	/* Le nav porte un clamp 11,5–13,5 px pensé pour la barre desktop : dans
	   l'overlay on remet une taille tactile. Posé sur le conteneur, pas sur le
	   nav, pour ne pas toucher la barre. */
	.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open {
		font-size: 16px;
	}
	/* ⚠️ `!important` NECESSAIRE : WordPress recopie le style INLINE du bloc
	   Navigation (`font-size: clamp(...)`) sur le <ul> racine de l'overlay, et un
	   style inline ne cede qu'a un !important. Les sous-menus (0.875em chez core)
	   reprennent la meme taille. */
	.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,
	.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container {
		font-size: 16px !important;
	}
	/* Logo cloné par menu-mobile.js depuis la 1re image du pied de page. */
	.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .lpo-mobile-logo {
		display: block;
		flex: 0 0 auto;
		width: 150px;
		margin: 0 0 28px;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.is-menu-open .lpo-mobile-logo img {
		display: block;
		width: 100%;
		height: auto;
	}
}

/* --- Drill-down : mega menus (R32, 03/09) -------------------------------------
 * menu-mobile.js construit, sous chaque entrée de mega menu, un niveau 2
 * (`ul.lpo-drill__mega` : les sections du panneau) et un niveau 3 par section
 * (`div.lpo-drill__contenu` : clone du bloc de la section, dans `.lpo-megamenu`
 * pour garder l'habillage). Ces panneaux construits suivent EXACTEMENT la même
 * mécanique que les sous-menus natifs ci-dessus. */
@media (max-width: 1099.98px) {
	/* Le panneau Ollie natif n'a plus de raison d'apparaître : on le remplace.
	   (Il reste dans le DOM pour le desktop, et pour les mega menus dont on n'a
	   pas pu construire de sections, qui gardent la mécanique Ollie.) */
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__hote-mega > .wp-block-ollie-mega-menu__menu-container {
		display: none !important; /* Ollie pose son affichage en inline/!important */
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__hote-mega > .wp-block-ollie-mega-menu__toggle {
		width: 100%;
		display: flex;
		align-items: center;
		justify-content: space-between;
	}
	/* Les panneaux construits : mêmes règles que les sous-menus natifs. */
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__panneau {
		display: block;
		position: absolute;
		inset: 0;
		z-index: 2;
		margin: 0;
		padding: 0 0 48px;
		list-style: none;
		background-color: var(--wp--preset--color--lpo-paper) !important;
		overflow-y: auto;
		overflow-x: hidden;
		transform: translateX(100%);
		visibility: hidden;
		transition: transform 0.3s ease, visibility 0s linear 0.3s;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill-open > .lpo-drill__panneau {
		transform: none;
		visibility: visible;
		transition: transform 0.3s ease;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__item {
		position: static;
		margin: 0;
	}
	/* Entrée de section (niveau 2) : même dessin qu'une entrée à enfants. */
	.lpo-drill__section {
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 100%;
		padding: 10px 0;
		border: 0;
		background: none;
		color: inherit;
		font: inherit;
		font-weight: 600;
		text-align: left;
		cursor: pointer;
	}
	.lpo-drill__section::after {
		content: "›";
		font-size: 1.4em;
		line-height: 1;
		opacity: 0.6;
		margin-left: 12px;
	}
	.lpo-drill__section:focus-visible {
		outline: 2px solid var(--wp--preset--color--lpo-blue);
		outline-offset: 2px;
		border-radius: 4px;
	}
	/* Niveau 3 : le contenu d'une section, avec de l'air tout autour. */
	.lpo-drill__contenu .lpo-megamenu--mobile {
		padding: 4px 4px 0;
		font-size: 15px;
	}
	.lpo-drill__contenu .lpo-megamenu--mobile > * {
		margin-top: 0;
	}
	.lpo-drill__contenu .lpo-megamenu--mobile .lpo-megamenu__cta {
		margin-top: var(--wp--preset--spacing--medium);
		padding-top: 0;
	}
	/* Grille des mois : dans l'overlay, core impose `display:flex` en colonne sur
	   tous les <ul> du menu (0,4,0) — plus fort que la regle de grille du mega menu
	   (0,2,1). On la repose ici a (0,7,1). */
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__contenu .lpo-megamenu__mois ul.wp-block-navigation__container {
		display: grid;
		grid-template-columns: repeat(3, minmax(0, 1fr));
		gap: 8px;
		padding: 0;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__contenu .lpo-megamenu__mois .wp-block-navigation-item__content {
		font-size: 14px;
	}
	.lpo-drill__contenu .lpo-megamenu--mobile .em.em-list-widget .em-item-name a {
		font-size: 15px;
	}
	@media (prefers-reduced-motion: reduce) {
		.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__panneau,
		.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill-open > .lpo-drill__panneau {
			transition: none;
		}
	}
}

/* --- Header mobile : logo (R33, 03/09) ------------------------------------------
 * Tout le responsive de la home et du header est regle DANS LES BLOCS (styles par
 * viewport de WP 7.1, breakpoints du theme.json : mobile 480 / tablette 1099).
 * Seule exception : la largeur du bloc Logo du site est un attribut, pas un style,
 * donc sans valeur par viewport. Sous 480 px on resserre le plancher du clamp
 * (110 px) pour que la pill tienne avec le hamburger et le bouton Mon espace. */
@media (max-width: 480px) {
	.lpo-header-pill .wp-block-site-logo img {
		width: 92px !important; /* meme !important que la regle desktop qu'elle remplace */
	}
}

/* Bouton « Mon espace » en icone (R35) : visible sur mobile seulement (visibilite par
   appareil du bloc). Le SVG est en ligne dans le bouton : on le pose en bloc pour un
   rond net, sans espace de ligne de base sous l'icone. */
.lpo-btn-icone .wp-block-button__link { display: inline-flex; }
.lpo-btn-icone .wp-block-button__link svg { display: block; }
/* R94 (28/09/2026) — « Mon espace (icône mobile) » sans SVG dans le texte du bloc : l'éditeur du site vide un tel
   bloc au réenregistrement et WP 6.7+ ne rend rien pour un bouton vide (la loupe a disparu ainsi). Le bloc porte le
   texte « Mon espace » (nom accessible) en taille 0, l'icône est un masque CSS en currentColor. */
.lpo-btn-mon-espace .wp-block-button__link { font-size: 0; line-height: 1; }
.lpo-btn-mon-espace .wp-block-button__link::before {
	content: ""; display: block; width: 18px; height: 18px; background-color: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8' r='4'/%3E%3Cpath d='M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8' r='4'/%3E%3Cpath d='M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8'/%3E%3C/svg%3E") center / contain no-repeat;
}
.lpo-btn-mon-espace .wp-block-button__link:has(svg)::before { display: none; }


/* ==========================================================================
   STYLES DE TITRE — pills (R37, 04/09/2026)
   Trois styles de bloc pour core/heading (functions.php) : « Pill orange »,
   « Pill bleue », « Contour gris ». Le titre garde sa taille et sa graisse ;
   la pill épouse le texte (`width: fit-content`) et suit l'alignement du bloc
   (marges auto quand le titre est centré ou à droite). Padding en `em` : il
   suit la taille du titre. Une couleur de texte posée dans l'éditeur (classe
   de palette, !important) gagne sur la couleur du style — voulu.
   ========================================================================== */
.wp-block-heading.is-style-lpo-pill-orange,
.wp-block-heading.is-style-lpo-pill-bleue,
.wp-block-heading.is-style-lpo-contour-gris {
	display: block;
	width: fit-content;
	max-width: 100%;
	box-sizing: border-box;
	padding: 0.3em 0.9em;
	border-radius: 999px;
	line-height: 1.2;
}
.wp-block-heading.is-style-lpo-pill-orange {
	background-color: var(--wp--preset--color--lpo-orange);
	color: var(--wp--preset--color--lpo-paper);
}
.wp-block-heading.is-style-lpo-pill-bleue {
	background-color: var(--wp--preset--color--lpo-blue);
	color: var(--wp--preset--color--lpo-paper);
}
.wp-block-heading.is-style-lpo-contour-gris {
	border: 2px solid var(--wp--preset--color--lpo-warm-300);
	color: var(--wp--preset--color--lpo-ink);
}
/* Alignement du bloc → position de la pill */
.wp-block-heading.has-text-align-center.is-style-lpo-pill-orange,
.wp-block-heading.has-text-align-center.is-style-lpo-pill-bleue,
.wp-block-heading.has-text-align-center.is-style-lpo-contour-gris {
	margin-left: auto;
	margin-right: auto;
}
.wp-block-heading.has-text-align-right.is-style-lpo-pill-orange,
.wp-block-heading.has-text-align-right.is-style-lpo-pill-bleue,
.wp-block-heading.has-text-align-right.is-style-lpo-contour-gris {
	margin-left: auto;
}


/* ==========================================================================
   FIL D'ARIANE (R38, 04/09/2026) — bloc natif core/breadcrumbs, classe `lpo-fil`,
   placé au-dessus du titre dans les modèles page / page-sidebar / page-sans-bandeau
   / page-mois. Couleur et taille = attributs du bloc (blanc sur bandeau, gris
   mouette sur filet, preset small). Le bloc n'a pas de réglage d'alignement du
   texte : on centre la liste ici. Séparateur « › » via l'attribut du bloc.
   ========================================================================== */
/* R42 (18/09/2026) : fil SEOPress PRO — liste en ligne, centrée ; le séparateur vient des réglages SEOPress. */
.lpo-fil ol {
	text-align: center;
	line-height: 1.5;
}
.lpo-fil .breadcrumb-item.active {
	font-weight: 600;
}
.lpo-fil a {
	color: inherit;
	text-decoration: none;
}
.lpo-fil a:hover,
.lpo-fil a:focus-visible {
	text-decoration: underline;
	text-underline-offset: 3px;
}
.lpo-fil [aria-current="page"] {
	font-weight: 600;
}
/* Ceinture et bretelles : si la page affiche déjà un fil (Events Manager `.breadcrumb`,
   W2DC `.w2dc-breadcrumbs` — vues de catégorie rendues dans la page annuaire), on
   efface le nôtre. functions.php exclut déjà les fiches event/location/w2dc_listing. */
/* R42 : la règle sur `.breadcrumb` est retirée, c'est la classe de la liste SEOPress elle-même. */
body:has(.w2dc-breadcrumbs) .lpo-fil {
	display: none;
}
/* Sur mobile, le fil peut être long (Accueil › La LPO Vendée › Équipe) : on le laisse
   passer sur deux lignes, centré, sans réduire davantage. */

/* --- Séparateur dans un sous-menu déroulant (R39) ----------------------------
   Classe utilitaire `lpo-menu-separe` sur une entrée de navigation : un filet
   au-dessus de l'entrée, pour isoler un lien « à part » (ex. « Aperçu de nos
   réseaux sociaux » après la liste des catégories d'actus). Vaut aussi dans le
   panneau du menu mobile (drill-down). */
.wp-block-navigation .wp-block-navigation__submenu-container > .wp-block-navigation-item.lpo-menu-separe {
	border-top: 1px solid var(--wp--preset--color--lpo-warm-100);
	margin-top: 6px;
	padding-top: 6px;
}


/* ==========================================================================
   COULEUR DES ENTRÉES DE MENU (R40, 04/09/2026)
   Styles de bloc `is-style-lpo-texte-orange|bleu|gris` sur Lien de navigation et
   Sous-menu (functions.php). La couleur tient au survol (le fond crème du survol
   des déroulants reste). Spécificité montée pour battre : les items de déroulant
   (0,4,0), les listes du mega menu (0,4,3 et :focus-within 0,5,3) et l'overlay
   mobile. Variable `--lpo-texte` posée sur le <li>, une seule règle de couleur.
   ========================================================================== */
.wp-block-navigation .wp-block-navigation-item.is-style-lpo-texte-orange { --lpo-texte: var(--wp--preset--color--lpo-orange); }
.wp-block-navigation .wp-block-navigation-item.is-style-lpo-texte-bleu   { --lpo-texte: var(--wp--preset--color--lpo-blue); }
.wp-block-navigation .wp-block-navigation-item.is-style-lpo-texte-gris   { --lpo-texte: var(--wp--preset--color--lpo-gris-mouette); }

.wp-block-navigation .wp-block-navigation-item[class*="is-style-lpo-texte-"] > .wp-block-navigation-item__content,
.wp-block-navigation .wp-block-navigation-item[class*="is-style-lpo-texte-"] > .wp-block-navigation-item__content:hover,
.wp-block-navigation .wp-block-navigation-item[class*="is-style-lpo-texte-"] > .wp-block-navigation-item__content:focus,
.wp-block-navigation .wp-block-navigation-item[class*="is-style-lpo-texte-"] > .wp-block-navigation-submenu__toggle,
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item[class*="is-style-lpo-texte-"] > .wp-block-navigation-item__content,
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item[class*="is-style-lpo-texte-"] > .wp-block-navigation-item__content:hover,
.wp-block-navigation .wp-block-navigation-item.has-child .wp-block-navigation__submenu-container .wp-block-navigation-item[class*="is-style-lpo-texte-"] > .wp-block-navigation-item__content:focus,
.lpo-megamenu ul.is-style-lpo-liste li.wp-block-navigation-item[class*="is-style-lpo-texte-"] > a.wp-block-navigation-item__content,
.lpo-megamenu ul.is-style-lpo-liste li.wp-block-navigation-item[class*="is-style-lpo-texte-"]:hover > a.wp-block-navigation-item__content,
.lpo-megamenu ul.is-style-lpo-liste li.wp-block-navigation-item[class*="is-style-lpo-texte-"]:focus-within > a.wp-block-navigation-item__content {
	color: var(--lpo-texte);
}


/* ==========================================================================
   MEGA MENU « Nos RDV » — tuiles des mois en images (R41, essai 04/09/2026)
   Grille `lpo-mois-tuiles` (Groupe en grille 3 colonnes) de 12 Bannières : visuel
   du mois (médiathèque 380105…380117) + libellé « Mois 2026 » en bas à gauche.
   Toute la tuile est cliquable (lien couvrant posé par effets.js). Remplace la
   nav 414921 aux cases grises — celle-ci existe toujours, retour arrière = restaurer
   le template part 413965 depuis la sauvegarde.
   ========================================================================== */
.lpo-mois-tuiles .wp-block-cover {
	overflow: hidden;
	min-height: 0;
	transition: transform 0.25s cubic-bezier(0.2, 0.7, 0.2, 1), box-shadow 0.25s ease;
}
.lpo-mois-tuiles .wp-block-cover img.wp-block-cover__image-background {
	transition: transform 0.5s cubic-bezier(0.2, 0.7, 0.2, 1);
}
.lpo-mois-tuiles .wp-block-cover .wp-block-cover__background {
	transition: opacity 0.25s ease;
}
.lpo-mois-tuiles .wp-block-cover p {
	margin: 0;
	text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
}
.lpo-mois-tuiles .wp-block-cover a {
	text-decoration: none;
}
.lpo-mois-tuiles .wp-block-cover:hover,
.lpo-mois-tuiles .wp-block-cover:focus-within {
	transform: translateY(-2px);
	box-shadow: 0 10px 20px -10px rgba(25, 25, 25, 0.5);
}
.lpo-mois-tuiles .wp-block-cover:hover img.wp-block-cover__image-background,
.lpo-mois-tuiles .wp-block-cover:focus-within img.wp-block-cover__image-background {
	transform: scale(1.06);
}
/* R44 (18/09/2026, demande user) : survol franchement plus lumineux. Le voile #191919 posé dans
   l'éditeur (40 % au repos) tombe à 0 % au survol et au focus clavier — avant : 25 %, à peine
   visible. L'image gagne un peu de luminosité, et l'ombre du libellé est renforcée pour qu'il
   reste lisible sans voile. Le voile au repos se règle dans l'éditeur (Bannière › Superposition). */
/* Sélecteur volontairement lourd : le cœur pose le voile avec
   `.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40` (0,4,0),
   même poids que notre ancienne règle → le résultat dépendait de l’ordre des feuilles. */
.lpo-mois-tuiles .wp-block-cover:hover .wp-block-cover__background.has-background-dim,
.lpo-mois-tuiles .wp-block-cover:focus-within .wp-block-cover__background.has-background-dim {
	opacity: 0;
}
.lpo-mois-tuiles .wp-block-cover img.wp-block-cover__image-background {
	transition: transform 0.5s cubic-bezier(0.2, 0.7, 0.2, 1), filter 0.25s ease;
}
.lpo-mois-tuiles .wp-block-cover:hover img.wp-block-cover__image-background,
.lpo-mois-tuiles .wp-block-cover:focus-within img.wp-block-cover__image-background {
	filter: brightness(1.08) saturate(1.06);
}
.lpo-mois-tuiles .wp-block-cover p {
	transition: text-shadow 0.25s ease;
}
.lpo-mois-tuiles .wp-block-cover:hover p,
.lpo-mois-tuiles .wp-block-cover:focus-within p {
	text-shadow: 0 1px 3px rgba(0, 0, 0, 0.75), 0 0 10px rgba(0, 0, 0, 0.45);
}
@media (prefers-reduced-motion: reduce) {
	.lpo-mois-tuiles .wp-block-cover,
	.lpo-mois-tuiles .wp-block-cover img.wp-block-cover__image-background { transition: none; transform: none; }
	.lpo-mois-tuiles .wp-block-cover p { transition: none; }
}


/* === R63 (21/09/2026) — PIED DE PAGE SUR UN ÉCRAN 14" (1512 px) À 100 % ==================
 * Demande user : obtenir à 100 % le rendu qu il avait à 90 % — logo et menu sur UNE ligne,
 * icônes sociales sur une ligne et à l échelle des pictos de contact (48 px).
 * Deux réglages sont faits DANS LE BLOC (part « footer », modifiables dans l éditeur) :
 *   - menu : espacement des blocs 32 → 16 px (217 logo + 30 + 998 menu = 1245 ≤ 1285 de conteneur) ;
 *   - icônes : espacement « small » → 8 px (4 × 48 + 3 × 8 = 216 ≤ 225 de colonne).
 * Seule la TAILLE des icônes vit ici : le bloc ne propose que 24 px (normal) ou 36 px (grand),
 * rien entre les deux. 32 px de glyphe + 2 × 8 px de marge interne = 48 px.
 * En dessous de ~1 465 px de fenêtre, le menu repasse sous le logo : c est le repli voulu.
 * -------------------------------------------------------------------------- */
footer.wp-block-template-part .wp-block-social-links.has-large-icon-size {
	font-size: 32px;
}


/* === R76 (22/09/2026) — MON ESPACE › « MES ÉVÉNEMENTS » : habillage de la liste NATIVE d'Events Manager ==
 * L'onglet (mon-espace/evenements.php) affiche `em_events_admin()` tel quel : aucun gabarit surchargé,
 * on n'habille que sa sortie. Ce que fait ce bloc : bouton « Ajouter » en bouton principal (bleu LPO) à
 * droite des onglets « À venir / passés », onglets et recherche en pastilles, tableau aéré (en-têtes
 * crème, survol), « Supprimer » discret en rouge, « + » de duplication rendu lisible (« + Dupliquer »).
 *
 * Les `!important` sont voulus et cantonnés à ce bloc : la feuille « pixelbones » d'Events Manager
 * impose ses boutons, champs et tableaux avec des sélecteurs très lourds et ses propres `!important`.
 * Tout est préfixé par `.mespace-evenements` : aucune fuite vers les autres écrans d'Events Manager.
 * -------------------------------------------------------------------------- */
.mespace-evenements .em.pixelbones.em-events-admin form {
	display: grid;
	grid-template-columns: 1fr auto;
	align-items: center;
	gap: 12px 16px;
}
.mespace-evenements .em.pixelbones.em-events-admin form > * {
	grid-column: 1 / -1;
	margin: 0 !important;
}

/* Onglets « À venir / Évènements passés » : pastilles (le séparateur « | » est masqué par font-size: 0). */
.mespace-evenements .em.pixelbones.em-events-admin .subsubsub {
	grid-column: 1;
	grid-row: 1;
	float: none !important;
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	font-size: 0 !important;
}
.mespace-evenements .em.pixelbones.em-events-admin .subsubsub a {
	padding: 6px 14px !important;
	border-radius: 999px !important;
	background: var(--wp--preset--color--lpo-warm-50, #f4f1ea) !important;
	color: var(--wp--preset--color--lpo-ink, #191919) !important;
	font-size: 14px !important;
	font-weight: 600 !important;
	text-decoration: none !important;
}
.mespace-evenements .em.pixelbones.em-events-admin .subsubsub a.current {
	background: var(--wp--preset--color--lpo-ink, #191919) !important;
	color: #fff !important;
}
.mespace-evenements .em.pixelbones.em-events-admin .subsubsub a .count {
	color: inherit !important;
	font-weight: 400;
}

/* « Ajouter » : l'action principale de l'écran. */
.mespace-evenements .em.pixelbones.em-events-admin a.em-button.add-new-h2 {
	grid-column: 2;
	grid-row: 1;
	height: auto !important;
	margin: 0 !important;
	padding: 10px 22px !important;
	border: 0 !important;
	border-radius: 999px !important;
	background: var(--wp--preset--color--lpo-blue, #0087cd) !important;
	color: #fff !important;
	font-size: 14px !important;
	font-weight: 600 !important;
	line-height: 1.2 !important;
	letter-spacing: 0 !important;
	text-transform: none !important;
}
.mespace-evenements .em.pixelbones.em-events-admin a.em-button.add-new-h2:hover,
.mespace-evenements .em.pixelbones.em-events-admin a.em-button.add-new-h2:focus-visible {
	filter: brightness(0.92);
}

/* Recherche : champ + bouton sur une ligne quand la place le permet. */
.mespace-evenements .em.pixelbones.em-events-admin .search-box {
	float: none !important;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
	width: 100%;
}
.mespace-evenements .em.pixelbones.em-events-admin .search-box input[type="text"] {
	flex: 1 1 140px !important;
	width: auto !important;
	max-width: 360px;
	height: 40px !important;
	margin: 0 !important;
	padding: 6px 16px !important;
	border-radius: 999px !important;
}
.mespace-evenements .em.pixelbones.em-events-admin .search-box input[type="submit"] {
	flex: 0 0 auto;
	width: auto !important;
	height: 40px !important;
	margin: 0 !important;
	padding: 0 18px !important;
	border: 1px solid var(--wp--preset--color--lpo-warm-100, #d9d3c7) !important;
	border-radius: 999px !important;
	background: transparent !important;
	color: var(--wp--preset--color--lpo-ink, #191919) !important;
	font-size: 13px !important;
	font-weight: 600 !important;
	line-height: 1 !important;
	letter-spacing: 0 !important;
	text-transform: none !important;
}

/* Barres de pagination vides d'Events Manager : masquées (elles ne contiennent que des <br>). */
.mespace-evenements .em.pixelbones.em-events-admin .tablenav {
	display: none !important;
}

/* Tableau. */
.mespace-evenements .em.pixelbones.em-events-admin table.events-table {
	width: 100%;
	margin: 8px 0 0 !important;
	border-collapse: collapse;
}
.mespace-evenements .em.pixelbones.em-events-admin table.events-table th {
	padding: 10px 14px !important;
	border: 0 !important;
	border-radius: 0 !important;
	background: var(--wp--preset--color--lpo-warm-50, #f4f1ea) !important;
	font-size: 12px !important;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
}
.mespace-evenements .em.pixelbones.em-events-admin table.events-table th:first-child {
	border-radius: 10px 0 0 10px !important;
}
.mespace-evenements .em.pixelbones.em-events-admin table.events-table th:last-child {
	border-radius: 0 10px 10px 0 !important;
}
.mespace-evenements .em.pixelbones.em-events-admin table.events-table td {
	padding: 14px !important;
	vertical-align: middle;
	border-bottom: 1px solid var(--wp--preset--color--lpo-warm-100, #e6e1d6);
}
.mespace-evenements .em.pixelbones.em-events-admin table.events-table tbody tr:hover td {
	background: var(--wp--preset--color--lpo-warm-50, #faf8f4);
}
/* Colonnes étroites : duplication, date (jamais coupée), cellule vide de fin. */
.mespace-evenements .em.pixelbones.em-events-admin table.events-table th:nth-child(2),
.mespace-evenements .em.pixelbones.em-events-admin table.events-table td:nth-child(2),
.mespace-evenements .em.pixelbones.em-events-admin table.events-table td:last-child:empty {
	width: 1%;
}
.mespace-evenements .em.pixelbones.em-events-admin table.events-table td:nth-child(4) {
	white-space: nowrap;
}
.mespace-evenements .em.pixelbones.em-events-admin table.events-table a.row-title {
	text-decoration: none !important;
}
.mespace-evenements .em.pixelbones.em-events-admin table.events-table a.row-title:hover {
	text-decoration: underline !important;
}

/* Actions de ligne. */
.mespace-evenements .em.pixelbones.em-events-admin .row-actions {
	margin-top: 4px;
	font-size: 13px;
}
.mespace-evenements .em.pixelbones.em-events-admin .row-actions a.em-event-delete {
	color: #b3261e !important;
	text-decoration: none !important;
}
.mespace-evenements .em.pixelbones.em-events-admin .row-actions a.em-event-delete:hover {
	text-decoration: underline !important;
}
/* Le lien de duplication n'est qu'un « + » : on lui donne un libellé. */
.mespace-evenements .em.pixelbones.em-events-admin td > a[href*="event_duplicate"] {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 5px 12px;
	border: 1px solid var(--wp--preset--color--lpo-warm-100, #d9d3c7);
	border-radius: 999px;
	color: var(--wp--preset--color--lpo-ink, #191919) !important;
	font-size: 13px;
	text-decoration: none !important;
	white-space: nowrap;
}
.mespace-evenements .em.pixelbones.em-events-admin td > a[href*="event_duplicate"]::after {
	content: "Dupliquer";
}
.mespace-evenements .em.pixelbones.em-events-admin td > a[href*="event_duplicate"]:hover {
	background: var(--wp--preset--color--lpo-warm-50, #f4f1ea);
}

/* Petit écran : « Ajouter » repasse sous les onglets, le tableau défile dans son propre conteneur. */
@media (max-width: 700px) {
	.mespace-evenements .em.pixelbones.em-events-admin form {
		grid-template-columns: 1fr;
	}
	.mespace-evenements .em.pixelbones.em-events-admin a.em-button.add-new-h2 {
		grid-column: 1;
		grid-row: auto;
		justify-self: start;
	}
	.mespace-evenements .css-events-admin {
		overflow-x: auto;
	}
}


/* === R82 (24/09/2026) — MON ESPACE › GRAVITYVIEW : boutons du formulaire de modification et de l'export ==
 * Le formulaire de modification d'une saisie (GravityView, onglet « Mon bénévolat ») arrivait avec les boutons
 * natifs du navigateur ; les boutons d'export DataTables (Copier, CSV, Excel, Imprimer) avec ceux de DataTables.
 * Même vocabulaire que R76 : action principale en pastille bleu LPO, secondaires en pastille filet, danger en rouge.
 * Tout est préfixé par `.mespace-outlet` : aucune fuite hors de Mon espace.
 * -------------------------------------------------------------------------- */
.mespace-outlet .gv-edit-entry-wrapper .gv-edit-entry-title {
	margin: 0 0 16px;
	font-size: 1.4em;
}
.mespace-outlet .gv-edit-entry-wrapper #publishing-action {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px 14px;
	margin-top: 8px;
}
.mespace-outlet .gv-edit-entry-wrapper .gv-button-update {
	order: 1;
	appearance: none;
	-webkit-appearance: none;
	height: auto;
	padding: 11px 24px;
	border: 0;
	border-radius: 999px;
	background: var(--wp--preset--color--lpo-blue, #0087cd);
	color: #fff;
	font-size: 15px;
	font-weight: 600;
	line-height: 1.2;
	cursor: pointer;
}
.mespace-outlet .gv-edit-entry-wrapper .gv-button-update:hover,
.mespace-outlet .gv-edit-entry-wrapper .gv-button-update:focus-visible {
	filter: brightness(0.92);
}
.mespace-outlet .gv-edit-entry-wrapper .gv-button-cancel,
.mespace-outlet .gv-edit-entry-wrapper .gv-button-delete {
	display: inline-block;
	float: none;
	padding: 10px 20px;
	border: 1px solid var(--wp--preset--color--lpo-warm-100, #d9d3c7);
	border-radius: 999px;
	color: var(--wp--preset--color--lpo-ink, #191919);
	font-size: 14px;
	font-weight: 600;
	text-decoration: none;
}
.mespace-outlet .gv-edit-entry-wrapper .gv-button-cancel {
	order: 2;
}
.mespace-outlet .gv-edit-entry-wrapper .gv-button-cancel:hover {
	background: var(--wp--preset--color--lpo-warm-50, #f4f1ea);
}
.mespace-outlet .gv-edit-entry-wrapper .gv-button-delete {
	order: 3;
	margin-left: auto !important; /* GravityView pose `.alignright` (float) : on le pousse à droite dans la rangée flex */
	border-color: #e5b4b0;
	color: #b3261e;
}
.mespace-outlet .gv-edit-entry-wrapper .gv-button-delete:hover {
	background: #fbecea;
}

/* Boutons d'export de la liste (DataTables). */
.mespace-outlet .dt-buttons {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	margin-bottom: 10px;
}
.mespace-outlet .dt-buttons .dt-button {
	margin: 0;
	padding: 6px 14px;
	border: 1px solid var(--wp--preset--color--lpo-warm-100, #d9d3c7);
	border-radius: 999px;
	background: transparent;
	color: var(--wp--preset--color--lpo-ink, #191919);
	font-size: 13px;
	font-weight: 600;
	line-height: 1.2;
}
.mespace-outlet .dt-buttons .dt-button:hover {
	background: var(--wp--preset--color--lpo-warm-50, #f4f1ea);
}

/* --- R86 (25/09/2026) — bouton « Mon espace » centré dans la barre -------------------
 * Le lien du bouton est un inline-block posé sur la ligne de base de son conteneur
 * `.wp-block-button`. Ce conteneur hérite de la police du bandeau (16,8 px, interligne
 * 27,7 px) alors que le bouton est en 13,5 px : la ligne de base laisse ~8 px de vide
 * SOUS le bouton, qui remonte donc de 4 px par rapport au logo et au menu. En flex, le
 * conteneur n'a plus de ligne de base et épouse le bouton, que la rangée centre. */
.lpo-header-pill .wp-block-buttons > .wp-block-button {
	display: flex;
}

/* --- R87 (25/09/2026) — Ollie Menu Designer 0.3.4 : chevron des mega menus dans le tiroir mobile ---
 * Depuis 0.3.3, Ollie pose son chevron en ABSOLU dans l'overlay (zone de 60 px collée à droite du
 * bouton, comme le bouton natif de sous-menu). Notre bouton de mega menu est ajusté au texte : le
 * chevron recouvrait le libellé (« Nos R̶DV »). Dans le tiroir, on masque ce chevron et on reprend le
 * « › » des entrées natives à enfants (même règle que `.has-child > .wp-block-navigation-item__content::after`),
 * ce qui harmonise au passage les deux familles d'entrées. Spécificité (0,7,0) > Ollie (0,5,0). */
@media (max-width: 1099.98px) {
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__hote-mega > .wp-block-ollie-mega-menu__toggle .wp-block-ollie-mega-menu__toggle-icon {
		display: none;
	}
	.wp-block-navigation .wp-block-navigation__responsive-container.lpo-drill.is-menu-open .lpo-drill__hote-mega > .wp-block-ollie-mega-menu__toggle::after {
		content: "›";
		font-size: 1.4em;
		line-height: 1;
		opacity: 0.6;
		margin-left: 12px;
	}
}


/* ==========================================================================
   R96 (29/09/2026) — Fiches W2DC : boutons de bloc insérés dans la description.
   W2DC colore tous les liens de ses fiches (`div.w2dc-content a`, réglage « Couleur des liens », désormais le bleu
   LPO) : un bouton bleu (bloc Bouton) y prenait la couleur des liens, texte gris puis bleu sur fond bleu. Le texte
   d'un bouton sans couleur de texte choisie reste blanc, au repos comme au survol ; une couleur choisie dans
   l'éditeur (classe has-…-color, !important de WP) garde la main.
   ========================================================================== */
div.w2dc-content a.wp-block-button__link:not(.has-text-color),
div.w2dc-content a.wp-block-button__link:not(.has-text-color):visited,
div.w2dc-content a.wp-block-button__link:not(.has-text-color):hover,
div.w2dc-content a.wp-block-button__link:not(.has-text-color):focus {
	color: var(--wp--preset--color--lpo-paper);
}
