/* =========================================================
   Simeal — charte du theme WordPress
   ENGENDRE par 11-wordpress/construire-theme.py.
   Source : 04-contenu/_charte-page.css et _entete.css.
   Toute modification faite ici sera perdue.
   ========================================================= */

/* ==========================================================
   Simeal — charte commune des pages de porte
   Injectee par assembler.py a la place du jeton @CHARTE@.
   Ne pas dupliquer dans les pages : toute retouche se fait ici.
   ========================================================== */

:root{
  --ground:#FFFFFF; --ink:#0B0B12; --ink-2:#4A4A5C; --ink-3:#5E5E72;
  --rule:#E4E4EE; --rule-strong:#C6C6D6;
  --accent:#5433A8; --accent-soft:#F1ECFA;
  --cta:#E4DEF6; --cta-ink:#0B0B12;
  --vert:#2F7D57; --gris:#8C8C9F; --orange:#AD6220;

  --f-display:"Syne",system-ui,sans-serif;
  --f-body:"Manrope",system-ui,sans-serif;

  --t-mention:.9375rem;
  --t-second:1.0625rem;
  --t-base:1.0625rem;  /* 18/09 : « le texte des paragraphes est écrit trop gros » (19 -> 17 px) */
  --t-lead:1.25rem;
  --t-h3:1.5rem;
  --t-h2:2.375rem;
  --t-h1:clamp(2.5rem,6vw,3.5rem);
  --t-chiffre:clamp(2.75rem,7vw,4.25rem);

  --s1:.25rem; --s2:.5rem; --s3:.75rem; --s4:1rem; --s5:1.5rem;
  --s6:2rem; --s7:3rem; --s8:5rem; --s9:7rem;
  --tete-h:56px;
  --r:2px; --r-btn:5px; --col:1040px;
  --gouttiere:12rem;   /* colonne de gauche commune aux sections a deux colonnes */
}
/* MODE SOMBRE SUSPENDU (17/09/2026). Les pages v3 sont dessinees en clair,
   sur un fond de nuages clair : en mode sombre, leur texte passait en blanc
   sur ce fond et devenait illisible (constate par Alexandre sous WordPress,
   ordinateur en mode sombre). Le site reste donc toujours clair. La palette
   sombre est gardee ci-dessous, hors service, pour le jour ou un fond
   sombre sera dessine. La page d'attente garde son mode sombre
   (12-construction/_construction-wp.css).
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --ground:#0B0B12; --ink:#F3F3F8; --ink-2:#AFAFC2; --ink-3:#9494AC;
    --rule:#232336; --rule-strong:#3A3A54;
    --accent:#A98CFF; --accent-soft:#1B1630;
    --cta:#CFC3EC; --cta-ink:#0B0B12;
    --vert:#6FD3A3; --gris:#9494AC; --orange:#E0A45E;
  }
}
:root[data-theme="dark"]{
  --ground:#0B0B12; --ink:#F3F3F8; --ink-2:#AFAFC2; --ink-3:#9494AC;
  --rule:#232336; --rule-strong:#3A3A54;
  --accent:#A98CFF; --accent-soft:#1B1630;
  --cta:#CFC3EC; --cta-ink:#0B0B12;
  --vert:#6FD3A3; --gris:#9494AC; --orange:#E0A45E;
}
*/

*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:calc(var(--tete-h) + 10px)}  /* 21/09 : le bandeau est collant ; sans ce decalage la cible d une ancre passe dessous */
body{margin:0;background:var(--ground);color:var(--ink);font-family:var(--f-body);font-size:var(--t-base);line-height:1.65;-webkit-font-smoothing:antialiased}
h1,h2,h3{font-family:var(--f-display);margin:0;line-height:1.12;letter-spacing:-.03em;font-weight:600;text-wrap:balance}
h1{font-size:var(--t-h1);line-height:1.05}
h2{font-size:var(--t-h2)}
h3{font-size:var(--t-h3)}
p{margin:0;max-width:64ch}
a{color:var(--accent)}
a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* 21/09 : le flou CSS plein ecran etait recompose a chaque image de
   defilement. La texture du fond fait 150 x 1100 px : son agrandissement suffit
   a la fondre, le flou ne se voyait pas et coutait cher. */
#ciel{position:fixed;inset:0;z-index:0;width:100%;height:100%;pointer-events:none;transform:scale(1.06)}
.page{position:relative;z-index:1}
.wrap{max-width:var(--col);margin:0 auto;padding:0 var(--s5)}

/* le sur-titre revient : c est lui qui donne du relief à la page */
.sur{font-size:var(--t-mention);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);font-weight:600;margin:0 0 var(--s4)}

/* ---------- sommaire collant ---------- */
.somm{position:sticky;top:var(--tete-h);z-index:50;background:var(--ground);border-bottom:1px solid var(--rule)}
.somm__in{max-width:var(--col);margin:0 auto;padding:var(--s3) var(--s5);display:flex;gap:var(--s5);overflow-x:auto;scrollbar-width:none}
.somm__in::-webkit-scrollbar{display:none}
.somm a{font-size:var(--t-mention);color:var(--ink-3);text-decoration:none;white-space:nowrap;padding:var(--s2) 0;border-bottom:2px solid transparent;transition:color .2s,border-color .2s}
.somm a:hover{color:var(--ink)}
.somm a[aria-current="true"]{color:var(--ink);border-bottom-color:var(--accent);font-weight:600}

/* ---------- en-tête ---------- */
.hero{padding:var(--s8) 0 var(--s7)}
.hero__lead{font-size:var(--t-lead);color:var(--ink-2);margin-top:var(--s5);max-width:56ch}
.chiffres{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--s6);padding:var(--s7) 0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);margin-top:var(--s7)}
/* Un chiffre appartient toujours a un dispositif : il le dit, et il y conduit.
   Sans cette etiquette, trois chiffres cote a cote se lisent comme s ils
   parlaient de la meme chose. */
.chiffre{display:block;text-decoration:none;color:inherit}
.chiffre:hover .chiffre__q{color:var(--ink)}
.chiffre:hover .chiffre__q::after{transform:translateX(5px)}
.chiffre__q{
  display:inline-flex;align-items:center;gap:var(--s2);
  font-size:var(--t-mention);letter-spacing:.1em;text-transform:uppercase;
  font-weight:600;color:var(--accent);margin-bottom:var(--s3);
  transition:color .2s;
}
.chiffre__q::after{content:"→";transition:transform .3s cubic-bezier(.2,.7,.2,1)}
.chiffre__n{font-family:var(--f-display);font-size:var(--t-chiffre);font-weight:600;line-height:1;letter-spacing:-.045em;font-variant-numeric:tabular-nums;display:block}
/* L unite ne se compose pas a la taille du chiffre : elle deborderait
   la colonne des que le libelle depasse cinq ou six glyphes. */
/* Une valeur longue — une date, un mot — ne tient pas a la taille du
   chiffre. Elle descend d un tiers plutot que de deborder. */
.chiffre__n--long{font-size:calc(var(--t-chiffre) * .58);letter-spacing:-.03em}
.chiffre__u{font-size:.4em;letter-spacing:0;margin-left:.18em;vertical-align:.62em;color:var(--ink-2);white-space:nowrap}
.chiffre__l{font-size:var(--t-second);color:var(--ink-2);display:block;margin-top:var(--s3);max-width:26ch}

/* ---------- sections ---------- */
.sec{padding:var(--s8) 0;border-top:1px solid var(--rule)}
.sec h2{margin-bottom:var(--s5)}
.sec__intro{color:var(--ink-2);margin-bottom:var(--s6);font-size:var(--t-lead);max-width:58ch}
.sec--inverse{
  --ground:#0B0B12; --ink:#FFFFFF; --ink-2:#AFAFC2; --ink-3:#9494AC;
  --rule:#232336; --rule-strong:#3A3A54;
  --accent:#A98CFF; --accent-soft:#1B1630;
  --vert:#6FD3A3; --gris:#9494AC; --orange:#E0A45E;
  background:var(--ground); color:var(--ink); border-top:0;
}
/* Mode sombre suspendu (voir plus haut) : la section inversee reste sombre.
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .sec--inverse{
    --ground:#F3F3F8; --ink:#0B0B12; --ink-2:#4A4A5C; --ink-3:#5E5E72;
    --rule:#E4E4EE; --rule-strong:#C6C6D6;
    --accent:#5433A8; --accent-soft:#F1ECFA;
    --vert:#2F7D57; --gris:#5E5E72; --orange:#AD6220;
  }
}
:root[data-theme="dark"] .sec--inverse{
  --ground:#F3F3F8; --ink:#0B0B12; --ink-2:#4A4A5C; --ink-3:#5E5E72;
  --rule:#E4E4EE; --rule-strong:#C6C6D6;
  --accent:#5433A8; --accent-soft:#F1ECFA;
  --vert:#2F7D57; --gris:#5E5E72; --orange:#AD6220;
}
*/

/* ---------- tableaux ---------- */
.tbl{overflow-x:auto;margin-top:var(--s6)}
table{border-collapse:collapse;width:100%;font-size:var(--t-second);min-width:660px}
th,td{text-align:left;padding:var(--s4) var(--s5);border-bottom:1px solid var(--rule);vertical-align:top}
thead th{font-size:var(--t-mention);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);font-weight:600;border-bottom:1px solid var(--rule-strong)}
tbody th{font-family:var(--f-display);font-weight:600;font-size:var(--t-base);letter-spacing:-.02em}
td.date{font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:600}
.tbl__note{font-size:var(--t-mention);color:var(--ink-3);margin-top:var(--s4);max-width:70ch}
.tbl__note a{color:inherit;text-decoration:underline;text-underline-offset:3px}

/* ---------- notation à feuilles ---------- */
.notation{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--s4);margin-top:var(--s6)}
.niveau{display:flex;flex-direction:column;gap:var(--s3);padding:var(--s5);border:1px solid var(--rule);border-radius:var(--r)}
.niveau svg{width:64px;height:32px;display:block}
.niveau__t{font-family:var(--f-display);font-size:var(--t-second);font-weight:600}
.niveau__d{font-size:var(--t-mention);color:var(--ink-2);line-height:1.5}

/* ---------- échéances ---------- */
.frise{border-top:1px solid var(--rule);margin-top:var(--s6)}
.ech{display:grid;grid-template-columns:var(--gouttiere) 1fr;gap:var(--s3) var(--s6);padding:var(--s6) 0;border-bottom:1px solid var(--rule)}
.ech__d{font-family:var(--f-display);font-size:var(--t-h3);font-weight:600;letter-spacing:-.03em;font-variant-numeric:tabular-nums;line-height:1.2}
.ech__c h3{margin-bottom:var(--s3);font-size:var(--t-base)}
.ech__c p{color:var(--ink-2);font-size:var(--t-second)}
.ech__s{display:block;font-size:var(--t-mention);color:var(--ink-3);margin-top:var(--s3)}
.ech__s a{color:inherit;text-decoration:underline;text-underline-offset:3px}

/* ---------- prestations ---------- */
.liste{border-top:1px solid var(--rule);margin-top:var(--s6)}
.liste__i{position:relative;padding:var(--s6) 0;border-bottom:1px solid var(--rule)}
/* Le repere glisse depuis la marge, en position absolue : le texte ne bouge
   pas d un pixel, mais quelque chose repond au survol. */
.liste__i::before{
  content:"";position:absolute;left:calc(var(--s5) * -1);top:var(--s6);
  width:var(--s4);height:1.5px;background:var(--accent);
  transform:scaleX(0);transform-origin:right center;opacity:0;
  transition:transform .32s cubic-bezier(.2,.7,.2,1),opacity .24s;
}
.liste__i:hover::before{transform:scaleX(1);opacity:1}
.liste__i h3{margin-bottom:var(--s3)}
.liste__i h3 a{color:inherit;text-decoration:none}
.liste__i h3 a:hover{color:var(--accent)}
.liste__i p{color:var(--ink-2);font-size:var(--t-second)}
.liste__m{display:block;font-size:var(--t-mention);color:var(--ink-3);margin-top:var(--s3)}

/* ---------- méthode ---------- */
.etapes{counter-reset:e;border-top:1px solid var(--rule);margin-top:var(--s6)}
.etape{counter-increment:e;display:grid;grid-template-columns:var(--gouttiere) 1fr;gap:var(--s3) var(--s6);padding:var(--s6) 0;border-bottom:1px solid var(--rule)}
.etape__n{font-family:var(--f-display);font-size:var(--t-h3);font-weight:600;color:var(--accent);letter-spacing:-.03em;line-height:1.2}
.etape__n::before{content:"Étape " counter(e)}
.etape__c h3{margin-bottom:var(--s3);font-size:var(--t-base)}
.etape__c p{color:var(--ink-2);font-size:var(--t-second)}

/* ---------- renvois ---------- */
.notions{display:flex;flex-wrap:wrap;gap:var(--s3);margin-top:var(--s6)}
/* Les liens secondaires prennent les crochets : Alexandre les a retenus
   dans l atelier, et ils trouvent ici leur place sans concurrencer le
   bouton d appel. Rien ne se pose derriere le texte. */
.notion{position:relative;font-size:var(--t-second);padding:var(--s2) var(--s5);color:var(--ink-2);text-decoration:none;transition:color .2s}
.notion::before,.notion::after{content:"";position:absolute;top:0;bottom:0;width:9px;border:1.5px solid var(--rule-strong);transition:border-color .22s,width .26s cubic-bezier(.2,.7,.2,1)}
.notion::before{left:0;border-right:0;border-radius:2px 0 0 2px}
.notion::after{right:0;border-left:0;border-radius:0 2px 2px 0}
.notion:hover{color:var(--ink)}
.notion:hover::before,.notion:hover::after{border-color:var(--accent);width:13px}
.notion[aria-disabled="true"]{opacity:.6;pointer-events:none}

/* Pied de page sans filets ni soulignes (Alexandre, 16/09 : « beaucoup de
   traits qui servent a rien »). Il prend la largeur du bandeau, et son texte
   tombe sur la meme verticale que celui de l accueil. */
footer{padding:var(--s8) 0;color:var(--ink-3);font-size:var(--t-second)}
footer .wrap{max-width:2100px;padding-inline:calc(clamp(16px,2.6vw,72px) + 26px)}
@media (max-width:560px){footer .wrap{padding-inline:calc(16px + 18px)}}
footer a{color:inherit;text-decoration:none;transition:color .2s}
footer a:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}

/* Barre légale : obligatoire, donc présente partout, mais elle ne doit pas
   peser plus que la mention propre à la page. D où la taille en dessous ;
   le filet qui la séparait a été retiré le 16/09. La date de copyright se pousse à droite au large et
   revient dans le flux sur téléphone. */
.pied-l{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s3);
  margin:var(--s4) 0 0;max-width:none;font-size:var(--t-mention)}
.pied-l a{text-decoration:none;transition:color .2s}
.pied-l a:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.pied-l span[aria-hidden]{color:var(--rule-strong)}
/* Le lien LinkedIn : la marque seule, dessinee a la couleur du texte. Le site
   n est qu en noir et blanc, une pastille bleue y ferait une tache ; et un mot
   de plus dans une barre qui en porte deja trois se lit mal. Le nom accessible
   est porte par l aria-label, puisqu il n y a pas de texte. Le soulignement de
   survol des autres liens est retire ici : un trait sous un pictogramme est du
   bruit, d ou le selecteur plus specifique que « .pied-l a:hover ». */
.pied-l__reseau{display:inline-flex;align-items:center;padding:2px 0}
.pied-l__reseau svg{display:block;width:13px;height:13px;fill:currentColor}
.pied-l a.pied-l__reseau:hover,.pied-l a.pied-l__reseau:focus-visible{
  color:var(--ink);text-decoration:none}
.pied-l__c{margin-left:auto;font-variant-numeric:tabular-nums}
@media (max-width:560px){.pied-l{display:grid;grid-template-columns:auto auto;justify-content:start;column-gap:var(--s5);row-gap:var(--s2)}
  .pied-l__c{margin-left:0;width:auto}
  /* au téléphone, un point restait seul en bout de ligne */
  .pied-l span[aria-hidden]{display:none}}

/* ---------- schéma des étapes ----------
   En CSS et non en SVG : il se replie tout seul en colonne sur téléphone,
   ce qu un SVG à viewBox fixe ne sait pas faire. */
.flux{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule);margin-top:var(--s7)}
.flux__e{background:var(--ground);padding:var(--s5);display:flex;flex-direction:column;gap:var(--s3)}
.flux__n{font-family:var(--f-display);font-size:var(--t-second);font-weight:600;color:var(--ink-3);font-variant-numeric:tabular-nums}
.flux__e h3{font-size:var(--t-second);line-height:1.25}
.flux__e p{font-size:var(--t-mention);color:var(--ink-2);line-height:1.5}
.flux__e--pivot{background:var(--accent-soft)}
.flux__e--pivot .flux__n{color:var(--accent)}

/* ---------- graphique ---------- */
.graph{margin:var(--s7) 0 0;padding:0}
.graph svg{width:100%;height:auto;display:block;overflow:visible}
.g-grille line{stroke:var(--rule);stroke-width:1}
.g-trace{fill:none;stroke:var(--accent);stroke-width:2.5;stroke-linejoin:round}
.g-pt circle{fill:var(--ground);stroke:var(--accent);stroke-width:2.5}
.g-axe text,.g-an text{font-family:var(--f-body);font-size:14px;fill:var(--ink-3)}
.g-lab text{font-family:var(--f-display);font-size:16px;font-weight:600;fill:var(--ink)}
figcaption{font-size:var(--t-mention);color:var(--ink-3);margin-top:var(--s4);max-width:62ch;line-height:1.55}


/* ---------- figures et sources, pour les fiches thematiques ----------
   Une donnee ne se lit jamais sur une trame : .fig__c repose sur un fond uni.
   Les figures restent hors des sections inversees, qui redefinissent les jetons. */
.fig{margin:var(--s7) 0}
/* Le fond reste opaque — une donnee ne se lit jamais sur une trame — mais
   le rembourrage horizontal disparait : sans quoi le cadre du graphique ne
   tombe jamais sur la colonne de texte, et tout parait de travers. */
.fig__c{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:var(--s6) 0;background:var(--ground)}
.fig svg{width:100%;height:auto;display:block;overflow:visible}
.fig__l{font-size:var(--t-mention);color:var(--ink-3);margin-top:var(--s4);max-width:66ch;line-height:1.6}
/* La ligne de sources d une figure : elle dit d ou viennent ses chiffres.
   Une figure qui en porte des chiffres DOIT la porter — c est ce que
   controle 04-contenu/verifier-figures.py. */
.fig__src{font-size:var(--t-mention);color:var(--ink-3);margin-top:var(--s3);max-width:66ch;line-height:1.55}
.gr line{stroke:var(--rule);stroke-width:1}
.ax line{stroke:var(--rule-strong);stroke-width:1.5}
.tx{font-family:var(--f-body);font-size:13px;fill:var(--ink-3)}
.tx--f{font-family:var(--f-display);font-size:14px;font-weight:600;fill:var(--ink)}
.tx--a{fill:var(--accent)}
.li{fill:none;stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.li--a{stroke:var(--accent)}
/* Domaines et nuages, pour les diagrammes de confort. Les aplats se
   superposent : du plus large au plus etroit, chacun ajoute sa densite. */
/* Jeu de classes des figures en pleine largeur. Les titres d axes ne sont
   plus dans le SVG : ils vivent dans la legende, ce qui libere la marge. */
.q{stroke:var(--rule);stroke-width:1}
.qq{stroke:var(--rule-strong);stroke-width:1.5}
.t{font-family:var(--f-body);font-size:13px;fill:var(--ink-3)}
.t--g{font-size:12px}
.t--p{font-size:12px}
.t--f{font-family:var(--f-display);font-size:14px;font-weight:600;fill:var(--ink)}
.t--a{fill:var(--accent)}
.zn{fill:var(--accent);stroke:none}
.zn--0{opacity:.20}
.zn--1{opacity:.12}
.zn--2{opacity:.075}
.zn--3{opacity:.045}
.pts circle{fill:var(--ink-3);opacity:.42}
/* Courbes d humidite relative du diagramme bioclimatique, et seuils
   horizontaux des categories de confort : lisibles, jamais dominantes. */
.hr{fill:none;stroke:var(--rule-strong);stroke-width:1;stroke-dasharray:3 3}
.tx--hr{font-size:11px;fill:var(--ink-3)}
.sat{fill:none;stroke:var(--ink-3);stroke-width:1.5;stroke-dasharray:4 3}
.seuil{stroke:var(--ink);stroke-width:1.5;stroke-dasharray:6 4}
.co1{fill:var(--accent);stroke:var(--accent)}
.co2{fill:var(--ink-3);stroke:var(--ink-3)}

/* La reference : discrete dans le fil du texte, verifiable au clic. */
.ref{font-size:var(--t-mention);color:var(--ink-3);text-decoration:none;border-bottom:1px solid var(--rule-strong);white-space:nowrap}
.ref:hover{color:var(--accent);border-bottom-color:var(--accent)}
.apart{border-left:2px solid var(--accent);padding:var(--s4) 0 var(--s4) var(--s5);margin:var(--s6) 0;max-width:66ch}
.apart p{color:var(--ink-2);font-size:var(--t-second)}
.apart p+p{margin-top:var(--s4)}
.apart strong{color:var(--ink)}

@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms !important}html{scroll-behavior:auto}}

/* ---------- tablette ---------- */
@media (max-width:820px){
  :root{--t-h1:clamp(2.1rem,7vw,2.75rem);--t-h2:1.875rem;--t-lead:1.1875rem;--t-chiffre:2.5rem;--s8:3.5rem;--s9:4.5rem}
  .sec{padding:var(--s8) 0}
  .ech,.etape{grid-template-columns:1fr;gap:var(--s3)}
  .ech__d,.etape__n{font-size:1.25rem}
  :root{--gouttiere:1fr}
  .flux{grid-template-columns:1fr 1fr}
}

/* ---------- téléphone ----------
   Un tableau qui défile latéralement sur 375 px est illisible au pouce : il se
   replie donc en fiches, chaque cellule reprenant son intitulé de colonne. */
/* Sur telephone, une figure ramenee a la largeur de l ecran affiche ses
   libelles a six pixels : illisible. On prefere la laisser a une taille
   ou elle se lit, et faire defiler le cadre. */
@media (max-width:620px){
  .fig__c{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .fig svg{min-width:700px}
  .fig__l{font-size:var(--t-mention)}
}

@media (max-width:560px){

  :root{--t-base:1rem;--t-second:.9375rem;--t-lead:1.0625rem;--t-h3:1.25rem;--s5:1.125rem;--s6:1.5rem;--s7:2.25rem}
  body{line-height:1.6}
  .hero{padding:var(--s7) 0 var(--s6)}
  .chiffres{gap:var(--s5);padding:var(--s6) 0;margin-top:var(--s6)}
  .chiffre__n{font-size:2.25rem}
  .notation{grid-template-columns:1fr 1fr;gap:var(--s3)}
  .niveau{padding:var(--s4)}
  .niveau svg{width:52px;height:26px}
  .graph{margin-top:var(--s6)}
  .g-axe text,.g-an text{font-size:17px}
  .g-lab text{font-size:19px}

  /* Cibles tactiles. Un lien en ligne fait 21 px de haut : on ne le vise pas
     au pouce. Sur telephone, les renvois de source deviennent des pastilles. */
  .ech__s a,.tbl__note a,figcaption a,.fig__src a{
    display:inline-flex;align-items:center;min-height:44px;
    padding:var(--s2) var(--s3);margin-top:var(--s2);
    border:1px solid var(--rule);border-radius:var(--r);
    text-decoration:none;line-height:1.4;
  }
  .ech__s,.tbl__note{line-height:1.6}
  footer a{display:inline-flex;align-items:center;min-height:44px;padding:var(--s2) 0}
  .notion{padding:var(--s3) var(--s4)}
  .somm a{display:inline-flex;align-items:center;min-height:44px;padding:var(--s3) 0}

  .flux{grid-template-columns:1fr}
  .liste__i h3 a{display:inline-flex;align-items:center;min-height:44px;padding:var(--s2) 0}

  table{min-width:0}
  /* Une chronologie a deux colonnes tient telle quelle : la replier en
     cartes ajoute une colonne d etiquettes vide. */
  .tbl--brut tbody tr{display:table-row;border:0;padding:0;margin:0}
  .tbl--brut tbody td{display:table-cell;border-bottom:1px solid var(--rule);padding:var(--s3) var(--s3) var(--s3) 0;font-size:var(--t-mention)}
  .tbl--brut tbody td::before{content:none}
  .tbl--brut td.n{white-space:nowrap;width:1%}

  thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  tbody tr{display:block;border:1px solid var(--rule);border-radius:var(--r);padding:var(--s4);margin-bottom:var(--s4)}
  tbody th{display:block;border:0;padding:0 0 var(--s3);font-size:var(--t-base)}
  tbody td{display:grid;grid-template-columns:9rem 1fr;gap:var(--s3);border:0;padding:var(--s2) 0;font-size:var(--t-second)}
  tbody td::before{content:attr(data-col);color:var(--ink-3);font-size:var(--t-mention)}
}

/* ---------- les touches de violet (17/09/2026) ----------
   « Le violet à petites doses c'est nickel, tu peux tout mettre sauf la ligne
   d'horizon, qui casse l'esthétique de l'image pleine page. » Atelier
   05-qualite/atelier/violet.html : sept touches sur huit retenues. Le violet
   clair (#A98CFF) est celui qui tient sur l'encre, dans les sections
   inversées (.encre). */
/* le cercle de l'esquisse, sur la frise de Conception */
.page .frise__i--pivot::before{border-color:var(--accent);background:radial-gradient(circle,var(--accent) 0 2.6px,var(--ground) 3.2px)}
/* le trait principal et son point, dans les graphiques */
.page .f-trait:not(.f-trait--leger),.page .f-point{stroke:var(--accent)}
.page .encre .f-trait:not(.f-trait--leger),.page .encre .f-point{stroke:#A98CFF}
/* les numéros de la méthode */
.page .methode__num,.page #methode .item__num{color:var(--accent)}
.page .encre .item__num{color:#A98CFF}
/* le soulignement au survol : le trait du menu, et les liens du texte */
:root .tete__n a::after{background:var(--accent)}
.page a:hover,.page a:focus-visible{text-decoration-color:var(--accent)}
.page .encre a:hover,.page .encre a:focus-visible{text-decoration-color:#A98CFF}
/* le signe et l'unité des chiffres ; le nombre reste à l'encre */
.page .grandeur__env,.page .grandeur__u,.page .certif__n small{color:var(--accent)}
.page .encre .grandeur__env,.page .encre .grandeur__u,.page .encre .certif__n small{color:#A98CFF}
/* la barre la plus lourde des enjeux BREEAM */
.page .enjeu__barre--100{background:var(--accent)}
/* un carré dans la marge, devant chaque lien de « Pour aller plus loin » ;
   il est centré sur la hauteur d'x de Syne et ne déplace pas le texte */
.page .liens a{position:relative}
.page .liens a::before{content:"";position:absolute;left:calc(-1 * min(var(--retrait,26px),clamp(20px,3vw,48px) / 2 + 3.5px));
  top:calc(.69em - 3.5px);width:7px;height:7px;background:var(--accent);pointer-events:none}
.page .encre .liens a::before{background:#A98CFF}


/* Regles du bandeau de navigation. Elles vivent ici et non dans la charte
   des pages, parce que deux pages du site ne partagent pas cette charte :
   le recueil des sources, qui est genere, et le dossier reglementaire, qui
   precede la charte. Injectees avec le bandeau, elles valent partout. */
:root{--tete-h:84px}
.tete{
  position:sticky;top:0;z-index:60;height:var(--tete-h);
  background:var(--ground);border-bottom:1px solid var(--rule);
}
.tete__in{
  max-width:var(--col);margin:0 auto;padding:0 var(--s5);height:100%;
  /* 22/09 : le bouton de langue a rendu la barre plus longue. Sans nowrap,
     le bouton de contact passait a la ligne entre 1100 et 1180 px ; le menu
     sait defiler de lui-meme, c est prevu (.tete__n--deborde). */
  display:flex;align-items:center;gap:var(--s5);flex-wrap:nowrap;
}
.tete__m{
  flex:none;display:block;line-height:0;text-decoration:none;
}
/* Le rembourrage lateral n est pas decoratif : la barre defile, donc elle
   coupe a son bord. Sans ces huit pixels, la marque du premier lien est
   rognee a gauche. La marge negative annule le decalage de mise en page. */
.tete__n{position:relative;display:flex;gap:clamp(13px,1.7vw,24px);flex:1;min-width:0;
  overflow-x:auto;scrollbar-width:none;align-self:stretch;align-items:center;
  padding:0 8px;margin:0 -8px}
.tete__n::-webkit-scrollbar{display:none}
/* Si la barre doit defiler malgre tout, le dernier mot s efface
   au lieu d etre tranche net par le bouton. */
.tete__n--deborde{
  -webkit-mask:linear-gradient(to right,#000 calc(100% - 34px),transparent);
          mask:linear-gradient(to right,#000 calc(100% - 34px),transparent);
}
.tete__n a{
  position:relative;z-index:2;
  font-size:var(--t-second);color:var(--ink-2);font-weight:500;text-decoration:none;
  white-space:nowrap;padding:var(--s2) 0;transition:color .2s;
}
.tete__n a:hover{color:var(--ink)}
.tete__n a[aria-current="page"]{color:var(--ink);font-weight:600}
.tete__c{flex:none}
/* langue et contact forment un seul bloc : la grille du bandeau a trois
   colonnes, un quatrieme enfant aurait ouvert une deuxieme ligne. */
.tete__d{display:flex;align-items:center;gap:10px}
/* le bouton de langue, a gauche du bouton de contact */
.tete__lang{flex:none;font-family:var(--f-display);font-size:15px;font-weight:600;
  letter-spacing:.1em;color:var(--ink);text-decoration:none;padding:6px 4px;
  /* la ligne est posee, pas seulement au survol : c est elle qui dit qu on peut
     cliquer. « currentColor » et non une couleur fixe, parce que le bandeau est
     blanc sur la photo et noir ailleurs (23/09/2026). */
  border-bottom:1px solid color-mix(in srgb, currentColor 40%, transparent)}
.tete__lang:hover,.tete__lang:focus-visible{border-bottom-color:currentColor}

/* ---------- le bouton, un seul pour tout le site ----------
   Deux crochets qui encadrent le libelle, comme une citation. L aplat noir
   etait trop dur ; les crochets disent la meme chose sans peser. Ils sont
   aussi le motif des liens secondaires, en plus fin et en gris : meme
   famille, deux poids.

   Rien ne se pose derriere le texte, donc la lisibilite reste entiere. */
.btn{
  position:relative;display:inline-flex;align-items:center;
  /* 16/09 : « un peu trop gros » : 15 px au lieu de 17, marges resserrees */
  font-family:var(--f-body);font-size:var(--t-mention);font-weight:600;letter-spacing:.01em;
  padding:var(--s3) var(--s5);text-decoration:none;color:var(--ink);
  transition:color .2s;
  /* PIEGE PAYE LE 30/08/2026. Cette classe a ete dessinee pour un <a>, qui
     n a pas de fond. Posee sur un <button>, le fond gris clair du navigateur
     (#F0F0F0) restait dessous : en theme sombre, l encre passe en #F3F3F8 et
     le bouton « Envoyer » du formulaire tombait a 1,03 de contraste —
     illisible. En clair il passait par accident. On neutralise donc les
     styles natifs du bouton. */
  background:none;border:0;appearance:none;-webkit-appearance:none;
  cursor:pointer;
}
.btn::before,.btn::after{
  content:"";position:absolute;top:0;bottom:0;width:12px;
  border:1.5px solid var(--accent);
  transition:width .26s cubic-bezier(.2,.7,.2,1),border-color .2s;
}
.btn::before{left:0;border-right:0;border-radius:3px 0 0 3px}
.btn::after{right:0;border-left:0;border-radius:0 3px 3px 0}
.btn:hover::before,.btn:hover::after{width:18px}
/* Le <span> que portent certaines pages ne doit rien redresser du tout :
   c est ce qui faisait pencher le texte sur la moitie du site. */
.btn span{display:inline-block;transform:none}

.btn--sm{padding:.45rem 1.1rem}
.btn--sm::before,.btn--sm::after{width:10px;border-width:1.8px}
.btn--sm:hover::before,.btn--sm:hover::after{width:15px}

/* ---------- le logotype ----------
   Pose en masque et non en image : peint avec l encre du theme, il tient donc
   en clair comme en sombre. Un PNG viole a fond transparent disparaitrait sur
   le fond sombre. Pour le repasser dans le violet officiel, il suffit de
   remplacer var(--ink) par #251049 — ou par var(--accent). */
.tete__logo{
  display:block;width:176px;height:50px;
  background:var(--ink);
  /* Le trace n est embarque QU UNE FOIS : ecrit deux fois, une fois pour le
     prefixe et une fois pour la propriete standard, il doublait le poids de
     chaque page du site. */
  --trace:url(../img/logo-simeal.png);
  -webkit-mask:var(--trace) left center/contain no-repeat;
          mask:var(--trace) left center/contain no-repeat;
}

/* ---------- la marque du menu ----------
   Deux passages de feutre, qui glissent d un mot a l autre. Le bord est plus
   dense que l aplat : c est lui qui porte le contraste, sans alourdir. */
.rep{
  display:none;
  position:absolute;left:0;top:0;pointer-events:none;z-index:1;opacity:0;
  transition:transform .36s cubic-bezier(.2,.7,.2,1),
    width .36s cubic-bezier(.2,.7,.2,1),opacity .2s;
}
.rep svg{display:block;width:100%;height:100%;overflow:visible}
.rep--pret{opacity:1}
.rep .rem{opacity:.15}
.rep .bord{opacity:.30}

@media (prefers-reduced-motion:reduce){
  .rep{transition-duration:.01ms !important}
}

@media (max-width:560px){
  :root{--tete-h:56px}
  .tete__in{gap:var(--s4);padding:0 var(--s4)}
  .tete__logo{width:132px;height:38px}
  /* Cibles tactiles au pouce. Le trait du menu ne suit plus la
     hauteur du lien mais celle du texte (voir _entete.js), donc on
     peut grandir la zone sensible sans grossir le trait. */
  .tete__m{display:flex;align-items:center;min-height:44px}
  .tete__n a{display:flex;align-items:center;min-height:44px;padding:0}
}

/* ---------- le survol pendant le defilement ----------
   Un navigateur ne reevalue :hover que si la souris bouge. Pendant un
   defilement, la case quittee reste donc allumee sous un curseur qui ne la
   couvre plus. On eteint les effets de survol le temps du defilement. */
.defile .btn::before,.defile .btn::after,
.defile .notion::before,.defile .notion::after{width:14px}
.defile .btn--sm::before,.defile .btn--sm::after{width:10px}
.defile .notion::before,.defile .notion::after{width:9px;border-color:var(--rule-strong)}
.defile .porte:hover,.defile .chiffre:hover .chiffre__q{background:none}
.defile .liste__i:hover::before{transform:scaleX(0);opacity:0}

/* ---------- le menu, version sobre (16/09/2026) ----------
   Alexandre a ecarte la marque au feutre qui glissait d un mot a l autre.
   A la place, un filet d un pixel qui se trace de gauche a droite sous le mot
   survole, et reste pose sous la page courante, a l accent. Un seul
   mouvement, court, et rien qui se deplace d un mot a l autre. */
.tete__n a::after{content:"";position:absolute;left:0;right:0;bottom:2px;height:1px;
  background:var(--ink);transform:scaleX(0);transform-origin:left center;
  transition:transform .28s cubic-bezier(.2,.7,.2,1)}
.tete__n a:hover::after,.tete__n a:focus-visible::after{transform:scaleX(1)}
.tete__n a[aria-current="page"]::after{transform:scaleX(1);height:2px;background:var(--accent)}
@media (prefers-reduced-motion:reduce){.tete__n a::after{transition:none}}

/* ---------- le bandeau, disposition du 16/09/2026 ----------
   Alexandre : « centre les titres, avec le logo et le nous contacter aux
   extremites ». Le bandeau prend toute la largeur, dans la meme gouttiere que
   l accueil. Trois colonnes : les deux laterales ont la meme largeur, donc le
   menu tombe au centre exact, quelle que soit la taille du logo ou du bouton. */
.tete .tete__in{max-width:2100px;padding-inline:clamp(16px,2.6vw,72px)}
@media (min-width:1100px){
  /* 22/09 : ecart reduit de var(--s5) a 8 px. Invisible, parce que le logo
     et le bouton sont cales sur les marges et le menu au centre ; mais a
     1100 px, c est ce qui laisse au couple « EN / Nous contacter » la
     largeur qu il demande, au lieu de le faire deborder de 11 px. */
  .tete .tete__in{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:8px}
  .tete__m{justify-self:start}
  /* 17/09 : « écarter très légèrement les mots du menu, sans venir trop près
     des bords » : 24 px avant, 28 à 44 px selon la largeur */
  .tete__n{flex:none;justify-self:center;overflow:visible;margin:0;padding:0;gap:clamp(28px,2.2vw,44px)}
  .tete__d{justify-self:end}
}

/* ---------- le menu du telephone (16/09/2026) ----------
   Sur le modele d ARP Astrance, retenu par Alexandre : sous 1100 px, logo
   au centre, trois traits a droite, sans enveloppe ; le panneau n a que le bouton
   de contact, courriel et numero sont sur la page Contact ; le menu s ouvre en
   panneau plein ecran. Les elements sont poses par _entete.js a partir des
   liens du bandeau, donc aussi dans WordPress. */
.tete__vide,.tete__burger{display:none}
/* 16/09 : à 1024 px, le logo mordait sur le menu et le bouton passait
   sur deux lignes ; le menu du téléphone prend le relais sous 1100 px */
@media (max-width:1099px){
  .tete .tete__in{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;gap:12px}
  .tete .tete__n,.tete .tete__d{display:none !important}
  .tete .tete__m{justify-self:center}
  .tete__vide,.tete__burger{display:grid;place-items:center;width:44px;height:44px}
  /* les traits s'arrêtent sur le bord de la photo, pas 9 px avant */
  .tete__burger{justify-self:end;justify-items:end;align-content:center;gap:6px;padding:0;border:0;background:none;cursor:pointer}
  .tete__burger span{display:block;width:26px;height:1.6px;border-radius:2px;background:var(--ink)}
}

.tete__menu{position:fixed;inset:8px;z-index:100;display:flex;flex-direction:column;overflow:auto;
  padding:12px clamp(16px,5vw,32px) 28px;border-radius:18px;background:var(--ink);color:#fff;
  animation:menu-entree .22s cubic-bezier(.2,.7,.2,1)}
.tete__menu[hidden]{display:none}
@keyframes menu-entree{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.tete__menu-haut{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;min-height:60px}
.tete__menu .tete__vide{display:block;width:44px;height:44px}
.tete__menu-logo{justify-self:center;line-height:0}
.tete__menu .tete__logo{background:#fff}
.tete__fermer{position:relative;justify-self:end;width:44px;height:44px;padding:0;border:0;background:none;cursor:pointer}
.tete__fermer span{position:absolute;left:9px;right:9px;top:50%;height:1.6px;border-radius:2px;background:#fff}
.tete__fermer span:first-child{transform:rotate(45deg)}
.tete__fermer span:last-child{transform:rotate(-45deg)}
.tete__menu-liens{display:flex;flex-direction:column;margin-top:clamp(24px,6vh,56px)}
.tete__menu-liens a{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 2px;
  border-bottom:1px solid rgba(255,255,255,.22);color:#fff;text-decoration:none;
  font:400 clamp(1.7rem,7vw,2.3rem)/1.1 var(--f-body);letter-spacing:-.01em}
.tete__menu-liens a svg{flex:none;width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.5;
  stroke-linecap:round;stroke-linejoin:round;opacity:.7}
.tete__menu-liens a[aria-current="page"]{font-weight:600}
.tete__menu-pied{display:flex;flex-direction:column;align-items:flex-start;gap:14px;margin-top:auto;padding-top:32px}
.tete__menu-pied .btn{color:#fff}
.tete__menu-pied .btn::before,.tete__menu-pied .btn::after{border-color:#fff}
.tete__menu-lang{font-size:15px;color:rgba(255,255,255,.72);text-decoration:none;border-bottom:1px solid rgba(255,255,255,.28);padding-bottom:2px}
.tete__menu-lang:hover,.tete__menu-lang:focus-visible{color:#fff;border-bottom-color:#fff}
html.menu-ouvert{overflow:hidden}
@media (prefers-reduced-motion:reduce){.tete__menu{animation:none}}

/* ---------- le bandeau qui disparaît en descendant (16/09/2026) ----------
   Essais refusés le même jour : le logo seul (« le logo ça ne va pas ») et le
   logo dans un ovale blanc (« c'est atroce »). Retenu : « le bandeau qui
   disparaît complètement quand on descend et revient dès qu'on remonte, tout
   compris, logo inclus ». Actif si le bandeau porte data-defilement ; sans
   l'attribut, il reste fixe en haut. Il revient aussi quand le clavier y
   entre. */
.tete[data-defilement]{transition:transform .35s cubic-bezier(.2,.7,.2,1)}
.tete.tete--replie{transform:translateY(-100%)}
.tete.tete--replie:focus-within{transform:none}
@media (prefers-reduced-motion:reduce){.tete[data-defilement]{transition:none}}

/* ---------- le menu en Syne (16/09/2026) ----------
   « Pourquoi la police du menu c'est pas du Syne ? » : le menu passe dans la
   police des titres, à l'encre, un cran plus petit (Syne est plus large :
   le bandeau doit tenir dès 1100 px). La page en cours garde son trait. */
.tete__n a{font-family:var(--f-display);font-size:var(--t-mention);font-weight:600;letter-spacing:-.005em;color:var(--ink)}
.tete__n a[aria-current="page"]{font-weight:700}
.tete__menu-liens a{font-family:var(--f-display);font-weight:600;letter-spacing:-.02em}

/* ---------- la photo sous le bandeau (17/09/2026) ----------
   « Il faut que l'image principale prenne vraiment toute la page » ; « il faut
   vraiment qu'on travaille sur le haut de page et le blanc du contour ».
   Proposition A de l'atelier bandeau : sur une page qui commence par une
   photo, la photo prend tout l'écran, de bord à bord, et le bandeau flotte
   dessus, transparent (logo, menu et bouton en blanc sur un voile sombre). Il
   devient blanc (état « plein », posé par _entete.js) dès que le titre de la
   photo arriverait sous lui, et redevient transparent tout en haut. Il part en
   descendant et revient en remontant : translation et fondu, 320 ms.
   Écrit ici, préfixé par :root:has(.ouverture), pour valoir sur l'accueil et
   les pôles, en statique comme sous WordPress (où le bandeau n'est pas dans
   .page, et où cette feuille passe avant celle des pages). */
:root:has(.ouverture) .tete{position:fixed;left:0;right:0;
  background-color:transparent;border-bottom-color:transparent;
  transition:transform .32s cubic-bezier(.2,.7,.2,1),opacity .32s cubic-bezier(.2,.7,.2,1),background-color .3s ease,border-color .3s ease}
:root:has(.ouverture) .tete.tete--replie{transform:translateY(-100%);opacity:0}
:root:has(.ouverture) .tete.tete--replie:focus-within{transform:none;opacity:1}
:root:has(.ouverture) .tete .tete__in{position:relative}
/* son propre voile, plus sombre en haut : menu et bouton restent lisibles sur
   une photo claire (Conformité : façade presque blanche) */
:root:has(.ouverture) .tete::before{content:"";position:absolute;top:0;left:0;right:0;
  height:calc(var(--tete-h) * 1.9);pointer-events:none;transition:opacity .3s ease;
  background:linear-gradient(rgba(11,11,18,.62),rgba(11,11,18,.44) 45%,rgba(11,11,18,0))}
:root:has(.ouverture) .tete .tete__logo{transition:background-color .3s ease}
:root:has(.ouverture) .tete .tete__n a,
:root:has(.ouverture) .tete .tete__lang{transition:color .3s ease}
:root:has(.ouverture) .tete .tete__burger span{transition:background-color .3s ease}
:root:has(.ouverture) .tete:not(.tete--plein) .tete__logo{background-color:#fff}
:root:has(.ouverture) .tete:not(.tete--plein) .tete__n a,
:root:has(.ouverture) .tete:not(.tete--plein) .tete__lang,
:root:has(.ouverture) .tete:not(.tete--plein) .tete__c{color:#fff}
/* 23/09 : « le bouton FR ou EN ne se voit vraiment pas ». Il manquait dans
   cette liste : sur une photo sombre, son encre noire disparaissait. Sa ligne
   suit la couleur du texte, elle n a rien a redefinir ici. */
:root:has(.ouverture) .tete:not(.tete--plein) .tete__n a::after{background:#fff}
:root:has(.ouverture) .tete:not(.tete--plein) .tete__c::before,
:root:has(.ouverture) .tete:not(.tete--plein) .tete__c::after{border-color:#fff}
:root:has(.ouverture) .tete:not(.tete--plein) .tete__burger span{background:#fff}
:root:has(.ouverture) .tete:not(.tete--plein) a:focus-visible,
:root:has(.ouverture) .tete:not(.tete--plein) button:focus-visible{outline-color:#fff}
:root:has(.ouverture) .tete.tete--plein{background-color:var(--ground);border-bottom-color:var(--rule)}
:root:has(.ouverture) .tete.tete--plein::before{opacity:0}
/* replié, il change d'état d'un coup, une fois sorti : aucun fondu de couleur
   ne se voit pendant qu'il part */
:root:has(.ouverture) .tete.tete--replie{transition:transform .32s cubic-bezier(.2,.7,.2,1),opacity .32s cubic-bezier(.2,.7,.2,1),background-color 0s linear .32s,border-color 0s linear .32s}
:root:has(.ouverture) .tete.tete--replie::before,
:root:has(.ouverture) .tete.tete--replie .tete__logo,
:root:has(.ouverture) .tete.tete--replie .tete__n a,
:root:has(.ouverture) .tete.tete--replie .tete__m,
:root:has(.ouverture) .tete.tete--replie .tete__lang,
:root:has(.ouverture) .tete.tete--replie .tete__c,
:root:has(.ouverture) .tete.tete--replie .tete__c::before,
:root:has(.ouverture) .tete.tete--replie .tete__c::after,
:root:has(.ouverture) .tete.tete--replie .tete__burger,
:root:has(.ouverture) .tete.tete--replie .tete__burger span{transition-duration:0s;transition-delay:.32s}

/* la photo : de bord à bord, de la hauteur de l'écran, sans marge au-dessus ;
   le texte garde la verticale de la page (gouttière + retrait, et le centrage
   au-delà de 2100 px), centré entre le bandeau et le trait */
:root:has(.ouverture) .large:has(> .ouverture){max-width:none;padding-inline:0}
:root:has(.ouverture) .ouverture{--suite-h:clamp(64px,11svh,112px);--trait:calc(var(--suite-h) - clamp(16px,2.6svh,28px));
  margin-top:0;min-height:max(480px,100vh);min-height:max(480px,100svh)}
:root:has(.ouverture) .ouverture__txt{
  max-width:calc(min(900px,82%) + max(0px,(100% - 2100px) / 2) + var(--gouttiere));
  padding:calc(var(--tete-h) + var(--respire)) var(--retrait) calc(var(--respire) + var(--suite-h))
    calc(max(0px,(100% - 2100px) / 2) + var(--gouttiere) + var(--retrait))}
/* un voile léger au bas de la photo : le trait reste visible sur une façade
   claire, et le regard descend vers le bord */
:root:has(.ouverture) .ouverture::before{content:"";position:absolute;left:0;right:0;bottom:0;height:34%;z-index:1;
  pointer-events:none;background:linear-gradient(rgba(11,11,18,0),rgba(11,11,18,.4))}
/* l'invitation à descendre : un trait fin, un point qui y glisse lentement et
   disparaît au bout, puis repart. Rien ne clignote. Lien posé par _entete.js. */
.ouverture__suite{position:absolute;z-index:2;bottom:0;left:calc(50% - 22px);width:44px;height:var(--suite-h);
  display:block;text-decoration:none;filter:drop-shadow(0 0 1.5px rgba(11,11,18,.6))}
.ouverture__suite::before{content:"";position:absolute;left:21.5px;top:0;width:1px;height:var(--trait);background:rgba(255,255,255,.62)}
.ouverture__suite span{position:absolute;left:19.5px;top:-2.5px;width:5px;height:5px;border-radius:50%;background:#fff;opacity:0;
  animation:suite-glisse 3.6s cubic-bezier(.45,0,.3,1) .8s infinite}
@keyframes suite-glisse{0%{transform:translateY(0);opacity:0}12%{opacity:1}60%{opacity:1}76%,100%{transform:translateY(var(--trait));opacity:0}}
.ouverture__suite:focus-visible{outline:2px solid #fff;outline-offset:2px}
@media (prefers-reduced-motion:reduce){
  :root:has(.ouverture) .tete,:root:has(.ouverture) .tete.tete--replie{transition:none}
  :root:has(.ouverture) .tete::before,:root:has(.ouverture) .tete .tete__logo,:root:has(.ouverture) .tete .tete__n a,
  :root:has(.ouverture) .tete .tete__c,:root:has(.ouverture) .tete .tete__lang,
  :root:has(.ouverture) .tete .tete__burger span{transition:none}
  .ouverture__suite span{animation:none;opacity:1;transform:translateY(calc(var(--trait) - 2.5px))}
}


/* ---------- raccord avec le nuancier de WordPress ----------
   Engendre par construire-theme.py. Ne pas modifier a la main.
   Redit dans chaque portee qui bascule les jetons : un alias se
   resout la ou il est declare, pas la ou il sert. */
:root{
  --simeal-ground:var(--ground);
  --simeal-ink:var(--ink);
  --simeal-ink-2:var(--ink-2);
  --simeal-ink-3:var(--ink-3);
  --simeal-rule:var(--rule);
  --simeal-rule-strong:var(--rule-strong);
  --simeal-accent:var(--accent);
  --simeal-accent-soft:var(--accent-soft);
  --simeal-cta:var(--cta);
}
/* La section inversee redit les deux etages : sans le
   second, theme.json continue de peindre les titres avec
   l encre de la PAGE, soit du noir sur du noir. */
.sec--inverse{
  --simeal-ground:var(--ground);
  --simeal-ink:var(--ink);
  --simeal-ink-2:var(--ink-2);
  --simeal-ink-3:var(--ink-3);
  --simeal-rule:var(--rule);
  --simeal-rule-strong:var(--rule-strong);
  --simeal-accent:var(--accent);
  --simeal-accent-soft:var(--accent-soft);
  --simeal-cta:var(--cta);
  --wp--preset--color--ground:var(--ground);
  --wp--preset--color--ink:var(--ink);
  --wp--preset--color--ink-2:var(--ink-2);
  --wp--preset--color--ink-3:var(--ink-3);
  --wp--preset--color--rule:var(--rule);
  --wp--preset--color--rule-strong:var(--rule-strong);
  --wp--preset--color--accent:var(--accent);
  --wp--preset--color--accent-soft:var(--accent-soft);
  --wp--preset--color--cta:var(--cta);
}

/* ---------- raccords propres a WordPress ----------
   Engendre par construire-theme.py. Ne pas modifier a la main :
   modifier le gabarit GLU dans le script. */

/* WordPress enveloppe tout le contenu dans .wp-site-blocks. C est lui qui
   joue le role de l ancien .page : passer au-dessus du canevas de fond, qui
   est en position fixe sous la page. */
.wp-site-blocks{position:relative;z-index:1}

/* La barre d administration est en position fixe : sans ce decalage, le
   bandeau collant se glisse dessous et le logotype disparait a moitie.
   Elle ne s affiche que pour une personne connectee — donc uniquement pour
   Alexandre, jamais pour un visiteur. */
.admin-bar .tete{top:32px}
@media (max-width:782px){
  .admin-bar .tete{top:46px}
}
/* Meme decalage pour le menu du telephone, sinon la barre cache son logo. */
.admin-bar .tete__menu{top:calc(8px + 32px)}
@media (max-width:782px){
  .admin-bar .tete__menu{top:calc(8px + 46px)}
}

/* Les blocs de WordPress arrivent avec leurs propres marges. La charte
   raisonne en sections qui portent leur respiration : on neutralise le
   doublon plutot que de lutter section par section. */
.wp-site-blocks > *{margin-block-start:0}

/* Le bandeau et le pied arrivent chacun dans une enveloppe de WordPress
   (div.wp-block-template-part). Enveloppe du bandeau = sa propre hauteur :
   « position:sticky » n y a aucune course, et le bandeau partait avec la
   page au lieu de rester en haut (constate le 17/09/2026). Sans boite,
   l enveloppe laisse le bandeau glisser sur toute la hauteur du site. Les
   gabarits la declarent en div : une enveloppe « header » ou « footer »
   doublait le repere de navigation et, pour le pied, sa marge. */
.wp-site-blocks > .wp-block-template-part{display:contents}

/* La mention du pied est un paragraphe sous WordPress, un simple texte dans
   les pages d origine : la mesure des paragraphes (64ch) ne s y applique pas. */
footer .pied-mention{max-width:none}

/* Une image posee dans une page ne doit jamais depasser sa colonne. */
.wp-block-image img{max-width:100%;height:auto}

/* Les figures du site sont des SVG calcules, poses en bloc HTML. Elles
   portent leur propre viewBox : il suffit de les laisser respirer. */
.wp-block-html svg{max-width:100%;height:auto;display:block}

/* Les pages v3 (17/09/2026) arrivent en blocs HTML dans un groupe « page
   simeal-v3 » : leurs sections portent leur propre respiration, les marges
   que WordPress pose entre blocs s y ajouteraient. */
.wp-site-blocks .simeal-v3 > *,.wp-block-post-content > .simeal-v3{margin-block-start:0}
.wp-block-post-content:has(> .simeal-v3){max-width:none}
/* Le bloc de navigation du bandeau reprend l apparence des liens du menu :
   sans quoi il arriverait avec la mise en forme par defaut de WordPress. */
.tete .wp-block-navigation{flex:1;min-width:0}
.tete .wp-block-navigation__container{gap:var(--s5)}
@media (min-width:1100px){.tete .wp-block-navigation__container{gap:clamp(28px,2.2vw,44px)}}

/* PIEGE PAYE LE 14/09/2026, mesure dans un vrai WordPress (WordPress
   Playground) et invisible dans apercu.py, qui imitait le balisage :
     1. WordPress pose la classe du bloc, tete__n, sur le <nav> ET sur la
        liste <ul> qu il contient. La liste heritait une seconde fois du
        rembourrage et du defilement, et se retrecissait dans le <nav> ;
     2. la mise en page flexible de WordPress remet a zero la marge de chaque
        enfant (.is-layout-flex > *), ce qui annulait la marge negative de
        huit pixels qui compense le rembourrage du menu.
   Resultat : a 1440 px de large, le dernier lien du menu etait rogne de
   17 px. Le <nav> redevient le seul a defiler, avec sa marge ; la liste
   prend la largeur de ses liens. */
.tete .tete__in > nav.tete__n{margin:0 -8px}
.tete ul.tete__n{flex:none;min-width:max-content;overflow:visible;padding:0;margin:0}
.tete .wp-block-navigation-item__content{
  font-size:var(--t-second);color:var(--ink-2);font-weight:500;
  text-decoration:none;white-space:nowrap;transition:color .2s;
}
.tete .wp-block-navigation-item__content:hover{color:var(--ink)}
.tete .wp-block-navigation-item.current-menu-item .wp-block-navigation-item__content{
  color:var(--ink);font-weight:600;
}

/* Dans l editeur, le canevas de fond n existe pas et la page est enfermee
   dans un cadre : on rend la colonne de texte a sa largeur reelle, sinon on
   compose a l aveugle sur une largeur qui n est pas celle du site. */
.editor-styles-wrapper .wrap{max-width:var(--col)}