/*
Theme Name: TBO — Toulouse Bears Occitanie
Theme URI: https://toulousebearsoccitanie.com
Description: Thème enfant de Twenty Twenty-Five pour l'association Toulouse Bears Occitanie. Jetons de design issus du handoff Claude Design (juillet 2026). Maintenu par des bénévoles : privilégier les blocs natifs et theme.json, limiter le CSS et le PHP au strict nécessaire.
Author: Toulouse Bears Occitanie
Template: twentytwentyfive
Version: 0.9.49
Requires at least: 6.6
Tested up to: 7.0
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: tbo
Tags: block-theme, association, full-site-editing
*/

/* --------------------------------------------------------------------------
   Règles transverses non exprimables dans theme.json.
   Tout ce qui peut vivre dans theme.json doit y rester : ce fichier est
   volontairement minimal pour rester maintenable.
   -------------------------------------------------------------------------- */

/* 1. Portraits en noir et blanc (bureau, Misters) — parti pris graphique. */
.tbo-portrait img {
	filter: grayscale(1);
	aspect-ratio: 3 / 4;
	object-fit: cover;
	border-radius: var(--wp--custom--radius--portrait);
}

/* 2. Affiches d'événements : cadre crème isolant le visuel chargé de l'interface. */
.tbo-affiche {
	background: var(--wp--preset--color--creme);
	padding: 12px;
	border-radius: var(--wp--custom--radius--carte);
}
.tbo-affiche img {
	border-radius: var(--wp--custom--radius--petit);
	display: block;
	width: 100%;
	height: auto;
}

/* 3. Surtitre (chapeau de section). */
.tbo-surtitre {
	font-family: var(--wp--preset--font-family--poppins);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--surtitre);
	text-transform: uppercase;
	letter-spacing: .14em;
	color: var(--wp--preset--color--rouille);
}

/* 4. Cartes : ombre au repos, élévation au survol (jamais de changement de taille). */
.tbo-carte {
	background: var(--wp--preset--color--blanc);
	border-radius: var(--wp--custom--radius--carte);
	box-shadow: var(--wp--preset--shadow--repos);
	transition: box-shadow .2s ease;
}
.tbo-carte:hover,
.tbo-carte:focus-within {
	box-shadow: var(--wp--preset--shadow--survol);
}

/* 5. Chips (filtres partenaires, sélecteur d'année Misters, badges). */
.tbo-chip {
	display: inline-block;
	border-radius: var(--wp--custom--radius--pilule);
	padding: 6px 16px;
	font-family: var(--wp--preset--font-family--poppins);
	font-weight: 600;
	font-size: 14px;
	text-decoration: none;
}
.tbo-chip[aria-current="page"],
.tbo-chip.is-active {
	background: var(--wp--preset--color--noir);
	color: var(--wp--preset--color--blanc);
}

/* 6. Accessibilité : anneau de focus visible au clavier sur tout élément interactif. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
summary:focus-visible,
.wp-element-button:focus-visible {
	outline: none;
	box-shadow: var(--wp--custom--focus);
}

/* 7. Respect de la préférence système « animations réduites ». */
@media (prefers-reduced-motion: reduce) {
	* { transition: none !important; animation: none !important; }
}

/* --------------------------------------------------------------------------
   AJOUTS SESSION 1 (en-tête + accueil) — voir CHANGELOG.md.
   Toujours minimal : n'ajouter ici que ce qui ne tient pas dans theme.json
   ni dans les réglages d'un bloc natif.
   -------------------------------------------------------------------------- */

/* 8. En-tête collant translucide (position/flou impossibles en theme.json). */
.tbo-header {
	position: sticky;
	top: 0;
	z-index: 60;
	background: rgba(254, 254, 254, .94);
	backdrop-filter: blur(10px);
	border-bottom: 1px solid rgba(25, 23, 23, .10);
}

/* 9. Wordmark (nom du site) masqué sous 960px — le logo suffit alors. */
@media (max-width: 959px) {
	.tbo-wordmark { display: none; }
}

/* 10. Menu burger sous 960px (le bloc Navigation bascule nativement à 600px ;
       on remonte le point de bascule à 960px, comme demandé par la charte). */
@media (max-width: 959px) {
	.tbo-header .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}
	.tbo-header .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) {
		display: none;
	}
}

/* 11. Sélecteur de langue FR/EN en pilule segmentée. */
.tbo-langpill {
	display: inline-flex;
	border: 1.5px solid rgba(25, 23, 23, .25);
	border-radius: var(--wp--custom--radius--pilule);
	overflow: hidden;
}
.tbo-langpill a {
	font-family: var(--wp--preset--font-family--poppins);
	font-weight: 700;
	font-size: 12px;
	text-decoration: none;
	padding: 6px 11px;
	color: var(--wp--preset--color--noir);
	line-height: 1.4;
}
.tbo-langpill a[aria-current="page"],
.tbo-langpill a.is-active {
	background: var(--wp--preset--color--noir);
	color: var(--wp--preset--color--blanc);
}

/* 12. Élément de menu « bientôt » (Boutique) : désaturé, non prioritaire. */
.tbo-bientot,
.tbo-bientot a,
.tbo-bientot .wp-block-navigation-item__content {
	color: #9a8f84 !important;
	opacity: .7;
}

/* 13. Surlignage moutarde d'un mot dans un titre (comme au feutre). */
.tbo-surligne {
	background: linear-gradient(transparent 60%, var(--wp--preset--color--moutarde) 60%);
}

/* 14. Bouton secondaire : contour noir, se remplit au survol. */
.tbo-btn-secondaire .wp-block-button__link {
	background: transparent;
	color: var(--wp--preset--color--noir);
	border: 2px solid var(--wp--preset--color--noir);
}
.tbo-btn-secondaire .wp-block-button__link:hover,
.tbo-btn-secondaire .wp-block-button__link:focus {
	background: var(--wp--preset--color--noir);
	color: var(--wp--preset--color--blanc);
}

/* 15. Bouton sur fond sombre : moutarde, texte noir. */
.tbo-btn-moutarde .wp-block-button__link {
	background: var(--wp--preset--color--moutarde);
	color: var(--wp--preset--color--noir);
}
.tbo-btn-moutarde .wp-block-button__link:hover,
.tbo-btn-moutarde .wp-block-button__link:focus {
	background: var(--wp--preset--color--moutarde-fonce);
	color: var(--wp--preset--color--noir);
}

/* 16. Cadre crème d'affiche dans une carte (image mise en avant) : sert aussi
       d'ancrage au badge date. Distinct de .tbo-affiche, qui force height:auto
       et écraserait le ratio de l'image mise en avant. */
.tbo-affiche-cadre {
	position: relative;
	background: var(--wp--preset--color--creme);
	padding: 12px;
	border-radius: var(--wp--custom--radius--carte);
}
.tbo-badge-date {
	position: absolute;
	top: 24px;
	left: 24px;
	margin: 0;
	background: var(--wp--preset--color--moutarde);
	color: var(--wp--preset--color--noir);
	font-family: var(--wp--preset--font-family--poppins);
	font-weight: 700;
	font-size: 13px;
	padding: 8px 13px;
	border-radius: var(--wp--custom--radius--petit);
	box-shadow: 0 2px 8px rgba(25, 23, 23, .18);
	pointer-events: none;
}

/* 17. Pilule « prochain rdv » du hero. */
.tbo-pilule-rdv {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	background: var(--wp--preset--color--blanc);
	border: 1px solid rgba(25, 23, 23, .14);
	border-radius: var(--wp--custom--radius--pilule);
	padding: 9px 18px;
	box-shadow: var(--wp--preset--shadow--repos);
	/* Mobile : le composant tient sur la largeur et passe à la ligne au lieu
	   d'écraser le label (« Prochain rdv » se coupait en « Prochai / n rdv »). */
	flex-wrap: wrap;
	max-width: 100%;
}
/* Le libellé « Prochain rdv » reste toujours d'un seul tenant. */
.tbo-pilule-rdv > p {
	white-space: nowrap;
	flex-shrink: 0;
}

/* 18. Bandeau des valeurs (sous le hero) : petites capitales espacées. */
.tbo-bandeau-valeurs {
	font-family: var(--wp--preset--font-family--poppins);
	font-weight: 700;
	font-size: 13.5px;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--noir);
}

/* 19. Menu latéral de l'espace membre (rendu par [tbo_menu_espace_membre]). */
.tbo-menu-membre ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 4px;
}
.tbo-menu-membre a {
	display: block;
	font-family: var(--wp--preset--font-family--poppins);
	font-weight: 600;
	font-size: 15px;
	text-decoration: none;
	padding: 10px 14px;
	border-radius: var(--wp--custom--radius--petit);
	color: var(--wp--preset--color--noir);
}
.tbo-menu-membre a:hover,
.tbo-menu-membre a[aria-current="page"] {
	background: var(--wp--preset--color--creme);
	color: var(--wp--preset--color--rouille);
}

/* --------------------------------------------------------------------------
   20. Menu principal de l'en-tête (rendu par [tbo_menu_principal]) — responsive.
   Desktop : horizontal + sous-menus au survol. Mobile (<960px) : burger.
   -------------------------------------------------------------------------- */
.tbo-nav { display: flex; align-items: center; }
.tbo-nav__menu { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 24px; }
.tbo-nav__menu li { position: relative; margin: 0; }
.tbo-nav__menu a { display: block; font-family: var(--wp--preset--font-family--poppins); font-weight: 600; font-size: 15px; text-decoration: none; color: var(--wp--preset--color--noir); padding: 6px 0; }
.tbo-nav__menu a:hover, .tbo-nav__menu .current-menu-item > a, .tbo-nav__menu .current-menu-parent > a { color: var(--wp--preset--color--rouille); }
.tbo-nav__menu .sub-menu { list-style: none; margin: 0; padding: 8px 0; position: absolute; top: 100%; left: 0; min-width: 210px; background: var(--wp--preset--color--blanc); border: 1px solid rgba(25,23,23,.10); border-radius: var(--wp--custom--radius--petit); box-shadow: var(--wp--preset--shadow--survol); display: none; z-index: 70; }
/* Survol réservé à l'ORDINATEUR : sur tactile, le « hover collant » gardait le
   sous-menu ouvert après repli par l'accordéon (retour Thierry, 18/08). */
@media (min-width: 960px) {
	.tbo-nav__menu li:hover > .sub-menu, .tbo-nav__menu li:focus-within > .sub-menu { display: block; }
}
.tbo-nav__menu .sub-menu a { padding: 8px 16px; }
.tbo-nav__burger { display: none; flex-direction: column; gap: 5px; width: 46px; height: 46px; justify-content: center; align-items: center; border: 1.5px solid rgba(25,23,23,.2); border-radius: 12px; background: var(--wp--preset--color--blanc); cursor: pointer; }
.tbo-nav__burger span { width: 20px; height: 2.5px; background: var(--wp--preset--color--noir); border-radius: 2px; display: block; }
/* Petit ▾ après les entrées à sous-menu (indice visuel, ordinateur) ; le bouton
   accordéon (injecté par nav.js) porte le chevron sur mobile. */
.tbo-nav__menu .menu-item-has-children > a::after { content: " ▾"; font-size: .8em; opacity: .55; }
.tbo-nav__sub-toggle { display: none; }

@media (max-width: 959px) {
	.tbo-nav__burger { display: flex; }
	/* flex-wrap: nowrap — sinon le conteneur (qui hérite de flex-wrap:wrap du bureau)
	   enroule la liste en 2ᵉ colonne dès qu'elle dépasse max-height. Une colonne, on défile. */
	.tbo-nav__menu { display: none; position: absolute; left: 0; right: 0; top: 100%; flex-direction: column; flex-wrap: nowrap; align-items: stretch; gap: 0; background: var(--wp--preset--color--blanc); border-top: 1px solid rgba(25,23,23,.10); border-bottom: 1px solid rgba(25,23,23,.10); padding: 8px 24px 16px; z-index: 65; max-height: 80vh; overflow-y: auto; }
	.tbo-nav.is-open .tbo-nav__menu { display: flex; }
	.tbo-nav__menu a { padding: 12px 4px; border-bottom: 1px solid rgba(25,23,23,.06); }
	/* Entrée à sous-menu : lien + chevron sur une ligne, sous-menu (replié) dessous. */
	.tbo-nav__menu .menu-item-has-children { display: flex; flex-wrap: wrap; align-items: center; }
	.tbo-nav__menu .menu-item-has-children > a { flex: 1 1 auto; }
	.tbo-nav__menu .menu-item-has-children > a::after { content: none; }
	.tbo-nav__sub-toggle { display: flex; align-items: center; justify-content: center; width: 46px; height: 46px; padding: 0; border: 0; background: transparent; cursor: pointer; font-size: 17px; color: var(--wp--preset--color--noir); border-bottom: 1px solid rgba(25,23,23,.06); }
	.tbo-nav__sub-toggle span { display: block; transition: transform .2s ease; }
	.tbo-nav__menu li.is-open > .tbo-nav__sub-toggle span { transform: rotate(180deg); }
	/* Sous-menu REPLIÉ par défaut, déplié seulement quand l'entrée est ouverte. */
	.tbo-nav__menu .sub-menu { position: static; display: none; box-shadow: none; border: 0; background: transparent; padding: 0 0 6px 16px; min-width: 0; flex-basis: 100%; width: 100%; }
	.tbo-nav__menu li.is-open > .sub-menu { display: block; }
	.tbo-nav__menu .sub-menu a { padding: 10px 4px; }
}

/* 21. Sélecteur de langue déroulant (drapeaux) — remplace la pilule. */
.tbo-langswitch { position: relative; display: inline-block; }
.tbo-langswitch__btn { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border: 1.5px solid rgba(25,23,23,.20); border-radius: 999px; background: var(--wp--preset--color--blanc); cursor: pointer; font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 12px; color: var(--wp--preset--color--noir); line-height: 1.4; }
.tbo-langswitch__btn:hover { border-color: var(--wp--preset--color--rouille); }
.tbo-flag { width: 20px; height: 14px; border-radius: 2px; object-fit: cover; display: block; box-shadow: 0 0 0 1px rgba(25,23,23,.08); }
.tbo-langswitch__caret { width: 0; height: 0; border: 4px solid transparent; border-top-color: currentColor; margin-top: 3px; }
.tbo-langswitch__list { position: absolute; right: 0; top: calc(100% + 6px); min-width: 160px; list-style: none; margin: 0; padding: 6px; background: var(--wp--preset--color--blanc); border: 1px solid rgba(25,23,23,.12); border-radius: var(--wp--custom--radius--petit); box-shadow: var(--wp--preset--shadow--survol); display: none; z-index: 80; }
.tbo-langswitch.is-open .tbo-langswitch__list { display: block; }
.tbo-langswitch__list a { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 8px; text-decoration: none; font-family: var(--wp--preset--font-family--poppins); font-weight: 600; font-size: 14px; color: var(--wp--preset--color--noir); }
.tbo-langswitch__list a:hover { background: var(--wp--preset--color--creme); color: var(--wp--preset--color--rouille); }

/* 22. Alignement vertical de l'en-tête droite (nav + sélecteur de langue). */
.tbo-header__right { align-items: center; }
.tbo-header__right > * { display: flex; align-items: center; margin: 0; }
.tbo-header__right p { margin: 0; }
.tbo-nav, .tbo-langswitch { align-self: center; }

/* 23. Logo de partenaire/sponsor (bandeau accueil + cartes) : tuile crème
   uniforme, logo centré à hauteur constante. Les logos aux fonds disparates
   (transparent, blanc, sur noir) partagent ainsi un même cadre net — le petit
   logo ne flotte plus dans un grand vide blanc (retour design de Thierry). */
.tbo-logo-partenaire { display: flex; justify-content: center; align-items: center; min-height: 148px; background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit, 14px); padding: 14px; }
.tbo-logo-partenaire img { height: 104px !important; max-height: 104px; width: auto !important; max-width: 100%; object-fit: contain; margin: 0 auto; display: block; border-radius: 6px; }

/* 24. Cartes partenaires (archive) : plus compactes que les événements, centrées. */
.tbo-carte-partenaire { text-align: center; }
.tbo-cat-partenaire { font-size: 12px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; color: var(--wp--preset--color--rouille); }
.tbo-cat-partenaire a { color: inherit; text-decoration: none; }
.tbo-avantage { background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit); text-align: center; }
.tbo-avantage__label { margin: 0; font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--wp--preset--color--rouille); }
.tbo-avantage p:last-child { margin: 2px 0 0; font-size: 14.5px; font-weight: 600; color: var(--wp--preset--color--noir); }
.tbo-ville { margin: 0; }

/* 25. Surtitre clair (sur fond sombre) : moutarde au lieu de rouille. */
.tbo-surtitre.is-clair { color: var(--wp--preset--color--moutarde); }

/* 26. Étiquette de rang d'un Mister (Mister / 1er dauphin / 2e dauphin). */
.tbo-rang { display: inline-block; margin: 0 auto; background: var(--wp--preset--color--moutarde); color: var(--wp--preset--color--noir); font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 12px; letter-spacing: .04em; padding: 4px 12px; border-radius: var(--wp--custom--radius--pilule); }

/* 27. Misters regroupés par année (archive /misters/). */
.tbo-edition { margin-bottom: var(--wp--preset--spacing--70); }
.tbo-edition__tete { display: flex; align-items: baseline; flex-wrap: wrap; gap: 6px 14px; border-bottom: 2px solid var(--wp--preset--color--moutarde); padding-bottom: 8px; margin-bottom: var(--wp--preset--spacing--40); }
.tbo-edition__annee { font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 30px; line-height: 1; color: var(--wp--preset--color--noir); }
.tbo-edition__titre { font-size: 15px; color: var(--wp--preset--color--secondaire); }
.tbo-edition__grille { display: flex; flex-wrap: wrap; gap: var(--wp--preset--spacing--40); }
.tbo-mister { flex: 0 1 190px; max-width: 210px; padding: var(--wp--preset--spacing--30); text-align: center; }
.tbo-mister__nom { font-family: var(--wp--preset--font-family--poppins); font-size: 18px; font-weight: 700; margin: 12px 0 6px; }
.tbo-mister__nom a { text-decoration: none; color: inherit; }
.tbo-mister__photo { display: block; }


/* 28. Menu espace membre — regroupement logique (sections + icônes). */
.tbo-menu-membre { display: flex; flex-direction: column; gap: 20px; }
.tbo-menu-membre__titre { margin: 0 0 6px; padding: 0 14px; font-family: var(--wp--preset--font-family--poppins); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--wp--preset--color--secondaire); }
.tbo-menu-membre a { display: flex; align-items: center; gap: 10px; }
.tbo-menu-membre__icone { font-size: 16px; line-height: 1; width: 1.4em; text-align: center; flex: none; }
.tbo-menu-membre__groupe--gestion { border-top: 1px solid var(--wp--preset--color--creme); padding-top: 16px; }
.tbo-menu-membre__groupe--gestion a { color: var(--wp--preset--color--secondaire); }
.tbo-menu-membre__groupe--gestion a:hover { background: var(--wp--preset--color--noir); color: var(--wp--preset--color--blanc); }


/* 29. Navigation inter-fiches du Guide (mu-plugin tbo-guide-nav). */
.tbo-guide-retour { margin: 0 0 22px; font-family: var(--wp--preset--font-family--poppins); font-weight: 600; }
.tbo-guide-retour a { text-decoration: none; color: var(--wp--preset--color--secondaire); }
.tbo-guide-retour a:hover { color: var(--wp--preset--color--rouille); }
.tbo-guide-bas { margin-top: var(--wp--preset--spacing--70); }
.tbo-guide-prevnext { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: var(--wp--preset--spacing--60); }
.tbo-guide-prevnext > a { flex: 1 1 220px; display: flex; flex-direction: column; gap: 4px; padding: 14px 18px; border: 1px solid var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit); text-decoration: none; color: var(--wp--preset--color--noir); }
.tbo-guide-prevnext > a:hover { background: var(--wp--preset--color--creme); }
.tbo-guide-prevnext__vide { flex: 1 1 220px; }
.tbo-guide-prevnext__next { text-align: right; align-items: flex-end; }
.tbo-guide-prevnext span { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .05em; color: var(--wp--preset--color--secondaire); }
.tbo-guide-prevnext strong { font-family: var(--wp--preset--font-family--poppins); font-size: 15px; line-height: 1.3; }
.tbo-guide-sommaire { background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--moyen, 12px); padding: 20px 24px; }
.tbo-guide-sommaire__titre { margin: 0 0 12px; font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 16px; }
.tbo-guide-sommaire ul { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 2px 24px; }
.tbo-guide-sommaire a { display: block; padding: 6px 8px; border-radius: var(--wp--custom--radius--petit); text-decoration: none; color: var(--wp--preset--color--noir); font-size: 14.5px; }
.tbo-guide-sommaire a:hover { background: var(--wp--preset--color--blanc); }
.tbo-guide-sommaire a[aria-current="page"] { color: var(--wp--preset--color--rouille); font-weight: 700; }


/* 30. Guide : menu latéral persistant + fil d'Ariane + étape. */
.tbo-guide-layout { display: flex; gap: var(--wp--preset--spacing--60); align-items: flex-start; }
.tbo-guide-aside { flex: 0 0 240px; position: sticky; top: 24px; }
.tbo-guide-main { flex: 1 1 auto; min-width: 0; }
.tbo-guide-main > *:first-child { margin-top: 0; }
.tbo-guide-fil { font-size: 13px; color: var(--wp--preset--color--secondaire); margin-bottom: 6px; }
.tbo-guide-fil a { color: var(--wp--preset--color--secondaire); text-decoration: none; }
.tbo-guide-fil a:hover { color: var(--wp--preset--color--rouille); }
.tbo-guide-fil span { opacity: .5; }
.tbo-guide-fil em { font-style: normal; color: var(--wp--preset--color--noir); font-weight: 600; }
.tbo-guide-etape { display: inline-block; font-family: var(--wp--preset--font-family--poppins); font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--wp--preset--color--rouille); background: var(--wp--preset--color--creme); padding: 4px 12px; border-radius: 999px; margin: 0 0 18px; }
@media (max-width: 781px) {
	.tbo-guide-layout { flex-direction: column; }
	.tbo-guide-aside { position: static; flex-basis: auto; width: 100%; margin-bottom: 12px; }
}


/* 31. Menu espace membre — repliable (burger) sur mobile. */
.tbo-menu-membre-cb { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); border: 0; }
.tbo-menu-membre-toggle { display: none; }
@media (max-width: 781px) {
	.tbo-menu-membre-toggle { display: flex; align-items: center; justify-content: space-between; gap: 10px; cursor: pointer; font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 15px; color: var(--wp--preset--color--noir); padding: 12px 16px; border-radius: var(--wp--custom--radius--petit); background: var(--wp--preset--color--creme); }
	.tbo-menu-membre-toggle__ic { font-size: 17px; }
	.tbo-menu-membre-toggle .tbo-chevron { transition: transform .2s ease; }
	.tbo-menu-membre-cb:checked ~ .tbo-menu-membre-toggle .tbo-chevron { transform: rotate(180deg); }
	.tbo-menu-membre { display: none; margin-top: 10px; }
	.tbo-menu-membre-cb:checked ~ .tbo-menu-membre { display: flex; }
	.tbo-menu-membre-cb:focus-visible ~ .tbo-menu-membre-toggle { outline: 2px solid var(--wp--preset--color--rouille); outline-offset: 2px; }
}


/* 32. Agenda événements (3 sections : à venir / passés / Bear Week). */
.tbo-agenda__section { margin-bottom: var(--wp--preset--spacing--80); }
.tbo-agenda__titre { font-family: var(--wp--preset--font-family--poppins); font-size: 28px; margin: 0 0 4px; padding-bottom: 8px; border-bottom: 2px solid var(--wp--preset--color--moutarde); }
.tbo-agenda__intro { color: var(--wp--preset--color--secondaire); margin: 0 0 var(--wp--preset--spacing--40); }
.tbo-agenda__vide { color: var(--wp--preset--color--secondaire); font-style: italic; }
.tbo-agenda__grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--wp--preset--spacing--40); }
.tbo-event { padding: 0; overflow: hidden; display: flex; flex-direction: column; }
.tbo-event__media { display: block; }
/* Les affiches d'événement sont des AFFICHES : format portrait, pas 16/9.
   3/4 est le plus proche du A4 (1/1,414) tout en gardant des cartes de même
   hauteur dans la grille. « object-fit: cover » ne rogne alors qu'à la marge. */
.tbo-event__img { width: 100%; aspect-ratio: 3 / 4; height: auto; object-fit: cover; display: block; }
/* « flex: 1 » : le corps remplit la carte jusqu'en bas, si bien que le bouton
   (margin-top auto, plus bas) s'aligne sur toute la rangée quelle que soit la
   longueur du titre ou du lieu (retour de Thierry, 02/08/2026). */
.tbo-event__body { padding: var(--wp--preset--spacing--40); display: flex; flex-direction: column; gap: 6px; flex: 1; }
.tbo-event__rythme { align-self: flex-start; background: var(--wp--preset--color--creme); color: var(--wp--preset--color--noir); font-family: var(--wp--preset--font-family--poppins); font-size: 12px; font-weight: 700; padding: 2px 12px; border-radius: 999px; margin: 0; }
.tbo-event__date { font-family: var(--wp--preset--font-family--poppins); font-weight: 600; font-size: 14px; color: var(--wp--preset--color--rouille); margin: 0; }
.tbo-event__titre { font-family: var(--wp--preset--font-family--poppins); font-size: 18px; font-weight: 700; margin: 2px 0; line-height: 1.25; }
.tbo-event__titre a { color: inherit; text-decoration: none; }
.tbo-event__lieu, .tbo-event__tarif { font-size: 14px; color: var(--wp--preset--color--secondaire); margin: 0; }
/* Le premier bouton absorbe l'espace libre (alignement bas) ; un second
   éventuel (billetterie + live) reste collé au premier. */
.tbo-event__cta { margin-top: auto; padding-top: 8px; }
.tbo-event__cta + .tbo-event__cta { margin-top: 0; padding-top: 0; }
.tbo-agenda__section--bearweek { background: var(--wp--preset--color--creme); border-radius: 16px; padding: var(--wp--preset--spacing--60); }
.tbo-agenda__section--bearweek .tbo-agenda__titre { color: var(--wp--preset--color--rouille); border-bottom-color: var(--wp--preset--color--rouille); }
.tbo-agenda__section--bearweek .tbo-event { background: var(--wp--preset--color--blanc); }


/* 33. Filtres par type d'activité + badge sur les cartes événement. */
.tbo-agenda__filtres { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: var(--wp--preset--spacing--60); }
.tbo-agenda__filtres a { font-family: var(--wp--preset--font-family--poppins); font-size: 14px; font-weight: 600; text-decoration: none; padding: 6px 14px; border-radius: 999px; border: 1px solid var(--wp--preset--color--creme); color: var(--wp--preset--color--noir); }
.tbo-agenda__filtres a:hover { background: var(--wp--preset--color--creme); }
.tbo-agenda__filtres a[aria-current="page"] { background: var(--wp--preset--color--noir); color: var(--wp--preset--color--blanc); border-color: var(--wp--preset--color--noir); }
.tbo-event__cat { align-self: flex-start; font-family: var(--wp--preset--font-family--poppins); font-size: 12px; font-weight: 700; text-decoration: none; letter-spacing: .03em; text-transform: uppercase; color: var(--wp--preset--color--rouille); }
.tbo-event__cat:hover { text-decoration: underline; }


/* 34. Portraits Misters : contraints (corrige les chevauchements). */
.tbo-mister__photo { display: block; width: 100%; aspect-ratio: 3 / 4; overflow: hidden; border-radius: var(--wp--custom--radius--petit); background: var(--wp--preset--color--creme); }
.tbo-mister__photo img { width: 100%; height: 100%; object-fit: cover; display: block; max-width: 100%; }


/* 35. Calendrier des moments forts (section Candidats). */
.tbo-mf { display: flex; flex-direction: column; gap: 12px; margin: 0 0 var(--wp--preset--spacing--60); }
.tbo-mf__item { display: flex; gap: 16px; padding: 14px 18px; border-left: 4px solid var(--wp--preset--color--rouille); background: var(--wp--preset--color--creme); border-radius: 0 var(--wp--custom--radius--petit) var(--wp--custom--radius--petit) 0; }
.tbo-mf__item.is-passe { opacity: .55; border-left-color: var(--wp--preset--color--secondaire); }
.tbo-mf__date { flex: 0 0 150px; font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 14px; color: var(--wp--preset--color--rouille); }
.tbo-mf__item.is-passe .tbo-mf__date { color: var(--wp--preset--color--secondaire); }
.tbo-mf__titre { font-family: var(--wp--preset--font-family--poppins); font-size: 17px; margin: 0 0 4px; }
.tbo-mf__lieu { font-size: 14px; color: var(--wp--preset--color--secondaire); margin: 0 0 4px; }
.tbo-mf__desc { font-size: 14.5px; }
.tbo-mf__desc p { margin: 4px 0; }
.tbo-mf__vide { color: var(--wp--preset--color--secondaire); font-style: italic; }
@media (max-width: 600px) { .tbo-mf__item { flex-direction: column; gap: 4px; } .tbo-mf__date { flex-basis: auto; } }


/* 36. Galerie Piwigo (shortcode [tbo_galerie]). */
.tbo-galerie { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--wp--preset--spacing--40); }
.tbo-galerie__album { display: block; text-decoration: none; color: inherit; border-radius: var(--wp--custom--radius--petit); overflow: hidden; background: var(--wp--preset--color--creme); box-shadow: 0 2px 10px rgba(25,23,23,.06); transition: transform .15s ease; }
.tbo-galerie__album:hover { transform: translateY(-3px); }
.tbo-galerie__img { display: block; aspect-ratio: 4 / 3; background-size: cover; background-position: center; background-color: var(--wp--preset--color--creme); }
.tbo-galerie__nom { display: block; font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 16px; padding: 10px 14px 0; }
.tbo-galerie__album:hover .tbo-galerie__nom { color: var(--wp--preset--color--rouille); }
.tbo-galerie__nb { display: block; font-size: 13px; color: var(--wp--preset--color--secondaire); padding: 2px 14px 12px; }
.tbo-galerie__lien { margin-top: var(--wp--preset--spacing--40); font-family: var(--wp--preset--font-family--poppins); font-weight: 600; }
.tbo-galerie__vide { color: var(--wp--preset--color--secondaire); font-style: italic; }

/* Règle 37 — sous-titres des entrées de l'espace membre (description du menu) */
.tbo-menu-membre__txt{display:flex;flex-direction:column;line-height:1.2;}
.tbo-menu-membre__sub{font-size:.72rem;color:var(--wp--preset--color--texte-secondaire,#6B5F55);opacity:.85;margin-top:1px;font-weight:400;}

/* Règle 38 — bandeau valeurs responsive (évite la troncature mobile) */
.tbo-bandeau-valeurs{ line-height:1.7; }
@media (max-width:600px){
	.tbo-bandeau-valeurs{ font-size:12px; letter-spacing:.03em; }
}

/* Règle 39 — en-tête au-dessus du contenu (fix menu mobile derrière produits/événements) */
.tbo-header{ z-index:1000; }

/* --------------------------------------------------------------------------
   Règle 40 — Recherche du site (shortcode [tbo_recherche], en-tête + résultats)
   La loupe reste seule visible au repos ; le champ se déplie au clic. Sur
   mobile il occupe toute la largeur sous l'en-tête, pour rester confortable.
   -------------------------------------------------------------------------- */
.tbo-invisible { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

.tbo-search { position: relative; display: inline-flex; align-items: center; }
.tbo-search__btn { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0; border: 1.5px solid rgba(25,23,23,.20); border-radius: 999px; background: var(--wp--preset--color--blanc); color: var(--wp--preset--color--noir); cursor: pointer; transition: border-color .15s ease, color .15s ease; }
.tbo-search__btn:hover, .tbo-search.is-open .tbo-search__btn { border-color: var(--wp--preset--color--rouille); color: var(--wp--preset--color--rouille); }

.tbo-search__form { position: absolute; right: 0; top: calc(100% + 8px); display: none; align-items: center; gap: 4px; padding: 6px; background: var(--wp--preset--color--blanc); border: 1px solid rgba(25,23,23,.12); border-radius: var(--wp--custom--radius--petit); box-shadow: var(--wp--preset--shadow--survol); z-index: 90; }
.tbo-search.is-open .tbo-search__form { display: flex; }
.tbo-search__input { width: 260px; max-width: 60vw; border: 0; outline: 0; background: transparent; padding: 8px 10px; font-family: var(--wp--preset--font-family--poppins); font-size: 15px; color: var(--wp--preset--color--noir); }
.tbo-search__input::placeholder { color: var(--wp--preset--color--secondaire); opacity: .75; }
.tbo-search__go { display: inline-flex; align-items: center; justify-content: center; width: 42px; height: 42px; flex: 0 0 auto; padding: 0; border: 0; border-radius: 10px; background: var(--wp--preset--color--rouille); color: var(--wp--preset--color--blanc); cursor: pointer; }
.tbo-search__go:hover { background: var(--wp--preset--color--noir); }

@media (max-width: 959px) {
	/* Pleine largeur sous l'en-tête : le champ ne déborde jamais de l'écran. */
	.tbo-search { position: static; }
	.tbo-search__form { left: 0; right: 0; top: 100%; border-radius: 0; border-left: 0; border-right: 0; padding: 10px 24px; }
	.tbo-search__input { width: auto; max-width: none; flex: 1 1 auto; }
}

/* Page de résultats */
.tbo-search-aide { list-style: none; margin: var(--wp--preset--spacing--30) 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px; }
.tbo-search-aide a { display: inline-block; padding: 8px 16px; border: 1.5px solid rgba(25,23,23,.20); border-radius: 999px; text-decoration: none; font-family: var(--wp--preset--font-family--poppins); font-weight: 600; font-size: 14px; color: var(--wp--preset--color--noir); }
.tbo-search-aide a:hover { border-color: var(--wp--preset--color--rouille); color: var(--wp--preset--color--rouille); }
.tbo-search-aide__intro { color: var(--wp--preset--color--secondaire); margin-bottom: 0; }
.tbo-resultat { border-bottom: 1px solid rgba(25,23,23,.10); padding-bottom: var(--wp--preset--spacing--40); }

/* --------------------------------------------------------------------------
   Règle 41 — Photos d'événement + carrousel des albums publics de la galerie.
   Carrousel : défilement au doigt/molette avec accroche (scroll-snap), sans
   bibliothèque externe. Mosaïque : grille fluide de vignettes.
   -------------------------------------------------------------------------- */
.tbo-carrousel { display: flex; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; padding: 4px 2px 12px; }
.tbo-carrousel__item { flex: 0 0 auto; scroll-snap-align: start; border-radius: var(--wp--custom--radius--petit); overflow: hidden; box-shadow: 0 2px 10px rgba(25,23,23,.10); transition: transform .15s ease; }
.tbo-carrousel__item:hover { transform: translateY(-3px); }
.tbo-carrousel__item img { display: block; height: 230px; width: auto; max-width: 78vw; object-fit: cover; }
.tbo-carrousel::-webkit-scrollbar { height: 8px; }
.tbo-carrousel::-webkit-scrollbar-thumb { background: rgba(25,23,23,.18); border-radius: 4px; }

.tbo-event-photos { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; margin: 0 0 var(--wp--preset--spacing--40); }
.tbo-event-photos a { display: block; border-radius: var(--wp--custom--radius--petit); overflow: hidden; }
.tbo-event-photos img { display: block; width: 100%; aspect-ratio: 1; object-fit: cover; transition: transform .15s ease; }
.tbo-event-photos a:hover img { transform: scale(1.04); }
.tbo-event-photos__titre { margin-top: var(--wp--preset--spacing--60); }
.tbo-event-photos__lien { margin-top: var(--wp--preset--spacing--30); }
.tbo-event-photos__note { font-size: 13px; color: var(--wp--preset--color--secondaire); }

/* Règle 42 — page « Le Bureau » : trombinoscope en grille de cartes. */
.tbo-bureau-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: var(--wp--preset--spacing--40); margin: var(--wp--preset--spacing--50) 0; align-items: stretch; }
/* Cartes de HAUTEUR ÉGALE (colonne flex + grille étirée) → alignées quelle que
   soit la longueur de la fonction. */
/* margin-top: 0 → annule la marge de bloc « flow » de WordPress qui, ajoutée à
   toutes les cartes SAUF la première, décalait Philippe de 24px vers le haut en
   grille (diagnostic navigateur, 17/08). */
.tbo-bureau-carte { background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit); padding: var(--wp--preset--spacing--40); text-align: center; box-shadow: 0 2px 10px rgba(25,23,23,.06); display: flex; flex-direction: column; align-items: center; justify-content: flex-start; align-self: stretch; margin-top: 0; }
.tbo-bureau-carte h3 { margin: .6rem 0 0; font-family: var(--wp--preset--font-family--poppins); font-size: 19px; }
/* Photo STRICTEMENT uniforme (132px) quelle que soit la taille de l'image
   source ; !important pour battre la règle .wp-block-image img du cœur WordPress
   qui, à spécificité égale, laissait la 1re photo à sa taille naturelle. */
.tbo-bureau-photo { flex: none; width: 132px; height: 132px; margin: 0 auto; }
.tbo-bureau-photo img { width: 132px !important; height: 132px !important; max-width: none; object-fit: cover; border-radius: 50%; margin: 0 auto; display: block; box-shadow: 0 0 0 4px var(--wp--preset--color--blanc); }
.tbo-bureau-photo--vide { width: 132px; height: 132px; border-radius: 50%; background: var(--wp--preset--color--blanc); display: flex; align-items: center; justify-content: center; font-size: 3rem; margin: 0 auto; }
.tbo-bureau-fonction { color: var(--wp--preset--color--rouille); font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 13px; text-transform: uppercase; letter-spacing: .05em; margin: .15rem 0 .6rem; }
.tbo-bureau-contact a { display: inline-block; padding: 7px 18px; border: 1.5px solid rgba(25,23,23,.2); border-radius: 999px; text-decoration: none; font-family: var(--wp--preset--font-family--poppins); font-weight: 600; font-size: 14px; color: var(--wp--preset--color--noir); }
.tbo-bureau-contact a:hover { border-color: var(--wp--preset--color--rouille); color: var(--wp--preset--color--rouille); }

/* Règle 43 — page « Adhérer » : tarifs lus dans HelloAsso + formulaire intégré.
   Le cadre HelloAsso n'annonce pas toujours sa hauteur : on lui en donne une
   généreuse et il gère son propre défilement (voir tbo-helloasso.php). */
.tbo-tarifs { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: var(--wp--preset--spacing--40); margin: var(--wp--preset--spacing--50) 0 var(--wp--preset--spacing--30); }
.tbo-tarif { background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit); padding: var(--wp--preset--spacing--40); text-align: center; box-shadow: 0 2px 10px rgba(25,23,23,.06); }
.tbo-tarif__prix { font-family: var(--wp--preset--font-family--poppins); font-weight: 800; font-size: 40px; line-height: 1.1; color: var(--wp--preset--color--rouille); }
.tbo-tarif__label { font-family: var(--wp--preset--font-family--poppins); font-weight: 600; font-size: 15px; margin-top: .35rem; }
.tbo-tarifs__note { font-size: 14px; color: var(--wp--preset--color--secondaire); margin-top: 0; }
.tbo-ha-indispo { font-size: 15px; color: var(--wp--preset--color--secondaire); }

.tbo-ha { margin: var(--wp--preset--spacing--50) 0; }
.tbo-ha__titre { margin-bottom: var(--wp--preset--spacing--20); }
.tbo-ha__intro { font-size: 15px; color: var(--wp--preset--color--secondaire); margin-top: 0; }
.tbo-ha__cadre { display: block; width: 100%; border: 0; border-radius: var(--wp--custom--radius--petit); background: var(--wp--preset--color--blanc); box-shadow: 0 2px 14px rgba(25,23,23,.08); }
.tbo-ha__secours { font-size: 14px; color: var(--wp--preset--color--secondaire); margin-top: var(--wp--preset--spacing--30); }

/* Règle 44 — suivi des événements (bureau) : liste dépliable + tableau d'accueil. */
.tbo-suivi__liste { list-style: none; margin: 0 0 var(--wp--preset--spacing--50); padding: 0; }
.tbo-suivi__item { margin-bottom: 8px; }
.tbo-suivi__item a { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; text-decoration: none; color: inherit; background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit); padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40); transition: transform .12s ease, box-shadow .12s ease; }
.tbo-suivi__item a:hover { transform: translateY(-2px); box-shadow: 0 3px 12px rgba(25,23,23,.10); }
.tbo-suivi__item .tbo-suivi__titre { font-family: var(--wp--preset--font-family--poppins); font-weight: 700; }
.tbo-suivi__retour { font-size: 14px; margin-bottom: var(--wp--preset--spacing--30); }
.tbo-suivi__ev-titre { margin-bottom: 0; }
.tbo-suivi__ev-date { color: var(--wp--preset--color--secondaire); margin-top: 2px; }
.tbo-suivi__chiffres { display: flex; flex-wrap: wrap; gap: var(--wp--preset--spacing--40); margin: var(--wp--preset--spacing--40) 0; }
.tbo-suivi__chiffres div { background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit); padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40); min-width: 130px; }
.tbo-suivi__chiffres strong { display: block; font-family: var(--wp--preset--font-family--poppins); font-size: 28px; font-weight: 800; color: var(--wp--preset--color--rouille); line-height: 1.1; }
.tbo-suivi__chiffres span { font-size: 13px; color: var(--wp--preset--color--secondaire); }
.tbo-suivi__ev { background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit); padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40); margin-bottom: 10px; }
.tbo-suivi__ev summary { cursor: pointer; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; font-family: var(--wp--preset--font-family--poppins); }
.tbo-suivi__titre { font-weight: 700; }
.tbo-suivi__date { font-size: 14px; color: var(--wp--preset--color--secondaire); }
.tbo-suivi__compteur { font-size: 14px; font-weight: 600; color: var(--wp--preset--color--rouille); margin-left: auto; }
.tbo-suivi__corps { overflow-x: auto; margin-top: var(--wp--preset--spacing--30); }
.tbo-suivi__table { width: 100%; border-collapse: collapse; font-size: 14px; }
.tbo-suivi__table th { text-align: left; font-family: var(--wp--preset--font-family--poppins); font-size: 12px; text-transform: uppercase; letter-spacing: .05em; color: var(--wp--preset--color--secondaire); border-bottom: 1px solid rgba(25,23,23,.12); padding: 6px 10px 6px 0; }
.tbo-suivi__table td { padding: 9px 10px 9px 0; border-bottom: 1px solid rgba(25,23,23,.07); vertical-align: top; }
.tbo-suivi__photo { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; display: block; }
.tbo-suivi__photo--vide { display: flex; align-items: center; justify-content: center; background: var(--wp--preset--color--blanc); font-size: 20px; }
.tbo-suivi__num { color: var(--wp--preset--color--secondaire); font-size: 13px; }
.tbo-suivi__extra { font-size: 13px; color: var(--wp--preset--color--secondaire); margin-top: 2px; }
.tbo-suivi__extra span { font-weight: 600; }
.tbo-suivi__contact a { text-decoration: none; }
.tbo-suivi__lien { margin: var(--wp--preset--spacing--30) 0 0; font-size: 14px; }
.tbo-suivi__vide, .tbo-suivi__chargement { font-size: 14px; color: var(--wp--preset--color--secondaire); }
.tbo-suivi__note { font-size: 13px; color: var(--wp--preset--color--secondaire); border-left: 3px solid var(--wp--preset--color--rouille); padding-left: 12px; margin-top: var(--wp--preset--spacing--50); }
.tbo-badge { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; font-family: var(--wp--preset--font-family--poppins); background: rgba(25,23,23,.08); }
.tbo-badge--ok { background: #d8ecd8; color: #235c23; }
.tbo-badge--expire { background: #f7e2c9; color: #8a4b13; }
.tbo-suivi-acces { margin-top: var(--wp--preset--spacing--60); padding-top: var(--wp--preset--spacing--40); border-top: 1px solid rgba(25,23,23,.1); }
.tbo-suivi__source { font-size: 11px; color: var(--wp--preset--color--secondaire); border: 1px solid rgba(25,23,23,.15); border-radius: 999px; padding: 1px 7px; white-space: nowrap; cursor: help; }

/* Règle 45 — Toulouse Bear Week mise en vedette quand elle approche.
   Elle passe en tête de la page des événements et se distingue par un cadre
   chaud ; une fois passée, elle redevient une section ordinaire en bas. */
.tbo-agenda__section--vedette { background: linear-gradient(160deg, var(--wp--preset--color--creme), var(--wp--preset--color--blanc)); border: 2px solid var(--wp--preset--color--rouille); border-radius: var(--wp--custom--radius--petit); padding: var(--wp--preset--spacing--50) var(--wp--preset--spacing--40); margin-bottom: var(--wp--preset--spacing--60); position: relative; }
.tbo-agenda__section--vedette::before { content: "★ Le rendez-vous de l’année"; position: absolute; top: -13px; left: var(--wp--preset--spacing--40); background: var(--wp--preset--color--rouille); color: var(--wp--preset--color--blanc); font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 12px; letter-spacing: .04em; padding: 4px 14px; border-radius: 999px; }
.tbo-agenda__section--vedette .tbo-agenda__titre { color: var(--wp--preset--color--rouille); font-size: clamp(28px, 4vw, 40px); }
.tbo-agenda__section--vedette .tbo-agenda__intro { font-size: 17px; }
@media (max-width: 600px) { .tbo-agenda__section--vedette { padding: var(--wp--preset--spacing--50) var(--wp--preset--spacing--30); } }
.tbo-agenda__attente { font-size: 16px; margin: var(--wp--preset--spacing--30) 0 0; }

/* Règle 46 — formulaire de contact public (alimente les tickets). */
.tbo-contact { max-width: 640px; }
.tbo-contact__form p { margin: 0 0 var(--wp--preset--spacing--30); }
.tbo-contact__form label { display: block; font-family: var(--wp--preset--font-family--poppins); font-weight: 600; font-size: 15px; margin-bottom: 5px; }
.tbo-contact__form input[type="text"], .tbo-contact__form input[type="email"], .tbo-contact__form select, .tbo-contact__form textarea { width: 100%; padding: 11px 13px; border: 1.5px solid rgba(25,23,23,.18); border-radius: var(--wp--custom--radius--petit); font: inherit; background: var(--wp--preset--color--blanc); }
.tbo-contact__form input:focus, .tbo-contact__form select:focus, .tbo-contact__form textarea:focus { outline: 2px solid var(--wp--preset--color--rouille); outline-offset: 1px; border-color: transparent; }
.tbo-contact__aide { display: block; font-size: 13px; color: var(--wp--preset--color--secondaire); margin-top: 4px; }
.tbo-contact__ok { background: #d8ecd8; color: #235c23; padding: var(--wp--preset--spacing--40); border-radius: var(--wp--custom--radius--petit); }
.tbo-contact__err { background: #f7dcdc; color: #8a1f1f; padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40); border-radius: var(--wp--custom--radius--petit); }
.tbo-contact .cf-turnstile { margin-bottom: var(--wp--preset--spacing--30); }
.tbo-contact__facultatif { font-weight: 400; color: var(--wp--preset--color--secondaire); font-size: 13px; }
.tbo-comment-connexion { background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit); padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--40); font-size: 15px; }

/* Règle 47 — panier dans l'en-tête (shortcode [tbo_panier]). Même gabarit que
   la loupe : pastille ronde de 38 px, qui prend la couleur rouille dès qu'un
   article attend. Le compteur est un badge, pas un texte : lisible d'un coup
   d'œil sur téléphone, où l'espace de l'en-tête est compté. */
.tbo-panier { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border: 1.5px solid rgba(25,23,23,.20); border-radius: 999px; background: var(--wp--preset--color--blanc); color: var(--wp--preset--color--noir); text-decoration: none; transition: border-color .15s ease, color .15s ease; }
.tbo-panier:hover, .tbo-panier:focus-visible { border-color: var(--wp--preset--color--rouille); color: var(--wp--preset--color--rouille); }
.tbo-panier--plein { border-color: var(--wp--preset--color--rouille); color: var(--wp--preset--color--rouille); }
.tbo-panier__nombre { position: absolute; top: -5px; right: -5px; min-width: 19px; height: 19px; padding: 0 5px; border-radius: 999px; background: var(--wp--preset--color--rouille); color: var(--wp--preset--color--blanc); font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 11px; line-height: 19px; text-align: center; }
/* Panier vide : masqué (demande de Thierry). Il reste dans la page, invisible,
   pour que WooCommerce puisse le faire apparaître dès le premier article
   ajouté — sans quoi il n'arriverait qu'au chargement de page suivant. */
.tbo-panier--vide { display: none; }

/* Règle 48 — suivi des événements : réponses de formulaire repliées.
   <details> natif : un « + détails (n) » discret, le contenu ne s'ouvre qu'à
   la demande. Les mentions « payé par » / « × N billets » restent visibles. */
.tbo-suivi__details { margin-top: 4px; }
.tbo-suivi__details summary { cursor: pointer; font-size: 12.5px; color: var(--wp--preset--color--secondaire); list-style: none; user-select: none; }
.tbo-suivi__details summary::-webkit-details-marker { display: none; }
.tbo-suivi__details summary:hover { color: var(--wp--preset--color--rouille); }
.tbo-suivi__details[open] summary { color: var(--wp--preset--color--rouille); margin-bottom: 4px; }

/* Règle 49 — fiche adhérent (dialogue ouvert en touchant la photo du suivi).
   <dialog> natif : Échap, fond assombri et piégeage du clavier sont fournis
   par le navigateur. La photo est affichée en grand, bords adoucis. */
.tbo-suivi__photo-btn { background: none; border: none; padding: 0; cursor: pointer; border-radius: 999px; }
.tbo-suivi__photo-btn:focus-visible { outline: 2px solid var(--wp--preset--color--rouille); outline-offset: 2px; }
.tbo-fiche { border: none; border-radius: var(--wp--custom--radius--petit, 14px); padding: var(--wp--preset--spacing--50, 24px); max-width: min(88vw, 380px); text-align: center; box-shadow: 0 24px 70px rgba(25,23,23,.35); }
.tbo-fiche::backdrop { background: rgba(25,23,23,.55); }
.tbo-fiche__photo img { width: min(60vw, 260px); height: min(60vw, 260px); object-fit: cover; border-radius: var(--wp--custom--radius--petit, 14px); }
.tbo-fiche__ours { font-size: 96px; line-height: 1.4; display: block; }
.tbo-fiche__nom { font-family: var(--wp--preset--font-family--poppins); margin: .8rem 0 .2rem; font-size: 20px; }
.tbo-fiche__statut { color: var(--wp--preset--color--secondaire); font-size: 14px; margin: 0 0 .6rem; }
.tbo-fiche__contact { font-size: 15px; line-height: 1.7; margin: 0; }
.tbo-fiche__x { position: absolute; top: 0; right: 0; min-width: 44px; min-height: 44px; background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--wp--preset--color--secondaire); }

/* Règle 50 — fiche d'un événement : l'affiche au bon format (retour de
   Thierry, 01/08/2026). Le gabarit single hérité du parent force l'image mise
   en avant en 3:2 recadrée (aspect-ratio + object-fit:cover posés EN LIGNE
   dans le HTML, d'où les !important) : l'affiche portrait de Mathieu était
   tronquée en bandeau. Ici : proportions naturelles, largeur d'affiche
   raisonnable, centrée. */
.single-evenement .wp-block-post-featured-image { aspect-ratio: auto !important; max-width: 520px; margin-left: auto; margin-right: auto; }
.single-evenement .wp-block-post-featured-image img { height: auto !important; object-fit: contain !important; border-radius: var(--wp--custom--radius--petit, 14px); }

/* Règle 51 — fiche d'un partenaire : le logo au bon format (retour de
   Thierry, 01/08/2026). Même recadrage 3:2 hérité du parent que sur les
   événements (règle 50) : logos et photos étaient tronqués. Proportions
   naturelles, largeur contenue, centré, sur fond crème doux (les logos à
   fond transparent restent lisibles). */
.single-partenaire .wp-block-post-featured-image,
.single-sponsor .wp-block-post-featured-image { aspect-ratio: auto !important; max-width: 380px; margin-left: auto; margin-right: auto; }
.single-partenaire .wp-block-post-featured-image img,
.single-sponsor .wp-block-post-featured-image img { height: auto !important; object-fit: contain !important; border-radius: var(--wp--custom--radius--petit, 14px); background: var(--wp--preset--color--creme, #F8F1E4); }

/* Règle 52 — accueil, « Prochains événements » : boutons alignés en bas
   (retour de Thierry, 02/08/2026 — même principe que les cartes de l'agenda).
   Ces cartes sont un motif de blocs : la carte s'étire dans sa case de
   grille, son corps remplit la hauteur et le bloc de boutons absorbe
   l'espace libre. « !important » : le motif pose un margin-top en ligne.
   Portée limitée à l'accueil (.home) : ailleurs, le dernier bloc d'une
   tbo-carte n'est pas toujours un bouton (encadré « Avantage adhérent »
   des partenaires) et s'étirerait à tort. */
.home .wp-block-post > .tbo-carte { display: flex; flex-direction: column; height: 100%; }
.home .tbo-carte > .wp-block-group:last-child { display: flex; flex-direction: column; flex: 1; }
.home .tbo-carte > .wp-block-group:last-child > .wp-block-buttons { margin-top: auto !important; padding-top: var(--wp--preset--spacing--20); }

/* Règle 53 — étiquette « Nouveau » sur les cartes partenaire/sponsor récentes
   (demande de Philippe, 08/08/2026). Posée en haut à gauche du logo ; la carte
   masque le débordement, la figure sert de repère de position. */
.tbo-carte-partenaire .wp-block-post-featured-image { position: relative; }
.tbo-badge-new {
	position: absolute; top: 8px; left: 8px; z-index: 2;
	background: var(--wp--preset--color--rouille, #C04D25); color: #fff;
	font-family: var(--wp--preset--font-family--poppins, inherit);
	font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
	padding: 3px 8px; border-radius: 999px; box-shadow: 0 1px 3px rgba(0,0,0,.25);
}

/* Règle 54 — note « éditions antérieures à 2018 » dans la liste des Misters
   (demande de Philippe, 08/08/2026). Séparateur discret avant les lauréats
   pré-association. */
.tbo-misters-note {
	max-width: 760px; margin: var(--wp--preset--spacing--50, 2rem) auto var(--wp--preset--spacing--40, 1.5rem);
	padding: 1rem 1.2rem; text-align: center;
	background: var(--wp--preset--color--creme, #F8F1E4);
	border-radius: 12px; color: var(--wp--preset--color--secondaire, #6B5F55);
	font-size: 15px; line-height: 1.5;
}

/* ————————————————————————————————————————————————————————————————
   Règles 55 à 60 — Annuaire des partenaires par catégorie, avec recherche et
   filtres (shortcode [tbo_partenaires], vague 2 des retours gestionnaires,
   10/08/2026). Le rendu est en PHP ; ici la mise en forme de la barre d'outils,
   des sections et des cartes (qui n'ont plus de padding inline).
   ———————————————————————————————————————————————————————————————— */

/* 55 — barre d'outils : recherche + filtres. */
.tbo-part-barre { display: flex; flex-direction: column; gap: 16px; margin-bottom: var(--wp--preset--spacing--60); }
.tbo-part-recherche-boite { position: relative; width: 100%; max-width: 440px; margin: 0 auto; }
.tbo-part-loupe { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); pointer-events: none; opacity: .6; }
.tbo-part-recherche { width: 100%; padding: 12px 16px 12px 44px; border-radius: 999px; border: 1px solid var(--wp--preset--color--creme); background: var(--wp--preset--color--blanc); box-shadow: var(--wp--preset--shadow--repos); font-size: 16px; }
.tbo-part-recherche:focus { outline: 2px solid var(--wp--preset--color--rouille); outline-offset: 1px; }

/* 56 — puces de filtre par catégorie. */
.tbo-part-filtres { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }
.tbo-part-filtre { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--wp--preset--color--creme); background: var(--wp--preset--color--blanc); color: var(--wp--preset--color--noir); border-radius: 999px; padding: 7px 15px; font-size: 14px; font-family: var(--wp--preset--font-family--poppins); cursor: pointer; transition: background .15s ease, color .15s ease, border-color .15s ease; min-height: 40px; }
.tbo-part-filtre:hover { border-color: var(--wp--preset--color--rouille); }
.tbo-part-filtre.is-actif { background: var(--wp--preset--color--rouille); color: #fff; border-color: var(--wp--preset--color--rouille); }
.tbo-part-filtre span { font-size: 12px; opacity: .6; }
.tbo-part-filtre.is-actif span { opacity: .85; }

/* 57 — sections de catégorie + grille. */
.tbo-part-cat__titre { border-bottom: 2px solid var(--wp--preset--color--creme); padding-bottom: 8px; margin: var(--wp--preset--spacing--60) 0 var(--wp--preset--spacing--40); }
.tbo-part-cat__n { color: var(--wp--preset--color--secondaire); font-weight: 400; font-size: .7em; }
.tbo-part-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: var(--wp--preset--spacing--40); }

/* 58 — cartes (le padding vivait en inline dans l'ancienne Query Loop). */
.tbo-part-grille .tbo-carte-partenaire { padding: var(--wp--preset--spacing--40); display: flex; flex-direction: column; gap: 10px; }
.tbo-carte-partenaire__nom { margin: 0; font-family: var(--wp--preset--font-family--poppins); font-size: 19px; font-weight: 700; line-height: 1.25; min-height: 2.5em; }
.tbo-carte-partenaire__nom a { color: inherit; text-decoration: none; }
.tbo-carte-partenaire__nom a:hover { text-decoration: underline; }
.tbo-part .tbo-avantage { padding: 10px 14px; }
.tbo-part .tbo-ville { font-size: 14px; }

/* 59 — badge « Nouveau » : la carte est le repère de position (rendu PHP). */
.tbo-part-grille .tbo-carte-partenaire { position: relative; }
.tbo-part-grille .tbo-logo-partenaire { position: relative; }

/* 60 — état « aucun résultat » + encart « rejoindre / corriger ». */
.tbo-part-vide { text-align: center; color: var(--wp--preset--color--secondaire); padding: var(--wp--preset--spacing--50) 0; }
.tbo-part-rejoindre { margin-top: var(--wp--preset--spacing--70); text-align: center; background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--carte); padding: var(--wp--preset--spacing--60); }
.tbo-part-rejoindre__t { margin: 0 0 6px; font-family: var(--wp--preset--font-family--poppins); font-weight: 700; font-size: 20px; }
/* inline-block + white-space normal : sur mobile le libellé long (« Devenir
   sponsor ou corriger une fiche ») passe à la ligne dans UN seul bloc arrondi,
   au lieu de fragmenter le fond en escalier (bug repéré sur téléphone). */
.tbo-part-rejoindre .wp-element-button { margin-top: 12px; display: inline-block; white-space: normal; line-height: 1.3; max-width: 100%; }

/* Règle 61 — largeur de lecture confortable sur les pages de texte (audit design
   10/08). contentSize vaut 1200px (parfait pour les grilles) mais du texte
   courant sur 1200px fatigue l'œil. On ramène le corps des pages/articles à
   ~46rem — CALÉ À GAUCHE (aligné avec les titres) plutôt que centré, qui créait
   un décalage titre/texte disgracieux (retour Thierry 16/08). Images, groupes
   et sections colorées gardent leur pleine largeur. */
.wp-block-post-content > p,
.wp-block-post-content > h2,
.wp-block-post-content > h3,
.wp-block-post-content > h4,
.wp-block-post-content > ul,
.wp-block-post-content > ol,
.wp-block-post-content > blockquote {
	max-width: 46rem;
	margin-left: 0;
	margin-right: auto;
}
.wp-block-post-content > .alignwide,
.wp-block-post-content > .alignfull { max-width: none; }

/* Règle 62 — barres de filtres (partenaires, sponsors, agenda) : sur mobile, une
   seule ligne qui défile horizontalement plutôt que 3-4 rangées empilées qui
   repoussent le contenu (audit design, priorité mobile). */
@media (max-width: 600px) {
	.tbo-part-filtres,
	.tbo-agenda__filtres {
		flex-wrap: nowrap;
		overflow-x: auto;
		justify-content: flex-start;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: none;
		padding-bottom: 4px;
	}
	.tbo-part-filtres::-webkit-scrollbar,
	.tbo-agenda__filtres::-webkit-scrollbar { display: none; }
	.tbo-part-filtre,
	.tbo-agenda__filtres a { flex: 0 0 auto; white-space: nowrap; }
}

/* Règle 63 — Partenaires/Sponsors : vue COMPACTE sur téléphone (retour Thierry,
   10/08). Sur mobile on privilégie les logos : grille dense (2 colonnes), logo
   dominant + titre plus petit dessous, le reste (avantage, ville, catégorie) se
   découvre au clic sur la fiche. Objectif : « sensation de nombre » et fin du
   défilement à l'infini. Toute la carte est cliquable (lien étiré sur le titre). */
@media (max-width: 600px) {
	.tbo-part-grille { grid-template-columns: 1fr 1fr; gap: 12px; }
	.tbo-part-grille .tbo-carte-partenaire { padding: 10px; gap: 6px; position: relative; }
	.tbo-part-grille .tbo-logo-partenaire { min-height: 116px; padding: 10px; }
	.tbo-part-grille .tbo-logo-partenaire img { height: 74px !important; max-height: 74px; }
	.tbo-part .tbo-cat-partenaire,
	.tbo-part .tbo-avantage,
	.tbo-part .tbo-ville { display: none; }
	.tbo-carte-partenaire__nom { font-size: 13.5px; line-height: 1.2; min-height: 0; text-align: center; font-weight: 700; }
	.tbo-carte-partenaire__nom a::after { content: ""; position: absolute; inset: 0; }
}

/* Règle 64 — Blog / Actualités : gabarits maison (single-post.html + home.html).
   Avant, les articles et la liste des actualités retombaient sur le thème parent
   (Twenty Twenty-Five) → « non formatés », surtout sur téléphone (retour Thierry
   12/08). On leur donne le même habillage que le reste du site. */

/* Article : image de couverture cadrée, pas d'étirement plein écran sur mobile. */
.single-post .tbo-post-cover { margin: 0 auto var(--wp--preset--spacing--60); max-width: 900px; }
.single-post .tbo-post-cover img {
	width: 100%;
	height: auto;
	border-radius: var(--wp--custom--radius--carte, 18px);
}
/* Le titre + la date de l'article restent centrés et lisibles. */
.single-post .wp-block-post-title { font-size: clamp(1.9rem, 5vw, 2.8rem); line-height: 1.15; margin: 0 auto; max-width: 22ch; }
.single-post .wp-block-post-terms { margin-bottom: 10px; }
.single-post .wp-block-post-terms a { text-decoration: none; }

/* Liste des actualités : cartes à image, grille auto-responsive (1 colonne sur
   téléphone via minimumColumnWidth du bloc), image collée en haut de la carte. */
.tbo-actu-carte { overflow: hidden; display: flex; flex-direction: column; }
.tbo-actu-carte__img { margin: 0; }
.tbo-actu-carte__img img { width: 100%; height: 100%; object-fit: cover; }
.tbo-actu-carte .wp-block-post-title { margin: 0; }
.tbo-actu-carte .wp-block-post-title a { text-decoration: none; }
.tbo-actu-carte .wp-block-post-excerpt { margin: 0; color: var(--wp--preset--color--secondaire); font-size: 15px; }
.tbo-actu-carte .wp-block-post-excerpt__more-link { display: inline-block; margin-top: 8px; font-weight: 700; color: var(--wp--preset--color--rouille); text-decoration: none; }

/* Règle 65 — Répertoire de professionnels de santé (réservé aux membres).
   La liste réutilise les classes .tbo-part-* de l'annuaire partenaires (barre de
   recherche, filtres, grille, vue compacte mobile des Règles 62-63) ; on n'ajoute
   ici que le select ville, la mise en forme des cartes et les pastilles de
   mentions. Demande de Thierry (13/08). */
.tbo-sante .tbo-part-barre { flex-wrap: wrap; }
.tbo-sante-ville {
	padding: .55rem .8rem;
	border: 1px solid rgba(25,23,23,.25);
	border-radius: 999px;
	background: var(--wp--preset--color--blanc, #fff);
	font: inherit;
}
.tbo-sante-carte { display: flex; flex-direction: column; gap: .35rem; text-align: left; padding: 1.1rem 1.2rem; }
.tbo-sante-carte__nom { font-size: 17px; line-height: 1.2; margin: 0; font-weight: 700; }
.tbo-sante-carte__spec { margin: 0; color: var(--wp--preset--color--rouille, #C04D25); font-weight: 600; font-size: 14px; }
.tbo-sante-carte__adr,
.tbo-sante-carte__contact { margin: 0; font-size: 14px; color: var(--wp--preset--color--secondaire, #6B5F55); }
.tbo-sante-carte__contact a { text-decoration: none; font-weight: 600; }
.tbo-sante-carte__comm { margin: .2rem 0 0; font-size: 14px; font-style: italic; }
.tbo-sante-carte__rdv { margin: .4rem 0 0; }
.tbo-sante-carte__rdv .wp-element-button { font-size: 14px; padding: .4rem 1rem; }
.tbo-sante-carte__badges { display: flex; flex-wrap: wrap; gap: .3rem; margin: .1rem 0; }
.tbo-sante-badge {
	display: inline-block;
	padding: .12rem .6rem;
	border-radius: 999px;
	font-size: 12px;
	font-weight: 700;
	background: var(--wp--preset--color--creme, #F8F1E4);
	color: var(--wp--preset--color--cuir, #745330);
}
.tbo-sante-badge.is-safe { background: #e3f1e3; color: #2e6b34; }
.tbo-sante-badge.is-prep { background: var(--wp--preset--color--moutarde, #F1CF5A); color: #4a3b0d; }
.tbo-sante-badge.is-trans { background: #e6e9f7; color: #35427a; }
.tbo-sante-badge.is-secteur { background: #efe6dc; color: var(--wp--preset--color--cuir, #745330); }

/* Règle 66 — Boutique (blocs WooCommerce) : aligner les cartes et les boutons
   malgré des photos de formats différents (goodies en paysage, textile en
   portrait). On NE recadre pas les images : chaque visuel est placé ENTIER dans
   un cadre de hauteur fixe (object-fit: contain, centré sur crème), et la carte
   devient une colonne flex dont le bouton est poussé en bas — prix et boutons
   s'alignent alors sur toute la ligne. Demande de Thierry (13/08). */
.wc-block-product {
	display: flex;
	flex-direction: column;
	height: 100%;
}
/* Cadre d'image uniforme, image entière non rognée. */
.wc-block-product .wp-block-woocommerce-product-image,
.wc-block-product .wc-block-components-product-image,
.wc-block-product .wc-block-components-product-image__inner-container,
.wc-block-product .wc-block-components-product-image__inner-container > a {
	display: block;
	width: 100%;
}
.wc-block-product .wc-block-components-product-image img {
	width: 100%;
	height: 240px;
	object-fit: contain;
	background: var(--wp--preset--color--creme, #F8F1E4);
	border-radius: var(--wp--custom--radius--carte, 16px);
}
/* Le bouton « Ajouter au panier » collé au bas de la carte → alignement. */
.wc-block-product .wp-block-woocommerce-product-button {
	margin-top: auto;
}
.wc-block-product .wp-block-woocommerce-product-price,
.wc-block-product .wp-block-post-title {
	margin-top: .4rem;
}
@media (max-width: 600px) {
	.wc-block-product .wc-block-components-product-image img { height: 200px; }
}

/* Règle 67 — Actualités filtrables ([tbo_actualites]) : cartes en grille avec
   image 16:9, tags, et la barre de recherche/puces réutilisée des partenaires
   (.tbo-part-*). Demande de Thierry (16/08). */
.tbo-actu-f .tbo-part-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: var(--wp--preset--spacing--40, 1.5rem); }
.tbo-actu-c { overflow: hidden; display: flex; flex-direction: column; text-align: left; padding: 0; min-width: 0; }
/* Cadre d'image à hauteur fixe, image ENTIÈRE (object-fit: contain) centrée sur
   crème : les couvertures portrait (newsletters) comme les photos paysage
   s'affichent en entier sans être rognées, et les cartes restent alignées.
   ⚠️ La hauteur est posée DIRECTEMENT sur l'image (240px), pas via height:100%
   du parent : iOS/Safari ignore parfois object-fit quand la hauteur vient d'un
   parent flex, et l'image débordait alors à sa hauteur naturelle (bug constaté
   chez un membre sous Safari iOS, pas sur Android/Chrome). max-width en filet. */
.tbo-actu-c__img { display: block; background: var(--wp--preset--color--creme, #F8F1E4); }
.tbo-actu-c__img img { display: block; width: 100%; max-width: 100%; height: 240px; object-fit: contain; }
.tbo-actu-c__vide { height: 240px; display: flex; align-items: center; justify-content: center; font-size: 2.4rem; text-decoration: none; }
.tbo-actu-c__corps { padding: 1rem 1.1rem 1.2rem; display: flex; flex-direction: column; gap: .4rem; }
.tbo-actu-c__date { margin: 0; font-size: 13px; color: var(--wp--preset--color--secondaire, #6B5F55); }
.tbo-actu-c__titre { margin: 0; font-size: 20px; line-height: 1.25; font-family: var(--wp--preset--font-family--poppins, inherit); font-weight: 700; }
.tbo-actu-c__titre a { text-decoration: none; }
.tbo-actu-c__extrait { margin: 0; font-size: 15px; color: var(--wp--preset--color--secondaire, #6B5F55); }
.tbo-actu-c__tags { display: flex; flex-wrap: wrap; gap: .3rem; margin-top: .2rem; }
.tbo-actu-c__tag { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .02em; color: var(--wp--preset--color--rouille, #C04D25); background: var(--wp--preset--color--creme, #F8F1E4); border-radius: 999px; padding: 2px 9px; }
.tbo-actu-c__suite { margin: .5rem 0 0; }
.tbo-actu-c__suite a { font-weight: 700; font-size: 14px; color: var(--wp--preset--color--rouille, #C04D25); text-decoration: none; }
.tbo-actu-c__suite a:hover { text-decoration: underline; }

/* Règle 68 — Frise décorative « monuments de Toulouse » ([tbo_frise]) en bas des
   bandeaux d'en-tête crème (Événements, Partenaires, Sponsors). Demande de
   Thierry (17/08) : de la texture et une identité locale, sans alourdir. Le ciel
   crème de l'illustration se fond dans le bandeau ; les monuments forment la base,
   le titre flotte au-dessus. Pleine largeur (100vw) même dans un conteneur
   « constrained » ; marge basse négative pour venir affleurer le bord du bandeau.
   Hauteur plafonnée et rognée (object-fit) pour rester une frise, jamais un pavé. */
.tbo-frise { width: 100vw; margin-left: calc(50% - 50vw); margin-top: var(--wp--preset--spacing--40, 1.5rem); margin-bottom: calc(-1 * var(--wp--preset--spacing--60, 3rem)); line-height: 0; pointer-events: none; }
/* Chaque page a sa frise ([tbo_frise key="…"]), de proportions variées. On les
   affiche TOUJOURS en entier (height:auto) : aucune n'est jamais rognée, quelle
   que soit sa hauteur. */
.tbo-frise img { display: block; width: 100%; height: auto; }

/* Règle 69 — Associations bears : repli quand une fiche n'a pas de logo (fréquent
   pour les clubs sœurs saisis sans visuel). On affiche les initiales dans une
   pastille moutarde, à la place d'un cadre vide. Demande de Thierry (17/08). */
.tbo-logo-vide { display: flex; align-items: center; justify-content: center; width: 100px; height: 100px; border-radius: 50%; background: var(--wp--preset--color--moutarde, #F1CF5A); color: var(--wp--preset--color--cuir, #745330); font-family: var(--wp--preset--font-family--poppins, inherit); font-weight: 800; font-size: 32px; letter-spacing: .02em; }
@media (max-width: 600px) { .tbo-logo-vide { width: 72px; height: 72px; font-size: 24px; } }

/* Règle 70 — Fiche partenaire/sponsor/association : le LOGO s'affiche en entier
   (jamais rogné). Le gabarit hérité mettait l'image mise en avant en 3:2 cover,
   ce qui coupait les logos (retour Thierry, 17/08). Ici : contain, plafonné,
   centré sur crème. */
.tbo-fiche-logo { text-align: center; margin: 0 auto 1rem; }
.tbo-fiche-logo img { display: inline-block; width: auto !important; height: auto !important; max-height: 200px; max-width: min(100%, 460px); object-fit: contain; aspect-ratio: auto !important; border-radius: var(--wp--custom--radius--petit, 14px); }
@media (max-width: 600px) { .tbo-fiche-logo img { max-height: 150px; } }

/* Règle 71 — En-tête MOBILE (refonte navigation, 18/08). Ordinateur inchangé.
   Loupe au centre, panier + burger à droite ; les langues quittent la barre et
   passent en bas du menu déroulé (dernier <li> injecté par tbo_menu_principal). */
.tbo-nav__lang-li { display: none; }
@media (max-width: 959px) {
	.tbo-header__right { flex: 1 1 auto; min-width: 0; }
	.tbo-header__right .tbo-search { order: 1; margin-right: auto; }
	.tbo-header__right .tbo-panier { order: 2; }
	.tbo-header__right .tbo-nav { order: 3; }
	.tbo-header__right .tbo-langswitch { display: none; }
	.tbo-nav__lang-li { display: block; padding: 14px 4px 6px; border-bottom: 0; }
	.tbo-nav__lang-li .tbo-langswitch { display: inline-flex; }
}

/* Règle 72 — Argumentaire « compte membre » (écran déconnecté de l'espace membre).
   Le site est un outil pour les membres : on montre ce qu'un compte ouvre. */
.tbo-em-promo { max-width: 640px; }
.tbo-em-promo h2 { margin: .2rem 0 .6rem; }
.tbo-em-promo__intro { color: var(--wp--preset--color--secondaire); }
.tbo-em-promo__liste { list-style: none; padding: 0; margin: 1.2rem 0; display: grid; gap: .8rem; }
.tbo-em-promo__liste li { display: flex; gap: .8rem; align-items: flex-start; background: var(--wp--preset--color--creme); border-radius: var(--wp--custom--radius--petit, 14px); padding: .9rem 1rem; }
.tbo-em-promo__ic { font-size: 1.5rem; line-height: 1; flex: none; }
.tbo-em-promo__actions { display: flex; flex-wrap: wrap; gap: .6rem; margin: 1.2rem 0 .6rem; }
.tbo-em-promo__memo { font-size: 13.5px; color: var(--wp--preset--color--secondaire); }

/* ==========================================================================
   Règle 73 — Accueil sur iPhone : cartes en grille qui débordaient.
   Un élément de grille garde `min-width:auto` : sur iOS Safari, la largeur
   intrinsèque de l'image mise en avant (photo de newsletter en 1207 px de large)
   empêchait la colonne de rétrécir → débordement horizontal de la page et
   dézoom automatique. On autorise le rétrécissement et on borne l'image à sa
   carte. Portée : les boucles Query (accueil) et les cartes .tbo-carte.
   ========================================================================== */
.wp-block-query .wp-block-post-template { min-width: 0; }
.wp-block-query .wp-block-post-template > li { min-width: 0; }
.tbo-carte { min-width: 0; overflow: hidden; }
.tbo-carte .wp-block-post-featured-image { min-width: 0; max-width: 100%; }
.tbo-carte .wp-block-post-featured-image img { max-width: 100%; }
