:root{--novfr-lp-accent:#D63A35;--novfr-lp-accent-hover:#B02F2B;--novfr-lp-surface:#3B1A39;--novfr-lp-on-surface:#FFFFFF;--novfr-lp-muted:#D9C5D6;--novfr-lp-radius:14px}
/**
 * NOVFR LP Kit - styles des champs du formulaire.
 * Chemin : assets/css/fields.css
 *
 * 1. Champ société (recherche et auto-remplissage).
 * 2. Sélecteur de session : liste déroulante.
 * 3. Sélecteur de session : cartes à deux niveaux (grand format et ligne
 *    compacte), intertitre « Autres dates » et repli « Voir les X autres
 *    dates ». La carte de la date choisie est toujours dépliée ; le script
 *    session-field.js pose les classes is-open (carte choisie), has-choice
 *    (groupe), is-folded (groupe replié) et is-extra (lignes repliées).
 *    Sans script, les dates restent lisibles et sélectionnables (le grand
 *    format est posé par le serveur), sans bouton de repli.
 * 4. Cartes statiques du shortcode [novfr_sessions].
 * 5. Habillage sombre du formulaire : classe CSS novfr-form--dark à poser sur
 *    le widget Formulaire (Avancé > Classes CSS). Couleurs du profil de la page.
 */

/* ------------------------------------------------------------------ */
/* 1. Champ société                                                    */
/* ------------------------------------------------------------------ */

.novfr-company {
	position: relative;
	width: 100%;
}

.novfr-company-list {
	background: #fff;
	color: #1a1a1a;
	border: 1px solid #d5d8dc;
	border-radius: 3px;
	left: 0;
	list-style: none;
	margin: 2px 0 0;
	max-height: 320px;
	overflow-y: auto;
	padding: 0;
	position: absolute;
	right: 0;
	z-index: 20;
}

.novfr-company-list li {
	border-bottom: 1px solid #eef0f2;
	cursor: pointer;
	display: block;
	margin: 0;
	padding: 8px 12px;
}

.novfr-company-list li:last-child {
	border-bottom: 0;
}

.novfr-company-list li.is-active,
.novfr-company-list li:hover {
	background: #f2f5f7;
}

.novfr-company-name {
	color: #1a1a1a;
	display: block;
	font-weight: 600;
}

.novfr-company-address {
	color: #5a6470;
	display: block;
	font-size: 0.875em;
}

.novfr-company-siren {
	color: #8a949c;
	display: block;
	font-size: 0.8em;
}

.novfr-company-status {
	color: #5a6470;
	font-size: 0.875em;
	margin: 4px 0 0;
	min-height: 1em;
}

.novfr-company-search {
	width: 100%;
	background-color: #fff !important;
	color: #1a1a1a !important;
}

.novfr-company-toggle {
	color: #5a6470;
	display: flex;
	align-items: center;
	gap: 8px;
	font-size: 0.875em;
	margin-top: 8px;
	/* Le thème met une marge sous les label : la case suivante (consentement) serait trop loin. */
	margin-bottom: 0;
	cursor: pointer;
	transition: opacity 0.2s ease;
}

/*
 * Champ « HTML » placé après la case de consentement (phrase de réassurance
 * au-dessus du bouton) : de l'air au-dessus pour le séparer des cases, il
 * reste ainsi rattaché au bouton. Elementor n'a pas de réglage pour l'espace
 * au-dessus d'un seul champ.
 */
.elementor-form:has(.novfr-company, .novfr-session-cards, .novfr-session-select, .novfr-session-empty) .elementor-field-type-acceptance + .elementor-field-type-html {
	padding-top: 12px;
}

.novfr-company-toggle input {
	width: 18px;
	height: 18px;
	margin: 0;
	flex: 0 0 auto;
	accent-color: var(--novfr-lp-accent, #d63a35);
}


/* Société trouvée : la case reste visible mais grisée, barrée et désactivée
 * (classe is-muted posée par company-field.js), sur fond clair comme sombre. */
.novfr-company-toggle.is-muted {
	cursor: not-allowed;
	opacity: 0.45;
	text-decoration: line-through;
	text-decoration-thickness: 1px;
}


.novfr-company-toggle.is-muted input {
	cursor: not-allowed;
}

/* ------------------------------------------------------------------ */
/* 2. Sélecteur de session : liste déroulante                          */
/* ------------------------------------------------------------------ */

.novfr-session-select option:disabled {
	color: #9aa2ab;
}

/* ------------------------------------------------------------------ */
/* 3. Sélecteur de session : cartes à deux niveaux                     */
/* ------------------------------------------------------------------ */

.novfr-session-cards {
	--novfr-session-accent: var(--novfr-lp-accent, #2d132c);
	--novfr-session-ink: #1a1a1a;
	--novfr-session-muted: #5a6470;
	--novfr-session-line: #dfe3e8;
	--novfr-session-row: #f4f6f8;
	/* Survol d'une date non choisie, grandes cartes et lignes compactes : orange très clair. */
	--novfr-session-row-hover: #fefaf4;
	--novfr-session-hover-line: #f6ebdc;
	--novfr-session-label: #8a949c;
	--novfr-session-radius: 12px;
	--novfr-session-gap: 8px;
	--novfr-check: 18px;
	display: flex;
	flex-direction: column;
	gap: var(--novfr-session-gap);
	width: 100%;
}

.novfr-session-card {
	position: relative;
}

.novfr-session-card input[type="radio"] {
	position: absolute;
	opacity: 0;
	width: 1px;
	height: 1px;
	margin: 0;
}

/* Ligne compacte : le format par défaut (fond gris, sans bordure visible). */
.novfr-session-card label {
	--novfr-first-line: 20px;
	position: relative;
	display: grid;
	grid-template-columns: var(--novfr-check) minmax(0, 1fr) auto;
	align-items: start;
	column-gap: 12px;
	margin: 0;
	background: var(--novfr-session-row);
	color: var(--novfr-session-ink);
	border: 1px solid var(--novfr-session-row);
	border-radius: 10px;
	padding: 9px 12px;
	cursor: pointer;
	transition: border-color 150ms ease-out, background 150ms ease-out, box-shadow 150ms ease-out;
}

/*
 * Un seul survol pour toutes les dates non choisies et réservables, grandes
 * cartes comme lignes compactes. La date choisie et les dates complètes ne
 * changent pas au survol.
 */
.novfr-session-card:not(.is-full):not(.is-open) label:not(:has(input:checked)):hover {
	background: var(--novfr-session-row-hover);
	border-color: var(--novfr-session-hover-line);
}

.novfr-session-card label:has(input:focus-visible) {
	outline: 3px solid var(--novfr-session-accent);
	outline-offset: 2px;
}

/* Rond de sélection : centré sur la première ligne de texte, quel que soit l'état. */
.novfr-session-check {
	display: flex;
	align-items: center;
	justify-content: center;
	width: var(--novfr-check);
	height: var(--novfr-check);
	margin-top: calc((var(--novfr-first-line) - var(--novfr-check)) / 2);
	border: 2px solid #c9d1d8;
	border-radius: 50%;
	background: #fff;
	box-sizing: border-box;
}

.novfr-session-check svg {
	width: 11px;
	height: 11px;
	color: var(--novfr-session-accent);
	opacity: 0;
	transform: scale(0.5);
	transition: opacity 150ms ease-out, transform 150ms ease-out;
}

.novfr-session-card input:checked ~ .novfr-session-check {
	border-color: var(--novfr-session-accent);
}

.novfr-session-card input:checked ~ .novfr-session-check svg {
	opacity: 1;
	transform: scale(1);
}

.novfr-session-main {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	column-gap: 8px;
	row-gap: 0;
	min-width: 0;
}

.novfr-session-day {
	font-weight: 600;
	font-size: 14.5px;
	line-height: 20px;
	color: var(--novfr-session-ink);
	white-space: nowrap;
}

.novfr-session-day::first-letter {
	text-transform: uppercase;
}

.novfr-session-sub {
	color: var(--novfr-session-muted);
	font-size: 12.5px;
	line-height: 20px;
	white-space: nowrap;
}

.novfr-session-seats {
	display: none;
	color: var(--novfr-session-muted);
	font-size: 13.5px;
	line-height: 1.3;
}

.novfr-session-meta {
	display: flex;
	align-items: center;
	align-self: center;
	gap: 8px;
	white-space: nowrap;
	line-height: 20px;
	text-align: right;
}

.novfr-session-city {
	color: var(--novfr-session-ink);
	font-weight: 600;
	font-size: 12.5px;
}

.novfr-session-price,
.novfr-session-full {
	display: inline-block;
	font-weight: 700;
	font-size: 12.5px;
	line-height: 1.5;
	padding: 0 6px;
	border-radius: 6px;
	white-space: nowrap;
	background: #fff;
}

.novfr-session-price {
	color: var(--novfr-session-accent);
	border: 1px solid var(--novfr-session-accent);
}

.novfr-session-full {
	color: var(--novfr-session-muted);
	border: 1px solid #c9d1d8;
}

/* Réglage « ville dans les lignes compactes » désactivé : la ville n'apparaît qu'en grand format. */
.novfr-session-cards--nocity .novfr-session-card:not(.is-open):not(.is-big) .novfr-session-city,
.novfr-session-cards--nocity.has-choice[data-novfr-collapse="1"] .novfr-session-card.is-big:not(.is-open) .novfr-session-city {
	display: none;
}

/*
 * Grand format. Il s'applique :
 *  - à la date choisie (is-open) ;
 *  - aux N premières dates (is-big), sauf si le groupe demande leur repli
 *    (data-novfr-collapse="1") et qu'une date est déjà choisie (has-choice).
 */
.novfr-session-card.is-open label,
:where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big label {
	--novfr-first-line: 22px;
	--novfr-check: 20px;
	background: #fff;
	border: 1px solid var(--novfr-session-line);
	border-radius: var(--novfr-session-radius);
	padding: 11px 13px;
}

/*
 * La date choisie, grande carte ou ligne compacte : bordure accent de 2 px,
 * qui reste quand la souris s'en va. Même encombrement que la carte au repos
 * (le rembourrage perd 1 px). Les règles du grand format au repos ont un
 * poids volontairement plus faible (:where) pour ne jamais l'emporter ici.
 */
.novfr-session-card label:has(input:checked),
.novfr-session-card.is-open label {
	background: #fff;
	border: 2px solid var(--novfr-session-accent);
	box-shadow: 0 4px 16px -6px rgba(0, 0, 0, 0.35);
}

.novfr-session-card label:has(input:checked) {
	padding: 8px 11px;
}

.novfr-session-card.is-open label,
.novfr-session-card.is-open label:has(input:checked) {
	padding: 10px 12px;
}

:is(.novfr-session-card.is-open, :where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big) .novfr-session-main {
	flex-direction: column;
	align-items: flex-start;
	gap: 2px;
}

:is(.novfr-session-card.is-open, :where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big) .novfr-session-day {
	font-size: 17px;
	font-weight: 700;
	line-height: 22px;
	white-space: normal;
}

:is(.novfr-session-card.is-open, :where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big) .novfr-session-sub {
	font-size: 13.5px;
	line-height: 1.3;
	white-space: normal;
}

:is(.novfr-session-card.is-open, :where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big) .novfr-session-seats {
	display: block;
}

:is(.novfr-session-card.is-open, :where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big) .novfr-session-meta {
	flex-direction: column;
	align-items: flex-end;
	justify-content: center;
	gap: 3px;
	line-height: 1.3;
}

:is(.novfr-session-card.is-open, :where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big) :is(.novfr-session-city, .novfr-session-price) {
	font-size: 13px;
}

/* Sessions complètes : visibles, non sélectionnables. */
.novfr-session-card.is-full label {
	opacity: 0.55;
	cursor: not-allowed;
}

/*
 * Aucune date ouverte : encadré clair (teinte du survol des dates) qui
 * invite à laisser ses coordonnées. Même rendu sur fond clair ou sombre.
 */
.novfr-session-empty {
	background: #fefaf4;
	border: 1px solid #f6ebdc;
	border-radius: 10px;
	box-sizing: border-box;
	color: #5a6470;
	display: flex;
	flex-direction: column;
	gap: 4px;
	margin: 0;
	padding: 14px 16px;
	width: 100%;
}

.novfr-session-empty-title {
	color: #1a1a1a;
	font-size: 15px;
	font-weight: 700;
	line-height: 1.35;
}

.novfr-session-empty-text {
	color: #5a6470;
	font-size: 14px;
	line-height: 1.5;
}

/*
 * Case « intéressé par un club d'affaires » sous les dates : même langage
 * que les cartes de dates (ligne grise arrondie, texte foncé, bordure
 * d'accent une fois cochée). Les villes, en pastilles sous le texte, sont
 * grisées tant que la case n'est pas cochée. session-field.js pose is-on.
 */
.novfr-club {
	--novfr-club-accent: var(--novfr-lp-accent, #2d132c);
	--novfr-club-ink: #1a1a1a;
	--novfr-club-muted: #5a6470;
	--novfr-club-row: #f4f6f8;
	--novfr-club-line: #dfe3e8;
	/* Mêmes valeurs que --novfr-session-row-hover / --novfr-session-hover-line. */
	--novfr-club-hover: #fefaf4;
	--novfr-club-hover-line: #f6ebdc;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px 14px;
	width: 100%;
	box-sizing: border-box;
	margin-top: 12px;
	padding: 10px 12px;
	background: var(--novfr-club-row);
	border: 1px solid var(--novfr-club-row);
	border-radius: 10px;
	transition: border-color 150ms ease-out, background 150ms ease-out;
}

/* Survol case décochée : même orange très clair que les dates. */
.novfr-club:not(.is-on):hover {
	background: var(--novfr-club-hover);
	border-color: var(--novfr-club-hover-line);
}

.novfr-club.is-on {
	background: #fff;
	border-color: var(--novfr-club-accent);
	box-shadow: inset 0 0 0 1px var(--novfr-club-accent);
}

.novfr-club-check {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	flex: 1 1 auto;
	margin: 0;
	cursor: pointer;
}

/* Sur le texte, comme pour les dates : le thème et Elementor stylent les labels du formulaire. */
.novfr-club-text {
	color: var(--novfr-club-ink);
	font-weight: 600;
	font-size: 14.5px;
	line-height: 20px;
}

.novfr-club-check input {
	width: 18px;
	height: 18px;
	margin: 0;
	flex: 0 0 auto;
	accent-color: var(--novfr-club-accent);
	cursor: pointer;
}

/* Focus clavier sur la case seule, pas autour du texte. */
.novfr-club-check input:focus-visible {
	outline: 2px solid var(--novfr-club-accent);
	outline-offset: 2px;
}

/* Villes en pastilles, alignées sous le texte de la case. */
.novfr-club-city {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
	flex: 1 1 100%;
	padding-left: 30px;
}

.novfr-club-pill {
	position: relative;
	margin: 0;
	cursor: pointer;
}

.novfr-club-pill input {
	position: absolute;
	opacity: 0;
	width: 1px;
	height: 1px;
	margin: 0;
}

.novfr-club-pill span {
	display: inline-block;
	padding: 6px 12px;
	border: 1px solid var(--novfr-club-line);
	border-radius: 999px;
	background: #fff;
	color: var(--novfr-club-muted);
	font-size: 13px;
	font-weight: 600;
	line-height: 18px;
	transition: border-color 150ms ease-out, color 150ms ease-out, background 150ms ease-out;
}

.novfr-club-pill:hover span {
	border-color: var(--novfr-club-accent);
	color: var(--novfr-club-accent);
}

.novfr-club-pill input:checked + span {
	background: var(--novfr-club-accent);
	border-color: var(--novfr-club-accent);
	color: #fff;
}

.novfr-club-pill input:focus-visible + span {
	outline: 3px solid var(--novfr-club-accent);
	outline-offset: 2px;
}

/* Case non cochée : villes lisibles mais en retrait ; cliquer une ville coche la case. */
.novfr-club:not(.is-on) .novfr-club-pill span {
	background: rgba(255, 255, 255, 0.6);
	border-color: #d4dae0;
	color: #7b858f;
}

.novfr-club:not(.is-on) .novfr-club-pill:hover span {
	background: #fff;
	border-color: var(--novfr-club-accent);
	color: var(--novfr-club-accent);
}

/*
 * Liste longue, case décochée : seules les premières villes restent visibles,
 * plus la ville choisie. Seulement avec le script (data-novfr-bound) : sans
 * lui, toutes les villes restent affichées.
 */
.novfr-club[data-novfr-bound]:not(.is-on) .novfr-club-city.is-folded .novfr-club-pill.is-extra:not(.is-picked) {
	display: none;
}

.novfr-club-more {
	display: inline-block;
	margin: 0;
	padding: 6px 12px;
	border: 1px dashed #c9d1d8;
	border-radius: 999px;
	background: transparent;
	color: var(--novfr-club-ink);
	font: inherit;
	font-size: 13px;
	font-weight: 600;
	line-height: 18px;
	cursor: pointer;
	transition: border-color 150ms ease-out, color 150ms ease-out;
}

.novfr-club-more:hover {
	border-color: var(--novfr-club-accent);
	color: var(--novfr-club-accent);
}

.novfr-club-more:focus-visible {
	outline: 3px solid var(--novfr-club-accent);
	outline-offset: 2px;
}

.novfr-club-more[hidden] {
	display: none;
}

@media (max-width: 767px) {
	.novfr-club-city {
		padding-left: 0;
	}
}

/* Formulaire sur fond sombre : la ligne reste claire, comme les dates. */
.novfr-form--dark .novfr-club {
	--novfr-club-row: rgba(255, 255, 255, 0.88);
}

/* Intertitre « Autres dates » entre les grandes dates et les lignes compactes. */
.novfr-session-divider {
	font-weight: 700;
	font-size: 11.5px;
	line-height: 1;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--novfr-session-label);
	margin: 6px 0 -2px;
	padding-left: 2px;
}

/*
 * Repli : le script pose is-folded sur le groupe et is-extra sur les lignes
 * compactes au-delà du nombre visible ; la date choisie reste toujours visible.
 * Le bouton suit le groupe et bascule « Voir les X autres dates » / « Réduire la liste ».
 */
.novfr-session-more {
	display: block;
	width: 100%;
	margin: 12px 0 0;
	padding: 10px 12px;
	border: 1px dashed #c9d1d8;
	border-radius: 10px;
	background: #fff;
	color: #1a1a1a;
	font: inherit;
	font-weight: 700;
	font-size: 13.5px;
	line-height: 1.3;
	text-align: left;
	cursor: pointer;
	transition: border-color 150ms ease-out, color 150ms ease-out;
}

.novfr-session-more:hover {
	border-color: var(--novfr-lp-accent, #2d132c);
	color: var(--novfr-lp-accent, #2d132c);
}

.novfr-session-more:focus-visible {
	outline: 3px solid var(--novfr-lp-accent, #2d132c);
	outline-offset: 2px;
}

.novfr-session-more::after {
	content: "\25BE";
	float: right;
	font-size: 12px;
}

.novfr-session-cards:not(.is-folded) + .novfr-session-more::after {
	content: "\25B4";
}

.novfr-session-more[hidden] {
	display: none;
}

/* « Retirer la date » : lien discret sous les dates, case club cochée seulement. */
.novfr-session-clear {
	display: inline-block;
	margin: 8px 0 0;
	padding: 4px 2px;
	border: 0;
	background: none;
	color: #5a6470;
	font: inherit;
	font-size: 13px;
	font-weight: 600;
	line-height: 1.3;
	text-decoration: underline;
	text-underline-offset: 3px;
	cursor: pointer;
}

.novfr-session-clear:hover {
	color: var(--novfr-lp-accent, #2d132c);
}

.novfr-session-clear:focus-visible {
	outline: 3px solid var(--novfr-lp-accent, #2d132c);
	outline-offset: 2px;
}

.novfr-session-clear[hidden] {
	display: none;
}

.novfr-form--dark .novfr-session-clear {
	color: var(--novfr-lp-muted, #d9c5d6);
}

.novfr-form--dark .novfr-session-clear:hover {
	color: #fff;
}

.novfr-session-cards.is-folded .novfr-session-card.is-extra:not(.is-open),
.novfr-session-cards.is-folded .novfr-session-divider.is-extra {
	display: none;
}

/* Mobile : même point de rupture qu'Elementor. */
@media (max-width: 767px) {
	/*
	 * Pas de rond de sélection sur mobile : la bordure d'accent de la date
	 * choisie suffit, et la largeur revient au texte. La radio reste dans le
	 * label, accessible au clavier et aux lecteurs d'écran.
	 */
	.novfr-session-card label {
		grid-template-columns: minmax(0, 1fr) auto;
		padding: 8px 10px;
	}

	.novfr-session-check {
		display: none;
	}

	/* Places restantes : un cran sous l'horaire, information secondaire. */
	.novfr-session-seats {
		font-size: 12px;
	}

	.novfr-session-card label:has(input:checked) {
		padding: 7px 9px;
	}

	.novfr-session-card.is-open label,
	.novfr-session-card.is-open label:has(input:checked) {
		padding: 9px 11px;
	}

	.novfr-session-main {
		flex-direction: column;
		align-items: flex-start;
	}

	.novfr-session-day {
		font-size: 14px;
		line-height: 19px;
	}

	.novfr-session-sub {
		font-size: 12px;
		line-height: 17px;
	}

	/* Ville au-dessus du prix, le bloc reste centré sur la carte. */
	.novfr-session-meta {
		flex-direction: column;
		align-items: flex-end;
		gap: 2px;
		line-height: 1.2;
	}

	.novfr-session-city,
	.novfr-session-price,
	.novfr-session-full {
		font-size: 12px;
	}

	:where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big label {
		padding: 10px 12px;
	}

	:is(.novfr-session-card.is-open, :where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big) .novfr-session-day {
		font-size: 16px;
		line-height: 21px;
	}

	:is(.novfr-session-card.is-open, :where(.novfr-session-cards:not(.has-choice[data-novfr-collapse="1"])) .novfr-session-card.is-big) .novfr-session-sub {
		font-size: 13px;
	}

	.novfr-session-more {
		margin-top: 10px;
	}

	/* Bouton d'envoi : la date choisie passe sur une seconde ligne, en retrait. */
	.novfr-submit-date {
		display: block;
		margin-top: 2px;
		font-size: 13px;
		font-weight: 500;
		line-height: 1.25;
		opacity: 0.8;
	}
}

@media (prefers-reduced-motion: reduce) {
	.novfr-session-card label,
	.novfr-session-check svg,
	.novfr-session-more,
	.novfr-company-toggle,
	.novfr-club,
	.novfr-club-pill span,
	.novfr-club-more,
	.novfr-session-cards--static .novfr-session-static {
		transition: none;
	}
}

/* ------------------------------------------------------------------ */
/* 4. Cartes statiques du shortcode [novfr_sessions] et liste          */
/* ------------------------------------------------------------------ */

.novfr-session-cards--static .novfr-session-static {
	position: relative;
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	justify-content: space-between;
	gap: 0.5rem 1rem;
	margin: 0;
	background: #fff;
	color: var(--novfr-session-ink);
	border: 1px solid var(--novfr-session-line);
	border-radius: var(--novfr-session-radius);
	padding: 1rem 1.125rem;
	text-decoration: none;
	transition: border-color 150ms ease-out, box-shadow 150ms ease-out;
}

.novfr-session-cards--static .novfr-session-date,
.novfr-session-cards--static .novfr-session-meta {
	display: flex;
	flex-direction: column;
	gap: 0.125rem;
	white-space: normal;
}

.novfr-session-cards--static .novfr-session-meta {
	align-items: flex-end;
	gap: 0.25rem;
	margin-left: auto;
}

.novfr-session-cards--static .novfr-session-day {
	font-size: 1.0625rem;
	font-weight: 700;
	white-space: normal;
}

.novfr-session-cards--static .novfr-session-city,
.novfr-session-cards--static .novfr-session-price,
.novfr-session-cards--static .novfr-session-full {
	font-size: 13px;
}

.novfr-session-cards--static .novfr-session-time,
.novfr-session-cards--static .novfr-session-seats {
	display: block;
	color: var(--novfr-session-muted);
	font-size: 0.875rem;
	line-height: 1.3;
}

.novfr-session-cards--static a.novfr-session-static:hover,
.novfr-session-cards--static a.novfr-session-static:focus-visible {
	border-color: var(--novfr-session-accent);
	box-shadow: 0 4px 16px -6px rgba(0, 0, 0, 0.35);
}

.novfr-session-cards--static .is-full .novfr-session-static {
	opacity: 0.55;
}

.novfr-session-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.novfr-session-list li {
	padding: 0.25rem 0;
}

.novfr-session-list li.is-full {
	opacity: 0.55;
}

/* ------------------------------------------------------------------ */
/* 4b. Cases d'acceptation d'Elementor, dans un formulaire qui porte un  */
/*     champ du plugin : même case (18 px, couleur de la marque) et même */
/*     corps de texte (13,5 px) que « Ma société n'apparaît pas dans la  */
/*     liste ».                                                          */
/* ------------------------------------------------------------------ */

.elementor-form:has(.novfr-company, .novfr-session-cards, .novfr-session-select) .elementor-field-type-acceptance .elementor-field-option {
	display: flex;
	align-items: flex-start;
	gap: 8px;
}

.elementor-form:has(.novfr-company, .novfr-session-cards, .novfr-session-select) .elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option label {
	font-size: 13.5px;
	line-height: 1.45;
	margin: 0;
}

.elementor-form:has(.novfr-company, .novfr-session-cards, .novfr-session-select) .elementor-acceptance-field {
	width: 18px;
	height: 18px;
	margin: 1px 0 0;
	flex: 0 0 auto;
	accent-color: var(--novfr-lp-accent, #d63a35);
}

/* ------------------------------------------------------------------ */
/* 5. Habillage sombre du formulaire (classe novfr-form--dark)          */
/* ------------------------------------------------------------------ */

.novfr-form--dark .elementor-form {
	background: var(--novfr-lp-surface, #3b1a39);
	color: var(--novfr-lp-on-surface, #fff);
	border: 1px solid rgba(255, 255, 255, 0.16);
	border-radius: 16px;
	padding: 28px 28px 24px;
}

.novfr-form--dark .elementor-field-group {
	margin-bottom: 4px;
}

.novfr-form--dark .elementor-field-group .elementor-field-textual {
	background: #fff !important;
	color: #1f1220 !important;
	border: 1px solid rgba(255, 255, 255, 0.28) !important;
	border-radius: 10px !important;
	min-height: 52px;
	font-size: 16px;
	padding: 12px 14px;
}

.novfr-form--dark .elementor-field-textual::placeholder {
	color: #8a7588;
	opacity: 1;
}

.novfr-form--dark .elementor-field-textual:focus {
	border-color: var(--novfr-lp-accent, #d63a35) !important;
	outline: 2px solid color-mix(in srgb, var(--novfr-lp-accent, #d63a35) 45%, transparent);
	outline-offset: 1px;
}

.novfr-form--dark .novfr-company-status {
	color: var(--novfr-lp-muted, #d9c5d6) !important;
}

/* Case « saisie manuelle » et case de consentement : même police, même taille, même couleur. */
.novfr-form--dark .novfr-company-toggle,
.novfr-form--dark .elementor-field-type-acceptance .elementor-field-subgroup label,
.novfr-form--dark .elementor-field-type-acceptance label:not(.elementor-screen-only) {
	color: var(--novfr-lp-muted, #d9c5d6) !important;
	font-family: inherit !important;
	font-size: 14px !important;
	font-weight: 400 !important;
	line-height: 1.45 !important;
	letter-spacing: 0;
	text-transform: none;
	margin-bottom: 0;
}

.novfr-form--dark .novfr-company-toggle,
.novfr-form--dark .elementor-field-type-acceptance .elementor-field-option {
	display: flex;
	align-items: flex-start;
	gap: 10px;
}

.novfr-form--dark .novfr-company-toggle {
	margin-top: 10px;
}

.novfr-form--dark .novfr-company-toggle input,
.novfr-form--dark .elementor-acceptance-field {
	width: 18px;
	height: 18px;
	margin: 2px 0 0;
	flex: 0 0 auto;
	accent-color: var(--novfr-lp-accent, #d63a35);
}

.novfr-form--dark .elementor-button[type="submit"] {
	background-color: var(--novfr-lp-accent, #d63a35) !important;
	color: #fff !important;
	border: 0;
	border-radius: 10px !important;
	min-height: 56px;
	font-size: 17px;
	font-weight: 600;
}

.novfr-form--dark .elementor-button[type="submit"]:hover {
	background-color: var(--novfr-lp-accent-hover, #b02f2b) !important;
}

.novfr-form--dark .elementor-message {
	color: #fff !important;
}

.novfr-form--dark .elementor-message.elementor-message-danger {
	color: #ffb3ae !important;
}

/* Sélecteur de dates sur fond sombre : lignes compactes claires, un cran sous les grandes cartes. */
.novfr-form--dark .novfr-session-cards {
	--novfr-session-row: rgba(255, 255, 255, 0.88);
	--novfr-session-label: var(--novfr-lp-muted, #d9c5d6);
}

.novfr-form--dark .novfr-session-more {
	background: transparent;
	color: var(--novfr-lp-on-surface, #fff);
	border-color: rgba(255, 255, 255, 0.4);
}

.novfr-form--dark .novfr-session-more:hover {
	border-color: #fff;
	color: #fff;
}

@media (max-width: 767px) {
	.novfr-form--dark .elementor-form {
		padding: 18px 16px 16px;
		border-radius: 14px;
	}
}

/*
 * Barre fixe qui renvoie vers le formulaire : effacée tant que le formulaire
 * est à l'écran (session-field.js), pour ne pas doubler le bouton d'envoi.
 */
.novfr-cta-away {
	opacity: 0 !important;
	visibility: hidden !important;
	pointer-events: none !important;
	transition: opacity 200ms ease-out, visibility 0s linear 200ms !important;
}

@media (prefers-reduced-motion: reduce) {
	.novfr-cta-away {
		transition: none !important;
	}
}

/**
 * NOVFR LP Kit - slider des prochaines dates.
 * Chemin : assets/css/sessions-slider.css
 *
 * Couleurs : trois niveaux, du plus général au plus précis.
 *   1. valeurs de repli écrites ici ;
 *   2. couleurs du profil de la page, posée sur :root ;
 *   3. onglet Style du widget, posé sur le widget lui-même.
 * Les trois passent par les mêmes variables --novfr-lp-*.
 */

.novfr-slider {
	--ns-accent: var(--novfr-lp-accent, #d63a35);
	--ns-accent-hover: var(--novfr-lp-accent-hover, #b02f2b);
	--ns-surface: var(--novfr-lp-surface, #3b1a39);
	--ns-text: var(--novfr-lp-on-surface, #fff);
	--ns-muted: var(--novfr-lp-muted, #d9c5d6);
	--ns-radius: var(--novfr-lp-radius, 14px);
	--ns-gap: 16px;

	min-width: 0;
	position: relative;
}

/* Piste : défilement horizontal natif, une carte par vue. */
.novfr-slider .novfr-slider-track {
	display: flex;
	gap: var(--ns-gap);
	overflow-x: auto;
	padding-bottom: 2px;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
	-webkit-overflow-scrolling: touch;
}

.novfr-slider .novfr-slider-track::-webkit-scrollbar {
	display: none;
}

/* Carte d'une date. */
.novfr-slider .novfr-slider-card {
	background: var(--ns-surface);
	border: 1px solid rgba(255, 255, 255, 0.16);
	border-radius: var(--ns-radius);
	box-sizing: border-box;
	color: var(--ns-text);
	display: flex;
	flex: 0 0 100%;
	flex-direction: column;
	gap: 8px;
	min-width: 0;
	padding: 22px 24px;
	scroll-snap-align: start;
}

.novfr-slider .novfr-slider-top {
	align-items: flex-end;
	display: flex;
	gap: 12px;
	justify-content: space-between;
}

.novfr-slider .novfr-slider-badge {
	font-size: 52px;
	font-weight: 800;
	letter-spacing: -1.5px;
	line-height: 0.9;
	white-space: nowrap;
}

/* Compte à rebours : masqué tant que le script ne l'a pas calculé. */
.novfr-slider .novfr-slider-countdown {
	color: var(--ns-muted);
	font-size: 12px;
	letter-spacing: 0.4px;
	line-height: 1.1;
	text-align: right;
	text-transform: uppercase;
}

.novfr-slider .novfr-slider-countdown[hidden] {
	display: none;
}

.novfr-slider .novfr-slider-countdown b {
	color: var(--ns-text);
	display: block;
	font-size: 24px;
	font-weight: 800;
	letter-spacing: -0.5px;
	margin-bottom: 2px;
	text-transform: none;
}

.novfr-slider .novfr-slider-countdown small {
	font-size: inherit;
}

.novfr-slider .novfr-slider-when {
	font-size: 18px;
	font-weight: 700;
	line-height: 1.3;
	margin-top: 6px;
}

.novfr-slider .novfr-slider-meta {
	color: var(--ns-muted);
	font-size: 15px;
	line-height: 1.4;
}

.novfr-slider .novfr-slider-seats {
	color: var(--ns-text);
	font-size: 15px;
	font-weight: 600;
}

.novfr-slider .novfr-slider-seats::before {
	background: var(--ns-accent);
	border-radius: 50%;
	box-shadow: 0 0 0 4px color-mix(in srgb, var(--ns-accent) 25%, transparent);
	content: "";
	display: inline-block;
	height: 8px;
	margin-right: 8px;
	vertical-align: middle;
	width: 8px;
}

/* Bouton « Choisir cette date ». */
.novfr-slider .novfr-slider-btn,
.novfr-slider .novfr-slider-btn:hover,
.novfr-slider .novfr-slider-btn:focus {
	color: #fff;
	text-decoration: none;
}

.novfr-slider .novfr-slider-btn {
	align-items: center;
	background: var(--ns-accent);
	border-radius: 10px;
	display: inline-flex;
	font-size: 16px;
	font-weight: 600;
	justify-content: center;
	margin-top: 8px;
	min-height: 48px;
	padding: 0 20px;
	transition: background-color 0.2s;
}

.novfr-slider .novfr-slider-btn:hover {
	background: var(--ns-accent-hover);
}

/* Pied : points, rappel, flèches. */
.novfr-slider .novfr-slider-foot {
	align-items: center;
	display: flex;
	justify-content: space-between;
	margin-top: 12px;
	min-height: 24px;
}

.novfr-slider .novfr-slider-dots {
	display: flex;
	gap: 8px;
}

.novfr-slider .novfr-slider-dots button {
	background: rgba(255, 255, 255, 0.35);
	border: 0;
	border-radius: 50%;
	cursor: pointer;
	height: 8px;
	min-height: 0;
	padding: 0;
	transition: width 0.25s, background-color 0.25s;
	width: 8px;
}

.novfr-slider .novfr-slider-dots button[aria-current="true"] {
	background: #fff;
	border-radius: 4px;
	width: 24px;
}

.novfr-slider .novfr-slider-hint {
	color: var(--ns-muted);
	font-size: 12px;
}

.novfr-slider .novfr-slider-nav {
	display: flex;
	gap: 6px;
}

.novfr-slider .novfr-slider-nav button {
	align-items: center;
	background: transparent;
	border: 1px solid rgba(255, 255, 255, 0.3);
	border-radius: 50%;
	color: #fff;
	cursor: pointer;
	display: flex;
	font-size: 18px;
	height: 36px;
	justify-content: center;
	line-height: 1;
	min-height: 0;
	padding: 0;
	width: 36px;
}

.novfr-slider .novfr-slider-nav button:hover {
	background: rgba(255, 255, 255, 0.12);
}

/*
 * Repères en étiquettes (réglage par défaut depuis 1.0.20) : une étiquette
 * par date (« 8 oct. »), flèches en chevrons nus (masquées sur mobile, voir
 * plus bas) ; le rappel « Les x prochaines dates » n'est plus affiché.
 * Couleurs réglables dans Style › Repères (--ns-tag-*, posées sur le widget,
 * d'où les valeurs de repli écrites ici).
 */
.novfr-slider--nav-labels .novfr-slider-foot {
	gap: 12px;
	margin-top: 14px;
}

.novfr-slider--nav-labels .novfr-slider-tags {
	flex-wrap: wrap;
	gap: 6px;
}

.novfr-slider--nav-labels .novfr-slider-tags button {
	background: var(--ns-tag-bg, transparent);
	border: 1px solid var(--ns-tag-border, color-mix(in srgb, var(--ns-text) 32%, transparent));
	border-radius: 999px;
	color: var(--ns-tag-text, var(--ns-text));
	font-family: inherit;
	font-size: 13px;
	font-weight: 600;
	height: auto;
	letter-spacing: 0.01em;
	line-height: 1;
	padding: 8px 11px;
	transition: background-color 0.2s, border-color 0.2s, color 0.2s;
	white-space: nowrap;
	width: auto;
}

.novfr-slider--nav-labels .novfr-slider-tags button:hover {
	background: color-mix(in srgb, var(--ns-text) 12%, transparent);
}

.novfr-slider--nav-labels .novfr-slider-tags button[aria-current="true"] {
	background: var(--ns-tag-active-bg, var(--ns-text));
	border-color: var(--ns-tag-active-bg, var(--ns-text));
	border-radius: 999px;
	color: var(--ns-tag-active-text, var(--ns-surface));
	width: auto;
}

.novfr-slider--nav-labels .novfr-slider-tags button:focus-visible,
.novfr-slider--nav-labels .novfr-slider-nav button:focus-visible {
	outline: 2px solid var(--ns-text);
	outline-offset: 2px;
}

.novfr-slider--nav-labels .novfr-slider-nav {
	gap: 2px;
	margin-left: auto;
}

.novfr-slider--nav-labels .novfr-slider-nav button {
	background: none;
	border: 0;
	border-radius: 8px;
	color: var(--ns-text);
	height: 36px;
	opacity: 0.8;
	transition: opacity 0.2s, transform 0.2s;
	width: 36px;
}

.novfr-slider--nav-labels .novfr-slider-nav button:hover {
	background: none;
	opacity: 1;
}

.novfr-slider--nav-labels .novfr-slider-nav [data-novfr-prev]:hover {
	transform: translateX(-2px);
}

.novfr-slider--nav-labels .novfr-slider-nav [data-novfr-next]:hover {
	transform: translateX(2px);
}

.novfr-slider--nav-labels .novfr-slider-nav svg {
	display: block;
	fill: none;
	height: 20px;
	stroke: currentColor;
	stroke-linecap: round;
	stroke-linejoin: round;
	stroke-width: 2.2;
	width: 20px;
}

/*
 * Aucune date : carte d'attente, même fond, bordure et arrondi que les
 * cartes de dates, titre à la place du badge, bouton vers le formulaire.
 */
.novfr-slider .novfr-slider-empty-title {
	font-size: 26px;
	font-weight: 800;
	letter-spacing: -0.5px;
	line-height: 1.15;
}

/* Mobile : même point de rupture qu'Elementor. */
@media (max-width: 767px) {
	.novfr-slider .novfr-slider-card {
		padding: 18px;
	}

	.novfr-slider .novfr-slider-badge {
		font-size: 44px;
	}

	.novfr-slider .novfr-slider-nav {
		display: none;
	}

	/*
	 * Étiquettes : gardées sur mobile, comme sur ordinateur. Voir les dates
	 * d'un coup d'œil aide à se projeter sans faire défiler. Pas de flèches
	 * (masquées plus haut) : on glisse la carte ou on touche une date. Zone
	 * tactile portée à 36 px de haut. Centrées sous la carte, avec de l'air
	 * avant le bloc suivant.
	 */
	.novfr-slider--nav-labels .novfr-slider-foot {
		justify-content: center;
		margin-top: 12px;
		margin-bottom: 12px;
	}

	.novfr-slider--nav-labels .novfr-slider-tags {
		justify-content: center;
	}

	.novfr-slider--nav-labels .novfr-slider-tags button {
		min-height: 36px;
		padding: 10px 13px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.novfr-slider .novfr-slider-btn,
	.novfr-slider .novfr-slider-dots button,
	.novfr-slider--nav-labels .novfr-slider-nav button {
		transition: none;
	}

	.novfr-slider--nav-labels .novfr-slider-nav button:hover {
		transform: none;
	}
}

/**
 * NOVFR LP Kit - carrousel de témoignages.
 * Chemin : assets/css/testimonials.css
 *
 * Même logique de couleurs que le slider des dates : valeurs de repli ici,
 * marque du site sur :root (--novfr-lp-*), onglet Style du widget sur le
 * widget lui-même. Le nombre de cartes visibles et l'écart entre elles sont
 * des variables (--nq-per, --nq-gap) posées par les réglages du widget,
 * lues aussi par le script : une seule source de vérité.
 */

.novfr-quotes {
	--nq-per: 3;
	--nq-gap: 24px;
	--nq-card: #fff;
	--nq-text: #2e2e2e;
	--nq-muted: #4f6b75;
	--nq-line: #e1edf2;
	--nq-accent: var(--novfr-lp-accent, #c72c41);
	--nq-radius: var(--novfr-lp-radius, 16px);
	--nq-pad: 24px 26px 22px;
	--nq-stars: #f2a100;
	--nq-shadow: 0 1px 2px rgba(14, 34, 44, 0.06), 0 14px 34px rgba(14, 34, 44, 0.1);

	/* Commandes claires : le réglage par défaut, pour une section sombre. */
	--nq-nav: #fff;
	--nq-nav-dim: rgba(255, 255, 255, 0.35);
	--nq-nav-border: rgba(255, 255, 255, 0.6);
	--nq-nav-bg: transparent;
	--nq-nav-hover: var(--nq-accent);
	--nq-nav-hover-bg: #fff;
	--nq-nav-hover-border: #fff;
	--nq-dot-active: #fff;
	--nq-dot-on: #0e222c;
	--nq-tag-bg: transparent;
	--nq-tag-text: var(--nq-nav);
	--nq-tag-border: var(--nq-nav-border);

	min-width: 0;
	position: relative;
}

/* Commandes sombres, pour une section claire. */
.novfr-quotes--nav-dark {
	--nq-nav: #2e2e2e;
	--nq-nav-dim: rgba(14, 34, 44, 0.2);
	--nq-nav-border: #d4e0e6;
	--nq-nav-bg: #fff;
	--nq-nav-hover: #234653;
	--nq-nav-hover-border: #234653;
	--nq-dot-active: var(--nq-accent);
	--nq-dot-on: #fff;
	--nq-tag-bg: #fff;
}

/* Piste : défilement horizontal natif, calé carte par carte. */
.novfr-quotes .novfr-quotes-track {
	display: flex;
	gap: var(--nq-gap);
	margin: -8px -2px -16px;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	padding: 8px 2px 16px;
	scroll-snap-type: x mandatory;
	scrollbar-width: none;
	-webkit-overflow-scrolling: touch;
}

.novfr-quotes .novfr-quotes-track::-webkit-scrollbar {
	display: none;
}

/* Carte : colonne, l'auteur poussé en bas quelle que soit la longueur du texte. */
.novfr-quotes .novfr-quote {
	background: var(--nq-card);
	border-radius: var(--nq-radius);
	box-sizing: border-box;
	color: var(--nq-text);
	display: flex;
	flex: 0 0 calc((100% - (var(--nq-per) - 1) * var(--nq-gap)) / var(--nq-per));
	flex-direction: column;
	gap: 14px;
	margin: 0;
	min-width: 0;
	padding: var(--nq-pad);
	scroll-snap-align: start;
}

.novfr-quotes--shadow .novfr-quote {
	box-shadow: var(--nq-shadow);
}

/* Ligne du haut : source et note. */
.novfr-quotes .novfr-quote-top {
	align-items: center;
	display: flex;
	flex-wrap: wrap;
	gap: 8px 10px;
	justify-content: space-between;
}

/* Hauteur fixe : avec ou sans logo, la citation démarre au même niveau. */
.novfr-quotes .novfr-quote-source {
	align-items: center;
	border-radius: 999px;
	box-sizing: border-box;
	min-height: 28px;
	display: inline-flex;
	font-size: 12px;
	font-weight: 700;
	gap: 7px;
	letter-spacing: 0.09em;
	line-height: 1;
	padding: 5px 11px;
	text-transform: uppercase;
	white-space: nowrap;
}

.novfr-quotes .novfr-quote-source::before {
	background: currentColor;
	border-radius: 50%;
	content: "";
	height: 8px;
	opacity: 0.85;
	width: 8px;
}

/* Logo de la source (Style › Sources) à la place du point. */
.novfr-quotes .novfr-quote-source.has-logo {
	padding-left: 5px;
}

.novfr-quotes .novfr-quote-source.has-logo::before {
	content: none;
}

.novfr-quotes .novfr-quote-logo {
	display: block;
	flex: 0 0 auto;
	height: 18px;
	object-fit: contain;
	width: 18px;
}

/*
 * Couleurs par source : valeurs par défaut ici, remplacées par les réglages
 * Style › Sources (--nq-src-bg, --nq-src-text, --nq-src-stars posés sur la
 * carte). Autre : teinte de l'accent de la page.
 */
.novfr-quotes .novfr-quote-source[data-source="dynabuy"] {
	background: var(--nq-src-bg, #ebf6fa);
	color: var(--nq-src-text, #234653);
}

.novfr-quotes .novfr-quote-source[data-source="trustpilot"] {
	background: var(--nq-src-bg, #e4f6ee);
	color: var(--nq-src-text, #0b7a57);
}

.novfr-quotes .novfr-quote-source[data-source="google"] {
	background: var(--nq-src-bg, #e8f0fe);
	color: var(--nq-src-text, #1553b3);
}

.novfr-quotes .novfr-quote-source[data-source="linkedin"] {
	background: var(--nq-src-bg, #e6f0fa);
	color: var(--nq-src-text, #0a66c2);
}

.novfr-quotes .novfr-quote-source[data-source="plusquepro"] {
	background: var(--nq-src-bg, #fff1e4);
	color: var(--nq-src-text, #b34f00);
}

.novfr-quotes .novfr-quote-source[data-source="autre"] {
	background: var(--nq-src-bg, color-mix(in srgb, var(--nq-accent) 11%, #fff));
	color: var(--nq-src-text, color-mix(in srgb, var(--nq-accent) 85%, #000));
}

/* Navigateurs sans color-mix : l'ancien gris. */
@supports not (color: color-mix(in srgb, red, red)) {
	.novfr-quotes .novfr-quote-source[data-source="autre"] {
		background: var(--nq-src-bg, #eef2f4);
		color: var(--nq-src-text, var(--nq-muted));
	}
}

.novfr-quotes .novfr-quote-stars {
	color: var(--nq-src-stars, var(--nq-stars));
	display: inline-flex;
	font-size: 15px;
	gap: 1px;
	line-height: 1;
	white-space: nowrap;
}

.novfr-quotes .novfr-quote-stars i {
	font-style: normal;
}

.novfr-quotes .novfr-quote-stars .is-off {
	opacity: 0.28;
}

.novfr-quotes .novfr-quote[data-source="plusquepro"] .novfr-quote-stars {
	color: var(--nq-src-stars, #f07c00);
}

/* Trustpilot : une case verte par étoile, étoile blanche. */
.novfr-quotes .novfr-quote[data-source="trustpilot"] .novfr-quote-stars {
	gap: 2px;
}

.novfr-quotes .novfr-quote[data-source="trustpilot"] .novfr-quote-stars i {
	align-items: center;
	background: var(--nq-src-stars, #00b67a);
	color: #fff;
	display: inline-flex;
	font-size: 12px;
	height: 18px;
	justify-content: center;
	width: 18px;
}

.novfr-quotes .novfr-quote[data-source="trustpilot"] .novfr-quote-stars .is-off {
	background: #dcdce6;
	opacity: 1;
}

/* Citation. */
.novfr-quotes .novfr-quote-text {
	color: var(--nq-text);
	flex: 1 1 auto;
	font-size: 17px;
	line-height: 1.62;
	margin: 0;
}

/*
 * Auteur : nom, fonction, source en texte simple, en bloc serré ; la source
 * en italique, plus discrète. Jamais de lien : on garde le visiteur sur la page.
 */
.novfr-quotes .novfr-quote-foot {
	border-top: 1px solid var(--nq-line);
	display: flex;
	flex-direction: column;
	gap: 0;
	margin-top: auto;
	padding-top: 10px;
}

.novfr-quotes .novfr-quote-name {
	color: var(--nq-text);
	font-size: 15px;
	font-weight: 700;
	line-height: 1.3;
}

.novfr-quotes .novfr-quote-role {
	color: var(--nq-muted);
	font-size: 13.5px;
	line-height: 1.3;
}

.novfr-quotes .novfr-quote-where {
	color: var(--nq-muted);
	font-size: 12.5px;
	font-style: italic;
	line-height: 1.3;
	margin-top: 2px;
	opacity: 0.85;
}

/* Barre de navigation : points à gauche, flèches à droite. */
.novfr-quotes .novfr-quotes-bar {
	align-items: center;
	display: flex;
	gap: 16px;
	justify-content: space-between;
	margin-top: 22px;
}

.novfr-quotes .novfr-quotes-bar[hidden] {
	display: none;
}

.novfr-quotes .novfr-quotes-dots {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.novfr-quotes .novfr-quotes-dots li[hidden] {
	display: none;
}

.novfr-quotes .novfr-quotes-dots button {
	background: var(--nq-nav-dim);
	border: 0;
	border-radius: 999px;
	cursor: pointer;
	height: 10px;
	padding: 0;
	transition: width 0.25s ease, background 0.25s ease;
	width: 10px;
}

.novfr-quotes .novfr-quotes-dots button[aria-current="true"] {
	background: var(--nq-dot-active);
	width: 26px;
}

.novfr-quotes .novfr-quotes-dots button:focus-visible {
	outline: 2px solid var(--nq-nav);
	outline-offset: 3px;
}

.novfr-quotes .novfr-quotes-arrows {
	display: flex;
	gap: 10px;
	margin-left: auto;
}

.novfr-quotes .novfr-quotes-arrows button {
	align-items: center;
	background: var(--nq-nav-bg);
	border: 2px solid var(--nq-nav-border);
	border-radius: 50%;
	color: var(--nq-nav);
	cursor: pointer;
	display: inline-flex;
	height: 46px;
	justify-content: center;
	padding: 0;
	transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
	width: 46px;
}

.novfr-quotes .novfr-quotes-arrows button:hover,
.novfr-quotes .novfr-quotes-arrows button:focus-visible {
	background: var(--nq-nav-hover-bg);
	border-color: var(--nq-nav-hover-border);
	color: var(--nq-nav-hover);
	outline: none;
}

.novfr-quotes .novfr-quotes-arrows svg {
	fill: none;
	height: 18px;
	stroke: currentColor;
	stroke-linecap: round;
	stroke-linejoin: round;
	stroke-width: 2.4;
	width: 18px;
}

/*
 * Repères en prénoms (réglage par défaut depuis 1.0.20) : une étiquette par
 * témoin, flèches en chevrons nus. Sur mobile, points ronds centrés à la
 * place (voir plus bas). Fond clair sur section claire (1.0.21) ; couleurs
 * réglables dans Style › Repères (--nq-tag-*, --nq-dot-active, --nq-dot-on).
 */
.novfr-quotes--nav-labels .novfr-quotes-dots {
	gap: 6px;
}

.novfr-quotes--nav-labels .novfr-quotes-dots button {
	background: var(--nq-tag-bg);
	border: 1px solid var(--nq-tag-border);
	border-radius: 999px;
	color: var(--nq-tag-text);
	font-family: inherit;
	font-size: 13px;
	font-weight: 600;
	height: auto;
	letter-spacing: 0.01em;
	line-height: 1;
	padding: 8px 11px;
	transition: background-color 0.2s, border-color 0.2s, color 0.2s;
	white-space: nowrap;
	width: auto;
}

.novfr-quotes--nav-labels .novfr-quotes-dots button:hover {
	border-color: var(--nq-nav-hover-border);
}

.novfr-quotes--nav-labels .novfr-quotes-dots button[aria-current="true"] {
	background: var(--nq-dot-active);
	border-color: var(--nq-dot-active);
	color: var(--nq-dot-on);
	width: auto;
}

.novfr-quotes--nav-labels .novfr-quotes-arrows {
	gap: 2px;
}

.novfr-quotes--nav-labels .novfr-quotes-arrows button {
	background: none;
	border: 0;
	border-radius: 8px;
	color: var(--nq-nav);
	height: 40px;
	opacity: 0.8;
	transition: opacity 0.2s, transform 0.2s;
	width: 40px;
}

.novfr-quotes--nav-labels .novfr-quotes-arrows button:hover,
.novfr-quotes--nav-labels .novfr-quotes-arrows button:focus-visible {
	background: none;
	color: var(--nq-nav);
	opacity: 1;
}

.novfr-quotes--nav-labels .novfr-quotes-arrows button:focus-visible {
	outline: 2px solid var(--nq-nav);
	outline-offset: 2px;
}

.novfr-quotes--nav-labels .novfr-quotes-arrows [data-novfr-prev]:hover {
	transform: translateX(-2px);
}

.novfr-quotes--nav-labels .novfr-quotes-arrows [data-novfr-next]:hover {
	transform: translateX(2px);
}

.novfr-quotes--nav-labels .novfr-quotes-arrows svg {
	height: 20px;
	stroke-width: 2.2;
	width: 20px;
}

/* Sans réglage responsive posé par Elementor, on retombe sur 2 puis 1 carte. */
@media (max-width: 1024px) {
	.novfr-quotes {
		--nq-per: 2;
	}
}

@media (max-width: 767px) {
	.novfr-quotes {
		--nq-per: 1;
		--nq-gap: 16px;
		--nq-pad: 20px 20px 18px;
	}

	/*
	 * Mobile : les étiquettes deviennent des points ronds centrés, un par
	 * avis, de taille fixe ; seule la couleur marque l'avis affiché. Le texte
	 * reste dans le bouton pour les lecteurs d'écran. Zone tactile de
	 * 16 × 24 px pour un point de 8 px, points espacés de 8 px. Pas de
	 * flèches : on fait glisser les cartes. (Le slider des dates garde, lui,
	 * ses étiquettes sur mobile.)
	 */
	.novfr-quotes--nav-labels .novfr-quotes-bar {
		justify-content: center;
		margin-top: 12px;
	}

	.novfr-quotes--nav-labels .novfr-quotes-arrows {
		display: none;
	}

	.novfr-quotes--nav-labels .novfr-quotes-dots {
		gap: 0;
		justify-content: center;
	}

	.novfr-quotes--nav-labels .novfr-quotes-dots button,
	.novfr-quotes--nav-labels .novfr-quotes-dots button[aria-current="true"] {
		background: transparent;
		border: 0;
		color: transparent;
		font-size: 0;
		height: 24px;
		padding: 0;
		position: relative;
		width: 16px;
	}

	.novfr-quotes--nav-labels .novfr-quotes-dots button::before {
		background: var(--nq-nav-dim);
		border-radius: 50%;
		content: "";
		inset: 8px 4px;
		position: absolute;
		transition: background-color 0.2s;
	}

	.novfr-quotes--nav-labels .novfr-quotes-dots button[aria-current="true"]::before {
		background: var(--nq-dot-active);
	}
}

@media (prefers-reduced-motion: reduce) {
	.novfr-quotes .novfr-quotes-dots button,
	.novfr-quotes .novfr-quotes-dots button::before,
	.novfr-quotes .novfr-quotes-arrows button {
		transition: none;
	}

	.novfr-quotes--nav-labels .novfr-quotes-arrows button:hover {
		transform: none;
	}
}

/**
 * NOVFR LP Kit - minuteur (quatre minutes).
 * Chemin : assets/css/countdown.css
 *
 * Même logique de couleurs que les autres widgets : valeurs de repli ici,
 * marque du site sur :root (--novfr-lp-*), onglet Style du widget sur le
 * widget lui-même. Le widget est prévu pour une section sombre : chiffres
 * à la couleur d'accent, textes clairs.
 *
 * Épinglé (.novfr-countdown--pin) : le bloc réserve une hauteur d'écran plus
 * la longueur de défilement, et son contenu reste collé en haut pendant que
 * le visiteur fait défiler ; le script fait descendre le chrono et allume les
 * étapes. Statique, dans l'éditeur ou avec « moins d'animations » : simple
 * bloc, tout visible.
 */

.novfr-countdown {
	--nc-time: var(--novfr-lp-accent, #d63a35);
	--nc-caption: var(--novfr-lp-muted, #d9c5d6);
	--nc-heading: var(--novfr-lp-on-surface, #fff);
	--nc-step: var(--novfr-lp-muted, #d9c5d6);
	--nc-step-strong: var(--novfr-lp-on-surface, #fff);
	--nc-bg: transparent;
	--nc-scroll: 100vh;
	--nc-gap: 64px;
	--nc-steps-gap: 10px;
	/* Repli : le widget règle « Espace sous le titre » à 32 / 26 / 22 px par défaut. */
	--nc-heading-gap: 14px;
	--nc-dim: 0.18;

	min-width: 0;
}

/* Deux colonnes sur écran large, une seule en dessous. */
.novfr-countdown .novfr-countdown-inner {
	align-items: start;
	box-sizing: border-box;
	display: grid;
	gap: 24px var(--nc-gap);
	padding-block: 56px;
}

@media (min-width: 896px) {
	.novfr-countdown .novfr-countdown-inner {
		grid-template-columns: 1fr 1fr;
	}
}

/* Chrono. */
.novfr-countdown .novfr-countdown-time {
	color: var(--nc-time);
	font-size: clamp(62px, 8.4vw, 120px);
	font-variant-numeric: tabular-nums;
	font-weight: 700;
	letter-spacing: -0.05em;
	line-height: 0.85;
}

.novfr-countdown .novfr-countdown-caption {
	color: var(--nc-caption);
	font-size: 16px;
	line-height: 1.5;
	margin: 18px 0 0;
	max-width: 36ch;
}

/* Titre et étapes. */
.novfr-countdown .novfr-countdown-heading {
	color: var(--nc-heading);
	margin: 0 0 var(--nc-heading-gap);
}

.novfr-countdown .novfr-countdown-list {
	display: flex;
	flex-direction: column;
	gap: var(--nc-steps-gap);
	list-style: none;
	margin: 0;
	padding: 0;
}

.novfr-countdown .novfr-countdown-step {
	color: var(--nc-step);
	font-size: clamp(19px, 2.6vw, 26px);
	line-height: 1.3;
	margin: 0;
	padding: 0;
}

.novfr-countdown .novfr-countdown-step b,
.novfr-countdown .novfr-countdown-step strong {
	color: var(--nc-step-strong);
	font-weight: 700;
}

/* Épinglé : l'étape atteinte s'allume, les suivantes restent en retrait. */
.novfr-countdown--pin .novfr-countdown-step {
	opacity: var(--nc-dim);
	transform: translateY(6px);
	transition: opacity 0.25s ease, transform 0.25s ease;
}

.novfr-countdown--pin .novfr-countdown-step.is-on {
	opacity: 1;
	transform: none;
}

/* Une hauteur d'écran plus la longueur du défilement (100vh = un écran). */
.novfr-countdown--pin {
	min-height: calc(100svh + var(--nc-scroll));
}

@media (min-width: 896px) {
	.novfr-countdown--pin .novfr-countdown-inner {
		align-content: center;
		min-height: 100svh;
		position: sticky;
		top: 0;
	}
}

/*
 * Grand écran, bloc plus haut que l'écran (portable, fenêtre réduite) : le
 * script pose --compact, le bloc se resserre. Les écarts réglés dans le
 * widget sont réduits en proportion, pas remplacés ; le texte ne grossit
 * jamais. S'il ne tient toujours pas, le script pose --loose : plus
 * d'épinglage, le bloc défile normalement et rien n'est jamais coupé.
 */
@media (min-width: 896px) {
	.novfr-countdown--compact .novfr-countdown-inner {
		padding-block: 24px;
	}

	.novfr-countdown--compact .novfr-countdown-heading {
		margin-bottom: calc(var(--nc-heading-gap) * 0.6);
	}

	.novfr-countdown--compact .novfr-countdown-list {
		gap: calc(var(--nc-steps-gap) * 0.55);
	}

	.novfr-countdown--compact .novfr-countdown-step {
		font-size: clamp(17px, min(2.6vw, 3.2vh), 26px);
	}

	.novfr-countdown--pin.novfr-countdown--loose {
		min-height: 0;
	}

	.novfr-countdown--loose .novfr-countdown-inner {
		min-height: 0;
		position: static;
	}
}

/* Petit écran : le chrono reste collé en haut pendant que les étapes défilent dessous. */
@media (max-width: 895px) {
	.novfr-countdown--pin .novfr-countdown-clock {
		background: var(--nc-bg);
		padding-block: 12px;
		position: sticky;
		top: 8px;
		z-index: 2;
	}

	.novfr-countdown .novfr-countdown-caption {
		font-size: 14px;
		margin-top: 10px;
	}
}

/*
 * Seules les règles --pin posent hauteur, épinglage et retrait des étapes :
 * sans --pin (réglage coupé, ou éditeur Elementor) le bloc est statique,
 * tout visible. « Moins d'animations » défait --pin ci-dessous.
 */
@media (prefers-reduced-motion: reduce) {
	.novfr-countdown--pin {
		min-height: 0;
	}

	.novfr-countdown--pin .novfr-countdown-inner,
	.novfr-countdown--pin .novfr-countdown-clock {
		min-height: 0;
		position: static;
	}

	.novfr-countdown--pin .novfr-countdown-step {
		opacity: 1;
		transform: none;
		transition: none;
	}
}

/**
 * NOVFR LP Kit - Barre de réservation.
 * Chemin : assets/css/booking-bar.css
 *
 * Mobile : barre pleine largeur collée en bas. Ordinateur : pilule centrée,
 * flottante, fond translucide flouté. Elle monte doucement quand le script
 * pose is-on (aucun bouton vers le formulaire à l'écran). Toute la barre est
 * le lien ; la pastille d'action reste discrète et prend l'accent au survol.
 * Couleurs du profil par défaut, réglables dans Style › Barre.
 */
.novfr-bbar {
	--bb-bg: color-mix(in srgb, var(--novfr-lp-surface, #0e222c) 94%, transparent);
	--bb-text: var(--novfr-lp-on-surface, #fff);
	--bb-label: var(--novfr-lp-muted, #9dd5e6);
	--bb-accent: var(--novfr-lp-accent, #c72c41);
	--bb-offset: 22px;
	--bb-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
	position: fixed;
	z-index: 98;
	left: 0;
	right: 0;
	bottom: 0;
	display: flex;
	align-items: center;
	gap: 12px;
	box-sizing: border-box;
	padding: 10px 12px calc(10px + env(safe-area-inset-bottom)) 16px;
	background: var(--bb-bg);
	border-top: 1px solid color-mix(in srgb, var(--bb-label) 24%, transparent);
	box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.28);
	color: var(--bb-text) !important;
	text-decoration: none !important;
	transform: translateY(110%);
	visibility: hidden;
	transition: transform 0.35s var(--bb-ease), visibility 0s linear 0.35s;
}

.novfr-bbar.is-on {
	transform: none;
	visibility: visible;
	transition: transform 0.35s var(--bb-ease), visibility 0s;
}

.novfr-bbar-txt {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.novfr-bbar-k {
	color: var(--bb-label);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.12em;
	line-height: 1.2;
	text-transform: uppercase;
}

.novfr-bbar-v {
	overflow: hidden;
	color: var(--bb-text);
	font-size: 15px;
	font-weight: 700;
	line-height: 1.25;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* Pastille d'action : teinte légère de l'accent, pleine au survol. */
.novfr-bbar-go {
	display: inline-flex;
	flex: 0 0 auto;
	align-items: center;
	gap: 8px;
	min-height: 42px;
	padding: 0 5px 0 14px;
	border: 1px solid color-mix(in srgb, var(--bb-accent) 55%, transparent);
	border-radius: 999px;
	background: color-mix(in srgb, var(--bb-accent) 20%, transparent);
	color: var(--bb-text);
	font-size: 13.5px;
	font-weight: 700;
	line-height: 1;
	white-space: nowrap;
	transition: background-color 0.2s ease-out, border-color 0.2s ease-out;
}

.novfr-bbar-go svg {
	width: 32px;
	height: 32px;
	box-sizing: border-box;
	padding: 8px;
	border-radius: 50%;
	background: var(--bb-accent);
	color: #fff;
	transition: transform 0.2s ease-out;
}

.novfr-bbar:hover .novfr-bbar-go,
.novfr-bbar:focus-visible .novfr-bbar-go {
	background: var(--bb-accent);
	border-color: var(--bb-accent);
}

.novfr-bbar:hover .novfr-bbar-go svg,
.novfr-bbar:focus-visible .novfr-bbar-go svg {
	transform: translateX(2px);
}

.novfr-bbar:focus-visible {
	outline: 3px solid var(--bb-label);
	outline-offset: 3px;
}

/* Très petits écrans : la flèche seule, la date garde la place. */
@media (max-width: 359px) {
	.novfr-bbar-cta {
		display: none;
	}

	.novfr-bbar-go {
		padding: 0 5px;
	}
}

@media (min-width: 768px) {
	.novfr-bbar {
		left: 50%;
		right: auto;
		bottom: var(--bb-offset);
		width: max-content;
		max-width: calc(100vw - 48px);
		padding: 7px 7px 7px 24px;
		border: 1px solid color-mix(in srgb, var(--bb-label) 28%, transparent);
		border-radius: 999px;
		background: color-mix(in srgb, var(--bb-bg) 92%, transparent);
		-webkit-backdrop-filter: blur(12px);
		backdrop-filter: blur(12px);
		box-shadow: 0 18px 44px rgba(0, 0, 0, 0.38);
		translate: -50% 0;
		transform: translateY(calc(100% + var(--bb-offset) + 24px));
	}

	.novfr-bbar.is-on {
		transform: none;
	}

	.novfr-bbar-txt {
		flex-direction: row;
		align-items: baseline;
		gap: 12px;
		margin-right: 10px;
	}

	.novfr-bbar-v {
		font-size: 15.5px;
	}

	.novfr-bbar-go {
		gap: 10px;
		padding-left: 16px;
		font-size: 14px;
	}
}

/* Éditeur Elementor : la barre est posée dans la page, visible, pour être réglée. */
.novfr-bbar.novfr-bbar--editor {
	position: relative;
	left: auto;
	right: auto;
	bottom: auto;
	margin: 0 auto;
	translate: none;
	transform: none;
	visibility: visible;
}

@media (prefers-reduced-motion: reduce) {
	.novfr-bbar,
	.novfr-bbar.is-on,
	.novfr-bbar-go,
	.novfr-bbar-go svg {
		transition: none;
	}
}

/**
 * NOVFR LP Kit - défilement continu d'une Liste d'icônes ou d'une Galerie
 * basique Elementor.
 * Chemin : assets/css/marquee.css
 *
 * Actif quand « Défilement continu » est coché (classe novfr-marquee-yes).
 * Le script calcule --novfr-marquee-shift (longueur d'une liste) et
 * --novfr-marquee-duration ; sans script ou si l'appareil demande moins
 * d'animations, la liste reste fixe et la galerie garde sa grille.
 */

.novfr-marquee-yes .elementor-icon-list-item {
	white-space: nowrap;
}

.novfr-marquee-view {
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 var(--novfr-marquee-fade, 48px), #000 calc(100% - var(--novfr-marquee-fade, 48px)), transparent);
	mask-image: linear-gradient(90deg, transparent, #000 var(--novfr-marquee-fade, 48px), #000 calc(100% - var(--novfr-marquee-fade, 48px)), transparent);
	overflow: hidden;
}

.novfr-marquee-track {
	animation: novfr-marquee var(--novfr-marquee-duration, 60s) linear infinite;
	display: flex;
	width: max-content;
}

.novfr-marquee-track.novfr-marquee-reverse {
	animation-direction: reverse;
}

.novfr-marquee-track > .elementor-icon-list-items {
	flex-wrap: nowrap !important;
	margin-inline: 0 !important;
}

/* Galerie : photos à hauteur fixe, largeur selon leur format. L'espacement
   réglé dans Style › Images sépare les photos et les deux lignes. */
.novfr-marquee-track > .gallery {
	display: flex;
	margin: 0 !important;
}

.novfr-marquee-track .gallery-item {
	flex: 0 0 auto;
	margin: 0 !important;
	max-width: none !important;
	width: auto !important;
}

.novfr-marquee-track .gallery-item img {
	height: var(--novfr-marquee-height, 250px);
	max-width: none;
	object-fit: cover;
	width: auto;
}

.novfr-marquee-view:last-child .gallery-item {
	padding-bottom: 0 !important;
}

.novfr-marquee-yes:hover .novfr-marquee-track {
	animation-play-state: paused;
}

@keyframes novfr-marquee {
	to {
		transform: translateX(var(--novfr-marquee-shift, 0));
	}
}

@media (prefers-reduced-motion: reduce) {
	.novfr-marquee-track {
		animation: none;
	}
}

