/* ============================================================
   PBM Collectif — site vitrine
   Marine profond + or, sections voilées sur le fond animé.
   ============================================================ */

@font-face{font-family:'Inter';font-style:normal;font-weight:400 700;font-display:swap;
  src:url(assets/fonts/inter-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:'Inter';font-style:normal;font-weight:400 700;font-display:swap;
  src:url(assets/fonts/inter-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:'Playfair Display';font-style:normal;font-weight:500 700;font-display:swap;
  src:url(assets/fonts/playfair-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:'Playfair Display';font-style:normal;font-weight:500 700;font-display:swap;
  src:url(assets/fonts/playfair-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;}

:root{
  --navy:#0A1B3D;
  --navy-2:#0E2450;
  --navy-line:rgba(158,210,242,.16);
  --or:#C5A253;
  --or-clair:#E6C97A;
  --ciel:#9ED2F2;
  --blanc:#FFFFFF;
  --texte:#E9EEF7;
  --mute:#C3CEE2;
  --mute-2:#BFCADF;
  --voile:rgba(11,36,71,.58);
  --carte:rgba(255,255,255,.045);
  /* Contours ÉDITORIAUX : angles nets, à peine adoucis. Deux valeurs suffisent
     — au-delà, les grands rayons donnent l'aspect « composant générique » que
     le client ne veut plus. La capsule de navigation et la bascule de langue
     gardent volontairement leur forme ronde : ce sont des commandes, pas des
     conteneurs de contenu, et elles ont été demandées ainsi. */
  --r:3px;
  --r-lg:3px;
  --wrap:1180px;
  --sans:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --serif:'Playfair Display',Georgia,'Times New Roman',serif;
}

*,*::before,*::after{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:92px;}
body{
  margin:0;background:var(--navy);color:var(--texte);
  font-family:var(--sans);font-size:17px;line-height:1.68;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
img{max-width:100%;height:auto;display:block;}
a{color:inherit;}
h1,h2,h3,h4{margin:0;font-family:var(--serif);font-weight:600;line-height:1.18;letter-spacing:-.01em;}
p{margin:0;}
ul,ol{margin:0;padding:0;list-style:none;}
.sprite{position:absolute;width:0;height:0;overflow:hidden;}
.ic{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;flex:none;}

/* ---------- fond du site ----------
   Trois couches fixes, empilées dans cet ordre :
     .bg-static : le dégradé marine, socle toujours présent ;
     .bg-flux   : les tracés en écoulement — LE fond du site. Ils remplacent
                  l'ancien canvas WebGL (constellation, orbites elliptiques
                  statiques et courants de bruit), retiré à la demande du
                  client. L'atome 3D interactif du héro d'accueil n'a rien à
                  voir avec cette couche et reste en place ;
     .bg-voile  : voile par-dessus, qui borne l'encre des tracés sous le
                  contenu dense. Bien plus léger qu'avant : les particules
                  additives du WebGL saturaient, pas ces traits-ci. */
.bg-static,.bg-flux,.bg-voile{position:fixed;inset:0;z-index:0;pointer-events:none;
  width:100%;height:100%;display:block;}
.bg-voile{background:rgba(8,20,45,.30);}
.bg-static{
  background:
    radial-gradient(1000px 700px at 78% 8%,rgba(31,71,128,.55),transparent 62%),
    radial-gradient(760px 560px at 12% 88%,rgba(197,162,83,.13),transparent 66%),
    radial-gradient(900px 620px at 50% 45%,rgba(20,48,92,.5),transparent 70%),
    linear-gradient(168deg,#08152F 0%,#102A55 46%,#08152F 100%);
  background-color:var(--navy);
}
.site-header,main,.site-footer{position:relative;z-index:1;}

.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:24px;}
.wrap-etroit{max-width:880px;}

.skip{position:absolute;left:-9999px;top:0;z-index:400;background:var(--or);color:var(--navy);
  padding:12px 18px;border-radius:0 0 3px 0;font-weight:600;}
.skip:focus{left:0;}
:focus-visible{outline:3px solid var(--ciel);outline-offset:3px;border-radius:2px;}

/* ---------- boutons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.5em;
  font-family:var(--sans);font-size:16px;font-weight:600;line-height:1.2;
  padding:15px 28px;border-radius:3px;border:1.5px solid transparent;
  text-decoration:none;cursor:pointer;text-align:center;
  transition:transform .2s ease,background .2s ease,border-color .2s ease,color .2s ease;
}
.btn-gold{background:var(--or);color:#0A1B3D;box-shadow:0 10px 28px rgba(197,162,83,.24);}
.btn-gold:hover{background:var(--or-clair);transform:translateY(-2px);}
.btn-ghost{background:rgba(255,255,255,.04);color:var(--texte);border-color:rgba(233,238,247,.28);}
.btn-ghost:hover{border-color:var(--or);color:var(--or-clair);transform:translateY(-2px);}
.btn-sm{padding:11px 20px;font-size:15px;}
.btn-full{width:100%;}
.btn .ic{width:1.05em;height:1.05em;}

/* ---------- en-tête ---------- */
/* La barre n'est plus un bandeau plein : elle devient transparente et c'est la
   CAPSULE des liens qui porte le verre dépoli. Un dégradé très doux vers le bas
   garde le logo et le bouton lisibles quand du contenu défile dessous — sans
   lui, le haut de page redevient une barre franche dès qu'on descend. */
.site-header{
  position:sticky;top:0;z-index:300;   /* au-dessus de tout le contenu de page */
  background:linear-gradient(to bottom,rgba(7,17,38,.90) 0%,rgba(7,17,38,.66) 58%,rgba(7,17,38,0) 100%);
  /* Le flou porte sur ce qui passe DERRIÈRE l'en-tête. En haut de page le héro
     est un dégradé lisse : flouter n'y change rien de visible. Dès qu'on
     défile, le texte qui remonte derrière devient une nappe illisible au lieu
     de se lire en filigrane entre la capsule et le bouton. */
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  border-bottom:0;
}
.header-in{display:flex;align-items:center;gap:20px;min-height:78px;}
.brand{display:flex;align-items:center;gap:11px;text-decoration:none;flex:none;
  position:relative;z-index:2;      /* devant le fond flouté de l'en-tête */
  overflow:visible;}
/* Le PNG est à fond TRANSPARENT : le voile de l'en-tête et le fond animé se
   voient à travers les vides de l'atome. La lueur portée le détache de tout
   fond, clair ou sombre, sans rien ajouter au balisage. */
.brand-marque{
  width:44px;height:auto;flex:none;overflow:visible;
  background:transparent;
  filter:drop-shadow(0 0 10px rgba(197,162,83,.34)) drop-shadow(0 2px 5px rgba(3,10,26,.55));
  transition:filter .25s ease,transform .25s ease;}
.brand:hover .brand-marque{
  filter:drop-shadow(0 0 15px rgba(230,201,122,.5)) drop-shadow(0 2px 5px rgba(3,10,26,.55));
  transform:translateY(-1px);}
@media (prefers-reduced-motion:reduce){
  .brand-marque,.brand:hover .brand-marque{transition:none;transform:none;}
}

.brand-txt{display:flex;flex-direction:column;line-height:1;}
.brand-txt strong{font-family:var(--serif);font-size:19px;font-weight:700;letter-spacing:.01em;color:var(--blanc);}
.brand-txt em{font-style:normal;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--or-clair);margin-top:5px;}
/* CAPSULE DE NAVIGATION — verre dépoli, centrée entre le logo et le bloc de
   droite. `margin-inline:auto` sur un élément en `flex` la centre par rapport
   à l'espace RESTANT, pas à la fenêtre ; c'est le comportement voulu ici, la
   capsule reste optiquement au milieu sans dépendre de la largeur du logo. */
.nav-desk{display:flex;align-items:center;gap:4px;margin-inline:auto;flex:none;
  padding:5px;border-radius:999px;
  background:rgba(11,26,56,.55);
  backdrop-filter:blur(16px) saturate(140%);
  -webkit-backdrop-filter:blur(16px) saturate(140%);
  border:1px solid rgba(197,162,83,.22);
  box-shadow:0 10px 30px rgba(3,10,26,.42),inset 0 1px 0 rgba(255,255,255,.055);}
.nav-desk a{
  display:inline-flex;align-items:center;white-space:nowrap;
  text-decoration:none;font-size:14.5px;font-weight:500;color:var(--mute);
  padding:8px 16px;border-radius:999px;
  border:1px solid transparent;
  transition:color .2s ease,background .2s ease,border-color .2s ease;}
.nav-desk a:hover{color:var(--blanc);background:rgba(255,255,255,.07);}
/* L'élément ACTIF : petite pilule pleine à l'intérieur de la capsule.
   Or discret sur marine — le doré plein est réservé au bouton d'action et à
   la langue active, pour qu'il reste UN seul point d'appel dans l'en-tête. */
.nav-desk a.est-actif{
  color:var(--or-clair);
  background:rgba(230,201,122,.15);
  border-color:rgba(197,162,83,.42);}
.nav-desk a.est-actif:hover{background:rgba(230,201,122,.2);}
.hdr-cta{flex:none;}

.burger{display:none;width:44px;height:44px;margin-left:auto;background:none;border:1px solid var(--navy-line);
  border-radius:3px;cursor:pointer;padding:0;flex-direction:column;align-items:center;justify-content:center;gap:5px;}
.burger span{display:block;width:19px;height:1.8px;background:var(--texte);border-radius:2px;transition:transform .25s ease,opacity .2s ease;}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(6.8px) rotate(45deg);}
.burger[aria-expanded="true"] span:nth-child(2){opacity:0;}
.burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-6.8px) rotate(-45deg);}
.menu-mobile{display:none;flex-direction:column;gap:2px;padding:10px 24px 24px;border-top:1px solid var(--navy-line);background:var(--navy);}
.menu-mobile a{text-decoration:none;padding:14px 2px;font-size:17px;font-weight:500;color:var(--texte);border-bottom:1px solid rgba(158,210,242,.1);}
.menu-mobile .btn{margin-top:16px;border-bottom:none;color:var(--navy);}

/* ---------- héro ---------- */
.hero{position:relative;padding:112px 0 104px;text-align:center;
  background:radial-gradient(1150px 700px at 50% 45%,rgba(10,27,61,.5),rgba(10,27,61,.26) 62%,rgba(10,27,61,.1) 100%);}
.hero-in{display:flex;flex-direction:column;align-items:center;}
/* EXERGUE DU HÉRO — remplace l'ancienne pastille ronde à étoile.
   Un filet doré puis des capitales espacées : c'est une entrée en matière de
   magazine, pas un badge. Aucun cercle, aucun picto. */
.exergue{display:flex;align-items:center;gap:14px;margin-bottom:26px;
  font-size:12px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--or-clair);}
.exergue::before{content:"";width:44px;height:1px;flex:none;
  background:linear-gradient(90deg,transparent,var(--or));}
.hero .exergue{justify-content:flex-start;}
.hero-page .exergue,.hero:not(.hero-clean) .exergue{justify-content:center;}
.hero-page .exergue::after,.hero:not(.hero-clean) .exergue::after{
  content:"";width:44px;height:1px;flex:none;
  background:linear-gradient(270deg,transparent,var(--or));}
.hero h1{font-size:clamp(2.4rem,5.4vw,4.4rem);font-weight:700;color:var(--blanc);
  letter-spacing:-.025em;max-width:16ch;text-wrap:balance;}
.hero-lead{margin-top:28px;font-size:19px;line-height:1.66;color:var(--mute);max-width:62ch;}
.hero-cta{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;margin-top:38px;}
.hero-tag{margin-top:44px;font-size:12.5px;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:var(--mute-2);}
.hero-tag span{color:var(--or);margin-inline:.35em;}

/* ---------- sections ---------- */
.sec{padding:96px 0;}
.sec-voile{background:var(--voile);border-block:1px solid rgba(158,210,242,.1);}
.sec-tete{text-align:center;max-width:64ch;margin-inline:auto;margin-bottom:56px;}
h2{font-size:clamp(1.85rem,3.1vw,2.35rem);color:var(--or-clair);}
.sec-lead{margin-top:16px;font-size:18px;line-height:1.64;color:var(--mute);}
.grand-para{font-size:18.5px;line-height:1.78;color:var(--mute);}
.grand-para + .grand-para{margin-top:20px;}
.sec-clair{text-align:center;}
.sec-clair h2{margin-bottom:22px;}

/* ---------- cartes (2 colonnes) ---------- */
.duo{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:26px;align-items:stretch;}
.carte{display:flex;flex-direction:column;background:var(--carte);border:1px solid var(--navy-line);
  border-radius:var(--r-lg);padding:34px 32px;}
.carte-vedette{border-color:rgba(197,162,83,.4);
  background:linear-gradient(160deg,rgba(197,162,83,.10),rgba(255,255,255,.04) 55%);}
.carte-tete{display:flex;align-items:flex-start;gap:16px;margin-bottom:20px;}
/* Les en-têtes de carte n'ont plus de picto du tout : l'étoile et l'engrenage
   « faisaient IA ». Le titre porte seul, avec l'étiquette sous lui. */
.carte-tete,.prod-tete{gap:0;}
.carte h3{font-size:1.42rem;color:var(--blanc);}
/* ÉTIQUETTES — la pilule parfaitement ronde est ce qui « fait gabarit ».
   On garde un cadre, mais rectangulaire à coin coupé : ça évoque une étiquette
   imprimée plutôt qu'un badge d'interface. */
.etiq{display:inline-block;margin-top:9px;font-family:var(--sans);font-size:11px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;padding:5px 12px;border-radius:0;
  clip-path:polygon(0 0,100% 0,100% calc(100% - 7px),calc(100% - 7px) 100%,0 100%);
  background:rgba(6,17,40,.66);color:var(--ciel);border:1px solid rgba(158,210,242,.36);}
.etiq-or{background:rgba(6,17,40,.6);color:var(--or-clair);border-color:rgba(197,162,83,.5);}
.carte > p{font-size:16.5px;line-height:1.68;color:var(--mute);}
.ex-titre{margin-top:26px;font-family:var(--sans);font-size:11.5px;font-weight:700;letter-spacing:.2em;
  text-transform:uppercase;color:var(--or-clair);}
.liste-fleche{margin-top:14px;display:flex;flex-direction:column;gap:11px;}
.liste-fleche li{display:flex;align-items:flex-start;gap:11px;font-size:16px;line-height:1.6;color:var(--texte);}
.liste-fleche .ic{width:15px;height:15px;margin-top:.34em;color:var(--or);stroke-width:2.6;}
.encadre{margin-top:22px;padding:20px 22px;border-radius:var(--r);
  background:rgba(10,27,61,.5);border:1px solid rgba(197,162,83,.26);}
.encadre h4{font-size:1.03rem;color:var(--or-clair);}
.encadre p{margin-top:10px;font-size:15.5px;line-height:1.64;color:var(--mute);}
.carte-lien{margin-top:22px;padding-top:20px;border-top:1px solid var(--navy-line);}
.carte-lien a{display:inline-flex;align-items:center;gap:8px;font-size:15.5px;font-weight:600;
  color:var(--or-clair);text-decoration:none;text-underline-offset:4px;}
.carte-lien a:hover{text-decoration:underline;}
.carte-lien .ic{width:16px;height:16px;}

.apres-duo{margin-top:44px;display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;}
.apres-duo p{font-size:15.5px;color:var(--mute-2);}

/* ---------- 4 domaines ---------- */
.quatre{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:22px;}
.dom{background:var(--carte);border:1px solid var(--navy-line);border-radius:var(--r-lg);padding:30px 26px;
  transition:transform .25s ease,border-color .25s ease;}
.dom:hover{transform:translateY(-4px);border-color:rgba(197,162,83,.4);}
/* DOMAINES — traitement volontairement DIFFÉRENT des cartes : ici aucun picto,
   c'est un filet vertical doré à gauche qui tient la colonne. Deux sections
   voisines ne doivent pas se traiter pareil, sinon on retombe sur le motif
   répété qui fait « gabarit ». */
/* Un court filet doré posé AU-DESSUS du titre, à la place de la tuile à icône.
   Sur une carte déjà bordée et arrondie, un `border-left` se confond avec le
   cadre et ne se lit pas — d'où ce filet, indépendant du cadre. */
.dom h3::before{content:"";display:block;width:30px;height:2px;
  background:var(--or);margin-bottom:15px;}
.dom h3{font-size:1.12rem;color:var(--blanc);}
.dom p{margin-top:12px;font-size:15.5px;line-height:1.64;color:var(--mute);}

.cas{margin-top:40px;border:1px solid var(--navy-line);border-radius:var(--r-lg);background:rgba(10,27,61,.34);}
.cas summary{display:flex;align-items:center;justify-content:center;gap:10px;cursor:pointer;list-style:none;
  padding:22px;font-family:var(--sans);font-size:16px;font-weight:600;color:var(--or-clair);}
.cas summary::-webkit-details-marker{display:none;}
.cas summary .ic{width:17px;height:17px;transition:transform .25s ease;}
.cas[open] summary .ic{transform:rotate(90deg);}
.cas-grille{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 36px;
  padding:8px 32px 4px;border-top:1px solid var(--navy-line);padding-top:30px;}
.cas-grille h4{font-size:1.02rem;color:var(--or-clair);}
.cas-grille ul{margin-top:13px;display:flex;flex-direction:column;gap:9px;}
.cas-grille li{position:relative;padding-left:18px;font-size:15.5px;line-height:1.6;color:var(--mute);}
/* Puces : un filet court, pas une bille. */
.cas-grille li::before{content:"";position:absolute;left:0;top:.82em;width:13px;height:1.5px;
  border-radius:0;background:var(--or);}
.cas-note{padding:24px 32px 30px;font-size:15px;color:var(--mute-2);}

/* ---------- étapes ---------- */
.etapes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:26px;}
.etapes li{position:relative;}
/* ÉTAPES — le rond numéroté devient un grand chiffre de chapitre, souligné
   d'un filet. Rien ne l'enferme : c'est de la typographie, pas un jeton. */
.num{display:block;width:auto;height:auto;margin-bottom:16px;padding-bottom:10px;
  border-bottom:1px solid rgba(197,162,83,.34);
  font-family:var(--serif);font-size:2.5rem;font-weight:700;line-height:1;
  color:rgba(230,201,122,.85);font-variant-numeric:lining-nums;}
.etapes li{padding-right:14px;}
.etapes h3{font-size:1.14rem;color:var(--blanc);}
.etapes p{margin-top:11px;font-size:15.5px;line-height:1.64;color:var(--mute);}

/* ---------- sur mesure ---------- */
.sec-mesure{text-align:center;}
.trois-points{margin-top:34px;display:inline-flex;flex-direction:column;gap:13px;text-align:left;}
.trois-points li{display:flex;align-items:flex-start;gap:12px;font-size:16.5px;line-height:1.6;color:var(--texte);}
.trois-points .ic{width:18px;height:18px;margin-top:.3em;color:var(--or);stroke-width:2.5;}

/* ---------- à propos ---------- */
#apropos{text-align:center;}
#apropos .grand-para{text-align:left;}

/* ---------- faq ---------- */
.faq{border-top:1px solid var(--navy-line);}
.faq details{border-bottom:1px solid var(--navy-line);}
.faq summary{display:flex;align-items:center;justify-content:space-between;gap:20px;cursor:pointer;
  list-style:none;padding:22px 2px;font-size:17.5px;font-weight:600;color:var(--texte);
  font-family:var(--serif);transition:color .2s ease;}
.faq summary::-webkit-details-marker{display:none;}
.faq summary:hover{color:var(--or-clair);}
.chev{position:relative;width:16px;height:16px;flex:none;}
.chev::before,.chev::after{content:"";position:absolute;top:50%;left:50%;background:var(--or);border-radius:2px;
  transform:translate(-50%,-50%);transition:transform .25s ease,opacity .25s ease;}
.chev::before{width:14px;height:1.8px;}
.chev::after{width:1.8px;height:14px;}
.faq details[open] .chev::after{transform:translate(-50%,-50%) rotate(90deg);opacity:0;}
.faq-corps{padding:0 2px 24px;}
.faq-corps p{font-size:16px;line-height:1.72;color:var(--mute);max-width:72ch;}

/* ---------- contact ---------- */
.contact-in{display:grid;grid-template-columns:minmax(0,.94fr) minmax(0,1.06fr);gap:52px;align-items:start;}
.contact-liste{display:flex;flex-direction:column;gap:20px;}
.contact-liste li{display:flex;gap:15px;align-items:flex-start;font-size:15.5px;color:var(--mute);}
/* CONTACT — le picto sort de sa tuile et se cale sur la première ligne,
   comme un signe de ponctuation. */
.ic-ligne{width:17px;height:17px;flex:none;margin-top:.24em;color:var(--or);stroke-width:1.9;}
.c-lbl{display:block;font-size:11.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--or-clair);margin-bottom:3px;}
.contact-liste a{color:var(--texte);text-underline-offset:3px;}

.contact-encadre{margin-top:34px;padding:26px 28px;border-radius:var(--r-lg);
  background:rgba(8,20,45,.56);border:1px solid var(--navy-line);}
.contact-encadre h3{font-size:1.12rem;color:var(--blanc);}
.contact-encadre ul{margin-top:18px;display:flex;flex-direction:column;gap:11px;}
.contact-encadre li{display:flex;align-items:flex-start;gap:10px;font-size:15px;line-height:1.58;color:var(--mute);}
.contact-encadre .ic{width:16px;height:16px;margin-top:.3em;color:var(--or);stroke-width:2.5;}
.contact-note{margin-top:20px;padding-top:18px;border-top:1px solid var(--navy-line);
  font-size:14px;line-height:1.58;color:var(--mute-2);font-style:italic;}

.contact-form{background:rgba(8,20,45,.62);border:1px solid var(--navy-line);border-radius:var(--r-lg);padding:32px 30px;}
.form-intro{font-size:14.5px;line-height:1.62;color:var(--mute);margin-bottom:24px;}
.form-intro strong{color:var(--texte);}
.f-row{display:flex;flex-direction:column;gap:7px;margin-bottom:16px;}
.f-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;}
.f-row label{font-size:13px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--mute);}
.req{color:var(--or-clair);}
.f-row input,.f-row select,.f-row textarea{
  width:100%;font-family:var(--sans);font-size:16px;color:var(--texte);
  background:rgba(6,17,40,.66);border:1px solid rgba(158,210,242,.22);border-radius:3px;
  padding:13px 15px;transition:border-color .2s ease,background .2s ease;
}
.f-row textarea{resize:vertical;min-height:104px;line-height:1.55;}
.f-row select{appearance:none;-webkit-appearance:none;cursor:pointer;
  background-image:linear-gradient(45deg,transparent 50%,var(--or) 50%),linear-gradient(135deg,var(--or) 50%,transparent 50%);
  background-position:calc(100% - 21px) calc(1.28em),calc(100% - 15px) calc(1.28em);
  background-size:6px 6px,6px 6px;background-repeat:no-repeat;padding-right:44px;}
.f-row input::placeholder,.f-row textarea::placeholder{color:rgba(195,206,226,.55);}
.f-row input:focus,.f-row select:focus,.f-row textarea:focus{border-color:var(--or);background:rgba(6,17,40,.86);}
.f-row input[aria-invalid="true"],.f-row textarea[aria-invalid="true"]{border-color:#E48C8C;}
.form-err{margin-bottom:16px;font-size:14.5px;color:#F3B4B4;}
.form-fine{margin-top:16px;font-size:13px;line-height:1.55;color:var(--mute-2);text-align:center;}
.contact-form .btn{margin-top:6px;}

/* ---------- cta final ---------- */
.sec-final{text-align:center;padding:104px 0;}
.sec-final h2{max-width:22ch;margin-inline:auto;}
.sec-final .sec-lead{margin-inline:auto;max-width:52ch;}
.sec-final .btn{margin-top:34px;}

/* ============================================================
   FOND DU SITE — « TRACÉS EN ÉCOULEMENT »
   72 courbes (2 jeux miroir de 36) en SVG, animées en CSS pur.
   L'original React animait pathLength/pathOffset ; ici c'est
   stroke-dashoffset, et l'attribut pathLength="1" sur chaque
   tracé normalise sa longueur — un même stroke-dasharray donne
   donc la même proportion de trait sur toutes les courbes,
   quelles que soient leurs longueurs réelles.
   Couche FIXE plein écran : elle ne défile pas avec le contenu,
   ne peut donc ni allonger la page ni créer de barre horizontale.
   ============================================================ */
.bg-flux{overflow:hidden;
  /* fondu vers les bords : les tracés se perdent dans le marine au lieu
     d'être tranchés net par le bord de la fenêtre */
  -webkit-mask-image:radial-gradient(125% 135% at 50% 45%,#000 38%,transparent 92%);
          mask-image:radial-gradient(125% 135% at 50% 45%,#000 38%,transparent 92%);}
.flux-svg{width:100%;height:100%;display:block;}
.flux-jeu-miroir{transform:scaleY(-1);transform-origin:50% 50%;}
.bg-flux path{
  fill:none;stroke-linecap:round;
  stroke-dasharray:.34 .66;
  animation:flux-ecoulement var(--fd,24s) linear infinite;
  animation-delay:var(--fr,0s);
  will-change:stroke-dashoffset;}
@keyframes flux-ecoulement{
  from{stroke-dashoffset:1;}
  to  {stroke-dashoffset:0;}
}
/* Onglet caché : on arrête les 72 animations (script.js). */
.bg-flux.est-en-pause path{animation-play-state:paused;}

/* Repli : tracés STATIQUES et COMPLETS. Le trait plein est aussi le cas le
   plus « encrant » du cycle — c'est donc l'état à mesurer pour le contraste.
   Rien de pire ne peut apparaître pendant l'animation. */
@media (prefers-reduced-motion:reduce){
  .bg-flux path{animation:none;stroke-dasharray:none;will-change:auto;}
}
/* Sur mobile on ne garde qu'une courbe sur deux : même densité perçue,
   moitié moins de tracés à repeindre sur les appareils modestes. */
@media (max-width:700px){
  .bg-flux path:nth-child(even){display:none;}
  .sec-final{padding:76px 0;}
}

/* ---------- pied de page ---------- */
.site-footer{background:rgba(5,13,32,.9);border-top:1px solid var(--navy-line);padding-top:64px;}
.footer-in{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr) minmax(0,1fr);gap:48px;padding-bottom:48px;}
.f-brand img{width:96px;height:auto;border-radius:3px;}
.f-tag{margin-top:18px;font-size:12.5px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--mute-2);}
.f-tag span{color:var(--or);margin-inline:.25em;}
.f-coord{margin-top:12px;font-size:15px;color:var(--mute);}
.f-coord a{color:var(--mute);text-underline-offset:3px;}
.f-coord a:hover{color:var(--or-clair);}
.site-footer h2{font-family:var(--sans);font-size:11.5px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--or-clair);margin-bottom:18px;}
.f-nav{display:flex;flex-direction:column;gap:11px;align-items:flex-start;}
.f-nav a{font-size:15px;color:var(--mute);text-decoration:none;transition:color .2s ease;}
.f-nav a:hover{color:var(--or-clair);}
.footer-bot{padding-block:22px;border-top:1px solid var(--navy-line);}
.footer-bot p{font-size:13px;color:var(--mute-2);}

/* ---------- page légale ---------- */
/* PAGES LÉGALES
   `.page-legale` est posée sur le MÊME élément que `.wrap`, qui fournit la
   gouttière latérale du site (`padding-inline`). Utiliser ici le raccourci
   `padding` remettait donc padding-left/right à ZÉRO : le texte se collait aux
   bords. Invisible au-dessus de ~880 px, parce que le `max-width` de
   `.wrap-etroit` tient le texte à distance — mais collé net dès le mobile.
   D'où `padding-top` / `padding-bottom` seuls : on ne touche jamais aux côtés. */
.page-legale{padding-top:76px;padding-bottom:96px;}
.page-legale h1{font-size:clamp(1.9rem,3.4vw,2.5rem);color:var(--or-clair);}
.page-legale .maj{margin-top:12px;font-size:14px;color:var(--mute-2);}
.page-legale h2{font-size:1.22rem;margin-top:40px;}
.page-legale p{margin-top:14px;font-size:16.5px;line-height:1.74;color:var(--mute);}
.page-legale ul{margin-top:14px;display:flex;flex-direction:column;gap:10px;}
.page-legale li{position:relative;padding-left:18px;font-size:16.5px;line-height:1.7;color:var(--mute);}
/* Pages légales : un tiret cadratin, traitement encore différent. */
.page-legale li::before{content:"—";position:absolute;left:0;top:0;width:auto;height:auto;
  border-radius:0;background:none;color:rgba(197,162,83,.85);font-size:15px;line-height:1.75;}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width:1180px){
  /* La capsule se resserre avant de céder la place au hamburger. */
  .nav-desk{gap:2px;padding:4px;}
  .nav-desk a{font-size:13.5px;padding:7px 11px;}
  .header-in{gap:14px;}
}
@media (max-width:1080px){
  /* Sous ce seuil, logo + capsule + bascule + bouton ne tiennent plus sur une
     ligne : la capsule débordait de 24 à 183 px. On passe au hamburger ICI,
     et non à 920 px comme avant — la capsule est plus large que les anciens
     liens nus, le point de bascule devait remonter avec elle. Le reste de la
     mise en page garde ses propres seuils, plus bas. */
  html{scroll-padding-top:80px;}
  .nav-desk,.hdr-cta{display:none;}
  .burger{display:flex;}
  .menu-mobile.open{display:flex;}
  .langues{margin-left:auto;}
  .quatre{grid-template-columns:repeat(2,minmax(0,1fr));}
  .etapes{grid-template-columns:repeat(2,minmax(0,1fr));gap:34px 26px;}
}

@media (max-width:920px){
  html{scroll-padding-top:76px;}
  .nav-desk,.hdr-cta{display:none;}
  .burger{display:flex;}
  .menu-mobile.open{display:flex;}
  .header-in{min-height:66px;}
  .hero{padding:76px 0 72px;}
  .duo,.contact-in,.cas-grille{grid-template-columns:minmax(0,1fr);}
  .contact-in{gap:40px;}
  .sec{padding:72px 0;}
  .sec-final{padding:80px 0;}
  .footer-in{grid-template-columns:repeat(2,minmax(0,1fr));gap:36px;}
  .f-brand{grid-column:1 / -1;}
}

@media (max-width:600px){
  body{font-size:16px;}
  .wrap{padding-inline:20px;}
  .hero{padding:56px 0 60px;}
  .hero h1{font-size:clamp(2rem,8.6vw,2.6rem);max-width:none;}
  .hero-lead{font-size:17px;}
  .hero-cta{flex-direction:column;align-items:stretch;width:100%;}
  .hero-cta .btn{width:100%;}
  .hero-tag{font-size:11px;letter-spacing:.16em;margin-top:34px;}
  .sec{padding:58px 0;}
  .sec-final{padding:64px 0;}
  .sec-tete{margin-bottom:36px;}
  .sec-lead,.grand-para{font-size:16.5px;}
  .quatre{grid-template-columns:minmax(0,1fr);gap:18px;}
  .etapes{grid-template-columns:minmax(0,1fr);gap:28px;}
  .carte{padding:26px 22px;}
  .dom{padding:26px 22px;}
  .carte-tete{gap:14px;}
  .cas-grille{padding:26px 22px 4px;gap:26px;}
  .cas-note{padding:20px 22px 26px;}
  .cas summary{padding:18px;font-size:15.5px;}
  .f-grid{grid-template-columns:minmax(0,1fr);gap:0;}
  .contact-form{padding:26px 22px;}
  .contact-encadre{padding:24px 22px;}
  .faq summary{font-size:16.5px;padding:19px 2px;}
  .faq-corps p{font-size:15.5px;}
  .footer-in{grid-template-columns:minmax(0,1fr);gap:32px;}
  .trois-points{display:flex;}
  .page-legale{padding-top:56px;padding-bottom:72px;}
}

@media (max-width:380px){
  .brand-txt strong{font-size:17px;}
  .brand img{width:38px;}
}

/* ---------- accessibilité mouvement ---------- */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *,*::before,*::after{
    animation-duration:.001ms !important;animation-iteration-count:1 !important;
    transition-duration:.001ms !important;scroll-behavior:auto !important;
  }
  .dom:hover,.btn:hover{transform:none;}
}

/* ---------- impression ---------- */
@media print{
  .site-header,.burger,.menu-mobile,.bg-static,.bg-flux,.bg-voile{display:none !important;}
  body{background:#fff;color:#000;}
  .sec,.hero{padding:24px 0;background:#fff;color:#000;}
  h2,.hero h1{color:#000;}
}


/* ============================================================
   MULTI-PAGES
   ============================================================ */

/* ---------- fil d'Ariane ---------- */
.fil{margin-bottom:26px;}
.fil ol{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px 10px;}
.fil li{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--mute-2);}
.fil li + li::before{content:"/";color:rgba(197,162,83,.6);}
.fil a{color:var(--mute-2);text-decoration:none;text-underline-offset:3px;}
.fil a:hover{color:var(--or-clair);text-decoration:underline;}
.fil [aria-current]{color:var(--texte);}

/* ---------- héro de page intérieure ---------- */
.hero-page{padding:64px 0 72px;}
.hero-page h1{font-size:clamp(2.1rem,4.4vw,3.4rem);max-width:20ch;}
.hero-page .hero-lead{margin-top:22px;font-size:18.5px;max-width:64ch;}

/* ---------- carrousel de titres (accueil) ---------- */
.hero-accueil{padding:104px 0 96px;}
.carrousel{position:relative;width:100%;display:grid;margin:0;}
.cr-titre{grid-area:1 / 1;display:block;opacity:0;visibility:hidden;
  transition:opacity .55s ease;justify-self:center;max-width:16ch;text-wrap:balance;}
@media (max-width:600px){ .cr-titre{max-width:none;} }
.cr-titre.est-visible{opacity:1;visibility:visible;}
/* ---------- cartes produits ---------- */
/* GRILLE DES SERVICES — six colonnes, pour pouvoir composer 2 ou 3 cartes par
   rangée sans jamais laisser de case vide.
   Par défaut chaque carte occupe 3 colonnes (= deux par rangée). Quand il y en
   a EXACTEMENT CINQ, on passe à 3 + 2 : trois cartes de 2 colonnes en haut,
   deux de 3 colonnes en bas. Les deux rangées sont pleines, la composition est
   volontaire — et non plus une orpheline à côté du vide.
   Le sélecteur `:first-child:nth-last-child(5)` est une « requête de quantité » :
   la règle ne s'applique QUE s'il y a cinq cartes. Avec quatre ou six, on
   retombe tout seul sur deux colonnes, sans rien à modifier. */
.prod-grille{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:24px;}
.prod-grille > .prod{grid-column:span 3;}
.prod-grille > .prod:first-child:nth-last-child(5),
.prod-grille > .prod:first-child:nth-last-child(5) ~ .prod{grid-column:span 2;}
.prod-grille > .prod:first-child:nth-last-child(5) ~ .prod:nth-child(n+4){grid-column:span 3;}
.prod-grille-2{gap:26px;}
.prod{display:flex;flex-direction:column;text-decoration:none;background:var(--carte);
  border:1px solid var(--navy-line);border-radius:var(--r-lg);padding:32px 30px;
  transition:transform .25s ease,border-color .25s ease,background .25s ease;}
.prod:hover{transform:translateY(-4px);border-color:rgba(197,162,83,.5);background:rgba(255,255,255,.07);}
.prod-tete{display:flex;align-items:flex-start;gap:16px;margin-bottom:18px;}
.prod-titre{display:flex;flex-direction:column;gap:9px;align-items:flex-start;}
.prod-titre h2,.prod-titre h3{font-size:1.36rem;color:var(--blanc);}
.prod-txt{font-size:16px;line-height:1.66;color:var(--mute);}
.prod-points{display:flex;flex-direction:column;gap:9px;margin-top:20px;flex:1 1 auto;}
.prod-points span{position:relative;padding-left:19px;font-size:15px;line-height:1.55;color:var(--mute-2);}
/* Puces des cartes produits : un petit losange. Encore un autre signe que
   celui des listes par département et que celui des cas d'usage. */
.prod-points span::before{content:"";position:absolute;left:1px;top:.62em;width:5px;height:5px;
  border-radius:0;transform:rotate(45deg);background:var(--or);}
.prod-go{display:inline-flex;align-items:center;gap:8px;margin-top:24px;padding-top:20px;
  border-top:1px solid var(--navy-line);font-size:15px;font-weight:600;color:var(--or-clair);}
.prod-go .ic{width:16px;height:16px;transition:transform .25s ease;}
.prod:hover .prod-go .ic{transform:translateX(4px);}

/* ---------- listes par département ---------- */
.dom-liste{margin-top:14px;display:flex;flex-direction:column;gap:9px;}
.dom-liste li{position:relative;padding-left:17px;font-size:14.8px;line-height:1.56;color:var(--mute);}
/* Listes par département : un petit trait vertical, en écho au filet qui
   tient la carte. Ni bille, ni losange. */
.dom-liste li::before{content:"";position:absolute;left:0;top:.42em;width:2px;height:11px;
  border-radius:0;background:rgba(197,162,83,.75);}

/* ---------- divers ---------- */
.trois{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px;}
.etapes-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 26px;}
.encadre-large{padding:30px 32px;}
.encadre-large h2{font-size:1.3rem;color:var(--or-clair);}
.encadre-large p{margin-top:14px;font-size:17px;}
.lien-or{color:var(--or-clair);text-decoration:underline;text-underline-offset:3px;}
.lien-or:hover{color:var(--blanc);}
.apres-para{margin-top:26px;}
.apres-para .lien-or{display:inline-flex;align-items:center;gap:8px;font-weight:600;text-decoration:none;}
.apres-para .lien-or:hover{text-decoration:underline;}
.apres-para .ic{width:16px;height:16px;}
.carte h2{font-size:1.42rem;color:var(--blanc);}
.encadre h3{font-size:1.03rem;color:var(--or-clair);}
.contact-encadre h2{font-size:1.12rem;color:var(--blanc);}

@media (max-width:1080px){
  .trois{grid-template-columns:repeat(2,minmax(0,1fr));}
  /* Trois de front deviennent trop étroites : on repasse à deux par rangée,
     et la dernière s'étire sur toute la largeur pour combler la rangée.
     Les sélecteurs reprennent la même quantité de classes et de pseudo-classes
     que la règle 3+2 ci-dessus et sont déclarés APRÈS : sinon celle-ci, plus
     spécifique, l'emporterait et la case vide réapparaîtrait entre 921 et
     1080 px — c'est exactement ce qui s'est produit au premier essai. */
  .prod-grille > .prod,
  .prod-grille > .prod:first-child:nth-last-child(5),
  .prod-grille > .prod:first-child:nth-last-child(5) ~ .prod,
  .prod-grille > .prod:first-child:nth-last-child(5) ~ .prod:nth-child(n+4){grid-column:span 3;}
  .prod-grille > .prod:last-child:nth-child(odd),
  .prod-grille > .prod:first-child:nth-last-child(5) ~ .prod:last-child{grid-column:1 / -1;}
}
@media (max-width:920px){
  .prod-grille,.prod-grille-2,.trois,.etapes-2{grid-template-columns:minmax(0,1fr);}
  /* Une seule colonne : toute portée résiduelle créerait des colonnes
     implicites, donc un débordement horizontal. On remet tout à plat. */
  .prod-grille > .prod{grid-column:auto !important;}
  .hero-accueil{padding:72px 0 68px;}
  .hero-page{padding:48px 0 56px;}
}
@media (max-width:600px){
  .prod{padding:26px 22px;}
  .hero-accueil{padding:54px 0 56px;}
  .hero-page{padding:38px 0 46px;}
  .hero-page h1{font-size:clamp(1.85rem,7.6vw,2.3rem);max-width:none;}
  .fil li{font-size:12.5px;}
  .encadre-large{padding:24px 22px;}
  .cr-points{margin-top:28px;}
}

/* ---------- note de bas de page légale ---------- */
.note-legale{margin-top:44px;padding:20px 22px;border-radius:var(--r);
  background:rgba(8,20,45,.5);border:1px solid var(--navy-line);
  font-size:14px;line-height:1.62;color:var(--mute-2);}
.note-legale a{color:var(--or-clair);text-underline-offset:3px;}
.page-legale h2:first-of-type{margin-top:28px;}


/* ============================================================
   PAGES DE TEST — variantes de héro (test-hero-*.html)
   Rien ici ne s'applique aux pages du site principal.
   ============================================================ */

.bandeau-test{background:rgba(197,162,83,.14);border-bottom:1px solid rgba(197,162,83,.34);
  padding:11px 0;font-size:13.5px;color:var(--mute);text-align:center;}
.bandeau-test strong{color:var(--or-clair);}
.bandeau-test a{color:var(--texte);text-underline-offset:3px;}
.bandeau-test a:hover{color:var(--or-clair);}

/* ---------- héro en deux colonnes (tests 1 et 2) ---------- */
.hero-split{padding:76px 0 88px;text-align:left;}
.split-in{display:grid;grid-template-columns:minmax(0,1.02fr) minmax(0,.98fr);
  gap:56px;align-items:center;}
.split-txt{display:flex;flex-direction:column;align-items:flex-start;}
.hero-split h1{font-size:clamp(2.2rem,4.6vw,3.7rem);max-width:15ch;text-align:left;}
.hero-split .hero-lead{margin-top:24px;text-align:left;max-width:46ch;}
.hero-cta-gauche{justify-content:flex-start;}
.hero-split .hero-tag{margin-top:36px;}

.split-visuel{position:relative;width:100%;aspect-ratio:1/1;max-height:560px;}
#visuel-filaire,.atome{position:absolute;inset:0;width:100%;height:100%;display:block;}

/* cartes de stats flottantes */
.stats-flottantes{position:absolute;inset:0;pointer-events:none;}
.stat{position:absolute;display:flex;flex-direction:column;gap:3px;
  padding:13px 17px;border-radius:3px;
  background:rgba(8,20,45,.82);border:1px solid rgba(197,162,83,.34);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  box-shadow:0 12px 30px rgba(3,10,26,.42);max-width:16rem;}
.stat-h{font-family:var(--serif);font-size:1.02rem;font-weight:600;color:var(--or-clair);}
.stat-b{font-size:12.5px;line-height:1.4;color:var(--mute);}
.stat-1{top:8%;left:-4%;}
.stat-2{bottom:19%;right:-5%;}
.stat-3{bottom:2%;left:6%;}

/* ---------- atome (test 2) ---------- */
.atome{cursor:default;}
.atome canvas{display:block;width:100%;height:100%;}
.atome-info{position:absolute;transform:translate(-50%,-190%);pointer-events:none;
  padding:7px 13px;border-radius:3px;white-space:nowrap;
  background:rgba(8,20,45,.92);border:1px solid rgba(197,162,83,.5);
  font-size:13px;font-weight:600;color:var(--or-clair);z-index:3;}
/* [hidden] doit gagner sur display:flex — sinon le repli couvre l'atome
   et intercepte les clics sur les nœuds. */
.atome-repli[hidden]{display:none !important;}
.atome-repli{position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:14px;text-align:center;
  border:1px solid var(--navy-line);border-radius:var(--r-lg);background:rgba(8,20,45,.5);padding:28px;}
.atome-repli p{font-size:15px;color:var(--mute);}
.atome-repli ul{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;}
.atome-repli a{display:inline-block;padding:9px 16px;border-radius:3px;
  border:1px solid rgba(197,162,83,.42);font-size:14px;font-weight:600;
  color:var(--or-clair);text-decoration:none;}
.atome-repli a:hover{background:rgba(197,162,83,.14);}

/* ---------- héro épuré (test 3) ---------- */
.hero-clean{position:relative;padding:104px 0 100px;text-align:left;overflow:hidden;
  background:linear-gradient(180deg,rgba(4,10,26,.72) 0%,rgba(4,10,26,.5) 55%,rgba(4,10,26,.76) 100%);}
.onde{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none;}

/* ============================================================
   ARC LUMINEUX DU HÉRO D'ACCUEIL
   Un « lever de soleil » marine → or en haut du héro. Tout en CSS,
   sur un seul élément : aucune dépendance, donc rien à replier si
   WebGL manque — l'arc EST toujours là, y compris quand le fond
   animé et l'atome ne se chargent pas.
   Deux couches de dégradé dans le même élément :
     1. le LISERÉ — bornes très rapprochées sur une ellipse, ce qui
        dessine une ligne courbe nette ;
     2. le HALO — la même ellipse, en diffus, qui éclaire le haut.
   L'élément est en z-index 0 et .mix-in passe devant : le texte n'est
   jamais posé sur le point le plus lumineux. La luminance est bornée
   volontairement bas (liseré à .5 d'opacité) — au-delà, le titre et
   le chapô tombent sous le AA sur le fond déjà clair du dégradé.
   ============================================================ */
.hero-arc{
  /* 56 px et non 104 : l'exergue du héro occupe y=114...134 et n'a plus de
     pastille opaque pour la protéger. Le liseré doit passer NETTEMENT au-dessus
     — à 104 px il traversait le texte et le contraste tombait à 1,2:1. */
  position:absolute;left:50%;top:56px;z-index:0;
  /* Ellipse TRÈS allongée : plus elle est large, moins sa courbe descend d'un
     bord à l'autre. À 250 % le liseré traversait l'exergue du héro, qui n'a
     plus de pastille opaque pour la protéger — contraste mesuré à 1,20:1.
     À 400 % la courbe ne descend plus que d'une quarantaine de pixels sur
     toute la largeur et passe au-dessus du bloc de texte. */
  width:400%;max-width:none;aspect-ratio:3.3;
  /* -10,5 % = (50 % - 79 % x 50 %) : remonte l'ellipse d'exactement son
     « chapeau », si bien que le sommet du liseré tombe pile sur `top`.
     Le calage ne dépend donc plus de la largeur de l'écran. */
  transform:translate(-50%,-10.5%);
  pointer-events:none;
  /* On ne garde QUE la moitié haute de l'ellipse. Sans ce masque, son bord
     INFÉRIEUR (à 89,5 % de la hauteur) retombe dans le héro et dessine un
     second arc sous le texte — bien visible en mobile, où le héro est haut.
     La coupe se fait sous le liseré, assez bas pour ne pas rogner sa lueur. */
  -webkit-mask-image:linear-gradient(to bottom,#000 0 42%,rgba(0,0,0,.45) 56%,transparent 68%);
          mask-image:linear-gradient(to bottom,#000 0 42%,rgba(0,0,0,.45) 56%,transparent 68%);
  background:
    /* 1. LE LISERÉ — un cœur chaud très serré, encadré d'or. C'est lui qui
       porte la lumière : bornes rapprochées = ligne nette et brillante.
       Le cœur est un crème CHAUD (#FFEFC7), jamais un blanc bleuté. */
    radial-gradient(closest-side ellipse at 50% 50%,
      transparent 0 77.9%,
      rgba(230,201,122,.34) 78.6%,
      rgba(255,239,199,.92) 79.3%,
      rgba(240,214,141,.52) 80.0%,
      rgba(197,162,83,.20) 81.3%,
      transparent 83.6%),
    /* 2. LE BLOOM — la lueur qui déborde du liseré vers le haut. Plus large
       et plus dense qu'avant : c'est ce qui donne le « lever de soleil ». */
    radial-gradient(closest-side ellipse at 50% 50%,
      transparent 0 78.3%,
      rgba(230,201,122,.22) 80.6%,
      rgba(197,162,83,.11) 86.5%,
      rgba(197,162,83,.045) 93%,
      transparent 100%),
    /* 3. LE REMPLISSAGE sous le liseré — VOLONTAIREMENT DISCRET. C'est cette
       nappe-là qui passe derrière le titre et le chapô : la renforcer ferait
       tomber le texte sous le AA. La lumière se gagne sur le liseré (1) et le
       bloom (2), pas ici. */
    radial-gradient(closest-side ellipse at 50% 50%,
      rgba(197,162,83,.055) 0 50%,
      rgba(197,162,83,.045) 70%,
      rgba(230,201,122,.065) 78%,
      transparent 79%);
}
/* Un éclat concentré au sommet de la courbe : la lumière est plus intense au
   milieu de l'arc et s'estompe vers les bords, comme un soleil qui se lève. */
.hero-arc::after{
  content:"";position:absolute;left:50%;top:10.5%;
  width:58%;height:34%;transform:translate(-50%,-50%);
  background:radial-gradient(ellipse at 50% 50%,
    rgba(255,241,208,.30) 0%,
    rgba(230,201,122,.13) 34%,
    rgba(197,162,83,.05) 62%,
    transparent 78%);
  pointer-events:none;
}
/* Respiration très lente, en opacité seule (composée par le GPU, pas
   de repeinte). Coupée si l'utilisateur réduit les animations. */
@keyframes arc-souffle{
  0%,100%{opacity:.85;}
  50%    {opacity:1;}
}
.hero-arc{animation:arc-souffle 11s ease-in-out infinite;}
@media (prefers-reduced-motion:reduce){
  /* opacité 1 = le HAUT de la plage de la respiration (.85 -> 1). Le repli est
     donc exactement l'état le plus lumineux que l'arc puisse atteindre : la
     mesure de contraste faite dessus vaut pour tout instant de l'animation. */
  .hero-arc{animation:none;opacity:1;}
}
/* Sur mobile l'arc est resserré : plein cadre il déborderait du héro
   et son liseré passerait derrière le titre. */
@media (max-width:900px){
  .hero-arc{top:46px;width:420%;}
}
@media (max-width:600px){
  .hero-arc{top:34px;width:520%;}
}
.clean-in{position:relative;display:flex;flex-direction:column;align-items:flex-start;max-width:920px;}
.hero-clean h1{font-size:clamp(2.2rem,5vw,4rem);max-width:17ch;text-align:left;}
.hero-clean .hero-lead{margin-top:24px;text-align:left;max-width:50ch;}
.hero-clean .btn-ghost{background:transparent;}

.rangee-outils{margin-top:64px;padding-top:26px;border-top:1px solid var(--navy-line);width:100%;}
.rangee-titre{font-size:11.5px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;
  color:var(--mute-2);margin-bottom:18px;}
.rangee-outils ul{display:flex;flex-wrap:wrap;gap:14px 40px;align-items:center;}
.rangee-outils li{font-family:var(--serif);font-size:1.16rem;font-weight:600;color:var(--mute-2);
  opacity:.72;transition:opacity .25s ease,color .25s ease;}
.rangee-outils li:hover{opacity:1;color:var(--texte);}

@media (max-width:980px){
  .split-in{grid-template-columns:minmax(0,1fr);gap:44px;}
  .split-visuel{max-width:520px;margin-inline:auto;max-height:none;}
  .stat-1{left:0;}
  .stat-2{right:0;}
}
@media (max-width:600px){
  .hero-split{padding:44px 0 56px;}
  .hero-clean{padding:56px 0 64px;}
  .hero-split h1,.hero-clean h1{max-width:none;}
  .hero-cta-gauche{width:100%;}
  .split-visuel{max-width:none;}
  /* sur petit écran, le visuel garde sa hauteur et les cartes passent dessous */
  .split-visuel{aspect-ratio:auto;}
  #visuel-filaire,.atome{position:relative;inset:auto;height:min(80vw,340px);}
  .stats-flottantes{position:static;display:flex;flex-direction:column;gap:10px;
    margin-top:18px;pointer-events:auto;}
  .stat{position:static;max-width:none;}
  .rangee-outils{margin-top:44px;}
  .rangee-outils ul{gap:12px 24px;}
  .rangee-outils li{font-size:1rem;}
  .bandeau-test{font-size:12.5px;line-height:1.7;}
}


/* ---------- variante 4 : épuré + atome ---------- */
.hero-mix{padding:76px 0 72px;}
.mix-in{position:relative;display:grid;grid-template-columns:minmax(0,1.06fr) minmax(0,.94fr);
  gap:48px;align-items:center;}
.mix-txt{display:flex;flex-direction:column;align-items:flex-start;}
.hero-mix h1{font-size:clamp(2.1rem,4.5vw,3.5rem);max-width:16ch;text-align:left;}
.hero-mix .hero-lead{margin-top:22px;text-align:left;max-width:46ch;}
.mix-visuel{position:relative;width:100%;aspect-ratio:1/1;max-height:520px;}
.hero-mix .rangee-outils{position:relative;margin-top:52px;}

/* l'infobulle du nœud survolé : lisible, pas décorative */
.hero-mix .atome-info{padding:8px 15px;font-size:13.5px;letter-spacing:.02em;
  background:rgba(6,15,34,.94);border-color:rgba(230,201,122,.7);
  box-shadow:0 10px 26px rgba(3,10,26,.55);}
/* petit repère visuel quand un nœud est visé */
.hero-mix .atome[data-survol="oui"]{cursor:pointer;}

@media (max-width:980px){
  .mix-in{grid-template-columns:minmax(0,1fr);gap:36px;}
  .mix-visuel{max-width:460px;margin-inline:auto;max-height:none;}
}
@media (max-width:600px){
  .hero-mix{padding:46px 0 52px;}
  .hero-mix h1{max-width:none;}
  .mix-visuel{max-width:none;aspect-ratio:auto;}
  .hero-mix .atome{position:relative;inset:auto;height:min(82vw,330px);}
  .hero-mix .rangee-outils{margin-top:38px;}
}


/* ---------- héro d'accueil : mise en page « épuré + atome » ---------- */
.hero-accueil.hero-mix{padding:84px 0 76px;}
.hero-accueil.hero-mix h1{max-width:15ch;}
.hero-tag-gauche{margin-top:52px;padding-top:26px;border-top:1px solid var(--navy-line);}
/* l'onde du héros d'accueil porte l'id hero-onde */
#hero-onde{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none;}

@media (max-width:980px){
  .hero-accueil.hero-mix{padding:60px 0 60px;}
}
@media (max-width:600px){
  .hero-accueil.hero-mix{padding:44px 0 48px;}
  .hero-tag-gauche{margin-top:36px;padding-top:20px;}
}


/* ---------- bascule de langue FR | EN ---------- */
.langues{display:inline-flex;align-items:center;gap:2px;flex:none;
  border:1px solid var(--navy-line);border-radius:999px;padding:3px;
  background:rgba(8,20,45,.5);}
.langues a,.langues .lg-actif{display:inline-flex;align-items:center;justify-content:center;
  min-width:34px;padding:5px 9px;border-radius:999px;
  font-size:12.5px;font-weight:700;letter-spacing:.06em;text-decoration:none;line-height:1;}
.langues a{color:var(--mute);transition:color .2s ease,background .2s ease;}
.langues a:hover{color:var(--blanc);background:rgba(158,210,242,.12);}
.langues .lg-actif{background:var(--or);color:#0A1B3D;}
@media (max-width:920px){ .langues{margin-left:auto;} }
@media (max-width:380px){
  .langues a,.langues .lg-actif{min-width:30px;padding:5px 7px;font-size:11.5px;}
}


/* ---------- libellés permanents des électrons ---------- */
.atome-etiquettes{position:absolute;inset:0;pointer-events:none;z-index:4;}
.atome-et{position:absolute;top:0;left:0;white-space:nowrap;pointer-events:auto;
  padding:5px 11px;border-radius:3px;text-decoration:none;
  font-family:var(--sans);font-size:12.5px;font-weight:600;letter-spacing:.01em;line-height:1.15;
  color:var(--or-clair);
  /* Fond OPAQUE, pas translucide. À .92 les 8 % restants laissaient passer le
     halo doré de l'électron placé juste derrière, et ces libellés de 12,5 px
     tombaient jusqu'à 1,5:1 — très loin du AA. L'opacité totale est la seule
     façon de borner ce qui apparaît derrière les glyphes, puisque le libellé
     est posé sur un canvas dont le contenu bouge en permanence. */
  background:#060F22;
  border:1px solid rgba(197,162,83,.42);
  box-shadow:0 6px 18px rgba(3,10,26,.5);
  transition:opacity .18s ease,color .18s ease,border-color .18s ease,background .18s ease;}
.atome-et:hover,.atome-et:focus-visible{color:var(--blanc);background:rgba(6,15,34,.98);
  border-color:rgba(230,201,122,.85);}
.atome-et.est-cache{visibility:hidden;pointer-events:none;}
.atome-et.est-vise{color:#0A1B3D;background:var(--or-clair);border-color:var(--or-clair);}

@media (max-width:980px){
  .atome-et{font-size:11.5px;padding:4px 9px;}
}
@media (max-width:600px){
  .atome-et{font-size:10.5px;padding:3px 8px;letter-spacing:0;}
}


/* ============================================================
   CALENDRIER DE RENDEZ-VOUS
   Contours carrés, marine et or, aucune forme ronde. Les cases
   sont des <button> : accessibles au clavier, et le focus reste
   celui du site. Le mois affiché vient toujours de la date du
   jour (voir calendrier.js).
   ============================================================ */
.cal{border:1px solid var(--navy-line);border-radius:3px;background:rgba(8,20,45,.5);
  padding:22px 22px 18px;}
.cal-tete{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding-bottom:16px;margin-bottom:14px;border-bottom:1px solid var(--navy-line);}
.cal-mois{font-family:var(--serif);font-size:1.28rem;font-weight:600;color:var(--blanc);
  text-transform:capitalize;text-align:center;flex:1 1 auto;}
.cal-nav{width:38px;height:38px;flex:none;cursor:pointer;
  background:rgba(255,255,255,.04);border:1px solid var(--navy-line);border-radius:3px;
  color:var(--texte);font-size:20px;line-height:1;
  transition:background .2s ease,border-color .2s ease,color .2s ease;}
.cal-nav:hover:not(:disabled){background:rgba(255,255,255,.09);border-color:rgba(197,162,83,.5);
  color:var(--or-clair);}
.cal-nav:disabled{opacity:.32;cursor:not-allowed;}
.cal-jours,.cal-grille{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;}
.cal-jour{padding:6px 0;text-align:center;font-size:11.5px;font-weight:700;
  letter-spacing:.14em;text-transform:uppercase;color:var(--or-clair);}
.cal-grille{margin-top:6px;}
.cal-vide{display:block;}
.cal-case{display:flex;align-items:center;justify-content:center;
  min-height:44px;padding:6px 2px;border-radius:3px;
  font-family:var(--sans);font-size:15.5px;font-weight:500;color:var(--texte);
  background:rgba(255,255,255,.035);border:1px solid transparent;
  transition:background .18s ease,border-color .18s ease,color .18s ease;}
button.cal-case{cursor:pointer;}
button.cal-case:hover{background:rgba(255,255,255,.1);border-color:rgba(197,162,83,.45);
  color:var(--blanc);}
/* Aujourd'hui : un liseré doré, pas une pastille ronde. */
.cal-case.est-auj{border-color:var(--or);color:var(--or-clair);font-weight:700;}
/* Journée choisie : aplat doré, texte marine — le seul aplat plein de la grille,
   pour qu'il n'y ait aucune ambiguïté sur ce qui est sélectionné. */
.cal-case.est-choisi{background:var(--or);border-color:var(--or);color:#0A1B3D;font-weight:700;}
.cal-case.est-choisi:hover{background:var(--or-clair);border-color:var(--or-clair);color:#0A1B3D;}
/* Passé : atténué mais encore lisible — le contraste AA vaut aussi pour un
   texte non cliquable. D'où un gris clair, et non une opacité écrasée. */
.cal-case.est-passe{background:transparent;color:var(--mute-2);opacity:.55;cursor:default;}
.cal-legende{display:flex;align-items:center;flex-wrap:wrap;gap:8px 18px;margin-top:16px;
  padding-top:14px;border-top:1px solid var(--navy-line);font-size:13px;color:var(--mute);}
.cal-cle{width:13px;height:13px;flex:none;border-radius:2px;display:inline-block;}
.cal-cle-auj{border:1px solid var(--or);}
.cal-cle-choisi{background:var(--or);}
.cal-cle-choisi{margin-left:10px;}
.cal-choix{margin-top:14px;font-size:15px;color:var(--texte);}
.cal-choix strong{color:var(--or-clair);}
.cal-note{margin-top:14px;font-size:14px;color:var(--mute-2);}
.cal-noscript{font-size:15px;color:var(--mute);}
#f-jour{cursor:default;}

@media (max-width:600px){
  .cal{padding:16px 12px 14px;}
  .cal-jours,.cal-grille{gap:4px;}
  .cal-case{min-height:40px;font-size:14.5px;}
  .cal-jour{font-size:10.5px;letter-spacing:.08em;}
  .cal-mois{font-size:1.12rem;}
}

/* ============================================================
   ENGAGEMENT — deux colonnes, « ce qu'on fait » / « ce qu'on ne
   fera pas ». Encadrés carrés, aucun picto : ce qui distingue les
   deux colonnes est un FILET de couleur en haut, pas une icône.
   ============================================================ */
.eng{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;}
.eng-col{background:var(--carte);border:1px solid var(--navy-line);
  border-radius:3px;padding:30px 28px;}
.eng-col h3{font-size:1.12rem;color:var(--blanc);padding-bottom:14px;margin-bottom:18px;
  border-bottom:1px solid var(--navy-line);}
.eng-col h3::before{content:"";display:block;width:30px;height:2px;margin-bottom:15px;}
.eng-oui h3::before{background:var(--or);}
/* Le second filet est volontairement plus froid et plus discret : la colonne
   des refus ne doit pas crier plus fort que celle des engagements. */
.eng-non h3::before{background:rgba(158,210,242,.55);}
.eng-col ul{display:flex;flex-direction:column;gap:13px;}
.eng-col li{position:relative;padding-left:20px;font-size:15.6px;line-height:1.6;color:var(--mute);}
.eng-oui li::before{content:"";position:absolute;left:0;top:.62em;width:9px;height:2px;background:var(--or);}
/* Refus : un trait oblique, encore un autre signe que les autres listes. */
.eng-non li::before{content:"";position:absolute;left:2px;top:.34em;width:2px;height:11px;
  background:rgba(158,210,242,.5);transform:rotate(28deg);}
@media (max-width:820px){ .eng{grid-template-columns:minmax(0,1fr);} }

/* Trois étapes : même traitement typographique que les autres listes
   numérotées du site (grand chiffre serif souligné d'un filet). */
.etapes-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:34px 30px;}
@media (max-width:900px){ .etapes-3{grid-template-columns:minmax(0,1fr);gap:30px;} }

/* ============================================================
   COLLAGE « sites réalisés »
   Superposition asymétrique, pas une grille : tailles variées,
   chevauchements, légères rotations. Le conteneur découpe ce qui
   dépasse, donc aucune barre horizontale sur la page.
   ============================================================ */
.sec-collage .sec-tete{margin-bottom:40px;}
.collage{position:relative;width:100%;height:488px;overflow:hidden;
  border-radius:var(--r-lg);}
.co-piece{position:absolute;margin:0;border-radius:3px;overflow:hidden;
  background:var(--navy-2);border:1px solid rgba(246,241,230,.14);
  box-shadow:0 22px 50px rgba(3,10,26,.55);
  transition:transform .35s ease,box-shadow .35s ease,z-index 0s;}
.co-piece img{display:block;width:100%;height:auto;}
.co-piece figcaption{display:flex;flex-direction:column;gap:2px;
  padding:10px 13px 12px;background:rgba(6,15,34,.94);
  border-top:1px solid rgba(246,241,230,.1);}
.co-nom{font-family:var(--serif);font-size:.95rem;font-weight:600;color:var(--texte);line-height:1.2;}
.co-cat{font-size:11.5px;color:var(--mute-2);}
.co-piece:hover{transform:rotate(0deg) scale(1.03);z-index:20;
  box-shadow:0 28px 64px rgba(3,10,26,.7);}

/* Positions volontairement irrégulières — trois pièces en cascade décalée, pas
   une rangée. Règle de composition : l'ordre d'empilement suit la HAUTEUR, pas
   la position horizontale. Une pièce placée PLUS HAUT finit plus haut, donc sa
   bande de légende est plus haute que celle de sa voisine : c'est elle qui doit
   passer devant. À l'inverse (pièce basse devant), elle recouvre la légende de
   la pièce haute et le nom devient illisible — mesuré à 23 % masqué. */
.co-c2{width:33%;left:34%; top:2%; transform:rotate(2.8deg); z-index:12;}
.co-c1{width:40%;left:0.5%;top:8%; transform:rotate(-3.4deg);z-index:11;}
.co-c3{width:28%;left:64%; top:28%;transform:rotate(4.4deg); z-index:10;}

/* La bande de légende garde une hauteur fixe alors que les vignettes rétrécissent
   en pourcentage : la hauteur utile du collage ne suit donc PAS la largeur de façon
   proportionnelle, et ni `aspect-ratio` ni une seule hauteur ne peuvent convenir.
   D'où ces paliers rapprochés — assez hauts pour ne jamais rogner la dernière
   légende (le conteneur découpe), assez justes pour ne pas laisser de grand vide.
   Ils DOIVENT rester en largeur décroissante : à égalité de spécificité, c'est la
   dernière règle qui gagne, et un palier mal placé devient silencieusement mort. */
@media (max-width:1180px){
  .collage{height:500px;}
  .co-c1{width:42%;left:0;   top:9%;}
  .co-c2{width:35%;left:34%; top:2%;}
  .co-c3{width:30%;left:66%; top:29%;}
}
@media (max-width:1020px){
  .collage{height:444px;}
  .co-c3{top:28%;}
}
@media (max-width:960px){
  .collage{height:420px;}
  .co-c3{top:29%;}
}
@media (max-width:900px){
  .collage{height:430px;}
  .co-c1{width:46%;left:0;   top:10%;}
  .co-c2{width:38%;left:38%; top:2%;}
  .co-c3{width:32%;left:66%; top:30%;}
}
@media (max-width:820px){
  .collage{height:402px;}
  .co-c3{top:31%;}
}
@media (max-width:760px){
  .collage{height:368px;}
  .co-c3{top:32%;}
}
@media (max-width:680px){
  .collage{height:376px;}
  .co-c3{top:34.5%;}
}

/* Sur mobile, l'empilement absolu devient illisible : on passe à une pile
   décalée, chevauchement léger et rotations réduites — le collage garde son
   caractère sans écraser les vignettes. */
@media (max-width:600px){
  .collage{height:auto;overflow:visible;display:flex;flex-direction:column;
    align-items:stretch;padding-inline:2px;}
  .co-piece{position:static;box-shadow:0 14px 30px rgba(3,10,26,.5);}
  .co-piece + .co-piece{margin-top:14px;}
  .co-c1{width:90%;align-self:flex-start;transform:rotate(-2.6deg);}
  .co-c2{width:82%;align-self:flex-end;  transform:rotate(2.2deg);}
  .co-c3{width:87%;align-self:flex-start;transform:rotate(-1.6deg);}
  .co-nom{font-size:.9rem;}
}

@media (prefers-reduced-motion:reduce){
  .co-piece{transition:none;}
  .co-piece:hover{transform:none;}
}
