/* ============================================
   LJ Réalisations — Slider à barres de progression
   Image en fond + boutons glass en bas qui se remplissent comme une story.
   La dernière carte visible est volontairement coupée pour suggérer la suite.
   ============================================ */

.lj-rea-slider {
	--lj-rea-h: clamp(420px, 60vh, 640px);
	--lj-rea-radius: 22px;
	--lj-rea-text: #fff;
	--rea-pv-pc: 4;
	--rea-pv-mb: 1;
	--rea-peek: 0.3;

	position: relative;
	width: 100%;
	height: var(--lj-rea-h);
	border-radius: var(--lj-rea-radius);
	overflow: hidden;
	color: var(--lj-rea-text);
	isolation: isolate;
	box-sizing: border-box;
	box-shadow: 0 20px 50px rgba(0, 0, 0, 0.18);
}

.lj-rea-slider *,
.lj-rea-slider *::before,
.lj-rea-slider *::after {
	box-sizing: border-box;
}

/* ── Stage : images en fond ───────────────────── */
.lj-rea-slider__stage {
	position: absolute;
	inset: 0;
	z-index: 0;
}

.lj-rea-slider__bg {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	opacity: 0;
	transform: scale(1.04);
	transition: opacity 0.7s ease, transform 1.5s ease;
	pointer-events: none;
}

.lj-rea-slider__bg.is-active {
	opacity: 1;
	transform: scale(1);
}

.lj-rea-slider__scrim {
	position: absolute;
	inset: 0;
	background: linear-gradient(to top, rgba(0, 0, 0, 0.55) 0%, rgba(0, 0, 0, 0.15) 50%, rgba(0, 0, 0, 0.05) 100%);
	pointer-events: none;
}

/* ── Lien overlay : toute la zone stage cliquable vers la réalisation active ─ */
.lj-rea-slider__link {
	position: absolute;
	inset: 0;
	display: block;
	z-index: 1;
	text-decoration: none;
	color: #fff;
	-webkit-tap-highlight-color: transparent;
	cursor: pointer;
}

.lj-rea-slider__link:focus-visible {
	outline: 2px solid rgba(255, 124, 0, 0.85);
	outline-offset: -4px;
	border-radius: var(--lj-rea-radius);
}

/* Titre overlay top-left du stage (au-dessus de l'image, sous le scrim haut). */
.lj-rea-slider__heading {
	position: absolute;
	top: 16px;
	left: 18px;
	right: auto;
	z-index: 2;
	margin: 0;
	padding: 0;
	font-size: clamp(1.05rem, 2vw, 1.4rem);
	font-weight: 700;
	line-height: 1.15;
	letter-spacing: -0.01em;
	color: #fff;
	max-width: 60%; /* évite que le titre touche la pill "Voir →" à droite */
	text-shadow:
		0 2px 12px rgba(0, 0, 0, 0.6),
		0 1px 3px rgba(0, 0, 0, 0.5);
	pointer-events: none;
}

.lj-rea-slider__hint {
	position: absolute;
	top: 16px;
	right: 16px;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 7px 14px;
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.16);
	border: 1px solid rgba(255, 255, 255, 0.4);
	color: #fff;
	font-size: 0.78rem;
	font-weight: 600;
	letter-spacing: 0.01em;
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
	opacity: 0.85;
	transition: opacity 0.25s ease, background 0.25s ease, gap 0.3s ease;
}

/* Mobile : la pill devient juste "Voir →" pour libérer de la place à côté du titre. */
@media (max-width: 767px) {
	.lj-rea-slider__hint-rest {
		display: none;
	}
}

.lj-rea-slider__hint svg {
	transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}

.lj-rea-slider__link:hover .lj-rea-slider__hint,
.lj-rea-slider__link:focus-visible .lj-rea-slider__hint {
	opacity: 1;
	background: rgba(255, 124, 0, 0.32);
	border-color: rgba(255, 124, 0, 0.6);
	gap: 10px;
}

.lj-rea-slider__link:hover .lj-rea-slider__hint svg,
.lj-rea-slider__link:focus-visible .lj-rea-slider__hint svg {
	transform: translateX(2px);
}

/* ── Wrap des boutons ─────────────────────────── */
.lj-rea-slider .lj-rea-slider__btns-wrap {
	position: absolute !important;
	left: 0 !important;
	right: 0 !important;
	bottom: 0 !important;
	top: auto !important;       /* certains thèmes/Elementor poussent un top:0 qui étire */
	height: auto !important;
	z-index: 2;
	overflow: hidden;
	padding: 12px;
	margin: 0 !important;
}

/* ── Rail : grille avec largeur de carte calculée pour l'effet peek ──
   col_w = (100% - pv * gap) / (pv + peek)
   La (pv + 1)ᵉ carte dépasse à droite (peek * col_w), suggérant la suite.
   Le rail se translate par batch entier (pv cartes à la fois). */
.lj-rea-slider .lj-rea-slider__btns {
	--pv: var(--rea-pv-mb);
	--gap: 10px;
	--col-w: calc((100% - (var(--gap) * var(--pv))) / (var(--pv) + var(--rea-peek, 0)));

	width: 100% !important;
	height: auto !important;
	min-height: 0 !important;
	max-height: none !important;
	display: grid !important;
	grid-auto-flow: column;
	grid-auto-columns: var(--col-w);
	grid-auto-rows: auto !important;
	gap: var(--gap);
	align-items: end !important;     /* empêche le stretch vertical des boutons quand le wrap est étiré */
	justify-content: start !important; /* contre les éventuels space-between hérités d'Elementor */
	transform: translateX(calc(-1 * var(--batch, 0) * (var(--pv) * var(--col-w) + var(--pv) * var(--gap))));
	transition: transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
	will-change: transform;
	margin: 0 !important;
	padding: 0 !important;
}

/* Spécificité bumpée pour battre la règle de base (.lj-rea-slider .lj-rea-slider__btns)
   qui sinon écrase le switch PC du --pv. */
@media (min-width: 768px) {
	.lj-rea-slider .lj-rea-slider__btns {
		--pv: var(--rea-pv-pc);
		--gap: 14px;
	}
}

/* ── Bouton individuel ────────────────────────── */
.lj-rea-slider .lj-rea-slider__btn {
	position: relative !important;
	display: block !important;
	padding: 14px 16px !important;
	margin: 0 !important;
	border-radius: 14px !important;
	text-decoration: none !important;
	color: inherit;
	width: auto !important;
	height: 86px !important;
	min-height: 86px !important;
	max-height: 86px !important;        /* CRITIQUE : verrouille la hauteur quoi qu'arrive */
	align-self: end !important;
	overflow: hidden;
	isolation: isolate;
	transition: opacity 0.25s ease;
	box-sizing: border-box !important;
}

.lj-rea-slider .lj-rea-slider__btn:hover {
	transform: none !important; /* annule l'élévation par défaut de .lj-glass dans ce contexte */
}

/* ── Fill story : barre blanche pilotée par --rea-progress ─
   !important obligatoire : .lj-glass > * du thème force position: relative
   sur tous les enfants directs, ce qui casse l'absolute. */
.lj-rea-slider .lj-rea-slider__btn .lj-rea-slider__btn-progress {
	position: absolute !important;
	left: 0 !important;
	top: 0 !important;
	bottom: 0 !important;
	right: auto !important;
	width: var(--rea-progress, 0%);
	height: auto !important;
	background: rgba(255, 255, 255, 0.95);
	z-index: 1 !important;
	margin: 0 !important;
	padding: 0 !important;
	pointer-events: none;
	will-change: width;
	transition: background 0.3s ease;
}

/* ── Texte : deux couches superposées (clip pour inverser au passage du fill) ─ */
.lj-rea-slider__btn-content {
	display: block;
}

/* Le défaut hérite du `.lj-glass > * { position: relative; z-index: 2; color: #fff; }`
   du thème pour le wrapper et le h3 (par héritage). En revanche le <p> est souvent
   ciblé par des règles génériques du thème (style.css `p { color: ... }`,
   `.entry-content p`, etc.) qui écrasent l'héritage — donc on force le blanc. */
.lj-rea-slider__btn-content--default {
	color: #fff;
}

.lj-rea-slider .lj-rea-slider__btn-content--default .lj-rea-slider__btn-title,
.lj-rea-slider .lj-rea-slider__btn-content--default .lj-rea-slider__btn-meta {
	color: #fff !important;
}

/* L'inversé doit forcer absolute + couleur noire + suppression text-shadow,
   sinon `.lj-glass > *` le coince en relative blanc avec ombre. */
.lj-rea-slider .lj-rea-slider__btn .lj-rea-slider__btn-content--inverted {
	position: absolute !important;
	top: 0 !important;
	left: 0 !important;
	right: 0 !important;
	bottom: 0 !important;
	width: auto !important;
	height: auto !important;
	margin: 0 !important;
	padding: 14px 16px !important; /* identique au padding du bouton, pour aligner pile */
	z-index: 3 !important;
	color: #111 !important;
	text-shadow: none !important;
	pointer-events: none;
	/* Affichage uniquement de la portion couverte par le fill blanc. */
	clip-path: inset(0 calc(100% - var(--rea-progress, 0%)) 0 0);
	-webkit-clip-path: inset(0 calc(100% - var(--rea-progress, 0%)) 0 0);
}

/* Forcer aussi la couleur noire sur les enfants (h3, p) sinon ils restent blancs. */
.lj-rea-slider .lj-rea-slider__btn-content--inverted .lj-rea-slider__btn-title,
.lj-rea-slider .lj-rea-slider__btn-content--inverted .lj-rea-slider__btn-meta {
	color: #111 !important;
	text-shadow: none !important;
}

.lj-rea-slider__btn-title {
	margin: 0 0 4px;
	font-size: 0.95rem;
	font-weight: 700;
	line-height: 1.25;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.lj-rea-slider__btn-meta {
	margin: 0;
	font-size: 0.8rem;
	opacity: 0.85;
	letter-spacing: 0.01em;
}

/* La version inversée (noire) n'a pas besoin de l'opacité réduite : le contraste
   blanc-fond/noir-texte est déjà suffisant. */
.lj-rea-slider__btn-content--inverted .lj-rea-slider__btn-meta {
	opacity: 0.7;
}

/* Bouton inactif : opacité réduite, mais reste cliquable (jump direct vers ce slide) */
.lj-rea-slider__btn:not(.is-active) {
	opacity: 0.7;
	--rea-progress: 0%;
}

.lj-rea-slider__btn.is-active {
	opacity: 1;
}

/* A11y */
@media (prefers-reduced-motion: reduce) {
	.lj-rea-slider__bg,
	.lj-rea-slider__btns,
	.lj-rea-slider__btn-progress {
		transition: none !important;
	}
}
