/*
Theme Name: Voyages du 19ème
Theme URI: https://voyagesdu19eme.fr
Author: Voyages du 19ème
Description: Thème bloc (FSE) sur mesure pour l'agence Voyages du 19ème — billetterie, séjours et formalités. Tout le contenu est éditable depuis l'éditeur de blocs : titres, textes, images, boutons, liens, cartes, avis, FAQ, formulaire de devis, en-tête et pied de page.
Requires at least: 6.6
Tested up to: 6.7
Requires PHP: 7.4
Version: 1.4.1
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: voyages-19eme
Tags: full-site-editing, block-patterns, blog, one-column, custom-colors, custom-logo, custom-menu, editor-style, block-styles, accessibility-ready, translation-ready
*/

/* ===========================================================================
   Ce fichier ne contient QUE de la mise en forme.
   Aucun texte, aucune image, aucune URL de contenu : tout cela vit dans
   WordPress (blocs, motifs, parties de modèle, médiathèque, menus).
   Les jetons de design (couleurs, typo, espacements) sont dans theme.json.
   =========================================================================== */

:root {
	/* Axe de contenu du site — définition unique, partagée par les sections,
	   l'en-tête et le pied de page. Reprend la boîte du design d'origine :
	   1240 px de large, gouttières comprises. */
	--v19-content: 1136px;
	--v19-gutter: var(--wp--custom--gutter, clamp(20px, 4vw, 52px));

	/* Écart entre le bord intérieur d'une section pleine largeur et l'axe.
	   Vaut 0 dans un conteneur qui fait déjà la largeur de la colonne. */
	--v19-axis-offset: max(0px, (100% - var(--v19-content)) / 2);

	--v19-divider: var(--wp--custom--divider, color-mix(in srgb, #1e3c78 18%, transparent));
	--v19-divider-light: var(--wp--custom--divider-light, rgba(255, 255, 255, 0.24));
	--v19-gold: var(--wp--preset--color--gold, #ee9f1e);
	--v19-gold-hover: var(--wp--custom--gold-hover, #ffb43f);
	--v19-accent: var(--wp--preset--color--accent, #1e3c78);
	--v19-grade: var(--wp--custom--photo-grade, saturate(0.94) contrast(1.03));
}

body {
	overflow-x: clip;
	-webkit-font-smoothing: antialiased;
}

/* WordPress insère l'espacement de bloc global entre les blocs de premier
   niveau : entre l'en-tête, le contenu et le pied de page, puis entre chaque
   section pleine largeur. Ces sections portent déjà leur propre rythme vertical
   (padding) et se séparent par des filets : l'espacement n'ouvrirait qu'une
   bande blanche. Les blocs de contenu ordinaires, eux, gardent le leur. */
.wp-site-blocks > *,
.wp-site-blocks main > .alignfull,
.wp-block-post-content > .alignfull {
	margin-block-start: 0;
	margin-block-end: 0;
}

:focus-visible {
	outline: 2px solid var(--v19-accent);
	outline-offset: 2px;
}

::selection {
	background: color-mix(in srgb, var(--v19-accent) 22%, transparent);
}

/* Chiffres alignés (tableaux, prix, téléphones, horaires) */
.tnum,
.wp-block-table,
.v19-stat__value,
.v19-step__number {
	font-variant-numeric: tabular-nums;
	font-feature-settings: "tnum";
}

sup {
	font-size: 0.55em;
	top: -0.5em;
	position: relative;
	line-height: 0;
}

/* ---------------------------------------------------------------------------
   1. Utilitaires de section
   ------------------------------------------------------------------------ */

/* Filets de séparation entre sections */
.v19-rule-top { border-top: 1px solid var(--v19-divider); }
.v19-rule-bottom { border-bottom: 1px solid var(--v19-divider); }

/* Section pleine largeur sans gouttière (bandeaux défilants) */
.v19-bleed {
	padding-left: 0 !important;
	padding-right: 0 !important;
}

/* ---------------------------------------------------------------------------
   2. Styles de blocs enregistrés (variations "is-style-…")
   ------------------------------------------------------------------------ */

/* Surtitre — petites capitales espacées au-dessus des titres de section */
.is-style-v19-kicker {
	font-size: var(--wp--preset--font-size--kicker, 10px);
	letter-spacing: var(--wp--custom--tracking--kicker, 0.24em);
	text-transform: uppercase;
	line-height: 1.5;
	color: var(--v19-accent);
	margin-bottom: 14px;
}

.has-accent-night-background-color .is-style-v19-kicker,
.wp-block-cover .is-style-v19-kicker,
.has-text-color.has-base-color .is-style-v19-kicker {
	color: var(--v19-gold);
}

/* Étiquette — libellé sous un chiffre clé */
.is-style-v19-label {
	font-size: var(--wp--preset--font-size--micro, 11px);
	letter-spacing: var(--wp--custom--tracking--label, 0.14em);
	text-transform: uppercase;
	line-height: 1.5;
	color: var(--wp--preset--color--muted);
	margin: 12px 0 0;
}

/* Chiffre clé */
.is-style-v19-stat {
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--number-l);
	line-height: 1;
	color: var(--v19-accent);
	margin: 0;
}

/* Numéro d'étape / d'article (01, 02, 03…) */
.is-style-v19-step-number {
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 700;
	font-size: var(--wp--preset--font-size--number);
	line-height: 1;
	color: var(--v19-gold);
	margin: 0;
}

/* Encadré d'avertissement (filet doré à gauche) */
.is-style-v19-notice {
	font-size: var(--wp--preset--font-size--small);
	line-height: 1.7;
	color: var(--wp--preset--color--accent-dark);
	padding-left: 14px;
	border-left: 2px solid var(--v19-gold);
	max-width: 72ch;
}

/* Mention légale / note de bas de tableau */
.is-style-v19-fineprint {
	font-size: var(--wp--preset--font-size--tiny);
	line-height: 1.7;
	color: var(--wp--preset--color--muted);
}

/* Ligne de contact : libellé à gauche, valeur à droite, filets fins */
.is-style-v19-contact-row {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 16px;
	flex-wrap: wrap;
	border-top: 1px solid var(--v19-divider);
	padding: 14px 0;
	margin: 0;
	font-size: var(--wp--preset--font-size--body);
}

.v19-contact-rows > .is-style-v19-contact-row:last-child {
	border-bottom: 1px solid var(--v19-divider);
}

.is-style-v19-contact-row > p { margin: 0; }

.is-style-v19-contact-row a {
	color: inherit;
}

.is-style-v19-contact-row a:hover {
	color: var(--v19-accent);
}

/* Lien souligné d'or */
.is-style-v19-goldlink a,
a.is-style-v19-goldlink {
	border-bottom: 1px solid var(--v19-gold);
	padding-bottom: 2px;
}

/* Filet doré (séparateur) */
.wp-block-separator.is-style-v19-gold {
	width: 110px;
	max-width: 110px;
	height: 3px;
	border: 0;
	border-radius: 2px;
	background: var(--v19-gold);
	opacity: 1;
}

/* Plaque photo — traitement colorimétrique + cadre du système de design */
.is-style-v19-plate img,
.is-style-v19-plate .wp-block-cover__image-background,
.v19-card > .wp-block-image img {
	filter: var(--v19-grade);
}

.is-style-v19-plate {
	position: relative;
	overflow: hidden;
	border: 6px solid var(--wp--preset--color--surface);
	outline: 1px solid var(--v19-divider);
}

.is-style-v19-plate img {
	width: 100%;
	display: block;
}

/* Groupe "filet haut" — colonnes de services, moyens de paiement, encarts légaux */
.is-style-v19-topline {
	border-top: 1px solid var(--v19-divider);
	padding-top: 16px;
}

.is-style-v19-topline > :first-child { margin-top: 0; }
.is-style-v19-topline > :last-child { margin-bottom: 0; }

/* ---------------------------------------------------------------------------
   3. En-tête
   ------------------------------------------------------------------------ */

.v19-header {
	position: sticky;
	top: 0;
	z-index: 60;
	background: var(--wp--preset--color--base);
	border-bottom: 1px solid var(--v19-divider);
	transition: box-shadow 0.2s ease, border-color 0.2s ease;
}

/* Barre d'administration : fixe à partir de 783 px, l'en-tête doit se coller
   dessous. En dessous elle défile avec la page et « top: 0 » convient. */
@media screen and (min-width: 783px) {
	.admin-bar .v19-header { top: 32px; }
}

.v19-header__bar {
	min-height: clamp(68px, 7.4vw, 92px);
	gap: clamp(14px, 3vw, 40px);
	transition: min-height 0.22s ease;
}

/* Au défilement, l'en-tête se resserre et se détache du contenu.
   Même comportement sur ordinateur, tablette et mobile. */
.v19-header.is-scrolled {
	border-bottom-color: transparent;
	box-shadow: 0 1px 0 var(--v19-divider), 0 10px 28px rgba(22, 32, 46, 0.07);
}

.v19-header.is-scrolled .v19-header__bar {
	min-height: clamp(56px, 5.2vw, 68px);
}

.v19-header .wp-block-site-logo img {
	transition: height 0.22s ease;
}

.v19-header.is-scrolled .wp-block-site-logo img {
	height: clamp(30px, 3.4vw, 44px);
}

@media (prefers-reduced-motion: reduce) {
	.v19-header,
	.v19-header__bar,
	.v19-header .wp-block-site-logo img { transition: none; }
}

.v19-header .wp-block-site-logo img {
	height: clamp(38px, 4.6vw, 60px);
	width: auto;
	max-width: none;
}

.v19-header .wp-block-navigation {
	margin-left: auto;
	gap: clamp(14px, 2.2vw, 30px);
}

.v19-header .wp-block-navigation .wp-block-navigation-item__content {
	color: var(--wp--preset--color--contrast);
	padding-bottom: 3px;
	border-bottom: 1px solid transparent;
	transition: border-color 0.16s ease, color 0.16s ease;
}

.v19-header .wp-block-navigation .wp-block-navigation-item__content:hover {
	border-bottom-color: var(--v19-gold);
	color: var(--wp--preset--color--contrast);
}

.v19-header .wp-block-navigation .current-menu-item > .wp-block-navigation-item__content,
.v19-header .wp-block-navigation .wp-block-navigation-item__content[aria-current="page"] {
	color: var(--wp--preset--color--accent-dark);
	border-bottom-color: var(--v19-accent);
}

.v19-header__phone {
	white-space: nowrap;
	margin: 0;
}

.v19-header__phone a {
	color: var(--wp--preset--color--contrast);
}

.v19-header__phone a:hover { color: var(--v19-accent); }

/* Le menu déroulant natif prend le relais sous 900px (et non 600px) afin de
   respecter le point de rupture du design d'origine. */
@media (max-width: 899px) {
	.v19-header .wp-block-navigation__responsive-container:not(.is-menu-open) {
		display: none;
	}

	.v19-header .wp-block-navigation__responsive-container-open:not(.always-shown) {
		display: flex;
	}

	.v19-header__phone { display: none; }

	.v19-header .wp-block-buttons .wp-block-button__link {
		padding: 11px 15px;
		font-size: 13px;
	}
}

/* Bouton hamburger : carré bordé, trois filets fins */
.v19-header .wp-block-navigation__responsive-container-open {
	width: 46px;
	height: 46px;
	min-width: 46px;
	border: 1px solid var(--v19-divider);
	border-radius: var(--wp--custom--radius--md);
	align-items: center;
	justify-content: center;
	color: var(--v19-accent);
}

.v19-header .wp-block-navigation__responsive-container-open svg,
.v19-header .wp-block-navigation__responsive-container-close svg {
	width: 22px;
	height: 22px;
	fill: currentColor;
}

.v19-header .wp-block-navigation__responsive-container.is-menu-open {
	background: var(--wp--preset--color--base);
	padding: clamp(24px, 6vw, 48px) var(--wp--custom--gutter);
}

.v19-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
	padding-top: clamp(24px, 6vw, 40px);
}

.v19-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	font-size: 19px;
	padding: 15px 0;
	width: 100%;
	border-bottom: 1px solid var(--v19-divider);
}

.v19-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container {
	gap: 0;
	width: 100%;
	align-items: flex-start;
	justify-content: flex-start;
}

/* Le panneau mobile aligne les entrées à gauche, comme le design d'origine */
.v19-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,
.v19-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation {
	width: 100%;
	align-items: flex-start;
	justify-content: flex-start;
}

.v19-header .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item {
	width: 100%;
}

/* ---------------------------------------------------------------------------
   4. Héros et bandeaux de titre
   ------------------------------------------------------------------------ */

.v19-hero {
	min-height: clamp(520px, 64vw, 740px);
}

/* Avec une position de contenu personnalisée (ici « en bas à gauche »), le cœur
   de WordPress passe le conteneur interne de la bannière en « width:auto » : il
   se réduit à son contenu et sort de l'axe. On lui rend la colonne du site et
   les mêmes gouttières que les autres sections. */
.wp-block-cover.alignfull {
	padding-inline: var(--v19-gutter);
}

/* La classe est répétée pour atteindre la spécificité de la règle du cœur de
   WordPress qui impose « width:auto » (même technique que le cœur lui-même). */
.wp-block-cover.alignfull.has-custom-content-position.has-custom-content-position > .wp-block-cover__inner-container,
.wp-block-cover.alignfull > .wp-block-cover__inner-container {
	width: 100%;
	max-width: var(--v19-content);
	margin-inline: auto;
}

.v19-hero .wp-block-cover__image-background {
	filter: var(--v19-grade);
}

.v19-hero h1,
.v19-pagehead h1 {
	text-wrap: balance;
}

/* Bandeau de titre bleu nuit (Nos offres, Contact, CGV, pages légales) */
.v19-pagehead {
	background: var(--wp--preset--color--accent-night);
	color: var(--wp--preset--color--base);
}

.v19-pagehead h1,
.v19-pagehead h2 { color: var(--wp--preset--color--base); }

.v19-pagehead p { color: rgba(255, 255, 255, 0.84); }

.v19-pagehead .is-style-v19-kicker { color: var(--v19-gold); }

/* Boutons sur fond sombre */
.v19-on-dark .wp-block-button__link,
.wp-block-cover .v19-btn-gold .wp-block-button__link,
.v19-btn-gold .wp-block-button__link {
	background: var(--v19-gold);
	border-color: var(--v19-gold);
	color: #14243f;
	padding: 14px 22px;
	font-size: 15px;
}

.v19-btn-gold .wp-block-button__link:hover {
	background: var(--v19-gold-hover);
	border-color: var(--v19-gold-hover);
	color: #14243f;
}

.v19-btn-outline-light .wp-block-button__link {
	background: transparent;
	border: 1px solid rgba(255, 255, 255, 0.46);
	color: #fff;
	padding: 14px 22px;
	font-size: 15px;
}

.v19-btn-outline-light .wp-block-button__link:hover {
	background: rgba(255, 255, 255, 0.14);
	color: #fff;
}

.v19-btn-outline-gold .wp-block-button__link {
	background: transparent;
	border: 1px solid var(--v19-gold);
	color: var(--v19-gold);
}

.v19-btn-outline-gold .wp-block-button__link:hover {
	background: rgba(238, 159, 30, 0.14);
	color: var(--v19-gold);
}

.v19-btn-secondary .wp-block-button__link {
	background: transparent;
	border: 1px solid var(--v19-divider);
	color: var(--wp--preset--color--contrast);
}

.v19-btn-secondary .wp-block-button__link:hover {
	background: rgba(22, 32, 46, 0.06);
	color: var(--wp--preset--color--contrast);
}

/* ---------------------------------------------------------------------------
   5. Cartes destination
   ------------------------------------------------------------------------ */

.v19-card {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--v19-divider);
	border-radius: var(--wp--custom--radius--md);
	overflow: hidden;
	background: transparent;
	height: 100%;
}

.v19-card > .wp-block-image {
	margin: 0;
}

.v19-card > .wp-block-image img {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	display: block;
	border-bottom: 1px solid var(--v19-divider);
}

.v19-card__body {
	padding: clamp(16px, 1.8vw, 24px);
	display: flex;
	flex-direction: column;
	flex: 1;
}

.v19-card__body > * { margin: 0; }
.v19-card__body > .is-style-v19-kicker { margin-bottom: 8px; }
.v19-card__body > h3 { margin-bottom: 12px; }
.v19-card__body > p:not(.is-style-v19-kicker) { margin-bottom: 18px; }

.v19-card__body .wp-block-buttons {
	margin-top: auto;
	width: 100%;
}

.v19-card__body .wp-block-button,
.v19-card__body .wp-block-button__link {
	width: 100%;
}

.v19-card .wp-block-heading {
	font-size: var(--wp--preset--font-size--title-m);
	line-height: 1.18;
}

/* ---------------------------------------------------------------------------
   6. Chiffres clés
   ------------------------------------------------------------------------ */

.v19-stats { gap: clamp(18px, 2.4vw, 36px); }
.v19-stats > * > * { margin: 0; }

/* ---------------------------------------------------------------------------
   7. Étapes numérotées (01 / titre / texte)
   ------------------------------------------------------------------------ */

.v19-step {
	display: grid;
	grid-template-columns: minmax(0, 86px) minmax(0, 1fr);
	column-gap: clamp(14px, 2vw, 34px);
	row-gap: 10px;
	align-items: baseline;
	padding: clamp(20px, 2.4vw, 30px) 0;
	border-top: 1px solid var(--v19-divider);
}

.v19-step:last-of-type { border-bottom: 1px solid var(--v19-divider); }

.v19-step > * { margin: 0; }

.v19-step > p:last-child {
	grid-column: 2;
	min-width: 0;
	hyphens: auto;
	font-size: var(--wp--preset--font-size--body);
	line-height: 1.75;
	color: var(--wp--preset--color--soft);
	max-width: 62ch;
}

@media (max-width: 599px) {
	.v19-step { grid-template-columns: 1fr; }
	.v19-step > p:last-child { grid-column: 1; }
}

/* ---------------------------------------------------------------------------
   8. Articles de conditions générales
   ------------------------------------------------------------------------ */

.v19-legal-article {
	display: grid;
	grid-template-columns: minmax(min(100%, 220px), 1fr) minmax(0, 2fr);
	gap: clamp(14px, 2vw, 44px);
	align-items: start;
	padding: clamp(22px, 2.6vw, 34px) 0;
	border-top: 1px solid var(--v19-divider);
}

.v19-legal-article > * { margin: 0; min-width: 0; }

.v19-legal-article__head > * { margin: 0; }
.v19-legal-article__head .is-style-v19-step-number { margin-bottom: 8px; }

.v19-legal-article__head h2 {
	font-size: var(--wp--preset--font-size--title-s);
	line-height: 1.25;
}

.v19-legal-article__body > * { margin: 0 0 14px; }
.v19-legal-article__body > :last-child { margin-bottom: 0; }

.v19-legal-article__body p {
	hyphens: auto;
	line-height: 1.8;
	color: var(--wp--preset--color--soft);
	max-width: 76ch;
}

@media (max-width: 781px) {
	.v19-legal-article { grid-template-columns: 1fr; }
}

/* ---------------------------------------------------------------------------
   9. Barre d'ancres "Aller à"
   ------------------------------------------------------------------------ */

.v19-jumpbar-band {
	border-bottom: 1px solid var(--v19-divider);
}

.v19-jumpbar {
	font-size: var(--wp--preset--font-size--small);
}

.v19-jumpbar > * { margin: 0; }

.v19-jumpbar a {
	border-bottom: 1px solid var(--v19-gold);
	padding-bottom: 2px;
}

.v19-anchor { scroll-margin-top: 110px; }

/* ---------------------------------------------------------------------------
   10. En-tête de section (titre + lien aligné à droite)
   ------------------------------------------------------------------------ */

.v19-section-head {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	justify-content: space-between;
	gap: 14px;
}

.v19-section-head > * { margin: 0; }

/* ---------------------------------------------------------------------------
   11. Tableaux
   ------------------------------------------------------------------------ */

.wp-block-table table {
	width: 100%;
	border-collapse: collapse;
}

.wp-block-table thead,
.wp-block-table tfoot {
	border: 0;
}

.wp-block-table th,
.wp-block-table td {
	border: 0;
	border-bottom: 1px solid var(--v19-divider);
}

.wp-block-table th {
	text-align: left;
	font-size: var(--wp--preset--font-size--micro);
	letter-spacing: 0.08em;
	text-transform: uppercase;
	font-weight: 600;
	color: var(--wp--preset--color--muted);
	padding: 10px 0;
	border-bottom: 1px solid var(--v19-divider);
}

.wp-block-table td {
	padding: 10px 0;
	border-bottom: 1px solid var(--v19-divider);
}

.wp-block-table tr > :last-child { text-align: right; }

.wp-block-table tbody tr:hover { background: rgba(22, 32, 46, 0.03); }

/* ---------------------------------------------------------------------------
   12. Pied de page
   ------------------------------------------------------------------------ */

.v19-footer {
	border-top: 1px solid var(--v19-divider);
}

.v19-footer .wp-block-site-logo img {
	height: 54px;
	width: auto;
	max-width: none;
}

.v19-footer .wp-block-navigation {
	gap: 9px;
	font-size: var(--wp--preset--font-size--medium);
}

.v19-footer .wp-block-navigation .wp-block-navigation-item__content {
	color: var(--wp--preset--color--contrast);
}

.v19-footer .wp-block-navigation .wp-block-navigation-item__content:hover {
	color: var(--v19-accent);
}

.v19-footer__bottom {
	border-top: 1px solid var(--v19-divider);
}

.v19-footer__bottom p { margin: 0; }

.v19-footer .wp-block-list {
	list-style: none;
	padding-left: 0;
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: 9px;
	font-size: var(--wp--preset--font-size--medium);
	color: var(--wp--preset--color--soft);
}

/* ---------------------------------------------------------------------------
   13. Bandeau défilant (bloc v19/marquee)
   ------------------------------------------------------------------------ */

.wp-block-v19-marquee {
	overflow: hidden;
	--v19-marquee-gap: clamp(26px, 3.4vw, 52px);
	--v19-marquee-speed: 52s;
}

.v19-marquee__viewport {
	-webkit-mask-image: linear-gradient(to right, transparent, #000 8%, #000 92%, transparent);
	mask-image: linear-gradient(to right, transparent, #000 8%, #000 92%, transparent);
}

.v19-marquee__track {
	display: flex;
	width: max-content;
	animation: v19-roll var(--v19-marquee-speed) linear infinite;
}

.v19-marquee__seq {
	display: flex;
	align-items: center;
	gap: var(--v19-marquee-gap);
	padding-right: var(--v19-marquee-gap);
}

.v19-marquee__item {
	flex: none;
	display: flex;
	align-items: center;
}

.v19-marquee__item > * { margin: 0; }

.v19-marquee__item p {
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	font-size: clamp(18px, 2vw, 25px);
	letter-spacing: 0.04em;
	white-space: nowrap;
	color: var(--wp--preset--color--accent-dark);
	margin: 0;
}

.wp-block-v19-marquee .v19-marquee__item img {
	display: block;
	width: auto;
	height: clamp(44px, 4.8vw, 66px);
	max-width: none;
	object-fit: contain;
}

.v19-marquee__item figure { margin: 0; }

.v19-marquee__dot {
	flex: none;
	width: 5px;
	height: 5px;
	border-radius: 50%;
	background: var(--v19-gold);
}

.wp-block-v19-marquee.is-style-logos {
	--v19-marquee-gap: clamp(30px, 4vw, 64px);
}

.wp-block-v19-marquee.is-style-logos .v19-marquee__dot {
	background: var(--wp--preset--color--accent-line);
}

@keyframes v19-roll {
	from { transform: translateX(0); }
	to { transform: translateX(-50%); }
}

@media (prefers-reduced-motion: reduce) {
	.v19-marquee__track { animation: none; }
	.v19-marquee__viewport { overflow-x: auto; }
}

/* Rendu dans l'éditeur : liste simple, sans animation */
.editor-styles-wrapper .wp-block-v19-marquee .block-editor-block-list__layout {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--v19-marquee-gap);
}

/* ---------------------------------------------------------------------------
   14. Avis clients (blocs v19/testimonials et v19/testimonial)
   ------------------------------------------------------------------------ */

.wp-block-v19-testimonials {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
	gap: clamp(20px, 3vw, 56px);
	align-items: start;
	padding: clamp(24px, 3vw, 44px) 0;
	border-top: 1px solid var(--v19-divider);
	border-bottom: 1px solid var(--v19-divider);
}

.v19-testimonials__stage {
	grid-column: span 2;
	min-width: 0;
}

@media (max-width: 781px) {
	.v19-testimonials__stage { grid-column: span 1; }
}

.wp-block-v19-testimonial {
	margin: 0;
}

.wp-block-v19-testimonial[hidden] { display: none; }

.v19-testimonial__stars {
	font-size: var(--wp--preset--font-size--body);
	letter-spacing: 0.28em;
	color: var(--v19-gold);
	margin: 0 0 18px;
}

.v19-testimonial__quote {
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 500;
	font-size: clamp(21px, 2.6vw, 32px);
	line-height: 1.32;
	margin: 0;
	text-wrap: pretty;
	border: 0;
	padding: 0;
}

.v19-testimonial__author {
	font-size: var(--wp--preset--font-size--small);
	color: var(--wp--preset--color--muted);
	margin: 22px 0 0;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

.v19-testimonials__controls {
	display: flex;
	flex-direction: column;
	gap: 18px;
	min-width: 0;
}

.v19-testimonials__counter {
	font-size: var(--wp--preset--font-size--tiny);
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--wp--preset--color--muted);
	margin: 0;
}

.v19-testimonials__arrows {
	display: flex;
	gap: 10px;
}

.v19-testimonials__arrow {
	min-width: 46px;
	min-height: 46px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 20px;
	line-height: 1;
	cursor: pointer;
	background: transparent;
	color: var(--wp--preset--color--contrast);
	border: 1px solid var(--v19-divider);
	border-radius: var(--wp--custom--radius--md);
}

.v19-testimonials__arrow:hover { background: rgba(22, 32, 46, 0.06); }

.v19-testimonials__dots {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
}

.v19-testimonials__dot {
	width: 34px;
	height: 34px;
	padding: 0;
	border: none;
	background: transparent;
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
}

.v19-testimonials__dot span {
	width: 100%;
	height: 2px;
	display: block;
	background: var(--wp--preset--color--accent-line);
}

.v19-testimonials__dot[aria-current="true"] span { background: var(--v19-gold); }

.v19-testimonials__note {
	font-size: var(--wp--preset--font-size--tiny);
	line-height: 1.7;
	color: var(--wp--preset--color--muted);
	margin: 0;
	font-style: italic;
}

/* Dans l'éditeur, tous les avis restent visibles et empilés */
.editor-styles-wrapper .wp-block-v19-testimonial + .wp-block-v19-testimonial {
	margin-top: clamp(24px, 3vw, 40px);
	padding-top: clamp(24px, 3vw, 40px);
	border-top: 1px dashed var(--v19-divider);
}

/* ---------------------------------------------------------------------------
   15. Formulaire de devis (blocs v19/quote-form et v19/form-field)
   ------------------------------------------------------------------------ */

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

.v19-field { min-width: 0; }
.v19-field--full { grid-column: 1 / -1; }

.v19-field label {
	display: block;
	font-size: var(--wp--preset--font-size--tiny);
	margin-bottom: 5px;
	color: color-mix(in srgb, var(--wp--preset--color--contrast) 70%, transparent);
}

.v19-field .v19-required { color: var(--v19-gold); }

.v19-input {
	box-sizing: border-box;
	width: 100%;
	min-height: 46px;
	padding: 10px 12px;
	font: inherit;
	font-size: var(--wp--preset--font-size--medium);
	color: var(--wp--preset--color--contrast);
	caret-color: var(--v19-accent);
	background: transparent;
	border: 1px solid var(--v19-divider);
	border-radius: var(--wp--custom--radius--md);
}

.v19-input:hover { border-color: color-mix(in srgb, var(--wp--preset--color--contrast) 45%, transparent); }
.v19-input:focus-visible { border-color: var(--v19-accent); outline-offset: 0; }

textarea.v19-input { min-height: 112px; resize: vertical; }
select.v19-input { appearance: auto; }

.v19-form__actions {
	grid-column: 1 / -1;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 18px;
}

.v19-form__submit {
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--medium);
	line-height: 1.2;
	color: var(--v19-accent);
	background: transparent;
	border: 1px solid var(--v19-accent);
	border-radius: var(--wp--custom--radius--md);
	padding: 12px 18px;
}

.v19-form__submit:hover { background: rgba(30, 60, 120, 0.09); }

.v19-form__note {
	font-size: var(--wp--preset--font-size--tiny);
	color: var(--wp--preset--color--muted);
	max-width: 34ch;
	margin: 0;
}

.v19-form__feedback {
	grid-column: 1 / -1;
	font-size: var(--wp--preset--font-size--medium);
	color: var(--wp--preset--color--accent-dark);
	border-left: 2px solid var(--v19-gold);
	padding-left: 14px;
	margin: 0;
}

.v19-form__feedback--error { color: #8a2b2b; border-left-color: #8a2b2b; }

.v19-form__hp {
	position: absolute !important;
	left: -9999px;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

/* ---------------------------------------------------------------------------
   16. Grilles natives — comportement des colonnes
   ------------------------------------------------------------------------ */

.wp-block-group.is-layout-grid > .wp-block-group,
.wp-block-group.is-layout-grid > .wp-block-column {
	min-width: 0;
}

/* Empêche les images des cartes de déborder d'une grille
   (la hauteur est gérée par wp-block-library : ne pas la redéfinir ici,
   sinon les logos du bandeau défilant reprennent leur taille naturelle). */
.wp-block-image img { max-width: 100%; }

/* ---------------------------------------------------------------------------
   17. Impression
   ------------------------------------------------------------------------ */

@media print {
	.v19-header,
	.v19-footer,
	.wp-block-v19-marquee,
	.v19-testimonials__controls { display: none !important; }

	body { background: #fff; }
}

/* ---------------------------------------------------------------------------
   18. Compléments
   ------------------------------------------------------------------------ */

/* Liste sans puce (colonnes du pied de page, horaires) */
.is-style-v19-plain {
	list-style: none;
	padding-left: 0;
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: 9px;
}

.is-style-v19-plain li { margin: 0; }

/* Pause du défilement au survol */
.v19-marquee--pause:hover .v19-marquee__track,
.v19-marquee--pause:focus-within .v19-marquee__track {
	animation-play-state: paused;
}

/* Bloc marqué « Masquer sur le site » — visible seulement dans l'éditeur */
.v19-is-hidden {
	opacity: 0.45;
	outline: 1px dashed var(--v19-gold);
	outline-offset: 4px;
}

/* Le formulaire dans l'éditeur reprend la grille du site */
.editor-styles-wrapper .v19-form .block-editor-block-list__layout {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 165px), 1fr));
	gap: 18px;
}

.editor-styles-wrapper .v19-field--full { grid-column: 1 / -1; }

/* ---------------------------------------------------------------------------
   19. Utilitaires de mesure et de grille
   ------------------------------------------------------------------------ */

/* Longueur de ligne — reprend les max-width du design d'origine.
   La mise en page « contenu contraint » de WordPress centre les enfants
   (margin auto) : on rétablit l'alignement à gauche du design. */
/* WordPress recentre (margin-inline:auto !important) tout enfant d'un conteneur
   « contenu contraint ». Les blocs volontairement plus courts que la colonne —
   grands titres, chapôs, filets — doivent au contraire rester sur l'axe. Une
   seule règle, dérivée du même jeton, vaut pour toutes les sections et toutes
   les largeurs d'écran. */
.v19-measure-hero,
.v19-measure-h1,
.v19-measure-title,
.v19-measure-title-l,
.v19-measure-lead,
.v19-measure-text,
.v19-measure-legal,
.wp-block-separator.is-style-v19-gold {
	margin-inline: var(--v19-axis-offset) auto !important;
}

.v19-measure-hero { max-width: 22ch; }
.v19-measure-h1 { max-width: 17ch; }
.v19-measure-title { max-width: 24ch; }
.v19-measure-title-l { max-width: 26ch; }
.v19-measure-lead { max-width: 56ch; }
.v19-measure-text { max-width: 62ch; }
.v19-measure-legal { max-width: 76ch; }

/* Grilles « auto-fit » : les colonnes se répartissent tout l'espace, comme
   dans le design d'origine (WordPress génère « auto-fill » par défaut). */
.wp-block-group.v19-cols-180.is-layout-grid { grid-template-columns: repeat(auto-fit, minmax(min(180px, 100%), 1fr)); }
.wp-block-group.v19-cols-210.is-layout-grid { grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr)); }
.wp-block-group.v19-cols-215.is-layout-grid { grid-template-columns: repeat(auto-fit, minmax(min(215px, 100%), 1fr)); }
.wp-block-group.v19-cols-230.is-layout-grid { grid-template-columns: repeat(auto-fit, minmax(min(230px, 100%), 1fr)); }
.wp-block-group.v19-cols-270.is-layout-grid { grid-template-columns: repeat(auto-fit, minmax(min(270px, 100%), 1fr)); }
.wp-block-group.v19-cols-278.is-layout-grid { grid-template-columns: repeat(auto-fit, minmax(min(278px, 100%), 1fr)); }
.wp-block-group.v19-cols-300.is-layout-grid,
.wp-block-post-template.v19-cols-300.is-layout-grid { grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); }

/* En-tête et pied de page : mêmes gouttières et même axe que les sections.
   La formule est l'équivalent exact du centrage « contenu contraint » de
   WordPress, appliqué à des parties de modèle pleine largeur. */
.v19-header__bar,
.v19-footer__inner,
.v19-footer__bottom-inner {
	padding-left: max(var(--v19-gutter), var(--v19-axis-offset));
	padding-right: max(var(--v19-gutter), var(--v19-axis-offset));
}

.v19-header .wp-block-site-logo,
.v19-footer .wp-block-site-logo { width: auto !important; }

/* Ordre des éléments d'en-tête sur mobile : bouton devis, puis menu */
@media (max-width: 899px) {
	.v19-header .wp-block-navigation { order: 3; margin-left: 8px; }
	.v19-header__cta { order: 2; margin-left: auto; }
}

/* ---------------------------------------------------------------------------
   20. Questions fréquentes (bloc natif « Détails »)
   ------------------------------------------------------------------------ */

.v19-faq-item {
	border-top: 1px solid var(--v19-divider);
	padding: clamp(16px, 2vw, 24px) 0;
}

.v19-faq-item:last-of-type { border-bottom: 1px solid var(--v19-divider); }

.v19-faq-item > summary {
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--title-s);
	line-height: 1.3;
	cursor: pointer;
	list-style: none;
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 16px;
}

.v19-faq-item > summary::-webkit-details-marker { display: none; }

.v19-faq-item > summary::after {
	content: "+";
	flex: none;
	font-weight: 400;
	color: var(--v19-gold);
	font-size: 1.2em;
	line-height: 1;
}

.v19-faq-item[open] > summary::after { content: "–"; }

.v19-faq-item > :not(summary) {
	margin-top: 14px;
	line-height: 1.8;
}

/* ---------------------------------------------------------------------------
   21. Appel à l'action WhatsApp (bas de l'accueil, entrée du pied de page)
   ------------------------------------------------------------------------ */

.v19-whatsapp-band {
	border-top: 1px solid var(--v19-divider);
	background: var(--wp--preset--color--surface);
}

.v19-whatsapp-band__inner {
	max-width: var(--v19-content);
	margin-inline: auto;
	padding: clamp(20px, 2.6vw, 34px) var(--v19-gutter);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 14px 24px;
}

.v19-whatsapp-band__icon {
	flex: none;
	display: flex;
}

.v19-whatsapp-band__icon svg {
	width: 30px;
	height: 30px;
	fill: #25d366;
}

.v19-whatsapp-band__text {
	margin: 0;
	font-size: var(--wp--preset--font-size--body);
	color: var(--wp--preset--color--contrast);
	text-align: center;
}

.v19-whatsapp-band__button {
	flex: none;
	display: inline-flex;
	align-items: center;
	white-space: nowrap;
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
	font-size: var(--wp--preset--font-size--medium);
	color: #ffffff;
	background: #25d366;
	border-radius: var(--wp--custom--radius--md);
	padding: 12px 18px;
}

.v19-whatsapp-band__button:hover {
	background: #1ebe5a;
	color: #ffffff;
}

/* En dessous de 600 px, la bande empile icône, texte et bouton sur trois
   lignes : on resserre les espacements et les tailles pour qu'elle reste
   compacte plutôt que de prendre tout le haut de l'écran. */
@media (max-width: 600px) {
	.v19-whatsapp-band__inner {
		padding: 12px var(--v19-gutter);
		gap: 6px 14px;
	}

	.v19-whatsapp-band__icon svg {
		width: 20px;
		height: 20px;
	}

	.v19-whatsapp-band__text {
		font-size: var(--wp--preset--font-size--small);
	}

	.v19-whatsapp-band__button {
		padding: 8px 14px;
		font-size: var(--wp--preset--font-size--small);
	}
}

/* L'entrée WhatsApp du pied de page reprend le style de la liste qui
   l'accueille (voir .v19-footer .wp-block-list) : aucune règle propre
   nécessaire au-delà de sa position dans cette liste. */
