/**
 * Factualité Afrique — Monitoring
 * Feuille de style publique.
 *
 * Contraintes d'intégration :
 *  - The7 place le menu principal dans une colonne latérale gauche : la zone de
 *    contenu est plus étroite que la fenêtre. Aucune règle ne s'appuie donc sur
 *    la largeur du viewport ; les grilles utilisent auto-fit + minmax et, quand
 *    un point de rupture est nécessaire, une container query sur .fam-scope.
 *  - Aucune couleur n'est écrite en dur : tout provient des variables injectées
 *    par FAM_Assets::css_variables(), elles-mêmes issues des réglages ou de la
 *    couleur d'accent du thème.
 *  - Les sélecteurs restent préfixés .fam- et scopés sous .fam-scope pour ne pas
 *    entrer en conflit avec les styles du thème ou d'Elementor.
 */

.fam-scope {
	container-type: inline-size;
	color: var(--fam-text);
	font-size: 1rem;
	line-height: 1.6;
	max-width: 100%;
	box-sizing: border-box;
}

.fam-scope *,
.fam-scope *::before,
.fam-scope *::after {
	box-sizing: inherit;
}

.fam-scope img {
	max-width: 100%;
	height: auto;
}

/* ---------------------------------------------------------------- Structure */

.fam-panel {
	display: flex;
	flex-direction: column;
	gap: var(--fam-section);
	margin: 0 0 var(--fam-section);
}

.fam-title {
	margin: 0;
	font-size: clamp(1.5rem, 1.1rem + 1.4cqi, 2.1rem);
	font-weight: 800;
	line-height: 1.2;
	color: var(--fam-primary-dark);
	letter-spacing: -0.01em;
}

.fam-subtitle {
	margin: 0 0 0.75rem;
	font-size: 1.15rem;
	font-weight: 700;
	color: var(--fam-primary-dark);
}

.fam-intro {
	margin: 0;
	max-width: 68ch;
	color: rgba(var(--fam-primary-rgb), 0.85);
}

.fam-meta-line,
.fam-results-count {
	margin: 0;
	font-size: 0.9rem;
	color: rgba(0, 0, 0, 0.6);
}

/* -------------------------------------------------------------- Chiffres clés
   La bande reprend le motif de vague verte de l'en-tête du site : dégradé doux
   en diagonale, sans image, qui reste lisible quelle que soit la largeur. */

.fam-band {
	position: relative;
	overflow: hidden;
	border-radius: var(--fam-radius);
	padding: clamp(1.25rem, 3cqi, 2rem);
	background:
		radial-gradient(120% 140% at 100% 0%, rgba(var(--fam-primary-rgb), 0.16) 0%, transparent 60%),
		linear-gradient(135deg, var(--fam-primary-pale) 0%, rgba(255, 255, 255, 0.6) 55%, var(--fam-primary-pale) 100%);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.18);
}

.fam-counters {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 165px), 1fr));
	gap: var(--fam-gap);
}

.fam-counter {
	display: flex;
	flex-direction: column;
	gap: 0.25rem;
	padding: 0.5rem 0.25rem;
	border-left: 3px solid var(--fam-primary);
	padding-left: 0.9rem;
}

.fam-counter__value {
	font-size: clamp(1.75rem, 1.2rem + 2cqi, 2.6rem);
	font-weight: 800;
	line-height: 1;
	color: var(--fam-primary-dark);
	font-variant-numeric: tabular-nums;
}

.fam-counter__label {
	font-size: 0.8rem;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: rgba(0, 0, 0, 0.6);
}

/* ---------------------------------------------------------------- Graphiques */

.fam-charts {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
	gap: var(--fam-gap);
}

.fam-chart {
	margin: 0;
	padding: 1.25rem;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.16);
	border-radius: var(--fam-radius);
}

@container (min-width: 720px) {
	.fam-chart--wide {
		grid-column: span 2;
	}
}

.fam-chart__title {
	margin-bottom: 0.9rem;
	font-size: 0.85rem;
	font-weight: 700;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

.fam-chart__canvas {
	position: relative;
	min-height: 240px;
}

.fam-chart__canvas canvas {
	max-width: 100%;
}

/* ------------------------------------------------------------------- Filtres */

.fam-filters {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: var(--fam-gap);
	padding: 1rem;
	background: rgba(var(--fam-primary-rgb), 0.05);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.14);
	border-radius: var(--fam-radius);
}

.fam-field {
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
	min-width: 0;
	flex: 1 1 180px;
}

.fam-field--grow {
	flex: 3 1 240px;
}

.fam-label {
	font-size: 0.78rem;
	font-weight: 700;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

.fam-scope input[type="text"],
.fam-scope input[type="search"],
.fam-scope input[type="date"],
.fam-scope input[type="url"],
.fam-scope input[type="email"],
.fam-scope select,
.fam-scope textarea {
	width: 100%;
	max-width: 100%;
	padding: 0.6rem 0.75rem;
	font: inherit;
	color: var(--fam-text);
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.28);
	border-radius: calc(var(--fam-radius) * 0.55);
	transition: border-color 0.18s ease, box-shadow 0.18s ease;
}

.fam-scope textarea {
	resize: vertical;
	min-height: 8rem;
}

.fam-scope input:focus-visible,
.fam-scope select:focus-visible,
.fam-scope textarea:focus-visible,
.fam-scope button:focus-visible,
.fam-scope a:focus-visible {
	outline: 2px solid var(--fam-primary);
	outline-offset: 2px;
	border-color: var(--fam-primary);
	box-shadow: 0 0 0 3px rgba(var(--fam-primary-rgb), 0.15);
}

.fam-help {
	margin: 0;
	font-size: 0.82rem;
	color: rgba(0, 0, 0, 0.58);
}

.fam-req {
	color: var(--fam-alert);
}

/* ------------------------------------------------------------------- Boutons */

.fam-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	padding: 0.65rem 1.4rem;
	font: inherit;
	font-weight: 700;
	line-height: 1.2;
	color: var(--fam-primary-dark);
	background: transparent;
	border: 2px solid var(--fam-primary);
	border-radius: calc(var(--fam-radius) * 0.6);
	cursor: pointer;
	text-decoration: none;
	transition: background-color 0.18s ease, color 0.18s ease, transform 0.18s ease;
}

.fam-btn:hover {
	background: rgba(var(--fam-primary-rgb), 0.1);
}

.fam-btn--primary {
	color: #fff;
	background: var(--fam-primary);
}

.fam-btn--primary:hover {
	background: var(--fam-primary-dark);
	border-color: var(--fam-primary-dark);
}

.fam-btn[disabled] {
	opacity: 0.55;
	cursor: progress;
}

.fam-more {
	display: flex;
	justify-content: center;
}

/* --------------------------------------------------------------------- Cartes */

.fam-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr));
	gap: var(--fam-gap);
	align-items: start;
}

.fam-grid--profiles {
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 230px), 1fr));
}

.fam-card {
	display: flex;
	flex-direction: column;
	gap: 0.65rem;
	height: 100%;
	padding: 1.25rem;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.16);
	border-left: 4px solid var(--fam-primary);
	border-radius: var(--fam-radius);
	transition: transform 0.2s ease, box-shadow 0.2s ease, border-left-color 0.2s ease;
}

.fam-card:hover {
	transform: translateY(-3px);
	box-shadow: 0 12px 28px rgba(var(--fam-primary-rgb), 0.14);
	border-left-color: var(--fam-accent);
}

.fam-card--hostile {
	border-left-color: var(--fam-alert);
}

.fam-card__head {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
}

.fam-card__date {
	font-size: 0.82rem;
	font-weight: 700;
	color: var(--fam-primary-mid);
	font-variant-numeric: tabular-nums;
}

.fam-card__title {
	margin: 0;
	font-size: 1.05rem;
	font-weight: 700;
	line-height: 1.35;
}

.fam-card__title a {
	color: var(--fam-primary-dark);
	text-decoration: none;
}

.fam-card__title a:hover {
	text-decoration: underline;
}

.fam-card__location {
	display: flex;
	align-items: center;
	gap: 0.4rem;
	margin: 0;
	font-size: 0.9rem;
	font-weight: 600;
	overflow-wrap: anywhere;
}

.fam-card__pin {
	width: 0.55rem;
	height: 0.55rem;
	flex: 0 0 auto;
	border-radius: 50%;
	background: var(--fam-primary);
	box-shadow: 0 0 0 3px rgba(var(--fam-primary-rgb), 0.18);
}

.fam-card__excerpt {
	margin: 0;
	font-size: 0.92rem;
	color: rgba(0, 0, 0, 0.72);
}

.fam-card__foot {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin-top: auto;
	padding-top: 0.75rem;
	border-top: 1px solid rgba(var(--fam-primary-rgb), 0.12);
}

.fam-card__testimonies,
.fam-card__verification {
	margin: 0;
	font-size: 0.78rem;
	color: rgba(0, 0, 0, 0.55);
}

.fam-stat {
	font-size: 0.82rem;
	color: rgba(0, 0, 0, 0.7);
}

.fam-stat strong {
	color: var(--fam-primary-dark);
	font-variant-numeric: tabular-nums;
}

.fam-stat--alert strong {
	color: var(--fam-alert);
}

.fam-chip {
	display: inline-block;
	padding: 0.2rem 0.6rem;
	font-size: 0.7rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--fam-primary-dark);
	background: rgba(var(--fam-primary-rgb), 0.12);
	border-radius: 999px;
}

.fam-chip--type {
	background: rgba(var(--fam-accent-rgb), 0.28);
}

.fam-chip--status {
	background: rgba(var(--fam-alert-rgb), 0.12);
	color: var(--fam-alert);
}

/* La pastille de vérification encode une information réelle : on la différencie
   par la couleur du liseré, pas seulement par le texte. */
.fam-verif {
	padding-left: 0.6rem;
	border-left: 3px solid rgba(0, 0, 0, 0.2);
}

.fam-verif--verified {
	border-left-color: var(--fam-primary);
}

.fam-verif--corroborated {
	border-left-color: var(--fam-primary-soft);
}

.fam-verif--single {
	border-left-color: var(--fam-accent);
}

.fam-verif--unverified {
	border-left-color: var(--fam-alert);
}

/* -------------------------------------------------------------------- Profils */

.fam-profile {
	display: flex;
	flex-direction: column;
	overflow: hidden;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.16);
	border-radius: var(--fam-radius);
}

.fam-profile__media {
	position: relative;
	aspect-ratio: 4 / 5;
	background: rgba(var(--fam-primary-rgb), 0.08);
	display: flex;
	align-items: center;
	justify-content: center;
}

.fam-profile__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.fam-profile__placeholder {
	font-size: 3rem;
	font-weight: 800;
	color: rgba(var(--fam-primary-rgb), 0.35);
}

.fam-profile__body {
	display: flex;
	flex-direction: column;
	gap: 0.45rem;
	padding: 1rem;
}

.fam-profile__name {
	margin: 0;
	font-size: 1rem;
	font-weight: 700;
}

.fam-profile__name a {
	color: var(--fam-primary-dark);
	text-decoration: none;
}

.fam-profile__org,
.fam-profile__excerpt {
	margin: 0;
	font-size: 0.86rem;
	color: rgba(0, 0, 0, 0.68);
}

/* -------------------------------------------------------------------- Onglets */

.fam-tabs {
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem;
	border-bottom: 2px solid rgba(var(--fam-primary-rgb), 0.15);
}

.fam-tab {
	padding: 0.7rem 1.1rem;
	font: inherit;
	font-weight: 700;
	color: rgba(0, 0, 0, 0.6);
	background: none;
	border: 0;
	border-bottom: 3px solid transparent;
	margin-bottom: -2px;
	cursor: pointer;
}

.fam-tab.is-active {
	color: var(--fam-primary-dark);
	border-bottom-color: var(--fam-primary);
}

.fam-tabpanel[hidden] {
	display: none;
}

.fam-tabpanel {
	display: flex;
	flex-direction: column;
	gap: var(--fam-gap);
	padding-top: var(--fam-gap);
}

/* ----------------------------------------------------------------- Formulaires */

.fam-formwrap {
	padding: clamp(1.25rem, 3cqi, 2rem);
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.18);
	border-radius: var(--fam-radius);
}

.fam-form {
	display: flex;
	flex-direction: column;
	gap: var(--fam-gap);
}

.fam-form__row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--fam-gap);
}

.fam-form__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--fam-gap);
}

.fam-form__feedback {
	font-size: 0.9rem;
	font-weight: 600;
}

.fam-form__feedback.is-error {
	color: var(--fam-alert);
}

.fam-form__feedback.is-ok {
	color: var(--fam-primary);
}

/* Pot de miel : masqué visuellement sans display:none, que certains robots
   détectent, et retiré de l'ordre de tabulation. */
.fam-honeypot {
	position: absolute !important;
	left: -9999px !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

.fam-notice {
	padding: 0.9rem 1.1rem;
	margin-bottom: var(--fam-gap);
	border-radius: calc(var(--fam-radius) * 0.6);
	font-weight: 600;
}

.fam-notice--ok {
	color: var(--fam-primary-dark);
	background: rgba(var(--fam-primary-rgb), 0.12);
	border-left: 4px solid var(--fam-primary);
}

.fam-notice--error {
	color: var(--fam-alert);
	background: rgba(var(--fam-alert-rgb), 0.1);
	border-left: 4px solid var(--fam-alert);
}

.fam-privacy {
	font-size: 0.85rem;
	color: rgba(0, 0, 0, 0.6);
}

/* ----------------------------------------------------------------- Fiche détail */

.fam-deflist {
	margin: 0;
	display: grid;
	gap: 0;
	border: 1px solid rgba(var(--fam-primary-rgb), 0.16);
	border-radius: var(--fam-radius);
	overflow: hidden;
}

.fam-deflist__row {
	display: grid;
	grid-template-columns: minmax(9rem, 30%) 1fr;
	gap: 0.75rem;
	padding: 0.7rem 1rem;
	border-bottom: 1px solid rgba(var(--fam-primary-rgb), 0.1);
}

.fam-deflist__row:last-child {
	border-bottom: 0;
}

.fam-deflist__row:nth-child(odd) {
	background: rgba(var(--fam-primary-rgb), 0.04);
}

.fam-deflist dt {
	margin: 0;
	font-size: 0.82rem;
	font-weight: 700;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

.fam-deflist dd {
	margin: 0;
	overflow-wrap: anywhere;
}

@container (max-width: 480px) {
	.fam-deflist__row {
		grid-template-columns: 1fr;
		gap: 0.2rem;
	}
}

.fam-sources {
	margin: 0;
	padding-left: 1.1rem;
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
}

.fam-sources a,
.fam-link {
	color: var(--fam-primary);
	overflow-wrap: anywhere;
}

.fam-gallery {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 140px), 1fr));
	gap: 0.6rem;
}

.fam-gallery__item {
	display: block;
	overflow: hidden;
	border-radius: calc(var(--fam-radius) * 0.5);
	line-height: 0;
}

.fam-gallery__item img {
	width: 100%;
	aspect-ratio: 1;
	object-fit: cover;
	transition: transform 0.25s ease;
}

.fam-gallery__item:hover img {
	transform: scale(1.05);
}

.fam-disclaimer {
	margin: 0;
	padding: 0.85rem 1rem;
	font-size: 0.85rem;
	color: rgba(0, 0, 0, 0.65);
	background: rgba(var(--fam-primary-rgb), 0.05);
	border-left: 3px solid var(--fam-primary-soft);
	border-radius: calc(var(--fam-radius) * 0.4);
}

/* ---------------------------------------------------------------- Témoignages */

.fam-testimony-list {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: var(--fam-gap);
	counter-reset: fam-testimony;
}

.fam-testimony {
	padding: 1.1rem 1.25rem;
	background: rgba(var(--fam-primary-rgb), 0.04);
	border-left: 3px solid var(--fam-primary-soft);
	border-radius: calc(var(--fam-radius) * 0.5);
}

.fam-testimony__quote {
	margin: 0;
	font-style: italic;
}

.fam-testimony__quote p:last-child {
	margin-bottom: 0;
}

.fam-testimony__foot {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
	margin-top: 0.6rem;
	font-size: 0.82rem;
	color: rgba(0, 0, 0, 0.6);
}

.fam-testimony__foot cite {
	font-style: normal;
	font-weight: 700;
}

/* ---------------------------------------------------------------------- Listes */

.fam-list {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
}

.fam-list__item {
	padding: 0.9rem 1rem;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.14);
	border-radius: calc(var(--fam-radius) * 0.6);
}

.fam-list__item p {
	margin: 0.35rem 0 0;
}

.fam-list__meta {
	font-size: 0.8rem;
	font-weight: 700;
	color: var(--fam-primary-mid);
}

.fam-legend {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
	font-size: 0.9rem;
}

.fam-legend li {
	display: flex;
	justify-content: space-between;
	gap: 1rem;
	border-bottom: 1px dotted rgba(0, 0, 0, 0.15);
	padding-bottom: 0.2rem;
}

.fam-table {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.9rem;
}

.fam-table th,
.fam-table td {
	padding: 0.4rem 0.6rem;
	border-bottom: 1px solid rgba(0, 0, 0, 0.1);
	text-align: left;
}

.fam-empty {
	grid-column: 1 / -1;
	margin: 0;
	padding: 2rem 1rem;
	text-align: center;
	color: rgba(0, 0, 0, 0.55);
	background: rgba(var(--fam-primary-rgb), 0.04);
	border: 1px dashed rgba(var(--fam-primary-rgb), 0.25);
	border-radius: var(--fam-radius);
}

/* ----------------------------------------------------------------------- Carte
   Leaflet empile tuiles, tracés, marqueurs et popups avec des z-index internes
   (200 à 700). Les écraser casse la carte : les marqueurs passent sous les
   tuiles et les contrôles deviennent inutilisables. On isole donc la carte du
   reste de la page avec `isolation`, qui crée un contexte d'empilement local
   sans toucher aux couches internes.

   The7 applique aussi `img { max-width: 100% }` et des styles sur les liens :
   appliqués aux tuiles, ils produisent la fameuse carte « en escalier ». Les
   règles ci-dessous neutralisent ces héritages, uniquement dans la carte. */

.fam-map {
	position: relative;
	width: 100%;
	min-height: 240px;
	border-radius: var(--fam-radius);
	overflow: hidden;
	border: 1px solid rgba(var(--fam-primary-rgb), 0.18);
	background: rgba(var(--fam-primary-rgb), 0.05);
	isolation: isolate;
}

.fam-map .leaflet-container {
	width: 100%;
	height: 100%;
	font: inherit;
	background: rgba(var(--fam-primary-rgb), 0.05);
}

/* Neutralise les décorations d'images héritées du thème, sans jamais toucher
   aux dimensions : Leaflet calcule lui-même la taille de chaque tuile, et
   forcer width/height ici produit une carte en escalier ou vide. */
.fam-map .leaflet-container img {
	max-width: none !important;
	max-height: none !important;
	padding: 0;
	margin: 0;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	background: none;
	vertical-align: initial;
}

.fam-map .leaflet-tile-pane img {
	image-rendering: auto;
}

.fam-map .leaflet-container a {
	background: none;
	box-shadow: none;
	text-decoration: none;
}

.fam-map .leaflet-popup-content {
	margin: 0.75rem 0.9rem;
	font-size: 0.9rem;
	line-height: 1.5;
}

.fam-map .leaflet-popup-content a {
	color: var(--fam-primary);
	font-weight: 700;
}

.fam-map .leaflet-popup-content-wrapper {
	border-radius: calc(var(--fam-radius) * 0.6);
}

.fam-map .leaflet-bar a {
	color: var(--fam-primary-dark);
	line-height: 26px;
}

/* Légende et actions posées au-dessus de la carte, dans son contexte isolé. */

.fam-map__legend {
	position: absolute;
	right: 0.75rem;
	bottom: 2.6rem;
	z-index: 500;
	display: flex;
	flex-direction: column;
	gap: 0.3rem;
	padding: 0.6rem 0.75rem;
	font-size: 0.75rem;
	line-height: 1.3;
	background: color-mix(in srgb, var(--fam-surface) 92%, transparent);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.2);
	border-radius: calc(var(--fam-radius) * 0.5);
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12);
	pointer-events: none;
}

.fam-map__legend strong {
	font-size: 0.7rem;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

.fam-map__legend span {
	display: flex;
	align-items: center;
	gap: 0.45rem;
}

.fam-map__legend i {
	display: inline-block;
	border-radius: 50%;
	background: rgba(var(--fam-alert-rgb), 0.75);
	border: 2px solid #fff;
}

.fam-map__hint {
	position: absolute;
	inset: auto 0 0 0;
	z-index: 500;
	padding: 0.35rem 0.75rem;
	font-size: 0.72rem;
	color: rgba(0, 0, 0, 0.6);
	background: color-mix(in srgb, var(--fam-surface) 85%, transparent);
	pointer-events: none;
}

.fam-map__fallback {
	display: flex;
	align-items: center;
	justify-content: center;
	height: 100%;
	min-height: 240px;
	padding: 2rem;
	text-align: center;
	color: rgba(0, 0, 0, 0.6);
}

.fam-marker {
	background: var(--fam-alert);
	border: 2px solid #fff;
	border-radius: 50%;
	box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
}

/* ------------------------------------------------------------------ Chargement */

.fam-grid.is-loading {
	opacity: 0.45;
	pointer-events: none;
	transition: opacity 0.2s ease;
}

/* ------------------------------------------------------------- Accessibilité */

@media (prefers-reduced-motion: reduce) {
	.fam-scope *,
	.fam-scope *::before,
	.fam-scope *::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
	}

	.fam-card:hover {
		transform: none;
	}
}

@media print {
	.fam-filters,
	.fam-more,
	.fam-form,
	.fam-map {
		display: none !important;
	}

	.fam-card {
		break-inside: avoid;
		border: 1px solid #999;
	}
}

/* ==========================================================================
   v3 — Pages autonomes, hub, fiche unique, filtres actifs
   ========================================================================== */

/* Enveloppe des gabarits fournis par le plugin. Volontairement sobre : elle ne
   redéfinit ni l'en-tête ni le pied de page du thème, seulement une colonne de
   lecture qui reste correcte à l'intérieur d'une zone de contenu réduite. */

/* The7 peut placer son en-tête en colonne latérale fixe. Les gabarits autonomes
   du plugin ne vivent pas dans le conteneur du thème : sans compensation, ils
   passent sous ce menu. Les deux variables sont mesurées à l'exécution par le
   script public, qui repère tout élément fixe collé à un bord de la fenêtre.
   Valeur nulle par défaut : un thème sans colonne latérale n'est pas affecté. */

.fam-page {
	--fam-side-start: 0px;
	--fam-side-end: 0px;

	box-sizing: border-box;
	max-width: 100%;
	padding-block: clamp(1.5rem, 4vw, 3.5rem);
	padding-inline-start: calc(clamp(1rem, 4vw, 2.5rem) + var(--fam-side-start));
	padding-inline-end: calc(clamp(1rem, 4vw, 2.5rem) + var(--fam-side-end));
	overflow-x: clip;
}

/* Tant que la mesure n'a pas eu lieu, on évite un saut visible en masquant
   uniquement le décalage, pas le contenu. */
.fam-page:not(.is-aligned) {
	transition: padding 0.15s ease;
}

.fam-page__inner {
	width: 100%;
	max-width: 1180px;
	margin-inline: auto;
}

.fam-page__head {
	margin-bottom: var(--fam-section);
}

.fam-eyebrow {
	margin: 0 0 0.5rem;
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

.fam-backlink {
	margin: var(--fam-section) 0 0;
}

.fam-pagination {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.4rem;
	margin-top: var(--fam-section);
}

.fam-pagination .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.4rem;
	height: 2.4rem;
	padding: 0 0.65rem;
	font-weight: 700;
	color: var(--fam-primary-dark);
	text-decoration: none;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.22);
	border-radius: calc(var(--fam-radius) * 0.5);
}

.fam-pagination .page-numbers.current {
	color: #fff;
	background: var(--fam-primary);
	border-color: var(--fam-primary);
}

.fam-pagination .page-numbers:hover {
	background: rgba(var(--fam-primary-rgb), 0.1);
}

/* ------------------------------------------------------------------- Hub
   La grille de modules est le point d'entrée : un bloc par verticale, avec le
   volume réel de fiches, pour que le visiteur sache où il met les pieds. */

.fam-modules {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
	gap: var(--fam-gap);
}

.fam-module {
	position: relative;
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
	padding: 1.5rem 1.5rem 3rem;
	color: inherit;
	text-decoration: none;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.18);
	border-radius: var(--fam-radius);
	transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
	overflow: hidden;
}

.fam-module::before {
	content: "";
	position: absolute;
	inset: auto -30% -55% auto;
	width: 70%;
	aspect-ratio: 1;
	border-radius: 50%;
	background: rgba(var(--fam-primary-rgb), 0.07);
	transition: transform 0.35s ease;
}

.fam-module:hover {
	transform: translateY(-4px);
	border-color: var(--fam-primary);
	box-shadow: 0 16px 32px rgba(var(--fam-primary-rgb), 0.16);
}

.fam-module:hover::before {
	transform: scale(1.25);
}

.fam-module__label {
	position: relative;
	font-size: 1.15rem;
	font-weight: 800;
	color: var(--fam-primary-dark);
}

.fam-module__count {
	position: relative;
	font-size: 0.85rem;
	color: var(--fam-primary-mid);
}

.fam-module__count strong {
	font-size: 1.5rem;
	font-variant-numeric: tabular-nums;
}

.fam-module__text {
	position: relative;
	font-size: 0.9rem;
	color: rgba(0, 0, 0, 0.7);
}

.fam-module__go {
	position: absolute;
	left: 1.5rem;
	bottom: 1.25rem;
	font-size: 1.3rem;
	font-weight: 700;
	color: var(--fam-primary);
	transition: transform 0.2s ease;
}

.fam-module:hover .fam-module__go {
	transform: translateX(6px);
}

/* --------------------------------------------------------- Fiche unique */

.fam-record__hero {
	padding-bottom: var(--fam-gap);
	margin-bottom: var(--fam-section);
	border-bottom: 3px solid rgba(var(--fam-primary-rgb), 0.15);
}

.fam-record__place {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem;
	margin: 0.75rem 0 0;
	font-weight: 600;
}

.fam-record__figures {
	display: flex;
	flex-wrap: wrap;
	gap: 1.5rem;
	margin-top: 1.25rem;
}

.fam-figure {
	display: flex;
	flex-direction: column;
	font-size: 0.8rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: rgba(0, 0, 0, 0.6);
}

.fam-figure strong {
	font-size: 2rem;
	line-height: 1.1;
	color: var(--fam-alert);
	font-variant-numeric: tabular-nums;
}

.fam-record__media {
	margin: 0 0 var(--fam-section);
	border-radius: var(--fam-radius);
	overflow: hidden;
}

.fam-record__body {
	max-width: 72ch;
	font-size: 1.05rem;
}

/* -------------------------------------------------------- Filtres actifs */

.fam-active-filters {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem;
	margin: 0;
}

.fam-active-filters:empty {
	display: none;
}

.fam-active-filter {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.25rem 0.35rem 0.25rem 0.7rem;
	font-size: 0.8rem;
	font-weight: 600;
	color: var(--fam-primary-dark);
	background: rgba(var(--fam-primary-rgb), 0.12);
	border-radius: 999px;
}

.fam-active-filter button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 1.15rem;
	height: 1.15rem;
	padding: 0;
	font-size: 0.85rem;
	line-height: 1;
	color: inherit;
	background: rgba(255, 255, 255, 0.7);
	border: 0;
	border-radius: 50%;
	cursor: pointer;
}

.fam-active-filter button:hover {
	background: #fff;
	color: var(--fam-alert);
}

.fam-filters.is-sticky {
	position: sticky;
	top: var(--fam-sticky-top, 0px);
	z-index: 5;
	backdrop-filter: blur(6px);
	background: color-mix(in srgb, var(--fam-surface) 88%, transparent);
}

/* ---------------------------------------------------- Indicateurs admin */

.fam-verif-dot {
	display: inline-block;
	width: 0.6rem;
	height: 0.6rem;
	border-radius: 50%;
	background: #b3261e;
}

.fam-verif-dot--verified {
	background: #136c1a;
}

.fam-verif-dot--corroborated {
	background: #5c7737;
}

.fam-verif-dot--single {
	background: #d1d157;
}

/* ==========================================================================
   v4 — Synthèse analytique, vues multiples, filtres avancés
   ========================================================================== */

/* ------------------------------------------------------ Synthèse analytique
   Le bloc est traité comme une page dans la page : un fond légèrement teinté,
   une règle épaisse en tête, et des encarts qui portent chacun une seule idée.
   La couleur ne code jamais seule une information : chaque delta est aussi
   signé, chaque niveau de vérification aussi nommé. */

.fam-analysis {
	margin-top: calc(var(--fam-section) * 1.5);
	padding: clamp(1.5rem, 4cqi, 2.75rem);
	background:
		linear-gradient(180deg, rgba(var(--fam-primary-rgb), 0.05) 0%, transparent 45%),
		var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.18);
	border-top: 4px solid var(--fam-primary);
	border-radius: var(--fam-radius);
}

.fam-analysis__head {
	max-width: 78ch;
	margin-bottom: var(--fam-section);
}

.fam-analysis__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 290px), 1fr));
	gap: var(--fam-gap);
}

.fam-insight {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	padding: 1.25rem 1.4rem;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.14);
	border-radius: calc(var(--fam-radius) * 0.8);
}

.fam-insight__title {
	margin: 0;
	font-size: 0.78rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

.fam-insight__lead {
	margin: 0;
	font-size: 1.02rem;
	line-height: 1.5;
}

.fam-insight__lead--up {
	padding-left: 0.75rem;
	border-left: 3px solid var(--fam-alert);
}

.fam-insight__lead--down {
	padding-left: 0.75rem;
	border-left: 3px solid var(--fam-primary);
}

.fam-insight__lead--stable {
	padding-left: 0.75rem;
	border-left: 3px solid var(--fam-primary-soft);
}

.fam-insight__note {
	margin: 0;
	font-size: 0.82rem;
	line-height: 1.5;
	color: rgba(0, 0, 0, 0.58);
}

.fam-insight__stats {
	display: flex;
	flex-wrap: wrap;
	gap: 1.5rem;
	margin: 0;
}

.fam-insight__stats dt {
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: rgba(0, 0, 0, 0.55);
}

.fam-insight__stats dd {
	display: flex;
	align-items: baseline;
	gap: 0.5rem;
	margin: 0.15rem 0 0;
}

.fam-insight__stats strong {
	font-size: 1.7rem;
	line-height: 1;
	color: var(--fam-primary-dark);
	font-variant-numeric: tabular-nums;
}

.fam-delta {
	font-size: 0.85rem;
	font-weight: 700;
	white-space: nowrap;
}

.fam-delta--up {
	color: var(--fam-alert);
}

.fam-delta--down {
	color: var(--fam-primary);
}

/* Classement : le rang est une information, pas une décoration. */

.fam-ranking {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
}

.fam-ranking li {
	display: grid;
	grid-template-columns: 1.4rem 1fr auto;
	align-items: center;
	gap: 0.6rem;
	padding-bottom: 0.3rem;
	border-bottom: 1px dotted rgba(0, 0, 0, 0.12);
	font-size: 0.9rem;
}

.fam-ranking__rank {
	font-size: 0.72rem;
	font-weight: 800;
	text-align: center;
	color: var(--fam-primary);
}

.fam-ranking__label {
	overflow-wrap: anywhere;
}

.fam-ranking__value {
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

/* Jauges de couverture documentaire. */

.fam-gauges {
	display: flex;
	flex-wrap: wrap;
	gap: 1.25rem;
}

.fam-gauge {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 0.35rem;
	text-align: center;
	flex: 1 1 110px;
}

.fam-gauge::before {
	content: "";
	width: 82px;
	height: 82px;
	border-radius: 50%;
	background: conic-gradient(
		var(--fam-primary) calc(var(--fam-gauge) * 1%),
		rgba(var(--fam-primary-rgb), 0.12) 0
	);
	mask: radial-gradient(circle, transparent 56%, #000 57%);
	-webkit-mask: radial-gradient(circle, transparent 56%, #000 57%);
}

.fam-gauge__value {
	margin-top: -3.1rem;
	font-size: 1.05rem;
	font-weight: 800;
	color: var(--fam-primary-dark);
	font-variant-numeric: tabular-nums;
}

.fam-gauge__label {
	margin-top: 1.9rem;
	font-size: 0.76rem;
	line-height: 1.3;
	color: rgba(0, 0, 0, 0.6);
}

/* Barres de répartition de la vérification. */

.fam-bars {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 0.45rem;
}

.fam-bars li {
	display: grid;
	grid-template-columns: minmax(6rem, 40%) 1fr auto;
	align-items: center;
	gap: 0.6rem;
	font-size: 0.8rem;
}

.fam-bars__track {
	height: 0.5rem;
	background: rgba(0, 0, 0, 0.07);
	border-radius: 999px;
	overflow: hidden;
}

.fam-bars__fill {
	display: block;
	height: 100%;
	background: var(--fam-primary-soft);
	border-radius: 999px;
}

.fam-verif-fill--verified { background: var(--fam-primary); }
.fam-verif-fill--corroborated { background: var(--fam-primary-mid); }
.fam-verif-fill--single { background: var(--fam-accent); }
.fam-verif-fill--unverified { background: var(--fam-alert); }

.fam-bars__value {
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

/* Contexte et méthode. */

.fam-context {
	margin-top: var(--fam-section);
	padding-top: var(--fam-section);
	border-top: 1px solid rgba(var(--fam-primary-rgb), 0.16);
}

.fam-context__columns {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
	gap: var(--fam-gap);
}

.fam-context__columns h4 {
	margin: 0 0 0.4rem;
	font-size: 0.95rem;
	font-weight: 700;
	color: var(--fam-primary-dark);
}

.fam-context__columns p {
	margin: 0 0 0.75rem;
	font-size: 0.92rem;
	line-height: 1.6;
	color: rgba(0, 0, 0, 0.72);
}

/* ---------------------------------------------------------- Filtres v4 */

.fam-filters {
	flex-direction: column;
	align-items: stretch;
}

.fam-filters__main,
.fam-filters__advanced {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: var(--fam-gap);
	width: 100%;
}

.fam-filters__advanced[hidden] {
	display: none;
}

.fam-filters__advanced {
	padding-top: var(--fam-gap);
	border-top: 1px dashed rgba(var(--fam-primary-rgb), 0.2);
}

.fam-filters__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.6rem;
	width: 100%;
}

.fam-filters__toggle {
	flex: 0 0 auto;
	padding-block: 0.55rem;
}

.fam-btn--link {
	padding: 0.4rem 0.2rem;
	font-size: 0.85rem;
	font-weight: 600;
	color: var(--fam-primary);
	background: none;
	border: 0;
	text-decoration: underline;
	text-underline-offset: 3px;
}

.fam-btn--link:hover {
	background: none;
	color: var(--fam-primary-dark);
}

.fam-views {
	display: inline-flex;
	margin-left: auto;
	border: 1px solid rgba(var(--fam-primary-rgb), 0.25);
	border-radius: 999px;
	overflow: hidden;
}

.fam-view {
	padding: 0.4rem 0.9rem;
	font: inherit;
	font-size: 0.82rem;
	font-weight: 700;
	color: var(--fam-primary-dark);
	background: transparent;
	border: 0;
	cursor: pointer;
}

.fam-view + .fam-view {
	border-left: 1px solid rgba(var(--fam-primary-rgb), 0.2);
}

.fam-view.is-active {
	color: #fff;
	background: var(--fam-primary);
}

/* -------------------------------------------------------- Vue tableau */

.fam-feed--table {
	overflow-x: auto;
}

.fam-datatable {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.9rem;
}

.fam-datatable th {
	position: sticky;
	top: 0;
	padding: 0.6rem 0.75rem;
	text-align: left;
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
	background: var(--fam-surface);
	border-bottom: 2px solid rgba(var(--fam-primary-rgb), 0.2);
}

.fam-datatable td {
	padding: 0.6rem 0.75rem;
	border-bottom: 1px solid rgba(0, 0, 0, 0.07);
	vertical-align: top;
}

.fam-datatable tr:hover td {
	background: rgba(var(--fam-primary-rgb), 0.04);
}

.fam-datatable a {
	color: var(--fam-primary-dark);
	font-weight: 600;
}

.fam-num {
	text-align: right;
	font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------- Vue chronologie */

.fam-timeline {
	margin: 0;
	padding: 0 0 0 1.5rem;
	list-style: none;
	border-left: 2px solid rgba(var(--fam-primary-rgb), 0.2);
}

.fam-timeline__month {
	margin: 1.25rem 0 0.6rem -1.5rem;
	padding-left: 1.5rem;
	font-size: 0.74rem;
	font-weight: 800;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--fam-primary);
}

.fam-timeline__month:first-child {
	margin-top: 0;
}

.fam-timeline__item {
	position: relative;
	display: flex;
	gap: 0.9rem;
	padding: 0.55rem 0;
}

.fam-timeline__item::before {
	content: "";
	position: absolute;
	left: -1.93rem;
	top: 1.05rem;
	width: 0.6rem;
	height: 0.6rem;
	border-radius: 50%;
	background: var(--fam-primary);
	box-shadow: 0 0 0 3px var(--fam-surface);
}

.fam-timeline__day {
	flex: 0 0 1.8rem;
	font-size: 1.1rem;
	font-weight: 800;
	line-height: 1.2;
	color: var(--fam-primary-dark);
	font-variant-numeric: tabular-nums;
}

.fam-timeline__body {
	display: flex;
	flex-direction: column;
	gap: 0.2rem;
}

.fam-timeline__title {
	font-weight: 700;
	color: var(--fam-primary-dark);
	text-decoration: none;
}

.fam-timeline__title:hover {
	text-decoration: underline;
}

.fam-timeline__place {
	font-size: 0.85rem;
	color: rgba(0, 0, 0, 0.6);
}

/* ------------------------------------------------------- Chargement v4 */

.fam-skeleton {
	height: 180px;
	border-radius: var(--fam-radius);
	background: linear-gradient(
		100deg,
		rgba(var(--fam-primary-rgb), 0.07) 30%,
		rgba(var(--fam-primary-rgb), 0.14) 50%,
		rgba(var(--fam-primary-rgb), 0.07) 70%
	);
	background-size: 200% 100%;
	animation: fam-shimmer 1.4s ease-in-out infinite;
}

@keyframes fam-shimmer {
	from { background-position: 200% 0; }
	to { background-position: -200% 0; }
}

.fam-feed.is-loading,
.fam-grid.is-loading {
	opacity: 0.55;
	pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
	.fam-skeleton {
		animation: none;
	}
}

@media print {
	.fam-views,
	.fam-filters__actions,
	.fam-analysis__grid .fam-insight {
		break-inside: avoid;
	}
}

/* ==========================================================================
   v5 — Dossiers d'investigation, journal, carte approchée
   ========================================================================== */

/* ---------------------------------------------------------------- Journal */

.fam-subtitle--rule {
	display: flex;
	align-items: center;
	gap: 0.6rem;
	padding-left: 0.75rem;
	border-left: 4px solid var(--fam-primary);
	font-size: 1.3rem;
}

.fam-journal__count {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 1.9rem;
	height: 1.5rem;
	padding: 0 0.5rem;
	font-size: 0.78rem;
	font-weight: 800;
	color: var(--fam-primary-dark);
	background: rgba(var(--fam-primary-rgb), 0.14);
	border-radius: 999px;
	font-variant-numeric: tabular-nums;
}

/* ------------------------------------------------------- Acteur principal */

.fam-counter--actor {
	border-left-color: var(--fam-accent);
}

.fam-counter__actor {
	font-size: clamp(1.1rem, 0.9rem + 1cqi, 1.5rem);
	font-weight: 800;
	line-height: 1.15;
	color: var(--fam-primary-dark);
	overflow-wrap: anywhere;
}

/* ---------------------------------------------------------- Cartes v5 */

.fam-card__tags {
	display: flex;
	flex-wrap: wrap;
	gap: 0.35rem;
	margin: 0;
}

.fam-chip--target {
	background: rgba(var(--fam-accent-rgb), 0.3);
}

.fam-chip--actor {
	background: rgba(var(--fam-alert-rgb), 0.12);
	color: var(--fam-alert);
}

.fam-chip--place {
	background: rgba(var(--fam-primary-rgb), 0.1);
	text-transform: none;
	letter-spacing: 0;
	font-size: 0.78rem;
}

.fam-card__sources {
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem;
	margin: 0;
	font-size: 0.78rem;
	color: rgba(0, 0, 0, 0.55);
}

.fam-card__sources-label {
	font-weight: 700;
}

.fam-card__sources a {
	color: var(--fam-primary);
	overflow-wrap: anywhere;
}

/* ------------------------------------------------------ Grille de profils */

.fam-profile {
	position: relative;
	transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}

.fam-profile:hover {
	transform: translateY(-3px);
	border-color: var(--fam-primary);
	box-shadow: 0 14px 30px rgba(var(--fam-primary-rgb), 0.15);
}

.fam-profile[hidden] {
	display: none;
}

.fam-profile__status {
	position: absolute;
	top: 0.6rem;
	right: 0.6rem;
	max-width: calc(100% - 1.2rem);
	padding: 0.25rem 0.7rem;
	font-size: 0.68rem;
	font-weight: 800;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	color: var(--fam-primary-dark);
	background: color-mix(in srgb, var(--fam-surface) 92%, transparent);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.3);
	border-radius: 999px;
	backdrop-filter: blur(4px);
}

.fam-profile__body {
	flex: 1;
	justify-content: flex-start;
}

.fam-profile__org {
	font-size: 0.7rem;
	font-weight: 800;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

.fam-profile__cta {
	margin-top: auto;
	width: 100%;
	padding-block: 0.55rem;
	font-size: 0.88rem;
}

.fam-filters--profiles {
	background: rgba(var(--fam-primary-rgb), 0.05);
}

/* --------------------------------------------------- Dossier individuel */

.fam-dossier__back a {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	font-weight: 700;
	color: var(--fam-primary);
	text-decoration: none;
}

.fam-dossier__back a:hover {
	text-decoration: underline;
}

.fam-dossier__hero {
	display: grid;
	grid-template-columns: minmax(0, 220px) minmax(0, 1fr);
	gap: clamp(1rem, 3cqi, 2.25rem);
	align-items: start;
	padding-bottom: var(--fam-gap);
	margin-bottom: var(--fam-section);
	border-bottom: 3px solid rgba(var(--fam-primary-rgb), 0.15);
}

@container (max-width: 560px) {
	.fam-dossier__hero {
		grid-template-columns: 1fr;
	}
}

.fam-dossier__portrait {
	display: flex;
	align-items: center;
	justify-content: center;
	aspect-ratio: 4 / 5;
	overflow: hidden;
	background: rgba(var(--fam-primary-rgb), 0.08);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.2);
	border-radius: var(--fam-radius);
}

.fam-dossier__portrait img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.fam-eyebrow--actor {
	color: var(--fam-primary);
}

.fam-dossier__chips {
	display: flex;
	flex-wrap: wrap;
	gap: 0.5rem;
	margin: 1rem 0 0;
}

.fam-dossier__section {
	margin-bottom: var(--fam-section);
}

.fam-dossier__body {
	max-width: 78ch;
	padding: clamp(1rem, 3cqi, 1.75rem);
	font-size: 1.02rem;
	line-height: 1.7;
	background: rgba(var(--fam-primary-rgb), 0.04);
	border-radius: var(--fam-radius);
}

.fam-dossier__body p:last-child {
	margin-bottom: 0;
}

.fam-doclist {
	margin: 0;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
}

.fam-doclist a {
	display: flex;
	align-items: center;
	gap: 0.7rem;
	padding: 0.75rem 1rem;
	color: var(--fam-primary-dark);
	text-decoration: none;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.16);
	border-radius: calc(var(--fam-radius) * 0.55);
	transition: border-color 0.18s ease, background-color 0.18s ease;
}

.fam-doclist a:hover {
	border-color: var(--fam-primary);
	background: rgba(var(--fam-primary-rgb), 0.05);
}

.fam-doclist__label {
	overflow-wrap: anywhere;
	font-size: 0.9rem;
}

/* ------------------------------------------------------------ Contexte v5 */

.fam-context__block h4 {
	margin: 0 0 0.4rem;
	padding-left: 0.6rem;
	border-left: 3px solid var(--fam-accent);
	font-size: 0.95rem;
	font-weight: 700;
	color: var(--fam-primary-dark);
}

.fam-context__block p {
	margin: 0 0 0.75rem;
	font-size: 0.92rem;
	line-height: 1.6;
	color: rgba(0, 0, 0, 0.72);
}


/* ==========================================================================
   v6 — Fonds de plan, calques, plein écran
   ========================================================================== */

.fam-map__control a {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	font-size: 1.05rem;
	line-height: 1;
	color: var(--fam-primary-dark);
	background: #fff;
	text-decoration: none;
}

.fam-map__control a:hover {
	background: rgba(var(--fam-primary-rgb), 0.1);
}

/* Sélecteur de couches : repris au style du plugin plutôt qu'au défaut Leaflet. */

.fam-map .leaflet-control-layers {
	border: 1px solid rgba(var(--fam-primary-rgb), 0.25);
	border-radius: calc(var(--fam-radius) * 0.5);
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.14);
}

.fam-map .leaflet-control-layers-expanded {
	padding: 0.7rem 0.9rem;
	font-size: 0.85rem;
	color: var(--fam-text);
	background: var(--fam-surface);
}

.fam-map .leaflet-control-layers-separator {
	border-top-color: rgba(var(--fam-primary-rgb), 0.2);
}

.fam-map .leaflet-control-layers label {
	display: flex;
	align-items: center;
	gap: 0.4rem;
	margin-bottom: 0.2rem;
	cursor: pointer;
}

/* Étiquettes de provinces : lisibles sur photo satellite comme sur plan. */

.fam-province-label {
	white-space: nowrap;
	pointer-events: none;
}

.fam-province-label span {
	display: inline-block;
	padding: 0.15rem 0.5rem;
	font-size: 0.72rem;
	font-weight: 800;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--fam-primary-dark);
	background: color-mix(in srgb, var(--fam-surface) 88%, transparent);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.3);
	border-radius: 999px;
	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
}

.fam-province-label b {
	display: inline-block;
	margin-left: 0.25rem;
	padding: 0.1rem 0.4rem;
	font-size: 0.68rem;
	color: #fff;
	background: var(--fam-primary);
	border-radius: 999px;
	font-variant-numeric: tabular-nums;
}

.fam-map .leaflet-tooltip {
	font-size: 0.78rem;
	font-weight: 600;
	color: var(--fam-primary-dark);
	border-color: rgba(var(--fam-primary-rgb), 0.3);
	border-radius: calc(var(--fam-radius) * 0.4);
}

/* Plein écran : la carte sort du flux pour occuper la fenêtre entière. */

.fam-map.is-fullscreen {
	position: fixed;
	inset: 0;
	z-index: 99999;
	height: 100dvh !important;
	max-height: none;
	border-radius: 0;
	border: 0;
}

body.fam-map-open {
	overflow: hidden;
}

.fam-map.is-fullscreen .fam-map__legend {
	bottom: 3.5rem;
}


/* ==========================================================================
   v7 — Dossier inséré dans la mise en page du thème
   ========================================================================== */

/* En mode « thème », le titre et le visuel sont rendus par The7 : le plugin
   n'ajoute que l'identité en pastilles au-dessus du contenu, puis les sections
   documentaires en dessous. Aucune largeur ni marge n'est imposée, la colonne
   du thème reste maîtresse. */

.fam-dossier-head,
.fam-dossier {
	margin-block: var(--fam-gap);
}

.fam-dossier__identity--inline {
	display: flex;
	flex-direction: column;
	gap: 0.4rem;
	padding-bottom: var(--fam-gap);
	border-bottom: 3px solid rgba(var(--fam-primary-rgb), 0.15);
}

.fam-dossier__identity--inline .fam-dossier__chips {
	margin: 0;
}

.fam-dossier .fam-dossier__section:first-child {
	margin-top: var(--fam-section);
}

/* Sécurité générale : aucun bloc du plugin ne peut dépasser sa colonne, quel
   que soit le gabarit du thème. */
.fam-scope,
.fam-scope > * {
	min-width: 0;
	max-width: 100%;
}


/* ==========================================================================
   v8 — Compatibilité des thèmes à navigation latérale
   ========================================================================== */

/* Trois niveaux se superposent, du plus général au plus précis :
   1. cette règle, purement CSS, dès que le thème annonce un en-tête latéral ;
   2. la variable posée au rendu serveur, qui connaît la largeur réelle ;
   3. la mesure JavaScript, qui corrige au pixel et suit les redimensionnements.
   Le contenu reste donc lisible même si JavaScript est indisponible. */

body[class*="side-header"] .fam-page,
body.sidebar-left .fam-page {
	--fam-side-start: 300px;
}

body[class*="side-header"].dt-mobile .fam-page,
body.mobile-true .fam-page {
	--fam-side-start: 0px;
}

/* Sous une certaine largeur, le thème bascule sa navigation en mode mobile et
   libère toute la largeur : la compensation doit disparaître avec elle. */
@media (max-width: 1024px) {
	.fam-page {
		--fam-side-start: 0px !important;
		--fam-side-end: 0px !important;
	}
}

/* Aucun bloc du plugin ne peut élargir le document : les contenus larges
   défilent à l'intérieur de leur propre boîte plutôt que de pousser la page,
   ce qui provoquait un décalage horizontal général sous le menu fixe. */

.fam-scope {
	overflow-wrap: break-word;
}

.fam-deflist,
.fam-doclist,
.fam-datatable,
.fam-dossier__body {
	max-width: 100%;
}

.fam-dossier__body pre,
.fam-dossier__body table {
	max-width: 100%;
	overflow-x: auto;
}

.fam-deflist dd,
.fam-doclist__label,
.fam-card__sources a,
.fam-sources a {
	overflow-wrap: anywhere;
	word-break: break-word;
}

/* ==========================================================================
   v8 — Fil d'Ariane, actions, profils liés, visionneuse
   ========================================================================== */

.fam-breadcrumb {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.4rem;
	margin-bottom: var(--fam-gap);
	font-size: 0.82rem;
	color: rgba(0, 0, 0, 0.55);
}

.fam-breadcrumb a {
	color: var(--fam-primary);
	text-decoration: none;
}

.fam-breadcrumb a:hover {
	text-decoration: underline;
}

.fam-breadcrumb [aria-current] {
	font-weight: 700;
	color: var(--fam-primary-dark);
}

.fam-dossier__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.6rem;
	margin: var(--fam-section) 0 var(--fam-gap);
	padding-top: var(--fam-gap);
	border-top: 1px solid rgba(var(--fam-primary-rgb), 0.14);
}

/* --------------------------------------------------------- Profils liés */

.fam-related {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 210px), 1fr));
	gap: var(--fam-gap);
}

.fam-related__item {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	padding: 0.6rem 0.75rem;
	color: inherit;
	text-decoration: none;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.16);
	border-radius: calc(var(--fam-radius) * 0.6);
	transition: border-color 0.18s ease, transform 0.18s ease;
}

.fam-related__item:hover {
	border-color: var(--fam-primary);
	transform: translateY(-2px);
}

.fam-related__media {
	flex: 0 0 48px;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	overflow: hidden;
	background: rgba(var(--fam-primary-rgb), 0.08);
	border-radius: 50%;
}

.fam-related__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.fam-related__media .fam-profile__placeholder {
	font-size: 1.3rem;
}

.fam-related__body {
	display: flex;
	flex-direction: column;
	gap: 0.15rem;
	min-width: 0;
}

.fam-related__name {
	font-weight: 700;
	font-size: 0.9rem;
	color: var(--fam-primary-dark);
	overflow-wrap: anywhere;
}

.fam-related__status {
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.04em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

/* ------------------------------------------------- Navigation de dossier */

.fam-dossier__nav {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
	gap: var(--fam-gap);
	margin-top: var(--fam-section);
}

.fam-dossier__nav-item {
	display: flex;
	flex-direction: column;
	gap: 0.2rem;
	padding: 0.9rem 1.1rem;
	color: inherit;
	text-decoration: none;
	background: rgba(var(--fam-primary-rgb), 0.04);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.16);
	border-radius: calc(var(--fam-radius) * 0.6);
	border-left: 4px solid var(--fam-primary);
}

.fam-dossier__nav-item--next {
	text-align: right;
	border-left: 1px solid rgba(var(--fam-primary-rgb), 0.16);
	border-right: 4px solid var(--fam-primary);
}

.fam-dossier__nav-item:hover {
	background: rgba(var(--fam-primary-rgb), 0.08);
}

.fam-dossier__nav-label {
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--fam-primary-mid);
}

.fam-dossier__nav-title {
	font-weight: 700;
	color: var(--fam-primary-dark);
}

/* ------------------------------------------------------------ Visionneuse */

.fam-lightbox {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: clamp(1rem, 4vw, 3rem);
	background: rgba(0, 0, 0, 0.85);
}

.fam-lightbox img {
	max-width: 100%;
	max-height: 90vh;
	object-fit: contain;
	border-radius: calc(var(--fam-radius, 14px) * 0.4);
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}

.fam-lightbox__close {
	position: absolute;
	top: 1rem;
	right: 1rem;
	width: 2.6rem;
	height: 2.6rem;
	font-size: 1.6rem;
	line-height: 1;
	color: #fff;
	background: rgba(255, 255, 255, 0.14);
	border: 0;
	border-radius: 50%;
	cursor: pointer;
}

.fam-lightbox__close:hover {
	background: rgba(255, 255, 255, 0.28);
}

body.fam-lightbox-open {
	overflow: hidden;
}

@media print {
	.fam-breadcrumb,
	.fam-dossier__actions,
	.fam-dossier__nav,
	.fam-backlink,
	.fam-related {
		display: none !important;
	}

	.fam-dossier__body {
		background: none;
		padding: 0;
	}
}


/* =========================================================================
   Baromètre de tension
   ========================================================================= */

.fam-barometer__list {
	list-style: none;
	margin: 0 0 var(--fam-gap);
	padding: 0;
	display: grid;
	gap: 0.5rem;
}

.fam-barometer__item {
	display: flex;
	align-items: center;
	gap: 0.9rem;
	padding: 0.75rem 1rem;
	background: var(--fam-surface);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.14);
	border-left: 4px solid var(--fam-level, rgba(var(--fam-primary-rgb), 0.3));
	border-radius: calc(var(--fam-radius) * 0.6);
	flex-wrap: wrap;
}

.fam-barometer__item--calm { --fam-level: rgba(var(--fam-primary-rgb), 0.35); }
.fam-barometer__item--watch { --fam-level: var(--fam-accent); }
.fam-barometer__item--tension { --fam-level: #e08b2f; }
.fam-barometer__item--critical { --fam-level: var(--fam-alert); }

.fam-barometer__level {
	width: 0.7rem;
	height: 0.7rem;
	border-radius: 50%;
	background: var(--fam-level);
	flex: 0 0 auto;
}

.fam-barometer__body {
	display: flex;
	flex-direction: column;
	gap: 0.15rem;
	flex: 1 1 12rem;
	min-width: 0;
}

.fam-barometer__name {
	font-weight: 700;
	color: var(--fam-primary-dark);
	overflow-wrap: anywhere;
}

.fam-barometer__status {
	font-size: 0.82em;
	color: var(--fam-level);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.fam-barometer__figures {
	display: flex;
	align-items: baseline;
	gap: 0.35rem;
	flex-wrap: wrap;
}

.fam-barometer__figures .fam-num {
	font-weight: 700;
	font-variant-numeric: tabular-nums;
}

.fam-barometer__figures small {
	color: var(--fam-primary-mid);
	margin-inline-end: 0.5rem;
}

.fam-barometer__legend {
	list-style: none;
	margin: 0;
	padding: 0.8rem 0 0;
	display: grid;
	gap: 0.4rem;
	grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
	border-top: 1px solid rgba(var(--fam-primary-rgb), 0.12);
	font-size: 0.85em;
}

.fam-barometer__legend-item {
	display: flex;
	align-items: baseline;
	gap: 0.45rem;
}

.fam-barometer__legend-item span:last-child {
	color: var(--fam-primary-mid);
}

.fam-delta--flat {
	color: var(--fam-primary-mid);
}

/* =========================================================================
   Rapport de période
   ========================================================================= */

.fam-report__presets {
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem;
	margin-top: 0.6rem;
}

.fam-report__presets .fam-chip {
	text-decoration: none;
}

.fam-report__head {
	margin: var(--fam-gap) 0;
	padding-bottom: 0.8rem;
	border-bottom: 2px solid rgba(var(--fam-primary-rgb), 0.2);
}

.fam-report__counters .fam-counter {
	position: relative;
}

.fam-report__grid {
	display: grid;
	gap: var(--fam-gap);
	grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr));
	margin: var(--fam-gap) 0;
}

.fam-report__journal {
	width: 100%;
}

.fam-report__foot {
	margin-top: var(--fam-gap);
	padding-top: 0.8rem;
	border-top: 1px solid rgba(var(--fam-primary-rgb), 0.14);
}

/* =========================================================================
   Recherche transversale
   ========================================================================= */

.fam-search__bar {
	display: flex;
	gap: 0.5rem;
	flex-wrap: wrap;
}

.fam-search__bar input[type="search"] {
	flex: 1 1 16rem;
	min-width: 0;
}

.fam-search__group {
	margin-top: var(--fam-gap);
}

.fam-search__results[aria-busy="true"] {
	opacity: 0.55;
	transition: opacity 0.15s ease;
}

/* =========================================================================
   Partage
   ========================================================================= */

.fam-share {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0.4rem;
	margin-top: var(--fam-gap);
	padding-top: 0.8rem;
	border-top: 1px solid rgba(var(--fam-primary-rgb), 0.12);
}

.fam-share__label {
	font-weight: 700;
	color: var(--fam-primary-mid);
	margin-inline-end: 0.3rem;
}

.fam-share__btn {
	display: inline-flex;
	align-items: center;
	gap: 0.3rem;
	padding: 0.35rem 0.75rem;
	font: inherit;
	font-size: 0.85em;
	font-weight: 600;
	line-height: 1.4;
	color: var(--fam-primary-dark);
	text-decoration: none;
	background: rgba(var(--fam-primary-rgb), 0.06);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.2);
	border-radius: 999px;
	cursor: pointer;
	transition: background 0.15s ease, border-color 0.15s ease;
}

.fam-share__btn:hover,
.fam-share__btn:focus-visible {
	background: rgba(var(--fam-primary-rgb), 0.14);
	border-color: var(--fam-primary);
	color: var(--fam-primary-dark);
}

.fam-share__btn--whatsapp:hover { border-color: #25d366; }

/* =========================================================================
   Abonnement à la veille
   ========================================================================= */

.fam-fieldset {
	border: 0;
	margin: 0;
	padding: 0;
	min-width: 0;
}

.fam-checks {
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
	margin-top: 0.3rem;
}

.fam-checks--wrap {
	flex-direction: row;
	flex-wrap: wrap;
	gap: 0.35rem 1rem;
}

.fam-check {
	display: flex;
	align-items: flex-start;
	gap: 0.45rem;
	line-height: 1.45;
	cursor: pointer;
}

.fam-check input {
	margin-top: 0.2rem;
	flex: 0 0 auto;
}

.fam-check--consent {
	font-size: 0.9em;
	color: var(--fam-primary-mid);
}

/* =========================================================================
   Sélecteur de langue
   ========================================================================= */

.fam-lang__fab {
	position: fixed;
	inset-block-end: 1.25rem;
	inset-inline-end: 1.25rem;
	z-index: 9990;
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.6rem 1.1rem;
	font: inherit;
	font-size: 0.85em;
	font-weight: 700;
	color: var(--fam-surface);
	background: var(--fam-primary);
	border: 0;
	border-radius: 999px;
	box-shadow: 0 6px 20px rgba(var(--fam-primary-rgb), 0.35);
	cursor: pointer;
}

.fam-lang__fab:hover,
.fam-lang__fab:focus-visible {
	background: var(--fam-primary-dark);
}

.fam-lang__panel {
	position: fixed;
	inset: 0;
	z-index: 9995;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 1rem;
	background: rgba(0, 0, 0, 0.72);
	backdrop-filter: blur(6px);
}

.fam-lang__panel[hidden] {
	display: none;
}

.fam-lang__box {
	width: min(30rem, 100%);
	padding: 2rem 1.5rem 1.5rem;
	text-align: center;
	background: var(--fam-surface);
	border-radius: var(--fam-radius);
	box-shadow: 0 24px 64px rgba(0, 0, 0, 0.4);
}

.fam-lang__title {
	margin: 0 0 0.4rem;
	color: var(--fam-primary-dark);
}

.fam-lang__text {
	margin: 0 0 1.2rem;
	color: var(--fam-primary-mid);
	font-size: 0.92em;
}

.fam-lang__grid,
.fam-lang__inline {
	display: grid;
	gap: 0.6rem;
	grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
}

.fam-lang__inline {
	margin: var(--fam-gap) 0;
}

.fam-lang__btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5rem;
	padding: 0.7rem 0.9rem;
	font: inherit;
	font-weight: 600;
	color: var(--fam-text);
	background: rgba(var(--fam-primary-rgb), 0.05);
	border: 1px solid rgba(var(--fam-primary-rgb), 0.2);
	border-radius: calc(var(--fam-radius) * 0.6);
	cursor: pointer;
	transition: background 0.15s ease, border-color 0.15s ease;
}

.fam-lang__btn:hover,
.fam-lang__btn:focus-visible {
	background: rgba(var(--fam-primary-rgb), 0.13);
	border-color: var(--fam-primary);
}

.fam-lang__flag {
	font-size: 1.3em;
	line-height: 1;
}

.fam-lang__skip {
	margin-top: 1rem;
	font: inherit;
	font-size: 0.85em;
	color: var(--fam-primary-mid);
	background: none;
	border: 0;
	text-decoration: underline;
	cursor: pointer;
}

/* Bandeau et cadre injectés par Google Translate : neutralisés pour ne pas
   décaler l'en-tête du thème. */
.goog-te-banner-frame,
.skiptranslate iframe {
	display: none !important;
}

body {
	top: 0 !important;
}

/* =========================================================================
   Mode intégrable
   ========================================================================= */

.fam-embed__main {
	max-width: 100%;
}

.fam-embed__credit {
	margin: var(--fam-gap) 0 0;
	font-size: 0.8em;
	text-align: end;
}

.fam-embed .fam-lang__fab {
	display: none;
}

/* =========================================================================
   Impression
   ========================================================================= */

@media print {
	[data-fam-noprint],
	.fam-share,
	.fam-lang,
	.fam-search__form,
	.fam-report__picker {
		display: none !important;
	}

	.fam-report {
		border: 0;
		padding: 0;
		background: none;
	}

	.fam-report__journal {
		font-size: 0.8em;
	}

	.fam-report__journal tr,
	.fam-barometer__item {
		break-inside: avoid;
	}
}

/* Pastille du niveau « non vérifié », utilisée par le rapport de période. */
.fam-verif-dot--unverified {
	background: rgba(var(--fam-primary-rgb), 0.25);
}

/* =========================================================================
   COUCHE 10.1 — Système visuel
   Ajoutée en fin de feuille : elle affine les composants existants sans
   réécrire les règles précédentes, ce qui garde la mise à jour réversible.
   ========================================================================= */

/* Replis pour les navigateurs sans color-mix() (Safari < 16.2, Chrome < 111).
   Ces valeurs sont déclarées ici, donc avant le style en ligne produit par
   FAM_Assets : là où color-mix() est compris, il les remplace ; ailleurs, la
   déclaration invalide est écartée et ces valeurs restent en vigueur. */
.fam-scope {
	--fam-surface-2: rgba(var(--fam-primary-rgb), 0.05);
	--fam-border: rgba(var(--fam-primary-rgb), 0.18);
	--fam-border-strong: rgba(var(--fam-primary-rgb), 0.34);
	--fam-muted: var(--fam-primary-mid);
	--fam-shadow-sm: 0 1px 2px rgba(var(--fam-primary-rgb), 0.08);
	--fam-shadow: 0 2px 4px rgba(var(--fam-primary-rgb), 0.08), 0 8px 24px -12px rgba(var(--fam-primary-rgb), 0.2);
	--fam-shadow-lg: 0 16px 48px -20px rgba(var(--fam-primary-rgb), 0.32);
	--fam-ring: 0 0 0 3px rgba(var(--fam-primary-rgb), 0.28);
	--fam-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
	--fam-fast: 140ms;
	--fam-slow: 320ms;
	--fam-icon-size: 1.15em;
	--fam-step--1: 0.85rem;
	--fam-step-0: 1rem;
	--fam-step-1: 1.2rem;
	--fam-step-2: 1.5rem;
	--fam-step-3: 2rem;
}

/* ------------------------------------------------------------- Icônes SVG */

.fam-icon {
	/* Tracé plutôt que remplissage : sans ces trois déclarations, une icône
	   référencée par <use> retombe sur le remplissage noir par défaut. */
	fill: none;
	stroke: currentColor;
	stroke-width: 1.5;
	stroke-linecap: round;
	stroke-linejoin: round;
	inline-size: var(--fam-icon-size, 1.15em);
	block-size: var(--fam-icon-size, 1.15em);
	flex: 0 0 auto;
	vertical-align: -0.16em;
	color: inherit;
	overflow: visible;
}

.fam-icon--xs { --fam-icon-size: 0.85em; }
.fam-icon--sm { --fam-icon-size: 1em; }
.fam-icon--lg { --fam-icon-size: 1.8em; }
.fam-icon--xl { --fam-icon-size: 2.6em; }

.fam-icon--caret {
	transition: transform var(--fam-fast) var(--fam-ease);
}

[aria-expanded="true"] .fam-icon--caret {
	transform: rotate(180deg);
}

/* Un bouton ou un titre porteur d'icône aligne texte et dessin sur la ligne
   de base optique plutôt que sur la boîte, sinon l'icône « flotte ». */
.fam-btn,
.fam-share__btn,
.fam-view,
.fam-chip,
.fam-subtitle,
.fam-card__date,
.fam-card__location,
.fam-card__sources-label,
.fam-card__verification,
.fam-delta,
.fam-help,
.fam-empty {
	display: inline-flex;
	align-items: center;
	gap: 0.4em;
}

.fam-subtitle,
.fam-help,
.fam-empty {
	display: flex;
}

.fam-empty {
	flex-direction: column;
	gap: 0.7rem;
	padding: 2.5rem 1rem;
	text-align: center;
	color: var(--fam-muted);
	background: var(--fam-surface-2);
	border: 1px dashed var(--fam-border);
	border-radius: var(--fam-radius);
}

.fam-empty .fam-icon {
	color: var(--fam-primary-soft);
	opacity: 0.75;
}

/* ------------------------------------------------------------ Typographie */

.fam-title { font-size: var(--fam-step-3); line-height: 1.15; letter-spacing: -0.02em; }
.fam-subtitle { font-size: var(--fam-step-1); line-height: 1.25; letter-spacing: -0.01em; }
.fam-intro { font-size: var(--fam-step-1); line-height: 1.5; color: var(--fam-muted); font-weight: 400; }
.fam-card__title { font-size: var(--fam-step-1); line-height: 1.3; letter-spacing: -0.01em; }
.fam-help { font-size: var(--fam-step--1); color: var(--fam-muted); }

.fam-eyebrow {
	font-size: var(--fam-step--1);
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--fam-primary);
}

/* Les chiffres des compteurs et des tableaux s'alignent en colonne : chasse
   fixe pour que les unités se superposent d'une ligne à l'autre. */
.fam-counter__value,
.fam-num,
.fam-stat strong,
.fam-ranking__value,
.fam-datatable td,
.fam-table .fam-num {
	font-variant-numeric: tabular-nums;
	font-feature-settings: "tnum" 1;
}

/* ----------------------------------------------------------- Interactions */

.fam-btn {
	position: relative;
	font-weight: 600;
	border-radius: calc(var(--fam-radius) * 0.6);
	transition:
		background-color var(--fam-fast) var(--fam-ease),
		border-color var(--fam-fast) var(--fam-ease),
		color var(--fam-fast) var(--fam-ease),
		box-shadow var(--fam-fast) var(--fam-ease),
		transform var(--fam-fast) var(--fam-ease);
}

.fam-btn:hover { transform: translateY(-1px); }
.fam-btn:active { transform: translateY(0); }

.fam-btn--primary {
	box-shadow: var(--fam-shadow-sm);
}

.fam-btn--primary:hover {
	box-shadow: var(--fam-shadow);
}

/* Un seul anneau de focus pour tout le plugin, visible sur fond clair comme
   sur fond coloré, et jamais supprimé. */
.fam-scope :focus-visible {
	outline: 2px solid var(--fam-primary);
	outline-offset: 2px;
	border-radius: 4px;
}

.fam-scope .fam-btn:focus-visible,
.fam-scope input:focus-visible,
.fam-scope select:focus-visible,
.fam-scope textarea:focus-visible {
	outline-offset: 0;
	box-shadow: var(--fam-ring);
}

/* ---------------------------------------------------------------- Cartes */

.fam-card {
	position: relative;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: var(--fam-radius);
	box-shadow: var(--fam-shadow-sm);
	transition:
		box-shadow var(--fam-slow) var(--fam-ease),
		border-color var(--fam-slow) var(--fam-ease),
		transform var(--fam-slow) var(--fam-ease);
}

.fam-card:hover,
.fam-card:focus-within {
	border-color: var(--fam-border-strong);
	box-shadow: var(--fam-shadow);
	transform: translateY(-2px);
}

/* Toute la carte devient cliquable via le lien du titre, sans imbriquer de
   balises interactives : les liens de sources restent atteignables. */
.fam-card__title a::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: inherit;
}

.fam-card__sources a,
.fam-card a:not(.fam-card__title a) {
	position: relative;
	z-index: 1;
}

.fam-card__date {
	color: var(--fam-muted);
	font-size: var(--fam-step--1);
	font-weight: 600;
}

.fam-card__verification {
	font-size: var(--fam-step--1);
	font-weight: 600;
}

/* -------------------------------------------------------------- Modules */

.fam-module {
	position: relative;
	display: grid;
	grid-template-columns: auto 1fr;
	grid-template-areas:
		"icon label"
		"icon count"
		"text text"
		"go   go";
	gap: 0.15rem 0.9rem;
	padding: 1.15rem 1.25rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: var(--fam-radius);
	box-shadow: var(--fam-shadow-sm);
	text-decoration: none;
	overflow: hidden;
	transition:
		border-color var(--fam-slow) var(--fam-ease),
		box-shadow var(--fam-slow) var(--fam-ease),
		transform var(--fam-slow) var(--fam-ease);
}

.fam-module::before {
	content: "";
	position: absolute;
	inset-block-start: 0;
	inset-inline: 0;
	block-size: 3px;
	background: linear-gradient(90deg, var(--fam-primary), var(--fam-accent));
	transform: scaleX(0);
	transform-origin: inline-start;
	transition: transform var(--fam-slow) var(--fam-ease);
}

.fam-module:hover,
.fam-module:focus-visible {
	border-color: var(--fam-border-strong);
	box-shadow: var(--fam-shadow);
	transform: translateY(-2px);
}

.fam-module:hover::before,
.fam-module:focus-visible::before {
	transform: scaleX(1);
}

.fam-module__icon {
	grid-area: icon;
	display: grid;
	place-items: center;
	inline-size: 2.75rem;
	block-size: 2.75rem;
	color: var(--fam-primary);
	background: color-mix(in srgb, var(--fam-primary) 10%, transparent);
	border-radius: calc(var(--fam-radius) * 0.7);
	transition: background-color var(--fam-slow) var(--fam-ease), color var(--fam-slow) var(--fam-ease);
}

.fam-module__icon .fam-icon { --fam-icon-size: 1.5rem; }

.fam-module:hover .fam-module__icon {
	background: var(--fam-primary);
	color: var(--fam-surface);
}

.fam-module__label { grid-area: label; font-size: var(--fam-step-1); font-weight: 700; color: var(--fam-primary-dark); }
.fam-module__count { grid-area: count; font-size: var(--fam-step--1); color: var(--fam-muted); }
.fam-module__text  { grid-area: text; margin-block-start: 0.6rem; color: var(--fam-muted); font-size: var(--fam-step--1); }

.fam-module__go {
	grid-area: go;
	display: inline-flex;
	align-items: center;
	margin-block-start: 0.7rem;
	color: var(--fam-primary);
	font-weight: 600;
}

.fam-module__go .fam-icon {
	transition: transform var(--fam-slow) var(--fam-ease);
}

.fam-module:hover .fam-module__go .fam-icon {
	transform: translateX(4px);
}

/* ------------------------------------------------------------ Compteurs */

.fam-counter {
	position: relative;
	overflow: hidden;
	border-radius: var(--fam-radius);
	box-shadow: var(--fam-shadow-sm);
	transition: box-shadow var(--fam-slow) var(--fam-ease);
}

.fam-counter:hover { box-shadow: var(--fam-shadow); }

.fam-counter__value {
	font-size: var(--fam-step-3);
	font-weight: 800;
	line-height: 1.05;
	letter-spacing: -0.03em;
	background: linear-gradient(135deg, var(--fam-primary-dark), var(--fam-primary));
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.fam-counter__label {
	font-size: var(--fam-step--1);
	color: var(--fam-muted);
	font-weight: 600;
}

/* ---------------------------------------------------------- Vues et puces */

.fam-views {
	display: inline-flex;
	padding: 3px;
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-border);
	border-radius: 999px;
}

.fam-view {
	border: 0;
	border-radius: 999px;
	padding: 0.4rem 0.85rem;
	background: transparent;
	color: var(--fam-muted);
	font-weight: 600;
	cursor: pointer;
	transition: background-color var(--fam-fast) var(--fam-ease), color var(--fam-fast) var(--fam-ease);
}

.fam-view.is-active {
	background: var(--fam-surface);
	color: var(--fam-primary-dark);
	box-shadow: var(--fam-shadow-sm);
}

@container (max-width: 30rem) {
	.fam-view__label { display: none; }
	.fam-view { padding: 0.45rem 0.6rem; }
}

.fam-chip {
	border-radius: 999px;
	font-size: var(--fam-step--1);
	font-weight: 600;
	line-height: 1.4;
}

/* ----------------------------------------------------------- Chargement */

.fam-skeleton {
	position: relative;
	overflow: hidden;
	background: var(--fam-surface-2);
}

.fam-skeleton::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--fam-surface) 70%, transparent), transparent);
	transform: translateX(-100%);
	animation: fam-shimmer 1.4s infinite;
}

@keyframes fam-shimmer {
	100% { transform: translateX(100%); }
}

/* Apparition des fiches : décalée de quelques dizaines de millisecondes pour
   que l'œil suive l'arrivée du contenu au lieu d'un bloc surgissant. */
.fam-feed > * {
	animation: fam-rise var(--fam-slow) var(--fam-ease) backwards;
}

.fam-feed > :nth-child(1) { animation-delay: 0ms; }
.fam-feed > :nth-child(2) { animation-delay: 40ms; }
.fam-feed > :nth-child(3) { animation-delay: 80ms; }
.fam-feed > :nth-child(4) { animation-delay: 120ms; }
.fam-feed > :nth-child(5) { animation-delay: 160ms; }
.fam-feed > :nth-child(n+6) { animation-delay: 200ms; }

@keyframes fam-rise {
	from { opacity: 0; transform: translateY(8px); }
	to   { opacity: 1; transform: none; }
}

/* ------------------------------------------------------------ Recherche */

.fam-search__bar {
	position: relative;
	align-items: center;
}

.fam-search__glass {
	position: absolute;
	inset-inline-start: 0.9rem;
	--fam-icon-size: 1.15rem;
	color: var(--fam-muted);
	pointer-events: none;
}

.fam-search__bar input[type="search"] {
	padding-inline-start: 2.7rem;
}

/* --------------------------------------------------------------- Toasts */

.fam-toasts {
	position: fixed;
	inset-block-end: 1.25rem;
	inset-inline-start: 50%;
	z-index: 9992;
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
	inline-size: min(26rem, calc(100vw - 2rem));
	transform: translateX(-50%);
	pointer-events: none;
}

.fam-toast {
	display: flex;
	align-items: flex-start;
	gap: 0.6rem;
	padding: 0.75rem 1rem;
	color: var(--fam-text);
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-inline-start: 4px solid var(--fam-primary);
	border-radius: calc(var(--fam-radius) * 0.6);
	box-shadow: var(--fam-shadow-lg);
	pointer-events: auto;
	animation: fam-toast-in 260ms var(--fam-ease);
}

.fam-toast--ok { border-inline-start-color: var(--fam-primary); }
.fam-toast--error { border-inline-start-color: var(--fam-alert); }
.fam-toast--error .fam-icon { color: var(--fam-alert); }
.fam-toast--ok .fam-icon { color: var(--fam-primary); }

.fam-toast.is-leaving {
	animation: fam-toast-out 200ms var(--fam-ease) forwards;
}

@keyframes fam-toast-in {
	from { opacity: 0; transform: translateY(10px) scale(0.98); }
	to   { opacity: 1; transform: none; }
}

@keyframes fam-toast-out {
	to { opacity: 0; transform: translateY(6px); }
}

/* -------------------------------------------------- Progression de lecture */

.fam-progress {
	position: fixed;
	inset-block-start: 0;
	inset-inline: 0;
	block-size: 3px;
	z-index: 9991;
	background: linear-gradient(90deg, var(--fam-primary), var(--fam-accent));
	transform: scaleX(var(--fam-progress, 0));
	transform-origin: inline-start;
	pointer-events: none;
}

/* ------------------------------------------------------------- Tableaux */

.fam-table th {
	position: sticky;
	inset-block-start: 0;
	z-index: 1;
	background: var(--fam-surface-2);
	backdrop-filter: blur(6px);
	font-size: var(--fam-step--1);
	letter-spacing: 0.03em;
	text-transform: uppercase;
	color: var(--fam-muted);
}

.fam-table tbody tr {
	transition: background-color var(--fam-fast) var(--fam-ease);
}

.fam-table tbody tr:hover {
	background: color-mix(in srgb, var(--fam-primary) 5%, transparent);
}

/* ----------------------------------------------- Baromètre : niveau visuel */

.fam-barometer__level {
	display: grid;
	place-items: center;
	inline-size: 1.9rem;
	block-size: 1.9rem;
	border-radius: 50%;
	color: var(--fam-surface);
	background: var(--fam-level);
}

.fam-barometer__item--critical {
	background: color-mix(in srgb, var(--fam-alert) 5%, var(--fam-surface));
}

.fam-barometer__item--critical .fam-barometer__level {
	animation: fam-pulse 2.4s var(--fam-ease) infinite;
}

@keyframes fam-pulse {
	0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--fam-alert) 45%, transparent); }
	60%      { box-shadow: 0 0 0 8px transparent; }
}

/* ------------------------------------------------------------ Mode sombre */

/* Suit la préférence du système, sans réglage à faire : les couleurs de la
   charte sont conservées, seuls les fonds et les contrastes s'inversent. */
@media (prefers-color-scheme: dark) {
	.fam-scope {
		--fam-surface: #14180f;
		--fam-surface-2: #1b2015;
		--fam-text: #e8eee0;
		--fam-muted: color-mix(in srgb, #e8eee0 62%, #14180f);
		--fam-border: color-mix(in srgb, var(--fam-primary) 34%, transparent);
		--fam-border-strong: color-mix(in srgb, var(--fam-primary) 52%, transparent);
		--fam-primary-dark: var(--fam-primary-pale);
		--fam-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
		--fam-shadow: 0 2px 6px rgba(0, 0, 0, 0.45), 0 12px 32px -16px rgba(0, 0, 0, 0.6);
		--fam-shadow-lg: 0 16px 48px -20px rgba(0, 0, 0, 0.75);
	}

	.fam-counter__value {
		background: linear-gradient(135deg, var(--fam-primary-pale), var(--fam-accent));
		-webkit-background-clip: text;
		background-clip: text;
	}

	.fam-map,
	.fam-figure img {
		filter: brightness(0.92) contrast(1.04);
	}
}

/* --------------------------------------- Contraste et mouvement réduits */

@media (prefers-contrast: more) {
	.fam-scope {
		--fam-border: var(--fam-primary);
		--fam-muted: var(--fam-text);
	}

	.fam-card,
	.fam-module,
	.fam-counter {
		border-width: 2px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.fam-scope *,
	.fam-toast,
	.fam-feed > * {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}

	.fam-card:hover,
	.fam-module:hover,
	.fam-btn:hover {
		transform: none;
	}
}

/* Le sprite d'icônes ne doit jamais occuper de place dans le flux, même si un
   thème redéfinit l'affichage des SVG. */
svg.fam-sprite {
	position: absolute !important;
	inline-size: 0 !important;
	block-size: 0 !important;
	overflow: hidden !important;
}

/* =========================================================================
   COUCHE 12 — Navigation unifiée, page d'entrée, explorateur de carte
   ========================================================================= */

/* ------------------------------------------------- Barre de navigation */

.fam-navwrap {
	margin-block-end: var(--fam-gap);
}

.fam-nav {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	flex-wrap: wrap;
	padding: 0.6rem 0.9rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: var(--fam-radius);
	box-shadow: var(--fam-shadow-sm);
}

.fam-nav--sticky {
	position: sticky;
	inset-block-start: var(--fam-sticky-top, 0.5rem);
	z-index: 60;
	transition: box-shadow var(--fam-slow) var(--fam-ease), background-color var(--fam-slow) var(--fam-ease);
}

.fam-nav.is-pinned {
	box-shadow: var(--fam-shadow);
	backdrop-filter: blur(10px);
	background: color-mix(in srgb, var(--fam-surface) 88%, transparent);
}

.fam-nav__brand {
	display: inline-flex;
	align-items: center;
	gap: 0.55rem;
	text-decoration: none;
	color: var(--fam-primary-dark);
	font-weight: 800;
	letter-spacing: -0.01em;
	flex: 0 0 auto;
}

.fam-nav__mark {
	display: grid;
	place-items: center;
	inline-size: 2rem;
	block-size: 2rem;
	color: var(--fam-surface);
	background: linear-gradient(135deg, var(--fam-primary), var(--fam-primary-dark));
	border-radius: calc(var(--fam-radius) * 0.55);
}

.fam-nav__mark .fam-icon { --fam-icon-size: 1.1rem; }

.fam-nav__brandtext {
	font-size: var(--fam-step--1);
	max-inline-size: 14ch;
	line-height: 1.15;
}

.fam-nav__list {
	display: flex;
	align-items: center;
	gap: 0.15rem;
	flex: 1 1 auto;
	flex-wrap: wrap;
	margin: 0;
	padding: 0;
	list-style: none;
}

.fam-nav__item { margin: 0; }

.fam-nav__link {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.45rem 0.7rem;
	color: var(--fam-muted);
	font-weight: 600;
	font-size: var(--fam-step--1);
	text-decoration: none;
	border-radius: 999px;
	white-space: nowrap;
	transition: background-color var(--fam-fast) var(--fam-ease), color var(--fam-fast) var(--fam-ease);
}

.fam-nav__link:hover,
.fam-nav__link:focus-visible {
	color: var(--fam-primary-dark);
	background: color-mix(in srgb, var(--fam-primary) 9%, transparent);
}

.fam-nav__link.is-current {
	color: var(--fam-surface);
	background: var(--fam-primary);
}

.fam-nav__short { display: none; }

.fam-nav__actions {
	display: flex;
	align-items: center;
	gap: 0.4rem;
	flex: 0 0 auto;
}

.fam-nav__action {
	display: inline-flex;
	align-items: center;
	gap: 0.35rem;
	padding: 0.45rem 0.85rem;
	font-size: var(--fam-step--1);
	font-weight: 700;
	text-decoration: none;
	border-radius: 999px;
	transition: background-color var(--fam-fast) var(--fam-ease), transform var(--fam-fast) var(--fam-ease);
}

.fam-nav__action--ghost {
	color: var(--fam-primary-dark);
	border: 1px solid var(--fam-border-strong);
}

.fam-nav__action--primary {
	color: var(--fam-surface);
	background: var(--fam-alert);
}

.fam-nav__action:hover { transform: translateY(-1px); }

.fam-nav__burger {
	display: none;
	align-items: center;
	gap: 0.4rem;
	padding: 0.45rem 0.8rem;
	font: inherit;
	font-size: var(--fam-step--1);
	font-weight: 600;
	color: var(--fam-primary-dark);
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-border);
	border-radius: 999px;
	cursor: pointer;
}

/* Sous 62rem de conteneur, les libellés se raccourcissent ; sous 44rem, la
   liste passe en tiroir pour ne pas manger trois lignes de haut de page. */
@container (max-width: 62rem) {
	.fam-nav__full { display: none; }
	.fam-nav__short { display: inline; }
	.fam-nav__brandtext { max-inline-size: 10ch; }
}

@container (max-width: 44rem) {
	.fam-nav__burger { display: inline-flex; }

	.fam-nav__list {
		display: none;
		flex-basis: 100%;
		flex-direction: column;
		align-items: stretch;
		gap: 0.15rem;
		padding-block-start: 0.5rem;
		border-block-start: 1px solid var(--fam-border);
	}

	.fam-nav.is-open .fam-nav__list { display: flex; }

	.fam-nav__link {
		border-radius: calc(var(--fam-radius) * 0.5);
		padding: 0.65rem 0.8rem;
	}

	.fam-nav__full { display: inline; }
	.fam-nav__short { display: none; }
	.fam-nav__actions { margin-inline-start: auto; }
}

@media print {
	.fam-navwrap { display: none !important; }
}

/* --------------------------------------------------- Page d'entrée */

.fam-masthead {
	display: grid;
	grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
	gap: var(--fam-section);
	align-items: center;
	padding: clamp(1.5rem, 1rem + 3cqi, 3rem);
	margin-block-end: var(--fam-gap);
	border: 1px solid var(--fam-border);
	border-radius: var(--fam-radius);
	background:
		radial-gradient(120% 140% at 100% 0%, color-mix(in srgb, var(--fam-primary) 16%, transparent) 0%, transparent 62%),
		linear-gradient(140deg, var(--fam-primary-pale) 0%, var(--fam-surface) 60%);
	overflow: hidden;
}

@container (max-width: 52rem) {
	.fam-masthead { grid-template-columns: 1fr; }
}

.fam-masthead__kicker {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	margin: 0 0 0.6rem;
	padding: 0.3rem 0.75rem;
	font-size: var(--fam-step--1);
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--fam-primary-dark);
	background: color-mix(in srgb, var(--fam-primary) 12%, transparent);
	border-radius: 999px;
}

.fam-masthead__title {
	margin: 0 0 0.4rem;
	font-size: clamp(1.9rem, 1.3rem + 3cqi, 3.2rem);
	font-weight: 800;
	line-height: 1.08;
	letter-spacing: -0.03em;
	color: var(--fam-primary-dark);
	text-wrap: balance;
}

.fam-masthead__tagline {
	margin: 0 0 0.5rem;
	font-size: var(--fam-step-1);
	line-height: 1.45;
	color: var(--fam-text);
	max-inline-size: 46ch;
	text-wrap: pretty;
}

.fam-masthead__editor,
.fam-masthead__intro {
	margin: 0 0 0.5rem;
	font-size: var(--fam-step--1);
	color: var(--fam-muted);
	max-inline-size: 52ch;
}

.fam-masthead__search {
	position: relative;
	display: flex;
	align-items: center;
	gap: 0.5rem;
	margin-block-start: 1.2rem;
	max-inline-size: 34rem;
}

.fam-masthead__search input[type="search"] {
	flex: 1 1 auto;
	min-inline-size: 0;
	padding-inline-start: 2.7rem;
	block-size: 3rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border-strong);
	border-radius: 999px;
}

.fam-masthead__search .fam-btn {
	block-size: 3rem;
	border-radius: 999px;
	padding-inline: 1.4rem;
}

/* Les loupes des champs de recherche sont centrées verticalement de façon
   explicite : positionnées en absolu, elles échappent à l'alignement du
   conteneur et retombaient sinon sur la ligne de base du texte, donc trop
   haut dans un champ arrondi. */
.fam-masthead__glass,
.fam-search__glass,
.fam-nav__glass {
	position: absolute;
	inset-block-start: 50%;
	translate: 0 -50%;
	vertical-align: baseline;
	color: var(--fam-muted);
	pointer-events: none;
}

.fam-masthead__glass {
	inset-inline-start: 1.15rem;
	--fam-icon-size: 1.2rem;
}

.fam-search__glass {
	inset-inline-start: 1.15rem;
	--fam-icon-size: 1.2rem;
}

.fam-nav__glass {
	inset-inline-start: 0.85rem;
	--fam-icon-size: 1rem;
}

/* Le champ et le bouton partagent exactement la même hauteur : un écart d'un
   pixel se voit immédiatement sur deux formes arrondies côte à côte. */
.fam-masthead__search input[type="search"],
.fam-masthead__search .fam-btn {
	block-size: 3.15rem;
	line-height: 1;
}

.fam-masthead__search input[type="search"] {
	padding-inline: 3rem 1.1rem;
	font-size: 1rem;
}

.fam-nav__kbd {
	inset-block-start: 50%;
	translate: 0 -50%;
}

.fam-masthead__facts {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 0.6rem;
	margin: 0;
}

.fam-fact {
	padding: 0.85rem 1rem;
	background: color-mix(in srgb, var(--fam-surface) 82%, transparent);
	border: 1px solid var(--fam-border);
	border-radius: calc(var(--fam-radius) * 0.7);
	backdrop-filter: blur(4px);
}

.fam-fact dt {
	margin: 0 0 0.15rem;
	font-size: var(--fam-step--1);
	font-weight: 600;
	color: var(--fam-muted);
}

.fam-fact dd {
	margin: 0;
	font-size: var(--fam-step-2);
	font-weight: 800;
	line-height: 1.1;
	color: var(--fam-primary-dark);
	font-variant-numeric: tabular-nums;
}

.fam-fact time { font-size: var(--fam-step-1); }

.fam-subtitle--rule {
	padding-block-end: 0.5rem;
	margin-block: var(--fam-section) var(--fam-gap);
	border-block-end: 2px solid var(--fam-border);
}

.fam-hub__foot {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr));
	gap: var(--fam-gap);
	margin-block-start: var(--fam-section);
	padding-block-start: var(--fam-gap);
	border-block-start: 1px solid var(--fam-border);
}

.fam-notes {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 0.7rem;
}

.fam-notes li {
	display: flex;
	align-items: flex-start;
	gap: 0.55rem;
	font-size: var(--fam-step--1);
	line-height: 1.55;
	color: var(--fam-muted);
}

.fam-notes .fam-icon {
	margin-block-start: 0.2em;
	color: var(--fam-primary);
}

.fam-list--compact .fam-list__item {
	padding-block: 0.45rem;
}

/* ------------------------------------------------ Explorateur de carte */

.fam-mapx__head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--fam-gap);
	flex-wrap: wrap;
	margin-block-end: var(--fam-gap);
}

.fam-mapx__badge {
	display: inline-flex;
	flex-direction: column;
	align-items: center;
	padding: 0.6rem 1.1rem;
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-border);
	border-radius: calc(var(--fam-radius) * 0.7);
	line-height: 1.15;
}

.fam-mapx__badge strong {
	font-size: var(--fam-step-2);
	font-weight: 800;
	color: var(--fam-primary-dark);
	font-variant-numeric: tabular-nums;
}

.fam-mapx__badge span { font-size: var(--fam-step--1); color: var(--fam-muted); }

.fam-mapx__filters {
	display: flex;
	align-items: flex-end;
	gap: var(--fam-gap);
	flex-wrap: wrap;
	padding: 0.9rem 1rem;
	margin-block-end: var(--fam-gap);
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-border);
	border-radius: var(--fam-radius);
}

.fam-mapx__group {
	display: flex;
	flex-direction: column;
	gap: 0.3rem;
	min-inline-size: 0;
}

.fam-mapx__group--grow { flex: 1 1 12rem; }

.fam-segmented {
	display: inline-flex;
	padding: 3px;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: 999px;
}

.fam-segmented__btn {
	display: inline-flex;
	align-items: center;
	gap: 0.3rem;
	padding: 0.35rem 0.8rem;
	font: inherit;
	font-size: var(--fam-step--1);
	font-weight: 600;
	color: var(--fam-muted);
	background: transparent;
	border: 0;
	border-radius: 999px;
	cursor: pointer;
	white-space: nowrap;
	transition: background-color var(--fam-fast) var(--fam-ease), color var(--fam-fast) var(--fam-ease);
}

.fam-segmented__btn.is-active {
	color: var(--fam-surface);
	background: var(--fam-primary);
}

.fam-mapx__layout {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 20rem);
	gap: var(--fam-gap);
	align-items: stretch;
}

@container (max-width: 56rem) {
	.fam-mapx__layout { grid-template-columns: 1fr; }
	.fam-mapx__side { max-block-size: 22rem; }
}

.fam-mapx__canvas {
	border-radius: var(--fam-radius);
	overflow: hidden;
	border: 1px solid var(--fam-border);
}

.fam-mapx__side {
	display: flex;
	flex-direction: column;
	min-block-size: 0;
	padding: 0.9rem 1rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: var(--fam-radius);
}

.fam-mapx__sidetitle {
	display: flex;
	align-items: center;
	gap: 0.4rem;
	margin: 0 0 0.2rem;
	font-size: var(--fam-step-0);
	font-weight: 700;
	color: var(--fam-primary-dark);
}

.fam-mapx__list {
	list-style: none;
	margin: 0.6rem 0 0;
	padding: 0;
	overflow-y: auto;
	flex: 1 1 auto;
	scrollbar-width: thin;
}

.fam-mapx__item + .fam-mapx__item { border-block-start: 1px solid var(--fam-border); }

.fam-mapx__item button {
	display: grid;
	grid-template-columns: 1fr auto;
	gap: 0.1rem 0.6rem;
	inline-size: 100%;
	padding: 0.6rem 0.5rem;
	font: inherit;
	text-align: start;
	color: inherit;
	background: transparent;
	border: 0;
	border-radius: calc(var(--fam-radius) * 0.5);
	cursor: pointer;
	transition: background-color var(--fam-fast) var(--fam-ease);
}

.fam-mapx__item button:hover,
.fam-mapx__item button.is-active {
	background: color-mix(in srgb, var(--fam-primary) 8%, transparent);
}

.fam-mapx__itemtitle {
	font-weight: 600;
	font-size: var(--fam-step--1);
	line-height: 1.35;
	color: var(--fam-primary-dark);
}

.fam-mapx__itemloc,
.fam-mapx__itemmeta {
	grid-column: 1;
	display: flex;
	align-items: center;
	gap: 0.25rem;
	font-size: 0.78em;
	color: var(--fam-muted);
}

.fam-mapx__itemtoll {
	grid-row: 1 / span 2;
	grid-column: 2;
	align-self: center;
	padding: 0.15rem 0.5rem;
	font-size: 0.78em;
	font-weight: 700;
	color: var(--fam-alert);
	background: color-mix(in srgb, var(--fam-alert) 12%, transparent);
	border-radius: 999px;
	font-variant-numeric: tabular-nums;
}

.fam-mapx__more {
	padding: 0.6rem 0.5rem;
	font-size: var(--fam-step--1);
	color: var(--fam-muted);
	text-align: center;
}

.fam-mapx__empty { margin-block-start: 1rem; padding: 1.5rem 0.5rem; }

.fam-cluster__label {
	background: transparent !important;
	border: 0 !important;
	box-shadow: none !important;
	color: #fff;
	font-weight: 800;
	font-size: 0.8rem;
}

.fam-cluster__label::before { display: none !important; }

/* --------------------------------------------- Contexte sous la carte */

.fam-mapx__context {
	margin-block-start: var(--fam-section);
}

.fam-mapx__context--split {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(19rem, 1fr));
	gap: var(--fam-section);
}

.fam-sparkbars {
	display: flex;
	align-items: flex-end;
	gap: 0.4rem;
	list-style: none;
	margin: var(--fam-gap) 0 0;
	padding: 0;
	block-size: 9rem;
}

.fam-sparkbar {
	position: relative;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	align-items: center;
	gap: 0.25rem;
	flex: 1 1 0;
	block-size: 100%;
	min-inline-size: 0;
}

.fam-sparkbar__fill {
	inline-size: 100%;
	block-size: var(--fam-bar, 4%);
	background: linear-gradient(180deg, var(--fam-primary), color-mix(in srgb, var(--fam-primary) 55%, transparent));
	border-radius: 4px 4px 0 0;
	transition: block-size var(--fam-slow) var(--fam-ease);
}

.fam-sparkbar__value {
	order: -1;
	font-size: 0.72em;
	font-weight: 700;
	color: var(--fam-primary-dark);
	font-variant-numeric: tabular-nums;
}

.fam-sparkbar__label {
	font-size: 0.7em;
	color: var(--fam-muted);
	text-transform: capitalize;
	white-space: nowrap;
}

.fam-bars {
	list-style: none;
	margin: var(--fam-gap) 0 0;
	padding: 0;
	display: grid;
	gap: 0.6rem;
}

.fam-bar {
	display: grid;
	grid-template-columns: minmax(6rem, 8rem) 1fr auto;
	align-items: center;
	gap: 0.7rem;
}

.fam-bar__label {
	font-size: var(--fam-step--1);
	font-weight: 600;
	overflow-wrap: anywhere;
}

.fam-bar__label a { text-decoration: none; }

.fam-bar__track {
	block-size: 0.55rem;
	background: var(--fam-surface-2);
	border-radius: 999px;
	overflow: hidden;
}

.fam-bar__fill {
	display: block;
	block-size: 100%;
	background: linear-gradient(90deg, var(--fam-primary), var(--fam-accent));
	border-radius: 999px;
}

.fam-bar__value {
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	line-height: 1.2;
	font-variant-numeric: tabular-nums;
}

.fam-bar__value strong { font-size: var(--fam-step-0); color: var(--fam-primary-dark); }
.fam-bar__value small { font-size: 0.72em; color: var(--fam-muted); }

@container (max-width: 34rem) {
	.fam-bar { grid-template-columns: 1fr auto; }
	.fam-bar__track { grid-column: 1 / -1; order: 3; }
}

/* La barre d'administration de WordPress est elle-même fixée en haut : sans
   décalage, la navigation collante se glisserait dessous. */
body.admin-bar .fam-nav--sticky { --fam-sticky-top: 3.5rem; }

@media screen and (max-width: 782px) {
	body.admin-bar .fam-nav--sticky { --fam-sticky-top: 3.3rem; }
}

/* =========================================================================
   COUCHE 13 — Refonte visuelle : tableau de bord éditorial
   Objectif : sortir de la mise en page « articles empilés » pour une
   organisation en surfaces, comme un poste de travail de rédaction.
   ========================================================================= */

.fam-scope {
	--fam-surface-sunken: color-mix(in srgb, var(--fam-primary) 4%, var(--fam-surface));
	--fam-radius-lg: calc(var(--fam-radius) * 1.35);
	--fam-radius-sm: calc(var(--fam-radius) * 0.5);
	--fam-hairline: color-mix(in srgb, var(--fam-primary) 12%, transparent);
}

/* ------------------------------------------- Navigation sur deux lignes */

.fam-nav {
	display: block;
	padding: 0;
	overflow: hidden;
	border-radius: var(--fam-radius-lg);
}

.fam-nav__top {
	display: flex;
	align-items: center;
	gap: 0.9rem;
	padding: 0.7rem 1rem;
	background: linear-gradient(120deg, color-mix(in srgb, var(--fam-primary) 7%, var(--fam-surface)), var(--fam-surface));
	border-block-end: 1px solid var(--fam-hairline);
}

.fam-nav__brand { flex: 0 0 auto; gap: 0.6rem; }

.fam-nav__mark {
	inline-size: 2.35rem;
	block-size: 2.35rem;
	border-radius: 0.7rem;
	box-shadow: 0 3px 10px -3px color-mix(in srgb, var(--fam-primary) 60%, transparent);
}

.fam-nav__brandtext {
	display: flex;
	flex-direction: column;
	max-inline-size: 22ch;
	line-height: 1.15;
}

.fam-nav__brandtext strong {
	font-size: 0.95rem;
	font-weight: 800;
	letter-spacing: -0.02em;
	color: var(--fam-primary-dark);
}

.fam-nav__brandtext small {
	font-size: 0.68rem;
	font-weight: 600;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--fam-muted);
}

.fam-nav__search {
	position: relative;
	display: flex;
	align-items: center;
	flex: 1 1 16rem;
	max-inline-size: 30rem;
	min-inline-size: 0;
}

.fam-nav__search input[type="search"] {
	inline-size: 100%;
	block-size: 2.4rem;
	padding-inline: 2.3rem 2.5rem;
	font-size: 0.88rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: 999px;
	transition: border-color var(--fam-fast) var(--fam-ease), box-shadow var(--fam-fast) var(--fam-ease);
}

.fam-nav__search input[type="search"]:focus {
	border-color: var(--fam-primary);
	box-shadow: var(--fam-ring);
}

.fam-nav__glass {
	position: absolute;
	inset-inline-start: 0.8rem;
	color: var(--fam-muted);
	pointer-events: none;
}

.fam-nav__kbd {
	position: absolute;
	inset-inline-end: 0.55rem;
	padding: 0.05rem 0.4rem;
	font: inherit;
	font-size: 0.7rem;
	font-weight: 700;
	color: var(--fam-muted);
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-border);
	border-radius: 5px;
	pointer-events: none;
}

.fam-nav__actions { margin-inline-start: auto; }

.fam-nav__action {
	padding: 0.5rem 0.95rem;
	font-size: 0.83rem;
	box-shadow: var(--fam-shadow-sm);
}

.fam-nav__action--ghost {
	background: var(--fam-surface);
	border-color: var(--fam-border);
}

.fam-nav__action--primary {
	box-shadow: 0 3px 12px -4px color-mix(in srgb, var(--fam-alert) 70%, transparent);
}

/* --- Rail des rubriques : il défile au lieu de passer à la ligne. */

.fam-nav__rail {
	position: relative;
	display: flex;
	align-items: center;
	background: var(--fam-surface);
}

.fam-nav__list {
	display: flex;
	gap: 0.1rem;
	flex: 1 1 auto;
	flex-wrap: nowrap;
	margin: 0;
	padding: 0.35rem 0.6rem;
	list-style: none;
	overflow-x: auto;
	scrollbar-width: none;
	scroll-behavior: smooth;
	overscroll-behavior-x: contain;
}

.fam-nav__list::-webkit-scrollbar { display: none; }

.fam-nav__link {
	position: relative;
	padding: 0.55rem 0.85rem;
	border-radius: var(--fam-radius-sm);
	font-size: 0.86rem;
}

.fam-nav__link.is-current {
	color: var(--fam-primary-dark);
	background: color-mix(in srgb, var(--fam-primary) 10%, transparent);
}

/* Soulignement de l'onglet actif : plus sobre qu'une pastille pleine et
   plus lisible sur un rail dense. */
.fam-nav__link.is-current::after {
	content: "";
	position: absolute;
	inset-inline: 0.85rem;
	inset-block-end: -0.35rem;
	block-size: 3px;
	border-radius: 3px 3px 0 0;
	background: var(--fam-primary);
}

.fam-nav__scroll {
	display: grid;
	place-items: center;
	inline-size: 2rem;
	block-size: 2rem;
	margin-inline: 0.3rem;
	flex: 0 0 auto;
	color: var(--fam-primary-dark);
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: 50%;
	cursor: pointer;
	box-shadow: var(--fam-shadow-sm);
}

.fam-nav__scroll--prev .fam-icon { transform: rotate(180deg); }

/* Dégradés de bord : ils signalent qu'il reste des rubriques hors champ. */
.fam-nav.has-overflow .fam-nav__rail::before,
.fam-nav.has-overflow .fam-nav__rail::after {
	content: "";
	position: absolute;
	inset-block: 0;
	inline-size: 2.5rem;
	pointer-events: none;
	z-index: 1;
}

.fam-nav.has-overflow .fam-nav__rail::before {
	inset-inline-start: 2.6rem;
	background: linear-gradient(90deg, var(--fam-surface), transparent);
}

.fam-nav.has-overflow .fam-nav__rail::after {
	inset-inline-end: 2.6rem;
	background: linear-gradient(270deg, var(--fam-surface), transparent);
}

.fam-nav__burger {
	display: none;
	place-items: center;
	inline-size: 2.4rem;
	block-size: 2.4rem;
	padding: 0;
	border-radius: 50%;
}

@container (max-width: 60rem) {
	.fam-nav__brandtext small { display: none; }
	.fam-nav__brandtext strong { font-size: 0.88rem; }
}

@container (max-width: 46rem) {
	.fam-nav__search { display: none; }
	.fam-nav__brandtext { max-inline-size: 16ch; }
}

@container (max-width: 34rem) {
	.fam-nav__burger { display: grid; }
	.fam-nav__actions .fam-nav__action--ghost span { display: none; }
	.fam-nav__action { padding: 0.5rem 0.7rem; }

	.fam-nav__rail { display: none; }
	.fam-nav.is-open .fam-nav__rail { display: block; }

	.fam-nav__list {
		flex-direction: column;
		overflow: visible;
		padding: 0.5rem;
	}

	.fam-nav__link.is-current::after { display: none; }
	.fam-nav__scroll { display: none; }
}

/* --------------------------------------------------- Surfaces générales */

.fam-panel {
	padding: 0;
	background: none;
	border: 0;
	box-shadow: none;
}

/* Une section devient une surface identifiable, avec son propre en-tête,
   au lieu d'un simple bloc de texte séparé par une marge. */
.fam-panel > .fam-band,
.fam-analysis,
.fam-barometer,
.fam-report,
.fam-search,
.fam-mapx__context,
.fam-hub__aside,
.fam-testimonies-all,
.fam-formwrap {
	padding: clamp(1.1rem, 0.8rem + 1cqi, 1.8rem);
	background: var(--fam-surface);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
	box-shadow: var(--fam-shadow-sm);
}

.fam-band {
	background: linear-gradient(135deg, color-mix(in srgb, var(--fam-primary) 8%, var(--fam-surface)), var(--fam-surface)) !important;
	border-color: var(--fam-border) !important;
}

.fam-subtitle--rule {
	position: relative;
	border-block-end: 0;
	padding-inline-start: 0.9rem;
	margin-block: var(--fam-section) var(--fam-gap);
}

.fam-subtitle--rule::before {
	content: "";
	position: absolute;
	inset-inline-start: 0;
	inset-block: 0.15em 0.15em;
	inline-size: 4px;
	border-radius: 4px;
	background: linear-gradient(180deg, var(--fam-primary), var(--fam-accent));
}

.fam-pill {
	display: inline-flex;
	align-items: center;
	padding: 0.1rem 0.55rem;
	font-size: 0.75rem;
	font-weight: 800;
	color: var(--fam-primary-dark);
	background: color-mix(in srgb, var(--fam-primary) 12%, transparent);
	border-radius: 999px;
	font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------------- Compteurs */

.fam-counters {
	gap: 0.9rem;
}

.fam-counter {
	padding: 1.1rem 1.2rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius);
}

.fam-counter::before {
	content: "";
	position: absolute;
	inset-block: 0;
	inset-inline-start: 0;
	inline-size: 3px;
	background: linear-gradient(180deg, var(--fam-primary), var(--fam-accent));
}

.fam-counter__value { font-size: clamp(1.6rem, 1.2rem + 1.4cqi, 2.4rem); }

/* -------------------------------------------------- Cartes de module */

.fam-modules {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
	gap: 0.9rem;
}

.fam-module {
	padding: 1.2rem;
	border-color: var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
}

.fam-module__icon {
	inline-size: 2.5rem;
	block-size: 2.5rem;
	border-radius: 0.7rem;
}

.fam-module__label { font-size: 1rem; }

/* ------------------------------------------------------------- Fiches */

.fam-card {
	padding: 1.1rem 1.2rem;
	border-color: var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
}

.fam-card__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
	padding-block-end: 0.6rem;
	margin-block-end: 0.7rem;
	border-block-end: 1px dashed var(--fam-hairline);
}

.fam-card__title { margin-block: 0 0.5rem; }

.fam-card__foot {
	display: flex;
	align-items: center;
	gap: 0.5rem;
	flex-wrap: wrap;
	padding-block-start: 0.7rem;
	margin-block-start: 0.7rem;
	border-block-start: 1px solid var(--fam-hairline);
}

.fam-stat--alert strong { color: var(--fam-alert); }

.fam-card__verification {
	margin-block: 0.6rem 0;
	padding-block-start: 0.5rem;
	border-block-start: 1px dashed var(--fam-hairline);
}

/* --------------------------------------------- Baromètre : état vide */

.fam-barometer .fam-empty {
	background: none;
	border-style: dashed;
	padding-block: 1.8rem;
}

/* ------------------------------------------- Explorateur : mise au net */

.fam-mapx__head {
	align-items: center;
	padding: 1rem 1.2rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
}

.fam-mapx__filters {
	background: var(--fam-surface);
	border-color: var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
	align-items: end;
}

.fam-mapx__filters .fam-label {
	font-size: 0.7rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--fam-muted);
}

.fam-mapx__filters select,
.fam-mapx__filters input[type="search"] {
	block-size: 2.4rem;
	border-radius: 999px;
	padding-inline: 0.9rem;
}

/* Le panneau ne dépasse plus la carte : il en épouse la hauteur et défile
   à l'intérieur. C'est ce qui creusait un grand vide sous la carte. */
.fam-mapx__layout { align-items: start; }

.fam-mapx__side {
	block-size: var(--fam-map-h, 30rem);
	padding: 0;
	border-color: var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
	overflow: hidden;
	position: sticky;
	inset-block-start: calc(var(--fam-sticky-top, 0.5rem) + 7.5rem);
}

.fam-mapx__sidehead {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
	padding: 0.85rem 1rem 0.5rem;
}

.fam-mapx__sidetitle { margin: 0; }

.fam-mapx__sidehint {
	padding: 0 1rem 0.7rem;
	margin: 0;
	border-block-end: 1px solid var(--fam-hairline);
	font-size: 0.78rem;
}

.fam-mapx__list {
	margin: 0;
	padding: 0.35rem 0.6rem 0.6rem;
	overscroll-behavior: contain;
}

.fam-mapx__canvas {
	border-color: var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
	box-shadow: var(--fam-shadow-sm);
}

@container (max-width: 56rem) {
	.fam-mapx__side {
		position: static;
		block-size: 24rem;
	}
}

.fam-mapx__context--split { margin-block-start: var(--fam-gap); }

.fam-mapx__context--split > section {
	padding: clamp(1.1rem, 0.8rem + 1cqi, 1.8rem);
	background: var(--fam-surface);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
	box-shadow: var(--fam-shadow-sm);
}

.fam-mapx__context--split .fam-subtitle { margin-block-start: 0; }

/* La frise gagne une grille de fond : sans repère horizontal, l'œil ne
   compare que des hauteurs approximatives. */
.fam-sparkbars {
	position: relative;
	padding-block-end: 1.2rem;
	background-image: repeating-linear-gradient(
		to top,
		transparent 0,
		transparent calc(25% - 1px),
		var(--fam-hairline) calc(25% - 1px),
		var(--fam-hairline) 25%
	);
}

.fam-sparkbar__fill { border-radius: 5px 5px 0 0; }

.fam-sparkbar:hover .fam-sparkbar__fill {
	background: linear-gradient(180deg, var(--fam-accent), var(--fam-primary));
}

/* ------------------------------------------------ Formulaires et champs */

.fam-scope input[type="text"],
.fam-scope input[type="email"],
.fam-scope input[type="url"],
.fam-scope input[type="date"],
.fam-scope input[type="number"],
.fam-scope input[type="search"],
.fam-scope select,
.fam-scope textarea {
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: var(--fam-radius-sm);
	transition: border-color var(--fam-fast) var(--fam-ease), box-shadow var(--fam-fast) var(--fam-ease);
}

.fam-label {
	font-size: 0.78rem;
	font-weight: 700;
	color: var(--fam-primary-dark);
}

/* --------------------------------------------------------- Tableaux */

.fam-table {
	inline-size: 100%;
	border-collapse: separate;
	border-spacing: 0;
	background: var(--fam-surface);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius);
	overflow: hidden;
}

.fam-table th,
.fam-table td {
	padding: 0.6rem 0.9rem;
	border-block-end: 1px solid var(--fam-hairline);
}

.fam-table tbody tr:last-child td { border-block-end: 0; }

/* ------------------------------------------------------ Mode sombre */

@media (prefers-color-scheme: dark) {
	.fam-scope {
		--fam-surface-sunken: #10140c;
		--fam-hairline: color-mix(in srgb, var(--fam-primary) 26%, transparent);
	}

	.fam-nav__top {
		background: linear-gradient(120deg, color-mix(in srgb, var(--fam-primary) 16%, var(--fam-surface)), var(--fam-surface));
	}
}

/* Repli du baromètre et notice calme. */
.fam-barometer__fallback { display: grid; gap: var(--fam-gap); }

.fam-notice--calm {
	display: flex;
	align-items: flex-start;
	gap: 0.55rem;
	padding: 0.8rem 1rem;
	margin: 0;
	font-size: var(--fam-step--1);
	color: var(--fam-muted);
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-hairline);
	border-inline-start: 3px solid var(--fam-primary-soft);
	border-radius: var(--fam-radius-sm);
}

.fam-notice--calm .fam-icon { margin-block-start: 0.15em; color: var(--fam-primary); }

/* Les listes compactes de l'accueil deviennent des lignes lisibles plutôt que
   des blocs gris : la capture montrait des pavés vides autour des libellés. */
.fam-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.fam-list__item {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 0.7rem;
	padding: 0.55rem 0;
	background: none;
	border: 0;
	border-block-end: 1px solid var(--fam-hairline);
}

.fam-list__item:last-child { border-block-end: 0; }

.fam-list__item > a { text-decoration: none; font-weight: 600; }
.fam-list__item > a:hover { text-decoration: underline; }

.fam-list__meta {
	font-size: var(--fam-step--1);
	color: var(--fam-muted);
	font-variant-numeric: tabular-nums;
	white-space: nowrap;
}

/* Le pied de l'accueil s'aligne sur la grille de surfaces. */
.fam-hub__foot { border-block-start: 0; }

.fam-meta-line {
	display: flex;
	align-items: center;
	gap: 0.45rem;
	padding: 0.8rem 1.1rem;
	margin-block-start: var(--fam-gap);
	font-size: var(--fam-step--1);
	color: var(--fam-muted);
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius);
}

/* Le bandeau d'identité gagne une trame discrète : une aplat de couleur seul
   fait « gabarit par défaut », une texture fine fait produit fini. */
.fam-masthead::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image:
		radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--fam-primary) 22%, transparent) 1px, transparent 0);
	background-size: 22px 22px;
	opacity: 0.35;
	pointer-events: none;
}

.fam-masthead {
	position: relative;
	border-radius: var(--fam-radius-lg);
}

.fam-masthead > * { position: relative; z-index: 1; }

.fam-fact {
	background: color-mix(in srgb, var(--fam-surface) 88%, transparent);
	border-color: var(--fam-hairline);
}

/* =========================================================================
   COUCHE 14 — Alignements, débordements, puces parasites
   ========================================================================= */

/* ------------------------------------------------- Puces de liste du thème

   Le thème applique une puce à tout <li> de la page. Elle apparaissait entre
   chaque rubrique de la navigation et devant chaque note. On la neutralise
   dans le périmètre du plugin, pour les listes qui n'en veulent pas. */

.fam-scope ul,
.fam-scope ol {
	list-style: none;
}

.fam-nav__list,
.fam-nav__item,
.fam-notes,
.fam-notes li,
.fam-list,
.fam-list__item,
.fam-bars,
.fam-bar,
.fam-sparkbars,
.fam-sparkbar,
.fam-modules,
.fam-barometer__list,
.fam-barometer__item,
.fam-barometer__legend,
.fam-barometer__legend-item,
.fam-mapx__list,
.fam-mapx__item,
.fam-checks,
.fam-testimony-list {
	list-style: none !important;
	padding-inline-start: 0;
}

.fam-scope li::marker {
	content: "";
	font-size: 0;
}

/* Certains thèmes dessinent la puce en pseudo-élément plutôt qu'en marqueur :
   on ne neutralise que ceux des listes du plugin, jamais du contenu éditorial
   d'une fiche, où une liste à puces reste légitime. */
.fam-nav__item::before,
.fam-notes > li::before,
.fam-list__item::before,
.fam-bar::before,
.fam-sparkbar::before,
.fam-mapx__item::before,
.fam-barometer__item::before,
.fam-barometer__legend-item::before,
.fam-checks > label::before {
	content: none !important;
	display: none !important;
}

/* ------------------------------------------ Cartes de module : la flèche

   La disposition en zones de grille se désalignait dès qu'un thème
   redéfinissait `display` sur les liens, projetant la flèche au milieu du
   texte. Une colonne simple résiste mieux : chaque élément suit le
   précédent, sans dépendre d'un gabarit nommé. */

.fam-module {
	display: flex !important;
	flex-direction: column;
	align-items: flex-start;
	gap: 0.35rem;
}

.fam-module__icon {
	order: 1;
	margin-block-end: 0.5rem;
}

.fam-module__label { order: 2; }
.fam-module__count { order: 3; }

.fam-module__text {
	order: 4;
	margin-block-start: 0.35rem;
	flex: 1 1 auto;
}

/* La flèche est sortie du flux et ancrée dans le coin supérieur droit de la
   carte, en face de l'icône. Elle ne peut donc plus chevaucher un
   paragraphe, quelle que soit la longueur du texte ou la façon dont le thème
   redéfinit l'affichage des liens. Une réserve d'espace sur la première ligne
   garantit qu'elle ne recouvre pas non plus le titre. */
.fam-module {
	position: relative;
	padding-inline-end: 3.4rem;
}

.fam-module__go {
	order: 0;
	position: absolute;
	inset-block-start: 1.2rem;
	inset-inline-end: 1.2rem;
	display: grid;
	place-items: center;
	inline-size: 2rem;
	block-size: 2rem;
	margin: 0;
	padding: 0;
	border: 1px solid var(--fam-hairline);
	border-radius: 50%;
	color: var(--fam-primary);
	background: var(--fam-surface);
	transition:
		background-color var(--fam-slow) var(--fam-ease),
		border-color var(--fam-slow) var(--fam-ease),
		color var(--fam-slow) var(--fam-ease),
		transform var(--fam-slow) var(--fam-ease);
}

.fam-module:hover .fam-module__go,
.fam-module:focus-visible .fam-module__go {
	color: var(--fam-surface);
	background: var(--fam-primary);
	border-color: var(--fam-primary);
	transform: translateX(3px);
}

.fam-module:hover .fam-module__go .fam-icon,
.fam-module:focus-visible .fam-module__go .fam-icon {
	transform: none;
}

/* --------------------------------------- Barres : la valeur ne déborde plus

   La colonne de droite se dimensionnait sur son contenu et poussait la barre
   hors du panneau dès que le libellé secondaire s'allongeait. Elle est
   maintenant bornée, et la piste peut se réduire. */

.fam-bar {
	grid-template-columns: minmax(5rem, 9rem) minmax(0, 1fr) minmax(4.5rem, auto);
	align-items: center;
	padding-block: 0.15rem;
}

.fam-bar__track { min-inline-size: 0; }

.fam-bar__value {
	min-inline-size: 0;
	text-align: end;
}

.fam-bar__value small {
	display: block;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* --------------------------------- Panneaux côte à côte : pas d'étirement

   Deux colonnes de hauteurs différentes s'alignaient sur la plus haute, ce
   qui laissait un grand vide sous la plus courte. */

.fam-hub__foot,
.fam-mapx__context--split,
.fam-report__grid {
	align-items: start;
}

/* ------------------------------------------- Débordements de texte longs

   Un nom de localité sans espace, une URL de source ou un titre composé
   forçaient une barre de défilement horizontale sur toute la page. */

.fam-scope {
	overflow-wrap: break-word;
}

.fam-card__title,
.fam-card__location,
.fam-card__sources,
.fam-mapx__itemtitle,
.fam-mapx__itemloc,
.fam-list__item,
.fam-bar__label,
.fam-barometer__name,
.fam-module__text {
	min-inline-size: 0;
	overflow-wrap: anywhere;
}

.fam-card__sources a {
	display: inline-block;
	max-inline-size: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
	vertical-align: bottom;
}

/* ----------------------------------------- Espacements : rythme régulier */

.fam-hub > * + * { margin-block-start: 0; }

.fam-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr));
	gap: 0.9rem;
	align-items: start;
}

.fam-card__foot > * { min-inline-size: 0; }

.fam-card__sources-label { flex: 0 0 auto; }

.fam-backlink { margin-block: var(--fam-gap) 0; }

/* Le pied de fiche ne doit pas coller au bord inférieur de la carte. */
.fam-card { display: flex; flex-direction: column; }
.fam-card__excerpt { flex: 1 1 auto; }

/* ------------------------------------------- Compteurs : hauteur égale */

.fam-counters {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
	align-items: stretch;
}

.fam-counter {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 0.2rem;
	min-inline-size: 0;
}

.fam-counter__label { overflow-wrap: anywhere; }

/* --------------------------------------------------- Barre : alignement */

.fam-nav__top { flex-wrap: wrap; row-gap: 0.5rem; }

.fam-nav__item { display: flex; }

.fam-nav__link { align-items: center; }

/* Sans cette borne, un nom de base long repoussait la recherche hors du
   bandeau au lieu de se tronquer proprement. */
.fam-nav__brandtext strong,
.fam-nav__brandtext small {
	display: block;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	max-inline-size: 22ch;
}

/* =========================================================================
   COUCHE 15 — Page de recherche et affinage visuel général
   ========================================================================= */

/* --------------------------------------------------------------- Recherche */

.fam-search {
	display: grid;
	gap: var(--fam-gap);
	padding: 0 !important;
	background: none !important;
	border: 0 !important;
	box-shadow: none !important;
}

.fam-search__hero {
	position: relative;
	padding: clamp(1.5rem, 1rem + 2.5cqi, 2.75rem);
	background:
		radial-gradient(120% 150% at 100% 0%, color-mix(in srgb, var(--fam-primary) 14%, transparent) 0%, transparent 60%),
		linear-gradient(140deg, var(--fam-primary-pale) 0%, var(--fam-surface) 65%);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
	overflow: hidden;
}

.fam-search__hero::before {
	content: "";
	position: absolute;
	inset: 0;
	background-image: radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--fam-primary) 20%, transparent) 1px, transparent 0);
	background-size: 22px 22px;
	opacity: 0.3;
	pointer-events: none;
}

.fam-search__hero > * { position: relative; z-index: 1; }

.fam-search__herotitle {
	margin: 0 0 0.5rem;
	font-size: clamp(1.5rem, 1.2rem + 1.6cqi, 2.2rem);
	font-weight: 800;
	letter-spacing: -0.025em;
	line-height: 1.15;
	color: var(--fam-primary-dark);
}

.fam-search__herotext {
	margin: 0 0 1.4rem;
	max-inline-size: 60ch;
	font-size: var(--fam-step-0);
	line-height: 1.55;
	color: var(--fam-muted);
	text-wrap: pretty;
}

.fam-search__form { margin: 0; }

.fam-search__bar {
	position: relative;
	display: flex;
	align-items: center;
	gap: 0.5rem;
	max-inline-size: 46rem;
}

.fam-search__bar input[type="search"] {
	flex: 1 1 auto;
	min-inline-size: 0;
	block-size: 3.4rem;
	padding-inline: 3.1rem 2.9rem;
	font-size: 1.05rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border-strong);
	border-radius: 999px;
	box-shadow: var(--fam-shadow-sm);
}

.fam-search__bar input[type="search"]::-webkit-search-cancel-button { display: none; }

.fam-search__submit {
	block-size: 3.4rem;
	padding-inline: 1.6rem;
	border-radius: 999px;
	flex: 0 0 auto;
}

/* Le bouton d'effacement se loge dans le champ, pas à côté : il appartient
   visuellement au champ qu'il vide. */
.fam-search__clear {
	position: absolute;
	inset-block-start: 50%;
	inset-inline-end: 9.5rem;
	translate: 0 -50%;
	display: grid;
	place-items: center;
	inline-size: 1.7rem;
	block-size: 1.7rem;
	padding: 0;
	color: var(--fam-muted);
	background: var(--fam-surface-2);
	border: 0;
	border-radius: 50%;
	cursor: pointer;
	transition: background-color var(--fam-fast) var(--fam-ease), color var(--fam-fast) var(--fam-ease);
}

.fam-search__clear:hover {
	color: var(--fam-surface);
	background: var(--fam-primary);
}

@container (max-width: 34rem) {
	.fam-search__bar { flex-wrap: wrap; }
	.fam-search__submit { inline-size: 100%; }
	.fam-search__clear { inset-inline-end: 0.8rem; }
}

/* --- Suggestions avant toute requête. */

.fam-search__suggest {
	display: grid;
	gap: var(--fam-gap);
	padding: clamp(1.1rem, 0.8rem + 1cqi, 1.8rem);
	background: var(--fam-surface);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
	box-shadow: var(--fam-shadow-sm);
}

.fam-suggest__title {
	display: flex;
	align-items: center;
	gap: 0.4rem;
	margin: 0 0 0.6rem;
	font-size: 0.72rem;
	font-weight: 800;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--fam-muted);
}

.fam-suggest__chips {
	display: flex;
	flex-wrap: wrap;
	gap: 0.45rem;
}

.fam-chip--action {
	font: inherit;
	font-size: 0.85rem;
	font-weight: 600;
	padding: 0.4rem 0.5rem 0.4rem 0.85rem;
	color: var(--fam-primary-dark);
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: 999px;
	cursor: pointer;
	transition: background-color var(--fam-fast) var(--fam-ease), border-color var(--fam-fast) var(--fam-ease), transform var(--fam-fast) var(--fam-ease);
}

.fam-chip--action:hover {
	border-color: var(--fam-primary);
	background: color-mix(in srgb, var(--fam-primary) 8%, transparent);
	transform: translateY(-1px);
}

.fam-chip__count {
	display: inline-block;
	margin-inline-start: 0.45rem;
	padding: 0.05rem 0.45rem;
	font-size: 0.72rem;
	font-weight: 800;
	color: var(--fam-muted);
	background: var(--fam-surface-2);
	border-radius: 999px;
	font-variant-numeric: tabular-nums;
}

.fam-search__hint {
	display: flex;
	align-items: center;
	gap: 0.45rem;
	margin: 0;
	padding-block-start: 0.9rem;
	border-block-start: 1px solid var(--fam-hairline);
	font-size: var(--fam-step--1);
	color: var(--fam-muted);
}

.fam-search__hint kbd {
	padding: 0.05rem 0.4rem;
	margin-inline: 0.15rem;
	font: inherit;
	font-size: 0.75rem;
	font-weight: 700;
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-border);
	border-radius: 5px;
}

/* --- Onglets de rubrique. */

.fam-search__scopes {
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem;
	padding: 0.4rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-hairline);
	border-radius: 999px;
	box-shadow: var(--fam-shadow-sm);
}

.fam-search__scopes .fam-segmented__btn { padding: 0.5rem 0.95rem; }

.fam-search__scopes .fam-segmented__btn.is-active .fam-pill {
	color: var(--fam-surface);
	background: color-mix(in srgb, #fff 26%, transparent);
}

/* --- Résultats. */

.fam-search__results {
	display: grid;
	gap: var(--fam-gap);
}

.fam-results-count {
	margin: 0;
	font-size: var(--fam-step--1);
	color: var(--fam-muted);
}

.fam-results-count strong { color: var(--fam-primary-dark); font-size: var(--fam-step-1); }
.fam-results-count em { font-style: normal; font-weight: 600; color: var(--fam-primary-dark); }

.fam-search__group {
	padding: clamp(1rem, 0.8rem + 0.8cqi, 1.6rem);
	background: var(--fam-surface);
	border: 1px solid var(--fam-hairline);
	border-radius: var(--fam-radius-lg);
	box-shadow: var(--fam-shadow-sm);
}

.fam-search__group .fam-subtitle--rule {
	margin-block: 0 0.9rem;
}

.fam-hits {
	display: grid;
	gap: 0.25rem;
	margin: 0;
	padding: 0;
}

.fam-hit {
	position: relative;
	display: grid;
	grid-template-columns: auto minmax(0, 1fr) auto;
	align-items: start;
	gap: 0.85rem;
	padding: 0.85rem;
	border-radius: var(--fam-radius);
	transition: background-color var(--fam-fast) var(--fam-ease);
}

.fam-hit + .fam-hit { border-block-start: 1px solid var(--fam-hairline); }

.fam-hit:hover { background: color-mix(in srgb, var(--fam-primary) 5%, transparent); }

.fam-hit__icon {
	display: grid;
	place-items: center;
	inline-size: 2.1rem;
	block-size: 2.1rem;
	color: var(--fam-primary);
	background: color-mix(in srgb, var(--fam-primary) 10%, transparent);
	border-radius: 0.6rem;
}

.fam-hit__body { min-inline-size: 0; }

.fam-hit__title {
	display: block;
	font-size: var(--fam-step-0);
	font-weight: 700;
	line-height: 1.35;
	color: var(--fam-primary-dark);
	text-decoration: none;
	overflow-wrap: anywhere;
}

.fam-hit__title::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: inherit;
}

.fam-hit:hover .fam-hit__title { text-decoration: underline; }

.fam-hit__excerpt {
	margin: 0.3rem 0 0;
	font-size: var(--fam-step--1);
	line-height: 1.5;
	color: var(--fam-muted);
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.fam-hit__meta {
	display: flex;
	flex-wrap: wrap;
	gap: 0.3rem 0.9rem;
	margin: 0.45rem 0 0;
	font-size: 0.78rem;
	color: var(--fam-muted);
}

.fam-hit__meta span {
	display: inline-flex;
	align-items: center;
	gap: 0.25rem;
}

.fam-hit__province {
	padding: 0.05rem 0.5rem;
	font-weight: 700;
	color: var(--fam-primary-dark);
	background: var(--fam-surface-2);
	border-radius: 999px;
}

.fam-hit__go {
	align-self: center;
	color: var(--fam-muted);
	transition: transform var(--fam-fast) var(--fam-ease), color var(--fam-fast) var(--fam-ease);
}

.fam-hit:hover .fam-hit__go {
	color: var(--fam-primary);
	transform: translateX(3px);
}

@container (max-width: 30rem) {
	.fam-hit { grid-template-columns: auto minmax(0, 1fr); }
	.fam-hit__go { display: none; }
}

/* ------------------------------------------- Affinage visuel d'ensemble */

/* Titres de section : la barre de couleur devient un point d'accroche plus
   fin, et le titre respire davantage au-dessus du contenu. */
.fam-subtitle--rule::before {
	inline-size: 3px;
	background: linear-gradient(180deg, var(--fam-primary), color-mix(in srgb, var(--fam-accent) 80%, transparent));
}

/* Les surfaces gagnent une bordure supérieure plus claire : c'est ce qui
   donne l'impression d'un éclairage venant du haut, et détache le panneau du
   fond sans recourir à une ombre lourde. */
.fam-card,
.fam-module,
.fam-counter,
.fam-search__group,
.fam-search__suggest,
.fam-mapx__side,
.fam-mapx__canvas,
.fam-hub__aside {
	border-block-start-color: color-mix(in srgb, var(--fam-surface) 70%, var(--fam-border));
}

/* Boutons : la variante fantôme cesse d'être un simple texte souligné. */
.fam-btn--ghost,
.fam-btn:not(.fam-btn--primary):not(.fam-btn--link) {
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: 999px;
	padding: 0.55rem 1.1rem;
	font-weight: 600;
	color: var(--fam-primary-dark);
}

.fam-btn--primary {
	border-radius: 999px;
	padding: 0.55rem 1.3rem;
}

.fam-btn--link {
	padding: 0.35rem 0;
	background: none;
	border: 0;
	color: var(--fam-primary);
	font-weight: 700;
}

.fam-btn--link:hover { text-decoration: underline; }

/* Les puces d'état gagnent un point coloré plutôt qu'un simple filet. */
.fam-verif {
	display: inline-flex;
	align-items: center;
	gap: 0.35rem;
	padding: 0.15rem 0.6rem;
	font-size: 0.75rem;
	font-weight: 700;
	border-radius: 999px;
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-hairline);
}

/* Espacement vertical unifié entre les grands blocs de chaque page. */
.fam-hub,
.fam-mapx,
.fam-report,
.fam-collection {
	display: grid;
	gap: var(--fam-gap);
}

@media (prefers-color-scheme: dark) {
	.fam-search__hero {
		background:
			radial-gradient(120% 150% at 100% 0%, color-mix(in srgb, var(--fam-primary) 22%, transparent) 0%, transparent 60%),
			linear-gradient(140deg, color-mix(in srgb, var(--fam-primary) 14%, var(--fam-surface)) 0%, var(--fam-surface) 65%);
	}
}

/* =========================================================================
   COUCHE 16 — Champs composés
   L'icône était positionnée en absolu, donc hors de l'alignement du
   conteneur : elle dérivait dès qu'un thème modifiait la hauteur du champ ou
   son interligne. Elle devient ici un enfant ordinaire d'une boîte flex, qui
   porte elle-même la bordure et le fond. Le champ n'est plus qu'un texte
   transparent : plus rien ne peut se désaligner.
   ========================================================================= */

.fam-inputgroup {
	display: flex;
	align-items: center;
	gap: 0.6rem;
	flex: 1 1 auto;
	min-inline-size: 0;
	padding-inline: 0.95rem;
	background: var(--fam-surface);
	border: 1px solid var(--fam-border);
	border-radius: var(--fam-radius-sm);
	transition: border-color var(--fam-fast) var(--fam-ease), box-shadow var(--fam-fast) var(--fam-ease);
}

.fam-inputgroup--pill { border-radius: 999px; }

.fam-inputgroup:focus-within {
	border-color: var(--fam-primary);
	box-shadow: var(--fam-ring);
}

.fam-inputgroup__icon {
	flex: 0 0 auto;
	vertical-align: baseline;
	color: var(--fam-muted);
	pointer-events: none;
}

.fam-inputgroup:focus-within .fam-inputgroup__icon { color: var(--fam-primary); }

/* Le champ lui-même ne porte plus aucune décoration : bordure, fond et
   arrondi appartiennent à la boîte. Les règles génériques du plugin et
   celles du thème sont neutralisées ici, faute de quoi un double cadre
   apparaît. */
.fam-scope .fam-inputgroup input[type="search"],
.fam-scope .fam-inputgroup input[type="text"] {
	flex: 1 1 auto;
	min-inline-size: 0;
	inline-size: 100%;
	block-size: 2.6rem;
	margin: 0;
	padding: 0;
	font: inherit;
	font-size: 0.9rem;
	line-height: 1.2;
	color: var(--fam-text);
	background: transparent;
	border: 0;
	border-radius: 0;
	box-shadow: none;
	outline: 0;
}

.fam-scope .fam-inputgroup input:focus {
	border: 0;
	box-shadow: none;
	outline: 0;
}

.fam-inputgroup input::-webkit-search-cancel-button { display: none; }

.fam-inputgroup--lg { padding-inline: 1.2rem; }

.fam-scope .fam-inputgroup--lg input[type="search"] {
	block-size: 3.3rem;
	font-size: 1.02rem;
}

.fam-inputgroup--lg .fam-inputgroup__icon { --fam-icon-size: 1.25rem; }

.fam-inputgroup__kbd {
	flex: 0 0 auto;
	padding: 0.1rem 0.45rem;
	font: inherit;
	font-size: 0.72rem;
	font-weight: 700;
	line-height: 1.4;
	color: var(--fam-muted);
	background: var(--fam-surface-2);
	border: 1px solid var(--fam-border);
	border-radius: 5px;
	pointer-events: none;
}

.fam-inputgroup__clear {
	display: grid;
	place-items: center;
	flex: 0 0 auto;
	inline-size: 1.75rem;
	block-size: 1.75rem;
	padding: 0;
	color: var(--fam-muted);
	background: var(--fam-surface-2);
	border: 0;
	border-radius: 50%;
	cursor: pointer;
	transition: background-color var(--fam-fast) var(--fam-ease), color var(--fam-fast) var(--fam-ease);
}

.fam-inputgroup__clear:hover {
	color: var(--fam-surface);
	background: var(--fam-primary);
}

.fam-inputgroup__clear[hidden] { display: none; }

/* --- Reprise des trois emplacements. */

.fam-nav__search {
	position: static;
	display: flex;
	align-items: center;
	flex: 1 1 16rem;
	max-inline-size: 30rem;
	min-inline-size: 0;
}

.fam-scope .fam-nav__search .fam-inputgroup input[type="search"] {
	block-size: 2.4rem;
	font-size: 0.88rem;
}

.fam-masthead__search {
	position: static;
	display: flex;
	align-items: stretch;
	gap: 0.55rem;
	margin-block-start: 1.4rem;
	max-inline-size: 38rem;
}

.fam-masthead__search .fam-btn {
	flex: 0 0 auto;
	block-size: auto;
	padding-inline: 1.5rem;
	border-radius: 999px;
}

.fam-search__bar {
	position: static;
	display: flex;
	align-items: stretch;
	gap: 0.55rem;
	max-inline-size: 46rem;
}

.fam-search__submit {
	block-size: auto;
	padding-inline: 1.7rem;
}

@container (max-width: 34rem) {
	.fam-search__bar { flex-wrap: wrap; }
	.fam-search__submit { inline-size: 100%; }
}

/* La barre de navigation passe au-dessus du fil d'Ariane et de l'en-tête de
   fiche : elle doit garder son propre espacement dans ce contexte. */
.fam-page__inner > .fam-navwrap {
	margin-block: 0 var(--fam-gap);
}

/* Les anciennes loupes positionnées en absolu ne sont plus rendues par les
   gabarits. Cette règle neutralise leur mise en page au cas où un contenu
   mis en cache ou une page construite avec l'ancien balisage subsisterait. */
.fam-masthead__glass,
.fam-search__glass,
.fam-nav__glass,
.fam-nav__kbd,
.fam-search__clear {
	position: static;
	inset: auto;
	translate: none;
	transform: none;
}

.fam-masthead__glass,
.fam-search__glass,
.fam-nav__glass {
	align-self: center;
	color: var(--fam-muted);
}
