/* ==========================================================================
   site-js — julie-setzekorn.fr
   Charte : encre nocturne + spectre pastel (une couleur par univers).
   ========================================================================== */

:root {
	/* Fonds */
	--sjs-ink: #08080e;
	--sjs-ink-2: #0d0d16;
	--sjs-ink-3: #12121e;
	--sjs-surface: rgba(255, 255, 255, .035);
	--sjs-surface-2: rgba(255, 255, 255, .06);
	--sjs-line: rgba(255, 255, 255, .09);
	--sjs-line-2: rgba(255, 255, 255, .16);

	/* Texte */
	--sjs-fg: #f3f1fb;
	--sjs-muted: #9c99b4;
	--sjs-dim: #837f9e;

	/* Spectre des univers */
	--sjs-coral: #ff9a76;
	--sjs-violet: #b79cff;
	--sjs-mint: #7fe7d4;
	--sjs-blush: #ff9fc0;
	--sjs-gold: #f2d59c;

	--sjs-accent: var(--sjs-coral);
	--sjs-accent-soft: rgba(255, 154, 118, .16);

	/* Typo */
	--sjs-display: "Syne", "Helvetica Neue", sans-serif;
	--sjs-serif: "Instrument Serif", Georgia, serif;
	--sjs-body: "Inter", system-ui, -apple-system, sans-serif;
	--sjs-mono: "Space Mono", ui-monospace, monospace;

	/* Système */
	--sjs-wrap: 1240px;
	--sjs-gut: clamp(20px, 5vw, 56px);
	--sjs-r: 20px;
	--sjs-r-lg: 30px;
	--sjs-ease: cubic-bezier(.22, 1, .36, 1);
	--sjs-t: .45s var(--sjs-ease);
	--sjs-shadow: 0 40px 90px -40px rgba(0, 0, 0, .9);
}

[data-accent="coral"]  { --sjs-accent: var(--sjs-coral);  --sjs-accent-soft: rgba(255,154,118,.16); }
[data-accent="violet"] { --sjs-accent: var(--sjs-violet); --sjs-accent-soft: rgba(183,156,255,.16); }
[data-accent="mint"]   { --sjs-accent: var(--sjs-mint);   --sjs-accent-soft: rgba(127,231,212,.16); }
[data-accent="blush"]  { --sjs-accent: var(--sjs-blush);  --sjs-accent-soft: rgba(255,159,192,.16); }
[data-accent="gold"]   { --sjs-accent: var(--sjs-gold);   --sjs-accent-soft: rgba(242,213,156,.16); }

/* --------------------------------------------------------------- Fondations */

/* --------------------------------------------------------------------------
   Blindage contre le thème.
   Divi imprime en <head> des règles à base d'identifiant (`body#top`) et des
   règles de type (`h1..h6`, `p`, `a`, `ul`) qui l'emportent sur une simple
   classe. On qualifie donc la racine (`html.sjs-html body.sjs-body` = 0,2,2)
   pour repasser devant, et on force les deux propriétés vitales.
   -------------------------------------------------------------------------- */

html.sjs-html,
html.sjs-html body.sjs-body {
	background-color: var(--sjs-ink) !important;
	color: var(--sjs-fg) !important;
}

.sjs-body {
	margin: 0;
	padding: 0;
	background: var(--sjs-ink);
	color: var(--sjs-fg);
	font-family: var(--sjs-body);
	font-size: 16px;
	line-height: 1.65;
	font-weight: 350;
	-webkit-font-smoothing: antialiased;
	overflow-x: hidden;
}

/* Les titres n'héritaient que de <body> : un `h1..h6 { color: #333 }` du thème
   suffisait à les rendre illisibles. On rétablit l'héritage explicitement.
   La graisse et la taille ne sont PAS réinitialisées ici : chaque composant
   les définit, et certains titres (boîte à outils) comptent sur le gras natif. */
:where(.sjs-body) h1,
:where(.sjs-body) h2,
:where(.sjs-body) h3,
:where(.sjs-body) h4,
:where(.sjs-body) h5,
:where(.sjs-body) h6 { margin: 0; }

html.sjs-html .sjs-body h1,
html.sjs-html .sjs-body h2,
html.sjs-html .sjs-body h3,
html.sjs-html .sjs-body h4,
html.sjs-html .sjs-body h5,
html.sjs-html .sjs-body h6 {
	padding: 0;
	color: inherit;
}

.sjs-body * { box-sizing: border-box; }
.sjs-body img, .sjs-body video { max-width: 100%; display: block; }
.sjs-body a { color: inherit; text-decoration: none; }
/* Marges en faible spécificité (`:where` = 0,0,1) : elles battent la feuille
   du navigateur, mais n'importe quelle classe composant peut les redéfinir. */
:where(.sjs-body) p, :where(.sjs-body) ul, :where(.sjs-body) ol,
:where(.sjs-body) dl, :where(.sjs-body) dd,
:where(.sjs-body) figure, :where(.sjs-body) blockquote { margin: 0; }

/* Remplissage et puces en forte spécificité : c'est ce que le thème impose
   (`p { padding-bottom: 1em }`, `ul { padding-left: 20px; list-style: disc }`)
   et aucun composant du plugin n'en dépend. */
html.sjs-html .sjs-body p, html.sjs-html .sjs-body ul, html.sjs-html .sjs-body ol,
html.sjs-html .sjs-body dl, html.sjs-html .sjs-body figure,
html.sjs-html .sjs-body blockquote { padding: 0; }

html.sjs-html .sjs-body ul, html.sjs-html .sjs-body ol { list-style: none; }
.sjs-body button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; padding: 0; }
.sjs-body ::selection { background: var(--sjs-accent); color: #08080e; }

/* `display` déclaré sur un composant écrase l'attribut `hidden` : on le rétablit,
   sinon une couche masquée (visionneuse, menu) continue d'intercepter les clics. */
.sjs-body [hidden] { display: none !important; }

.sjs-body :focus-visible {
	outline: 2px solid var(--sjs-accent);
	outline-offset: 3px;
	border-radius: 4px;
}

.sjs-skip {
	position: fixed; top: -100px; left: 16px; z-index: 999;
	background: var(--sjs-fg); color: var(--sjs-ink);
	padding: 10px 18px; border-radius: 999px; font-weight: 600;
	transition: top .25s;
}
.sjs-skip:focus { top: 16px; }

.sjs-wrap {
	width: 100%;
	max-width: var(--sjs-wrap);
	margin: 0 auto;
	padding: 0 var(--sjs-gut);
}

.sjs-section { padding: clamp(72px, 11vw, 140px) 0; position: relative; overflow: hidden; }
.sjs-section--tight { padding-top: clamp(28px, 4vw, 48px); }

/* Grain + halos ambiants */
.sjs-grain {
	position: fixed; inset: 0; z-index: 3; pointer-events: none;
	opacity: .045; mix-blend-mode: overlay;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

.sjs-glow {
	position: absolute; z-index: 0; pointer-events: none;
	width: 60vw; height: 60vw; max-width: 780px; max-height: 780px;
	border-radius: 50%;
	background: radial-gradient(circle, var(--sjs-accent) 0%, transparent 68%);
	opacity: .11; filter: blur(30px);
}
.sjs-glow--head    { top: -220px; right: -180px; }
.sjs-glow--pillars { top: 10%; left: -260px; }
.sjs-glow--process { bottom: -200px; right: -220px; }
.sjs-glow--outro   { top: -160px; left: 50%; transform: translateX(-50%); opacity: .16; }

/* -------------------------------------------------------------- Typographie */

.sjs-h2,
.sjs-pagehead__title,
.sjs-hero__title,
.sjs-phero__title,
.sjs-outro__title {
	font-family: var(--sjs-display);
	font-weight: 800;
	letter-spacing: -.035em;
	line-height: .95;
	text-wrap: balance;
}

.sjs-h2 { font-size: clamp(2rem, 4.6vw, 3.6rem); }

.sjs-pillar__title,
.sjs-expertise__title,
.sjs-tl__title,
.sjs-step__title,
.sjs-sibling__title,
.sjs-footer__name,
.sjs-card__posterword,
.sjs-prose h2,
.sjs-prose__h,
.sjs-menu__nav a {
	line-height: 1.06;
}

.sjs-h2 em,
.sjs-pagehead__title em,
.sjs-outro__title em {
	font-family: var(--sjs-serif);
	font-weight: 400;
	font-style: italic;
	letter-spacing: -.01em;
	color: var(--sjs-accent);
}

.sjs-eyebrow {
	display: flex; align-items: center; gap: 12px;
	font-family: var(--sjs-mono);
	font-size: .72rem; letter-spacing: .22em; text-transform: uppercase;
	color: var(--sjs-accent);
	margin-bottom: 20px;
}
.sjs-eyebrow span {
	width: 34px; height: 1px; background: currentColor; opacity: .55; flex: none;
}

/* Marqueur de séquence (SEQ 01, SEQ 02… SEQ FIN), repris de la conduite de
   montage de site-js-old, mais dans la charte du plugin : pastille cerclée à
   l'accent de la section, jamais une couleur en dur.
   L'annonce de chapitre ne change pas pour autant : le tiret et l'intitulé
   restent tels quels, le marqueur se contente de les précéder.
   `.sjs-eyebrow span` cible tous les span enfants — d'où la remise à plat de
   la géométrie du tiret sur la pastille, en spécificité supérieure. */
.sjs-seq {
	display: inline-block; flex: none;
	padding: 3px 9px; border-radius: 7px;
	border: 1px solid currentColor;
	font-family: var(--sjs-mono); font-size: .68rem; letter-spacing: .16em;
	text-transform: uppercase; color: var(--sjs-accent);
	white-space: nowrap;
}
.sjs-eyebrow .sjs-seq {
	width: auto; height: auto; margin: 0;
	background: none; opacity: 1;
}

.sjs-head { max-width: 760px; margin-bottom: clamp(40px, 6vw, 72px); }
.sjs-head--center { margin-inline: auto; text-align: center; }
.sjs-head--center .sjs-eyebrow { justify-content: center; }

.sjs-lead {
	margin-top: 28px;
	font-size: clamp(1.02rem, 1.5vw, 1.18rem);
	color: var(--sjs-muted);
	max-width: 62ch;
}

.sjs-link {
	display: inline-flex; align-items: center; gap: 9px;
	font-weight: 500; color: var(--sjs-accent);
	border-bottom: 1px solid transparent;
	transition: border-color var(--sjs-t), gap var(--sjs-t);
}
.sjs-link i { font-style: normal; transition: transform var(--sjs-t); }
.sjs-link:hover { border-color: currentColor; gap: 14px; }

/* ------------------------------------------------------------------ Boutons */

.sjs-body .sjs-btn {
	display: inline-flex; align-items: center; justify-content: center; gap: 10px;
	padding: 15px 30px;
	border-radius: 999px;
	font-weight: 600; font-size: .92rem; letter-spacing: .01em;
	border: 1px solid transparent;
	transition: transform var(--sjs-t), background var(--sjs-t), color var(--sjs-t), border-color var(--sjs-t);
	will-change: transform;
}
.sjs-body .sjs-btn--solid {
	background: var(--sjs-fg); color: var(--sjs-ink);
}
.sjs-body .sjs-btn--solid:hover { background: var(--sjs-accent); }
.sjs-body .sjs-btn--ghost {
	border-color: var(--sjs-line-2); color: var(--sjs-fg);
	background: rgba(255, 255, 255, .02);
}
.sjs-body .sjs-btn--ghost:hover { border-color: var(--sjs-accent); color: var(--sjs-accent); }
.sjs-body .sjs-btn--sm { padding: 11px 20px; font-size: .82rem; }
.sjs-body .sjs-btn--full { width: 100%; }
.sjs-btn__ico { font-size: .72rem; }

/* --------------------------------------------------------------------------
   Encre des surfaces claires posées sur un lien.
   Le CSS critique imprime `html.sjs-html .sjs-body a { color: inherit }`
   (0,2,2) après la feuille : sur un <a>, il battait `.sjs-body .sjs-btn--solid`
   (0,2,0), et « Me contacter » finissait en blanc sur fond blanc. Les <button>
   du même style n'étaient pas touchés — d'où le décalage entre les deux.
   On repasse devant en qualifiant l'élément, pour tout ce qui est clair.
   -------------------------------------------------------------------------- */
html.sjs-html .sjs-body a.sjs-btn--solid,
html.sjs-html .sjs-body a.sjs-filter.is-active,
html.sjs-html .sjs-body a.sjs-skip { color: var(--sjs-ink); }

/* --------------------------------------------------------------- Préchargeur */

.sjs-loader {
	position: fixed; inset: 0; z-index: 200;
	background: var(--sjs-ink);
	display: grid; place-items: center;
	transition: clip-path 1s var(--sjs-ease), opacity .4s;
	clip-path: inset(0 0 0 0);
}
.sjs-loader.is-done { clip-path: inset(0 0 100% 0); pointer-events: none; }
.sjs-loader.is-off { display: none; }
.sjs-loader__inner { display: grid; gap: 20px; justify-items: center; }
.sjs-loader__mark {
	font-family: var(--sjs-display); font-weight: 800; font-size: 3.2rem;
	letter-spacing: -.06em;
	background: linear-gradient(110deg, var(--sjs-coral), var(--sjs-blush) 45%, var(--sjs-violet));
	-webkit-background-clip: text; background-clip: text; color: transparent;
}
.sjs-loader__bar { width: 180px; height: 2px; background: var(--sjs-line); overflow: hidden; }
.sjs-loader__bar i { display: block; height: 100%; width: 0; background: var(--sjs-coral); }
.sjs-loader__count { font-family: var(--sjs-mono); font-size: .74rem; color: var(--sjs-dim); }

/* ------------------------------------------------------------------ Curseur */

.sjs-cursor { position: fixed; top: 0; left: 0; z-index: 190; pointer-events: none; display: none; }
.sjs-cursor__dot,
.sjs-cursor__ring {
	position: absolute; border-radius: 50%; transform: translate(-50%, -50%);
	will-change: transform;
}
.sjs-cursor__dot { width: 6px; height: 6px; background: var(--sjs-coral); }
.sjs-cursor__ring {
	width: 34px; height: 34px; border: 1px solid rgba(255, 255, 255, .35);
	transition: width .3s var(--sjs-ease), height .3s var(--sjs-ease), border-color .3s;
}
.sjs-cursor.is-hover .sjs-cursor__ring { width: 66px; height: 66px; border-color: var(--sjs-coral); }
@media (hover: hover) and (pointer: fine) {
	.sjs-cursor { display: block; }
}

/* -------------------------------------------------------------------- En-tête */

/* L'en-tête ne se dérobe jamais : il reste posé en haut, et gagne seulement un
   fond opaque dès que la page défile. */
.sjs-header {
	position: fixed; top: 0; left: 0; right: 0; z-index: 120;
	transition: background .4s, backdrop-filter .4s, border-color .4s;
	border-bottom: 1px solid transparent;
}
.sjs-header.is-stuck {
	background: rgba(8, 8, 14, .82);
	backdrop-filter: blur(18px) saturate(1.4);
	border-bottom-color: var(--sjs-line);
}

/* ------------------------------------------------ Barre de progression de lecture */

/* Reprise du « playhead » de site-js-old, aux couleurs du plugin : le dégradé
   du préchargeur (corail → rose → violet), sur un rail dans la teinte de ligne.
   Posée au-dessus de l'en-tête (z-index 120) mais sous le menu plein écran. */
.sjs-progress {
	position: fixed; top: 0; left: 0; right: 0; z-index: 125;
	height: 3px; pointer-events: none;
	background: rgba(255, 255, 255, .06);
}
.sjs-progress__fill {
	display: block; height: 100%; width: 100%;
	transform: scaleX(0); transform-origin: 0 50%;
	background: linear-gradient(90deg, var(--sjs-coral), var(--sjs-blush) 45%, var(--sjs-violet));
	box-shadow: 0 0 12px rgba(183, 156, 255, .55);
}

.sjs-header__inner {
	max-width: var(--sjs-wrap); margin: 0 auto;
	padding: 16px var(--sjs-gut);
	display: flex; align-items: center; gap: 24px;
}

.sjs-brand { display: flex; align-items: center; gap: 12px; margin-right: auto; }
.sjs-brand__logo { width: 38px; height: 38px; object-fit: contain; border-radius: 10px; }
.sjs-brand__text { display: grid; line-height: 1.2; }
.sjs-brand__text strong {
	font-family: var(--sjs-display); font-weight: 700; font-size: .96rem; letter-spacing: -.02em;
}
.sjs-brand__text em {
	font-style: normal; font-family: var(--sjs-mono);
	font-size: .6rem; letter-spacing: .16em; text-transform: uppercase; color: var(--sjs-dim);
}

.sjs-nav { display: flex; gap: 30px; }
.sjs-nav__link {
	position: relative; font-size: .88rem; font-weight: 450; color: var(--sjs-muted);
	padding: 6px 0; transition: color var(--sjs-t);
}
.sjs-nav__link::after {
	content: ""; position: absolute; left: 0; bottom: 0; height: 1px; width: 0;
	background: var(--sjs-accent); transition: width var(--sjs-t);
}
.sjs-nav__link:hover, .sjs-nav__link.is-active { color: var(--sjs-fg); }
.sjs-nav__link:hover::after, .sjs-nav__link.is-active::after { width: 100%; }

.sjs-header__right { display: flex; align-items: center; gap: 14px; }

.sjs-avail {
	display: inline-flex; align-items: center; gap: 9px;
	padding: 9px 16px; border-radius: 999px;
	border: 1px solid var(--sjs-line-2);
	font-family: var(--sjs-mono); font-size: .66rem; letter-spacing: .08em; text-transform: uppercase;
	color: var(--sjs-muted); transition: border-color var(--sjs-t), color var(--sjs-t);
}
.sjs-avail:hover { border-color: var(--sjs-mint); color: var(--sjs-fg); }
.sjs-avail__dot {
	width: 7px; height: 7px; border-radius: 50%; background: var(--sjs-mint); flex: none;
	box-shadow: 0 0 0 0 rgba(127, 231, 212, .6);
	animation: sjs-pulse 2.4s infinite;
}
@keyframes sjs-pulse {
	0% { box-shadow: 0 0 0 0 rgba(127, 231, 212, .55); }
	70% { box-shadow: 0 0 0 9px rgba(127, 231, 212, 0); }
	100% { box-shadow: 0 0 0 0 rgba(127, 231, 212, 0); }
}

.sjs-body .sjs-burger { display: none; width: 42px; height: 42px; border: 1px solid var(--sjs-line-2); border-radius: 12px; position: relative; }
.sjs-burger span {
	position: absolute; left: 12px; width: 18px; height: 1.5px; background: var(--sjs-fg);
	transition: transform .35s var(--sjs-ease), opacity .2s;
}
.sjs-burger span:nth-child(1) { top: 17px; }
.sjs-burger span:nth-child(2) { top: 23px; }
.sjs-burger.is-open span:nth-child(1) { transform: translateY(3px) rotate(45deg); }
.sjs-burger.is-open span:nth-child(2) { transform: translateY(-3px) rotate(-45deg); }

/* Menu plein écran */
.sjs-menu {
	position: fixed; inset: 0; z-index: 115;
	background: rgba(8, 8, 14, .97);
	backdrop-filter: blur(24px);
	display: grid; align-items: center;
	opacity: 0; transition: opacity .4s;
}
.sjs-menu.is-open { opacity: 1; }
.sjs-menu__inner { padding: 100px var(--sjs-gut) 48px; width: 100%; max-width: var(--sjs-wrap); margin: 0 auto; }
.sjs-menu__nav { display: grid; gap: 4px; }
.sjs-menu__nav a {
	font-family: var(--sjs-display); font-weight: 700;
	font-size: clamp(2.2rem, 11vw, 3.6rem); letter-spacing: -.04em; line-height: 1.08;
	overflow: hidden; display: block;
}
.sjs-menu__nav a span {
	display: block; transform: translateY(110%);
	transition: transform .6s var(--sjs-ease), color var(--sjs-t);
}
.sjs-menu.is-open .sjs-menu__nav a span { transform: translateY(0); }
.sjs-menu__nav a:nth-child(1) span { transition-delay: .06s; }
.sjs-menu__nav a:nth-child(2) span { transition-delay: .12s; }
.sjs-menu__nav a:nth-child(3) span { transition-delay: .18s; }
.sjs-menu__nav a:nth-child(4) span { transition-delay: .24s; }
.sjs-menu__nav a:nth-child(5) span { transition-delay: .3s; }
.sjs-menu__nav a:hover span { color: var(--sjs-coral); }
.sjs-menu__foot {
	margin-top: 44px; padding-top: 24px; border-top: 1px solid var(--sjs-line);
	display: flex; flex-wrap: wrap; gap: 22px;
	font-family: var(--sjs-mono); font-size: .76rem; color: var(--sjs-muted);
}

.sjs-main { position: relative; z-index: 1; }

/* --------------------------------------------------------------------- Hero */

.sjs-hero {
	position: relative;
	min-height: 100svh;
	display: flex; align-items: flex-end;
	padding: 140px 0 60px;
	overflow: hidden;
}
.sjs-hero__media { position: absolute; inset: 0; z-index: 0; }
.sjs-hero__video {
	width: 100%; height: 100%; object-fit: cover;
	opacity: .38; filter: saturate(.85) contrast(1.05);
	transform: scale(1.06);
	animation: sjs-drift 26s ease-in-out infinite alternate;
}
@keyframes sjs-drift {
	from { transform: scale(1.06) translate3d(0, 0, 0); }
	to { transform: scale(1.14) translate3d(-1.5%, -1.5%, 0); }
}
.sjs-hero__scrim {
	position: absolute; inset: 0;
	background:
		linear-gradient(180deg, rgba(8,8,14,.94) 0%, rgba(8,8,14,.42) 32%, rgba(8,8,14,.95) 92%),
		linear-gradient(100deg, rgba(8,8,14,.85), transparent 62%);
}
.sjs-hero__vignette {
	position: absolute; inset: 0;
	background: radial-gradient(120% 90% at 50% 40%, transparent 40%, rgba(8,8,14,.75) 100%);
}
.sjs-hero__wrap { position: relative; z-index: 2; }

.sjs-hero__eyebrow {
	display: inline-flex; align-items: center; gap: 11px;
	font-family: var(--sjs-mono); font-size: .7rem; letter-spacing: .18em; text-transform: uppercase;
	color: var(--sjs-muted); margin-bottom: 26px;
}
.sjs-hero__rec {
	width: 8px; height: 8px; border-radius: 50%; background: var(--sjs-coral);
	animation: sjs-blink 1.6s steps(1) infinite;
}
@keyframes sjs-blink { 0%, 55% { opacity: 1; } 56%, 100% { opacity: .18; } }

.sjs-hero__title {
	font-size: clamp(2.6rem, 12.4vw, 9rem);
	margin: 0 0 14px;
	display: grid;
}
.sjs-hero__title--out {
	font-size: .86em;
	color: transparent;
	-webkit-text-stroke: 1.4px rgba(255, 255, 255, .42);
	margin-top: -.04em;
}

.sjs-split { display: block; }
.sjs-split .sjs-ch {
	display: inline-block;
	transform: translateY(105%);
	opacity: 0;
	animation: sjs-rise .95s var(--sjs-ease) forwards;
}
@keyframes sjs-rise { to { transform: translateY(0); opacity: 1; } }

.sjs-hero__verb {
	display: flex; align-items: baseline; gap: 14px;
	font-family: var(--sjs-serif); font-style: italic;
	font-size: clamp(1.5rem, 4vw, 2.6rem);
	color: var(--sjs-muted);
	margin-bottom: 26px;
}
.sjs-hero__verbLabel { opacity: .55; }
.sjs-rotator {
	display: inline-grid; overflow: hidden;
	height: 1.16em;
}
.sjs-rotator i {
	grid-area: 1 / 1;
	font-style: italic; color: var(--sjs-coral);
	transform: translateY(110%); opacity: 0;
	transition: transform .7s var(--sjs-ease), opacity .5s;
}
.sjs-rotator i.is-in { transform: translateY(0); opacity: 1; }
.sjs-rotator i.is-out { transform: translateY(-110%); opacity: 0; }

.sjs-hero__lead {
	max-width: 56ch; color: var(--sjs-muted);
	font-size: clamp(1rem, 1.5vw, 1.14rem);
	margin-bottom: 34px;
}
.sjs-hero__lead strong { color: var(--sjs-fg); font-weight: 600; }

/* Dernier bloc du hero depuis le retrait de la liste de crédits : c'est le
   remplissage bas de la section qui règle l'espace, pas une marge. */
.sjs-hero__actions { display: flex; flex-wrap: wrap; gap: 14px; }

.sjs-hero__scroll {
	position: absolute; right: var(--sjs-gut); bottom: 44px; z-index: 2;
	display: flex; align-items: center; gap: 10px;
	font-family: var(--sjs-mono); font-size: .62rem; letter-spacing: .2em; text-transform: uppercase;
	color: var(--sjs-dim);
	writing-mode: vertical-rl;
}
.sjs-hero__scroll span {
	width: 1px; height: 52px;
	background: linear-gradient(to bottom, var(--sjs-coral), transparent);
	animation: sjs-scrolline 2.2s ease-in-out infinite;
}
@keyframes sjs-scrolline { 0%, 100% { opacity: .25; } 50% { opacity: 1; } }

/* ---------------------------------------------------------------- Bandeau défilant */

/* Structure reprise du bandeau de `site-js-old` : une bande fine plutôt qu'un
   bloc, des mots courts dans le gris de texte secondaire — et non un lettrage
   géant évidé — séparés par une étoile rose.
   Correspondance des jetons : --line → --sjs-line, --muted → --sjs-muted,
   --rose → --sjs-blush, --font-d → --sjs-display. */

.sjs-marquee {
	overflow: hidden; padding: 18px 0;
	border-block: 1px solid var(--sjs-line);
	background: var(--sjs-ink-2);
}
.sjs-marquee__track {
	display: flex; align-items: center; gap: 26px; width: max-content;
	white-space: nowrap;
	animation: sjs-scroll 68s linear infinite;
}
/* Même lettrage que le ruban « Ils m'ont fait confiance » (`.sjs-ribbon`) :
   graisse, corps et approche identiques, casse d'origine — les deux bandeaux se
   répondent d'un bout à l'autre de la page. Seule la couleur diffère, plus
   sourde ici puisqu'il s'agit de disciplines et non de noms propres. */
.sjs-marquee__track span {
	font-family: var(--sjs-display); font-weight: 600;
	font-size: clamp(1.05rem, 2.2vw, 1.5rem); letter-spacing: -.02em;
	color: var(--sjs-muted);
	white-space: nowrap;
}
.sjs-marquee__track b { color: var(--sjs-blush); font-size: .78rem; opacity: .75; }
@keyframes sjs-scroll { to { transform: translateX(-50%); } }

/* ------------------------------------------------------------------ Manifeste */

/* Deux sections qui se suivent additionnent leur remplissage : entre deux
   chapitres de l'accueil, ces 140 px doublés ouvraient un blanc deux fois plus
   large que celui qui sépare le bandeau défilant du premier chapitre. La
   seconde rend donc son remplissage haut, et l'écart vaut partout le
   remplissage bas de la première, soit la valeur de référence.
   C'est la seconde qu'on remet à zéro et non la première : le chapitre des
   contextes est volontairement plus serré que les autres, et il garde ainsi
   son propre rythme sous le ruban.
   `.sjs-process` sert aussi sur /expertises/, dont le rythme ne change pas :
   d'où la sélection par adjacence plutôt que sur la classe seule. */
.sjs-manifesto + .sjs-pillars,
.sjs-work + .sjs-process,
.sjs-process + .sjs-contexts { padding-top: 0; }
.sjs-manifesto__grid { display: grid; gap: 40px; }
.sjs-manifesto__text {
	font-family: var(--sjs-display); font-weight: 700;
	font-size: clamp(1.7rem, 4.2vw, 3.15rem);
	line-height: 1.14; letter-spacing: -.03em;
	max-width: 20ch;
}
.sjs-manifesto__text em {
	font-family: var(--sjs-serif); font-weight: 400; font-style: italic;
	color: var(--sjs-coral); letter-spacing: 0;
}
.sjs-manifesto__text .sjs-word { opacity: .18; transition: opacity .5s var(--sjs-ease); }
.sjs-manifesto__text .sjs-word.is-on { opacity: 1; }
/* Attribution de la citation : elle suit la même révélation mot à mot que le
   reste du bloc, mais quitte le corps d'affiche pour le monospace des
   marqueurs techniques. D'où la remise à plat de la graisse, du corps et de
   l'approche, tous hérités du parent. */
.sjs-manifesto__cite {
	display: block; margin-top: clamp(22px, 3vw, 34px);
	font-family: var(--sjs-mono); font-style: normal; font-weight: 400;
	font-size: .72rem; line-height: 1.5; letter-spacing: .18em;
	text-transform: uppercase; color: var(--sjs-dim);
}
.sjs-manifesto__side { display: grid; gap: 18px; align-content: start; color: var(--sjs-muted); max-width: 46ch; }

@media (min-width: 900px) {
	.sjs-manifesto__grid {
		grid-template-columns: 1.15fr .85fr;
		grid-template-areas: "eyebrow ." "text side";
		gap: 28px 60px;
	}
	.sjs-manifesto__grid > .sjs-eyebrow { grid-area: eyebrow; }
	.sjs-manifesto__text { grid-area: text; }
	.sjs-manifesto__side { grid-area: side; padding-top: 10px; }
}

/* ---------------------------------------------------------------------- Pôles */

.sjs-pillars__grid { display: grid; gap: 20px; }
@media (min-width: 860px) { .sjs-pillars__grid { grid-template-columns: repeat(3, 1fr); } }

.sjs-pillar {
	position: relative; display: flex; flex-direction: column;
	padding: 34px 30px 30px;
	border: 1px solid var(--sjs-line); border-radius: var(--sjs-r-lg);
	background: linear-gradient(180deg, var(--sjs-surface), transparent);
	overflow: hidden;
	transition: border-color var(--sjs-t), transform var(--sjs-t), background var(--sjs-t);
	transform-style: preserve-3d;
}
.sjs-pillar::before {
	content: ""; position: absolute; inset: 0 0 auto; height: 2px;
	background: linear-gradient(90deg, transparent, var(--sjs-accent), transparent);
	opacity: .5; transition: opacity var(--sjs-t);
}
.sjs-pillar:hover { border-color: var(--sjs-accent); background: linear-gradient(180deg, var(--sjs-accent-soft), transparent 60%); }
.sjs-pillar:hover::before { opacity: 1; }
.sjs-pillar__kicker {
	font-family: var(--sjs-mono); font-size: .64rem; letter-spacing: .2em; text-transform: uppercase;
	color: var(--sjs-accent); margin-bottom: 16px;
}
.sjs-pillar__title {
	font-family: var(--sjs-display); font-weight: 700; font-size: 1.72rem;
	letter-spacing: -.03em; margin-bottom: 12px; line-height: 1.08;
}
@media (min-width: 860px) { .sjs-pillar__title { min-height: 2.16em; } }
.sjs-pillar__line { color: var(--sjs-muted); font-size: .95rem; margin-bottom: 22px; }
@media (min-width: 860px) { .sjs-pillar__line { min-height: 4.5em; } }
.sjs-pillar__list { display: grid; gap: 9px; margin-bottom: 24px; }
.sjs-pillar__list li {
	position: relative; padding-left: 20px; font-size: .92rem; color: var(--sjs-fg);
}
.sjs-pillar__list li::before {
	content: ""; position: absolute; left: 0; top: .62em;
	width: 8px; height: 1px; background: var(--sjs-accent);
}
.sjs-pillar__tools {
	margin-top: auto; padding-top: 18px; border-top: 1px solid var(--sjs-line);
	font-family: var(--sjs-mono); font-size: .68rem; color: var(--sjs-dim); letter-spacing: .04em;
}
.sjs-pillars__more { margin-top: 34px; }

/* -------------------------------------------------------------------- Chiffres */

.sjs-stats { padding-block: clamp(48px, 7vw, 86px); border-block: 1px solid var(--sjs-line); background: var(--sjs-ink-2); }
.sjs-stats__grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 34px 20px; }
@media (min-width: 760px) { .sjs-stats__grid { grid-template-columns: repeat(4, 1fr); } }
.sjs-stat__num {
	font-family: var(--sjs-display); font-weight: 800;
	font-size: clamp(2.6rem, 6vw, 4.2rem); letter-spacing: -.05em; line-height: 1;
	background: linear-gradient(140deg, var(--sjs-fg), var(--sjs-muted));
	-webkit-background-clip: text; background-clip: text; color: transparent;
}
.sjs-stat__num i { font-style: normal; color: var(--sjs-coral); -webkit-text-fill-color: var(--sjs-coral); }
.sjs-stat__label {
	margin-top: 10px; font-family: var(--sjs-mono); font-size: .68rem;
	letter-spacing: .14em; text-transform: uppercase; color: var(--sjs-dim);
}

/* ---------------------------------------------------------------- Grille projets */

.sjs-grid { display: grid; gap: 18px; grid-template-columns: 1fr; }
@media (min-width: 720px) { .sjs-grid { grid-template-columns: repeat(2, 1fr); gap: 22px; } }
@media (min-width: 1080px) {
	.sjs-grid { grid-template-columns: repeat(6, 1fr); }
	.sjs-grid .sjs-card--lg { grid-column: span 3; }
	.sjs-grid .sjs-card--md { grid-column: span 3; }
	.sjs-grid .sjs-card--sm { grid-column: span 2; }
	/* Sélection : le projet mis en avant occupe toute la largeur, les suivants
	   se rangent par trois (2 colonnes sur 6). */
	.sjs-grid--feature .sjs-card--lg,
	.sjs-grid--feature .sjs-card--md,
	.sjs-grid--feature .sjs-card--sm { grid-column: span 2; }
	.sjs-grid--feature .sjs-card:first-child { grid-column: span 6; flex-direction: row; }
	.sjs-grid--feature .sjs-card:first-child .sjs-card__frame { width: 60%; flex: none; }
	.sjs-grid--feature .sjs-card:first-child .sjs-card__body { width: 40%; padding: 44px 44px 40px; align-content: center; }
	.sjs-grid--feature .sjs-card:first-child .sjs-card__title { font-size: clamp(1.9rem, 2.9vw, 2.5rem); }
	.sjs-grid--feature .sjs-card:first-child .sjs-card__line { font-size: 1rem; }
}

@media (min-width: 1080px) {
	.sjs-grid--all { grid-template-columns: repeat(3, 1fr); }
	.sjs-grid--all .sjs-card--lg,
	.sjs-grid--all .sjs-card--md,
	.sjs-grid--all .sjs-card--sm { grid-column: span 1; }
}

.sjs-card {
	position: relative; display: flex; flex-direction: column;
	border: 1px solid var(--sjs-line); border-radius: var(--sjs-r-lg);
	background: var(--sjs-ink-2); overflow: hidden;
	transition: border-color var(--sjs-t), transform var(--sjs-t);
	transform-style: preserve-3d;
}
.sjs-card:hover { border-color: var(--sjs-accent); }

.sjs-card__frame {
	position: relative; aspect-ratio: 16 / 9; overflow: hidden;
	background: linear-gradient(140deg, var(--sjs-ink-3), var(--sjs-ink));
}
.sjs-card__img {
	width: 100%; height: 100%; object-fit: cover;
	transition: transform .9s var(--sjs-ease), filter .6s;
	filter: saturate(.9);
}
.sjs-card:hover .sjs-card__img { transform: scale(1.07); filter: saturate(1.06); }

.sjs-card__poster {
	position: absolute; inset: 0; display: grid; place-items: center; padding: 28px;
	background:
		radial-gradient(120% 100% at 20% 0%, var(--sjs-accent-soft), transparent 60%),
		repeating-linear-gradient(135deg, rgba(255,255,255,.03) 0 2px, transparent 2px 9px);
}
.sjs-card__posterword {
	font-family: var(--sjs-display); font-weight: 800;
	font-size: clamp(1.5rem, 3.6vw, 2.6rem); letter-spacing: -.045em; line-height: .95;
	text-align: center; color: transparent;
	-webkit-text-stroke: 1px var(--sjs-accent);
}
.sjs-card__scrim {
	position: absolute; inset: 0;
	background: linear-gradient(180deg, transparent 40%, rgba(8, 8, 14, .78));
}
.sjs-card__num {
	position: absolute; top: 16px; left: 18px;
	font-family: var(--sjs-mono); font-size: .68rem; letter-spacing: .1em;
	color: rgba(255, 255, 255, .62);
}
/* Le libellé est une distinction, pas une mention légale : il doit se lire d'un
   coup d'œil. D'où l'étoile en tête, un corps plus grand et une graisse
   suffisante — le tout dans la teinte dorée des récompenses. */
.sjs-card__award {
	position: absolute; top: 14px; right: 16px;
	display: inline-flex; align-items: center; gap: 6px;
	padding: 6px 13px; border-radius: 999px;
	background: var(--sjs-gold); color: #08080e;
	font-family: var(--sjs-mono); font-weight: 700; font-size: .7rem;
	letter-spacing: .08em; text-transform: uppercase; white-space: nowrap;
	box-shadow: 0 6px 20px -8px rgba(242, 213, 156, .85);
}
.sjs-card__award i { font-style: normal; font-size: .8rem; line-height: 1; }
.sjs-card__play {
	position: absolute; right: 18px; bottom: 18px;
	width: 44px; height: 44px; border-radius: 50%;
	border: 1px solid rgba(255, 255, 255, .35);
	background: rgba(8, 8, 14, .4); backdrop-filter: blur(6px);
	transition: background var(--sjs-t), border-color var(--sjs-t), transform var(--sjs-t);
}
.sjs-card__play::after {
	content: ""; position: absolute; top: 50%; left: 54%; transform: translate(-50%, -50%);
	border-left: 9px solid var(--sjs-fg);
	border-block: 6px solid transparent;
}
.sjs-card:hover .sjs-card__play {
	background: var(--sjs-accent); border-color: var(--sjs-accent); transform: scale(1.06);
}
.sjs-card:hover .sjs-card__play::after { border-left-color: #08080e; }

.sjs-card__body { padding: 22px 24px 26px; display: grid; gap: 11px; align-content: start; flex: 1; }
.sjs-card__title {
	font-family: var(--sjs-display); font-weight: 700;
	font-size: clamp(1.24rem, 2vw, 1.6rem); letter-spacing: -.03em; line-height: 1.08;
}
.sjs-card__line { color: var(--sjs-muted); font-size: .92rem; }
.sjs-card__meta {
	font-family: var(--sjs-mono); font-size: .66rem; letter-spacing: .06em;
	color: var(--sjs-dim); display: flex; gap: 8px; flex-wrap: wrap;
}
.sjs-card__cta {
	margin-top: auto; padding-top: 8px;
	font-size: .82rem; font-weight: 600; color: var(--sjs-accent);
	display: inline-flex; align-items: center; gap: 8px;
	opacity: 0; transform: translateY(6px);
	transition: opacity var(--sjs-t), transform var(--sjs-t);
}
.sjs-card__cta i { font-style: normal; }
.sjs-card:hover .sjs-card__cta, .sjs-card:focus-visible .sjs-card__cta { opacity: 1; transform: translateY(0); }

.sjs-chips { display: flex; flex-wrap: wrap; gap: 7px; }
.sjs-chip {
	font-family: var(--sjs-mono); font-size: .6rem; letter-spacing: .14em; text-transform: uppercase;
	padding: 5px 11px; border-radius: 999px;
	color: var(--sjs-accent); border: 1px solid currentColor; opacity: .9;
}
.sjs-chip--ghost { color: var(--sjs-dim); }

.sjs-card.is-out { opacity: 0; transform: scale(.96); pointer-events: none; }

.sjs-work__more { margin-top: 40px; }

/* ------------------------------------------------------------------- Méthode */

/* `.sjs-steps` et `.sjs-timeline` sont des <ol> : leur remplissage est remis à
   zéro plus haut par `html.sjs-html .sjs-body ol` (0,2,2). Une simple classe
   (0,1,0) perdrait la cascade — le rail passerait alors au milieu des chiffres
   et du texte au lieu de les longer. On qualifie donc la racine ici aussi.
   Voir AGENTS.md §8, « Piège à connaître ». */
.sjs-steps { position: relative; display: grid; gap: 26px; }
html.sjs-html .sjs-body .sjs-steps { padding-left: 34px; }
@media (min-width: 900px) {
	.sjs-steps { grid-template-columns: repeat(4, 1fr); gap: 28px; }
	html.sjs-html .sjs-body .sjs-steps { padding-left: 0; padding-top: 48px; }
}
.sjs-steps__rail {
	position: absolute; left: 8px; top: 8px; bottom: 8px; width: 1px;
	background: var(--sjs-line);
}
.sjs-steps__rail i {
	display: block; width: 100%; height: 0;
	background: linear-gradient(to bottom, var(--sjs-mint), var(--sjs-violet));
	transition: height .2s linear;
}
@media (min-width: 900px) {
	.sjs-steps__rail { left: 0; right: 0; top: 12px; bottom: auto; width: auto; height: 1px; }
	.sjs-steps__rail i { height: 100%; width: 0; background: linear-gradient(to right, var(--sjs-mint), var(--sjs-violet)); transition: width .2s linear; }
}
.sjs-step { position: relative; }
.sjs-step__n {
	display: inline-block; font-family: var(--sjs-mono); font-size: .68rem;
	color: var(--sjs-mint); letter-spacing: .12em; margin-bottom: 14px;
}
.sjs-step__title {
	font-family: var(--sjs-display); font-weight: 700; font-size: 1.16rem;
	letter-spacing: .02em; margin-bottom: 8px;
}
.sjs-step__text { color: var(--sjs-muted); font-size: .92rem; }

/* -------------------------------------------------------------------- Contextes */

.sjs-contexts { padding-block: clamp(56px, 8vw, 96px); }

/* Bandeau horizontal animé : les noms défilent en continu, la piste s'arrête
   au survol pour rester lisible. Même mécanique que `.sjs-marquee`, mais des
   noms propres — donc la casse d'origine et la couleur de texte pleine. */
.sjs-ribbon {
	margin-top: 10px; overflow: hidden;
	padding: 22px 0;
	border-block: 1px solid var(--sjs-line);
	background: var(--sjs-ink-2);
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
	mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
}
.sjs-ribbon__track {
	display: flex; align-items: center; width: max-content;
	animation: sjs-scroll 48s linear infinite;
}
.sjs-ribbon:hover .sjs-ribbon__track { animation-play-state: paused; }
.sjs-ribbon__group { display: flex; align-items: center; }
.sjs-ribbon__group li {
	display: flex; align-items: center; gap: 34px;
	padding-right: 34px; white-space: nowrap;
	font-family: var(--sjs-display); font-weight: 600;
	font-size: clamp(1.05rem, 2.2vw, 1.5rem); letter-spacing: -.02em;
	color: var(--sjs-dim); transition: color var(--sjs-t);
}
.sjs-ribbon__group li::after {
	content: "✦"; font-family: var(--sjs-body); font-size: .78rem;
	color: var(--sjs-blush); opacity: .75;
}
.sjs-ribbon__group li:hover { color: var(--sjs-fg); }

/* --------------------------------------------------------------- Têtes de page */

.sjs-pagehead {
	position: relative; overflow: hidden;
	padding: clamp(140px, 18vw, 210px) 0 clamp(38px, 6vw, 62px);
}
.sjs-pagehead > .sjs-wrap { position: relative; z-index: 1; }
.sjs-pagehead__title { font-size: clamp(2.5rem, 8vw, 5.4rem); margin-bottom: 34px; }
.sjs-pagehead__lead { max-width: 62ch; color: var(--sjs-muted); font-size: clamp(1rem, 1.5vw, 1.14rem); }

.sjs-filters { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 36px; }
.sjs-filter {
	display: inline-flex; align-items: center; gap: 8px;
	padding: 10px 18px; border-radius: 999px;
	border: 1px solid var(--sjs-line); background: rgba(255, 255, 255, .02);
	font-size: .85rem; color: var(--sjs-muted);
	transition: border-color var(--sjs-t), color var(--sjs-t), background var(--sjs-t);
}
.sjs-filter i {
	font-style: normal; font-family: var(--sjs-mono); font-size: .62rem; color: var(--sjs-dim);
}
.sjs-filter:hover { color: var(--sjs-fg); border-color: var(--sjs-accent); }
.sjs-filter.is-active {
	background: var(--sjs-fg); color: var(--sjs-ink); border-color: var(--sjs-fg);
}
.sjs-filter.is-active i { color: rgba(8, 8, 14, .55); }

/* ---------------------------------------------------------------- Page projet */

.sjs-phero { position: relative; padding: clamp(150px, 20vw, 240px) 0 clamp(40px, 6vw, 72px); overflow: hidden; }
.sjs-phero__media { position: absolute; inset: 0; z-index: 0; }
.sjs-phero__media img { width: 100%; height: 100%; object-fit: cover; opacity: .5; }
.sjs-phero__scrim {
	position: absolute; inset: 0;
	background:
		linear-gradient(180deg, rgba(8,8,14,.97) 0%, rgba(8,8,14,.72) 14%, rgba(8,8,14,.4) 46%, rgba(8,8,14,.97) 100%),
		radial-gradient(90% 70% at 20% 60%, transparent, rgba(8,8,14,.72));
}
.sjs-phero__wrap { position: relative; z-index: 1; }
.sjs-phero__title { font-size: clamp(2.4rem, 8.5vw, 5.6rem); margin: 18px 0 16px; }
.sjs-phero__lead { max-width: 58ch; color: var(--sjs-muted); font-size: clamp(1.02rem, 1.6vw, 1.22rem); }

.sjs-crumbs {
	display: flex; flex-wrap: wrap; align-items: center; gap: 9px; margin-bottom: 22px;
	font-family: var(--sjs-mono); font-size: .66rem; letter-spacing: .1em;
	color: var(--sjs-dim); text-transform: uppercase;
}
.sjs-crumbs a { transition: color var(--sjs-t); }
.sjs-crumbs a:hover { color: var(--sjs-accent); }
.sjs-crumbs em { font-style: normal; color: var(--sjs-fg); }

.sjs-awards { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 24px; }
.sjs-awards li {
	display: inline-flex; align-items: center; gap: 8px;
	padding: 9px 16px; border-radius: 999px;
	border: 1px solid rgba(242, 213, 156, .4); background: rgba(242, 213, 156, .08);
	color: var(--sjs-gold); font-size: .82rem;
}

.sjs-project__body { display: grid; gap: 44px; padding-bottom: clamp(60px, 9vw, 110px); }
@media (min-width: 1000px) {
	.sjs-project__body { grid-template-columns: 290px 1fr; gap: 64px; align-items: start; }
}

.sjs-facts__inner {
	border: 1px solid var(--sjs-line); border-radius: var(--sjs-r);
	background: linear-gradient(180deg, var(--sjs-surface), transparent);
	padding: 26px 24px;
}
@media (min-width: 1000px) { .sjs-facts__inner { position: sticky; top: 100px; } }
.sjs-facts dl { display: grid; gap: 18px; }
.sjs-facts dt {
	font-family: var(--sjs-mono); font-size: .62rem; letter-spacing: .16em;
	text-transform: uppercase; color: var(--sjs-dim); margin-bottom: 5px;
}
.sjs-facts dd { margin: 0; font-size: .94rem; color: var(--sjs-fg); }
.sjs-facts__ctx {
	margin-top: 20px; padding-top: 18px; border-top: 1px solid var(--sjs-line);
	font-size: .84rem; color: var(--sjs-muted);
}
.sjs-body .sjs-facts .sjs-btn { margin-top: 22px; width: 100%; }

.sjs-content { display: grid; gap: clamp(34px, 5vw, 52px); min-width: 0; }

.sjs-prose h2, .sjs-prose__h {
	font-family: var(--sjs-display); font-weight: 700;
	font-size: clamp(1.4rem, 2.6vw, 1.95rem); letter-spacing: -.025em;
	margin-bottom: 18px;
}
.sjs-prose__h { margin-bottom: 4px; }
/* Les titres isolés du contenu projet sont des enfants directs de la grille :
   on les groupe avec leur annonce de séquence pour qu'un seul écart les sépare
   du bloc qui suit. */
.sjs-prose__head .sjs-eyebrow,
.sjs-prose > .sjs-eyebrow { margin-bottom: 12px; }
.sjs-prose p { color: var(--sjs-muted); margin-bottom: 16px; font-size: 1.02rem; }
.sjs-prose p:last-child { margin-bottom: 0; }
.sjs-prose strong { color: var(--sjs-fg); font-weight: 600; }
.sjs-prose em { color: var(--sjs-accent); font-style: italic; }
.sjs-prose ul { display: grid; gap: 10px; margin-bottom: 16px; }
.sjs-prose li { position: relative; padding-left: 22px; color: var(--sjs-muted); }
.sjs-prose li::before {
	content: ""; position: absolute; left: 0; top: .68em;
	width: 10px; height: 1px; background: var(--sjs-accent);
}

.sjs-note {
	font-family: var(--sjs-mono); font-size: .74rem; letter-spacing: .04em;
	color: var(--sjs-dim); padding: 14px 18px;
	border: 1px dashed var(--sjs-line-2); border-radius: 12px;
}

/* Lecteur vidéo */
.sjs-player {
	position: relative; border-radius: var(--sjs-r); overflow: hidden;
	border: 1px solid var(--sjs-line); background: var(--sjs-ink-2);
	aspect-ratio: 16 / 9;
}
.sjs-body .sjs-player__btn { display: block; width: 100%; height: 100%; position: relative; }
.sjs-player__thumb { width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--sjs-ease), filter .5s; filter: saturate(.9) brightness(.85); }
.sjs-player:hover .sjs-player__thumb { transform: scale(1.04); filter: saturate(1.05) brightness(.95); }
.sjs-player__scrim { position: absolute; inset: 0; background: radial-gradient(70% 70% at 50% 50%, transparent, rgba(8,8,14,.55)); }
.sjs-player__slate {
	position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
	display: flex; align-items: center; gap: 14px;
	padding: 14px 26px 14px 20px; border-radius: 999px;
	background: rgba(8, 8, 14, .55); backdrop-filter: blur(10px);
	border: 1px solid rgba(255, 255, 255, .22);
	transition: background var(--sjs-t), border-color var(--sjs-t), transform var(--sjs-t);
}
.sjs-player:hover .sjs-player__slate {
	background: var(--sjs-accent); border-color: var(--sjs-accent); transform: translate(-50%, -50%) scale(1.04);
}
.sjs-player__triangle {
	width: 0; height: 0; border-left: 13px solid var(--sjs-fg); border-block: 8px solid transparent;
}
.sjs-player:hover .sjs-player__triangle { border-left-color: #08080e; }
.sjs-player__text {
	font-family: var(--sjs-mono); font-size: .7rem; letter-spacing: .18em; text-transform: uppercase;
}
.sjs-player:hover .sjs-player__text { color: #08080e; }
.sjs-player iframe, .sjs-player video { width: 100%; height: 100%; border: 0; display: block; }
.sjs-player--native video { background: #000; }

/* Reels Instagram : même façade que YouTube, en vertical. La vignette suit le
   9/16 de la vidéo ; l'embed, lui, ajoute un en-tête et un pied de hauteur
   fixe autour d'elle, donc sa proportion réelle dépend de la largeur. D'où
   deux ratios : celui de l'affiche, puis celui de l'embed dès la lecture
   lancée, que `reels()` remplace par la hauteur exacte qu'Instagram annonce.
   Sans vignette (image bloquée, post supprimé), l'ardoise dégradée reste
   visible dessous et le lecteur fonctionne toujours. */
.sjs-reels {
	display: grid; gap: 20px; justify-items: center;
	grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr));
}
/* Bridé à 320 px : sur téléphone, un reel pleine largeur ferait 800 px de haut
   et repousserait tout le texte sous la ligne de flottaison. */
.sjs-reel { display: grid; gap: 12px; align-content: start; width: 100%; max-width: 320px; }
.sjs-player--ig {
	aspect-ratio: 9 / 16;
	background: linear-gradient(160deg, var(--sjs-accent-soft), var(--sjs-ink-2) 62%);
}
.sjs-player--ig.is-playing { aspect-ratio: 11 / 25; }
/* Le voile radial du lecteur suffit sur une miniature YouTube, cadrée large et
   souvent sombre en bord d'image. Une affiche de reel est verticale et pleine
   de couleur jusqu'aux bords : sans dégradé bas, le repère « Instagram »
   devient illisible. */
.sjs-player--ig .sjs-player__scrim {
	background:
		linear-gradient(180deg, rgba(8, 8, 14, .3), transparent 26%, transparent 58%, rgba(8, 8, 14, .82)),
		radial-gradient(70% 70% at 50% 50%, transparent, rgba(8, 8, 14, .45));
}
.sjs-player__source {
	position: absolute; left: 0; right: 0; bottom: 18px;
	font-family: var(--sjs-mono); font-size: .6rem; letter-spacing: .2em;
	text-transform: uppercase; color: var(--sjs-muted);
}
.sjs-reel figcaption {
	font-family: var(--sjs-mono); font-size: .64rem; letter-spacing: .12em;
	text-transform: uppercase;
}
.sjs-reel figcaption a {
	color: var(--sjs-dim); border-bottom: 1px solid transparent;
	transition: color var(--sjs-t), border-color var(--sjs-t);
}
.sjs-reel figcaption a:hover { color: var(--sjs-accent); border-color: currentColor; }
.sjs-reel figcaption i { font-style: normal; }

/* Galerie */
.sjs-gallery { display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
.sjs-gallery__item { border-radius: 16px; overflow: hidden; border: 1px solid var(--sjs-line); background: var(--sjs-ink-2); }
.sjs-gallery__item img {
	width: 100%; height: 100%; object-fit: cover; aspect-ratio: 4 / 3; cursor: zoom-in;
	transition: transform .7s var(--sjs-ease), filter .5s; filter: saturate(.92);
}
.sjs-gallery__item:hover img { transform: scale(1.05); filter: saturate(1.05); }

/* Liens externes */
.sjs-extlinks { display: grid; gap: 10px; }
.sjs-extlinks a {
	display: flex; justify-content: space-between; align-items: center; gap: 16px;
	padding: 16px 20px; border: 1px solid var(--sjs-line); border-radius: 14px;
	color: var(--sjs-muted); transition: border-color var(--sjs-t), color var(--sjs-t), padding-left var(--sjs-t);
}
.sjs-extlinks a:hover { border-color: var(--sjs-accent); color: var(--sjs-fg); padding-left: 26px; }
.sjs-extlinks i { font-style: normal; color: var(--sjs-accent); }

/* Équipe */
.sjs-team { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.sjs-team__item {
	display: flex; align-items: center; gap: 14px;
	padding: 12px 16px; border: 1px solid var(--sjs-line); border-radius: 999px;
	background: var(--sjs-surface);
}
.sjs-team__item.is-me { border-color: var(--sjs-accent); background: var(--sjs-accent-soft); }
.sjs-team__item img {
	width: 44px; height: 44px; border-radius: 50%; object-fit: cover; flex: none;
	filter: grayscale(1) contrast(1.05); background: var(--sjs-ink-3);
}
.sjs-team__item.is-me img { filter: none; }
.sjs-team__item span { display: grid; min-width: 0; }
.sjs-team__item strong { font-size: .88rem; font-weight: 600; }
.sjs-team__item em {
	font-style: normal; font-family: var(--sjs-mono); font-size: .62rem;
	letter-spacing: .06em; color: var(--sjs-dim);
}

/* Générique : les personnes qu'on cite sans les mettre en avant — l'équipe de
   production d'un projet d'école, par exemple. Pas de portrait, pas de capsule :
   un nom, un rôle, groupés par département. Les capsules restent réservées à
   l'équipe créative, sans quoi elles ne distinguent plus personne. */
.sjs-credits__label { margin-bottom: 14px; }
.sjs-credits__list + .sjs-credits__label { margin-top: 30px; }
.sjs-credits__list {
	display: grid; gap: 4px 24px;
	grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
}
.sjs-credits__list li {
	display: grid; gap: 3px;
	padding: 10px 0 10px 16px;
	border-left: 1px solid var(--sjs-line);
}
.sjs-credits__list strong { font-size: .88rem; font-weight: 600; }
.sjs-credits__list em {
	font-style: normal; font-family: var(--sjs-mono); font-size: .62rem;
	letter-spacing: .06em; color: var(--sjs-dim);
}

/* Navigation projets */
.sjs-siblings { border-top: 1px solid var(--sjs-line); background: var(--sjs-ink-2); }
.sjs-siblings__inner { display: grid; gap: 1px; }
@media (min-width: 760px) { .sjs-siblings__inner { grid-template-columns: 1fr 1fr; } }
.sjs-sibling { padding: 36px 0; display: grid; gap: 8px; transition: color var(--sjs-t); }
.sjs-sibling--next { text-align: right; }
.sjs-sibling__label {
	font-family: var(--sjs-mono); font-size: .64rem; letter-spacing: .16em;
	text-transform: uppercase; color: var(--sjs-dim);
}
.sjs-sibling__title {
	font-family: var(--sjs-display); font-weight: 700;
	font-size: clamp(1.3rem, 3vw, 2rem); letter-spacing: -.03em;
	transition: color var(--sjs-t);
}
.sjs-sibling:hover .sjs-sibling__title { color: var(--sjs-coral); }

/* --------------------------------------------------------------- Expertises */

.sjs-expertise { padding-block: clamp(52px, 7vw, 92px); border-top: 1px solid var(--sjs-line); }
.sjs-expertise__grid { display: grid; gap: 34px; }
@media (min-width: 940px) { .sjs-expertise__grid { grid-template-columns: .85fr 1.15fr; gap: 64px; } }
.sjs-expertise__kicker {
	font-family: var(--sjs-mono); font-size: .64rem; letter-spacing: .2em;
	text-transform: uppercase; color: var(--sjs-accent); margin-bottom: 14px;
}
.sjs-expertise__title {
	font-family: var(--sjs-display); font-weight: 800;
	font-size: clamp(2rem, 4.6vw, 3.2rem); letter-spacing: -.04em; margin-bottom: 16px;
}
.sjs-expertise__line { color: var(--sjs-muted); margin-bottom: 20px; max-width: 40ch; }
.sjs-expertise__count {
	font-family: var(--sjs-mono); font-size: .7rem; color: var(--sjs-dim); margin: 4px 0 18px;
}
.sjs-expertise__list { display: grid; gap: 2px; }
.sjs-expertise__list li {
	display: flex; align-items: baseline; gap: 18px;
	padding: 18px 0; border-bottom: 1px solid var(--sjs-line);
	font-size: clamp(1rem, 1.8vw, 1.22rem);
	transition: padding-left var(--sjs-t), color var(--sjs-t);
}
.sjs-expertise__list li:hover { padding-left: 12px; color: var(--sjs-accent); }
.sjs-expertise__idx {
	font-family: var(--sjs-mono); font-size: .64rem; color: var(--sjs-dim); flex: none;
}
.sjs-expertise__tools { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 24px; }
.sjs-expertise__tools span {
	padding: 7px 14px; border-radius: 999px; border: 1px solid var(--sjs-line);
	font-family: var(--sjs-mono); font-size: .66rem; color: var(--sjs-muted);
}

.sjs-toolbox__grid { display: grid; gap: 28px; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }
.sjs-toolbox__col h3 {
	font-family: var(--sjs-mono); font-size: .66rem; letter-spacing: .16em; text-transform: uppercase;
	color: var(--sjs-coral); margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--sjs-line);
}
.sjs-toolbox__col ul { display: grid; gap: 9px; }
.sjs-toolbox__col li { color: var(--sjs-muted); font-size: .95rem; }

.sjs-soft { border-top: 1px solid var(--sjs-line); }
.sjs-soft__grid { display: grid; gap: 44px; }
@media (min-width: 860px) { .sjs-soft__grid { grid-template-columns: 1fr 1fr; gap: 64px; } }
.sjs-soft__list { display: flex; flex-wrap: wrap; gap: 10px; }
.sjs-soft__list li {
	padding: 10px 18px; border-radius: 999px;
	border: 1px solid var(--sjs-line); background: var(--sjs-surface);
	font-size: .9rem;
}
.sjs-langs { display: grid; gap: 22px; }
.sjs-langs__row { display: flex; justify-content: space-between; align-items: baseline; gap: 14px; margin-bottom: 9px; }
.sjs-langs__row strong { font-weight: 600; }
.sjs-langs__row em { font-style: normal; font-size: .78rem; color: var(--sjs-dim); text-align: right; }
.sjs-langs__bar { display: block; height: 2px; background: var(--sjs-line); overflow: hidden; }
.sjs-langs__bar i {
	display: block; height: 100%; width: 0;
	background: linear-gradient(to right, var(--sjs-coral), var(--sjs-violet));
	transition: width 1.2s var(--sjs-ease);
}
.sjs-reveal.is-in .sjs-langs__bar i { width: var(--sjs-w); }

/* ------------------------------------------------------------------ À propos */

.sjs-about__top { display: grid; gap: 40px; }
@media (min-width: 940px) { .sjs-about__top { grid-template-columns: 1.25fr .75fr; gap: 64px; align-items: end; } }
.sjs-about__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 30px; }
.sjs-about__portrait { position: relative; }
.sjs-about__portrait img {
	width: 100%; border-radius: var(--sjs-r-lg); border: 1px solid var(--sjs-line);
	filter: saturate(.95); aspect-ratio: 4 / 3; object-fit: cover;
}
.sjs-about__portrait figcaption {
	margin-top: 14px; font-family: var(--sjs-mono); font-size: .66rem;
	letter-spacing: .1em; color: var(--sjs-dim); text-transform: uppercase;
}

.sjs-story__grid { display: grid; gap: 30px; }
@media (min-width: 940px) { .sjs-story__grid { grid-template-columns: .8fr 1.2fr; gap: 64px; } }
.sjs-story__big {
	font-family: var(--sjs-serif); font-style: italic;
	font-size: clamp(1.8rem, 4.4vw, 3rem); line-height: 1.12;
	color: var(--sjs-gold);
}
.sjs-story__text { display: grid; gap: 18px; color: var(--sjs-muted); font-size: 1.03rem; max-width: 60ch; }
.sjs-story__text em { color: var(--sjs-fg); font-style: italic; }

.sjs-timeline { position: relative; display: grid; gap: 6px; }
html.sjs-html .sjs-body .sjs-timeline { padding-left: 34px; }
.sjs-timeline__rail { position: absolute; left: 7px; top: 12px; bottom: 12px; width: 1px; background: var(--sjs-line); }
.sjs-timeline__rail i {
	display: block; width: 100%; height: 0;
	background: linear-gradient(to bottom, var(--sjs-gold), var(--sjs-coral) 45%, var(--sjs-violet));
	transition: height .2s linear;
}
.sjs-tl { position: relative; padding: 26px 0 34px; }
.sjs-tl__dot {
	position: absolute; left: -32px; top: 30px;
	z-index: 1;
	width: 11px; height: 11px; border-radius: 50%;
	background: var(--sjs-ink); border: 1px solid var(--sjs-line-2);
	transition: background var(--sjs-t), border-color var(--sjs-t), transform var(--sjs-t);
}
.sjs-tl.is-in .sjs-tl__dot { background: var(--sjs-accent); border-color: var(--sjs-accent); transform: scale(1.18); }
.sjs-tl__year {
	font-family: var(--sjs-mono); font-size: .68rem; letter-spacing: .14em;
	text-transform: uppercase; color: var(--sjs-accent); margin-bottom: 10px;
}
.sjs-tl__title {
	font-family: var(--sjs-display); font-weight: 700;
	font-size: clamp(1.2rem, 2.4vw, 1.6rem); letter-spacing: -.025em;
}
.sjs-tl__text { color: var(--sjs-muted); max-width: 60ch; font-size: .97rem; margin-top: 10px; }

.sjs-strip-wrap { overflow: hidden; }
.sjs-strip {
	display: flex; gap: 16px; margin-top: 22px;
	padding: 0 var(--sjs-gut) 18px;
	overflow-x: auto; scroll-snap-type: x mandatory;
	scrollbar-width: thin; scrollbar-color: var(--sjs-line-2) transparent;
}
.sjs-strip__item { flex: 0 0 clamp(230px, 34vw, 380px); scroll-snap-align: center; }
.sjs-strip__item img {
	width: 100%; aspect-ratio: 4 / 3; object-fit: cover;
	border-radius: var(--sjs-r); border: 1px solid var(--sjs-line);
	cursor: zoom-in; filter: saturate(.92); transition: filter .5s, transform .6s var(--sjs-ease);
}
.sjs-strip__item:hover img { filter: saturate(1.06); transform: translateY(-4px); }
.sjs-strip__item figcaption {
	margin-top: 12px; font-family: var(--sjs-mono); font-size: .64rem;
	letter-spacing: .1em; text-transform: uppercase; color: var(--sjs-dim);
}

/* -------------------------------------------------------------------- Contact */

.sjs-contact { display: grid; gap: 34px; }
@media (min-width: 940px) { .sjs-contact { grid-template-columns: .8fr 1.2fr; gap: 56px; align-items: start; } }

.sjs-availcard {
	padding: 26px 24px; border-radius: var(--sjs-r);
	border: 1px solid rgba(127, 231, 212, .3);
	background: linear-gradient(160deg, rgba(127, 231, 212, .1), transparent 70%);
	margin-bottom: 26px;
}
.sjs-availcard__status {
	display: flex; align-items: center; gap: 9px;
	font-family: var(--sjs-mono); font-size: .68rem; letter-spacing: .16em;
	text-transform: uppercase; color: var(--sjs-mint); margin-bottom: 12px;
}
.sjs-availcard__text { font-weight: 600; font-size: 1.05rem; margin-bottom: 8px; }
.sjs-availcard__sub { color: var(--sjs-muted); font-size: .9rem; }

.sjs-coords { display: grid; gap: 2px; }
.sjs-coords li {
	display: flex; justify-content: space-between; align-items: baseline; gap: 18px;
	padding: 16px 0; border-bottom: 1px solid var(--sjs-line);
}
.sjs-coords__label {
	font-family: var(--sjs-mono); font-size: .62rem; letter-spacing: .16em;
	text-transform: uppercase; color: var(--sjs-dim); flex: none;
}
/* Repère de canal : le libellé devient une petite boîte contourée, dans le vert
   menthe des marqueurs techniques — même traitement que dans `site-js-old`. */
.sjs-coords__label--canal {
	color: var(--sjs-mint); letter-spacing: .14em;
	border: 1px solid rgba(127, 231, 212, .35); border-radius: 6px;
	padding: 4px 9px;
}
.sjs-coords a { transition: color var(--sjs-t); text-align: right; }
.sjs-coords a:hover { color: var(--sjs-coral); }

.sjs-form-wrap {
	border: 1px solid var(--sjs-line); border-radius: var(--sjs-r-lg);
	background: linear-gradient(180deg, var(--sjs-surface), transparent);
	padding: clamp(26px, 4vw, 42px);
}
.sjs-form { display: grid; gap: 20px; }
.sjs-field { display: grid; gap: 9px; }
.sjs-field label {
	font-family: var(--sjs-mono); font-size: .64rem; letter-spacing: .14em;
	text-transform: uppercase; color: var(--sjs-dim);
}
.sjs-field input, .sjs-field select, .sjs-field textarea {
	width: 100%; padding: 15px 18px;
	background: rgba(255, 255, 255, .03);
	border: 1px solid var(--sjs-line); border-radius: 14px;
	color: var(--sjs-fg); font-family: var(--sjs-body); font-size: .96rem;
	transition: border-color var(--sjs-t), background var(--sjs-t);
	appearance: none;
}
.sjs-field select {
	background-image: linear-gradient(45deg, transparent 50%, var(--sjs-muted) 50%), linear-gradient(135deg, var(--sjs-muted) 50%, transparent 50%);
	background-position: calc(100% - 22px) 50%, calc(100% - 16px) 50%;
	background-size: 6px 6px, 6px 6px;
	background-repeat: no-repeat;
}
.sjs-field textarea { resize: vertical; min-height: 140px; }
.sjs-field input::placeholder, .sjs-field textarea::placeholder { color: var(--sjs-dim); }
.sjs-field input:focus, .sjs-field select:focus, .sjs-field textarea:focus {
	border-color: var(--sjs-coral); background: rgba(255, 255, 255, .05); outline: none;
}
.sjs-form__note { font-size: .76rem; color: var(--sjs-dim); text-align: center; }
.sjs-hp { position: absolute; left: -9999px; }

.sjs-alert { padding: 15px 20px; border-radius: 14px; margin-bottom: 24px; font-size: .92rem; }
.sjs-alert--ok { border: 1px solid rgba(127, 231, 212, .4); background: rgba(127, 231, 212, .1); color: var(--sjs-mint); }
.sjs-alert--warn { border: 1px solid rgba(255, 154, 118, .4); background: rgba(255, 154, 118, .1); color: var(--sjs-coral); }

/* ------------------------------------------------------------------ Bandeau final */

.sjs-outro {
	position: relative; overflow: hidden;
	padding: clamp(74px, 11vw, 130px) 0;
	border-top: 1px solid var(--sjs-line);
	background: var(--sjs-ink-2);
	text-align: center;
}
.sjs-outro > .sjs-wrap { position: relative; z-index: 1; }
.sjs-outro__inner { max-width: 680px; margin: 0 auto; }
.sjs-outro .sjs-eyebrow { justify-content: center; }
.sjs-outro__title { font-size: clamp(2.2rem, 6.5vw, 4.4rem); margin-bottom: 20px; }
.sjs-outro__lead { color: var(--sjs-muted); margin-bottom: 32px; }
.sjs-outro__actions { display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; }

/* ----------------------------------------------------------------- Pied de page */

.sjs-footer { border-top: 1px solid var(--sjs-line); padding: clamp(48px, 7vw, 76px) 0 30px; }
.sjs-footer__grid { display: grid; gap: 34px; }
@media (min-width: 760px) { .sjs-footer__grid { grid-template-columns: 1.4fr 1fr 1fr 1.2fr; gap: 40px; } }
.sjs-footer__name {
	font-family: var(--sjs-display); font-weight: 800; font-size: 1.4rem;
	letter-spacing: -.03em; margin-bottom: 8px;
}
.sjs-footer__role { color: var(--sjs-muted); font-size: .9rem; }
.sjs-footer__loc { color: var(--sjs-dim); font-size: .84rem; margin-top: 4px; }
.sjs-footer__col { display: grid; gap: 9px; align-content: start; }
.sjs-footer__label {
	font-family: var(--sjs-mono); font-size: .62rem; letter-spacing: .16em;
	text-transform: uppercase; color: var(--sjs-dim); margin-bottom: 4px;
}
.sjs-footer__col a { color: var(--sjs-muted); font-size: .9rem; transition: color var(--sjs-t); width: fit-content; }
.sjs-footer__col a:hover { color: var(--sjs-coral); }
.sjs-footer__bottom {
	margin-top: 44px; padding-top: 22px; border-top: 1px solid var(--sjs-line);
	display: flex; flex-wrap: wrap; justify-content: space-between; gap: 14px;
	font-family: var(--sjs-mono); font-size: .66rem; color: var(--sjs-dim); letter-spacing: .08em;
}
.sjs-footer__tc { color: var(--sjs-coral); opacity: .6; }
.sjs-footer__top:hover { color: var(--sjs-fg); }

/* -------------------------------------------------------------------- Visionneuse */

.sjs-lightbox {
	position: fixed; inset: 0; z-index: 180;
	background: rgba(4, 4, 8, .95); backdrop-filter: blur(14px);
	display: grid; place-items: center; padding: 5vh 5vw;
	opacity: 0; transition: opacity .35s;
}
.sjs-lightbox.is-open { opacity: 1; }
.sjs-lightbox__stage { max-width: 100%; max-height: 100%; display: grid; place-items: center; }
.sjs-lightbox__stage img,
.sjs-lightbox__stage video {
	max-width: 100%; max-height: 90vh; border-radius: 14px;
	box-shadow: var(--sjs-shadow);
}
.sjs-body .sjs-lightbox__close {
	position: absolute; top: 22px; right: 26px;
	width: 46px; height: 46px; border-radius: 50%;
	border: 1px solid var(--sjs-line-2); color: var(--sjs-fg);
	display: grid; place-items: center; font-size: 1rem;
	transition: background var(--sjs-t), transform var(--sjs-t);
}
.sjs-body .sjs-lightbox__close:hover { background: var(--sjs-coral); color: #08080e; transform: rotate(90deg); }

/* ---------------------------------------------------------------- Apparitions */

.sjs-reveal {
	opacity: 0; transform: translateY(28px);
	transition: opacity .8s var(--sjs-ease), transform .8s var(--sjs-ease);
}
.sjs-reveal.is-in { opacity: 1; transform: none; }

/* --------------------------------------------------------------------- Mobile */

@media (max-width: 900px) {
	.sjs-nav { display: none; }
	.sjs-body .sjs-burger { display: block; }
	.sjs-brand__text em { display: none; }
	.sjs-hero__scroll { display: none; }
	.sjs-avail__text { display: none; }
	.sjs-avail { padding: 11px; }
	.sjs-sibling--next { text-align: left; }
	.sjs-coords li { flex-direction: column; align-items: flex-start; gap: 6px; }
	.sjs-coords a { text-align: left; }
}

@media (max-width: 640px) {
	.sjs-hero__title--out { font-size: .78em; }
	.sjs-hero__actions { flex-direction: column; align-items: flex-start; }
	.sjs-body .sjs-hero__actions .sjs-btn { width: 100%; }
	.sjs-hero { min-height: 92svh; padding-top: 120px; }
	.sjs-body .sjs-btn { padding: 14px 24px; font-size: .88rem; }
	.sjs-grid { gap: 16px; }
	.sjs-card__body { padding: 20px; }
	html.sjs-html .sjs-body .sjs-steps { padding-left: 28px; }
	html.sjs-html .sjs-body .sjs-timeline { padding-left: 28px; }
	.sjs-tl__dot { left: -26px; }
}

/* ------------------------------------------------------- Mouvement réduit / impression */

@media (prefers-reduced-motion: reduce) {
	.sjs-body *,
	.sjs-body *::before,
	.sjs-body *::after {
		animation-duration: .001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .001ms !important;
		scroll-behavior: auto !important;
	}
	.sjs-reveal { opacity: 1; transform: none; }
	.sjs-split .sjs-ch { opacity: 1; transform: none; }
	.sjs-hero__video { animation: none; }
	.sjs-loader { display: none; }
	.sjs-cursor { display: none; }
}

@media print {
	.sjs-header, .sjs-menu, .sjs-loader, .sjs-cursor, .sjs-grain, .sjs-hero__media,
	.sjs-marquee, .sjs-progress, .sjs-ribbon { display: none !important; }
	.sjs-body { background: #fff; color: #000; }
	.sjs-reveal { opacity: 1; transform: none; }
}

/* Barre d'admin WordPress */
.admin-bar .sjs-header,
.admin-bar .sjs-progress { top: 32px; }
@media (max-width: 782px) {
	.admin-bar .sjs-header,
	.admin-bar .sjs-progress { top: 46px; }
}
