/* =========================================================================
   KaptyForm — styles front. Léger, responsive, sans dépendance.
   Couleurs pilotées par les variables --kf-bar / --kf-accent (inline).
   ========================================================================= */

.kaptyform {
	--kf-bar: #4cc3f0;
	--kf-bar-2: #38a9e4;
	--kf-track: #eef2fa;
	--kf-accent: #4cc3f0;
	--kf-radius: 12px;
	--kf-border: #e3e3ec;
	--kf-text: #2d2d3a;
	--kf-muted: #8a8a9a;
	--kf-error: #e74c3c;
	max-width: 640px;
	margin: 0 auto;
	font-family: inherit;
	color: var(--kf-text);
	box-sizing: border-box;
}
.kaptyform *,
.kaptyform *::before,
.kaptyform *::after {
	box-sizing: border-box;
}

/* L'attribut [hidden] doit TOUJOURS l'emporter : certains thèmes déclarent
   un `display` sur button/div, ce qui annule le display:none du navigateur
   (boutons Suivant/Envoyer visibles en même temps, étapes superposées…). */
.kaptyform [hidden] {
	display: none !important;
}

.kaptyform__title {
	margin: 0 0 1.2em;
	font-size: 1.5em;
	line-height: 1.25;
}

/* ----- Barre de progression -------------------------------------------- */
.kaptyform__progress {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-bottom: 1.8em;
}
.kaptyform__progress-track {
	flex: 1;
	height: 10px;
	background: var(--kf-track, #eef2fa);
	border-radius: 999px;
	overflow: visible;
}
.kaptyform__progress-fill {
	height: 100%;
	width: 0;
	min-width: 10px;
	border-radius: 999px;
	/* Dégradé horizontal entre les deux couleurs de barre. */
	background-image: linear-gradient( 90deg, var(--kf-bar), var(--kf-bar-2, var(--kf-bar)) );
	transition: width 0.55s cubic-bezier( 0.22, 1, 0.36, 1 );
}
.kaptyform__progress-label {
	min-width: 3em;
	text-align: right;
	font-size: 0.85em;
	font-weight: 600;
	color: var(--kf-accent);
	font-variant-numeric: tabular-nums;
}

/* ----- Étapes ----------------------------------------------------------- */
/* Courbe d'accélération douce (identique au modèle de référence). */
.kaptyform {
	--kf-ease: cubic-bezier( 0.22, 0.61, 0.36, 1 );
	--kf-in: 0.42s;
}
/*
 * Seule animation de transition : le fondu vertical de l'étape entrante.
 * L'étape sortante disparaît instantanément (bascule du [hidden] en JS) —
 * aucune animation de sortie, donc aucun résidu visible de l'étape
 * précédente. Lever [hidden] fait passer « animation » de none à
 * kaptyform-in-up, ce qui relance le fondu à chaque changement d'étape.
 */
.kaptyform__step {
	animation: kaptyform-in-up var(--kf-in) var(--kf-ease) both;
	/* Pas de will-change ici : il maintiendrait chaque étape sur sa propre
	   couche du compositeur, et une couche périmée peut s'afficher avec une
	   frame de retard à la bascule — l'étape précédente apparaît alors un
	   instant par transparence sous la nouvelle. Le navigateur promeut de
	   lui-même l'élément pendant l'animation. */
}
.kaptyform__step-title {
	margin: 0 0 1em;
	font-size: 1.1em;
	color: var(--kf-text);
}

@keyframes kaptyform-in-up {
	from { opacity: 0; transform: translateY( 10px ); }
	to   { opacity: 1; transform: none; }
}
/* Utilisée par .kaptyform__field et .kaptyform__success (fondu simple). */
@keyframes kaptyform-fade-in {
	from { opacity: 0; }
	to   { opacity: 1; }
}

/* Accessibilité : pas d'animation si l'utilisateur la refuse. */
@media ( prefers-reduced-motion: reduce ) {
	.kaptyform__step,
	.kaptyform__field {
		animation: none !important;
	}
	.kaptyform__progress-fill { transition: none !important; }
}

/* ----- Grille des champs (largeurs) ------------------------------------ */
.kaptyform__row {
	display: flex;
	flex-wrap: wrap;
	gap: 0 18px;
}
.kaptyform__field {
	margin-bottom: 1.1em;
	animation: kaptyform-fade-in 0.3s ease both;
	/* grow/shrink séparés du basis pour que les classes de largeur priment. */
	flex-grow: 0;
	flex-shrink: 1;
	flex-basis: 100%;
	max-width: 100%;
	min-width: 0;
}
/* Largeurs : on retire la gouttière correspondante du flex-basis.
   width ET flex-basis pour battre tout CSS de thème/Elementor. */
.kaptyform__row > .kaptyform__field--w-full       { flex-basis: 100%; max-width: 100%; }
.kaptyform__row > .kaptyform__field--w-half       { flex-basis: calc(50% - 9px); max-width: calc(50% - 9px); }
.kaptyform__row > .kaptyform__field--w-third      { flex-basis: calc(33.333% - 12px); max-width: calc(33.333% - 12px); }
.kaptyform__row > .kaptyform__field--w-two_thirds { flex-basis: calc(66.666% - 6px); max-width: calc(66.666% - 6px); }
.kaptyform__row > .kaptyform__field--w-quarter    { flex-basis: calc(25% - 13.5px); max-width: calc(25% - 13.5px); }

/* Champs masqués par condition : ne pas occuper de place dans la grille. */
.kaptyform__field[hidden] { display: none; }

@media ( max-width: 600px ) {
	/* Sur mobile, tout repasse en pleine largeur. */
	.kaptyform__field { flex-basis: 100% !important; }
}
.kaptyform__label {
	display: block;
	margin-bottom: 0.45em;
	font-weight: 600;
	font-size: 0.95em;
}
.kaptyform__req { color: var(--kf-error); }

.kaptyform__input {
	width: 100%;
	padding: 0.75em 0.9em;
	border: 1.5px solid var(--kf-border);
	border-radius: var(--kf-radius);
	font: inherit;
	color: var(--kf-text);
	background: #fff;
	transition: border-color 0.2s, box-shadow 0.2s;
}
.kaptyform__input:focus {
	outline: none;
	border-color: var(--kf-accent);
	box-shadow: 0 0 0 3px color-mix( in srgb, var(--kf-accent) 18%, transparent );
}
textarea.kaptyform__input { resize: vertical; min-height: 110px; }

.kaptyform__options {
	display: flex;
	flex-wrap: wrap;
	gap: 0.6em;
}
.kaptyform__option {
	display: inline-flex;
	align-items: center;
	gap: 0.5em;
	padding: 0.6em 0.9em;
	border: 1.5px solid var(--kf-border);
	border-radius: var(--kf-radius);
	cursor: pointer;
	transition: border-color 0.2s, background 0.2s;
	font-size: 0.95em;
}
.kaptyform__option:hover { border-color: var(--kf-accent); }
.kaptyform__option input { accent-color: var(--kf-accent); }
.kaptyform__option:has( input:checked ) {
	border-color: var(--kf-accent);
	background: color-mix( in srgb, var(--kf-accent) 8%, #fff );
}

/* ----- Cartes à icônes -------------------------------------------------- */
.kaptyform__cards {
	display: grid;
	gap: 12px;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );
}
.kaptyform__cards--cols1 { grid-template-columns: 1fr; }
.kaptyform__cards--cols2 { grid-template-columns: repeat( 2, minmax( 0, 1fr ) ); }
.kaptyform__cards--cols3 { grid-template-columns: repeat( 3, minmax( 0, 1fr ) ); }
.kaptyform__cards--cols4 { grid-template-columns: repeat( 4, minmax( 0, 1fr ) ); }
/* Sur mobile, les cartes s'empilent par défaut (une par ligne).
   Ce comportement se change dans Elementor → Style → Cartes → Colonnes. */
@media ( max-width: 600px ) {
	.kaptyform__cards,
	.kaptyform__cards--cols1,
	.kaptyform__cards--cols2,
	.kaptyform__cards--cols3,
	.kaptyform__cards--cols4 {
		grid-template-columns: 1fr;
	}
}

.kaptyform__card {
	--kf-card-img-h: 130px;
	--kf-card-ico-size: 42px;
	--kf-card-veil: rgba( 0, 0, 0, .42 );
	position: relative;
	overflow: hidden;
	appearance: none;
	cursor: pointer;
	font: inherit;
	text-align: left;
	display: flex;
	align-items: center;
	gap: 12px;
	padding: 1em 1.1em;
	border: 1.5px solid var(--kf-border);
	border-radius: var(--kf-radius);
	background: #fff;
	color: var(--kf-text);
	transition: border-color .18s, box-shadow .18s, transform .12s, background .18s;
}
.kaptyform__card:hover {
	/* Variables surchargeables ; Elementor peut aussi écraser directement. */
	border-color: var(--kf-card-border-hover, var(--kf-accent));
	background-color: var(--kf-card-bg-hover, #fff);
	transform: translateY( var(--kf-card-lift, -2px) );
}
.kaptyform__card.is-selected {
	border-color: var(--kf-accent);
	background: color-mix( in srgb, var(--kf-accent) 7%, #fff );
	box-shadow: 0 0 0 3px color-mix( in srgb, var(--kf-accent) 18%, transparent );
}
.kaptyform__card-label { font-weight: 600; font-size: 0.97em; }

/* --- Style « icône + libellé » --- */
.kaptyform__card-ico {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--kf-accent);
}
.kaptyform__card-ico img,
.kaptyform__card-ico svg {
	width: var(--kf-card-ico-size);
	height: var(--kf-card-ico-size);
	object-fit: contain;
	display: block;
}

/* --- Style « image en haut » --- */
.kaptyform__cards--image-top .kaptyform__card {
	flex-direction: column;
	align-items: stretch;
	gap: 0;
	padding: 0;
	text-align: center;
}
.kaptyform__cards--image-top .kaptyform__card-img {
	display: block;
	width: 100%;
	height: var(--kf-card-img-h);
	overflow: hidden;
	background: #f1f2f6;
}
.kaptyform__cards--image-top .kaptyform__card-img img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform .35s ease;
}
.kaptyform__cards--image-top .kaptyform__card:hover .kaptyform__card-img img {
	transform: scale( 1.05 );
}
.kaptyform__cards--image-top .kaptyform__card-label {
	padding: 0.85em 1em;
}

/* --- Style « image en fond » --- */
.kaptyform__cards--image-bg .kaptyform__card {
	min-height: var(--kf-card-img-h);
	align-items: flex-end;
	padding: 1.1em;
	border-color: transparent;
	color: #fff;
}
.kaptyform__card-bg {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	transition: transform .4s ease;
	z-index: 0;
}
.kaptyform__card-veil {
	position: absolute;
	inset: 0;
	background: var(--kf-card-veil);
	transition: background .25s ease;
	z-index: 1;
}
.kaptyform__cards--image-bg .kaptyform__card-label {
	position: relative;
	z-index: 2;
	font-size: 1.05em;
	text-shadow: 0 1px 8px rgba( 0, 0, 0, .35 );
}
.kaptyform__cards--image-bg .kaptyform__card:hover .kaptyform__card-bg { transform: scale( 1.06 ); }
.kaptyform__cards--image-bg .kaptyform__card.is-selected {
	background: transparent;
	border-color: var(--kf-accent);
	box-shadow: 0 0 0 3px var(--kf-accent);
}
.kaptyform__cards--image-bg .kaptyform__card.is-selected .kaptyform__card-veil {
	background: color-mix( in srgb, var(--kf-accent) 55%, rgba( 0, 0, 0, .35 ) );
}

@supports not ( background: color-mix( in srgb, red 50%, blue ) ) {
	.kaptyform__card.is-selected { background: #f6f5ff; box-shadow: 0 0 0 3px rgba( 108, 92, 231, .18 ); }
}

/* Sous-titre d'étape */
.kaptyform__step-sub {
	margin: -0.6em 0 1.2em;
	color: var(--kf-muted);
	font-size: 0.95em;
	line-height: 1.5;
}

/* Bouton désactivé (validation live) */
.kaptyform__btn:disabled,
.kaptyform__btn.is-disabled {
	opacity: 0.45;
	cursor: not-allowed;
	transform: none !important;
	box-shadow: none;
}

/* Erreurs */
.kaptyform__field.has-error .kaptyform__input { border-color: var(--kf-error); }
.kaptyform__field.has-error .kaptyform__card { border-color: var(--kf-error); }
.kaptyform__error {
	display: block;
	margin-top: 0.35em;
	color: var(--kf-error);
	font-size: 0.82em;
	min-height: 1em;
}

/* Honeypot caché */
.kaptyform__hp {
	position: absolute !important;
	left: -9999px !important;
	width: 1px;
	height: 1px;
	overflow: hidden;
}

/* ----- Navigation / boutons -------------------------------------------- */
.kaptyform__nav {
	display: flex;
	gap: 0.8em;
	margin-top: 1.4em;
}
.kaptyform__btn {
	appearance: none;
	border: none;
	cursor: pointer;
	font: inherit;
	font-weight: 600;
	padding: 0.8em 1.6em;
	border-radius: var(--kf-radius);
	transition: transform 0.12s ease, box-shadow 0.2s, background 0.2s, opacity 0.2s;
}
.kaptyform__btn--next,
.kaptyform__btn--submit {
	margin-left: auto;
	color: #fff;
	background: var(--kf-accent);
	box-shadow: 0 6px 18px color-mix( in srgb, var(--kf-accent) 35%, transparent );
}
.kaptyform__btn--next:hover,
.kaptyform__btn--submit:hover { transform: translateY( -2px ); }
.kaptyform__btn--next:active,
.kaptyform__btn--submit:active { transform: translateY( 0 ); }
.kaptyform__btn--prev {
	background: transparent;
	color: var(--kf-muted);
	border: 1.5px solid var(--kf-border);
}
.kaptyform__btn--prev:hover { color: var(--kf-text); border-color: var(--kf-muted); }

.kaptyform__btn.is-loading {
	position: relative;
	color: transparent !important;
	pointer-events: none;
}
.kaptyform__btn.is-loading::after {
	content: "";
	position: absolute;
	width: 1.1em;
	height: 1.1em;
	top: 50%;
	left: 50%;
	margin: -0.55em 0 0 -0.55em;
	border: 2px solid rgba( 255, 255, 255, 0.5 );
	border-top-color: #fff;
	border-radius: 50%;
	animation: kaptyform-spin 0.6s linear infinite;
}
@keyframes kaptyform-spin { to { transform: rotate( 360deg ); } }

/* ----- Message global -------------------------------------------------- */
.kaptyform__message {
	margin-top: 1em;
	font-size: 0.9em;
	min-height: 1em;
}
.kaptyform__message.is-error { color: var(--kf-error); }

/* ----- Écran de succès ------------------------------------------------- */
.kaptyform__success {
	text-align: center;
	padding: 2em 1em;
	animation: kaptyform-fade-in 0.4s ease both;
}
.kaptyform__success-text {
	font-size: 1.2em;
	font-weight: 600;
	margin: 0.8em 0 0;
}
.kaptyform__check svg {
	width: 84px;
	height: 84px;
}
.kaptyform__check circle {
	stroke: var(--kf-accent);
	stroke-width: 2;
	stroke-dasharray: 166;
	stroke-dashoffset: 166;
	animation: kaptyform-stroke 0.6s cubic-bezier( 0.65, 0, 0.45, 1 ) forwards;
}
.kaptyform__check path {
	stroke: var(--kf-accent);
	stroke-width: 4;
	stroke-linecap: round;
	stroke-linejoin: round;
	stroke-dasharray: 48;
	stroke-dashoffset: 48;
	animation: kaptyform-stroke 0.4s cubic-bezier( 0.65, 0, 0.45, 1 ) 0.5s forwards;
}
@keyframes kaptyform-stroke { to { stroke-dashoffset: 0; } }

/* ----- Responsive ------------------------------------------------------- */
@media ( max-width: 480px ) {
	.kaptyform__nav { flex-direction: column-reverse; }
	.kaptyform__btn { width: 100%; }
	.kaptyform__btn--next,
	.kaptyform__btn--submit { margin-left: 0; }
}

/* Fallback color-mix pour vieux navigateurs : couleur pleine. */
@supports not ( background: color-mix( in srgb, red 50%, blue ) ) {
	.kaptyform__progress-fill { background: var(--kf-bar); }
	.kaptyform__input:focus { box-shadow: 0 0 0 3px rgba( 108, 92, 231, 0.18 ); }
}

/* ----- Bloc de texte libre --------------------------------------------- */
.kaptyform__field--html { margin-bottom: 1.1em; }
.kaptyform__html {
	font-size: 0.92em;
	line-height: 1.6;
	color: var(--kf-muted);
}
.kaptyform__html a { color: var(--kf-accent); text-decoration: underline; }
.kaptyform__html p:last-child { margin-bottom: 0; }

/* ----- Séparateur ------------------------------------------------------- */
.kaptyform__field--separator { margin-bottom: 1.4em; }
.kaptyform__sep {
	border: none;
	border-top-width: 1px;
	border-top-color: var(--kf-border);
	margin: 0.6em 0;
}
.kaptyform__sep--solid  { border-top-style: solid; }
.kaptyform__sep--dashed { border-top-style: dashed; }
.kaptyform__sep--dotted { border-top-style: dotted; }

/* ----- Liste d'icônes --------------------------------------------------- */
.kaptyform__ilist {
	--kf-ilist-ico: 22px;
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 14px 22px;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );
}
.kaptyform__ilist--cols1 { grid-template-columns: 1fr; }
.kaptyform__ilist--cols2 { grid-template-columns: repeat( 2, minmax( 0, 1fr ) ); }
.kaptyform__ilist--cols3 { grid-template-columns: repeat( 3, minmax( 0, 1fr ) ); }
.kaptyform__ilist--cols4 { grid-template-columns: repeat( 4, minmax( 0, 1fr ) ); }
@media ( max-width: 600px ) {
	.kaptyform__ilist { grid-template-columns: 1fr; }
}
.kaptyform__ilist-item {
	display: flex;
	align-items: center;
	gap: 10px;
	margin: 0;
	font-size: 0.95em;
	font-weight: 600;
	color: var(--kf-text);
	line-height: 1.35;
}
.kaptyform__ilist-ico {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
}
.kaptyform__ilist-ico img {
	width: var(--kf-ilist-ico);
	height: var(--kf-ilist-ico);
	object-fit: contain;
	display: block;
}
/* =========================================================================
   RENFORCEMENT — protège l'apparence du formulaire contre le CSS du thème.
   On redéclare l'essentiel avec le préfixe .kaptyform (spécificité 0,2,0),
   ce qui bat les règles de thème habituelles tout en laissant Elementor
   (dont les sélecteurs générés sont au moins aussi spécifiques et chargés
   après) garder la main sur la personnalisation.
   ========================================================================= */

/* --- Saisie --- */
.kaptyform .kaptyform__input,
.kaptyform input.kaptyform__input,
.kaptyform textarea.kaptyform__input,
.kaptyform select.kaptyform__input {
	width: 100%;
	max-width: 100%;
	padding: 0.75em 0.9em;
	border: 1.5px solid var(--kf-border);
	border-radius: var(--kf-radius);
	font: inherit;
	line-height: 1.4;
	color: var(--kf-text);
	background-color: #fff;
	background-image: none;
	box-shadow: none;
	outline: none;
	appearance: none;
	-webkit-appearance: none;
	margin: 0;
	height: auto;
	min-height: 0;
	text-transform: none;
	letter-spacing: normal;
}
.kaptyform select.kaptyform__input {
	/* Rend la flèche native visible malgré appearance:none */
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238a8a9a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 0.8em center;
	background-size: 18px 18px;
	padding-right: 2.4em;
}
.kaptyform .kaptyform__input:focus {
	border-color: var(--kf-accent);
	box-shadow: 0 0 0 3px color-mix( in srgb, var(--kf-accent) 18%, transparent );
	background-color: #fff;
	outline: none;
}
.kaptyform textarea.kaptyform__input { min-height: 110px; }

/* --- Libellés --- */
.kaptyform .kaptyform__label {
	display: block;
	margin: 0 0 0.45em;
	padding: 0;
	font-weight: 600;
	font-size: 0.95em;
	line-height: 1.35;
	text-transform: none;
	letter-spacing: normal;
	color: inherit;
}

/* --- Boutons (le thème ne doit ni colorer ni redimensionner) --- */
.kaptyform .kaptyform__btn {
	appearance: none;
	-webkit-appearance: none;
	display: inline-block;
	width: auto;
	height: auto;
	min-height: 0;
	font: inherit;
	font-weight: 600;
	line-height: 1.2;
	text-transform: none;
	letter-spacing: normal;
	text-decoration: none;
	text-shadow: none;
	cursor: pointer;
	border: none;
	border-radius: var(--kf-radius);
	padding: 0.8em 1.6em;
	margin: 0;
	background-image: none;
}
.kaptyform .kaptyform__btn--next,
.kaptyform .kaptyform__btn--submit {
	color: #fff;
	background-color: var(--kf-accent);
	/* Rétablit l'alignement à droite : le « margin: 0 » du renforcement
	   ci-dessus battait le margin-left:auto déclaré plus haut. */
	margin-left: auto;
}
.kaptyform .kaptyform__btn--prev {
	color: var(--kf-muted);
	background-color: transparent;
	border: 1.5px solid var(--kf-border);
}
.kaptyform .kaptyform__btn--prev:hover {
	color: var(--kf-text);
	border-color: var(--kf-muted);
	background-color: transparent;
}
.kaptyform .kaptyform__nav { margin-top: 1.4em; }

/* --- Options (radio / cases) --- */
.kaptyform .kaptyform__option {
	background-color: #fff;
	color: inherit;
	font-weight: 400;
	text-transform: none;
}

/* --- Cartes --- */
.kaptyform .kaptyform__card {
	appearance: none;
	-webkit-appearance: none;
	width: 100%;
	height: auto;
	min-height: 0;
	font: inherit;
	line-height: 1.35;
	text-transform: none;
	letter-spacing: normal;
	text-shadow: none;
	margin: 0;
	background-image: none;
	/* Beaucoup de thèmes déclarent un `display` sur les <button> (parfois
	   avec !important) : le display:flex de la carte saute et l'icône se
	   retrouve centrée AU-DESSUS du libellé au lieu d'être à sa gauche.
	   Ces propriétés structurelles ne sont pilotées par aucun réglage
	   Elementor du widget : on peut donc les verrouiller en !important
	   sans rien casser. */
	display: flex !important;
	flex-direction: row !important;
	align-items: center !important;
	gap: 12px;
	/* Les thèmes mettent souvent white-space:nowrap sur les <button> :
	   le libellé se retrouve tronqué (« vendre rapi… ») au lieu de passer
	   à la ligne. On rétablit le retour à la ligne. */
	white-space: normal !important;
}
.kaptyform .kaptyform__card .kaptyform__card-label {
	min-width: 0;               /* autorise le rétrécissement dans la rangée flex */
	white-space: normal !important;
	overflow-wrap: break-word;
}
/* L'icône garde sa taille et reste un bloc en ligne dans la rangée. */
.kaptyform .kaptyform__card .kaptyform__card-ico {
	display: flex !important;
	flex: 0 0 auto;
}
.kaptyform .kaptyform__card .kaptyform__card-ico img,
.kaptyform .kaptyform__card .kaptyform__card-ico svg {
	width: var(--kf-card-ico-size) !important;
	height: var(--kf-card-ico-size) !important;
	max-width: none;
	display: block;
}
/* Le style « image en haut » empile volontairement : il garde la main. */
.kaptyform .kaptyform__cards--image-top .kaptyform__card {
	flex-direction: column !important;
	align-items: stretch !important;
	gap: 0;
}
/* Le style « image en fond » ancre son libellé en bas. */
.kaptyform .kaptyform__cards--image-bg .kaptyform__card {
	align-items: flex-end !important;
}

/* --- Listes --- */
.kaptyform .kaptyform__ilist { list-style: none; margin: 0; padding: 0; }
.kaptyform .kaptyform__ilist-item { margin: 0; padding: 0; list-style: none; }

/* ----- Cadre à largeur stable (pile de grille) --------------------------
   Les étapes sont empilées dans une même cellule de grille. Une étape
   masquée n'est plus retirée du flux (display:none) : elle reste rendue,
   invisible et de hauteur nulle. Elle contribue donc en permanence à la
   largeur intrinsèque du conteneur, qui vaut toujours celle de l'étape la
   plus large — y compris dans un conteneur Elementor « adapté au contenu »
   ou un flex centré. Aucune mesure JS n'est nécessaire.
   --------------------------------------------------------------------- */
.kaptyform,
.kaptyform .kaptyform__form,
.kaptyform .kaptyform__steps {
	width: 100%;
	box-sizing: border-box;
}
.kaptyform .kaptyform__steps {
	position: relative;
	display: grid;
	grid-template-columns: minmax( 0, 1fr );
}
/* Hauteur adaptative animée : pendant la bascule d'étape, le JS fige la
   hauteur de départ puis pose celle d'arrivée — cette transition fait
   glisser le cadre en douceur au lieu de sauter. */
.kaptyform .kaptyform__steps.is-resizing {
	transition: height 0.35s var(--kf-ease);
	overflow: hidden;
}
@media ( prefers-reduced-motion: reduce ) {
	.kaptyform .kaptyform__steps.is-resizing { transition: none !important; }
}
.kaptyform .kaptyform__steps > .kaptyform__step {
	grid-area: 1 / 1;
	width: 100%;
	max-width: 100%;
	min-width: 0;
	/* L'étape visible passe toujours AU-DESSUS des étapes masquées. */
	position: relative;
	z-index: 2;
}
/* Étape masquée : invisible et sans hauteur, mais présente pour la largeur.
   (Doit battre le « .kaptyform [hidden] { display:none !important } ».)
   opacity:0 double la visibility : même si le compositeur affichait la
   couche avec une frame de retard, elle serait de toute façon transparente
   — aucun résidu possible de l'étape précédente pendant le fondu. */
.kaptyform .kaptyform__steps > .kaptyform__step[hidden] {
	display: block !important;
	visibility: hidden;
	opacity: 0;
	z-index: 1;
	height: 0;
	min-height: 0;
	margin: 0;
	padding: 0;
	overflow: hidden;
	pointer-events: none;
	animation: none !important;
	transition: none !important;
}
/* Hauteur fixe : les étapes masquées gardent leur hauteur réelle, la
   cellule de grille adopte donc la hauteur de l'étape la plus haute. */
.kaptyform.kaptyform--fixed-height .kaptyform__steps > .kaptyform__step[hidden] {
	height: auto;
}

/* ----- Largeur par défaut du widget -------------------------------------
   Le widget occupe par défaut toute la largeur disponible, SANS !important :
   la stabilité de largeur entre étapes est déjà garantie par la pile de
   grille (voir « Cadre à largeur stable »), et le CSS généré par Elementor
   — plus spécifique — doit pouvoir réduire le bloc si l'utilisateur règle
   une largeur de widget ou de conteneur.
   --------------------------------------------------------------------- */
.elementor-widget-kaptyform,
.elementor-widget-kaptyform .elementor-widget-container {
	width: 100%;
	max-width: 100%;
}
/* Conteneurs flex Elementor (.e-con) : largeur pleine par défaut, que le
   réglage « Largeur » du widget surcharge librement. */
.elementor-widget-kaptyform {
	--container-widget-width: 100%;
}
.kaptyform {
	width: 100%;
	min-width: 0;
}
