/* Front page: the seven "temps" of the scroll story, ported from the validated prototype v3. */

:root {
	--pied-marge: 0;
	--vague-fond: var(--gris);
}

.accueil :where(p, h1, h2, h3, ul, ol, figure, blockquote) {
	margin: 0;
}

.kicker {
	font: 600 calc(.875 * var(--rem))/1.4 var(--f-titre);
	text-transform: uppercase;
	letter-spacing: .05em;
}

.av-ligne { margin-top: 8px; }
.mention { font-size: calc(.875 * var(--rem)); line-height: 1.5; }
.chapo { font-size: calc(1.125 * var(--rem)); line-height: 1.6; }

.chiffre {
	font: 300 calc(clamp(2.773rem, 2.773rem + (100vw - 20rem) * .01614, 3.483rem) + 3.483 * var(--wp--custom--croissance))/1.1 var(--f-titre);
	font-variant-numeric: tabular-nums;
	letter-spacing: -.01em;
}

.encadre {
	border-left: 3px solid var(--bleu);
	background: var(--blanc);
	padding: 20px 20px 20px 24px;
	border-radius: 0 8px 8px 0;
}

.lien-ligne a {
	display: inline-flex;
	align-items: center;
	min-height: 48px;
}

.coupe-symbole { position: absolute; }

/* Sections */
/* Design system § 4: 48 px between sections on phones, 72 px from 600 px (the phone home was 16 screens long). */
.section { padding-block: 48px; }
@media (min-width: 600px) { .section { padding-block: 72px; } }
@media (min-width: 900px) { .section { padding-block: 120px; } }

.fond-gris { background: var(--gris); }

.wp-block-post-content > section,
.temps-ouverture > section {
	overflow-x: clip;
	position: relative;
	z-index: 1;
	background: var(--blanc);
}

.wp-block-post-content > section.fond-gris { background: var(--gris); }

/* Below 900 px the block generates no box: photo and text follow each other in the flow of the page. */
.temps-ouverture { display: contents; }

.tete-section { max-width: calc(46 * var(--rem)); margin-bottom: 40px; }
.tete-section .kicker { margin-bottom: 12px; }
@media (min-width: 900px) { .tete-section { margin-bottom: 56px; } }

/* 1. Ouverture */
.ouverture { padding-block: 24px 72px; }
.ouverture .contenu { display: grid; gap: 24px; }
.ouverture .kicker { margin-bottom: 16px; }
.ouverture h1 .ligne { display: block; }
.ouverture .chapo { margin-top: 20px; max-width: 32em; }
.ouverture .invite { margin-top: 16px; }

.invite a {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	min-height: 48px;
	font-weight: 600;
}

.invite a::after {
	content: "";
	flex: none;
	width: 20px;
	height: 20px;
	background: currentColor;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center / contain no-repeat;
}

.hero-cadre {
	--photo-h: max(46svh, 300px);
	position: relative;
	z-index: 0;
	width: min(100% - 2 * var(--g), var(--largeur));
	height: var(--photo-h);
	margin: 16px auto 0;
	border-radius: 8px;
	overflow: hidden;
	background: var(--gris);
}

.hero-cadre :is(img, video) {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 50% 12%;
}

.hero-cadre picture { display: contents; }

/* Phone: title, sentence and "Trouver mon modèle" first, then the photo at 40 % of the screen (Alexis, 24/10: the
   photo used to fill the whole first screen). */
@media (max-width: 599.98px) {
	.temps-ouverture { display: flex; flex-direction: column; }
	.temps-ouverture > section.ouverture { order: -1; padding-block: 16px 24px; }
	.hero-cadre { --photo-h: 40svh; margin-top: 0; }
}

/* Desktop: the text is laid over the left of the photo's band, and both scroll as one block (25/10: a sticky photo let
   the title rise alone under the header). */
@media (min-width: 900px) {
	.hero-cadre {
		--photo-h: min(calc(100svh - var(--hh) - 96px), 760px);
		width: calc(min(100% - 2 * var(--g), var(--largeur)) * .42);
		margin: 48px calc((100% - min(100% - 2 * var(--g), var(--largeur))) / 2) 0 auto;
	}

	.hero-cadre :is(img, video) { object-position: 50% 38%; }

	.temps-ouverture {
		--photo-h-bureau: min(calc(100svh - var(--hh) - 96px), 760px);
		display: block;
		position: relative;
	}

	.temps-ouverture > section.ouverture {
		margin-top: calc(-1 * var(--photo-h-bureau));
		min-height: var(--photo-h-bureau);
		padding-block: max(0px, calc(var(--photo-h-bureau) / 2 - 240px)) 0;
		background: transparent;
		display: grid;
		align-content: start;
	}

	.ouverture .ouverture-texte { max-width: 52%; background: var(--blanc); }
}

/* Large screens: the photo (or video) takes the right half of the window, full height under the header, edge to edge. */
@media (min-width: 1680px) {
	.hero-cadre {
		--photo-h: calc(100svh - var(--hh));
		width: 50%;
		margin: 0 0 0 auto;
		border-radius: 0;
	}

	.temps-ouverture { --photo-h-bureau: calc(100svh - var(--hh)); }
	.ouverture .ouverture-texte { max-width: calc(50% - 64px); }
}

/* 2. Le geste */
.temps-geste { padding-top: 72px; }
.geste-scene { width: min(100% - 2 * var(--g), var(--largeur)); margin-inline: auto; }
.geste-visuel { display: none; }
.etapes { margin: 40px 0 0; display: grid; gap: 40px; }
.etape { display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: 16px; align-items: start; }
.coupe-mini { grid-column: 1 / -1; height: 200px; width: auto; margin-inline: auto; }

.pastille {
	width: 40px;
	height: 40px;
	border-radius: 50%;
	border: 2px solid var(--ardoise);
	background: var(--blanc);
	display: grid;
	place-items: center;
	font: 600 calc(1 * var(--rem))/1 var(--f-titre);
}

.etape p { padding-top: 7px; }
.geste-fin { padding-block: 48px 72px; display: grid; gap: 12px; }
.geste-ligne { font: 600 calc(1.25 * var(--rem))/1.4 var(--f-titre); }
.geste-fin .mention { max-width: calc(40 * var(--rem)); }

@media (min-width: 900px) {
	.etapes { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.geste-fin { padding-block: 64px 120px; }
}

/* Cross-section drawing, driven by --p (0 → 1). No .coupe ancestor in the selectors: the content of a <use> is
   matched in the <symbol> tree, only --p inherits from the instance. */
.sc-cuve { fill: var(--gris); stroke: var(--ardoise); stroke-width: 2; }
.sc-inox { fill: var(--gris-bleu); stroke: var(--ardoise); stroke-width: 2; }
.sc-socle { fill: var(--ardoise); }
.sc-filtre { fill: var(--ardoise); }
.sc-eau { fill: var(--cyan); fill-opacity: .3; transform-box: fill-box; transform-origin: 50% 100%; }
.sc-eau-haut { transform: scaleY(clamp(0, calc(min(var(--p) / .33, 1) - clamp(0, (var(--p) - .33) / .33, 1) * .92), 1)); }
.sc-eau-bas { transform: scaleY(clamp(0, calc(clamp(0, (var(--p) - .33) / .33, 1) * .8 + clamp(0, (var(--p) - .66) / .14, 1) * .2), 1)); }
.sc-surface { stroke: var(--cyan); stroke-width: 2; }
.sc-surface-haut { transform: translateY(calc((1 - clamp(0, calc(min(var(--p) / .33, 1) - clamp(0, (var(--p) - .33) / .33, 1) * .92), 1)) * 148px)); opacity: clamp(0, calc(var(--p) * 20), 1); }
.sc-surface-bas { transform: translateY(calc((1 - clamp(0, calc(clamp(0, (var(--p) - .33) / .33, 1) * .8 + clamp(0, (var(--p) - .66) / .14, 1) * .2), 1)) * 174px)); opacity: clamp(0, calc((var(--p) - .34) * 20), 1); }
.sc-filet { stroke: var(--cyan); stroke-width: 2; stroke-linecap: round; stroke-dasharray: 6 10; opacity: clamp(0, min((var(--p) - .33) / .04, (.7 - var(--p)) / .04), 1); }
.sc-robinet { fill: none; stroke: var(--ardoise); stroke-width: 6; stroke-linecap: round; stroke-linejoin: round; }
.sc-anneau { fill: none; stroke: var(--cyan); stroke-width: 3; transform-box: fill-box; transform-origin: 50% 50%; opacity: clamp(0, (var(--p) - .7) / .1, 1); transform: scale(calc(.6 + clamp(0, (var(--p) - .7) / .1, 1) * .4)); }

/* 3. Dedans */
.dedans-grille { display: grid; gap: 40px; }
.dedans-texte .kicker { margin-bottom: 12px; }
.dedans-texte p { margin-top: 20px; max-width: calc(36 * var(--rem)); }
.element-cadre { position: relative; padding: 24px; max-width: calc(420px + var(--gain) * .29); width: 100%; justify-self: center; }
.element-cadre img { position: relative; z-index: 1; width: auto; height: clamp(260px, 40vw, 360px + var(--gain) * .29); margin-inline: auto; }
.disque { position: absolute; z-index: 0; inset: 0; margin: auto; width: min(56%, 220px + var(--gain) * .177); height: auto; aspect-ratio: 1; }
.disque-anneau { fill: none; stroke: var(--bleu); stroke-width: 20; stroke-dasharray: 1257 0; transform: rotate(-90deg); transform-origin: center; transform-box: fill-box; }
.disque-fond { fill: var(--cyan); }
.chiffres { display: grid; gap: 0; }
.chiffres > * { border-top: 1px solid var(--gris-bleu); padding-block: 20px; }
.chiffre-pre { font: 600 calc(.875 * var(--rem))/1.4 var(--f-titre); text-transform: uppercase; letter-spacing: .05em; margin-bottom: 4px; }
.chiffres .legende { margin-top: 4px; }
.contaminants-titre { font-weight: 600; margin-bottom: 8px; }
.contaminants { list-style: none; padding: 0; display: grid; gap: 4px; margin-bottom: 32px; }
.contaminants li { position: relative; padding-left: 24px; }
.contaminants li::before { content: ""; position: absolute; left: 0; top: .8em; width: 12px; height: 2px; background: var(--cyan); }

@media (min-width: 900px) {
	.dedans-grille {
		grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
		grid-template-areas: "img texte" "img suite" "chiffres chiffres";
		column-gap: 72px;
		row-gap: 40px;
	}

	.dedans-texte { grid-area: texte; }
	.element-cadre { grid-area: img; align-self: center; }
	.chiffres { grid-area: chiffres; grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 32px; }
	.dedans-suite { grid-area: suite; }
	.contaminants { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 24px; }
}

/* 4. La preuve */
.cartes { display: grid; gap: 20px; }
.carte { border: 1px solid var(--gris-bleu); border-radius: 8px; padding: 24px; display: flex; flex-direction: column; gap: 16px; background: var(--blanc); }
.carte .badge { width: 240px; }
.carte .badge img { width: 100%; height: auto; }
.carte .lien-ligne { margin-top: auto; }
.carte .lien-ligne a { font-weight: 600; }

@media (min-width: 900px) {
	.cartes { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px; }
	.carte { padding: 32px; }
}

/* 5. Au quotidien */
.quotidien-grille { display: grid; gap: 48px; }
.jauge-titre { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: 10px; font: 600 calc(1.125 * var(--rem))/1.3 var(--f-titre); }
.jauge-piste { height: 12px; border-radius: 4px; background: var(--blanc); border: 1px solid var(--gris-bleu); overflow: hidden; margin-block: 16px; }
.jauge-plein { height: 100%; background: var(--cyan); transform-origin: 0 50%; }
.rythmes { padding: 0 0 0 36px; position: relative; display: grid; gap: 32px; }
.rythmes::before { content: ""; position: absolute; left: 7px; top: 8px; bottom: 8px; width: 2px; background: var(--gris-bleu); transform-origin: 50% 0; }
.rythmes > * { position: relative; }
.rythmes > *::before { content: ""; position: absolute; left: -36px; top: 6px; width: 16px; height: 16px; border-radius: 50%; background: var(--gris); border: 2px solid var(--ardoise); }
.rythmes p { margin-top: 6px; }
.temps-quotidien .encadre { display: grid; gap: 12px; margin-top: 48px; }
.temps-quotidien .encadre .lien-bouton { justify-self: start; }

@media (min-width: 900px) {
	.quotidien-grille { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 72px; }
}

/* 6. Qui est derrière */
.derriere-grille { display: grid; gap: 32px; }
.chemin { display: flex; gap: 12px; overflow-x: auto; scroll-snap-type: x mandatory; margin-inline: calc(-1 * var(--g)); padding-inline: var(--g); scroll-padding-inline: var(--g); scrollbar-width: thin; }
.chemin figure { flex: 0 0 84%; scroll-snap-align: start; border-radius: 8px; overflow: hidden; background: var(--gris); aspect-ratio: 16 / 10; }
.chemin img { width: 100%; height: 100%; object-fit: cover; }
.coordonnees { list-style: none; padding: 0; display: grid; gap: 12px; }
.coordonnees strong { display: block; font-weight: 600; }
.coordonnees a { display: inline-flex; align-items: center; min-height: 48px; font-size: calc(1.125 * var(--rem)); }
.avis { display: grid; gap: 14px; }
.note { display: flex; align-items: baseline; gap: 10px; }
.note-sur { font: 600 calc(1.125 * var(--rem))/1.3 var(--f-titre); }
.note-nb { font-weight: 600; margin-top: -8px; }
.citation { border: 1px solid var(--gris-bleu); border-radius: 8px; padding: 16px 20px; }
.citation cite { display: block; margin-top: 8px; font-style: normal; font-size: calc(.875 * var(--rem)); }

@media (min-width: 900px) {
	.derriere-grille {
		grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
		grid-template-areas: "chemin intro" "chemin coord" "chemin avis";
		column-gap: 72px;
		row-gap: 56px;
		align-items: start;
	}

	.derriere-intro { grid-area: intro; }
	.derriere-coord { grid-area: coord; }
	.avis { grid-area: avis; }
	.chemin { grid-area: chemin; margin: 0; padding: 0; overflow: visible; flex-direction: column; gap: 20px; align-self: start; }
	.chemin figure { flex: none; width: 100%; }
}

/* 7. Lequel est fait pour vous ? */
.temps-choix .tete-section p:not(.kicker) { margin-top: 20px; }
.selecteur { margin-bottom: 32px; }
.selecteur-titre { font: 600 calc(1.125 * var(--rem))/1.4 var(--f-titre); margin-bottom: 12px; }
.selecteur-boutons { display: flex; flex-wrap: wrap; gap: 8px; }
.selecteur button { min-height: 48px; min-width: 48px; padding: 0 18px; border-radius: 4px; border: 1px solid var(--ardoise); background: var(--blanc); color: var(--ardoise); font: 600 calc(1 * var(--rem))/1 var(--f-titre); cursor: pointer; }
.selecteur button[aria-pressed="true"] { background: var(--ardoise); color: var(--blanc); }
.gamme { display: flex; align-items: flex-end; justify-content: space-between; gap: 8px; padding-bottom: 24px; }
.gamme figure { position: relative; flex: 0 1 calc(var(--w) * 1px); min-width: 0; margin: 0; }
.gamme figure::before { content: ""; position: absolute; left: -6%; right: -6%; bottom: 0; aspect-ratio: 8 / 1; translate: 0 50%; background: radial-gradient(closest-side, color-mix(in srgb, var(--ardoise) 34%, transparent), transparent); }
.gamme a { display: block; }
.gamme img { display: block; width: 100%; height: auto; transform: translateY(var(--sol)); }
/* --w: file width in px (all five files share one px/cm scale); --sol: share of the image hanging below the floor line (the spigot). */
.gamme-travel { --w: 198; --sol: 3.18%; }
.gamme-big { --w: 222; --sol: 6.16%; }
.gamme-royal { --w: 253; --sol: 6.32%; }
.gamme-imperial { --w: 280; --sol: 3.59%; }
.gamme-crown { --w: 299; --sol: 1.73%; }
.gamme.filtre figure:not(.retenu) img { opacity: .35; filter: grayscale(1); }
.gamme.filtre figure:not(.retenu)::before { opacity: .35; }
.systemes { display: grid; gap: 12px; margin-top: 24px; }
.systeme { --carte-pad: calc(20px + var(--gain) * .01818); position: relative; min-height: 48px; padding: calc(12px + var(--gain) * .01818) var(--carte-pad) calc(18px + var(--gain) * .01818); border: 1px solid var(--gris-bleu); border-radius: 8px; background: var(--blanc); }
.systeme h3 { font-size: calc(1.125 * var(--rem)); }
.systeme h3 a { text-decoration: none; }
.systeme h3 a::before { content: ""; position: absolute; inset: 0; border-radius: 8px; }
.systeme h3 a:focus-visible { outline: none; }
.systeme:has(a:focus-visible) { outline: 2px solid var(--ardoise); outline-offset: 3px; }
.systeme h3 + p { margin-top: 4px; }
.pour-vous { display: none; font: 600 calc(.875 * var(--rem))/1.4 var(--f-titre); text-transform: uppercase; letter-spacing: .05em; margin-bottom: 2px; }
.systeme::after { content: ""; position: absolute; left: var(--carte-pad); right: var(--carte-pad); bottom: 6px; height: 3px; background: var(--cyan); transform: scaleX(0); transform-origin: 0 50%; transition: transform .35s var(--ease); }
.systeme.retenu { border-color: var(--ardoise); box-shadow: 0 0 0 .5px var(--ardoise); }
.systeme.retenu .pour-vous { display: block; visibility: visible; }
.systeme.retenu::after { transform: scaleX(1); }
.choisir-fin { margin-top: 40px; display: grid; gap: 16px; justify-items: start; }

/* Tablet: two columns of cards instead of five lines stretched across 714 px. */
@media (min-width: 600px) and (max-width: 899.98px) {
	.systemes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 900px) {
	.systemes { grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--choix-air); }
	.pour-vous { display: block; visibility: hidden; }
	/* The five systems keep one px/cm scale: the Crown is 187 px wide up to 1 440 px, then grows with the content width. */
	.temps-choix { --choix-air: calc(16px + var(--gain) * .03636); }
	.gamme { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); align-items: end; justify-items: center; gap: var(--choix-air); padding-bottom: 40px; }
	.gamme figure { width: calc(min(100%, max(187px, var(--largeur) * .150806)) * var(--w) / 299); }
}

/* Movement: only with JavaScript and no reduced-motion preference. Texts only fade, in place: a text that slid in
   passed over the one above it (25/10); images and drawings may move, never over a text. */
@media (prefers-reduced-motion: no-preference) {
	html:not(.lenis) { scroll-behavior: smooth; }

	/* Opening: its texts are sharp from the first frame (25/10); only the photo settles, inside its own frame. */
	.js .hero-cadre :is(img, video) { animation: recul 1.1s cubic-bezier(.2, .7, .2, 1) both; }
	.js .invite a::after { animation: invite 2.4s ease-in-out 1.5s 3; }

	/* Dedans sequence: ring 1 s, colour 1 s after 1 s, figures 450 ms each 250 ms apart. */
	.js .element-cadre .disque-anneau { stroke-dasharray: 0 1257; }
	.js .element-cadre .disque-fond { fill: transparent; }
	.js .element-cadre.is-joue .disque-anneau { animation: anneau 1s linear forwards; }
	.js .element-cadre.is-joue .disque-fond { animation: disque 1s cubic-bezier(.25, .46, .45, .94) 1s forwards; }
	.js .chiffres > * { transition: opacity 450ms cubic-bezier(.25, .46, .45, .94); transition-delay: calc(var(--decal, 0ms) + var(--i, 0) * 250ms); }
	.js .chiffres:not(.is-joue) > * { opacity: 0; }

	.js .rv { transition: opacity .7s var(--ease); transition-delay: calc(var(--i, 0) * 120ms); }
	.js .rv:not(.is-in) { opacity: 0; }
	.js .contaminants .rv { transition-delay: calc(var(--i, 0) * 80ms); }
	.js .element-cadre.rv { transition-property: opacity, transform; transition-duration: 1s; }
	.js .element-cadre.rv:not(.is-in) { transform: translateY(40px) rotate(-8deg); }
	.js .jauge-plein { transition: transform 1.4s var(--ease); }
	.js .jauge:not(.is-in) .jauge-plein { transform: scaleX(0); }
	.js .rythmes::before { transition: transform 1.2s var(--ease); }
	.js .rythmes:not(.is-in)::before { transform: scaleY(0); }
	.js .rythmes > * { transition: opacity .6s var(--ease); transition-delay: calc(var(--i, 0) * 300ms + 200ms); }
	.js .rythmes:not(.is-in) > * { opacity: 0; }
	.gamme img,
	.gamme figure::before { transition: opacity .35s var(--ease), filter .35s var(--ease); }
	.js .gamme figure { transition: opacity .7s var(--ease), transform .7s var(--ease); transition-delay: calc(var(--i, 0) * 120ms); }
	.js .gamme:not(.is-in) figure { opacity: 0; transform: translateY(28px); }

	/* Sticky sequence of temps 2 */
	.js .temps-geste { padding-top: 0; }
	.js .geste-piste { height: 260vh; }
	.js .geste-scene { position: sticky; top: var(--hh); height: calc(100svh - var(--hh)); display: grid; grid-template-rows: auto minmax(0, 1fr) auto; gap: 16px; padding-block: 20px 24px; }
	.js .geste-visuel { display: flex; justify-content: center; min-height: 0; }
	.js .coupe-grande { height: 100%; width: auto; }
	.js .coupe-mini { display: none; }
	.js .etapes { margin: 0; }
	.js .pastille { transition: background-color .3s, color .3s, border-color .3s; }
	.js .etape:nth-child(n) .pastille { border-color: var(--gris-bleu); }
	.js .geste-scene[data-step="1"] .etape:nth-child(-n+1) .pastille,
	.js .geste-scene[data-step="2"] .etape:nth-child(-n+2) .pastille,
	.js .geste-scene[data-step="3"] .etape:nth-child(-n+3) .pastille { border-color: var(--ardoise); }
	.js .geste-scene[data-step="1"] .etape:nth-child(1) .pastille,
	.js .geste-scene[data-step="2"] .etape:nth-child(2) .pastille,
	.js .geste-scene[data-step="3"] .etape:nth-child(3) .pastille { background: var(--ardoise); color: var(--blanc); }
	.js .etape p { box-shadow: inset 0 0 0 var(--cyan); transition: box-shadow .3s, padding .3s; }
	.js .geste-scene[data-step="1"] .etape:nth-child(1) p,
	.js .geste-scene[data-step="2"] .etape:nth-child(2) p,
	.js .geste-scene[data-step="3"] .etape:nth-child(3) p { font-weight: 600; box-shadow: inset 3px 0 0 var(--cyan); padding-left: 14px; }
	.js .sc-filet { animation: filet .9s linear infinite; }
}

@media (prefers-reduced-motion: no-preference) and (max-width: 899.98px) {
	.js .etapes { position: relative; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: auto minmax(calc(4.8em + 14px), auto); gap: 0; }
	.js .etapes::before,
	.js .etapes::after { content: ""; position: absolute; top: 19px; left: 16.67%; right: 16.67%; height: 2px; background: var(--gris-bleu); }
	.js .etapes::after { background: var(--cyan); transform-origin: 0 50%; transform: scaleX(var(--p, 0)); }
	.js .etape { display: contents; }
	.js .pastille { grid-row: 1; justify-self: center; position: relative; z-index: 1; }
	.js .etape:nth-child(1) .pastille { grid-column: 1; }
	.js .etape:nth-child(2) .pastille { grid-column: 2; }
	.js .etape:nth-child(3) .pastille { grid-column: 3; }
	/* The three steps share one place: the leaving one goes at once, the next one fades in, so two never cross. */
	.js .etape p { grid-row: 2; grid-column: 1 / -1; align-self: start; margin-top: 14px; padding-top: 0; opacity: 0; transition: none; }
	.js .geste-scene[data-step="1"] .etape:nth-child(1) p,
	.js .geste-scene[data-step="2"] .etape:nth-child(2) p,
	.js .geste-scene[data-step="3"] .etape:nth-child(3) p { opacity: 1; transition: opacity .35s; }
	.js .chemin .rv-x { transition: opacity .7s var(--ease), transform .7s var(--ease); transition-delay: calc(var(--i, 0) * 120ms); }
	.js .chemin:not(.is-in) .rv-x { opacity: 0; transform: translateX(48px); }
}

@media (prefers-reduced-motion: no-preference) and (min-width: 900px) {
	.js .geste-piste { height: 300vh; }
	.js .geste-scene { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-rows: auto auto 1fr; column-gap: 72px; row-gap: 40px; padding-block: 48px; }
	.js .geste-tete { grid-column: 1; grid-row: 1; }
	.js .geste-visuel { grid-column: 2; grid-row: 1 / 4; }
	.js .geste-scene > .geste-fin { grid-column: 1; grid-row: 3; align-self: start; width: auto; margin: 0; padding: 32px 0 0; border-top: 1px solid var(--gris-bleu); }
	.js .etapes { grid-column: 1; grid-row: 2; align-self: start; grid-template-columns: none; gap: 40px; }
	.js .etape { position: relative; }
	.js .etape p { font-size: calc(1.125 * var(--rem)); }
	.js .etape:not(:last-child)::before,
	.js .etape:not(:last-child)::after { content: ""; position: absolute; left: 19px; top: 44px; bottom: -36px; width: 2px; background: var(--gris-bleu); }
	.js .etape:not(:last-child)::after { background: var(--cyan); transform-origin: 50% 0; }
	.js .etape:nth-child(1)::after { transform: scaleY(clamp(0, calc(var(--p, 0) / .33), 1)); }
	.js .etape:nth-child(2)::after { transform: scaleY(clamp(0, calc((var(--p, 0) - .33) / .33), 1)); }

	/* Shop photos: sticky frame, cross-fade along the text. */
	.js .derriere-grille { row-gap: 0; }
	.js .derriere-intro,
	.js .derriere-coord,
	.js .avis { min-height: 36vh; padding-block: 24px; }
	.js .chemin { position: sticky; top: calc(var(--hh) + 32px); display: grid; gap: 0; }
	.js .chemin figure { grid-area: 1 / 1; opacity: 0; transition: opacity .8s var(--ease); }
	.js .chemin[data-actif="0"] figure:nth-child(1),
	.js .chemin[data-actif="1"] figure:nth-child(2),
	.js .chemin[data-actif="2"] figure:nth-child(3) { opacity: 1; }
}

@keyframes anneau { from { stroke-dasharray: 0 1257; } to { stroke-dasharray: 1257 0; } }
@keyframes disque { from { fill: #3E5063; } to { fill: #01BAF2; } }
@keyframes recul { from { transform: scale(1.04); } to { transform: none; } }
@keyframes invite { 0%, 100% { transform: none; } 50% { transform: translateY(4px); } }
@keyframes filet { to { stroke-dashoffset: -32; } }

/* Phone: the home page was 15.6 screens long (after-2, N-6). Tighter spacing between and inside the scenes, and a
   shorter sticky run for the three steps of the gesture; nothing is removed. */
@media (max-width: 599.98px) {
	.section { padding-block: 40px; }
	.tete-section { margin-bottom: 24px; }
	.temps-geste { padding-top: 40px; }
	.geste-fin { padding-block: 32px 40px; }
	.dedans-grille { gap: 24px; }
	.cartes { gap: 16px; }
	.quotidien-grille { gap: 32px; }
	.temps-quotidien .encadre { margin-top: 32px; }
	.derriere-grille { gap: 24px; }
	.selecteur { margin-bottom: 24px; }
	.choisir-fin { margin-top: 24px; }
}

@media (prefers-reduced-motion: no-preference) and (max-width: 599.98px) {
	.js .geste-piste { height: 180vh; }
}
