/**
 * vefmpro-frontend.css
 *
 * Styles du panier, des dons et du paiement — extrait de
 * vefm-frontend.css (VEFmusic gratuit) lors de la migration du système de
 * vente vers VEFmusic Pro. Même approche que le fichier d'origine : hérite
 * des variables CSS du thème actif, ne fixe que la mise en page et les
 * états d'interaction, jamais les couleurs de marque.
 */

/**
 * Retour Paul (16/09/2026) : les placeholders des champs Pro (adresse de
 * livraison, email sandbox...) doivent pouvoir passer à la ligne plutôt
 * que d'être tronqués. Scopé aux seuls champs VEFmusic (id/class préfixés
 * vefm-/vefmpro-) — jamais un sélecteur universel qui affecterait tous
 * les champs du site, thème et autres extensions compris.
 */
input[id^="vefm-"]::placeholder,
input[class*="vefm-"]::placeholder,
textarea[id^="vefm-"]::placeholder,
textarea[class*="vefm-"]::placeholder {
	white-space: wrap;
}

/* Point 1 suite — Divi 5 (demande Eric, 10/09/2026) : voir le même
   commentaire dans vefm-frontend.css (Free) — le contrôle natif "Rayon
   de bordure" de Divi 5 a besoin d'un overflow:hidden sur le wrapper du
   module pour produire un effet visuel réel. Les 7 modules Pro. */
.et_pb_module.vefmpro_divi_donate,
.et_pb_module.vefmpro_divi_billetterie,
.et_pb_module.vefmpro_divi_account,
.et_pb_module.vefmpro_divi_printful_list,
.et_pb_module.vefmpro_divi_cart,
.et_pb_module.vefmpro_divi_preorder,
.et_pb_module.vefmpro_divi_merch_list {
	overflow: hidden;
}

.vefm-cart,
.vefm-donate {
	font-family: var( --vefm-font-family, inherit );
	color: inherit;
}

/* Panier                                                            */
/* ---------------------------------------------------------------- */

/* Panier — pastille flex Divi : sans ce width:100%, l’enveloppe
   .vefmpro_divi_cart générée par Divi (flex-item, flex-grow:0) se
   réduit à la taille de son contenu plutôt que de remplir sa colonne,
   rendant le réglage « Max width » ci-dessous invisible en pratique
   (confirmé en direct, retour Eric 15/09/2026 — « le panier ne se met
   pas pleine largeur »). Gutenberg/Elementor n’ont pas ce piège
   (conteneur de bloc classique, pas un flex-item Divi) — correctif
   Divi uniquement, sans effet ailleurs. */
.vefmpro_divi_cart {
	width: 100%;
}

.vefm-cart {
	width: auto;
	max-width: var( --vefm-cart-max-width, 480px );
	padding: clamp(8px, 2vw, 24px);
	/* Point 1 (demande Eric, 10/09/2026) : --vefm-block-radius (nouveau,
	   4 coins indépendants) prend le pas sur --vefm-cart-radius
	   (ancien réglage uniforme, INCHANGÉ, toujours actif si le nouveau
	   n'est pas utilisé) — jamais une régression du défaut 14px déjà
	   en production. */
	border-radius: var( --vefm-block-radius, var( --vefm-cart-radius, 14px ) );
	background: var( --vefm-cart-bg, var( --vefm-track-bg, rgba(0, 0, 0, 0.14) ) );
	color: var( --vefm-cart-text, inherit );
	border: 1px solid rgba(0, 0, 0, 0.12);
}

.vefm-cart h3 {
	margin: 0 0 16px;
	display: flex;
	align-items: center;
	gap: 8px;
}

.vefm-cart h3::before {
	content: '🛒';
	font-size: 0.9em;
}

.vefm-cart-lines {
	list-style: none;
	margin: 0 0 14px;
	padding: 0;
}

.vefm-cart-line {
	display: flex;
	align-items: center;
	justify-content: flex-end;
	flex-wrap: wrap;
	gap: 10px;
	padding: 10px 0;
	border-bottom: 1px solid rgba(0, 0, 0, 0.08);
	/* Point 1 suite (10/09/2026) : aucun arrondi n'existait avant sur
	   cette ligne (juste un séparateur) — repli à 0, sans régression. */
	border-radius: var( --vefm-content-radius, 0 );
}

.vefm-cart-line:last-child {
	border-bottom: none;
}

.vefm-cart-line-main {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
}

.vefm-cart-line-title {
	flex: 1 1 auto;
}

.vefm-cart-line-note {
	font-size: 0.78em;
	opacity: 0.6;
	font-style: italic;
}

.vefm-cart-line-price {
	opacity: 0.75;
	font-variant-numeric: tabular-nums;
}

.vefm-cart-remove {
	background: rgba(0, 0, 0, 0.06);
	border: none;
	border-radius: 50%;
	width: 22px;
	height: 22px;
	cursor: pointer;
	font-size: 1em;
	line-height: 1;
	color: inherit;
	opacity: 0.6;
	flex: 0 0 auto;
	transition: opacity 0.15s ease, background 0.15s ease;
}

.vefm-cart-remove:hover {
	opacity: 1;
	background: rgba(0, 0, 0, 0.12);
}

.vefm-cart-empty {
	opacity: 0.65;
	font-style: italic;
	padding: 16px 0;
	text-align: center;
}

.vefm-cart-discount {
	text-align: right;
	opacity: 0.7;
	font-size: 0.9em;
	margin: 0 0 4px;
}

.vefm-cart-total {
	display: flex;
	justify-content: space-between;
	font-size: 1.15em;
	border-top: 2px solid rgba(0, 0, 0, 0.15);
	padding-top: 12px;
	margin: 0;
}

.vefm-cart-promo-applied {
	display: flex;
	justify-content: space-between;
	align-items: center;
	text-align: right;
	opacity: 0.85;
	font-size: 0.9em;
	margin: 0 0 4px;
	color: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
}

.vefm-cart-promo-applied .vefm-cart-promo-remove {
	border: none;
	background: none;
	text-decoration: underline;
	cursor: pointer;
	font-size: 0.85em;
	opacity: 0.7;
	padding: 0;
	color: inherit;
}

.vefm-cart-promo-form {
	display: flex;
	justify-content: center;
	gap: 6px;
	margin-top: 10px;
	flex-wrap: wrap;
}

.vefm-cart-promo-input {
	flex: 1;
	min-width: 120px;
	padding: 6px 10px;
	border-radius: 4px;
	border: 1px solid rgba(0, 0, 0, 0.2);
}

.vefm-cart-promo-apply {
	border: none;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: #fff;
	border-radius: 4px;
	padding: 6px 14px;
	cursor: pointer;
}

.vefm-cart-promo-error {
	flex-basis: 100%;
	color: #d63638;
	font-size: 0.85em;
}

.vefm-cart-checkout {
	margin-top: 20px;
	padding-top: 20px;
	border-top: 1px dashed rgba(0, 0, 0, 0.15);
}

.vefm-cart-consent {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	margin: 0 0 18px;
	font-size: 0.85em;
	line-height: 1.5;
	opacity: 0.85;
}

.vefm-cart-consent input {
	margin-top: 3px;
	flex: 0 0 auto;
}

#vefm-paypal-buttons {
	margin-bottom: 10px;
}

.vefm-stripe-checkout {
	display: block;
	width: 100%;
	padding: 12px;
	border: none;
	border-radius: 8px;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #635bff ) );
	color: var( --vefm-button-text-color, var( --wp--preset--color--background, #fff ) );
	font-family: var( --vefm-font-family, inherit );
	cursor: pointer;
	font-size: 1em;
	font-weight: 600;
	transition: opacity 0.15s ease;
}

.vefm-stripe-checkout:hover {
	opacity: 0.9;
}

.vefm-cart-confirmation {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 12px;
	text-align: center;
	padding: 32px 16px;
	color: #1e7e34;
}

.vefm-cart-confirmation-icon {
	width: 48px;
	height: 48px;
	color: #1e7e34;
}

.vefm-cart-confirmation-text {
	margin: 0;
	font-size: 1.15em;
	font-weight: 600;
	line-height: 1.4;
}

.vefm-cart-error {
	color: #dc3232;
	font-size: 0.9em;
}

/* Paiement sandbox (mode Test uniquement) — délibérément distinct
   visuellement des vrais moyens de paiement (bordure en pointillés, ton
   ambre) pour qu'il n'y ait aucune ambiguïté sur sa nature. */

.vefm-cart-sandbox {
	margin-top: 14px;
	padding: 12px;
	border: 1px dashed #d4a72c;
	border-radius: 8px;
	background: rgba(212, 167, 44, 0.08);
}

.vefm-cart-sandbox-label {
	margin: 0 0 8px;
	font-size: 0.78rem;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.03em;
	color: #a3791f;
}

.vefm-sandbox-email {
	display: flex;
	width: 100%;
	box-sizing: border-box;
	padding: 8px 10px;
	margin-bottom: 8px;
	border: 1px solid rgba(0, 0, 0, 0.15);
	border-radius: 4px;
}

.vefm-sandbox-checkout {
	display: flex;
	justify-content: center;
	width: 100%;
	padding: 10px;
	border: 1px dashed #a3791f;
	border-radius: 4px;
	background: transparent;
	color: #a3791f;
	font-family: var( --vefm-font-family, inherit );
	cursor: pointer;
	font-size: 0.9rem;
	font-weight: 600;
	transition: background 0.15s ease;
}

.vefm-sandbox-checkout:hover {
	background: rgba(212, 167, 44, 0.12);
}

.vefm-sandbox-checkout:disabled {
	opacity: 0.6;
	cursor: wait;
}

/* ---------------------------------------------------------------- */
/* Bloc Don                                                           */
/* ---------------------------------------------------------------- */

/* Même piège que .vefmpro_divi_cart plus haut — voir son commentaire. */
.vefmpro_divi_donate {
	width: 100%;
}

.vefm-donate {
	width: 100%;
	max-width: var( --vefm-donate-max-width, 400px );
	padding: 24px;
	/* Point 1 (demande Eric, 10/09/2026) : même repli imbriqué que
	   .vefm-cart ci-dessus (--vefm-cart-radius partagé entre les deux
	   blocs de longue date) — défaut 14px inchangé. */
	border-radius: var( --vefm-block-radius, var( --vefm-cart-radius, 14px ) );
	background: var( --vefm-cart-bg, var( --vefm-track-bg, rgba(0, 0, 0, 0.14) ) );
	color: var( --vefm-cart-text, inherit );
	border: 1px solid rgba(0, 0, 0, 0.12);
	text-align: center;
}

.vefm-donate-intro {
	margin: 0 0 16px;
	opacity: 0.85;
}

.vefm-donate-amounts {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 8px;
	margin-bottom: 12px;
}

.vefm-donate-amount {
	padding: 8px 18px;
	border: 1px solid rgba(0, 0, 0, 0.15);
	/* Point 1 suite (10/09/2026) : 20px en dur remplacé par le nouveau
	   réglage 4 coins, repli à 20px si non réglé (défaut inchangé). */
	border-radius: var( --vefm-content-radius, 20px );
	background: transparent;
	color: inherit;
	cursor: pointer;
	font-size: 0.95em;
	transition: background 0.15s ease, border-color 0.15s ease;
}

.vefm-donate-amount:hover {
	background: rgba(0, 0, 0, 0.05);
}

.vefm-donate-amount.is-selected {
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --wp--preset--color--background, #fff );
	border-color: transparent;
}

.vefm-donate-custom {
	margin-bottom: 16px;
}

.vefm-donate-custom-amount {
	width: 100%;
	box-sizing: border-box;
	padding: 8px 12px;
	border: 1px solid rgba(0, 0, 0, 0.15);
	border-radius: 8px;
	text-align: center;
	font-size: 0.95em;
}

.vefm-donate-submit {
	display: block;
	width: 100%;
	padding: 12px;
	border: none;
	border-radius: 8px;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, var( --wp--preset--color--background, #fff ) );
	font-family: var( --vefm-font-family, inherit );
	cursor: pointer;
	font-size: 1em;
	font-weight: 600;
	transition: opacity 0.15s ease;
}

.vefm-donate-submit:hover:not(:disabled) {
	opacity: 0.9;
}

.vefm-donate-submit:disabled {
	opacity: 0.4;
	cursor: not-allowed;
}

.vefm-donate-error {
	color: #dc3232;
	font-size: 0.9em;
	margin: 10px 0 0;
}

/* Panier — merch (quantité, port, livraison)                       */
/* ------------------------------------------------------------------ */

.vefm-cart-line-qty-controls {
	display: flex;
	align-items: center;
	gap: 4px;
}

@media ( max-width: 480px ) {
	.vefm-cart-line-qty-controls {
		justify-content: center;
	}
}

.vefm-cart-qty-increase,
.vefm-cart-qty-decrease {
	width: 22px;
	height: 22px;
	line-height: 20px;
	padding: 0;
	border: 1px solid rgba(0, 0, 0, 0.2);
	background: #fff;
	border-radius: 4px;
	cursor: pointer;
	font-size: 14px;
}

.vefm-cart-line-qty {
	opacity: 0.85;
	font-size: 0.9em;
	min-width: 16px;
	text-align: center;
	display: inline-block;
}

.vefm-cart-physical-returns-notice {
	font-size: 0.85em;
	opacity: 0.75;
	margin: 10px 0;
}

.vefm-cart-shipping {
	text-align: right;
	opacity: 0.8;
	font-size: 0.9em;
	margin: 0 0 4px;
}

.vefm-cart-shipping-form {
	border: 1px solid rgba(0, 0, 0, 0.15);
	border-radius: 6px;
	padding: 12px;
	margin-bottom: 14px;
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.vefm-cart-shipping-form legend {
	font-weight: 600;
	padding: 0 4px;
}

.vefm-cart-shipping-form input,
.vefm-cart-shipping-form select {
	padding: 6px 10px;
	border-radius: 4px;
	border: 1px solid rgba(0, 0, 0, 0.2);
}

.vefm-cart-shipping-blocked {
	color: #d63638;
	font-size: 0.9em;
	margin: 0;
}

/* Même piège générique que .vefmpro_divi_cart (voir son commentaire,
   section Panier) — masqué ici tant que le contenu (grille de
   produits) est naturellement large, mais réel dès peu de produits ou
   1 seule colonne réglée. Corrigé par précaution, cohérence avec les
   autres modules Pro (vérification croisée, retour Eric 15/09/2026). */
.vefmpro_divi_merch_list {
	width: 100%;
}

/* Boutique (Merch)                                                  */
/* ------------------------------------------------------------------ */

.vefmpro-merch-list {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 24px;
	font-family: var( --vefm-font-family, inherit );
	/* Point 1 (demande Eric, 10/09/2026) : aucun réglage de ce type
	   n'existait avant sur ce bloc (le conteneur est une simple grille)
	   — repli à 0, sans régression. */
	border-radius: var( --vefm-block-radius, 0 );
}

/* Retour Paul (14/09/2026) : nombre de colonnes réglable (0 = auto,
   comportement ci-dessus inchangé). --vefmpro-merch-max-columns
   plafonne la valeur choisie selon la largeur d'écran (CSS dynamique,
   min() — méthodologie §6) plutôt qu'une valeur figée par colonne. */
.vefmpro-merch-list--fixed-columns {
	--vefmpro-merch-max-columns: 6;
	grid-template-columns: repeat( min( var( --vefmpro-merch-columns, 3 ), var( --vefmpro-merch-max-columns ) ), minmax( 0, 1fr ) );
}

@media ( max-width: 780px ) {
	.vefmpro-merch-list--fixed-columns {
		--vefmpro-merch-max-columns: 2;
	}
}

@media ( max-width: 480px ) {
	.vefmpro-merch-list--fixed-columns {
		--vefmpro-merch-max-columns: 1;
	}
}

.vefmpro-merch-item {
	display: flex;
	flex-direction: column;
	padding: clamp(8px, 2vw, 24px);
	border: 1px solid rgba(0, 0, 0, 0.1);
	/* Point 1 suite (10/09/2026) : 8px en dur remplacé, repli inchangé. */
	border-radius: var( --vefm-content-radius, 8px );
}

.vefmpro-merch-item-image img {
	width: 100%;
	height: auto;
	border-radius: 4px;
	margin-bottom: 10px;
}

.vefmpro-merch-item-title {
	margin: 0 0 6px;
	font-size: 1.1em;
	/* v2.14.0 (retour Eric) : jusqu'ici sans réglage dédié. */
	color: var( --vefm-merch-title-color, inherit );
}

.vefmpro-merch-item-desc {
	font-size: 0.9em;
	opacity: 0.8;
	flex-grow: 1;
}

.vefmpro-merch-item-price {
	font-weight: 600;
	font-size: 1.1em;
	margin: 10px 0;
	text-align: center;
}

.vefmpro-merch-item-add {
	display: flex;
	width: fit-content;
	margin: auto;
	gap: 8px;
}

.vefmpro-merch-qty {
	width: 60px;
	padding: 6px;
	border-radius: 4px;
	border: 1px solid rgba(0, 0, 0, 0.2);
	/* Retour Paul (16/09/2026) : quantité alignée dans le sélecteur. */
	text-align: center;
}

.vefmpro-merch-item-add .vefm-add-to-cart {
	flex: 0 1 auto;
	border: none;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, #fff );
	font-family: var( --vefm-font-family, inherit );
	border-radius: 4px;
	cursor: pointer;
	padding: 6px 12px;
}

.vefmpro-merch-item-outofstock {
	opacity: 0.6;
	font-style: italic;
}

/* Même piège générique que .vefmpro_divi_cart — voir son commentaire. */
.vefmpro_divi_printful_list {
	width: 100%;
}

/* Boutique Printful (print-on-demand)                               */
/* ------------------------------------------------------------------ */

.vefmpro-printful-list {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 24px;
	font-family: var( --vefm-font-family, inherit );
	/* Point 1 (demande Eric, 10/09/2026) : aucun réglage de ce type
	   n'existait avant sur ce bloc (le conteneur est une simple grille)
	   — repli à 0, sans régression. */
	border-radius: var( --vefm-block-radius, 0 );
}

.vefmpro-printful-item {
	border: 1px solid rgba(0, 0, 0, 0.1);
	/* Point 1 suite (10/09/2026) : --vefm-content-radius (nouveau, par
	   bloc) prend le pas sur --vefm-printful-radius (réglage GLOBAL
	   existant, VEFmusic > Pro — Style — gardé en repli, inchangé). */
	border-radius: var( --vefm-content-radius, var( --vefm-printful-radius, 8px ) );
	padding: 16px;
	display: flex;
	flex-direction: column;
	background: var( --vefm-printful-bg, transparent );
	color: var( --vefm-printful-text, inherit );
}

.vefmpro-printful-item-image img {
	width: 100%;
	height: auto;
	border-radius: 4px;
	margin-bottom: 10px;
}

.vefmpro-printful-item-title {
	margin: 0 0 6px;
	font-size: 1.1em;
	/* v2.14.0 (retour Eric) : jusqu'ici sans réglage dédié. */
	color: var( --vefm-printful-title-color, inherit );
}

.vefmpro-printful-item-desc {
	font-size: 0.9em;
	opacity: 0.8;
	flex-grow: 1;
}

.vefmpro-printful-item-variant-label {
	font-size: 0.85em;
	opacity: 0.7;
	margin: 4px 0;
}

.vefmpro-printful-variant-select {
	width: 100%;
	padding: 6px;
	border-radius: 4px;
	border: 1px solid rgba(0, 0, 0, 0.2);
	margin: 6px 0;
}

.vefmpro-printful-item-price {
	font-weight: 600;
	font-size: 1.1em;
	margin: 10px 0;
}

.vefmpro-printful-item-add {
	display: flex;
	gap: 8px;
}

.vefmpro-printful-qty {
	width: 60px;
	padding: 6px;
	border-radius: 4px;
	border: 1px solid rgba(0, 0, 0, 0.2);
}

.vefmpro-printful-item-add .vefm-add-to-cart {
	flex: 1;
	border: none;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, #fff );
	font-family: var( --vefm-font-family, inherit );
	border-radius: 4px;
	cursor: pointer;
	padding: 6px 12px;
}

/* Même piège générique que .vefmpro_divi_cart — voir son commentaire. */
.vefmpro_divi_billetterie {
	width: 100%;
}

/* Billetterie interne (v0.6.0) — même structure visuelle que la Boutique
   ci-dessus (grille de cartes), classes distinctes pour rester
   indépendante si l'une des deux évolue plus tard. */
.vefmpro-billetterie {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 24px;
	font-family: var( --vefm-font-family, inherit );
	/* Point 1 (demande Eric, 10/09/2026) : aucun réglage de ce type
	   n'existait avant sur ce bloc (le conteneur est une simple grille)
	   — repli à 0, sans régression. */
	border-radius: var( --vefm-block-radius, 0 );
}

.vefmpro-ticket-item {
	border: 1px solid rgba(0, 0, 0, 0.1);
	/* Point 1 suite (10/09/2026) : 8px en dur remplacé, repli inchangé. */
	border-radius: var( --vefm-content-radius, 8px );
	padding: clamp(8px, 2vw, 24px);
	display: flex;
	flex-direction: column;
}

.vefmpro-ticket-item-title {
	margin: 0 0 6px;
	font-size: 1.1em;
	/* v2.14.0 (retour Eric) : jusqu'ici sans réglage dédié. */
	color: var( --vefm-ticket-title-color, inherit );
}

.vefmpro-ticket-item-date,
.vefmpro-ticket-item-venue {
	font-size: 0.9em;
	opacity: 0.8;
	margin: 2px 0;
}

.vefmpro-venue-map {
	display: block;
	max-width: 100%;
	height: auto;
	border-radius: 6px;
	margin: 10px 0;
}

.vefmpro-ticket-item-remaining {
	font-size: 0.85em;
	opacity: 0.7;
	margin: 0 0 10px;
}

/* v2.11 (chantier zones/sièges) : .vefmpro-ticket-item-price retirée —
   un concert pouvant désormais avoir plusieurs tarifs (un par zone,
   voir ci-dessous), un prix unique en tête de carte n'a plus de sens. */

.vefmpro-ticket-zones {
	display: flex;
	flex-direction: column;
	gap: 14px;
	margin-top: 10px;
}

.vefmpro-ticket-zone {
	border-top: 1px solid rgba(0, 0, 0, 0.1);
	padding-top: 12px;
}

.vefmpro-ticket-zone-header {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	gap: 8px;
	margin-bottom: 4px;
}

.vefmpro-ticket-zone-name {
	font-weight: 600;
}

.vefmpro-ticket-zone-price {
	font-weight: 600;
	opacity: 0.85;
	white-space: nowrap;
}

.vefmpro-seat-picker {
	display: flex;
	flex-wrap: wrap;
	gap: 6px 14px;
	margin: 8px 0 12px;
	max-height: 160px;
	overflow-y: auto;
}

.vefmpro-seat-option {
	display: flex;
	align-items: center;
	gap: 6px;
	font-size: 0.9em;
	cursor: pointer;
}

.vefmpro-seat-checkbox {
	cursor: pointer;
}

.vefmpro-ticket-zone .vefm-add-to-cart {
	display: flex;
	width: 100%;
	border: none;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, #fff );
	font-family: var( --vefm-font-family, inherit );
	border-radius: 4px;
	cursor: pointer;
	padding: 6px 12px;
}

.vefmpro-ticket-reveal {
	/* v2.11.3 (bug réel trouvé en testant sur un thème à fond sombre,
	   07/09/2026) : bordure + texte forcés à la même couleur d'accent
	   (souvent sombre par défaut, #1e1e1e) sur fond transparent —
	   invisible dès que le fond de page lui-même est sombre (texte
	   sombre sur fond sombre). `currentColor`/`inherit` reprennent la
	   couleur de texte déjà correctement gérée par le thème à cet
	   endroit (le titre du concert juste au-dessus reste, lui, bien
	   lisible quel que soit le thème) — jamais une couleur d'accent
	   codée en dur pour un texte destiné à rester lisible sur fond
	   variable. */
	display: block;
	margin-top: 10px;
	border: 1px solid currentColor;
	background: transparent;
	color: inherit;
	border-radius: 4px;
	cursor: pointer;
	padding: 8px 18px;
	font-weight: 600;
	opacity: 0.85;
}

.vefmpro-ticket-reveal:hover {
	opacity: 1;
}

.vefmpro-ticket-details {
	margin-top: 14px;
}

.vefmpro-ticket-item-add {
	display: flex;
	gap: 8px;
	margin-top: auto;
}

.vefmpro-ticket-qty {
	width: 60px;
	padding: 6px;
	border-radius: 4px;
	border: 1px solid rgba(0, 0, 0, 0.2);
	text-align: center;
}

.vefmpro-ticket-item-add .vefm-add-to-cart {
	flex: 1;
	justify-content: center;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, #fff );
	font-family: var( --vefm-font-family, inherit );
	border: none;
	border-radius: 4px;
	cursor: pointer;
	padding: 6px 12px;
}

.vefmpro-ticket-item-soldout {
	opacity: 0.6;
	font-style: italic;
}

/* Même piège générique que .vefmpro_divi_cart — voir son commentaire. */
.vefmpro_divi_preorder {
	width: 100%;
}

/* Précommande                                                       */
/* ------------------------------------------------------------------ */

.vefm-preorder {
	max-width: var( --vefm-preorder-max-width, 480px );
	padding: clamp(8px, 2vw, 24px);
	/* Point 1 (demande Eric, 10/09/2026) : même principe de repli
	   imbriqué que .vefm-cart/.vefm-donate — défaut 14px inchangé. */
	border-radius: var( --vefm-block-radius, var( --vefm-preorder-radius, 14px ) );
	background: var( --vefm-preorder-bg, var( --vefm-track-bg, rgba(0, 0, 0, 0.14) ) );
	color: var( --vefm-preorder-text, inherit );
	border: 1px solid rgba(0, 0, 0, 0.12);
	font-family: var( --vefm-font-family, inherit );
}

.vefm-preorder-title {
	margin: 0 0 4px;
	/* v2.14.0 (retour Eric) : jusqu'ici sans réglage dédié — hérite du
	   --vefm-preorder-text du conteneur par défaut. */
	color: var( --vefm-preorder-title-color, inherit );
}

.vefm-preorder-price {
	margin: 0 0 16px;
	font-size: 1.2em;
	font-weight: 600;
}

.vefm-preorder-progress {
	height: 10px;
	border-radius: 999px;
	background: rgba(0, 0, 0, 0.12);
	overflow: hidden;
	margin-bottom: 8px;
}

.vefm-preorder-progress-bar {
	height: 100%;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	border-radius: 999px;
	transition: width 0.3s ease;
}

.vefm-preorder-stats {
	margin: 0 0 2px;
	font-weight: 600;
}

.vefm-preorder-meta {
	margin: 0 0 16px;
	opacity: 0.75;
	font-size: 0.9em;
}

.vefm-preorder-closed {
	padding: 12px;
	border-radius: 8px;
	background: rgba(0, 0, 0, 0.06);
}

.vefm-preorder-consent {
	display: flex;
	gap: 8px;
	align-items: flex-start;
	margin: 16px 0;
	font-size: 0.9em;
}

.vefm-preorder-shipping-form {
	display: flex;
	flex-direction: column;
	width: fit-content;
	margin: 16px auto;
	padding: 0;
	border: none;
	gap: 8px;
}

.vefm-preorder-shipping-form legend {
	font-weight: 600;
	margin-bottom: 4px;
	padding: 0;
}

.vefm-preorder-shipping-form input,
.vefm-preorder-shipping-form select {
	padding: 8px;
	border-radius: 6px;
	border: 1px solid rgba(0, 0, 0, 0.2);
}

.vefm-preorder-physical-returns-notice {
	font-size: 0.85em;
	opacity: 0.75;
	margin: 8px 0 16px;
}

.vefm-preorder-stripe-checkout,
.vefm-preorder-sandbox-checkout {
	display: flex;
	border: none;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, #fff );
	font-family: var( --vefm-font-family, inherit );
	border-radius: 4px;
	cursor: pointer;
	padding: 12px;
	font-weight: 600;
	margin: 8px auto;
}

.vefm-preorder-sandbox {
	display: flex;
	flex-direction: column;
	width: fit-content;
	padding-top: 16px;
	margin: 16px auto;
	border-top: 1px dashed rgba(0, 0, 0, 0.2);
}

.vefm-preorder-sandbox-label {
	font-size: 0.8em;
	opacity: 0.7;
	margin-bottom: 6px;
}

.vefm-preorder-sandbox-email {
	width: auto;
	padding: 8px;
	margin-bottom: 8px;
	border-radius: 6px;
	border: 1px solid rgba(0, 0, 0, 0.2);
}

.vefm-preorder-error {
	color: #b32d2e;
}
/* Mon compte (v1.0.13 — accès par lien magique par email)             */
/* ------------------------------------------------------------------ */

/* Même piège que .vefmpro_divi_cart plus haut — voir son commentaire. */
.vefmpro_divi_account {
	width: 100%;
}

.vefm-account {
	width: 100%;
	max-width: var( --vefm-account-max-width, 640px );
	font-family: var( --vefm-font-family, inherit );
	/* Point 1 (demande Eric, 10/09/2026) : aucun réglage de ce type
	   n'existait avant sur ce bloc — repli à 0, sans régression. */
	border-radius: var( --vefm-block-radius, 0 );
}

.vefm-account-intro {
	margin: 0 0 16px;
	opacity: 0.85;
}

.vefm-account-request-form {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: 10px;
}

.vefm-account-request-form label {
	flex-basis: 100%;
	font-weight: 600;
	font-size: 0.9em;
}

.vefm-account-request-form input[type="email"] {
	flex: 1 1 240px;
	padding: 10px;
	border-radius: 6px;
	border: 1px solid rgba(0, 0, 0, 0.2);
}

.vefm-account-request-form .vefm-button {
	flex: 0 0 auto;
	border: none;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, #fff );
	font-family: var( --vefm-font-family, inherit );
	border-radius: 6px;
	cursor: pointer;
	padding: 10px 18px;
	font-weight: 600;
}

.vefm-account-notice {
	padding: 10px 14px;
	border-radius: 6px;
	background: rgba(0, 0, 0, 0.06);
	margin-bottom: 16px;
}

.vefm-account-signed-in {
	margin: 0 0 16px;
	font-size: 0.9em;
	opacity: 0.8;
}

.vefm-account-orders {
	width: 100%;
	border-collapse: collapse;
}

.vefm-account-orders th,
.vefm-account-orders td {
	text-align: left;
	padding: 8px 10px;
	border-bottom: 1px solid rgba(0, 0, 0, 0.1);
	font-size: 0.9em;
	vertical-align: top;
}

.vefm-account-orders .vefm-button-small {
	border: none;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, #fff );
	font-family: var( --vefm-font-family, inherit );
	border-radius: 4px;
	cursor: pointer;
	padding: 6px 10px;
	font-size: 0.85em;
}

.vefm-preorder-gallery {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
	margin-bottom: 12px;
}

.vefm-preorder-gallery-image {
	width: 120px;
	height: 120px;
	object-fit: cover;
	border-radius: 8px;
}

.vefm-preorder-description {
	margin-bottom: 12px;
	opacity: 0.9;
}

.vefm-preorder-description p {
	margin: 0 0 8px;
}

.vefm-preorder-products {
	width: auto;
	border-collapse: collapse;
	margin-bottom: 12px;
}

.vefm-preorder-products td {
	padding: 8px 6px;
	border-bottom: 1px solid rgba(0, 0, 0, 0.1);
	vertical-align: middle;
}

.vefm-preorder-product-price {
	white-space: nowrap;
	opacity: 0.85;
}

.vefm-preorder-qty-input {
	width: 60px;
	padding: 6px;
	text-align: center;
	border-radius: 4px;
	border: 1px solid rgba(0, 0, 0, 0.2);
}

.vefm-preorder-total {
	font-weight: 700;
	font-size: 1.1em;
	margin: 0 0 16px;
	text-align: right;
}

.vefm-preorder-info-notice {
	font-size: 0.85em;
	opacity: 0.75;
	margin: 12px 0 16px;
}

.vefm-preorder-tiers {
	list-style: none;
	margin: 0 0 16px;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 6px;
}

.vefm-preorder-tier {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 6px 10px;
	/* Point 1 suite (10/09/2026) : 6px en dur remplacé, repli inchangé. */
	border-radius: var( --vefm-content-radius, 6px );
	background: rgba(0, 0, 0, 0.05);
	font-size: 0.9em;
	opacity: 0.7;
}

.vefm-preorder-tier--reached {
	opacity: 1;
	background: rgba(0, 0, 0, 0.08);
	font-weight: 600;
}

.vefm-preorder-tier-icon {
	width: 18px;
	color: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	font-weight: 700;
}

.vefm-preorder-tier-label {
	flex: 1;
}

.vefm-preorder-tier-amount {
	opacity: 0.8;
	font-size: 0.9em;
}

.vefm-preorder-product-tier-badge {
	display: block;
	font-size: 0.75em;
	opacity: 0.65;
	margin-top: 2px;
}

.vefm-preorder-tier-notice {
	font-size: 0.8em;
	opacity: 0.7;
	margin: 0 0 12px;
}

/* Bouton d'achat de billet intégré au bloc Concerts (Free, v1.0.21)   */
/* ------------------------------------------------------------------ */

.vefmpro-concert-buy {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
}

.vefmpro-concert-buy-price {
	font-weight: 700;
	opacity: 0.85;
}

.vefmpro-concert-buy-button {
	border: none;
	background: var( --vefm-accent, var( --wp--preset--color--primary, #1e1e1e ) );
	color: var( --vefm-button-text-color, #fff );
	font-family: var( --vefm-font-family, inherit );
	border-radius: 4px;
	cursor: pointer;
	padding: 8px 16px;
	font-weight: 600;
	min-width: 130px;
}

.vefmpro-concert-buy-button.vefm-added-to-cart {
	background: #2e7d32;
}

.vefmpro-concert-buy-remaining {
	font-size: 0.8em;
	opacity: 0.7;
}

.vefmpro-concert-soldout {
	opacity: 0.6;
	font-style: italic;
}

/* v2.11.7 (modale "Voir les billets", demande Eric 08/09/2026) — jamais
   une nouvelle fenêtre/onglet, juste ce bloc rendu visible par-dessus
   la page au clic (voir vefmpro-frontend.js). */
.vefmpro-ticket-modal-overlay {
	position: fixed;
	inset: 0;
	z-index: 100000;
	background: rgba( 0, 0, 0, 0.6 );
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 20px;
}

.vefmpro-ticket-modal-overlay[hidden] {
	display: none;
}

.vefmpro-ticket-modal {
	position: relative;
	background: var( --wp--preset--color--background, #fff );
	color: var( --wp--preset--color--foreground, #1e1e1e );
	border-radius: 8px;
	max-width: 560px;
	width: 100%;
	max-height: 90vh;
	overflow-y: auto;
	padding: 32px 24px 24px;
}

.vefmpro-ticket-modal-close {
	position: absolute;
	top: 10px;
	right: 14px;
	border: none;
	background: transparent;
	font-size: 1.6em;
	line-height: 1;
	cursor: pointer;
	color: inherit;
	opacity: 0.6;
}

.vefmpro-ticket-modal-close:hover {
	opacity: 1;
}

.vefmpro-ticket-modal-loading,
.vefmpro-ticket-modal-error {
	text-align: center;
	opacity: 0.7;
	padding: 24px 0;
}

/* Le contenu injecté (bloc Billetterie réutilisé) n'a plus besoin de
   son propre bouton "Réserver" repliable : la modale elle-même EST déjà
   l'action de dépli — il est masqué ici (le JS le "clique" pour
   dérouler le contenu avant même l'affichage, ce sélecteur couvre le
   cas où il resterait visible un instant). */
.vefmpro-ticket-modal .vefmpro-ticket-reveal {
	display: none;
}

body.vefmpro-modal-open {
	overflow: hidden;
}
