/**
 * AENS — Bibliothèque de composants.
 * Chaque composant : défaut, hover, active, focus, disabled, loading, erreur.
 * Clair + sombre. Les composants n'utilisent que des tokens sémantiques.
 *
 * @package aens-theme
 */

/* =========================================================================
 * 1. BOUTONS
 * ====================================================================== */

.aens-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--space-2xs);
	min-height: 2.5rem;
	padding: 0.625rem var(--space-md);
	border: 1.5px solid transparent;
	border-radius: var(--radius-full);
	font-family: var(--font-heading);
	font-size: var(--text-label-lg);
	font-weight: 600;
	line-height: 1.25;
	letter-spacing: 0.01em;
	text-align: center;
	text-decoration: none;
	cursor: pointer;
	white-space: nowrap;
	transition:
		background-color var(--dur-fast) var(--ease),
		border-color var(--dur-fast) var(--ease),
		color var(--dur-fast) var(--ease),
		box-shadow var(--dur-fast) var(--ease),
		transform var(--dur-fast) var(--ease);
}

.aens-btn:active:not(:disabled) {
	transform: scale(0.98);
}

.aens-btn:disabled,
.aens-btn[aria-disabled="true"] {
	opacity: 0.55;
	cursor: not-allowed;
	pointer-events: none;
}

/* Tailles */
.aens-btn--sm { min-height: 2rem;   padding: 0.375rem var(--space-sm); font-size: var(--text-label-sm); }
.aens-btn--lg { min-height: 3rem;   padding: 0.875rem 1.75rem; font-size: var(--text-body-md); }

/* Cible tactile 44×44 garantie sur mobile. */
@media (max-width: 1023px) {
	.aens-btn { min-height: var(--tap-target); }
}

.aens-btn--block { width: 100%; }

/* Variante primaire institutionnelle */
.aens-btn--primary {
	background-color: var(--color-cta);
	color: var(--color-cta-text);
	box-shadow: var(--shadow-1);
}

.aens-btn--primary:hover,
.aens-btn--primary:focus-visible {
	background-color: var(--color-cta-hover);
	color: var(--color-cta-text);
	box-shadow: var(--shadow-2);
}

/* Variante accent vif — conversion, engagement */
.aens-btn--vivid {
	background-color: var(--color-cta-vivid);
	color: var(--color-cta-vivid-text);
}

.aens-btn--vivid:hover,
.aens-btn--vivid:focus-visible {
	background-color: var(--aens-leaf-300);
	color: var(--color-cta-vivid-text);
}

.dark .aens-btn--vivid:hover,
.dark .aens-btn--vivid:focus-visible {
	background-color: var(--aens-leaf-200);
}

/* Variante solidarité chaude — usage limité */
.aens-btn--warm {
	background-color: var(--color-action-warm);
	color: var(--color-action-warm-text);
}

.aens-btn--warm:hover,
.aens-btn--warm:focus-visible {
	background-color: var(--color-action-warm-hover);
	color: var(--color-action-warm-text);
}

/* Variante ghost / outline */
.aens-btn--ghost {
	background-color: transparent;
	border-color: var(--color-accent);
	color: var(--color-accent);
}

.aens-btn--ghost:hover,
.aens-btn--ghost:focus-visible {
	background-color: color-mix(in srgb, var(--color-accent) 6%, transparent);
	color: var(--color-accent-hover);
	border-color: var(--color-accent-hover);
}

/* Variante lien-bouton */
.aens-btn--link {
	background: transparent;
	border-color: transparent;
	padding-inline: 0;
	color: var(--color-text-link);
	border-radius: var(--radius-sm);
}

.aens-btn--link:hover,
.aens-btn--link:focus-visible {
	color: var(--color-text-link-hover);
	text-decoration: underline;
}

/* Variante danger — admin uniquement */
.aens-btn--danger {
	background-color: var(--color-error);
	color: var(--aens-neutral-0);
}

.dark .aens-btn--danger {
	color: var(--aens-neutral-950);
}

/* Variante neutre sur surface */
.aens-btn--soft {
	background-color: var(--color-bg-subtle);
	color: var(--color-accent);
	border-color: var(--color-border-subtle);
}

.aens-btn--soft:hover,
.aens-btn--soft:focus-visible {
	background-color: var(--color-bg-muted);
}

/* Bouton sur fond sombre (bannières, footer) */
.aens-btn--on-dark {
	background-color: var(--aens-neutral-0);
	color: var(--aens-green-900);
}

.aens-btn--on-dark:hover,
.aens-btn--on-dark:focus-visible {
	background-color: var(--aens-neutral-100);
	color: var(--aens-green-950);
}

.aens-btn--on-dark-ghost {
	background-color: transparent;
	border-color: rgba(255, 255, 255, 0.6);
	color: var(--aens-neutral-0);
}

.aens-btn--on-dark-ghost:hover,
.aens-btn--on-dark-ghost:focus-visible {
	background-color: rgba(255, 255, 255, 0.12);
	border-color: var(--aens-neutral-0);
	color: var(--aens-neutral-0);
}

/* L'icône directionnelle avance légèrement au survol. */
.aens-btn .aens-icon--arrow {
	transition: transform var(--dur-fast) var(--ease);
}

.aens-btn:hover .aens-icon--arrow {
	transform: translateX(2px);
}

/* État de chargement */
.aens-btn.is-loading {
	position: relative;
	color: transparent !important;
	pointer-events: none;
}

.aens-btn.is-loading::after {
	content: "";
	position: absolute;
	width: 1.125rem;
	height: 1.125rem;
	border: 2px solid currentColor;
	border-top-color: transparent;
	border-radius: var(--radius-full);
	animation: aens-spin 700ms linear infinite;
	color: var(--color-cta-text);
}

.aens-btn--ghost.is-loading::after,
.aens-btn--link.is-loading::after,
.aens-btn--soft.is-loading::after {
	color: var(--color-accent);
}

@keyframes aens-spin {
	to { transform: rotate(360deg); }
}

/* =========================================================================
 * 2. BADGES, CHIPS, PILLS
 * ====================================================================== */

.aens-badge {
	display: inline-flex;
	align-items: center;
	gap: 0.25rem;
	padding: 0.1875rem 0.625rem;
	border-radius: var(--radius-full);
	font-family: var(--font-body);
	font-size: var(--text-label-sm);
	font-weight: 600;
	letter-spacing: 0.02em;
	line-height: 1.33;
	white-space: nowrap;
}

.aens-badge--eco {
	background: var(--color-badge-eco-bg);
	color: var(--color-badge-eco-text);
}

.aens-badge--warm {
	background: var(--color-badge-warm-bg);
	color: var(--color-badge-warm-text);
}

.aens-badge--inst {
	background: var(--color-badge-inst-bg);
	color: var(--color-badge-inst-text);
}

.aens-badge--outline {
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border);
	color: var(--color-text-secondary);
}

/* Badge sur média : lisible quel que soit le fond. */
.aens-badge--overlay {
	background: color-mix(in srgb, var(--color-bg-surface) 94%, transparent);
	backdrop-filter: blur(6px);
	-webkit-backdrop-filter: blur(6px);
	border: 1px solid var(--color-border-subtle);
	color: var(--color-accent);
}

/*
 * Statuts de projet : jamais identifiés par la seule couleur.
 * Chaque statut porte une icône distincte + un libellé texte.
 */
.aens-status {
	display: inline-flex;
	align-items: center;
	gap: 0.3rem;
	padding: 0.1875rem 0.625rem;
	border-radius: var(--radius-full);
	border: 1px solid transparent;
	font-size: var(--text-label-sm);
	font-weight: 600;
	line-height: 1.33;
	white-space: nowrap;
}

.aens-status--development {
	background: var(--color-badge-inst-bg);
	border-color: color-mix(in srgb, var(--color-accent) 30%, transparent);
	color: var(--color-badge-inst-text);
}

.aens-status--ongoing {
	background: var(--color-badge-warm-bg);
	border-color: color-mix(in srgb, var(--color-action-warm) 35%, transparent);
	color: var(--color-badge-warm-text);
}

.aens-status--completed {
	background: var(--color-badge-eco-bg);
	border-color: color-mix(in srgb, var(--color-cta-vivid) 45%, transparent);
	color: var(--color-badge-eco-text);
}

/* Chips de filtre */
.aens-chip {
	display: inline-flex;
	align-items: center;
	gap: var(--space-3xs);
	min-height: 2.25rem;
	padding: 0.375rem var(--space-sm);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-full);
	background: var(--color-bg-subtle);
	color: var(--color-text-primary);
	font-family: var(--font-body);
	font-size: var(--text-label-sm);
	font-weight: 600;
	text-decoration: none;
	white-space: nowrap;
	cursor: pointer;
	transition: background-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}

@media (max-width: 1023px) {
	.aens-chip { min-height: var(--tap-target); }
}

.aens-chip:hover,
.aens-chip:focus-visible {
	background: var(--color-bg-muted);
	color: var(--color-accent);
}

.aens-chip.is-active,
.aens-chip[aria-current="true"],
.aens-chip[aria-pressed="true"] {
	background: var(--color-cta);
	border-color: var(--color-cta);
	color: var(--color-cta-text);
}

/* Chip de filtre actif retirable. */
.aens-chip--removable .aens-icon {
	opacity: 0.8;
}

.aens-chip-row {
	display: flex;
	align-items: center;
	gap: var(--space-2xs);
	overflow-x: auto;
	padding-bottom: var(--space-3xs);
	scrollbar-width: thin;
}

.aens-chip-row::-webkit-scrollbar { height: 4px; }
.aens-chip-row::-webkit-scrollbar-thumb {
	background: var(--color-border);
	border-radius: var(--radius-full);
}

/* =========================================================================
 * 3. CARTES
 * ====================================================================== */

.aens-card {
	display: flex;
	flex-direction: column;
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-1);
	overflow: hidden;
	height: 100%;
	transition:
		transform var(--dur-base) var(--ease),
		box-shadow var(--dur-base) var(--ease),
		border-color var(--dur-base) var(--ease);
}

/* En mode sombre, l'élévation passe par la surface, pas par l'ombre. */
.dark .aens-card {
	background: var(--color-bg-surface);
	border-color: var(--color-border);
}

.aens-card--lift:hover,
.aens-card--lift:focus-within {
	transform: translateY(-4px);
	box-shadow: var(--shadow-2);
	border-color: color-mix(in srgb, var(--color-accent) 25%, transparent);
}

.dark .aens-card--lift:hover,
.dark .aens-card--lift:focus-within {
	transform: translateY(-4px);
	background: var(--color-bg-subtle);
	border-color: var(--color-border-strong);
}

@media (prefers-reduced-motion: reduce) {
	.aens-card--lift:hover,
	.aens-card--lift:focus-within { transform: none; }
}

.aens-card__media {
	position: relative;
	aspect-ratio: 16 / 10;
	overflow: hidden;
	background: var(--color-bg-subtle);
	flex: none;
}

.aens-card__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform var(--dur-slow) var(--ease);
}

.aens-card--lift:hover .aens-card__media img {
	transform: scale(1.04);
}

@media (prefers-reduced-motion: reduce) {
	.aens-card--lift:hover .aens-card__media img { transform: none; }
}

.aens-card__media-top,
.aens-card__media-bottom {
	position: absolute;
	inset-inline: var(--space-2xs);
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3xs);
}

.aens-card__media-top    { top: var(--space-2xs); }
.aens-card__media-bottom { bottom: var(--space-2xs); justify-content: flex-end; }

.aens-card__body {
	display: flex;
	flex-direction: column;
	gap: var(--space-2xs);
	padding: var(--space-md);
	flex: 1 1 auto;
}

.aens-card__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-3xs);
	font-size: var(--text-label-sm);
	font-weight: 600;
	color: var(--color-text-muted);
}

.aens-card__meta .aens-icon { color: var(--color-cta-vivid); }

.dark .aens-card__meta .aens-icon { color: var(--aens-leaf-200); }

.aens-card__title {
	font-family: var(--font-heading);
	font-size: var(--text-title-md);
	font-weight: 700;
	line-height: 1.4;
	color: var(--color-text-primary);
	margin: 0;
}

.aens-card__title a {
	color: inherit;
	text-decoration: none;
}

.aens-card__title a:hover,
.aens-card__title a:focus-visible {
	color: var(--color-text-link);
	text-decoration: underline;
}

.aens-card__excerpt {
	font-size: var(--text-body-sm);
	line-height: 1.6;
	color: var(--color-text-secondary);
	margin: 0;
	display: -webkit-box;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.aens-card__foot {
	margin-top: auto;
	padding-top: var(--space-xs);
	border-top: 1px solid var(--color-border-subtle);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-2xs);
}

/* Le lien reste explicite : le survol n'est jamais le seul signal. */
.aens-card__link {
	display: inline-flex;
	align-items: center;
	gap: var(--space-3xs);
	font-family: var(--font-heading);
	font-size: var(--text-label-lg);
	font-weight: 600;
	color: var(--color-text-link);
	text-decoration: none;
}

.aens-card__link:hover,
.aens-card__link:focus-visible {
	text-decoration: underline;
}

.aens-card__link .aens-icon {
	transition: transform var(--dur-fast) var(--ease);
}

.aens-card__link:hover .aens-icon { transform: translateX(2px); }

/* Carte domaine d'action */
.aens-card--domain .aens-card__body { gap: var(--space-xs); }

.aens-card__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3rem;
	height: 3rem;
	border-radius: var(--radius-lg);
	background: var(--color-accent-subtle);
	color: var(--color-accent);
	flex: none;
}

.aens-card__icon--warm {
	background: var(--color-surface-terra);
	color: var(--color-action-warm);
}

.aens-card__icon--leaf {
	background: var(--color-surface-leaf);
	color: var(--color-badge-eco-text);
}

/* Carte étape (méthode en 4 temps) */
.aens-step {
	display: flex;
	flex-direction: column;
	gap: var(--space-xs);
	padding: var(--space-lg);
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-1);
	height: 100%;
}

.dark .aens-step { border-color: var(--color-border); }

.aens-step__number {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 3rem;
	height: 3rem;
	border-radius: var(--radius-lg);
	background: var(--color-accent-subtle);
	color: var(--color-accent);
	font-family: var(--font-heading);
	font-size: var(--text-headline-sm);
	font-weight: 800;
	flex: none;
}

.aens-step:nth-child(2) .aens-step__number {
	background: var(--color-surface-terra);
	color: var(--color-badge-warm-text);
}

.aens-step:nth-child(3) .aens-step__number {
	background: var(--color-bg-muted);
	color: var(--color-accent);
}

.aens-step:nth-child(4) .aens-step__number {
	background: var(--color-surface-leaf);
	color: var(--color-badge-eco-text);
}

.aens-step__label {
	font-size: var(--text-label-sm);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--color-accent);
}

.aens-step__title {
	font-family: var(--font-heading);
	font-size: var(--text-title-md);
	font-weight: 700;
	margin: 0;
}

.aens-step__text {
	font-size: var(--text-body-sm);
	color: var(--color-text-secondary);
	margin: 0;
}

/* Tuile de statistique */
.aens-stat {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 0.125rem;
	padding: var(--space-md);
	text-align: center;
	background: var(--color-bg-subtle);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-1);
	height: 100%;
}

.dark .aens-stat {
	background: var(--color-bg-subtle);
	border-color: var(--color-border);
	box-shadow: none;
}

.aens-stat__value {
	font-family: var(--font-heading);
	font-size: var(--text-headline-lg);
	font-weight: 800;
	line-height: 1.1;
	letter-spacing: -0.02em;
	color: var(--color-accent);
}

.aens-stat--warm .aens-stat__value { color: var(--color-action-warm); }
.aens-stat--leaf .aens-stat__value { color: var(--color-badge-eco-text); }

.aens-stat__label {
	font-family: var(--font-heading);
	font-size: var(--text-title-md);
	font-weight: 600;
	color: var(--color-text-primary);
	margin-top: 0.25rem;
}

.aens-stat__note {
	font-size: var(--text-label-sm);
	color: var(--color-text-muted);
}

/* Carte événement */
.aens-card--event .aens-card__body { gap: var(--space-2xs); }

.aens-date-badge {
	display: inline-flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	min-width: 3.75rem;
	padding: var(--space-2xs) var(--space-3xs);
	border-radius: var(--radius-md);
	background: var(--color-cta);
	color: var(--color-cta-text);
	line-height: 1.1;
	flex: none;
	text-align: center;
}

.aens-date-badge__day {
	font-family: var(--font-heading);
	font-size: 1.5rem;
	font-weight: 800;
}

.aens-date-badge__month {
	font-size: var(--text-label-sm);
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.06em;
}

.aens-date-badge__year {
	font-size: 0.6875rem;
	font-weight: 500;
	opacity: 0.85;
}

.aens-date-badge--range {
	min-width: 5.5rem;
}

.aens-date-badge--past {
	background: var(--color-bg-muted);
	color: var(--color-text-primary);
}

.aens-card__head-row {
	display: flex;
	align-items: flex-start;
	gap: var(--space-sm);
}

/*
 * Événement passé : atténuation par la surface et non par l'opacité,
 * afin de préserver le ratio de contraste AA.
 */
.aens-card--past {
	background: var(--color-bg-subtle);
	border-style: dashed;
}

.dark .aens-card--past {
	background: var(--color-bg-base);
}

.aens-month-heading {
	font-family: var(--font-heading);
	font-size: var(--text-headline-sm);
	font-weight: 600;
	color: var(--color-accent);
	margin: 0 0 var(--space-sm);
	padding-bottom: var(--space-2xs);
	border-bottom: 2px solid var(--color-border-subtle);
	text-transform: capitalize;
}

/* Carte partenaire */
.aens-partner {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 6.5rem;
	padding: var(--space-md);
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	text-align: center;
}

.aens-partner img {
	max-height: 3.5rem;
	width: auto;
	object-fit: contain;
	/* Les logos partenaires restent sur support clair pour rester fidèles. */
	background: transparent;
}

.dark .aens-partner {
	background: var(--aens-neutral-0);
	border-color: var(--color-border);
}

/* Emplacement neutre tant qu'aucun logo réel n'est fourni. */
.aens-partner--placeholder {
	border-style: dashed;
	border-color: var(--color-border);
	color: var(--color-text-muted);
	font-size: var(--text-label-sm);
	font-weight: 600;
}

.dark .aens-partner--placeholder {
	background: var(--color-bg-subtle);
	color: var(--color-text-muted);
}

/* Carte référent */
.aens-referent {
	display: flex;
	flex-direction: column;
	gap: var(--space-2xs);
	padding: var(--space-md);
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	height: 100%;
}

.aens-referent__avatar {
	width: 4rem;
	height: 4rem;
	border-radius: var(--radius-full);
	object-fit: cover;
	flex: none;
}

.aens-referent__avatar--placeholder {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: var(--color-accent-subtle);
	color: var(--color-accent);
}

/* Carte témoignage */
.aens-testimonial {
	display: flex;
	flex-direction: column;
	gap: var(--space-sm);
	padding: var(--space-lg);
	background: var(--color-bg-cream);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	height: 100%;
}

.dark .aens-testimonial { background: var(--color-bg-subtle); }

.aens-testimonial__quote {
	font-family: var(--font-heading);
	font-size: var(--text-title-md);
	font-weight: 600;
	line-height: 1.5;
	margin: 0;
	border: 0;
	padding: 0;
}

.aens-testimonial__author {
	display: flex;
	align-items: center;
	gap: var(--space-2xs);
	margin-top: auto;
	font-size: var(--text-body-sm);
	color: var(--color-text-secondary);
}

.aens-testimonial__author img {
	width: 2.75rem;
	height: 2.75rem;
	border-radius: var(--radius-full);
	object-fit: cover;
	flex: none;
}

/* Carte CTA */
.aens-card--cta {
	background: var(--color-accent-subtle);
	border-color: color-mix(in srgb, var(--color-accent) 20%, transparent);
	box-shadow: none;
	padding: var(--space-lg);
	gap: var(--space-sm);
	justify-content: center;
}

.dark .aens-card--cta {
	background: var(--color-surface-green);
}

/* Carte commission */
.aens-commission {
	display: flex;
	flex-direction: column;
	gap: var(--space-xs);
	padding: var(--space-lg);
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-1);
	height: 100%;
}

.dark .aens-commission { border-color: var(--color-border); }

/* =========================================================================
 * 4. HÉROS ET BANNIÈRES
 * ====================================================================== */

.aens-hero {
	position: relative;
	padding-block: var(--space-xl) var(--space-2xl);
	overflow: hidden;
	background:
		linear-gradient(180deg, var(--color-bg-base) 0%, var(--color-bg-subtle) 100%);
}

@media (min-width: 1024px) {
	.aens-hero { padding-block: var(--space-2xl) var(--space-3xl); }
}

/* Halos organiques très discrets, purement décoratifs. */
.aens-hero__decor {
	position: absolute;
	inset: 0;
	z-index: 0;
	pointer-events: none;
	opacity: 0.3;
	overflow: hidden;
}

.dark .aens-hero__decor { opacity: 0.18; }

.aens-hero__decor span {
	position: absolute;
	border-radius: var(--radius-full);
	filter: blur(72px);
	display: block;
}

.aens-hero__decor span:nth-child(1) {
	inset-block-start: -8rem;
	inset-inline-end: -4rem;
	width: 24rem;
	height: 24rem;
	background: var(--aens-green-100);
}

.aens-hero__decor span:nth-child(2) {
	inset-block-start: 50%;
	inset-inline-start: -6rem;
	width: 20rem;
	height: 20rem;
	background: var(--aens-terra-100);
}

.aens-hero .aens-container { position: relative; z-index: 1; }

.aens-hero__eyebrow {
	display: inline-flex;
	align-items: center;
	gap: var(--space-3xs);
	width: fit-content;
	padding: 0.25rem var(--space-xs);
	border: 1px solid color-mix(in srgb, var(--color-action-warm) 25%, transparent);
	border-radius: var(--radius-full);
	background: var(--color-surface-terra);
	color: var(--color-badge-warm-text);
	font-size: var(--text-label-sm);
	font-weight: 600;
	letter-spacing: 0.02em;
}

.aens-hero__title {
	font-size: var(--text-display-xl);
	line-height: 1.12;
	letter-spacing: -0.02em;
	color: var(--color-accent);
	margin: 0;
}

.aens-hero__text {
	font-size: var(--text-body-lg);
	line-height: 1.6;
	color: var(--color-text-secondary);
	max-width: 42rem;
	margin: 0;
}

.aens-hero__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-sm);
	padding-top: var(--space-2xs);
}

.aens-hero__values {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--space-sm);
	max-width: 36rem;
	margin-top: var(--space-xs);
	padding-top: var(--space-md);
	border-top: 1px solid var(--color-border-subtle);
}

@media (min-width: 640px) {
	.aens-hero__values { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

.aens-hero__value {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: var(--space-2xs);
	font-size: var(--text-label-sm);
	font-weight: 600;
	color: var(--color-text-primary);
}

.aens-hero__value .aens-icon {
	color: var(--color-accent);
	width: 2rem;
	height: 2rem;
}

/* Média du héros */
.aens-hero__media {
	position: relative;
	padding: 0.625rem;
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-1);
}

.dark .aens-hero__media {
	background: var(--color-bg-subtle);
	border-color: var(--color-border);
}

.aens-hero__media img {
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	border-radius: var(--radius-lg);
}

.aens-hero__media-caption {
	position: absolute;
	inset-inline: var(--space-md);
	bottom: var(--space-md);
	display: flex;
	align-items: center;
	gap: var(--space-xs);
	padding: var(--space-sm);
	background: color-mix(in srgb, var(--color-bg-surface) 95%, transparent);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-1);
}

.dark .aens-hero__media-caption {
	background: color-mix(in srgb, var(--color-bg-subtle) 94%, transparent);
	border-color: var(--color-border);
}

.aens-hero__media-caption h3 {
	font-size: var(--text-body-sm);
	font-weight: 700;
	margin: 0 0 0.125rem;
}

.aens-hero__media-caption p {
	font-size: var(--text-label-sm);
	color: var(--color-text-secondary);
	margin: 0;
}

/* Héros interne compact (pages, archives) */
.aens-page-hero {
	padding-block: var(--space-xl);
	background: linear-gradient(180deg, var(--color-bg-subtle) 0%, var(--color-bg-base) 100%);
	border-bottom: 1px solid var(--color-border-subtle);
}

.aens-page-hero__title {
	font-size: var(--text-headline-lg);
	color: var(--color-accent);
	margin: 0 0 var(--space-2xs);
}

.aens-page-hero__lead {
	font-size: var(--text-body-lg);
	color: var(--color-text-secondary);
	max-width: var(--measure);
	margin: 0;
}

/* Héros avec image de fond (single projet / événement) */
.aens-media-hero {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: 22rem;
	padding-block: var(--space-xl);
	background: var(--aens-green-900);
	color: var(--aens-neutral-0);
	overflow: hidden;
}

.aens-media-hero__bg {
	position: absolute;
	inset: 0;
	z-index: 0;
}

.aens-media-hero__bg img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.aens-media-hero__bg::after {
	content: "";
	position: absolute;
	inset: 0;
	background: var(--color-hero-scrim);
	/* Voile supplémentaire pour garantir le contraste du texte. */
	box-shadow: inset 0 -12rem 8rem -6rem rgba(15, 57, 43, 0.9);
}

.aens-media-hero .aens-container { position: relative; z-index: 1; }

.aens-media-hero__title {
	font-size: var(--text-headline-lg);
	color: var(--aens-neutral-0);
	margin: var(--space-2xs) 0;
	text-shadow: 0 1px 12px rgba(0, 0, 0, 0.35);
}

.aens-media-hero__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-2xs);
	font-size: var(--text-body-sm);
	color: rgba(255, 255, 255, 0.9);
}

.aens-media-hero .aens-badge {
	background: rgba(255, 255, 255, 0.92);
	color: var(--aens-green-900);
}

/* Bannière CTA vert forêt */
.aens-cta-banner {
	position: relative;
	overflow: hidden;
	padding: var(--space-xl) var(--space-md);
	border-radius: var(--radius-xl);
	background: linear-gradient(135deg, var(--aens-green-900) 0%, var(--aens-green-800) 100%);
	color: var(--aens-neutral-0);
	text-align: center;
}

@media (min-width: 768px) {
	.aens-cta-banner { padding: var(--space-2xl) var(--space-xl); }
}

.aens-cta-banner__decor {
	position: absolute;
	inset: 0;
	pointer-events: none;
	opacity: 0.16;
	overflow: hidden;
}

.aens-cta-banner__decor span {
	position: absolute;
	display: block;
	border-radius: var(--radius-full);
	background: var(--aens-leaf-400);
	filter: blur(64px);
}

.aens-cta-banner__decor span:nth-child(1) {
	width: 20rem; height: 20rem;
	inset-block-start: -6rem;
	inset-inline-start: -4rem;
}

.aens-cta-banner__decor span:nth-child(2) {
	width: 16rem; height: 16rem;
	inset-block-end: -6rem;
	inset-inline-end: -3rem;
	background: var(--aens-terra-400);
}

.aens-cta-banner > * { position: relative; z-index: 1; }

.aens-cta-banner__title {
	font-size: var(--text-headline-lg);
	color: var(--aens-neutral-0);
	margin: 0 auto var(--space-sm);
	max-width: 32ch;
}

.aens-cta-banner__text {
	font-size: var(--text-body-lg);
	color: rgba(255, 255, 255, 0.9);
	max-width: 56ch;
	margin: 0 auto var(--space-lg);
}

.aens-cta-banner__actions {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: var(--space-sm);
}

/* =========================================================================
 * 5. FORMULAIRES
 * ====================================================================== */

.aens-form {
	display: flex;
	flex-direction: column;
	gap: var(--space-md);
}

.aens-fieldset {
	border: 0;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-sm);
}

.aens-fieldset > legend {
	font-family: var(--font-heading);
	font-size: var(--text-title-md);
	font-weight: 600;
	color: var(--color-accent);
	padding: 0;
	margin-bottom: var(--space-2xs);
}

.aens-form-grid {
	display: grid;
	gap: var(--space-sm);
}

@media (min-width: 640px) {
	.aens-form-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

.aens-field {
	display: flex;
	flex-direction: column;
	gap: var(--space-3xs);
}

/* Le label est toujours visible : jamais de placeholder seul. */
.aens-field > label,
.aens-field__label {
	font-family: var(--font-body);
	font-size: var(--text-label-lg);
	font-weight: 600;
	color: var(--color-text-primary);
}

.aens-field__required {
	color: var(--color-action-warm);
	margin-inline-start: 0.15em;
}

.dark .aens-field__required { color: var(--aens-terra-300); }

.aens-field__hint {
	font-size: var(--text-body-sm);
	color: var(--color-text-muted);
}

.aens-field input[type="text"],
.aens-field input[type="email"],
.aens-field input[type="tel"],
.aens-field input[type="url"],
.aens-field input[type="search"],
.aens-field input[type="number"],
.aens-field input[type="date"],
.aens-field select,
.aens-field textarea {
	width: 100%;
	min-height: var(--tap-target);
	padding: 0.75rem var(--space-sm);
	border: 1.5px solid var(--color-border);
	border-radius: var(--radius-md);
	background: var(--color-bg-surface);
	color: var(--color-text-primary);
	font-family: var(--font-body);
	font-size: var(--text-body-md);
	line-height: 1.5;
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
}

/*
 * Le champ est entièrement stylé à la main (bordure, fond, flèche en icône) :
 * on fige `color-scheme` à light pour empêcher Chromium de superposer sa
 * propre flèche native sombre par-dessus notre image de fond en mode sombre.
 */
.aens-field select {
	color-scheme: light;
}

.dark .aens-field input,
.dark .aens-field select,
.dark .aens-field textarea {
	/*
	 * background-color (pas le raccourci `background`) : le raccourci
	 * réinitialiserait background-repeat à sa valeur initiale `repeat`,
	 * ce qui carrelait la flèche en icône du <select> sur toute sa largeur.
	 */
	background-color: var(--color-bg-subtle);
	border-color: var(--color-border-strong);
}

.aens-field textarea {
	min-height: 8rem;
	resize: vertical;
}

.aens-field select {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23414844' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right var(--space-sm) center;
	background-size: 1.125rem;
	padding-inline-end: 2.5rem;
}

[dir="rtl"] .aens-field select {
	background-position: left var(--space-sm) center;
}

.dark .aens-field select {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23c1c8c2' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
}

.aens-field input::placeholder,
.aens-field textarea::placeholder {
	color: var(--color-text-muted);
	opacity: 1;
}

.aens-field input:focus,
.aens-field select:focus,
.aens-field textarea:focus {
	outline: none;
	border-color: var(--color-accent);
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-focus-ring) 40%, transparent);
}

.aens-field input:focus-visible,
.aens-field select:focus-visible,
.aens-field textarea:focus-visible {
	outline: 3px solid var(--color-focus-ring);
	outline-offset: 1px;
}

.aens-field input:disabled,
.aens-field select:disabled,
.aens-field textarea:disabled {
	background: var(--color-bg-muted);
	color: var(--color-text-muted);
	cursor: not-allowed;
}

/* État d'erreur — signalé par la bordure, l'icône ET le texte. */
.aens-field.has-error input,
.aens-field.has-error select,
.aens-field.has-error textarea,
.aens-field [aria-invalid="true"] {
	border-color: var(--color-error);
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-error) 22%, transparent);
}

.aens-field__error {
	display: flex;
	align-items: flex-start;
	gap: var(--space-3xs);
	font-size: var(--text-body-sm);
	font-weight: 600;
	color: var(--color-error-text);
}

.dark .aens-field__error { color: var(--color-error); }

/* Cases à cocher et boutons radio */
.aens-check {
	display: flex;
	align-items: flex-start;
	gap: var(--space-2xs);
	font-size: var(--text-body-sm);
	line-height: 1.6;
	color: var(--color-text-secondary);
	cursor: pointer;
	min-height: var(--tap-target);
	padding-block: var(--space-3xs);
}

.aens-check input[type="checkbox"],
.aens-check input[type="radio"] {
	appearance: none;
	width: 1.25rem;
	height: 1.25rem;
	margin: 0.2rem 0 0;
	border: 2px solid var(--color-accent);
	background: var(--color-bg-surface);
	flex: none;
	cursor: pointer;
	display: grid;
	place-content: center;
}

.aens-check input[type="checkbox"] { border-radius: var(--radius-sm); }
.aens-check input[type="radio"]    { border-radius: var(--radius-full); }

.aens-check input[type="checkbox"]::before {
	content: "";
	width: 0.7rem;
	height: 0.7rem;
	transform: scale(0);
	transition: transform var(--dur-fast) var(--ease);
	background: var(--color-cta-text);
	clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
}

.aens-check input[type="radio"]::before {
	content: "";
	width: 0.6rem;
	height: 0.6rem;
	border-radius: var(--radius-full);
	transform: scale(0);
	transition: transform var(--dur-fast) var(--ease);
	background: var(--color-cta-text);
}

.aens-check input:checked {
	background: var(--color-cta);
	border-color: var(--color-cta);
}

.aens-check input:checked::before { transform: scale(1); }

.aens-check input:focus-visible {
	outline: 3px solid var(--color-focus-ring);
	outline-offset: 2px;
}

.aens-check-group {
	display: flex;
	flex-direction: column;
	gap: var(--space-3xs);
}

/* Groupe de choix en cartes (type d'engagement, montants de don) */
.aens-choice-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
	gap: var(--space-2xs);
}

.aens-choice {
	position: relative;
	display: flex;
	align-items: center;
	gap: var(--space-2xs);
	min-height: var(--tap-target);
	padding: var(--space-xs) var(--space-sm);
	border: 1.5px solid var(--color-border);
	border-radius: var(--radius-md);
	background: var(--color-bg-surface);
	font-size: var(--text-body-sm);
	font-weight: 600;
	color: var(--color-text-primary);
	cursor: pointer;
	transition: border-color var(--dur-fast) var(--ease), background-color var(--dur-fast) var(--ease);
}

.dark .aens-choice { background: var(--color-bg-subtle); }

.aens-choice:hover { border-color: var(--color-accent); }

.aens-choice input {
	position: absolute;
	opacity: 0;
	pointer-events: none;
}

.aens-choice:has(input:checked) {
	border-color: var(--color-accent);
	background: var(--color-accent-subtle);
	box-shadow: inset 0 0 0 1px var(--color-accent);
}

.aens-choice:has(input:focus-visible) {
	outline: 3px solid var(--color-focus-ring);
	outline-offset: 2px;
}

/* Le champ honeypot ne doit jamais être visible ni focalisable. */
.aens-honeypot {
	position: absolute !important;
	left: -9999px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

/* Barre de recherche */
.aens-search {
	display: flex;
	align-items: stretch;
	gap: var(--space-2xs);
}

.aens-search__input {
	position: relative;
	flex: 1 1 auto;
}

.aens-search__input .aens-icon {
	position: absolute;
	inset-inline-start: var(--space-sm);
	top: 50%;
	transform: translateY(-50%);
	color: var(--color-text-muted);
	pointer-events: none;
}

.aens-search__input input {
	padding-inline-start: 2.75rem;
}

/* =========================================================================
 * 6. FILTRES (projets, agenda)
 * ====================================================================== */

.aens-filters {
	display: flex;
	flex-direction: column;
	gap: var(--space-sm);
	padding: var(--space-md);
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
}

.dark .aens-filters { background: var(--color-bg-subtle); border-color: var(--color-border); }

.aens-filters__row {
	display: grid;
	gap: var(--space-2xs);
}

@media (min-width: 640px) {
	.aens-filters__row--inline { grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); }
}

.aens-filters__actions {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2xs);
}

/* Onglets de période (agenda) : vrais liens navigables. */
.aens-tabs {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3xs);
	padding: var(--space-3xs);
	background: var(--color-bg-subtle);
	border-radius: var(--radius-full);
	width: fit-content;
	max-width: 100%;
}

.aens-tabs a {
	display: inline-flex;
	align-items: center;
	gap: var(--space-3xs);
	min-height: 2.25rem;
	padding: 0.375rem var(--space-md);
	border-radius: var(--radius-full);
	font-family: var(--font-heading);
	font-size: var(--text-label-lg);
	font-weight: 600;
	color: var(--color-text-secondary);
	text-decoration: none;
}

@media (max-width: 1023px) {
	.aens-tabs a { min-height: var(--tap-target); }
}

.aens-tabs a:hover { color: var(--color-accent); }

.aens-tabs a[aria-current="page"],
.aens-tabs a[aria-current="true"] {
	background: var(--color-bg-surface);
	color: var(--color-accent);
	box-shadow: var(--shadow-1);
}

.dark .aens-tabs a[aria-current="page"],
.dark .aens-tabs a[aria-current="true"] {
	background: var(--color-bg-muted);
	box-shadow: none;
}

.aens-results-count {
	font-size: var(--text-body-sm);
	font-weight: 600;
	color: var(--color-text-secondary);
}

/* =========================================================================
 * 7. ÉTATS : vide, chargement, erreur
 * ====================================================================== */

.aens-empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--space-sm);
	padding: var(--space-2xl) var(--space-md);
	text-align: center;
	background: var(--color-bg-subtle);
	border: 1px dashed var(--color-border);
	border-radius: var(--radius-lg);
}

.aens-empty__icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 4rem;
	height: 4rem;
	border-radius: var(--radius-full);
	background: var(--color-bg-surface);
	color: var(--color-accent);
}

.aens-empty__title {
	font-family: var(--font-heading);
	font-size: var(--text-headline-sm);
	font-weight: 600;
	color: var(--color-accent);
	margin: 0;
}

.aens-empty__text {
	font-size: var(--text-body-md);
	color: var(--color-text-secondary);
	max-width: 44ch;
	margin: 0;
}

.aens-empty__actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--space-2xs);
}

/* Skeleton de chargement */
.aens-skeleton {
	background: var(--color-bg-muted);
	border-radius: var(--radius-md);
	position: relative;
	overflow: hidden;
}

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

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

@keyframes aens-shimmer {
	from { transform: translateX(-100%); }
	to   { transform: translateX(100%); }
}

.aens-skeleton-card {
	border-radius: var(--radius-lg);
	border: 1px solid var(--color-border-subtle);
	overflow: hidden;
	background: var(--color-bg-surface);
}

.aens-skeleton-card__media { aspect-ratio: 16 / 10; }

.aens-skeleton-card__body {
	padding: var(--space-md);
	display: flex;
	flex-direction: column;
	gap: var(--space-2xs);
}

.aens-skeleton-line { height: 0.75rem; }
.aens-skeleton-line--title { height: 1.25rem; width: 80%; }
.aens-skeleton-line--short { width: 55%; }

/* La grille en cours de rechargement reste lisible mais signalée. */
.aens-results[aria-busy="true"] {
	position: relative;
	min-height: 12rem;
}

.aens-results[aria-busy="true"] > *:not(.aens-loading-overlay) {
	opacity: 0.4;
	pointer-events: none;
}

/* Alertes */
.aens-alert {
	display: flex;
	align-items: flex-start;
	gap: var(--space-2xs);
	padding: var(--space-sm) var(--space-md);
	border: 1px solid transparent;
	border-inline-start-width: 4px;
	border-radius: var(--radius-md);
	font-size: var(--text-body-sm);
	line-height: 1.6;
}

.aens-alert__title {
	font-family: var(--font-heading);
	font-weight: 700;
	display: block;
	margin-bottom: 0.15rem;
}

.aens-alert p:last-child { margin-bottom: 0; }

.aens-alert--success {
	background: var(--color-success-bg);
	border-color: var(--color-success);
	color: var(--color-text-primary);
}

.aens-alert--error {
	background: var(--color-error-bg);
	border-color: var(--color-error);
	color: var(--color-text-primary);
}

.aens-alert--warning {
	background: var(--color-warning-bg);
	border-color: var(--color-warning);
	color: var(--color-text-primary);
}

.aens-alert--info {
	background: var(--color-accent-subtle);
	border-color: var(--color-accent);
	color: var(--color-text-primary);
}

.aens-alert .aens-icon { flex: none; margin-top: 0.15em; }
.aens-alert--success .aens-icon { color: var(--color-success); }
.aens-alert--error   .aens-icon { color: var(--color-error); }
.aens-alert--warning .aens-icon { color: var(--color-warning); }
.aens-alert--info    .aens-icon { color: var(--color-accent); }

/* Toasts non intrusifs */
.aens-toast-region {
	position: fixed;
	inset-block-end: var(--space-md);
	inset-inline-end: var(--space-md);
	z-index: var(--z-toast);
	display: flex;
	flex-direction: column;
	gap: var(--space-2xs);
	max-width: min(24rem, calc(100vw - 2 * var(--space-md)));
	pointer-events: none;
}

.aens-toast {
	pointer-events: auto;
	background: var(--color-bg-muted);
	color: var(--color-text-primary);
	border: 1px solid var(--color-border);
	border-radius: var(--radius-md);
	box-shadow: var(--shadow-2);
	padding: var(--space-2xs) var(--space-sm);
	font-size: var(--text-body-sm);
}

/* =========================================================================
 * 8. MODALS ET PANNEAUX
 * ====================================================================== */

.aens-modal {
	position: fixed;
	inset: 0;
	z-index: var(--z-modal);
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--space-md);
}

.aens-modal__backdrop {
	position: absolute;
	inset: 0;
	background: var(--color-overlay);
	backdrop-filter: blur(4px);
	-webkit-backdrop-filter: blur(4px);
}

.aens-modal__panel {
	position: relative;
	width: 100%;
	max-width: 36rem;
	max-height: calc(100vh - 2 * var(--space-md));
	overflow-y: auto;
	padding: var(--space-lg);
	background: var(--color-bg-surface);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-xl);
	box-shadow: var(--shadow-2);
}

.dark .aens-modal__panel {
	background: var(--color-bg-subtle);
	border-color: var(--color-border);
}

.aens-modal__head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--space-sm);
	margin-bottom: var(--space-sm);
}

.aens-modal__close {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: var(--tap-target);
	height: var(--tap-target);
	border: 0;
	border-radius: var(--radius-md);
	background: transparent;
	color: var(--color-text-secondary);
	cursor: pointer;
	flex: none;
}

.aens-modal__close:hover { background: var(--color-bg-subtle); }

/* Panneau de filtre mobile : variante bottom-sheet. */
@media (max-width: 1023px) {
	.aens-modal--sheet { align-items: flex-end; padding: 0; }
	.aens-modal--sheet .aens-modal__panel {
		max-width: none;
		border-radius: var(--radius-xl) var(--radius-xl) 0 0;
		max-height: 85vh;
	}
}

/* Lightbox de galerie */
.aens-lightbox__panel {
	max-width: min(72rem, 100%);
	padding: var(--space-sm);
	background: var(--color-bg-inverse);
}

.aens-lightbox__panel img {
	width: 100%;
	max-height: 78vh;
	object-fit: contain;
	border-radius: var(--radius-md);
	background: transparent;
}

/* =========================================================================
 * 9. SÉLECTEUR DE LANGUE ET TOGGLE DE THÈME
 * ====================================================================== */

.aens-lang {
	display: inline-flex;
	align-items: center;
	gap: var(--space-3xs);
}

.aens-lang__list {
	display: inline-flex;
	align-items: center;
	gap: 0.125rem;
	list-style: none;
	margin: 0;
	padding: 0.125rem;
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-full);
	background: var(--color-bg-subtle);
}

.aens-lang__link,
.aens-lang__current,
.aens-lang__disabled {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 2.25rem;
	min-height: 2rem;
	padding: 0.125rem var(--space-2xs);
	border-radius: var(--radius-full);
	font-family: var(--font-heading);
	font-size: var(--text-label-sm);
	font-weight: 700;
	letter-spacing: 0.04em;
	text-decoration: none;
	color: var(--color-text-secondary);
}

@media (max-width: 1099px) {
	.aens-lang__link,
	.aens-lang__current,
	.aens-lang__disabled {
		min-width: var(--tap-target);
		min-height: var(--tap-target);
	}
}

.aens-lang__link:hover,
.aens-lang__link:focus-visible {
	background: var(--color-bg-muted);
	color: var(--color-accent);
}

/* La langue active est identifiable visuellement ET sémantiquement. */
.aens-lang__current {
	background: var(--color-cta);
	color: var(--color-cta-text);
}

.aens-lang__disabled {
	color: var(--color-text-muted);
	cursor: not-allowed;
	text-decoration: line-through;
}

.aens-lang--footer .aens-lang__list {
	background: rgba(255, 255, 255, 0.1);
	border-color: rgba(255, 255, 255, 0.2);
}

.aens-lang--footer .aens-lang__link { color: rgba(255, 255, 255, 0.85); }
.aens-lang--footer .aens-lang__link:hover { background: rgba(255, 255, 255, 0.16); color: #fff; }
.aens-lang--footer .aens-lang__current { background: var(--aens-leaf-400); color: var(--aens-green-950); }

/* Toggle de thème */
.aens-theme-toggle {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: var(--tap-target);
	height: var(--tap-target);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-full);
	background: var(--color-bg-subtle);
	color: var(--color-accent);
	cursor: pointer;
}

.aens-theme-toggle:hover {
	background: var(--color-bg-muted);
}

/* L'icône affichée dépend du thème actif. */
.aens-theme-toggle__moon { display: inline-block; }
.aens-theme-toggle__sun  { display: none; }
.dark .aens-theme-toggle__moon { display: none; }
.dark .aens-theme-toggle__sun  { display: inline-block; }

/* =========================================================================
 * 10. COMPOSANTS ÉDITORIAUX
 * ====================================================================== */

/* Frise chronologique (présidences, histoire) */
.aens-timeline {
	list-style: none;
	margin: 0;
	padding: 0;
	position: relative;
	display: flex;
	flex-direction: column;
	gap: var(--space-lg);
}

.aens-timeline::before {
	content: "";
	position: absolute;
	inset-block: 0.75rem 0.75rem;
	inset-inline-start: 0.6875rem;
	width: 2px;
	background: var(--color-border);
}

.aens-timeline__item {
	position: relative;
	padding-inline-start: var(--space-xl);
}

.aens-timeline__item::before {
	content: "";
	position: absolute;
	inset-inline-start: 0;
	top: 0.4rem;
	width: 1.5rem;
	height: 1.5rem;
	border-radius: var(--radius-full);
	background: var(--color-bg-surface);
	border: 3px solid var(--color-cta);
}

.aens-timeline__period {
	display: inline-block;
	font-family: var(--font-heading);
	font-size: var(--text-label-lg);
	font-weight: 700;
	letter-spacing: 0.02em;
	color: var(--color-action-warm);
	margin-bottom: 0.15rem;
}

.dark .aens-timeline__period { color: var(--aens-terra-300); }

.aens-timeline__title {
	font-family: var(--font-heading);
	font-size: var(--text-headline-sm);
	font-weight: 600;
	margin: 0 0 var(--space-3xs);
}

.aens-timeline__text {
	font-size: var(--text-body-sm);
	color: var(--color-text-secondary);
	margin: 0;
	max-width: var(--measure);
}

/* Portrait éditorial (mot du président) */
.aens-portrait {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: var(--space-sm);
}

.aens-portrait__frame {
	position: relative;
	width: 100%;
	max-width: 16rem;
}

.aens-portrait__frame img {
	width: 100%;
	aspect-ratio: 4 / 5;
	object-fit: cover;
	border-radius: var(--radius-lg);
	border: 2px solid var(--color-bg-surface);
	box-shadow: var(--shadow-2);
}

.aens-portrait__name {
	font-family: var(--font-heading);
	font-size: var(--text-headline-sm);
	font-weight: 700;
	margin: 0;
}

.aens-portrait__role {
	font-size: var(--text-label-lg);
	font-weight: 600;
	color: var(--color-accent);
}

/* Liste des pays du réseau international */
.aens-country-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-2xs);
}

.aens-country-list a,
.aens-country-list span {
	display: inline-flex;
	align-items: center;
	gap: var(--space-3xs);
	min-height: 2.25rem;
	padding: 0.375rem var(--space-sm);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-full);
	background: var(--color-bg-surface);
	color: var(--color-text-primary);
	font-size: var(--text-body-sm);
	font-weight: 600;
	text-decoration: none;
}

@media (max-width: 1023px) {
	.aens-country-list a,
	.aens-country-list span { min-height: var(--tap-target); }
}

.aens-country-list a:hover,
.aens-country-list a:focus-visible {
	border-color: var(--color-accent);
	background: var(--color-accent-subtle);
	color: var(--color-accent);
}

/* Carte du monde SVG sobre, décorative : la liste textuelle fait foi. */
.aens-worldmap {
	width: 100%;
	max-width: 44rem;
	margin-inline: auto;
	color: var(--color-border);
}

.aens-worldmap .aens-worldmap__land {
	fill: var(--color-bg-muted);
	stroke: var(--color-border);
	stroke-width: 0.5;
}

.aens-worldmap .aens-worldmap__marker {
	fill: var(--color-cta-vivid);
	stroke: var(--color-accent);
	stroke-width: 1;
}

/* Encart d'information (bloc pratique événement) */
.aens-infobox {
	display: flex;
	flex-direction: column;
	gap: var(--space-sm);
	padding: var(--space-lg);
	background: var(--color-bg-cream);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
}

.dark .aens-infobox {
	background: var(--color-bg-subtle);
	border-color: var(--color-border);
}

.aens-infobox__list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-xs);
}

.aens-infobox__list li {
	display: flex;
	align-items: flex-start;
	gap: var(--space-2xs);
	font-size: var(--text-body-sm);
}

.aens-infobox__list .aens-icon {
	color: var(--color-accent);
	margin-top: 0.15em;
	flex: none;
}

.aens-infobox__term {
	display: block;
	font-size: var(--text-label-sm);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--color-text-muted);
}

.aens-infobox__value {
	display: block;
	font-weight: 600;
	color: var(--color-text-primary);
}

/* Bloc de partage social sans script tiers */
.aens-share {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-2xs);
}

.aens-share__label {
	font-size: var(--text-label-sm);
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--color-text-muted);
}

/* Galerie */
.aens-gallery {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
	gap: var(--space-2xs);
	list-style: none;
	margin: 0;
	padding: 0;
}

.aens-gallery button {
	display: block;
	width: 100%;
	padding: 0;
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-md);
	overflow: hidden;
	background: none;
	cursor: pointer;
}

.aens-gallery img {
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
}

/* Barre d'accessibilité : sommaire d'article */
.aens-toc {
	padding: var(--space-md);
	background: var(--color-bg-subtle);
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
}

.aens-toc ol {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var(--space-3xs);
	font-size: var(--text-body-sm);
}

/* Accordéon (FAQ) — natif <details>, sans JavaScript. */
.aens-accordion {
	border: 1px solid var(--color-border-subtle);
	border-radius: var(--radius-lg);
	background: var(--color-bg-surface);
	overflow: hidden;
}

.dark .aens-accordion { background: var(--color-bg-subtle); border-color: var(--color-border); }

.aens-accordion + .aens-accordion { margin-top: var(--space-2xs); }

.aens-accordion > summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--space-sm);
	min-height: var(--tap-target);
	padding: var(--space-sm) var(--space-md);
	font-family: var(--font-heading);
	font-size: var(--text-title-md);
	font-weight: 600;
	color: var(--color-text-primary);
	cursor: pointer;
	list-style: none;
}

.aens-accordion > summary::-webkit-details-marker { display: none; }

.aens-accordion > summary::after {
	content: "";
	width: 1rem;
	height: 1rem;
	flex: none;
	border-inline-end: 2px solid currentColor;
	border-block-end: 2px solid currentColor;
	transform: rotate(45deg) translate(-2px, -2px);
	transition: transform var(--dur-fast) var(--ease);
}

.aens-accordion[open] > summary::after {
	transform: rotate(-135deg) translate(-2px, -2px);
}

.aens-accordion > summary:hover { background: var(--color-bg-subtle); }

.aens-accordion__body {
	padding: 0 var(--space-md) var(--space-md);
	font-size: var(--text-body-sm);
	color: var(--color-text-secondary);
	max-width: var(--measure);
}

/* Grille de logos partenaires */
.aens-logo-grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--space-sm);
	list-style: none;
	margin: 0;
	padding: 0;
}

@media (min-width: 640px)  { .aens-logo-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1024px) { .aens-logo-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); } }

/* Liste de définitions administratives */
.aens-deflist {
	display: grid;
	gap: var(--space-2xs) var(--space-md);
	margin: 0;
}

@media (min-width: 640px) {
	.aens-deflist { grid-template-columns: max-content 1fr; }
}

.aens-deflist dt {
	font-size: var(--text-label-lg);
	font-weight: 700;
	color: var(--color-text-muted);
}

.aens-deflist dd {
	margin: 0;
	color: var(--color-text-primary);
}

/* =========================================================================
 * 11. BANDEAU COOKIES
 * ====================================================================== */

.aens-cookie-notice {
	position: fixed;
	inset-inline: var(--space-sm);
	bottom: var(--space-sm);
	z-index: var(--z-toast);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--space-sm);
	max-width: 40rem;
	margin-inline: auto;
	padding: var(--space-sm) var(--space-md);
	background: var(--color-bg-inverse);
	color: var(--aens-neutral-0);
	border-radius: var(--radius-lg);
	box-shadow: var(--shadow-2);
}

.dark .aens-cookie-notice {
	background: var(--color-bg-muted);
	border: 1px solid var(--color-border);
}

.aens-cookie-notice__text {
	flex: 1 1 16rem;
	margin: 0;
	font-size: var(--text-body-sm);
	line-height: 1.5;
}

.aens-cookie-notice__actions {
	display: flex;
	align-items: center;
	gap: var(--space-2xs);
	flex: none;
}

.aens-cookie-notice .aens-btn--ghost {
	border-color: rgba(255, 255, 255, 0.5);
	color: var(--aens-neutral-0);
}

.aens-cookie-notice .aens-btn--ghost:hover,
.aens-cookie-notice .aens-btn--ghost:focus-visible {
	background: rgba(255, 255, 255, 0.12);
	color: var(--aens-neutral-0);
	border-color: var(--aens-neutral-0);
}

@media (prefers-reduced-motion: no-preference) {
	.aens-cookie-notice {
		animation: aens-cookie-notice-in var(--dur-slow) var(--ease);
	}
}

@keyframes aens-cookie-notice-in {
	from { transform: translateY(0.5rem); opacity: 0; }
	to   { transform: translateY(0); opacity: 1; }
}
