/**
 * Widget « FTI — Carrousel de biens ».
 *
 * Rendu « franc-bord » : pas de marge interne ni de fond posés ici — l'habillage de section (fond
 * brand-primary, padding) est géré par le conteneur Elementor. Le texte est clair (fond sombre attendu).
 *
 * Mobile/tablette : bloc texte au-dessus, carrousel en dessous. Desktop : texte à gauche, carrousel à
 * droite (cartes qui débordent vers la droite). Les cartes reprennent le gabarit FTImmo (archive-property.css).
 */

.fti-biens {
	box-sizing: border-box;
	width: 100%;
	display: flex;
	flex-direction: column;
	gap: 50px; /* mobile : distance entre le bas du bouton et le sommet des cartes. */
	color: var(--color-text-inverse, #ffffff);
}

.fti-biens *,
.fti-biens *::before,
.fti-biens *::after {
	box-sizing: border-box;
}

/* ---- Bloc texte ----------------------------------------------------------- */

.fti-biens__intro {
	display: flex;
	flex-direction: column;
	gap: 20px;
	align-items: flex-start;
}

/* Sélecteur à 2 classes (0,2,0) pour avoir priorité sur le style par défaut du kit Elementor
   (.elementor-kit-6 h2, 0,1,1) : la couleur suit la section (inherit). */
.fti-biens .fti-biens__title {
	margin: 0;
	font-family: var(--font-title, "Aptos", system-ui, sans-serif);
	font-weight: 800;
	line-height: 1.04;
	letter-spacing: -0.7px;
	font-size: var(--text-h2-sm, 40px);
	color: inherit;
}

.fti-biens__lead {
	margin: 0;
	font-family: var(--font-body, "Aptos", system-ui, sans-serif);
	font-weight: 700;
	line-height: 1.3;
	font-size: var(--text-lead-sm, 18px);
	color: inherit;
}

/* Bouton pilule (brand-secondary) + pastille du nombre. */
.fti-biens__btn {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	align-self: flex-start;
	margin-top: 5px; /* mobile : espace au-dessus du bouton. */
	min-height: 60px;
	padding: 0 32px;
	border-radius: 9999px;
	background: var(--p-brand-secondary, #3889ff);
	color: var(--color-text-inverse, #ffffff);
	font-family: var(--font-body, "Aptos", system-ui, sans-serif);
	font-weight: 700;
	font-size: var(--text-body-sm, 16px);
	line-height: 1.3;
	text-decoration: none;
	transition: background-color 0.35s ease;
}

.fti-biens__btn:hover,
.fti-biens__btn:focus-visible {
	background: var(--p-brand-primary, #123347);
}

.fti-biens__btn:focus-visible {
	outline: 2px solid var(--color-text-inverse, #ffffff);
	outline-offset: 2px;
}

.fti-biens__btn-label,
.fti-biens__btn .fti-biens__badge {
	color: var(--color-text-inverse, #ffffff);
}

/* Pastille : nombre d'objets disponibles — repoussée à droite, séparée du libellé + flèche. */
.fti-biens__badge {
	margin-left: 28px; /* espace élégant entre la zone « libellé + flèche » et la pastille. */
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 28px;
	height: 28px;
	padding: 0 9px;
	border-radius: 9999px;
	background: var(--color-text-inverse, #ffffff);
	color: var(--p-brand-primary, #123347) !important;
	font-size: 14px;
	font-weight: 700;
	line-height: 1;
}

.fti-biens__arrow {
	flex: 0 0 auto;
}

/*
 * Flèche en blanc, même quand un lien est attribué : l'icône est tracée en currentColor et, sur un
 * <a>, la couleur de lien du thème (bleue) aurait sinon priorité. On fixe donc la teinte.
 */
.fti-biens__btn .fti-biens__arrow {
	color: var(--color-text-inverse, #ffffff);
}

/* ---- Carrousel ------------------------------------------------------------ */

.fti-biens__slider {
	position: relative;
	min-width: 0; /* autorise le rétrécissement en contexte flex (desktop). */
}

.fti-biens__swiper {
	overflow: visible; /* laisse les cartes voisines déborder (aperçu). */
}

/* Spécificité renforcée (.fti-biens …) pour prendre le pas sur le `width:100%` appliqué par Swiper sur `.swiper-slide`. */
.fti-biens .fti-biens__slide {
	width: 100%; /* mobile : une seule carte, pleine largeur. */
	max-width: none;
	height: auto;
}

/* La carte FTImmo remplit la largeur du slide. */
.fti-biens__slide .fti-card {
	width: 100%;
	height: 100%;
}

/*
 * Tokens de carte FTImmo. Ils sont déclarés par le plugin sur `.fti-archive` (contexte page de
 * recherche) ; hors de ce conteneur, le filet gris et la pastille de surface perdraient leur style.
 * On les redéclare ici, scopés à la carte du carrousel (pas à l'intro), aux mêmes valeurs que le
 * plugin (archive-property.css) afin de conserver un rendu de carte identique.
 */
.fti-biens .fti-card {
	--fti-primary: #3889ff;
	--fti-bg-soft: #f7f8f9;
	--fti-card-border: #d3d3d3;
	--fti-card-secondary: #3889ff;
	--fti-muted: #606775;
	--fti-text: #1f2933;
	/* Pas de bordure extérieure : le carrousel est posé sur un aplat de couleur. Le filet interne
	   (séparateur avant l'annonceur) reste, lui, via --fti-card-border ci-dessus. */
	border: 0;
}

/* Léger relief au survol, identique aux tuiles de la page des biens (archive-property.css). */
.fti-biens .fti-card {
	transition: box-shadow 0.18s;
}

.fti-biens .fti-card:hover {
	/* Ombre teintée brand-primary (via color-mix pour garder le token + l'alpha). Offset Y = 0 → symétrique. */
	box-shadow: 0 0 40px color-mix(in srgb, var(--p-brand-primary, #123347) 63%, transparent);
}

/* Contrôles : flèche précédent · points · flèche suivant. */
.fti-biens__controls {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 16px;
	margin-top: 24px;
}

.fti-biens__nav {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	flex: 0 0 auto;
	border: 0;
	border-radius: 9999px;
	background: var(--p-brand-secondary, #3889ff);
	color: var(--color-text-inverse, #ffffff);
	cursor: pointer;
	transition: background-color 0.2s ease, opacity 0.2s ease;
}

.fti-biens__nav:hover,
.fti-biens__nav:focus-visible {
	background: var(--p-brand-primary, #123347);
}

.fti-biens__nav:focus-visible {
	outline: 2px solid var(--color-text-inverse, #ffffff);
	outline-offset: 2px;
}

.fti-biens__nav.swiper-button-disabled {
	opacity: 0.4;
	cursor: default;
}

/* Pagination à points. */
.fti-biens__dots {
	display: inline-flex;
	align-items: center;
	gap: 0; /* espacement nul : il reste le léger écart dû au span qui encadre chaque point. */
	flex: 0 0 auto;
}

/*
 * Swiper étire le conteneur de pagination en width:100% (via .swiper-pagination-horizontal), ce qui
 * placerait la flèche suivante au bord de la page. On fixe la largeur « au contenu » avec une
 * spécificité supérieure, pour que la flèche droite suive les points à la même distance que la gauche.
 */
.fti-biens .fti-biens__controls .fti-biens__dots {
	width: auto;
}

.fti-biens__dots .swiper-pagination-bullet {
	width: 8px;
	height: 8px;
	border-radius: 9999px;
	background: var(--color-text-inverse, #ffffff);
	opacity: 0.4;
	transition: opacity 0.2s ease;
	cursor: pointer;
}

.fti-biens__dots .swiper-pagination-bullet-active {
	opacity: 1;
}

/* ---- Mobile : points masqués, flèches seules alignées à gauche ------------- */

@media (max-width: 767.98px) {

	.fti-biens__dots {
		display: none;
	}

	.fti-biens__controls {
		justify-content: flex-start;
	}
}

/* ---- Tablette ------------------------------------------------------------- */

@media (min-width: 768px) {

	.fti-biens {
		gap: 90px; /* distance entre le bas du bouton (intro) et le sommet des cartes. */
	}

	.fti-biens__intro {
		align-items: center;
		text-align: center;
		max-width: 760px;
		margin-inline: auto;
	}

	.fti-biens .fti-biens__title {
		font-size: var(--text-h2-md, 50px);
	}

	.fti-biens__lead {
		font-size: var(--text-lead-md, 23px);
	}

	.fti-biens__btn {
		align-self: center;
		margin-top: 10px; /* tablette : espace au-dessus du bouton. */
		font-size: var(--text-body-md, 18px);
	}

	/*
	 * Deux cartes pleines sur la largeur (moitié du conteneur moins l'espacement Swiper de 24px).
	 * Spécificité renforcée pour prendre le pas sur le `width:100%` appliqué par Swiper sur `.swiper-slide`.
	 */
	.fti-biens .fti-biens__slide {
		width: calc((100% - 24px) / 2);
		max-width: none;
	}
}

/* ---- Desktop : texte à gauche, carrousel à droite ------------------------- */

@media (min-width: 1025px) {

	.fti-biens {
		flex-direction: row;
		align-items: center;
		gap: 100px; /* respiration entre le bloc texte et le carrousel. */
	}

	.fti-biens__intro {
		flex: 0 1 42%;
		max-width: 42%;
		align-items: flex-start;
		text-align: left;
		margin-inline: 0;
		gap: 40px;
	}

	.fti-biens .fti-biens__title {
		font-size: var(--text-h2-lg, 70px);
		line-height: 1;
	}

	.fti-biens__lead {
		font-size: var(--text-lead-lg, 26px);
		line-height: 1.31;
	}

	.fti-biens__btn {
		align-self: flex-start;
		margin-top: 0; /* desktop : pas de marge au-dessus (déjà validé). */
		font-size: var(--text-body-lg, 20px);
	}

	.fti-biens__slider {
		flex: 0 1 50%;
		max-width: 50%; /* la zone des cartes ne dépasse pas la moitié de la largeur. */
	}

	/*
	 * Desktop : le carrousel occupe 100% du div disponible et clippe au bord droit. Les cartes gardent
	 * leur largeur normale et se succèdent vers la droite ; la dernière visible est coupée, ce qui
	 * signale à l'utilisateur qu'il peut faire défiler.
	 */
	/* Spécificité renforcée (.fti-biens …) : l'élément porte aussi la classe `.swiper` ; on reste en (0,2,0)
	   pour être au-dessus de la CSS de Swiper quoi qu'il arrive.
	   On coupe les cartes au bord droit (voulu), MAIS un `overflow: hidden` rognerait aussi l'ombre du survol
	   sur les 4 côtés (la carte remplit exactement le slide) → l'ombre n'apparaîtrait qu'en bas/droite.
	   Solution : `overflow: clip` + `overflow-clip-margin` laisse peindre l'ombre jusqu'à N px au-delà de la
	   boîte, sur tous les côtés (donc centrée), tout en coupant les cartes et SANS créer de barre de défilement
	   (clip ne fabrique pas de conteneur de scroll). À droite, le débord passe au-delà du viewport (coupé par
	   la fenêtre) ; à gauche, il laisse juste respirer l'ombre de la 1ʳᵉ carte dans la gouttière. */
	.fti-biens .fti-biens__swiper {
		/* On coupe les cartes au bord droit (voulu) sans rogner l'ombre du survol en haut/bas/gauche.
		   `overflow-clip-margin` ferait l'affaire mais Safari ne le supporte pas → technique cross-browser :
		   on agrandit la boîte de clip de 44px en haut/bas/gauche via padding, et on reprend ces 44px en
		   marge négative pour ne rien décaler. À droite : padding 0 → la coupe reste pile au bord. L'ombre a
		   donc la place de s'afficher sur les 3 côtés visibles, partout (Chrome, Safari, Firefox).
		   (En « Fluide », le JS mesure le bord droit réel et recalcule le débord : le décalage gauche est
		   absorbé automatiquement.) */
		overflow: hidden;
		padding: 44px 0 44px 44px;
		margin: -44px 0 -44px -44px;
	}

	/*
	 * Mode « Fluide » (desktop uniquement) : la boîte du carrousel s'étend jusqu'au bord droit du
	 * viewport pour que les cartes courent sur toute la largeur restante à droite. Le débord exact
	 * (--fti-bleed) est mesuré en JS, de sorte que le bord droit tombe PILE sur le viewport : pas de
	 * barre de défilement horizontale. L'overflow:hidden ci-dessus coupe les cartes au bord de l'écran.
	 * Repli sans JS : --fti-bleed = 0 → comportement « Restreint ».
	 */
	.fti-biens--fluid .fti-biens__swiper {
		width: calc(100% + var(--fti-bleed, 0px));
		max-width: none;
	}

	/*
	 * Largeur de carte verrouillée en desktop (taille maquette). Elle gouverne le pas du carrousel
	 * (Swiper en slidesPerView:'auto' lit la largeur du slide) ; la carte FTImmo remplit ce slide.
	 */
	.fti-biens .fti-biens__slide {
		width: 409px;
		max-width: 409px;
	}

	/* Contrôles alignés à gauche sous le carrousel en desktop (comme la maquette). L'écart au-dessus reste
	   la marge de base (24px) : avec overflow:clip, le débord de l'ombre ne prend pas de place dans le flux. */
	.fti-biens__controls {
		justify-content: flex-start;
	}
}

/* ---- Accessibilité : réduction des animations ----------------------------- */

@media (prefers-reduced-motion: reduce) {

	.fti-biens__btn,
	.fti-biens__nav {
		transition: none;
	}
}
