.cta-btn{
	/* --btn-scale : 1 = Grand (64px, taille d'origine). Le contrôle "Taille du
	   bouton" (onglet Style, réglable par breakpoint) change juste ce nombre —
	   toutes les dimensions ci-dessous sont calculées à partir de lui, donc le
	   bouton rapetisse toujours de façon proportionnelle et cohérente. */
	--btn-scale: 1;
	--h: calc(64px * var(--btn-scale));
	--icon: calc(64px * var(--btn-scale));
	/* --icon-visible : 1 = cercle affiché, 0 = caché. Indépendant de --btn-scale —
	   c'est le contrôle "Cercle-icône" (onglet Style, réglable par breakpoint,
	   lui aussi) qui fixe cette valeur pour chaque appareil. Cette valeur par
	   défaut (1) ne sert que de filet de sécurité si jamais ce contrôle-là ne
	   génère pas de CSS pour une raison quelconque. */
	--icon-visible: 1;
	position: relative;
	display: inline-flex;
	align-items: center;
	width: max-content;
	height: var(--h);
	cursor: pointer;
	text-decoration: none;
}

.cta-btn .cta-label{
	position: relative;
	z-index: 2;
	height:100%;
	/* Padding et taille de texte restent proportionnels à --btn-scale, exactement
	   comme le bouton par défaut (avec cercle-icône) — la "référence" visuelle
	   qui ne doit jamais bouger. Cacher/afficher le cercle-icône (--icon-visible)
	   ne touche plus à ces valeurs : seule la présence du cercle lui-même change,
	   le texte garde toujours le même poids et le même padding à une taille donnée. */
	padding: 0 calc(var(--btn-scale) * 30px);
	display:flex;
	align-items:center;
	justify-content:center;
	white-space:nowrap;
	font-family: 'Inter', -apple-system, 'Segoe UI', sans-serif;
	font-weight:600;
	font-size: calc(var(--btn-scale) * 16px);
	border-radius: 999px;
	transition: transform .45s ease;
}

.cta-btn .cta-icon{
	flex: none;
	width: calc(var(--icon) * var(--icon-visible));
	height: calc(var(--icon) * var(--icon-visible));
	overflow: hidden;
	border-radius:50%;
	display:flex;
	align-items:center;
	justify-content:center;
	transform-origin: center;
}

/* icône de droite : visible par défaut, dans le flux normal */
.cta-btn .cta-icon-right{
	position: static;
	transform: scale(1);
	opacity: 1;
	transition: transform .45s ease, opacity .45s ease;
}

/* icône de gauche : cachée par défaut (repliée), superposée sous le texte */
.cta-btn .cta-icon-left{
	position: absolute;
	left: 0;
	top: 0;
	z-index: 1;
	transform: scale(0);
	opacity: 0;
	transition: transform .45s ease, opacity .45s ease;
}

/* --- SURVOL (tout se produit en même temps) --- */
.cta-btn:hover .cta-label{
	transform: translateX(calc(var(--icon) * var(--icon-visible)));
	transition: transform .45s ease;
}
.cta-btn:hover .cta-icon-right{
	transform: scale(0);
	opacity: 0;
	transition: transform .45s ease, opacity .45s ease;
}
.cta-btn:hover .cta-icon-left{
	transform: scale(1);
	opacity: 1;
	transition: transform .45s ease, opacity .45s ease;
}

.cta-btn .cta-icon svg{ width: calc(20px * var(--btn-scale)); height: calc(18px * var(--btn-scale)); flex:none; }
.cta-btn .cta-icon svg *{ fill: currentColor; }

.theme-light .cta-label,
.theme-light .cta-icon{ background:#ffffff; color:#111111; }
.theme-light:hover .cta-icon-left{ background:#F26863; color:#0A0A0A; }

.theme-dark .cta-label,
.theme-dark .cta-icon{ background:#141414; color:#ffffff; }
.theme-dark:hover .cta-icon-left { color:#F26863; }

.theme-brand .cta-label,
.theme-brand .cta-icon{ background:#F26863; color:#ffffff; }
.theme-brand:hover .cta-icon-left { color:#0A0A0A; }

/* ---------- BADGE ---------- */
.cta-badge{
	display: inline-flex;
	align-items: center;
	justify-content: center;
	height: 30px;
	padding: 0 14px;
	border-radius: 4px;
	font-family: 'Inter', -apple-system, 'Segoe UI', sans-serif;
	font-weight: 600;
	font-size: 14px;
	white-space: nowrap;
	line-height: 1;
	text-decoration: none;
	cursor: pointer;
}

/* ---------- ICÔNE BOUCLE ---------- */
.cta-loop-icon{
	--loop-speed: 0.8s;
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 24px;
	height: 24px;
	border-radius: 50%;
	overflow: hidden;
	cursor: pointer;
	text-decoration: none;
	border: none;
	padding: 0;
	background: #141414;
	color: #ffffff;
}

.cta-loop-icon .cta-loop-track{
	position: absolute;
	left: 0;
	top: 0;
	display: flex;
	align-items: center;
	height: 100%;
	width: 48px; /* 2 copies x 24px, pour une boucle parfaitement continue */
	transform: translateX(0);
}

.cta-loop-icon .cta-loop-icon-copy{
	flex: none;
	width: 24px;
	height: 24px;
	display: flex;
	align-items: center;
	justify-content: center;
}

.cta-loop-icon .cta-loop-icon-copy svg{
	width: 12px;
	height: 12px;
	flex: none;
}
.cta-loop-icon .cta-loop-icon-copy svg *{ fill: currentColor; }

@keyframes cta-loop-move-right{
	from{ transform: translateX(0); }
	to{ transform: translateX(-24px); }
}
@keyframes cta-loop-move-left{
	from{ transform: translateX(-24px); }
	to{ transform: translateX(0); }
}

/* sens par défaut : l'icône part vers la droite et revient par la gauche */
.cta-loop-icon:hover .cta-loop-track{
	animation: cta-loop-move-right var(--loop-speed) linear infinite;
}

/* sens inversé */
.cta-loop-icon.is-reverse:hover .cta-loop-track{
	animation: cta-loop-move-left var(--loop-speed) linear infinite;
}

/* Déclenchement depuis un wrapper parent : ajoute la classe "ba-hover-trigger"
   (onglet Avancé > Classes CSS) sur n'importe quel conteneur/section Elementor
   qui englobe le widget "Icône Boucle". Survoler ce bloc animera l'icône,
   même si la souris n'est pas directement sur le cercle. */
.ba-hover-trigger:hover .cta-loop-icon:not(.is-reverse) .cta-loop-track{
	animation: cta-loop-move-right var(--loop-speed) linear infinite;
}
.ba-hover-trigger:hover .cta-loop-icon.is-reverse .cta-loop-track{
	animation: cta-loop-move-left var(--loop-speed) linear infinite;
}

/* ---------- TICKER DE LOGOS ---------- */
.cta-logo-ticker{
	--speed: 30s;
	--gap: 64px;
	--fade-width: 80px;
	--box-width: 140px;
	--box-height: 48px;
	--original-max-height: 120px;

	position: relative;
	overflow: hidden;
	width: 100%;
}

.cta-logo-ticker.has-fade{
	-webkit-mask-image: linear-gradient(
		to right,
		transparent 0,
		#000 var(--fade-width),
		#000 calc(100% - var(--fade-width)),
		transparent 100%
	);
	mask-image: linear-gradient(
		to right,
		transparent 0,
		#000 var(--fade-width),
		#000 calc(100% - var(--fade-width)),
		transparent 100%
	);
}

.cta-logo-ticker__track{
	display: flex;
	width: max-content;
	animation: cta-logo-ticker-scroll var(--speed) linear infinite;
}

.cta-logo-ticker.is-reverse .cta-logo-ticker__track{
	animation-direction: reverse;
}

.cta-logo-ticker.pause-on-hover:hover .cta-logo-ticker__track{
	animation-play-state: paused;
}

.cta-logo-ticker__list{
	display: flex;
	align-items: center;
	gap: var(--gap);
	padding-right: var(--gap);
	flex-shrink: 0;
}

.cta-logo-ticker__item{
	display: flex;
	align-items: center;
	flex-shrink: 0;
	text-decoration: none;
}

.cta-logo-ticker__list img{
	display: block;
	opacity: 1;
	transition: opacity .25s ease;
}

/* Mode "Zone fixe" : chaque logo occupe un espace identique (largeur x hauteur),
   centré et mis à l'échelle sans être déformé (object-fit: contain). Un logo
   étroit et un logo large remplissent donc la même surface — même poids visuel. */
.cta-logo-ticker.size-fixed .cta-logo-ticker__item{
	width: var(--box-width) !important;
	height: var(--box-height) !important;
	justify-content: center;
}

.cta-logo-ticker.size-fixed .cta-logo-ticker__list img{
	width: 100% !important;
	height: 100% !important;
	object-fit: contain;
}

/* Mode "Taille originale" : le fichier s'affiche tel qu'importé (aucune mise à
   l'échelle), avec un plafond de sécurité pour éviter qu'un fichier mal
   dimensionné ne casse la hauteur du ticker. */
.cta-logo-ticker.size-original .cta-logo-ticker__list img{
	width: auto !important;
	height: auto !important;
	max-width: 100%;
	max-height: var(--original-max-height) !important;
	/* "Agrandissement (%)" (onglet Style) applique "zoom: ..." ici via les
	   selectors Elementor. On utilise "zoom" plutôt que "transform: scale()" :
	   zoom agrandit l'espace réellement réservé par l'image (donc le ticker
	   grandit avec elle et rien n'est coupé en haut/bas par le overflow:hidden),
	   alors que transform est purement visuel et aurait laissé l'ancien espace
	   trop petit pour l'image agrandie. */
}

.cta-logo-ticker.brighten-on-hover .cta-logo-ticker__list img:hover{
	opacity: 1 !important;
}

@keyframes cta-logo-ticker-scroll{
	from{ transform: translateX(0); }
	to{ transform: translateX(-50%); }
}

/* respecte le réglage "réduire les animations" du système */
@media (prefers-reduced-motion: reduce){
	.cta-logo-ticker__track{
		animation: none;
	}
	.cta-logo-ticker{
		overflow-x: auto;
	}
}


