/**
 * Emaintenance 0.7.0 : couche « Immersion ».
 *
 * Chargée après experience.css, sur toutes les vues publiques. Sans bibliothèque.
 * 1. Premier écran de l'accueil : plein écran, titre révélé ligne à ligne, ligne de métiers
 *    qui défile, trame « plan technique », halo qui suit le pointeur, rangée des sept métiers.
 * 2. Bandeau de références défilant (H01b).
 * 3. Barre de progression de lecture, titres révélés, images en relief au défilement.
 * 4. Cartes : halo au survol et légère inclinaison (pointeur fin uniquement).
 * 5. Appel à l'action final : fond animé.
 *
 * Garde-fous (identiques aux couches précédentes) :
 * - « Réduire les animations » : tout est fixe et visible.
 * - Sans JavaScript : tout est visible ; seuls les effets décoratifs manquent.
 * - Le texte n'est jamais masqué durablement : les révélations se terminent toujours à l'état visible.
 * Préfixes : em-hero__* (accueil), em-trust__*, em-imm-*, variables --imm-*.
 */

/* ==========================================================================
   1. PREMIER ÉCRAN IMMERSIF
   ========================================================================== */
.em-hero--immersive {
	flex-direction: column;
	min-height: max(640px, 100svh);
}
.em-hero--immersive .em-hero__inner {
	flex: 1;
	align-items: center;
	padding-top: calc(var(--em-header-h) + clamp(1.5rem, 5vh, 4rem));
	padding-bottom: clamp(1.5rem, 4vh, 3rem);
}
@media (min-width: 1024px) {
	.em-hero--immersive .em-hero__inner { grid-template-columns: minmax(0, 1fr); }
}
.em-hero--immersive .em-hero__content { max-width: 58rem; }

/* Voile : plus dense à gauche pour le texte, ouvert à droite pour la vidéo. */
.em-hero--immersive .em-hero__shade {
	background:
		linear-gradient(90deg, rgb(2 19 20 / 0.92) 0%, rgb(2 19 20 / 0.74) 34%, rgb(2 19 20 / 0.28) 64%, rgb(2 19 20 / 0.18) 100%),
		linear-gradient(180deg, rgb(2 19 20 / 0.6) 0%, rgb(2 19 20 / 0) 24%, rgb(2 19 20 / 0) 58%, rgb(2 19 20 / 0.9) 100%);
}

/* Trame « plan technique » : quadrillage fin qui dérive lentement, estompé vers les bords. */
.em-hero__grid {
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background-image:
		linear-gradient(rgb(111 208 196 / 0.09) 1px, transparent 1px),
		linear-gradient(90deg, rgb(111 208 196 / 0.09) 1px, transparent 1px);
	background-size: 72px 72px;
	-webkit-mask-image: radial-gradient(120% 90% at 70% 40%, #000 0%, rgb(0 0 0 / 0.35) 55%, transparent 85%);
	mask-image: radial-gradient(120% 90% at 70% 40%, #000 0%, rgb(0 0 0 / 0.35) 55%, transparent 85%);
}
.em-hero__grid::after {
	/* Ligne de balayage, comme un relevé technique. */
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	top: 0;
	height: 22%;
	background: linear-gradient(180deg, transparent, rgb(111 208 196 / 0.08) 85%, rgb(111 208 196 / 0.32) 100%);
	opacity: 0;
}

/* Halo qui suit le pointeur (variables --imm-mx / --imm-my posées par immersive.js). */
.em-hero__glow {
	position: absolute;
	inset: 0;
	z-index: -1;
	pointer-events: none;
	background: radial-gradient(38rem 38rem at var(--imm-mx, 72%) var(--imm-my, 38%), rgb(111 208 196 / 0.16), transparent 62%);
	mix-blend-mode: screen;
	transition: opacity 600ms var(--em-ease-out);
}

/* Surtitre : point « en service » */
.em-hero__pulse {
	position: relative;
	display: inline-block;
	flex: none;
	width: 0.5rem;
	height: 0.5rem;
	border-radius: 50%;
	background: var(--em-soft);
	box-shadow: 0 0 0 0 rgb(111 208 196 / 0.6);
}

/* Titre : plus grand, révélé ligne par ligne derrière un masque. */
.em-hero--immersive .em-hero__title {
	font-size: clamp(2.5rem, 1.1rem + 4.6vw, 5.6rem);
	line-height: 0.98;
	letter-spacing: -0.028em;
	font-weight: 400;
}
.em-hero--immersive .em-hero__line {
	display: block;
	overflow: clip;
	padding-bottom: 0.06em;
	margin-bottom: -0.06em;
}
.em-hero__line-in { display: inline-block; }
.em-hero--immersive .em-hero__title .em-accent {
	color: var(--em-soft);
	font-style: italic;
}
@supports (-webkit-background-clip: text) or (background-clip: text) {
	.em-hero--immersive .em-hero__title .em-accent {
		background: linear-gradient(100deg, var(--em-soft) 10%, #b9f6df 50%, var(--em-soft) 90%);
		background-size: 220% 100%;
		-webkit-background-clip: text;
		background-clip: text;
		color: transparent;
	}
}

/* Ligne « Nous intervenons sur … » */
.em-hero__rotator {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: 0.15em 0.45em;
	margin-top: var(--em-space-m);
	font-family: var(--em-font-display);
	font-size: clamp(1.2rem, 0.95rem + 1vw, 1.85rem);
	line-height: 1.2;
	color: rgb(255 255 255 / 0.82);
}
.em-hero__rotator-window {
	position: relative;
	display: inline-grid;
	justify-items: start;
	color: #fff;
}
/* Soulignement dégradé sous le métier affiché (dessiné à l'entrée). */
.em-hero__rotator-word {
	padding-bottom: 0.16em;
	background: linear-gradient(90deg, var(--em-copper), var(--em-soft)) 0 100% / 100% 2px no-repeat;
}
/* Sans JS : tous les métiers, à la suite. Avec JS : un seul visible, empilés dans la même cellule. */
.em-hero__rotator-word + .em-hero__rotator-word::before { content: ", "; }
.em-imm-ready .em-hero__rotator-word + .em-hero__rotator-word::before { content: none; }
.em-imm-ready .em-hero__rotator-window { overflow: clip; }
.em-imm-ready .em-hero__rotator-word {
	grid-area: 1 / 1;
	white-space: nowrap;
	opacity: 0;
	transform: translate3d(0, 105%, 0);
	transition: transform 700ms var(--em-ease-out), opacity 500ms var(--em-ease-out);
}
.em-imm-ready .em-hero__rotator-word.is-on { opacity: 1; transform: none; }
.em-imm-ready .em-hero__rotator-word.is-out { opacity: 0; transform: translate3d(0, -105%, 0); }
@media (max-width: 599px) {
	.em-imm-ready .em-hero__rotator-word { white-space: normal; }
}

.em-hero--immersive .em-hero__intro { max-width: 36rem; }

/* Rangée des métiers : bas du premier écran */
.em-hero__metiers {
	position: relative;
	border-top: 1px solid rgb(255 255 255 / 0.12);
	background: linear-gradient(180deg, rgb(2 19 20 / 0.35), rgb(2 19 20 / 0.7));
}
@supports (backdrop-filter: blur(1px)) {
	.em-hero__metiers { backdrop-filter: blur(12px) saturate(1.2); }
}
.em-hero__metiers .em-container {
	display: flex;
	align-items: center;
	gap: var(--em-space-m);
	padding-block: 0.9rem;
}
.em-hero__metiers-title {
	flex: none;
	font-size: 0.6875rem;
	font-weight: 700;
	letter-spacing: var(--em-tracking-eyebrow);
	text-transform: uppercase;
	color: var(--em-soft);
}
.em-hero__metiers-list {
	display: flex;
	gap: 0.5rem;
	min-width: 0;
	overflow-x: auto;
	scrollbar-width: none;
	-webkit-mask-image: linear-gradient(90deg, #000 88%, transparent);
	mask-image: linear-gradient(90deg, #000 88%, transparent);
}
.em-hero__metiers-list::-webkit-scrollbar { display: none; }
@media (min-width: 1360px) {
	.em-hero__metiers-list { -webkit-mask-image: none; mask-image: none; flex: 1; justify-content: space-between; }
}
.em-hero__metier {
	display: inline-flex;
	align-items: center;
	gap: 0.55rem;
	min-height: var(--em-hit);
	padding: 0.35rem 0.85rem 0.35rem 0.4rem;
	border: 1px solid rgb(255 255 255 / 0.16);
	border-radius: var(--em-radius-pill);
	color: #fff;
	font-size: 0.8125rem;
	font-weight: 650;
	white-space: nowrap;
	text-decoration: none;
	transition: background-color var(--em-dur-base) var(--em-ease-out), border-color var(--em-dur-base), transform var(--em-dur-base) var(--em-ease-out);
}
.em-hero__metier-icon {
	display: grid;
	place-items: center;
	width: 2rem;
	height: 2rem;
	border-radius: 50%;
	background: rgb(111 208 196 / 0.14);
	color: var(--em-soft);
	transition: background-color var(--em-dur-base), color var(--em-dur-base);
}
.em-hero__metier-icon .em-icon { width: 1.05rem; height: 1.05rem; }
a.em-hero__metier:hover,
a.em-hero__metier:focus-visible {
	background: rgb(255 255 255 / 0.08);
	border-color: rgb(111 208 196 / 0.6);
	transform: translateY(-2px);
}
a.em-hero__metier:hover .em-hero__metier-icon,
a.em-hero__metier:focus-visible .em-hero__metier-icon { background: var(--em-soft); color: var(--em-night); }
@media (max-width: 767px) {
	.em-hero__metiers-title { display: none; }
	.em-hero__metiers .em-container { padding-inline: 0; }
	.em-hero__metiers-list { padding-inline: var(--em-gutter); }
}

/* Séquence d'entrée (remplace celle de la V8 sur ce bloc uniquement) */
@media (prefers-reduced-motion: no-preference) {
	.em-hero--immersive .em-hero__line { animation: none; }
	.em-hero--immersive .em-hero__line-in { animation: em-imm-line 1100ms var(--em-ease-out) both; animation-delay: calc(220ms + (var(--i, 1) - 1) * 120ms); }
	.em-hero--immersive .em-hero__rotator { animation: em-xp-rise 820ms var(--em-ease-out) 620ms both; }
	.em-hero--immersive .em-hero__intro { animation-delay: 760ms; }
	.em-hero--immersive .em-hero__actions { animation-delay: 860ms; }
	.em-hero--immersive .em-hero__foot { animation-delay: 1050ms; }
	.em-hero--immersive .em-hero__rotator-word { animation: em-imm-draw 900ms var(--em-ease-out) 900ms both; }
	.em-hero--immersive .em-hero__title .em-accent { animation: em-imm-sheen 5s ease-in-out 1.6s infinite; }
	.em-hero__pulse { animation: em-imm-ping 2.4s var(--em-ease-out) infinite; }
	.em-hero__grid { animation: em-imm-drift 28s linear infinite, em-xp-fade 1600ms var(--em-ease-out) both; }
	.em-hero__grid::after { animation: em-imm-scan 7s var(--em-ease-in-out) 1.4s infinite; }
	.em-hero__metiers { animation: em-imm-up 900ms var(--em-ease-out) 900ms both; }
	.em-hero__metiers-list > li { animation: em-xp-rise 700ms var(--em-ease-out) both; animation-delay: calc(1100ms + var(--m, 0) * 70ms); }

	/* Défilement : le contenu s'éloigne, le fond descend plus lentement (variable --imm-p de 0 à 1). */
	.em-imm-ready .em-hero--immersive [data-em-hero-content] {
		transform: translate3d(0, calc(var(--imm-p, 0) * -70px), 0);
		opacity: calc(1 - var(--imm-p, 0) * 0.85);
	}
	.em-imm-ready .em-hero--immersive [data-em-parallax="hero"] { transform: translate3d(0, calc(var(--imm-p, 0) * 18%), 0); }
}
@media (prefers-reduced-motion: no-preference) and (max-width: 767px) {
	.em-hero--immersive .em-hero__line-in { animation: em-xp-rise-s 520ms var(--em-ease-out) 80ms both; }
	.em-hero--immersive .em-hero__rotator { animation: em-xp-rise-s 520ms var(--em-ease-out) 120ms both; }
	.em-hero__metiers-list > li { animation: none; }
	.em-hero__glow { display: none; }
}
@media (hover: none) {
	.em-hero__glow { background: radial-gradient(34rem 34rem at 78% 30%, rgb(111 208 196 / 0.12), transparent 62%); }
}
@keyframes em-imm-line { from { transform: translate3d(0, 108%, 0) rotate(2deg); } }
@keyframes em-imm-draw { from { background-size: 0% 2px; } }
@keyframes em-imm-sheen { 0%, 100% { background-position: 100% 0; } 50% { background-position: 0 0; } }
@keyframes em-imm-ping { 0% { box-shadow: 0 0 0 0 rgb(111 208 196 / 0.6); } 70%, 100% { box-shadow: 0 0 0 0.6rem rgb(111 208 196 / 0); } }
@keyframes em-imm-drift { to { background-position: 72px 72px, 72px 72px; } }
@keyframes em-imm-scan { 0% { transform: translateY(-100%); opacity: 0; } 15% { opacity: 1; } 70% { opacity: 1; } 100% { transform: translateY(460%); opacity: 0; } }
@keyframes em-imm-up { from { opacity: 0.01; transform: translate3d(0, 100%, 0); } }

/* ==========================================================================
   2. BANDEAU DE RÉFÉRENCES DÉFILANT
   ========================================================================== */
.em-trust {
	padding-block: clamp(1.4rem, 1rem + 1.6vw, 2.4rem);
	border-bottom: 1px solid var(--em-line);
	overflow: hidden;
}
.em-trust__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 0.5rem var(--em-space-m);
	margin-bottom: clamp(0.9rem, 0.6rem + 1vw, 1.4rem);
}
.em-trust__title {
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: var(--em-tracking-eyebrow);
	text-transform: uppercase;
	color: var(--em-ink-muted);
}
.em-trust__viewport {
	display: flex;
	overflow: hidden;
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
	mask-image: linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent);
}
.em-trust__track {
	display: flex;
	align-items: center;
	flex: none;
	gap: clamp(2rem, 1rem + 3vw, 4rem);
	padding-right: clamp(2rem, 1rem + 3vw, 4rem);
}
.em-trust__item { display: grid; place-items: center; height: 3.5rem; }
.em-trust__item img {
	width: auto;
	max-width: 9rem;
	max-height: 2.8rem;
	object-fit: contain;
	filter: grayscale(1) contrast(1.05);
	opacity: 0.62;
	transition: filter 400ms var(--em-ease-out), opacity 400ms var(--em-ease-out);
}
.em-trust__item:hover img { filter: none; opacity: 1; }
@media (max-width: 767px) {
	.em-trust__item { height: 2.75rem; }
	.em-trust__item img { max-width: 6.5rem; max-height: 2rem; }
}
@media (prefers-reduced-motion: no-preference) {
	.em-trust__track { animation: em-imm-marquee 55s linear infinite; }
	.em-trust__viewport:hover .em-trust__track,
	.em-trust__viewport:focus-within .em-trust__track { animation-play-state: paused; }
}
@media (prefers-reduced-motion: reduce) {
	.em-trust__viewport { -webkit-mask-image: none; mask-image: none; }
	.em-trust__track { flex: 1; flex-wrap: wrap; justify-content: center; padding-inline: var(--em-gutter); row-gap: 1rem; }
	.em-trust__track--clone { display: none; }
}
@keyframes em-imm-marquee { to { transform: translate3d(-100%, 0, 0); } }

/* ==========================================================================
   3. DÉFILEMENT : progression, titres, images en relief
   ========================================================================== */

/* Barre de progression de lecture (navigateurs compatibles uniquement, sans JS). */
@supports (animation-timeline: scroll()) {
	@media (prefers-reduced-motion: no-preference) {
		body::after {
			content: "";
			position: fixed;
			top: 0;
			left: 0;
			right: 0;
			z-index: 300;
			height: 3px;
			background: linear-gradient(90deg, var(--em-soft), var(--em-copper));
			transform-origin: 0 50%;
			transform: scaleX(0);
			pointer-events: none;
			animation: em-imm-progress linear both;
			animation-timeline: scroll(root block);
		}
	}
}
@keyframes em-imm-progress { to { transform: scaleX(1); } }

/* Titres de section : remontent derrière un masque quand leur bloc apparaît (motion.js). */
@media (prefers-reduced-motion: no-preference) {
	.em-motion-ready [data-reveal] :is(h2) {
		clip-path: inset(0 0 100% 0);
		transform: translate3d(0, 0.35em, 0);
		transition: clip-path 1000ms var(--em-ease-out) 120ms, transform 1000ms var(--em-ease-out) 120ms;
	}
	.em-motion-ready [data-reveal].is-revealed :is(h2) { clip-path: inset(0 0 -0.2em 0); transform: none; }
}

/* Images en relief : la photo glisse plus lentement que la page dans son cadre. */
@supports (animation-timeline: view()) {
	@media (prefers-reduced-motion: no-preference) {
		.em-co__photo img,
		.em-teams__photo img,
		.em-teams__visual img,
		.em-cta__media img {
			animation: em-imm-parallax linear both;
			animation-timeline: view();
			animation-range: cover 0% cover 100%;
		}
	}
}
@keyframes em-imm-parallax {
	from { transform: scale(1.14) translate3d(0, -5%, 0); }
	to { transform: scale(1.14) translate3d(0, 5%, 0); }
}

/* Repères H02 : l'icône s'allume à l'apparition. */
@media (prefers-reduced-motion: no-preference) {
	.em-motion-ready .em-proofs__item.is-revealed .em-proofs__icon { animation: em-imm-pop 900ms var(--em-ease-out) both; animation-delay: calc(var(--reveal-index, 0) * 80ms + 200ms); }
}
.em-proofs__icon { transition: background-color var(--em-dur-base), color var(--em-dur-base), transform var(--em-dur-base) var(--em-ease-out); }
.em-proofs__item:hover .em-proofs__icon { background: var(--em-deep); color: #fff; transform: rotate(-8deg) scale(1.06); }
@keyframes em-imm-pop {
	0% { transform: scale(0.6); box-shadow: 0 0 0 0 rgb(10 95 88 / 0.35); }
	60% { transform: scale(1.08); box-shadow: 0 0 0 0.7rem rgb(10 95 88 / 0); }
	100% { transform: none; }
}

/* ==========================================================================
   4. CARTES : halo au survol et inclinaison (posés par immersive.js)
   ========================================================================== */
.em-imm-tilt { transform-style: preserve-3d; will-change: transform; }
.em-imm-spot {
	position: absolute;
	inset: 0;
	z-index: 2;
	pointer-events: none;
	border-radius: inherit;
	background: radial-gradient(22rem 22rem at var(--imm-sx, 50%) var(--imm-sy, 50%), rgb(255 255 255 / 0.2), transparent 60%);
	mix-blend-mode: soft-light;
	opacity: 0;
	transition: opacity 400ms var(--em-ease-out);
}
.em-imm-tilt.is-hover .em-imm-spot { opacity: 1; }
@media (prefers-reduced-motion: no-preference) and (hover: hover) and (pointer: fine) {
	.em-imm-tilt {
		transform: perspective(1000px) rotateX(var(--imm-rx, 0deg)) rotateY(var(--imm-ry, 0deg)) translate3d(0, var(--imm-lift, 0px), 0);
		transition: transform 500ms var(--em-ease-out), box-shadow 500ms var(--em-ease-out);
	}
	.em-imm-tilt.is-hover { --imm-lift: -4px; transition: transform 120ms linear, box-shadow 500ms var(--em-ease-out); }
}

/* Flèches rondes sur fond ambre : icône nuit (contraste). */
.em-xp__item:hover .em-round-arrow,
.em-xp__item:focus-within .em-round-arrow,
.em-sect__tile:hover .em-round-arrow,
.em-card-media:hover .em-round-arrow,
[data-em-motion="media-mask"] .em-xp__panel:focus-visible .em-round-arrow { color: var(--em-night); }

/* Boutons « aimantés » (immersive.js) */
[data-em-magnetic] { transform: translate3d(var(--imm-bx, 0px), var(--imm-by, 0px), 0); }

/* ==========================================================================
   5. APPEL À L'ACTION FINAL : fond animé
   ========================================================================== */
.em-cta::before {
	content: "";
	position: absolute;
	inset: -30%;
	z-index: -3;
	background:
		radial-gradient(40% 50% at 20% 30%, rgb(111 208 196 / 0.22), transparent 60%),
		radial-gradient(35% 45% at 70% 80%, rgb(111 208 196 / 0.18), transparent 60%);
	pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
	.em-cta::before { animation: em-imm-aurora 18s var(--em-ease-in-out) infinite alternate; }
}
@keyframes em-imm-aurora {
	0% { transform: translate3d(0, 0, 0) rotate(0deg); }
	100% { transform: translate3d(6%, -4%, 0) rotate(12deg); }
}

/* Section méthode : même trame que le premier écran, plus discrète. */
.em-method__bg::after {
	content: "";
	position: absolute;
	inset: 0;
	background-image:
		linear-gradient(rgb(111 208 196 / 0.05) 1px, transparent 1px),
		linear-gradient(90deg, rgb(111 208 196 / 0.05) 1px, transparent 1px);
	background-size: 72px 72px;
	-webkit-mask-image: linear-gradient(180deg, transparent, #000 30%, #000 70%, transparent);
	mask-image: linear-gradient(180deg, transparent, #000 30%, #000 70%, transparent);
	pointer-events: none;
}
