/* Cardo est servie par le site : aucune requête vers Google, qui
   recevrait sinon l'adresse IP de chaque visiteur. Seules les deux coupes
   utilisées sont embarquées, sans le gras, que le site n'emploie pas. */
@font-face {
  font-family: 'Cardo';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/polices/cardo-italic-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Cardo';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/polices/cardo-italic-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Cardo';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/polices/cardo-normal-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Cardo';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/polices/cardo-normal-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ═══ HOLISPINE ═══════════════════════════════════════════════════════
   Deux couleurs, rien d'autre. Le vide fait le luxe : un écran ne porte
   qu'une idée. Tout ce qui structure est en capitales minuscules et très
   espacées ; le serif ne sert qu'aux déclarations.

   Les deux publics se distinguent par le registre, pas par l'ornement :
   les artistes sur le fond profond — plateau, nuit, projection ;
   les dirigeants sur le fond clair — jour, lucidité, décision.
   Ce sont les deux usages que la charte prescrit elle-même.
   ════════════════════════════════════════════════════════════════════ */

:root {
  /* Les deux couleurs de la charte, sans invention.
     #2a1616 est une nuance de #382222 : même teinte, même saturation,
     clarté ramenée à 62 % pour tenir le registre nocturne. */
  --profond: #2a1616;
  --creme:   #f9f1e5;
  --titre:   'Cardo', Georgia, 'Times New Roman', serif;
  --texte:   'Cardo', Georgia, 'Times New Roman', serif;
  --fond-entete: var(--profond);
  --duree:   .55s;
  --courbe:  cubic-bezier(.7,0,.2,1);
}

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

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--profond);
  color: var(--creme);
  font-family: var(--texte);
  font-size: 1rem;
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
}

h1, h2 { margin: 0; font-weight: 400; }
p { margin: 0; }
a { color: inherit; text-decoration: none; }

:focus-visible { outline: 1px solid currentColor; outline-offset: 6px; }

.serif { font-family: var(--titre); font-weight: 400; }

/* La mention : le seul style de texte structurel du site. À .28em et 11px,
   deux mots tenaient encore ; une ligne entière devenait un mur. */
.mention {
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .18em;
  text-transform: uppercase;
  line-height: 1.6;
}

@font-face {
  font-family: 'Cardo';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/polices/cardo-gras-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Cardo';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/polices/cardo-gras-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── En-tête ───────────────────────────────────────────────────────── */
.entete {
  position: fixed; inset: 0 0 auto 0; z-index: 40;
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center;
  padding: 1.75rem clamp(1.25rem, 4vw, 2.75rem);
  color: var(--creme);
}
/* Le logotype est un tracé de la charte, qu'on ne peut pas épaissir :
   il gagne en présence par la taille, pas par la graisse. */
.entete .marque { justify-self: center; }
.entete a { display: inline-flex; align-items: center; min-height: 44px; }
.entete .droite { justify-self: end; }
.entete .gauche { justify-self: start; }

/* Le bandeau s'efface quand on descend et revient dès qu'on remonte :
   la lecture garde tout l'écran, la navigation reste à un geste. Il
   revient aussi dès qu'il reçoit le focus clavier. */
.entete { transition: transform .35s var(--courbe), background-color .3s ease; }
/* Sans fond, le bandeau se posait sur le texte : un trait de champ
   traversait le logotype. Il ne prend son fond qu'une fois décollé du
   haut, pour rester invisible sur l'image d'accueil. */
.entete[data-colle] {
  background-color: color-mix(in srgb, var(--fond-entete) 88%, transparent);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
.entete[data-masque] { transform: translateY(-100%); }
.entete:focus-within { transform: none; }

/* ── Les vues ──────────────────────────────────────────────────────── */
.vue {
  display: none; min-height: 100svh; position: relative; isolation: isolate;
  --aplat: var(--profond);
  --force-fondu: 34%;
}
.vue[data-actif] { display: block; }
.vue[data-fond="clair"] { background: var(--creme); color: var(--profond); --aplat: var(--creme); --force-fondu: 8%; }

/* ── La découpe ────────────────────────────────────────────────────
   L'étoile n'est pas posée sur le fond : elle est évidée dedans. On ne
   voit la matière qu'à travers elle. Au défilement, la fenêtre s'ouvre
   jusqu'à ce qu'on la traverse. C'est la seule « image » du site.     */
.embrasure { position: relative; height: 185svh; }
.embrasure .fixe { position: sticky; top: 0; height: 100svh; overflow: hidden; background: var(--aplat); }

/* Le texte de l'en-tête et « défiler » se posent maintenant sur l'image.
   Ces fondus ramènent le haut et le bas vers l'aplat pour qu'ils restent
   lisibles, sans toucher à l'étoile. */
.embrasure .fixe::after {
  content: '';
  position: absolute; inset: 0; z-index: 1;
  pointer-events: none;
  background: linear-gradient(to bottom,
    color-mix(in srgb, var(--aplat) 62%, transparent) 0%,
    transparent 20%, transparent 80%,
    color-mix(in srgb, var(--aplat) 62%, transparent) 100%);
}

/* Le champ recule légèrement au défilement : ce décalage entre l'image
   et la fenêtre qui s'ouvre donne la sensation d'entrer. */
.decoupe .champ {
  transform-box: view-box;
  transform-origin: 500px 500px;
  transform: scale(var(--recul, 1));
  will-change: transform;
}
/* En fin de traversée la nacre occupe tout l'écran ; ce voile la ramène
   au brun avant la coupe, pour que l'entrée dans la section suivante ne
   soit pas un à-coup lumineux. */
.voile { position: absolute; inset: 0; background: var(--aplat); opacity: var(--fondu, 0); }

.decoupe { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
/* will-change prévient le navigateur : il garde la découpe sur sa propre
   couche, au lieu de tout redessiner à chaque image. */
.decoupe .zoom {
  transform-box: view-box; transform-origin: 500px 500px;
  transform: scale(var(--ouverture, 1));
  will-change: transform;
}

.filigrane { position: absolute; inset: 0; z-index: -1; display: grid; place-items: center; pointer-events: none; }
.filigrane svg { height: min(58vh, 40rem); fill: currentColor; opacity: .06; }

.sur-embrasure {
  position: absolute; inset: 0; z-index: 2;
  display: flex; flex-direction: column; justify-content: space-between;
  padding: 7.5rem clamp(1.25rem, 4vw, 2.75rem) 2.25rem;
  text-align: center; align-items: center;
  pointer-events: none;
}
.sur-embrasure > * { pointer-events: auto; }
.sur-embrasure[data-efface] { opacity: var(--visible, 1); transition: opacity .2s linear; }

.scene {
  min-height: 100svh;
  display: flex; flex-direction: column; justify-content: center;
  gap: clamp(1.6rem, 4vh, 3rem);
  padding: 9rem clamp(1.25rem, 4vw, 2.75rem) 6rem;
  text-align: center;
  align-items: center;
}

.enorme {
  font-size: clamp(2.5rem, 7.2vw, 6.2rem);
  line-height: 1.02;
  letter-spacing: -.005em;
  max-width: 17ch;
  margin-block: clamp(.5rem, 3vh, 2rem);
}

.phrase {
  max-width: 34ch;
  font-size: clamp(1.05rem, 1.6vw, 1.3rem);
  line-height: 1.6;
  opacity: .78;
}

/* ── Les deux entrées ──────────────────────────────────────────────── */
.entrees { display: flex; flex-wrap: wrap; justify-content: center; gap: 1.5rem 4.5rem; }
.entree {
  display: inline-flex; align-items: center; gap: .9em; min-height: 44px;
  padding-bottom: .35rem;
  border-bottom: 1px solid currentColor;
  opacity: .75;
  transition: opacity .4s var(--courbe), letter-spacing .4s var(--courbe);
}
.entree:hover, .entree:focus-visible { opacity: 1; letter-spacing: .24em; }

/* ── Bas d'écran ───────────────────────────────────────────────────── */
.pied-ecran {
  position: absolute; inset: auto 0 0 0;
  display: flex; justify-content: center;
  padding: 0 clamp(1.25rem, 4vw, 2.75rem) 2.25rem;
}
.pied-ecran .mention { opacity: .68; }

/* ── Les trois lignes d'une vue intérieure ─────────────────────────── */
.triade {
  display: grid; gap: 2.5rem;
  width: min(100%, 62rem);
  text-align: left;
  border-top: 1px solid currentColor;
  padding-top: 2.5rem;
}
@media (min-width: 820px) { .triade { grid-template-columns: repeat(3, 1fr); gap: 3.5rem; } }
.triade > div { display: flex; flex-direction: column; gap: .6rem; }
.triade .mention { opacity: .72; }
.triade p:last-child { font-size: 1.0625rem; line-height: 1.55; opacity: .85; }

.retour { display: inline-flex; align-items: center; gap: .8em; min-height: 44px; opacity: .75; }
.retour:hover { opacity: 1; }

/* ── La transition : la marque est l'acteur ────────────────────────── */
.rideau {
  position: fixed; inset: 0; z-index: 90;
  display: grid; place-items: center;
  background: var(--profond);
  transform: scaleY(0); transform-origin: bottom;
  pointer-events: none;
  visibility: hidden;
}
.rideau svg { height: 22vh; fill: var(--creme); opacity: 0; transform: scale(.7); }

:root[data-couvert] .rideau { visibility: visible; transform: scaleY(1); }
:root[data-couvert] .rideau svg { opacity: 1; transform: scale(1); }

.rideau[data-etat="pose"] {
  visibility: visible;
  transform: scaleY(1);
}
.rideau[data-etat="pose"] svg { opacity: 1; transform: scale(1); }

.rideau[data-etat="entre"] {
  visibility: visible;
  transform: scaleY(1); transform-origin: bottom;
  transition: transform var(--duree) var(--courbe);
}
.rideau[data-etat="entre"] svg {
  opacity: 1; transform: scale(1);
  transition: opacity .4s ease .18s, transform .7s var(--courbe) .1s;
}
.rideau[data-etat="sort"] {
  visibility: visible;
  transform: scaleY(0); transform-origin: top;
  transition: transform var(--duree) var(--courbe);
}
.rideau[data-etat="sort"] svg { opacity: 0; transform: scale(1.25); transition: opacity .3s ease, transform .55s var(--courbe); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; }
  .rideau { display: none !important; }
}

/* Le manifeste : la seule vue qui argumente, donc la seule qui a du texte
   suivi. Mesure courte, interlignage généreux. */
.manifeste { width: min(100%, 40rem); text-align: left; display: flex; flex-direction: column; gap: 1.5rem; }
.manifeste p { font-size: 1.0625rem; line-height: 1.75; opacity: .82; }
/* L'exergue ne crie pas, il change de registre : le serif d'affichage,
   réservé aux déclarations, marque la phrase comme un énoncé et non
   comme du texte souligné. */
.manifeste p.exergue {
  font-family: var(--titre);
  font-size: clamp(1.35rem, 2.4vw, 1.75rem);
  line-height: 1.28;
  opacity: 1;
  margin-block: .75rem;
}

.manifeste p.source {
  margin-top: .75rem;
  border-top: 1px solid currentColor;
  padding-top: 1.1rem;
  font-size: .75rem;
  line-height: 1.65;
  letter-spacing: 0;
  text-transform: none;
  opacity: .62;
}
.source a { text-decoration: underline; text-underline-offset: .2em; }

/* Une mesure un peu plus large là où la phrase est longue, pour éviter
   la colonne haute et étroite. */
.phrase.large { max-width: 44ch; }

/* L'encadré retourne la page : crème sur profond, le second registre que
   la charte prescrit pour les fonds foncés. Aucune couleur ajoutée, et
   la conclusion y passe dans le serif, comme tout ce qui déclare. */
.manifeste .encadre {
  margin-top: 1rem;
  background: var(--creme);
  color: var(--profond);
  padding: clamp(1.75rem, 4vw, 2.75rem);
  display: flex;
  flex-direction: column;
  gap: 1.25rem;
}
.manifeste .encadre p { opacity: 1; }
.manifeste .encadre p.conclusion {
  font-family: var(--titre);
  font-size: clamp(1.25rem, 2.2vw, 1.6rem);
  line-height: 1.3;
}

/* Le DOI reste minuscule à l'œil mais devient tappable : la marge
   négative annule la poussée du rembourrage sur la ligne. */
.manifeste p.source a {
  display: inline-block;
  padding-block: .75rem;
  margin-block: -.75rem;
}

/* ── « Défiler » ─────────────────────────────────────────────────────
   Le mot passait devant la pointe lumineuse de l'étoile, où il
   disparaissait. Le même mélange par différence que l'en-tête le rend
   lisible sur le brun comme sur la nacre, sans le rendre criard.      */
.defiler { opacity: 1; }

/* ── Formulaire de candidature ──────────────────────────────────────
   Aucune question de santé : ce site n'est pas hébergé pour en
   recevoir, et la règle vaut aussi pour un simple formulaire.         */
.candidature {
  width: min(100%, 40rem);
  text-align: left;
  display: grid;
  gap: 1.75rem 2.5rem;
  margin-top: .5rem;
}
@media (min-width: 700px) {
  .candidature { grid-template-columns: 1fr 1fr; }
  .champ--large, .consentement, .envoyer, .erreur { grid-column: 1 / -1; }
}

.champ { display: flex; flex-direction: column; gap: .55rem; }
.champ label { opacity: .75; }

.candidature input[type="text"],
.candidature input[type="email"],
.candidature input[type="tel"],
.candidature select {
  min-height: 44px;
  width: 100%;
  padding: .35rem 0;
  border: 0;
  border-bottom: 1px solid currentColor;
  background: transparent;
  color: inherit;
  font: inherit;
  font-size: 1rem;
  border-radius: 0;
  appearance: none;
  transition: border-color .25s ease;
}
.candidature select { cursor: pointer; }
.candidature select option { background: var(--profond); color: var(--creme); }
.candidature input:focus-visible,
.candidature select:focus-visible { outline: 0; border-bottom-width: 2px; }
.candidature input::placeholder { color: inherit; opacity: .4; }

.consentement {
  display: flex; align-items: flex-start; gap: .8rem;
  font-size: .8125rem; line-height: 1.6; opacity: .82; cursor: pointer;
}
.consentement input { margin-top: .25rem; accent-color: var(--creme); width: 16px; height: 16px; }

.envoyer {
  justify-self: start;
  min-height: 48px;
  padding: .55rem 1.6rem;
  border: 1px solid currentColor;
  background: transparent;
  color: inherit;
  font-family: inherit;
  cursor: pointer;
  transition: background-color .25s ease, color .25s ease;
}
.envoyer:hover { background: var(--creme); color: var(--profond); }

.erreur { font-size: .8125rem; letter-spacing: 0; text-transform: none; opacity: .85; }
.merci { width: min(100%, 34rem); opacity: .85; line-height: 1.9; font-weight: 400; letter-spacing: .1em; }
.repli { opacity: .68; }
.adresse { font-style: normal; opacity: .75; line-height: 2; }
.repli a { text-decoration: underline; text-underline-offset: .25em; }

/* Les flèches sont tracées : sur téléphone, le caractère ↗ était remplacé
   par un emoji bleu. Tracées, elles prennent la couleur du texte. */
.fleche {
  width: 1em; height: 1em; flex: none;
  fill: none; stroke: currentColor; stroke-width: 1px; stroke-linecap: square;
  overflow: visible;
}

.enorme { text-wrap: balance; }

/* L'accroche et son sous-titre forment un seul bloc : l'écart d'une
   scène entre les deux les séparait comme deux idées. */
.chapeau { display: flex; flex-direction: column; align-items: center; gap: 1rem; }
.phrase.appuyee { opacity: 1; }

.facultatif { opacity: .7; }

/* Le champ piège : hors de l'écran et du parcours clavier, invisible pour
   les lecteurs d'écran. Seul un robot qui remplit tout le renseigne. */
.piege { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }

.envoyer:disabled { opacity: .5; cursor: wait; }

.consentement a { text-decoration: underline; text-underline-offset: .2em; }

/* Sur fond clair, le formulaire inverse ses contrastes : la case cochée
   et le survol du bouton disparaissaient crème sur crème. */
.vue[data-fond="clair"] .consentement input { accent-color: var(--profond); }
.vue[data-fond="clair"] .envoyer:hover { background: var(--profond); color: var(--creme); }

/* Les pages légales reprennent la mesure du manifeste. Les champs encore
   inconnus restent visibles, pour qu'aucun ne parte en ligne vide. */
.legal { gap: .9rem; }
.legal h2 { margin-top: 1.25rem; opacity: .6; }
.legal a { text-decoration: underline; text-underline-offset: .2em; }
.legal .maj { font-size: .6875rem; opacity: .62; margin-top: 1.5rem; }

/* ── Pied de site ──────────────────────────────────────────────────
   Même registre que les labels de navigation : il ne doit pas peser. */
.pied-site {
  padding-inline: clamp(1.25rem, 4vw, 2.75rem);
}
/* Le filet et l'air sont portés par ce bloc intérieur ; le fond du pied,
   lui, va d'un bord à l'autre. Avec une marge latérale, le brun du corps
   de page apparaissait de chaque côté. */
.pied-dedans {
  display: flex; flex-direction: column; align-items: center; gap: 1rem;
  padding-block: 3rem 2.5rem;
  border-top: 1px solid color-mix(in srgb, currentColor 28%, transparent);
  text-align: center;
}
.pied-liens { display: flex; flex-wrap: wrap; justify-content: center; gap: .75rem 2.5rem; }
.pied-site .mention { opacity: .7; }
.pied-adresse { font-style: normal; letter-spacing: .12em; }
/* L'adresse porte le pied de page ; les pages légales et la mention de
   propriété l'accompagnent, donc en romain. */
.pied-liens .mention, .pied-copyright { font-weight: 400; }
.pied-copyright { letter-spacing: .12em; opacity: .62; }
.pied-site a:hover { opacity: .8; }

/* En-tête et pied prennent la couleur de la vue ouverte. */
body:has(.vue[data-actif][data-fond="clair"]) { --fond-entete: var(--creme); }
body:has(.vue[data-actif][data-fond="clair"]) .entete,
body:has(.vue[data-actif][data-fond="clair"]) .pied-site { color: var(--profond); }
body:has(.vue[data-actif][data-fond="clair"]) .pied-site { background: var(--creme); }

/* Le logotype de l'en-tête : tracé vectoriel de la charte, à l'abri de
   tout changement de police. */
.logotype { display: block; height: 17px; width: auto; }
@media (min-width: 700px) { .logotype { height: 19px; } }
