/* ═══════════════════════════════════════════════════════════════
   COMPANIUM — Design tokens (v6 — 09/07/2026)
   Polices auto-hébergées (plus de dépendance à Google Fonts, qui
   se chargeait mal sur certains réseaux mobiles — rendu dégradé
   constaté et corrigé le 03/07/2026).
   Palette CITRON & GRAPHITE (P5 — 24/08/2026). Regle des roles :
   --cta-bg = #E6FF12 (citron d'action, FONDS de boutons et badges) ;
   --cta-text = #14170A (le NOIR de la maison, pose SUR un fond clair) ;
   --accent-dark = #16181A (graphite, TEXTE + liens sur fond clair) ;
   --texte-sur-sombre = #FFFFFF (texte clair sur fond sombre/photo).
   ET LA REGLE DE LISIBILITE (P5-b) : sur un fond CLAIR l'ecriture d'un
   bouton est NOIRE, sur un fond SOMBRE elle est BLANCHE. Un fond est
   clair si le noir s'y lit mieux que le blanc. Seuil : 4,5 pour 1.
   Reperes : blanc sur citron = 1,36 (illisible) ; noir sur citron = 13,35.
   ═══════════════════════════════════════════════════════════════ */
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/space-grotesk-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/space-grotesk-latin-600-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/space-grotesk-latin-700-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-600-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/manrope-latin-700-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/assets/fonts/ibm-plex-mono-latin-500-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/ibm-plex-mono-latin-600-normal.woff2') format('woff2');
}
:root {
  /* 23/07/2026 — CHARTE D'ORIGINE : tokens PARTAGES (source de verite unique, valeurs exactes
     du fichier de reference simulateur_companium_etapes.html). Utilises par le parcours ;
     le simulateur en a une copie scopee identique (aucune regression). */
  --page-bg:       #F7F8F5;   /* fond de page */
  --text-strong:   #16181A;   /* titres forts */
  --text:          #2C3033;   /* texte / titres courants */
  --text-body:     #464B4F;   /* corps de texte */
  --bg:            #FFFFFF;
  --bg-panel:      #EFF1EA;    /* 23/07 v4 — charte d'origine (utilise seulement par le parcours) */
  --bg-card:       #FFFFFF;
  --border:        #DFE2D6;
  /* 23/07/2026 v2 — FOND BLANC PARTOUT ; cadres gris (un cran plus fonce) ; TUILES BLANCHES */
  --lvl0:          #FFFFFF;   /* ecran / page : BLANC PUR */
  --lvl05:         #FAFBFB;   /* 24/07 - gris quasi blanc : zone du parcours */
  --lvl1:          #EFF1EA;   /* cadre principal */
  --lvl2:          #E6E9DD;   /* cadre dans le cadre */
  --lvl3:          #DFE2D6;   /* cadre dans le niveau 2 (porte les tuiles blanches) */
  --lvl4:          #D2D6C6;   /* cadre dans le niveau 3 */
  --tile-hover:    var(--accent);   /* 23/07 v4 — survol lime pale (charte d'origine) */
  --field-bg:      #FFFFFF;   /* champs de saisie : blancs */
  --accent:        #EFF1EA;   /* S1 04/08 : FOND DOUX AU REPOS — gris neutre (ex jaune #DCBC18 trop vif sur les survols/pastilles) ; texte anthracite par-dessus */
  --accent-dark:   #16181A;   /* P1 04/08 : anthracite — TEXTE accent + bordures + liens sur fond clair (plus de vert ici) */
  --accent-hover:  #E6E9DD;   /* S1 04/08 : FOND DOUX AU SURVOL — gris neutre. NB : les 2 usages "texte/dessin sur fond sombre" (sur-titre + simu-liste) pointent directement vers --cta-bg, pas vers ce gris */
  --select-ring:   #E6FF12;   /* 30/08 : suit --cta-bg (etait #D6E82C) — liseré de focus + coche */
  --accent-soft:   var(--lvl3); /* 23/07/2026 — halos/pastilles gris (glyphe reste accent) */
  --picto-size:    48px;      /* 21/07/2026 — taille unifiee des pictogrammes (charte) */
  --tile-radius:   16px;      /* 21/07/2026 — rayon unifie des tuiles (charte) */
  --tile-bg:       #FFFFFF;   /* 23/07/2026 v2 — TUILES BLANCHES */
  --tile-shadow:   0 1px 2px rgba(20,25,30,.08);   /* 23/07/2026 v3 — ombre COURTE ET NETTE (fini le flou) */
  /* 21/07/2026 — palette simulateur epuree (page resultat comprise) */
  --cta-bg:        #E6FF12;   /* 30/08 : le jaune de la charte passe de #D6E82C a #E6FF12 —
                                 plus vif, et le graphite #14170A y monte de 13,35 a 16,15 pour 1 */
  --cta-bg-survol: #BFD022;   /* P1 04/08 : survol du bouton d'action */
  --presse:        #BFD022;   /* T4 04/08 : etat PRESSE (touch/clic) — jaune legerement plus clair que --cta-bg, pour une reaction sans clignotement (remplace l'ex-surbrillance verte). Texte anthracite lisible par-dessus. */
  --cta-text:      #14170A;   /* P1 04/08 : texte pose SUR --cta-bg (boutons, pastilles, puces) */
  --texte-sur-sombre: #FFFFFF;   /* P1 04/08 : texte CLAIR sur fond sombre (bandes sombres, badges, hero sur photo) */
  --btn-bg:   #16181A;
  --btn-text: #FFFFFF;
  --icon-accent:   var(--accent-dark);   /* 22/07/2026 — trait des pictos (vert doux) */
  --card-bg:       #FFFFFF;   /* 23/07 v4 — cadre d'etape (charte d'origine, cream) */
  --card-radius:   14px;      /* 22/07/2026 — rayon commun des cadres */
  --band-bg:       var(--lvl1); /* 23/07/2026 — bandeau de progression : niveau 1 */
  --result-card-bg:var(--lvl4); /* 23/07/2026 — niveau 4 */
  --result-num:    #22262A;   /* grand chiffre des cartes resultat (ex-ambre) */
  --grey-soft:     var(--lvl3); /* 23/07/2026 — niveau 3 */
  --bar-auto:      var(--cta-bg);   /* barre "ou va la production" : autoconsommee (vert doux) */
  --bar-store:     #ECD98A;   /* S3 04/08 : barre "batterie stockee" — JAUNE CLAIR (ex terracotta #E09B72), coherent avec le jaune d'action mais plus clair pour se distinguer de l'autoconsommee (--bar-auto vif) */
  --bar-grid:      #D7DBD5;   /* injectee / surplus reseau */
  --on-accent:     #111315;   /* couleur de texte à poser SUR un fond fluo */
  --text-primary:  #16181A;
  --text-muted:    #7F868B;   /* 23/07 v4 — charte d'origine */
  --qs-surface:    #E9E3DA;   /* seq 84 — fond soutenu de la zone de question (defile une question par ecran) */
  --qs-muted:      #5C6166;   /* seq 84 — texte discret (compteur, aide, lien Retour) sur ce fond */
  --rail-bg:       #EDEDE9;   /* seq 90 — fond de la colonne laterale du parcours */
  --rail-line:     #DDDDD7;   /* seq 90 — trait de separation de cette colonne */
  --rail-text:     #5D6670;   /* seq 90 — texte discret de cette colonne */
  --font-display: 'Space Grotesk', -apple-system, 'Segoe UI', sans-serif;
  --font-body:    'Manrope', -apple-system, 'Segoe UI', sans-serif;
  --font-mono:    'IBM Plex Mono', 'SF Mono', Consolas, monospace;
}
/* T4 04/08 : plus AUCUNE surbrillance verte au toucher (surbrillance tactile par defaut du navigateur) —
   site public entier, y compris le parcours (feuille partagee). tap-highlight n'etant pas herite, on cible *. */
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--text-primary);
  font-family: var(--font-body);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}
h1, h2, h3 { font-family: var(--font-display); font-weight: 700; line-height: 1.15; margin: 0; }
p { margin: 0; }
a { color: inherit; }
button { font-family: inherit; }
img, svg { display: block; max-width: 100%; }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   REFONTE DU SITE PUBLIC — 05/09/2026
   Structure et valeurs RECOPIEES de _maquettes/COMPANIUM_maquette_site_public.html.

   ⚠️ CETTE FEUILLE EST COMMUNE AUX TROIS ECRANS (accueil, parcours,
   simulateur). Toute regle ajoutee ici porte donc un prefixe qui lui est
   propre, et AUCUNE regle existante n a ete modifiee :
       cp-   ce qui est PARTAGE  (tuiles, boutons, pictogrammes)
       ac-   ce qui n appartient qu a l ACCUEIL
   Une regle sans prefixe -- « .top », « .sec », « .tu » comme dans la
   maquette -- aurait mordu sur le parcours et le simulateur des le premier
   depot, sans qu aucun ecran ne le dise.

   ⚠️ LES REGLAGES ADMINISTRABLES arrivent en proprietes --sd-*, publiees par
   resources/views/layouts/app.php depuis la table site_display_settings.
   Chacune porte ici un repli : une table absente ne doit pas casser la page.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── LES JETONS DE LA MAQUETTE ────────────────────────────────────────────
   Recopies tels quels. Ils ne remplacent PAS les jetons de charte ci-dessus,
   qui servent le parcours et le simulateur : ils s ajoutent, sous leur propre
   prefixe, le temps que les trois ecrans soient passes a la maquette.        */
:root {
  --cp-encre:      #111315;
  --cp-anthracite: #22262A;
  --cp-gris:       #383D42;
  --cp-jaune:      #E6FF12;
  --cp-creme:      #F7F6F1;
  --cp-blanc:      #FFFFFF;
  --cp-titre:      #111315;
  --cp-txt:        #3A3D40;
  --cp-leg:        #6E7075;
  --cp-filet:      #E4E2DA;
  --cp-filet-fort: #CFCCC1;
  --cp-vert-vif:   #2FA84F;   /* la pastille « en ce moment » */
}

/* ── LA BANQUE DE PICTOGRAMMES ───────────────────────────────────────────
   Le bloc de definitions ne doit rien occuper : sans cette regle il pousse
   la page de sa hauteur par defaut, et l on cherche d ou vient le blanc.   */
.cp-defs { position:absolute; width:0; height:0; overflow:hidden; }

/* ══ LES BOUTONS — regle d alignement commune ═══════════════════════════
   ⚠️ LES QUATRE POINTS EXIGES, ET COMMENT ILS SONT TENUS :
     centre horizontal et vertical   inline-flex + center/center
     meme hauteur cote a cote        une HAUTEUR fixe, pas un padding vertical
     meme air a gauche et a droite   un padding horizontal unique
     picto sur la ligne du texte     align-items:center sur la meme ligne
   Un bouton dont la hauteur vient d un padding grandit des que son texte
   passe sur deux lignes : deux boutons voisins n ont alors plus la meme
   hauteur, et c est exactement le defaut releve.                            */
.cp-bp, .cp-bs {
  font:inherit; border:0; cursor:pointer; text-decoration:none;
  display:inline-flex; align-items:center; justify-content:center; gap:11px;
  height:56px; padding:0 28px; border-radius:11px; line-height:1.2;
  text-align:center; white-space:nowrap;
}
.cp-bp { font-size:16px; font-weight:700; background:var(--cp-jaune); color:var(--cp-encre); }
.cp-bs { font-size:15px; font-weight:600; background:var(--cp-creme); color:var(--cp-encre);
         box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); }
.cp-bp:hover { background:#D9F00E; }
.cp-bs:hover { box-shadow:inset 0 0 0 1.5px var(--cp-encre); }
.cp-bp svg, .cp-bs svg { width:18px; height:18px; flex:none; }
.cp-boutons { display:flex; gap:11px; flex-wrap:wrap; }

/* ══ LES TUILES — une seule famille, partagee par l accueil et le parcours ══
   ⚠️ TROIS REGLES D ALIGNEMENT, ET AUCUNE N EST DECORATIVE :
   1. `grid-auto-rows:1fr` + `height:100%` : toutes les tuiles d une rangee
      ont la meme hauteur, meme quand l une porte deux fois plus de texte.
   2. `min-height` sur le titre : la place du titre est RESERVEE au nombre de
      lignes reglable. Le libelle qui suit demarre donc a la meme distance du
      haut dans toutes les tuiles -- c est le defaut que Gerard voyait quand
      un nom tenait sur une ligne et son voisin sur deux.
   3. un `padding` unique : le picto, le titre et le libelle demarrent tous
      a la meme distance du bord.                                            */
.cp-grille { display:grid; gap:var(--sd-tuile-ecart, 2px); grid-auto-rows:1fr; min-width:0; }
.cp-grille > * { min-width:0; }
.cp-g4 { grid-template-columns:repeat(4,1fr); }
.cp-g3 { grid-template-columns:repeat(3,1fr); }
.cp-g2 { grid-template-columns:repeat(2,1fr); }

.cp-tuile {
  position:relative; display:block; width:100%; height:100%;
  font:inherit; color:inherit; border:0; cursor:pointer; text-decoration:none;
  background:var(--cp-blanc); border-radius:var(--sd-tuile-rayon, 10px);
  padding:var(--sd-tuile-hauteur, 30px) 17px;
  box-shadow:inset 0 0 0 1px var(--cp-filet);
  text-align:left;                      /* cale a gauche, jamais justifie */
  transition:transform .13s, box-shadow .13s;
}
.cp-tuile:hover { transform:translateY(-3px); box-shadow:inset 0 0 0 1.5px var(--cp-encre); }
.cp-tuile::before { content:""; position:absolute; left:0; top:13px; bottom:13px; width:3px;
  border-radius:0 3px 3px 0; background:transparent; transition:background .13s; }
.cp-tuile:hover::before { background:var(--cp-jaune); }
.cp-tuile.cp-on { background:var(--tu-fond-on); box-shadow:none; }
.cp-tuile.cp-on::before { background:var(--cp-jaune); }
.cp-tuile > svg { width:var(--sd-tuile-picto, 48px); height:var(--sd-tuile-picto, 48px);
  color:var(--cp-gris); display:block; margin-bottom:10px; }
.cp-tuile.cp-on > svg { color:var(--cp-jaune); }
.cp-tuile b { display:-webkit-box; -webkit-box-orient:vertical; overflow:hidden;
  -webkit-line-clamp:var(--cp-lignes, 3); line-clamp:var(--cp-lignes, 3);
  min-height:calc(var(--cp-lignes, 3) * 1.25em);
  font-size:14.5px; font-weight:600; color:var(--cp-titre); margin-bottom:3px; line-height:1.25; }
.cp-tuile.cp-on b { color:#fff; }
.cp-tuile span { font-size:12px; color:var(--cp-leg); display:block; line-height:1.4; }
.cp-tuile.cp-on span { color:#A9B0B6; }

/* Le nombre de lignes reservees differe selon le niveau du catalogue. */
.cp-niveau-famille { --cp-lignes: var(--sd-tuile-lignes-famille, 3); }
.cp-niveau-sous    { --cp-lignes: var(--sd-tuile-lignes-sous, 4); }

/* ══ LE CADRE DE L ECRAN ══════════════════════════════════════════════════
   Recopie de « .cadre » et « .site » de la maquette : le site est une CARTE
   posee sur un fond sombre, avec de l air autour et des coins arrondis.

   ⚠️ CE FOND SOMBRE N EST PAS UN ARTIFICE DE MAQUETTAGE. Je l avais pris
   pour le decor de l outil et j avais refuse de le recopier : c etait une
   erreur de jugement. #3D4857 est le cadre de l ecran de la charte.

   ⚠️ LA LARGEUR DU CADRE SE DEDUIT, elle ne se regle pas. La maquette pose
   1264 pour le cadre et 22 d epaisseur : le site fait donc 1220, qui est
   deja « contenu_largeur ». Deux reglages pour une seule mesure finiraient
   par se contredire.                                                        */
.cp-fond { background:var(--sd-page-fond, #14171A); margin:0; }
/*  La carte tient la hauteur : sur une page courte, elle descend quand meme
    jusqu au bas de la fenetre, et le fond sombre ne reparait pas dessous.  */
.cp-cadre { min-height:calc(100vh - 2 * var(--sd-cadre-marge, 24px)); }
.cp-cadre {
  /*  ⚠️ min-width:0 — LA CAUSE, PAS UN PANSEMENT. Le cadre est un enfant
      de <body>, qui est en flex. Un element de flex vaut min-width:auto
      par defaut : il refuse de descendre sous la largeur MINIMALE de son
      contenu. Or le bandeau du bas est en « nowrap » -- son minimum est
      la longueur de sa phrase. Sur un telephone de 390 pixels, le cadre
      se posait donc a 616 et TOUTE la page debordait. Mesure du 07/09 :
      616 au depart, 390 des que le bandeau est masque. Avec min-width:0,
      le cadre suit la fenetre et le bandeau defile chez lui, comme le
      veut son overflow-x:auto.  */
  min-width:0;
  max-width:calc(var(--sd-contenu-largeur, 1220px) + 2 * var(--sd-cadre-air, 22px));
  margin:var(--sd-cadre-marge, 24px) auto;
  padding:var(--sd-cadre-air, 22px);
  background:var(--sd-cadre-fond, #3D4857);
  border-radius:var(--sd-cadre-rayon, 20px);
}
.cp-site { background:var(--cp-creme); border-radius:var(--sd-site-rayon, 12px);
  overflow:hidden; }

/*  ⚠️ LA GOUTTIERE SE MESURE MAINTENANT DANS LE SITE, PAS DANS LA FENETRE.
    Les bandes vivent a l interieur de la carte : leur largeur est celle du
    site, deja bornee. Il ne reste donc que l air interieur des sections --
    garder l ancien calcul y ajouterait une seconde gouttiere, et le texte
    se retrouverait deux fois plus loin du bord qu il ne doit.               */

/* ══════════════════════════════════════════════════════════════════════════
   L ACCUEIL
   ══════════════════════════════════════════════════════════════════════════ */
.ac-page {
  /* ⚠️ LA GOUTTIERE — LA SEULE REGLE DE LARGEUR DU SITE.
     Chaque bande garde son fond d un bord a l autre de l ecran ; c est le
     CONTENU qui est borne et centre. La gouttiere vaut la moitie de ce qui
     depasse la largeur maximale -- donc EXACTEMENT la meme a gauche et a
     droite -- et jamais moins que l air minimal des sections.
     Le pourcentage se resout sur la bande qui l emploie, pas sur .ac-page :
     les deux font la largeur de la fenetre, le calcul est le meme. */
  --ac-gouttiere: var(--sd-section-air, 32px);
  background:var(--cp-creme); color:var(--cp-txt);
  font-family:"Segoe UI", system-ui, -apple-system, sans-serif;
  font-size:15px; line-height:1.55; }
.ac-page h1, .ac-page h2, .ac-page h3 { font-family:inherit; }

/* ── LA BARRE DU HAUT ─────────────────────────────────────────────────── */
.ac-top { background:var(--cp-blanc); border-bottom:1px solid var(--cp-filet);
  display:flex; align-items:center; gap:20px; padding:15px var(--ac-gouttiere);
  position:sticky; top:0; z-index:60; }
.ac-marque { display:flex; align-items:center; gap:10px; flex:none;
  text-decoration:none; color:inherit; }
.ac-marque > svg { width:30px; height:30px; color:var(--cp-encre); flex:none; }
/*  ⚠️ CORRIGE — la marque heritait du gras par defaut du navigateur (900),
    ce qui faisait CINQ graisses sur l ecran. La regle est de trois au plus :
    400 normal, 600 demi-gras pour les titres, 700 gras pour le seul geste
    principal. La marque est un titre.                                     */
.ac-marque b { font-size:16.5px; letter-spacing:.4px; color:var(--cp-encre);
  display:block; line-height:1.1; font-weight:600; }
.ac-marque span { font-size:9.5px; letter-spacing:1.4px; color:var(--cp-leg); font-weight:600; }
.ac-nav { display:flex; gap:2px; flex:1; }
/*  CORRIGE — la maquette met le menu a 500. Cinquieme graisse sur l ecran ;
    un lien de menu n est ni un titre ni un geste : il passe en normal.     */
.ac-nav a { font-size:13.5px; color:var(--cp-txt); padding:10px 12px 12px;
  font-weight:400; white-space:nowrap; position:relative; text-decoration:none; }
.ac-nav a::after { content:""; position:absolute; left:12px; right:12px; bottom:4px; height:3px;
  border-radius:2px; background:var(--cp-jaune); transform:scaleX(0);
  transform-origin:center; transition:transform .18s ease; }
.ac-nav a:hover { color:var(--cp-titre); }
.ac-nav a:hover::after { transform:scaleX(1); }
.ac-bhaut { font:inherit; font-size:13px; font-weight:600; border:0; cursor:pointer;
  height:40px; padding:0 16px; border-radius:9px; background:var(--cp-encre);
  color:var(--cp-jaune); flex:none; display:inline-flex; align-items:center;
  justify-content:center; text-decoration:none; }

/* ── LES SECTIONS ─────────────────────────────────────────────────────── */
.ac-sec { padding:54px var(--ac-gouttiere); scroll-margin-top:70px; }
.ac-sec.ac-clair  { background:var(--cp-blanc); }
.ac-sec.ac-creme  { background:var(--cp-creme); }
.ac-sec.ac-sombre { background:var(--cp-anthracite); color:#DDE1E4; }
.ac-chapeau { font-size:11px; letter-spacing:1.6px; font-weight:700; color:var(--cp-leg);
  margin:0 0 10px; text-transform:uppercase; }
.ac-sec.ac-sombre .ac-chapeau { color:var(--cp-jaune); }
.ac-page h2 { margin:0 0 10px; font-size:30px; line-height:1.15; letter-spacing:-.8px;
  color:var(--cp-titre); font-weight:600; }
.ac-sec.ac-sombre h2 { color:#fff; }
.ac-intro { margin:0 0 28px; font-size:15.5px; color:var(--cp-leg); max-width:62ch; }
.ac-sec.ac-sombre .ac-intro { color:#A9B0B6; }

/* ── LE BANDEAU PHOTO ─────────────────────────────────────────────────────
   ⚠️ LE CADRAGE SE FAIT EN `background-size` + `background-position`, et non
   par des calculs de decalage. « 106% 169% » dit exactement de combien la
   photo depasse son cadre ; « 0% 0% » dit quelle partie reste visible. Les
   quatre reglages de l ecran d administration s y posent tels quels.        */
.ac-hero { position:relative; overflow:hidden; }
/*  ⚠️ LA PHOTO NE SE DEFORME PLUS — mecanique recopiee de la maquette.
    J avais agrandi l IMAGE (background-size: 106% 169%) : elle s etirait,
    et un visage devenait large. La maquette agrandit la BOITE, et l image y
    entre en « cover » : elle garde son rapport, et c est le CADRAGE qui
    choisit la partie visible.
      boite  largeur = 100% x largeur reglee, hauteur = 100% x hauteur reglee
      image  center / cover no-repeat
      gauche = (1 - largeur reglee) x horizontal x 100%
      haut   = (1 - hauteur reglee) x vertical   x 100%
    Les pourcentages du reglage se divisent par 100 pour redevenir des
    facteurs -- « 106% » veut dire « 1,06 fois la boite ».                  */
.ac-hero { --ac-imgL: var(--sd-photo-bandeau-largeur-f, 1.06);
           --ac-imgZ: var(--sd-photo-bandeau-hauteur-f, 1.69);
           --ac-imgX: var(--sd-photo-bandeau-x-f, 0);
           --ac-imgY: var(--sd-photo-bandeau-y-f, 0); }
.ac-hero-cadre { position:absolute; inset:0; overflow:hidden; background:#2B3035; }
.ac-hero-fond { position:absolute; display:block; background:#2B3035 center/cover no-repeat;
  background-image:var(--sd-photo-bandeau-fichier, none);
  width:calc(100% * var(--ac-imgL));
  height:calc(100% * var(--ac-imgZ));
  left:calc((1 - var(--ac-imgL)) * var(--ac-imgX) * 100%);
  top:calc((1 - var(--ac-imgZ)) * var(--ac-imgY) * 100%); }
.ac-hero-voile { position:absolute; inset:0; background:linear-gradient(92deg,
  rgba(9,11,13,calc(var(--sd-photo-bandeau-voile, 0) + .3))  0%,
  rgba(9,11,13,calc(var(--sd-photo-bandeau-voile, 0) + .12)) 52%,
  rgba(9,11,13,calc(var(--sd-photo-bandeau-voile, 0) + .02)) 100%); }
/*  ── LA HAUTEUR DU BANDEAU, ADMINISTRABLE ─────────────────────────────────
    Maquette v2 : « --hero-h:330px » sur ordinateur, « --hero-h-tel:400px »
    sur telephone. Notre bandeau n avait AUCUNE hauteur : elle sortait de
    l air interieur de son contenu -- mesure du 06/09 sur telephone :
    164,7 px pour 400 demandes, d ou la photo « trop plate ».
    ⚠️ « min-height », PAS « height » : un titre plus long qu aujourd hui
    doit pouvoir pousser le bandeau plutot que d en sortir.              */
.ac-hero { min-height:var(--sd-hero-hauteur, 330px); }
.ac-hero-in { min-height:var(--sd-hero-hauteur, 330px);
  display:flex; flex-direction:column; justify-content:center; }
/* ⚠️ LE TITRE EST CAPE A 760px, PAS LA BOITE. Avec box-sizing:border-box, un
   max-width pose sur la boite aurait AVALE la gouttiere : sur un grand ecran
   le titre aurait retreci a mesure que la gouttiere grandissait. */
.ac-hero-in { position:relative; padding:76px var(--ac-gouttiere) 72px; }
.ac-hero-in > * { max-width:760px; }
.ac-pastille { display:inline-flex; align-items:center; font-size:10.5px; font-weight:700;
  letter-spacing:1.4px; color:#fff; margin-bottom:16px; padding-left:11px;
  border-left:3px solid var(--cp-jaune); text-transform:uppercase; }
.ac-hero h1 { margin:0; font-size:50px; line-height:1.06; letter-spacing:-1.7px;
  color:#fff; font-weight:700; }
.ac-hero h1 em { font-style:normal; color:var(--cp-jaune); }

/* ── LE BLOC D ACTION ─────────────────────────────────────────────────── */
.ac-action { background:var(--cp-blanc); display:grid; grid-template-columns:1.05fr 1fr;
  gap:40px; padding:34px var(--ac-gouttiere) 36px; border-bottom:1px solid var(--cp-filet); }
.ac-action.ac-seul { grid-template-columns:1fr; }
.ac-action-t { display:flex; align-items:center; gap:13px; flex-wrap:wrap; margin-bottom:20px; }
.ac-action-t b { font-size:20px; color:var(--cp-titre); letter-spacing:-.4px; font-weight:600; }
.ac-action-t span { display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--cp-leg); }
.ac-action-t svg { width:16px; height:16px; }
.ac-secu { display:flex; align-items:flex-start; gap:9px;
  margin:var(--sd-bouton-dessous, 22px) 0 0; font-size:12.5px; color:var(--cp-leg); }
.ac-secu svg { width:15px; height:15px; flex:none; margin-top:2px; }

/* ── LES DEMANDES RECENTES ────────────────────────────────────────────── */
.ac-dem-l { font-size:10.5px; letter-spacing:1.5px; font-weight:700; color:var(--cp-leg);
  margin-bottom:14px; display:flex; align-items:center; gap:7px; }
.ac-dem-l i { width:7px; height:7px; border-radius:50%; background:var(--cp-vert-vif); }
.ac-dem-ligne { display:flex; align-items:center; gap:13px; padding:11px 0;
  border-top:1px solid var(--cp-filet); }
.ac-dem-ligne:first-of-type { border-top:0; }
.ac-dem-ligne svg { width:24px; height:24px; flex:none; color:var(--cp-gris); }
.ac-dem-ligne b { display:block; font-size:14.5px; color:var(--cp-titre); font-weight:600; }
.ac-dem-ligne small { font-size:12.5px; color:var(--cp-leg); }
.ac-dem-pied { margin-top:12px; padding-top:11px; border-top:1px solid var(--cp-filet);
  font-size:12.5px; color:var(--cp-leg); }

/* ── LES SOURCES OFFICIELLES ──────────────────────────────────────────── */
.ac-srcs { background:var(--cp-blanc); border-bottom:1px solid var(--cp-filet);
  padding:15px var(--ac-gouttiere); display:flex; align-items:center; gap:15px; flex-wrap:wrap; }
.ac-srcs-l { display:flex; align-items:center; gap:9px; font-size:12.5px; color:var(--cp-leg); }
.ac-drapeau { width:20px; height:14px; border-radius:2px; overflow:hidden; display:flex; flex:none; }
.ac-drapeau i { flex:1; }
.ac-drapeau i:nth-child(1) { background:#000091; }
.ac-drapeau i:nth-child(2) { background:#fff; box-shadow:inset 0 0 0 1px #EEE; }
.ac-drapeau i:nth-child(3) { background:#E1000F; }
.ac-srcs-p { display:flex; gap:7px; flex-wrap:wrap; }
.ac-srcs-p span { font-size:12px; color:var(--cp-txt); background:var(--cp-creme);
  padding:6px 12px; border-radius:15px; }

/* ── LES QUATRE CHIFFRES ──────────────────────────────────────────────── */
/* ⚠️ CORRIGE — la maquette fait demarrer le premier chiffre a 22px du bord
   quand tout le reste demarre a 32 : les deux cellules des extremites
   perdent leur retrait, le premier chiffre tombe alors sur la meme
   verticale que les titres et le dernier finit sur la meme a droite. */
.ac-chiffres { display:grid; grid-template-columns:repeat(4,1fr);
  background:var(--cp-encre); color:#fff; padding-inline:var(--ac-gouttiere); }
.ac-chiffre:first-child { padding-left:0; }
.ac-chiffre:last-child  { padding-right:0; }
.ac-chiffre { padding:24px 22px; border-left:1px solid #2A2E32; }
.ac-chiffre:first-child { border-left:0; }
.ac-chiffre b { display:block; font-size:28px; font-weight:700; letter-spacing:-1px;
  color:var(--cp-jaune); }
.ac-chiffre span { font-size:12.5px; color:#9BA1A7; display:block; margin-top:3px; }

/* ── COMMENT CA MARCHE ────────────────────────────────────────────────────
   Le nombre de colonnes suit le nombre d etapes REELLEMENT en base. La
   maquette en dessine quatre ; le registre en porte trois. Un `repeat(4,1fr)`
   fige aurait laisse un trou a droite.                                      */
.ac-etapes { display:grid; grid-template-columns:repeat(var(--ac-nb-etapes, 4), 1fr); }
.ac-etape { padding:0 22px; border-left:1px solid var(--cp-filet); }
.ac-etape:first-child { padding-left:0; border-left:0; }
.ac-etape .ac-n { font-size:32px; font-weight:700; letter-spacing:-1.5px;
  color:var(--cp-filet-fort); line-height:1; margin-bottom:9px; }
.ac-etape svg { width:26px; height:26px; color:var(--cp-gris); margin-bottom:9px; display:block; }
.ac-etape b { display:block; font-size:15.5px; color:var(--cp-titre); margin-bottom:5px; font-weight:600; }
.ac-etape p { margin:0; font-size:13.5px; }

/* ── QUI SOMMES-NOUS ──────────────────────────────────────────────────── */
.ac-deuxc { display:grid; grid-template-columns:1fr 1fr; gap:44px; align-items:center; }
.ac-deuxc p { font-size:15px; margin:0 0 13px; }
/*  Meme mecanique, meme raison : la boite grandit, l image garde son rapport. */
.ac-photo2 { position:relative; height:310px; border-radius:14px; overflow:hidden;
  background:#2B3035;
  --ac-img2L: var(--sd-photo-qui-largeur-f, 1.25);
  --ac-img2Z: var(--sd-photo-qui-hauteur-f, 1.25);
  --ac-img2X: var(--sd-photo-qui-x-f, 0);
  --ac-img2Y: var(--sd-photo-qui-y-f, 0.5); }
.ac-photo2 > i { position:absolute; display:block; background:#2B3035 center/cover no-repeat;
  background-image:var(--sd-photo-qui-fichier, none);
  width:calc(100% * var(--ac-img2L));
  height:calc(100% * var(--ac-img2Z));
  left:calc((1 - var(--ac-img2L)) * var(--ac-img2X) * 100%);
  top:calc((1 - var(--ac-img2Z)) * var(--ac-img2Y) * 100%); }

/* ── CE QUI NOUS DISTINGUE ────────────────────────────────────────────── */
.ac-av { padding:16px 0; border-top:1px solid var(--cp-filet); display:grid;
  grid-template-columns:31px 1fr; column-gap:14px; }
.ac-av svg { width:24px; height:24px; color:var(--cp-gris); margin-top:1px; }
.ac-av b { display:block; font-size:15px; color:var(--cp-titre); margin-bottom:3px; font-weight:600; }
.ac-av p { margin:0; font-size:13.5px; }
.ac-sec.ac-sombre .ac-av { border-top-color:#33383D; }
.ac-sec.ac-sombre .ac-av svg { color:var(--cp-jaune); }
.ac-sec.ac-sombre .ac-av b { color:#fff; }
.ac-sec.ac-sombre .ac-av p { color:#A9B0B6; }
.ac-deux-colonnes { display:grid; grid-template-columns:1fr 1fr; gap:0 42px; }

/* ── LES AIDES ────────────────────────────────────────────────────────── */
.ac-aide { display:grid; grid-template-columns:40px 1fr auto; gap:15px; align-items:center;
  background:var(--cp-blanc); border-radius:var(--sd-tuile-rayon, 10px); padding:16px 19px;
  margin-bottom:10px; box-shadow:inset 0 0 0 1px var(--cp-filet); }
.ac-aide.ac-sans-montant { grid-template-columns:40px 1fr; }
.ac-aide svg { width:28px; height:28px; color:var(--cp-gris); }
.ac-aide b { display:block; font-size:14.5px; color:var(--cp-titre); font-weight:600; }
.ac-aide span { font-size:12.5px; color:var(--cp-leg); }
.ac-aide .ac-montant { font-size:17px; font-weight:700; color:var(--cp-titre); white-space:nowrap; }

/* ── LES QUESTIONS FREQUENTES ─────────────────────────────────────────── */
.ac-qa { padding:16px 0; border-top:1px solid var(--cp-filet); }
.ac-qa b { display:block; font-size:15px; color:var(--cp-titre); margin-bottom:4px; font-weight:600; }
.ac-qa p { margin:0; font-size:13.5px; }
.ac-largeur-lecture { max-width:74ch; }
.ac-apres-qa { margin-top:24px; }

/* ── LE BANDEAU DU BAS ────────────────────────────────────────────────── */
.ac-bande { background:var(--cp-blanc); border-top:1px solid var(--cp-filet);
  padding:12px var(--ac-gouttiere); display:flex; font-size:12.5px; color:var(--cp-leg);
  overflow-x:auto; white-space:nowrap; }
.ac-bande span { padding:0 17px; border-left:1px solid var(--cp-filet); }
.ac-bande span:first-child { border-left:0; padding-left:0; color:var(--cp-titre);
  font-weight:600; display:flex; align-items:center; gap:7px; }
.ac-bande span:first-child i { width:7px; height:7px; border-radius:50%; background:var(--cp-jaune); }

/* ── LES QUATRE COLONNES DU PIED ──────────────────────────────────────── */
.ac-pied { background:var(--cp-encre); color:#8E959B; padding:36px var(--ac-gouttiere) 24px; font-size:13px; }
.ac-pied-cols { display:grid; grid-template-columns:1.4fr 1fr 1fr 1fr; gap:24px; }
.ac-pied h4 { font-size:10.5px; letter-spacing:1.3px; color:#fff; margin:0 0 9px; font-weight:700; }
.ac-pied p { margin:0; line-height:1.7; }
.ac-pied a { display:block; color:#8E959B; padding:3px 0; text-decoration:none; }
.ac-pied a:hover { color:#fff; }

/* ── CE QUI NE PARAIT QUE SUR UN APPAREIL ────────────────────────────────
   Les chiffres de volume se reglent separement pour l ordinateur et pour le
   telephone. Le serveur ne connaissant pas la largeur de l ecran, les deux
   etats sont ecrits dans la page et c est une requete de media qui tranche.
   `!important` est assume ici : ces deux classes n ont pas d autre role que
   de masquer, et elles doivent gagner sur le `display` de l element.        */
@media (min-width:761px) { .ac-si-tel  { display:none !important; } }
@media (max-width:760px) { .ac-si-ordi { display:none !important; } }

/* ══ LE TELEPHONE ════════════════════════════════════════════════════════ */
@media (max-width:760px) {
  .ac-top { padding:12px var(--ac-gouttiere); gap:9px; }
  .ac-nav { display:none; }
  .ac-bhaut { padding:0 11px; font-size:11.5px; height:36px; }
  .ac-sec { padding:28px var(--ac-gouttiere); }
  .ac-page h2 { font-size:22px; }
  .ac-hero-in { padding:34px var(--ac-gouttiere) 32px; }
  .ac-hero-in > * { max-width:none; }
  .ac-hero h1 { font-size:29px; letter-spacing:-.9px; }
  .ac-hero-voile { background:linear-gradient(180deg,
    rgba(9,11,13,calc(var(--sd-photo-bandeau-voile, 0) + .15)) 0%,
    rgba(9,11,13,var(--sd-photo-bandeau-voile, 0))             55%,
    rgba(9,11,13,calc(var(--sd-photo-bandeau-voile, 0) + .2))  100%); }
  .ac-action, .ac-action.ac-seul { grid-template-columns:1fr; gap:26px; padding:24px var(--ac-gouttiere); }
  .ac-srcs { padding:13px var(--ac-gouttiere); gap:9px; }
  .ac-chiffres { grid-template-columns:1fr 1fr; }
  .ac-chiffre { padding:18px 16px; }
  .ac-chiffre:nth-child(odd)  { border-left:0; padding-left:0; }
  .ac-chiffre:nth-child(even) { padding-right:0; }
  .ac-chiffre:nth-child(n+3) { border-top:1px solid #2A2E32; }
  .ac-chiffre b { font-size:22px; }
  .ac-etapes { grid-template-columns:1fr; gap:18px; }
  .ac-etape { padding:0; border-left:0; }
  .ac-deuxc { grid-template-columns:1fr; gap:22px; }
  .ac-photo2 { height:200px; }
  .ac-deux-colonnes { grid-template-columns:1fr; gap:0; }
  .ac-aide { grid-template-columns:32px 1fr; gap:11px; }
  .ac-aide .ac-montant { grid-column:2; font-size:15px; }
  .ac-bande { padding:10px var(--ac-gouttiere); }
  .ac-pied { padding:24px var(--ac-gouttiere) 18px; }
  .ac-pied-cols { grid-template-columns:1fr 1fr; gap:18px; }
  .cp-g4, .cp-g3 { grid-template-columns:1fr 1fr; }
  .cp-g2 { grid-template-columns:1fr; }
  .cp-tuile { padding:calc(var(--sd-tuile-hauteur, 30px) * .7) 12px; }
  .cp-tuile b { font-size:13px; }
  .cp-tuile span { font-size:11px; }
  .cp-bp, .cp-bs { width:100%; }
}

/* Le nombre d etapes, pose en classe plutot qu en attribut style : la page
   n en porte aucun. Six suffisent -- au-dela, la ligne serait illisible. */
.ac-nb-1{--ac-nb-etapes:1}.ac-nb-2{--ac-nb-etapes:2}.ac-nb-3{--ac-nb-etapes:3}
.ac-nb-4{--ac-nb-etapes:4}.ac-nb-5{--ac-nb-etapes:5}.ac-nb-6{--ac-nb-etapes:6}


/* ══════════════════════════════════════════════════════════════════════════
   LE PARCOURS DE DEVIS — feuille sortie de resources/views/lead-form.php
   le 04/09/2026, telle quelle, dans son ordre d origine.

   ⚠️ POURQUOI ELLE EST ICI. Elle vivait DANS la page, donc APRES ce fichier
   dans le document : toute regle ecrite ici perdait contre elle, en silence.
   Impossible d habiller le parcours depuis la feuille commune tant qu elle
   y restait.

   ⚠️ CE QUI N EST PAS VENU : le bloc :root des neuf reglages. Il est
   fabrique par PHP (env_setting) et ne peut pas vivre dans un fichier
   statique. Il est publie par le gabarit, a cote des --sd-*.

   ⚠️ TOUS SES SELECTEURS SONT DEJA PREFIXES .wiz- / .s1- / .qs- ou portent
   un identifiant du parcours. Verifie avant le deplacement : les huit
   jetons de :root qu elle definit (--field-border, --field-panel,
   --qs-input-border, --wiz-recap-bg, --wiz-rail-bg, --wiz-fond-mobile,
   --wiz-tuile-trait, --completude-*) ne sont lus par AUCUN autre ecran.
   ══════════════════════════════════════════════════════════════════════════ */
  /* SEQ146 — jeton DEDIE au contour des champs de saisie (nom, prenom, adresse, CP, tel, e-mail, ville).
     #8F8B83 = 3,39:1 sur blanc (seuil WCAG 3:1). NE PAS confondre avec --border (partage : cartes,
     separateurs, tuiles) : le foncer repeindrait tout le parcours. */
  :root { --field-border: #8F8B83; }
  /* seq 1 — contour DEDIE des champs texte du questionnaire (.wiz-qual-input, defile etape 2). Plus
     fonce que --field-border pour ressortir FRANCHEMENT du premier coup d'oeil. Le champ du defile est
     sur fond BLANC (mesure sur staging : #FFFFFF en mobile ET ordinateur ; le beige --field-panel ne
     concerne que les etapes 3/4, qui n'utilisent pas cette classe). #6F6A62 = 5,4:1 sur blanc et
     4,8:1 sur le beige --field-panel -> largement au-dessus du seuil 3:1 sur les deux fonds. */
  :root { --qs-input-border: #6F6A62; }
  /* SEQ149 — panneau clair (sable) sous le GROUPE de champs de l'etape 3. Jeton DEDIE ;
     meme sable que la page/simulateur (#F4F2EC), pas une couleur inventee. Les champs restent BLANCS. */
  :root { --field-panel: #F4F2EC; }
  /* seq2 — fond DEDIE de l'ecran "Verifiez vos coordonnees" (etape 4). Un ton plus soutenu que
     --lvl1 (#F2F4F5) pour que les cadres BLANCS ressortent nettement, sans toucher a --lvl1 (qui
     sert de fond de page a l'accueil). Contraste du texte gris secondaire (--text-muted #5C6166)
     sur ce fond : ~5,1:1 (lisible). Blancs sur ce fond : nette demarcation. */
  :root { --wiz-recap-bg: #E4E9EB; }
  /* seq1 — gris du recap ENCORE plus soutenu, ORDINATEUR SEULEMENT : le mobile conserve la valeur
     globale ci-dessus (#E4E9EB, inchange). Contraste texte gris secondaire (--text-muted #5C6166) sur
     #D9DFE2 = ~4,6:1 (>= 4,5) ; blanc sur ce fond = ~1,35 de rapport (nette demarcation). */
  @media (min-width:1024px){ :root { --wiz-recap-bg: #D9DFE2; } }
  /* seq3 — fond DEDIE de la colonne de gauche du parcours : vert sauge DESATURE et MAT, plus soutenu
     et moins vif que --accent (que l'on ne modifie pas, il sert ailleurs). Valeur retenue = la plus
     soutenue qui garde le texte en place (--rail-text #5D6670) a >= 4,5:1 : #DFE6DA -> ~4,58:1.
     (Un vert plus foncé tomberait sous 4,5:1 avec ce texte ; couleur du texte NON modifiee.) */
  /*  P6 24/08/2026 — LE RAIL PASSE AU BLANC.  */
  :root { --wiz-rail-bg: #FFFFFF; }

    /* N1 (04/08) — fond de page du parcours sur TELEPHONE (sous 1024px) : le degrade de bureau
     n'existe pas, les tuiles blanches se posaient sur le blanc du body. Jeton dedie. */
  :root { --wiz-fond-mobile: #F5F5F5; }
  /* N1 — trait des tuiles de secteur (ex rgba(48,56,59,.16) en dur, presque invisible) : jeton, plus marque. */
  :root { --wiz-tuile-trait: rgba(48,56,59,.28); }
  .wiz-wrap { max-width: 640px; margin: 0 auto; padding: 2.5rem 1.25rem 2.5rem; background: #FFFFFF; }
  /* Grand cadre : APLAT UNI gris clair (token --lvl2, un cran plus clair que --lvl3), AUCUNE bordure
     ni lisere ; delimitation par l'aplat + ombre courte seule. */
  .wiz-card { background: var(--lvl1); border-radius: var(--card-radius); padding: 24px; border: 0; box-shadow: 0 1px 2px rgba(20,25,30,.08); }
  @media (max-width: 480px) { .wiz-card { padding: 16px; border-radius: 12px; } }

  .wiz-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 2rem; }
  .wiz-logo { display: flex; align-items: center; gap: .5rem; text-decoration: none; }
  .wiz-logo-img { width: 32px; height: 32px; object-fit: contain; display: block; }
  .wiz-logo-text { font-family: var(--font-display); font-weight: 700; font-size: 1rem; }
  .wiz-back { font-family: var(--font-mono); font-size: .78rem; color: var(--text-muted); text-decoration: none; }
  .wiz-back:hover { color: var(--text-primary); }
  /* Colonne de navigation laterale : masquee par defaut, donc totalement
     absente du rendu mobile. Elle n'apparait qu'au-dessus de 1024px. */
  .wiz-sidenav { display: none; }

  .wiz-progress { height: 5px; background: var(--border); border-radius: 999px; overflow: hidden; margin-bottom: 2.5rem; }
  .wiz-progress-bar { height: 100%; background: var(--cta-bg); border-radius: 999px; width: 20%; transition: width .35s ease; }

  .wiz-step { display: none; }
  .wiz-step.active { display: block; animation: wizFadeIn .3s ease; }
  @keyframes wizFadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

  .wiz-step h2 { font-size: 1.5rem; margin-bottom: .5rem; color: var(--accent-dark); }
  .wiz-step-hint { color: var(--text-muted); font-size: .92rem; margin-bottom: 1.75rem; }
  /* Conteneur du bandeau d'etape. En dessous de 1024px il est totalement
     transparent a la mise en page : le navigateur se comporte comme s'il
     n'existait pas, donc le rendu mobile est rigoureusement inchange. */
  .wiz-step-head { display: contents; }

  .wiz-family-section { margin-bottom: 1.75rem; }
  .wiz-family-section.wiz-family-hidden { display: none; }
  /* T (14/08) — filtre maison/appartement + ecran d'entree SUPPRIMES : plus de porte copro,
     plus de masquage de socle_logement (redevenue une question ordinaire du defile), plus de
     styles d'ecran d'entree. */
  .wiz-family-label { font-family: var(--font-mono); font-size: .72rem; letter-spacing: .06em; text-transform: uppercase; color: var(--text-muted); margin-bottom: .7rem; font-weight: 600; }
  .wiz-sector-tiles { display: flex; flex-wrap: wrap; gap: .75rem; }
  .wiz-sector-tile {
    position: relative; box-sizing: border-box; z-index: 1;
    flex: 0 0 calc(25% - .57rem); min-width: 90px; aspect-ratio: 1 / 1;
    border-radius: var(--tile-radius); border: 1px solid var(--wiz-tuile-trait);
    cursor: pointer; text-align: center;
    background: var(--tile-bg);
    box-shadow: var(--tile-shadow);
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .55rem;
    padding: .6rem .4rem; transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease;
  }
  .wiz-sector-tile:not(.selected):hover { transform: translateY(-2px); background: var(--tile-hover); border-color: rgba(48,56,59,.32); box-shadow: 0 1px 2px rgba(20,25,30,.08); }
  .wiz-sector-tile-icon-plain { display: flex; align-items: center; justify-content: center; margin-top: -.3rem; width: 52px; height: 52px; }
  .wiz-sector-tile-icon-plain svg { width: var(--picto-size); height: var(--picto-size); stroke: var(--sec-color); fill: none; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
  .wiz-sector-tile-icon-plain img { width: var(--picto-size); height: var(--picto-size); object-fit: contain; }
  .wiz-sector-tile-label { font-size: .74rem; font-weight: 700; color: var(--text-primary); line-height: 1.2; }
  /* 21/07/2026 — selection EPUREE : tuile BLANCHE + fin lisere citron-vert + coche (haut-GAUCHE ici,
     car le badge compteur occupe le haut-droite). Picto/libelle restent fonces. Coche via ::after. */
  /* SEQ3 — selection PAR SECTEUR : couleur pilotee par --sec-color (admin). Bordure 2px + fond
     legerement teinte de cette couleur (color-mix) + coche/badge en --sec-color. Libelle garde
     un texte fonce (#20282b) pour rester lisible quelle que soit la couleur du secteur. */
  .wiz-sector-tile.selected { background: color-mix(in srgb, var(--sec-color) 12%, #ffffff); border: 2px solid var(--sec-color); box-shadow: var(--tile-shadow); }
  .wiz-sector-tile.selected .wiz-sector-tile-label { color: #20282b; }
  .wiz-sector-tile.selected::after { content: '✓'; position: absolute; top: 8px; left: 8px; width: 20px; height: 20px; border-radius: 50%; background: var(--sec-color); color: #fff; font-size: 12px; line-height: 20px; text-align: center; }
  .wiz-sector-tile.wiz-list-open { z-index: 20; }

  .wiz-sector-tile-badge { position: absolute; top: 6px; right: 6px; min-width: 20px; height: 20px; border-radius: 10px; background: var(--cta-bg); display: none; align-items: center; justify-content: center; padding: 0 4px; }
  .wiz-sector-tile.selected .wiz-sector-tile-badge { display: flex; }
  .wiz-badge-check { width: 11px; height: 11px; stroke: var(--cta-text); fill: none; stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; }
  .wiz-badge-count { display: none; font-size: 11px; font-weight: 800; color: var(--cta-text); line-height: 1; }
  .wiz-sector-tile-badge.has-count .wiz-badge-check { display: none; }
  .wiz-sector-tile-badge.has-count .wiz-badge-count { display: inline; }

  .wiz-sector-tile-remove { position: absolute; top: 6px; left: 6px; width: 20px; height: 20px; border-radius: 50%; background: #fff; border: 1.5px solid var(--border); display: none; align-items: center; justify-content: center; cursor: pointer; z-index: 2; }
  .wiz-sector-tile.selected .wiz-sector-tile-remove { display: flex; }
  .wiz-sector-tile-remove:hover { background: #fdf0ee; border-color: #f3c7c0; }
  .wiz-sector-tile-remove svg { width: 11px; height: 11px; stroke: #8B95A1; fill: none; stroke-width: 2.4; stroke-linecap: round; }
  .wiz-sector-tile-remove:hover svg { stroke: #c0392b; }

  @media (max-width: 480px) { .wiz-sector-tile { flex-basis: calc(33.333% - .5rem); } }

  .wiz-modal-overlay { position: fixed; inset: 0; background: rgba(15,23,42,.55); z-index: 200; display: none; padding: 1.25rem; }
  .wiz-modal-overlay.show { display: block; }
  .wiz-activity-sublist { display: none; border: 1.5px solid var(--border); background: #fff; border-radius: 16px; box-shadow: 0 1px 2px rgba(20,25,30,.08); overflow: hidden; }
  .wiz-activity-sublist.wiz-modal-open { display: flex; flex-direction: column; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 210; width: min(360px, calc(100vw - 2.5rem)); max-height: min(480px, 80vh); }
  .wiz-activity-sublist-header { padding: .8rem .95rem; border-bottom: 1px solid var(--border); }
  .wiz-activity-sublist-hint { font-size: .8rem; color: var(--text-muted); font-weight: 600; }
  .wiz-activity-sublist-body { padding: .5rem .95rem; overflow-y: auto; flex: 1; }
  .wiz-activity-option { display: flex; align-items: center; gap: .55rem; padding: .4rem 0; cursor: pointer; font-size: .9rem; }
  .wiz-activity-option input[type=checkbox] { accent-color: var(--sec-color, var(--accent-dark)); width: 18px; height: 18px; cursor: pointer; flex-shrink: 0; }
  .wiz-activity-option span { font-size: .9rem; font-weight: 500; color: var(--text-primary); }
  .wiz-activity-option-dontknow span { font-weight: 500; color: var(--text-muted); font-style: italic; }
  .wiz-activity-option-dontknow input[type=checkbox] { accent-color: var(--text-muted); }
  .wiz-activity-sublist-divider { border-top: 1px solid var(--border); margin: .3rem 0 .45rem; }
  .wiz-activity-sublist-footer { padding: .75rem .95rem; border-top: 1px solid var(--border); display: flex; justify-content: flex-end; }
  .wiz-activity-sublist-footer .wiz-btn-primary { width: auto; }

  .wiz-step1-bar { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-top: 2rem; }
  .wiz-step1-bar-info { font-size: .88rem; font-weight: 600; color: var(--text-primary); }
  .wiz-step1-bar-info strong { color: var(--accent-dark); }

  .wiz-suggestions { position: absolute; top: 100%; left: 0; right: 0; background: #fff; border: 1.5px solid var(--border); border-radius: 9px; margin-top: 4px; max-height: 220px; overflow-y: auto; z-index: 20; box-shadow: 0 1px 2px rgba(20,25,30,.08); }
  .wiz-suggestion-item { padding: .65rem .9rem; font-size: .85rem; cursor: pointer; text-align: left; }
  .wiz-suggestion-item:hover { background: var(--bg-panel); }
  .wiz-suggestion-empty { padding: .65rem .9rem; font-size: .8rem; color: var(--text-muted); text-align: left; font-style: italic; }

  .wiz-link-btn { background: none; border: none; padding: 0; margin-top: .5rem; cursor: pointer; font-family: var(--font-body); font-size: .82rem; font-weight: 700; color: var(--accent-dark); text-decoration: underline; text-underline-offset: 2px; }
  .wiz-link-btn:hover { color: var(--text-primary); }
  .wiz-manual-address { background: transparent; border: 0; border-radius: 12px; padding: 1.1rem 1.1rem .3rem; margin-bottom: 1.25rem; }
  .wiz-manual-address .wiz-hint-inline { color: var(--text-muted); font-size: .8rem; margin: -.5rem 0 .8rem; }

  .wiz-dialog-overlay { position: fixed; inset: 0; background: rgba(31,41,51,.45); z-index: 100; display: none; align-items: center; justify-content: center; padding: 1.25rem; }
  .wiz-dialog-overlay.show { display: flex; }
  .wiz-dialog-box { background: #fff; border-radius: 16px; padding: 1.75rem; max-width: 380px; width: 100%; box-shadow: 0 1px 2px rgba(20,25,30,.08); text-align: center; animation: wizDialogIn .18s ease; }
  @keyframes wizDialogIn { from { opacity: 0; transform: scale(.96); } to { opacity: 1; transform: none; } }
  .wiz-dialog-icon { width: 44px; height: 44px; border-radius: 50%; background: #fdf0ee; margin: 0 auto 1rem; display: flex; align-items: center; justify-content: center; }
  .wiz-dialog-message { font-size: .92rem; color: var(--text-primary); line-height: 1.5; margin-bottom: 1.25rem; }
  .wiz-dialog-ok { font-family: var(--font-body); font-weight: 700; font-size: .9rem; border: 0; cursor: pointer; color: var(--accent-dark); background: var(--lvl0); box-shadow: var(--tile-shadow); padding: .7rem 1.5rem; border-radius: 9px; transition: transform .15s; }
  .wiz-dialog-ok:hover { background: var(--accent); color: var(--text-strong); }
  /* F4 (14/08) — CONFIRMATION DE RETRAIT. Reprend la boite maison du parcours (.wiz-dialog-overlay /
     .wiz-dialog-box) et calque la structure de la modale de suppression de l'admin (.qz-modal :
     titre + texte + deux actions). Charte : pas de bordure, pas de cadre imbrique, pas de relief ;
     jetons EXISTANTS uniquement (aucune valeur en dur). Action foncee = bloc sombre --btn-bg (#383D42),
     texte clair --btn-text ; "Annuler" = aplat clair --lvl3, texte --text-primary. Fort contraste. */
  .wiz-confirm-box { text-align: left; }
  .wiz-confirm-title { font-family: var(--font-display); font-weight: 700; font-size: 1.02rem; color: var(--text-strong); margin: 0 0 .5rem; }
  .wiz-confirm-actions { display: flex; gap: .6rem; justify-content: flex-end; margin-top: 1.2rem; }
  .wiz-confirm-cancel, .wiz-confirm-ok { font-family: var(--font-body); font-weight: 700; font-size: .9rem; border: 0; cursor: pointer; padding: .62rem 1.2rem; border-radius: 9px; transition: transform .15s; }
  .wiz-confirm-cancel { background: var(--lvl3); color: var(--text-primary); }
  .wiz-confirm-ok { background: var(--btn-bg); color: var(--btn-text); }
  .wiz-confirm-cancel:hover, .wiz-confirm-ok:hover { transform: translateY(-1px); }

  .wiz-field { margin-bottom: 1.25rem; }
  .wiz-field label { display: block; font-size: .86rem; font-weight: 700; margin-bottom: .4rem; }
  .wiz-field input[type=text], .wiz-field input[type=email], .wiz-field input[type=tel], .wiz-field textarea, .wiz-field select { width: 100%; padding: .75rem .9rem; border: 1.5px solid var(--field-border); border-radius: 9px; font-family: var(--font-body); font-size: .95rem; color: var(--text-primary); background: #fff; box-sizing: border-box; }
  .wiz-field input[type=text]:focus, .wiz-field input[type=email]:focus, .wiz-field input[type=tel]:focus, .wiz-field textarea:focus, .wiz-field select:focus { outline: none; border-color: var(--cta-bg); box-shadow: 0 0 0 3px rgba(220,188,24,.30); } /* Q 04/08 : bordure + halo au clic en jaune d'action (ex terracotta rgba(180,83,31)) */
  /* SEQ5 — remplissage auto du navigateur : garder le fond BLANC (var(--lvl0)) et le texte lisible
     dans tous les etats. Le box-shadow inset est la seule parade fiable contre le fond bleu pale de
     Chrome ; !important indispensable (le navigateur pose sa teinte avec une priorite qu'un background
     normal ne bat pas). Applique a TOUS les champs (un futur champ pourra etre prerempli). */
  .wiz-field input:-webkit-autofill, .wiz-field input:-webkit-autofill:hover, .wiz-field input:-webkit-autofill:focus, .wiz-field input:-webkit-autofill:active, .wiz-field textarea:-webkit-autofill, .wiz-field select:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px var(--lvl0) inset !important; box-shadow: 0 0 0 1000px var(--lvl0) inset !important; -webkit-text-fill-color: var(--text-primary) !important; caret-color: var(--text-primary); }
  .wiz-field textarea { resize: vertical; min-height: 90px; }
  .wiz-field-row { display: flex; gap: 1rem; }
  .wiz-field-row .wiz-field { flex: 1; }
  .wiz-fill { background: transparent; border-radius: 14px; padding: 1.4rem 1.3rem .35rem; margin-bottom: 1.5rem; }
  .wiz-optional-tag { font-family: var(--font-mono); font-size: .68rem; color: var(--text-muted); font-weight: 400; margin-left: .3rem; opacity: .8; }
  .wiz-qual-intro { background: transparent; border: 0; border-left: 5px solid var(--cta-bg); border-radius: 12px; border-top-left-radius: 0; border-bottom-left-radius: 0; padding: .9rem 1rem; font-size: .86rem; line-height: 1.55; color: var(--text-body); margin-bottom: 1.75rem; }
  /* Masque le bloc d'explication en tete d'etape ("Ces questions sont facultatives...") sans toucher
     au markup ni au texte. Le JS pose style.display='' en mode normal -> retombe sur ce display:none
     (aucun !important necessaire). N'affecte PAS la note du bas #qualContextMsgSim (id different). */
  #qualContextMsg { display: none; }
  .wiz-qual-intro strong { color: var(--text-primary); font-weight: 700; }
  .wiz-qual-field.wiz-qual-missing,
  .wiz-picked.wiz-qual-missing { border-left: 5px solid #c0392b; border-top-left-radius: 0; border-bottom-left-radius: 0; padding-left: .7rem; margin-left: -.7rem; }

  .wiz-radio-group { display: flex; gap: .6rem; flex-wrap: wrap; }
  /* SEQ1 — tuiles blanches a relief net (fini le gris-sur-gris invisible), ZERO bordure */
  .wiz-radio-pill { padding: .7rem 1.25rem; border: 0; border-radius: 999px; cursor: pointer; font-size: .86rem; font-weight: 600; color: var(--accent-dark); background: var(--lvl0); box-shadow: var(--tile-shadow); transition: background .15s, box-shadow .15s; }
  .wiz-radio-pill:hover { background: var(--accent); color: var(--text-strong); box-shadow: 0 2px 6px rgba(30,35,40,.14); }
  .wiz-radio-pill.selected { background: var(--cta-bg); color: var(--cta-text); box-shadow: none; }

  .wiz-actions { display: flex; justify-content: space-between; gap: .9rem; margin-top: 2rem; }
  .wiz-btn-primary { font-family: var(--font-body); font-weight: 700; font-size: .95rem; border: 0; cursor: pointer; color: var(--accent-dark); background: var(--lvl0); box-shadow: var(--tile-shadow); padding: .9rem 1.6rem; border-radius: 10px; transition: transform .15s, box-shadow .15s; }
  .wiz-btn-primary:hover { background: var(--accent); color: var(--text-strong); }
  .wiz-btn-primary:disabled { opacity: .5; cursor: not-allowed; transform: none; box-shadow: none; }
  .wiz-btn-secondary { font-family: var(--font-body); font-weight: 600; font-size: .9rem; border: 0; cursor: pointer; color: var(--accent-dark); background: var(--lvl0); padding: .9rem 1.2rem; border-radius: 10px; box-shadow: var(--tile-shadow); transition: background .15s, box-shadow .15s; }
  .wiz-btn-secondary:hover { background: var(--accent); color: var(--text-strong); }

  .wiz-error { color: #c0392b; font-size: .85rem; margin-top: .3rem; }
  .wiz-error-box { background: #fdf0ee; border: 1.5px solid #f3c7c0; border-radius: 10px; padding: 1rem; margin-bottom: 1.25rem; color: #a4372a; font-size: .88rem; }

  .wiz-recap-box { background: #FFFFFF; border: 1px solid rgba(48,56,59,.16); border-radius: 12px; padding: 1rem 1.1rem; margin-bottom: 1.75rem; }
  .wiz-recap-box-title { font-family: var(--font-mono); font-size: .7rem; letter-spacing: .06em; text-transform: uppercase; color: var(--text-muted); font-weight: 600; margin-bottom: .5rem; }
  .wiz-recap-chips { display: flex; flex-wrap: wrap; gap: .4rem; }
  .wiz-recap-chip { font-size: .82rem; font-weight: 600; color: var(--text-primary); background: #fff; border: 1.5px solid var(--border); border-radius: 999px; padding: .3rem .75rem; }
  .wiz-recap-chip small { color: var(--text-muted); font-weight: 500; }

  .wiz-qual-block { margin-bottom: 1.5rem; }
  /* 24/07/2026 — ALIGNEMENT UNIQUE : le retrait HORIZONTAL du secteur est supprime A LA SOURCE.
     Tout (cartes blanches, cadre du socle, questions ordinaires) tombe desormais sur la meme ligne
     verticale, sans aucune marge de compensation. Le token --qual-sector-pad reste DECLARE (reference
     historique) mais n'est plus applique. Padding VERTICAL inchange (1.3rem haut, 0 bas). */
  .wiz-qual-sector { --qual-sector-pad: 1.35rem; background: transparent; border: 0; border-radius: 16px; margin-top: 1.25rem; padding: 1.3rem 0 0; }
  .wiz-qual-sector-title { display: flex; align-items: center; gap: .55rem; font-family: var(--font-display); font-weight: 800; font-size: 1.15rem; letter-spacing: -.01em; margin-bottom: 1.1rem; }
  .wiz-qual-sector-dot { width: 14px; height: 14px; border-radius: 50%; background: var(--sec-color, var(--accent)); flex: none; }

  .wiz-qual-progress { background: transparent; border: 0; border-radius: 12px; padding: .85rem 1rem; margin-bottom: 1.25rem; }
  .wiz-qual-progress-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: .55rem; }
  .wiz-qual-progress-label { font-size: .9rem; font-weight: 700; color: var(--text-primary); }
  .wiz-qual-progress-count { font-size: .82rem; color: var(--text-muted); font-weight: 600; }
  .wiz-qual-progress-bar { height: 6px; border-radius: 999px; background: var(--border); overflow: hidden; }
  .wiz-qual-progress-fill { height: 100%; width: 0; border-radius: 999px; background: var(--accent-dark); transition: width .3s ease; }

  .wiz-acc-head { width: 100%; display: flex; align-items: center; gap: .6rem; background: none; border: none; cursor: pointer; padding: 0; font-family: var(--font-display); text-align: left; }
  .wiz-acc-name { flex: 1; font-weight: 800; font-size: 1.1rem; letter-spacing: -.01em; color: var(--text-primary); }
  .wiz-acc-status { font-family: var(--font-body); font-size: .72rem; font-weight: 700; padding: .22rem .6rem; border-radius: 999px; border: 1.5px solid var(--border); color: var(--text-muted); background: #fff; white-space: nowrap; display: inline-flex; align-items: center; gap: .25rem; }
  .wiz-acc-status.done { border-color: var(--accent-dark); background: var(--accent); color: var(--on-accent); }
  .wiz-acc-status svg { width: 12px; height: 12px; }
  .wiz-acc-chevron { width: 18px; height: 18px; color: var(--text-muted); flex: none; transition: transform .2s ease; }
  .wiz-qual-sector.open .wiz-acc-chevron { transform: rotate(180deg); }
  .wiz-acc-body { display: none; margin-top: 1.1rem; }
  .wiz-qual-sector.open .wiz-acc-body { display: block; }
  /* Un seul domaine sélectionné : déroulé simple, sans accordéon */
  .wiz-qual-block-flat .wiz-acc-head { pointer-events: none; }
  .wiz-qual-block-flat .wiz-acc-status,
  .wiz-qual-block-flat .wiz-acc-chevron { display: none; }
  .wiz-qual-block-flat .wiz-acc-body { display: block; }
  /* Resume du choix dans l'en-tete (ex. « Simuler ») : visible seulement s'il est rempli. */
  .wiz-acc-summary { font-family: var(--font-body); font-size: .8rem; font-weight: 700; color: var(--accent-dark); flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .wiz-acc-summary:empty { display: none; }
  /* VOIE 1 (Gerard) — plus AUCUN chevron de repli : ni en domaine unique, ni en multidomaine (pager,
     un domaine a la fois). L'exception .wiz-has-trigger qui re-affichait un chevron cliquable en mode
     plat est neutralisee ; les secteurs a declencheur suivent la regle plate normale (chevron masque,
     en-tete non cliquable, corps toujours ouvert). La classe .wiz-has-trigger reste posee (peut servir
     ailleurs) mais n'a plus d'effet sur l'accordeon. */
  .wiz-picked { margin-bottom: 1.35rem; background: #ffffff; border: 0; border-radius: 10px; padding: .75rem .9rem; }
  .wiz-picked-title { font-size: .95rem; font-weight: 800; color: var(--text-primary); margin-bottom: .6rem; }
  .wiz-picked-hint { font-family: var(--font-mono); font-size: .68rem; color: var(--text-muted); font-weight: 400; margin-left: .3rem; opacity: .8; }
  .wiz-picked-list { display: flex; flex-wrap: wrap; gap: .5rem; }
  .wiz-picked-pill { display: inline-flex; align-items: center; gap: .4rem; padding: .5rem .95rem; border: 0; border-radius: 999px; cursor: pointer; font-family: var(--font-body); font-size: .85rem; font-weight: 600; color: var(--accent-dark); background: var(--lvl0); box-shadow: var(--tile-shadow); transition: border-color .15s, background .15s, color .15s; }
  .wiz-picked-pill:hover { background: var(--accent); color: var(--text-strong); }
  .wiz-picked-pill.selected { background: var(--cta-bg); color: var(--cta-text); }
  .wiz-picked-check { display: none; width: 13px; height: 13px; flex: none; }
  .wiz-picked-check svg { width: 13px; height: 13px; }
  .wiz-picked-pill.selected .wiz-picked-check { display: inline-flex; }
  /* Longue liste (plus de 8) : on n'affiche que les choix faits, le reste est repliable. */
  .wiz-picked-collapsed .wiz-picked-pill:not(.selected) { display: none; }
  /* ═══ 13/07/2026 — LES SECTIONS DU QUESTIONNAIRE (points A et B) ═══════ */

  /* La question « Comment souhaitez-vous avancer » : elle ne précise pas le
     projet, elle décide du PARCOURS. Elle a donc son propre cadre. */
  .wiz-sec-advance {
    background: #ffffff;
    border: 0;
    border-radius: 10px;
    padding: .75rem .9rem;
    margin-bottom: 1.35rem;
  }
  .wiz-sec-advance .wiz-qual-field:last-child { margin-bottom: .75rem; }

  /* Le questionnaire proprement dit. */
  .wiz-sec-title {
    font-family: var(--font-mono);
    font-size: .7rem; letter-spacing: .06em; text-transform: uppercase;
    color: var(--text-muted); font-weight: 700;
    margin: 0 0 .9rem; padding-bottom: .5rem;
    border-bottom: 1.5px solid var(--border);
  }
  /* Message d'accroche en tete de questionnaire : rassurer sans decourager. */
  .wiz-sec-intro {
    font-size: .84rem;
    line-height: 1.5;
    color: var(--text-muted);
    margin: 0 0 1.1rem;
  }

  /* Le socle : il ne flotte plus au-dessus du questionnaire — il EN FAIT PARTIE. */
  .wiz-socle-card {
    border: 1.5px solid var(--border); border-radius: 14px;
    margin-bottom: .85rem; overflow: hidden; background: #fff;
  }
  .wiz-socle-head {
    display: flex; align-items: center; gap: .6rem;
    padding: .95rem 1.15rem;
    background: transparent;
  }
  .wiz-socle-dot {
    width: 9px; height: 9px; border-radius: 50%; flex: none;
    background: var(--text-primary); opacity: .35;
  }
  .wiz-socle-name { font-weight: 800; font-size: .98rem; color: var(--text-primary); }
  /* Socle : les 2 questions (statut / logement) cote a cote quand la largeur le permet,
     et repli automatique a 1 colonne en dessous (slot etroit / mobile) via auto-fit. */
  .wiz-socle-body { padding: 1.15rem 1.15rem .1rem; display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 0 1.4rem; align-items: start; }

  /* ═══ 13/07/2026 — LE SOCLE DÉPLACÉ SE FOND DANS LE QUESTIONNAIRE ═══════
     Gérard : « ce n'est pas esthétique ».
     Il avait raison : le socle gardait un CADRE GRIS au milieu de questions qui
     n'en ont pas. Il ressemblait à une pièce rapportée — parce qu'il en était une.

     Une fois déménagé, il n'est plus un bloc : ce sont juste DEUX QUESTIONS DE
     PLUS, exactement comme « Votre maison est… » ou « Surface habitable ».
     Ni cadre, ni fond, ni titre. Le visiteur ne doit même pas remarquer qu'il
     s'agit de questions communes à tous les secteurs.

     ⚠️ `!important` assumé : `.wiz-qual-sector` porte son propre fond et sa
     bordure, avec une spécificité plus forte. Sans lui, le cadre revient — et
     c'est exactement ce qui s'est passé à la première livraison. */
  .wiz-socle-slot:empty { display: none; }

  .wiz-picked-more { background: none; border: none; padding: .3rem 0; margin-top: .55rem; cursor: pointer; font-family: var(--font-body); font-size: .82rem; font-weight: 700; color: var(--accent-dark); text-decoration: underline; text-underline-offset: 2px; }
  .wiz-picked-more:hover { color: var(--text-primary); }
  .wiz-qual-field { margin-bottom: 1.15rem; }
  /* Bloc declencheur ("Comment souhaitez-vous avancer" + 2 boutons) encadre en carte blanche
     comme .wiz-aides-item. Cible le VRAI element (le champ declencheur), pas .wiz-sec-advance
     qui n'existe pas quand le declencheur est une question de sous-secteur (cas reel en base). */
  .wiz-qual-field[data-qual-trigger="1"] { background: #ffffff; border: 0; border-radius: 10px; padding: .75rem .9rem; }
  .wiz-qual-label { font-size: .95rem; font-weight: 800; color: var(--text-primary); margin-bottom: .5rem; }
  /* SEQ146 — le point d'interrogation final reste solidaire du dernier mot (evite l'orphelin " ?" seul
     a la ligne), quelle que soit la largeur et l'origine du texte (intitules de la base inclus).
     Regle d'AFFICHAGE pure : aucun libelle modifie, aucun SQL. S'applique a TOUS les titres de question. */
  .wiz-qual-label, .wiz-step-head h2 { text-wrap: pretty; }
  .wiz-qual-help { font-size: .8rem; color: var(--text-muted); line-height: 1.5; margin: 0 0 .6rem; border-left: 2px solid var(--cta-bg); padding-left: .6rem; }
  /* seq 1 — habillage general des champs texte du questionnaire (regle valable pour TOUS les
     futurs champs .wiz-qual-input). Valeurs recopiees des champs de l'ecran "Comment vous joindre"
     (etape 3) : carte blanche, contour fin gris de champ, coins 12px, hauteur genereuse, largeur pleine. */
  .wiz-qual-input { width: 100%; background: #ffffff; border: 1.5px solid var(--qs-input-border); border-radius: 12px; padding: .95rem 1rem; min-height: 56px; box-sizing: border-box; font-family: var(--font-body); font-size: .95rem; color: var(--text-primary); }
  .wiz-qual-input:focus { outline: none; border-color: var(--cta-bg); box-shadow: 0 0 0 3px rgba(220,188,24,.30); } /* Q 04/08 : focus jaune d'action (ex terracotta) */
  /* seq 2 — zone multi-lignes a hauteur FIXE (~4 lignes) : poignee retiree (resize:none), et quand le
     texte depasse une barre de defilement verticale apparait A L'INTERIEUR (overflow-y:auto) ; le champ
     ne grandit jamais. Largeur/fond/coins/bordure viennent de .wiz-qual-input (seq 1), inchanges. */
  .wiz-qual-textarea { resize: none; height: 120px; overflow-y: auto; line-height: 1.5; }
  /* seq 4 — compteur discret sous la zone ; passe au vert (n'alerte plus) au minimum atteint. */
  .wiz-qual-counter { font-size: .78rem; color: var(--text-muted); margin: .35rem 0 0; }
  .wiz-qual-counter.ok { color: var(--accent-dark); }
  .wiz-qual-options { display: flex; flex-wrap: wrap; gap: .5rem; }
  .wiz-qual-pill { padding: .5rem .95rem; border: 0; border-radius: var(--tile-radius); cursor: pointer; font-size: .85rem; font-weight: 600; color: var(--accent-dark); background: var(--lvl0); box-shadow: var(--tile-shadow); transition: background .15s, color .15s, box-shadow .15s; }
  .wiz-qual-pill:hover { background: var(--accent); color: var(--text-strong); }
  .wiz-qual-pill.selected { background: var(--cta-bg); color: var(--cta-text); box-shadow: none; }
  /* Boutons de la question declencheur (Simuler / Etre recontacte) : look bouton, parent+1, ZERO bordure */
  .wiz-qual-field[data-qual-trigger="1"] .wiz-qual-pill { background: var(--lvl0); color: var(--accent-dark); border: 0; padding: .8rem 1.25rem; font-weight: 600; box-shadow: var(--tile-shadow); }
  .wiz-qual-field[data-qual-trigger="1"] .wiz-qual-pill:hover { background: var(--accent); color: var(--text-strong); box-shadow: 0 1px 2px rgba(20,25,30,.08); }
  /* SEQ2 — etat SELECTIONNE net (regle +specifique que celle ci-dessus qui masquait le liseré) */
  .wiz-qual-field[data-qual-trigger="1"] .wiz-qual-pill.selected { background: var(--cta-bg); color: var(--cta-text); box-shadow: none; }
  /* P5-b — MESURE : --text-muted sur blanc = 3,69 pour 1, sous le seuil. On garde
     l'intention (cette pastille reste plus discrete que ses voisines, qui sont en
     --accent-dark a 18,16) mais on la rend lisible : --text-body donne 8,80.
     Et une fois CHOISIE, son fond gris clair veut une encre NOIRE, pas blanche :
     blanc sur --text-muted = 3,69 ; noir = 5,03. */
  .wiz-qual-pill-dontknow { color: var(--text-body); font-style: italic; }
  .wiz-qual-pill-dontknow.selected { background: var(--text-muted); border-color: var(--text-muted); color: var(--cta-text); font-style: normal; }

  /* ── Bloc « Aides disponibles » (LOT 5.1) ─────────────────────────────
     Alimenté par `rge_benefits` : la même source que le filtre partenaires.
     Si aucune aide n'est active sur le secteur, le bloc n'existe pas. */
  /* Cartes d'aides alignees sur le niveau ETAPE, comme tout le reste : depuis le 24/07/2026 le retrait
     du secteur est supprime A LA SOURCE, donc plus aucune marge de compensation ici. Padding vertical
     inchange (1.1rem haut, 0 bas). */
  .wiz-aides { background: transparent; border: 0; border-radius: 14px; padding: 1.1rem 0 0; }
  .wiz-aides-head { display: flex; align-items: center; gap: .55rem; font-weight: 800; font-size: .98rem; color: var(--text-strong); margin-bottom: .85rem; }
  .wiz-aides-icon { display: flex; flex: none; color: var(--accent-dark); }
  .wiz-aides-icon svg { width: 22px; height: 22px; }
  .wiz-aides-list { list-style: none; margin: 0 0 1rem; padding: 0; display: flex; flex-direction: column; gap: .7rem; }
  .wiz-aides-item { background: #ffffff; border: 0; border-radius: 10px; padding: .75rem .9rem; }
  .wiz-aides-item-head { display: flex; align-items: center; gap: .45rem; flex-wrap: wrap; }
  .wiz-aides-item-head strong { font-size: .92rem; color: var(--text-primary); }
  .wiz-aides-tag { font-family: var(--font-mono); font-size: .66rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--accent-dark); background: var(--lvl0); box-shadow: var(--tile-shadow); border: 0; border-radius: 999px; padding: .12rem .5rem; }
  .wiz-aides-amount { font-size: .78rem; font-weight: 700; color: var(--accent-dark); }
  .wiz-aides-desc { font-size: .82rem; color: var(--text-muted); line-height: 1.5; margin: .35rem 0 0; }
  .wiz-aides-src { font-size: .74rem; margin: .4rem 0 0; display: flex; gap: .6rem; flex-wrap: wrap; align-items: center; }
  .wiz-aides-src a { color: var(--accent-dark); font-weight: 700; text-decoration: none; }
  .wiz-aides-src a:hover { text-decoration: underline; }
  .wiz-aides-date { font-family: var(--font-mono); font-size: .7rem; color: var(--text-muted); }
  .wiz-aides-check { display: flex; gap: .65rem; align-items: flex-start; background: #ffffff; border: 0; border-radius: 10px; padding: .85rem .95rem; cursor: pointer; font-size: .86rem; line-height: 1.5; color: var(--text-primary); }
  .wiz-aides-check input[type=checkbox] { width: 18px; height: 18px; margin-top: 1px; accent-color: var(--cta-bg); flex-shrink: 0; cursor: pointer; }
  .wiz-aides-check strong { display: block; margin-bottom: .15rem; }
  .wiz-aides-check span { color: var(--text-muted); }
  .wiz-aides-check strong { color: var(--text-primary); }
  /* Avertissement affiche seulement quand la case aides est decochee (toggle via l'attribut hidden en JS). */
  .wiz-aides-warn { margin: .6rem 0 0; color: #b91c1c; font-size: .82rem; font-weight: 600; line-height: 1.45; }

  .wiz-more-toggle { display: inline-flex; align-items: center; gap: .4rem; cursor: pointer; font-family: var(--font-body); font-weight: 700; font-size: .88rem; color: var(--accent-dark); background: none; border: none; padding: .3rem 0; margin: .25rem 0 .5rem; }
  .wiz-more-toggle:hover { color: var(--text-primary); }
  .wiz-more-toggle svg { width: 15px; height: 15px; transition: transform .2s; }
  .wiz-more-toggle.open svg { transform: rotate(45deg); }
  .wiz-more-block { display: none; border-top: 1.5px solid var(--border); margin-top: .5rem; padding-top: 1.25rem; }
  .wiz-more-block.open { display: block; }
  .wiz-reassure { background: #FFFFFF; border: 1px solid rgba(48,56,59,.16); border-radius: 12px; padding: .9rem 1rem; font-size: .84rem; color: var(--text-muted); line-height: 1.5; margin-bottom: 1.25rem; }

  .wiz-final-recap { display: flex; flex-direction: column; gap: .5rem; margin-bottom: .5rem; }
  /* Les sous-lignes du récap : « Aides financières » une fois, puis un secteur
     par ligne. Légèrement en retrait, un peu plus discrètes que le libellé. */
  .wiz-recap-sub {
    display: inline-block; margin-left: 1rem;
    color: var(--text-muted); font-size: .92em;
  }
  /* 🆕 21/07/2026 — pastille "€ Aides" sur un besoin éligible (récap "Vos besoins").
     Même vert discret que le bloc aides du parcours (cohérence). */
  .wiz-recap-aide {
    display: inline-block; margin-left: .3rem; vertical-align: baseline; white-space: nowrap;
    font-size: .68rem; font-weight: 700; color: var(--accent-dark);
    background: var(--lvl0); box-shadow: var(--tile-shadow); border: 0; border-radius: 999px; padding: .05rem .45rem;
  }

  .wiz-recap-section { background: #FFFFFF; border: 1px solid rgba(48,56,59,.16); border-radius: 12px; padding: 1rem 1.1rem; }
  .wiz-recap-section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: .5rem; }
  .wiz-recap-section-title { font-family: var(--font-mono); font-size: .7rem; letter-spacing: .06em; text-transform: uppercase; color: var(--cta-bg); font-weight: 600; }
  .wiz-recap-edit { font-family: var(--font-body); font-size: .8rem; font-weight: 700; color: var(--accent-dark); background: none; border: none; cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
  .wiz-recap-edit:hover { color: var(--text-primary); }
  .wiz-recap-line { font-size: .9rem; color: var(--text-primary); line-height: 1.55; }
  .wiz-recap-line b { font-weight: 700; }
  .wiz-recap-empty { color: var(--text-muted); font-style: italic; }
  /* M1 (14/08) — COTE VISITEUR : plus de rond ni de pourcentage au recap. Tete du bloc en deux groupes :
     [titre + coche fine] a gauche, [Modifier / Retirer] a droite, avec de l'air. La phrase
     "{n} questions restantes" passe SOUS le titre, en teinte discrete. Aucune bordure de bouton (charte). */
  .wiz-recap-head-left { display: flex; align-items: center; gap: .4rem; min-width: 0; }
  .wiz-recap-head-actions { display: flex; align-items: center; gap: 1rem; flex: none; }
  .wiz-recap-coche { display: inline-flex; color: var(--text-muted); }
  .wiz-recap-coche svg { width: 15px; height: 15px; }
  .wiz-recap-restantes { font-family: var(--font-body); font-size: .78rem; color: var(--text-muted); margin: -.15rem 0 .5rem; }
  .wiz-recap-retirer { font-family: var(--font-body); font-size: .8rem; font-weight: 700; color: var(--text-muted); background: none; border: none; cursor: pointer; padding: 0; text-decoration: underline; text-underline-offset: 2px; }
  .wiz-recap-retirer:hover { color: var(--text-primary); }
  /* J7 — ROND DE COMPLETUDE (anneau + % au centre). Fin, sans relief ni ombre. Trois seuils de couleur :
     le seuil MOYEN reutilise le jeton EXISTANT --cta-bg (jaune d'action) ; aucun jeton ROUGE ni VERT
     n'existant dans le fichier, deux jetons DEDIES sont crees (voir rapport J7d). */
  :root { --completude-low: #C0623A; --completude-mid: var(--cta-bg); --completude-high: #4F9D69; }
  .completude-ring { display: inline-flex; width: 34px; height: 34px; flex: none; vertical-align: middle; margin-left: .5rem; }
  .completude-ring svg { width: 100%; height: 100%; }
  .completude-ring-track { fill: none; stroke: rgba(48,56,59,.16); stroke-width: 3; }
  .completude-ring-fill { fill: none; stroke-width: 3; stroke-linecap: round; }
  .completude-ring-text { font-family: var(--font-body); font-size: 10px; font-weight: 700; fill: var(--text-strong); }
  .completude-ring--low  .completude-ring-fill { stroke: var(--completude-low); }
  .completude-ring--mid  .completude-ring-fill { stroke: var(--completude-mid); }
  .completude-ring--high .completude-ring-fill { stroke: var(--completude-high); }
  /* seq 134 — titres de metier du recapitulatif (panneau de droite) en terre cuite.
     Classes DEDIEES au panneau #finalRecap (rendu JS) : n'atteignent ni la colonne
     de gauche (.wiz-rail-recap-metier) ni un autre ecran. Couleur seule, rien d'autre. */
  .wiz-recap-prec-metier { color: var(--cta-bg); }
  .wiz-recap-aides-metier { color: var(--cta-bg); }

  .wiz-thanks-message { background: #FFFFFF; border: 1px solid rgba(48,56,59,.16); border-radius: 12px; padding: 1.1rem 1.2rem; font-size: .92rem; color: var(--text-primary); line-height: 1.55; margin-bottom: .5rem; }

  .wiz-consent { display: flex; gap: .65rem; align-items: flex-start; background: #FFFFFF; border: 1px solid rgba(48,56,59,.16); border-radius: 12px; padding: .9rem 1rem; margin-bottom: 1.25rem; cursor: pointer; font-size: .86rem; line-height: 1.5; color: var(--text-primary); }
  .wiz-consent input[type=checkbox] { width: 18px; height: 18px; margin-top: 1px; accent-color: var(--accent-dark); flex-shrink: 0; cursor: pointer; }

  .wiz-thanks { text-align: center; padding: 1.5rem 0; }
  .wiz-thanks-icon { width: 64px; height: 64px; border-radius: 50%; background: var(--accent); margin: 0 auto 1.5rem; display: flex; align-items: center; justify-content: center; }
  .wiz-thanks h2 { margin-bottom: .75rem; }
  .wiz-thanks > p { color: var(--text-muted); margin-bottom: 2rem; }
  .wiz-synoptique { display: flex; flex-direction: column; gap: 0; text-align: left; max-width: 420px; margin: 0 auto; }
  .wiz-syn-step { display: flex; gap: .9rem; align-items: flex-start; }
  .wiz-syn-icon { width: 40px; height: 40px; border-radius: 50%; background: #FFFFFF; border: 1px solid rgba(48,56,59,.16); display: flex; align-items: center; justify-content: center; flex: none; color: var(--accent-dark); }
  .wiz-syn-icon svg { width: 20px; height: 20px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
  .wiz-syn-body { padding-bottom: 1.5rem; }
  .wiz-syn-body strong { display: block; font-size: .95rem; color: var(--text-primary); }
  .wiz-syn-body span { font-size: .84rem; color: var(--text-muted); }
  .wiz-syn-connector { width: 1.5px; background: var(--border); height: 100%; min-height: 18px; margin: 0 auto; position: relative; left: -20px; }
  .wiz-syn-step:last-child .wiz-syn-body { padding-bottom: 0; }

  .wiz-parrainage { margin-top: 2rem; padding: 1.5rem; border: 1.5px dashed var(--border); border-radius: 14px; text-align: left; }
  .wiz-parrainage h3 { font-size: 1rem; margin-bottom: .5rem; }
  .wiz-parrainage p { color: var(--text-muted); font-size: .88rem; margin-bottom: 0; }

  .wiz-spinner { display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(31,41,51,.25); border-top-color: var(--text-primary); border-radius: 50%; animation: wizSpin .7s linear infinite; vertical-align: middle; margin-right: .5rem; }
  @keyframes wizSpin { to { transform: rotate(360deg); } }

  /* 🆕 21/07/2026 — NIVEAU 1 : fil des grandes étapes (remplace l'ancienne barre globale). */
  .wiz-steprail { display: flex; align-items: center; gap: .3rem; margin-bottom: 2.5rem; }
  .wiz-steprail-item { display: flex; align-items: center; gap: .4rem; font-size: .8rem; font-weight: 600; color: var(--text-muted); }
  .wiz-steprail-item.current { color: var(--text-primary); font-weight: 800; }
  .wiz-steprail-num { width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid var(--border); background: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: .72rem; font-weight: 800; flex: none; }
  .wiz-steprail-num svg { width: 11px; height: 11px; }
  .wiz-steprail-item.current .wiz-steprail-num { border-color: #30383b; background: #30383b; color: #fff; }
  .wiz-steprail-item.done .wiz-steprail-num { border-color: var(--border); background: var(--lvl1); color: var(--text-strong); }
  .wiz-steprail-sep { flex: 1 1 8px; min-width: 8px; height: 1.5px; background: var(--border); }
  /* Une etape deja atteinte est cliquable : on peut y revenir. */
  .wiz-steprail-item.reachable { cursor: pointer; }
  .wiz-steprail-item.reachable:hover .wiz-steprail-label { text-decoration: underline; }
  /* seq 5 — un repere NON atteignable (sans .reachable) n'accepte plus le clic (pointer-events:none) et
     n'affiche pas un curseur "cliquable" : le clic ne part plus dans le vide, en silence. Les reperes
     .reachable gardent EXACTEMENT leur comportement ; un repere qui devient atteignable retrouve .reachable
     (donc le clic) au prochain rendu du fil. */
  .wiz-steprail-item:not(.reachable) { pointer-events: none; cursor: default; }
  @media (max-width: 560px) {
    .wiz-steprail-label { display: none; }
    .wiz-steprail-item.current .wiz-steprail-label { display: inline; }
  }

  /* 🆕 21/07/2026 — NIVEAU 2 : détail du domaine courant (multidomaine).
     "Domaine X sur N" + nom courant, puis une fine barre segmentée (indicateur, NON cliquable). */
  .wiz-domain-pager { background: #FFFFFF; border: 1px solid rgba(48,56,59,.16); border-radius: 12px; padding: .85rem 1rem; margin-bottom: 1.25rem; }
  .wiz-domain-pager-head { display: flex; align-items: baseline; justify-content: space-between; gap: .6rem; margin-bottom: .6rem; }
  .wiz-domain-pager-title { font-size: .95rem; font-weight: 800; color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .wiz-domain-pager-count { font-family: var(--font-mono); font-size: .72rem; color: var(--text-muted); font-weight: 700; white-space: nowrap; flex: none; }
  /* 🆕 21/07/2026 — indicateur en ÉTAPES NUMÉROTÉES (une par domaine, ordre de sélection).
     INDICATEUR non cliquable. 3 états basés sur currentDomainIndex :
       · passé (index < courant)  : rond VERT #22c55e + coche ; ligne de liaison verte.
       · courant (index === courant) : rond FONCÉ + numéro blanc ; nom en gras/foncé.
       · à venir (index > courant) : rond clair, fine bordure grise, numéro gris ; nom muted ; liaison grise. */
  .wiz-domain-steps { display: flex; align-items: flex-start; }
  .wiz-domain-step { flex: 1 1 0; min-width: 0; position: relative; display: flex; flex-direction: column; align-items: center; gap: .35rem; }
  /* ligne de liaison vers l'étape suivante, DERRIÈRE les ronds */
  .wiz-domain-step:not(:last-child)::after { content: ''; position: absolute; top: 12px; left: 50%; width: 100%; height: 2px; background: var(--border); z-index: 0; }
  .wiz-domain-step.done:not(:last-child)::after { background: var(--cta-bg); } /* Q 04/08 : liaison "passe" en jaune d'action (ex vert #22c55e) */
  .wiz-domain-step-round { position: relative; z-index: 1; box-sizing: border-box; width: 25px; height: 25px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: .74rem; font-weight: 800; background: #fff; border: 1.5px solid var(--border); color: var(--text-muted); }
  .wiz-domain-step-round svg { width: 13px; height: 13px; }
  .wiz-domain-step.current .wiz-domain-step-round { background: var(--text-primary); border-color: var(--text-primary); color: #fff; }
  .wiz-domain-step.done .wiz-domain-step-round { background: var(--cta-bg); border-color: var(--cta-bg); color: var(--cta-text); } /* Q 04/08 : rond "passe" jaune d'action + coche anthracite lisible (ex vert #22c55e / coche blanche) */
  .wiz-domain-step-name { font-size: .7rem; line-height: 1.15; text-align: center; color: var(--text-muted); max-width: 100%; word-break: break-word; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .wiz-domain-step.current .wiz-domain-step-name { color: var(--text-primary); font-weight: 700; }
  @media (max-width: 560px) { .wiz-domain-step-name { font-size: .62rem; } }

  .wiz-honeypot { position: absolute; left: -9999px; top: -9999px; }

@media (min-width: 1024px) {
  /* 1. Le parcours occupe une largeur confortable sur ordinateur */
  .wiz-wrap {
    max-width: none;
    padding: 0;
    display: grid;
    grid-template-columns: 320px minmax(0, 1fr);
    align-items: start;
    min-height: 100vh;
    background: linear-gradient(to right,
                var(--lvl0) 0, var(--lvl0) 320px,
                var(--lvl05) 320px, var(--lvl05) 100%);
  }

  /* 2. Les tuiles passent de 4 a 6 par ligne. Sans cela, aspect-ratio 1/1
        les ferait passer de 129px a 244px de haut et allongerait l'etape 1. */
  .wiz-sector-tile { flex: 0 0 calc(16.666% - .625rem); }

  /* 3. Les champs de saisie ne s'etirent pas sur toute la largeur */
  .wiz-field input[type=text],
  .wiz-field input[type=email],
  .wiz-field input[type=tel],
  .wiz-field textarea,
  .wiz-field select { max-width: 560px; display: block; }

  /* 4. Le lien de saisie manuelle reste SOUS le champ d'adresse : l'input etant
        plafonne a 560px, un element inline qui le suit remonterait a sa droite. */
  #addressManualToggle { display: block; width: fit-content; margin-top: .75rem; }

  /* 5. Colonne laterale blanche a gauche, parcours sur fond clair a droite.
        Le fond des deux zones est peint par le degrade de .wiz-wrap, ce qui
        garantit que la colonne blanche descende sur toute la hauteur de la
        page meme quand son contenu est court. */
  .wiz-header {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 1rem;
    margin-bottom: 0;
    padding: 2rem 1.5rem;
    position: sticky;
    top: 0;
  }

  /* 6. Le parcours perd son cadre : plus de fond, plus d'ombre, plus d'arrondi.
        La separation ne vient plus d'un cadre mais de l'ecart entre les deux fonds. */
  .wiz-card {
    background: transparent;
    box-shadow: none;
    border-radius: 0;
    width: 100%;
    max-width: 1000px;
    margin: 0 auto;
    padding: 2.5rem 2rem 4rem;
  }

  /* 7. Sur ordinateur, le fil horizontal et le bandeau d'etape disparaissent :
        leur role est repris par la colonne de gauche. Ils restent en place dans
        le HTML et continuent de servir en dessous de 1024px.
        Le !important est necessaire car le JS impose un display en style direct. */
  .wiz-steprail { display: none !important; }

  /* 8. Le bandeau d'etape n'a plus lieu d'etre sur ordinateur. */
  .wiz-step-head { display: none; }

  /* 10. La colonne de navigation : titre de l'etape, phrase d'aide,
         puis le fil d'Ariane en vertical. */
  .wiz-sidenav { display: block; width: 100%; margin-top: .75rem; }
  .wiz-sidenav-title { font-family: var(--font-display); font-weight: 700;
                       font-size: 1.15rem; line-height: 1.25;
                       color: var(--accent-dark); margin-bottom: .4rem; }
  .wiz-sidenav-hint  { font-size: .84rem; line-height: 1.45;
                       color: var(--text-muted); margin-bottom: 1.6rem; }
  .wiz-sidenav-rail  { display: flex; flex-direction: column;
                       align-items: flex-start; gap: 0; }
  .wiz-sidenav-rail .wiz-steprail-item { padding: .15rem 0; gap: .6rem; }
  .wiz-sidenav-rail .wiz-steprail-sep  { flex: none; width: 1.5px; height: 16px;
                                         min-width: 0; margin-left: 9px; }

  /* 9. L'animation d'origine decale l'etape de 6px pendant 0,3s, ce qui
        desactive momentanement les elements figes qu'elle contient.
        On garde le fondu, on retire le deplacement. */
  @keyframes wizFadeFlat { from { opacity: 0; } to { opacity: 1; } }
  .wiz-step.active { animation-name: wizFadeFlat; }

  /* 11. Toutes les cartes blanches du parcours adoptent le meme style :
         blanc pur, meme rayon, et une ombre portee doublee d'un liseré fin sous
         le bord, qui leur donne une vraie epaisseur. Les marges propres a chaque
         bloc sont conservees. */
  .wiz-recap-box,
  .wiz-picked,
  [data-qual-sector],
  .wiz-socle-card,
  .wiz-qual-field[data-qual-trigger="1"],
  .wiz-aides-item,
  .wiz-aides-check,
  .wiz-recap-section,
  .wiz-domain-pager,
  .wiz-fill,
  .wiz-reassure,
  .wiz-thanks-message,
  .wiz-consent {
    background: var(--lvl0);
    border: 0;
    border-radius: 12px;
    padding: 1.15rem 1.25rem;
    box-shadow: 0 4px 14px rgba(20, 25, 30, .16), 0 1px 0 rgba(20, 25, 30, .07);
  }

  /* 12. Un cadre pose dans un autre cadre ne porte JAMAIS de trait : il se
         distingue par un fond a peine plus soutenu que le blanc qui le porte. */
  .wiz-sec-questions .wiz-picked,
  .wiz-sec-questions .wiz-aides-item,
  .wiz-sec-questions .wiz-aides-check,
  .wiz-sec-advance .wiz-qual-field[data-qual-trigger="1"] {
    background: var(--lvl1);
    border: 0;
    box-shadow: none;
    border-radius: 10px;
    padding: .85rem 1rem;
  }

  /* 16. Le bloc « Autre chose a preciser ? » devient une carte comme les
         autres, alignee sur la largeur du cadre precedent.
         Le !important est indispensable : un style ecrit directement dans le
         HTML impose margin-top:0 sur ce bloc. */
  .wiz-step > .wiz-field {
    background: var(--lvl0);
    border: 0;
    border-radius: 12px;
    padding: 1.15rem 1.25rem;
    box-shadow: 0 4px 14px rgba(20, 25, 30, .16), 0 1px 0 rgba(20, 25, 30, .07);
    margin-top: 1.5rem !important;
  }
  .wiz-step > .wiz-field textarea { max-width: none; }

  /* 24. Les deux blocs internes du secteur ne sont plus des cartes : c'est
         desormais le secteur entier qui en est une, en-tete compris. Leur
         regle de base leur redonnerait un fond blanc, il faut la neutraliser. */
  .wiz-sec-advance,
  .wiz-sec-questions {
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    padding: 0;
  }

  /* 25. Le bloc « Votre logement » recevait DEUX paddings cumules : celui de
         la carte (regle 11) et celui de son en-tete. On retire celui de la
         carte, l'interieur suffit, et on resserre legerement le corps. */
  .wiz-socle-card { padding: 0; }
  .wiz-socle-head { padding: .8rem 1.15rem .2rem; }
  .wiz-socle-body { padding: .6rem 1.15rem .1rem; }

  /* 26. La pastille grise devient une icone de maison. Le dessin vient de
         icon_svg('home') (app/helpers.php), il n'est pas invente. Il sert de
         pochoir : la couleur est donnee par le fond, donc par un token.
         L'arrondi est conserve : si un navigateur ne gerait pas le pochoir,
         on retomberait sur une pastille ronde, pas sur un carre. */
  .wiz-socle-dot {
    width: 18px;
    height: 18px;
    opacity: .55;
    background: var(--text-primary);
    -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M3 11l9-8 9 8'/><path d='M5 10v10h14V10'/></svg>");
    mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M3 11l9-8 9 8'/><path d='M5 10v10h14V10'/></svg>");
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-size: contain;
    mask-size: contain;
    -webkit-mask-position: center;
    mask-position: center;
  }

  /* 18. Le bandeau « Domaine X sur N » disparait sur ordinateur : son role est
         repris par les sous-points de la colonne de gauche. Il reste en place
         dans le HTML et continue de servir en dessous de 1024px.
         Le !important est necessaire car le JS impose un display en style direct. */
  #domainPager { display: none !important; }

  /* 19. Les sous-points de domaine, sous l'etape « Vos demandes ».
         Le retrait de 29px les aligne sous le libelle des grandes etapes
         (pastille de 20px + gouttiere de .6rem). */
  .wiz-sidenav-sub {
    display: flex;
    align-items: center;
    gap: .5rem;
    padding: .12rem 0 .12rem 29px;
    font-size: .8rem;
    color: var(--text-muted);
  }
  .wiz-sidenav-sub.current { color: var(--text-primary); font-weight: 700; }
  .wiz-sidenav-subdot {
    width: 7px; height: 7px; border-radius: 50%;
    background: var(--border); flex: none;
  }
  .wiz-sidenav-sub.done .wiz-sidenav-subdot { background: var(--accent-hover); }
  .wiz-sidenav-sub.current .wiz-sidenav-subdot { background: var(--cta-bg); }

  /* 20. La barre d'action reste visible en bas de la fenetre tant qu'il reste
         du contenu en dessous, puis se pose a sa place naturelle en fin de page.
         Le fond opaque est indispensable : sans lui, le contenu defilerait
         derriere les boutons. On prend la couleur de la page pour rester
         discret. Les deux familles de barres sont traitees a l'identique :
         une barre figee d'un cote et pas de l'autre serait incoherent. */
  .wiz-actions,
  .wiz-step1-bar {
    position: sticky;
    bottom: 0;
    z-index: 3;
    background: var(--lvl0);
    border-top: 1px solid var(--border);
    padding: .9rem 0;
    margin-top: 1.5rem;
  }
  /* seq — barre epinglee des etapes 3 ET 4 : MEME teinte BEIGE que le fond de l'ecran (--field-panel) ET
     filet du haut invisible (border-top color-matchee au fond -> plus de trait, meme forme, meme 1px,
     aucun decalage). OPACITE inchangee : fond PLEIN, le contenu ne defile jamais derriere les boutons.
     Scopee aux etapes 3/4 ; la barre de l'etape 1 (.wiz-step1-bar) garde son filet, non concernee.
     (Filet = border-top de la barre ; les separateurs internes des cadres du recap ne sont PAS touches.) */
  .wiz-step[data-step="3"] .wiz-actions,
  .wiz-step[data-step="4"] .wiz-actions { background: var(--field-panel); border-top-color: var(--field-panel); }

  /* 27. Relief franc sur les pastilles. L'ombre precedente (0 1px 4px / .14)
         etait invisible sur fond blanc. Deux ombres superposees : une portee,
         plus basse et plus large, et un liseré tres fin juste sous le bord qui
         dessine l'epaisseur de la pastille. C'est la seconde qui donne la
         sensation de relief. La teinte reste celle du token --tile-shadow,
         seules l'intensite et la geometrie changent. */
  .wiz-qual-pill,
  .wiz-qual-field[data-qual-trigger="1"] .wiz-qual-pill,
  .wiz-radio-pill,
  .wiz-picked-pill {
    box-shadow: 0 3px 8px rgba(20, 25, 30, .22), 0 1px 0 rgba(20, 25, 30, .10);
    transition: box-shadow .15s ease, transform .15s ease, background .15s, color .15s;
  }

  /* Au survol, la pastille monte d'un pixel et son ombre s'allonge : c'est ce
     mouvement qui la fait percevoir comme un objet pose sur la page. */
  .wiz-qual-pill:hover,
  .wiz-qual-field[data-qual-trigger="1"] .wiz-qual-pill:hover,
  .wiz-radio-pill:hover,
  .wiz-picked-pill:hover {
    transform: translateY(-1px);
    box-shadow: 0 5px 12px rgba(20, 25, 30, .26), 0 1px 0 rgba(20, 25, 30, .10);
  }

  /* La pastille selectionnee s'enfonce : plus d'ombre, plus de deplacement. */
  .wiz-qual-pill.selected,
  .wiz-qual-field[data-qual-trigger="1"] .wiz-qual-pill.selected,
  .wiz-radio-pill.selected,
  .wiz-picked-pill.selected {
    transform: none;
    box-shadow: none;
  }

  /* 28. Les boutons du bas ne sont plus des pave blancs : on ne voit que leur
         libelle, pose directement sur la page. Au survol, seul le TEXTE change
         de couleur — aucun fond ne reapparait. Aucun soulignement.
         La zone de clic verticale est conservee. */
  .wiz-btn-primary,
  .wiz-btn-secondary {
    background: transparent;
    border: 0;
    box-shadow: none;
    text-decoration: none;
    padding: .9rem .4rem;
    transition: color .15s ease;
  }
  .wiz-btn-primary:hover,
  .wiz-btn-secondary:hover {
    background: transparent;
    color: var(--text-strong);
    text-decoration: none;
  }

  /* 21. Le logo et le nom du site deviennent le point d'ancrage de la colonne. */
  .wiz-logo-img { width: 56px; height: 56px; }
  .wiz-logo-text { font-size: 1.35rem; }

  /* 22. Le bloc du fil est centre dans la colonne, mais ses etapes restent
         alignees entre elles : centrer chaque ligne mettrait les pastilles
         en escalier, les libelles n'ayant pas la meme longueur. */
  .wiz-sidenav-rail {
    width: fit-content;
    margin-left: auto;
    margin-right: auto;
    text-align: left;
  }

  /* 23. La poignee d'etirement disparait : la zone de texte garde sa taille. */
  .wiz-field textarea { resize: none; }
}
  .wiz-sec-ico{-webkit-mask-image:none;mask-image:none;background:none;width:auto;height:auto;display:inline-flex;align-items:center;color:var(--accent-dark)}
  .wiz-sec-ico svg{width:20px;height:20px;stroke:currentColor;fill:none}
  .wiz-secq-body{display:block;padding:.6rem 1.15rem .1rem}
  .wiz-qual-sector.wiz-socle-card{margin:0;border:0;border-top:1px solid var(--border);
    border-radius:0;background:transparent;box-shadow:none;padding:1.15rem 0 .35rem}
  .wiz-sec-advance{margin-bottom:.7rem}
  .wiz-socle-head{padding-top:.6rem;padding-bottom:.1rem}
  .wiz-qual-field{margin-bottom:.7rem}
  #wizStep1Continue,#domainPrev,#domainNext,[data-goto],[data-next-from],[data-submit-final]{
    background:none;box-shadow:none;border:0;padding:0;color:var(--accent-dark)}
  #wizStep1Continue:hover,#domainPrev:hover,#domainNext:hover,[data-goto]:hover,
  [data-next-from]:hover,[data-submit-final]:hover{
    background:none;box-shadow:none;color:var(--text-strong)}
  .wiz-sec-questions .wiz-picked,.wiz-sec-advance{margin:0;border:0;
    border-top:1px solid var(--border);border-radius:0;background:transparent;
    box-shadow:none;padding:1.15rem 0 .35rem}
  @media (max-width:1023px){
    .wiz-qual-sector.wiz-socle-card .wiz-socle-head{padding-top:.5rem;padding-bottom:0}
    .wiz-qual-sector.wiz-socle-card .wiz-secq-body{padding-top:.35rem;padding-bottom:.85rem}
    .wiz-qual-sector.wiz-socle-card .wiz-socle-body{padding-top:.5rem;padding-bottom:.85rem}
    .wiz-qual-sector.wiz-socle-card .wiz-qual-field:last-child{margin-bottom:0}
  }
  .wiz-qual-sector.wiz-socle-card .wiz-socle-head,
  .wiz-qual-sector.wiz-socle-card .wiz-socle-body,
  .wiz-qual-sector.wiz-socle-card .wiz-secq-body{padding-left:0;padding-right:0}
  .wiz-qual-sector.wiz-socle-card .wiz-secq-body{display:grid;
    grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:.5rem 2rem;align-items:start}
  .wiz-qual-sector.wiz-socle-card .wiz-qual-label{font-weight:400;font-size:.92rem;
    color:var(--text-muted);margin-bottom:.45rem}
  .wiz-qual-sector.wiz-socle-card .wiz-socle-head{margin-bottom:.4rem}
  .wiz-qual-sector.wiz-socle-card .wiz-aides{grid-column:1/-1}
  .wiz-qual-sector[data-qual-sector]{background:var(--lvl0);border:1px solid var(--border);
    border-radius:12px;box-shadow:none;padding:1.15rem 1.35rem}
  .wiz-sec-note{margin:0 0 .9rem;font-size:.9rem;color:var(--text-muted);grid-column:1/-1}
  .wiz-socle-recap{padding:.9rem 0;border-top:1px solid var(--border);
    font-size:.95rem;color:var(--text-muted)}
  .wiz-socle-recap a{color:var(--accent-dark);margin-left:.4rem}
  /* seq 79 — moteur "une question par ecran" : masque une question SANS display:none
     (sinon isFieldShown la croit absente et casse validation/progression/declencheurs) */
  .qs-off{position:absolute!important;width:1px;height:1px;overflow:hidden;
          clip-path:inset(50%);white-space:nowrap}

  /* ═══ seq 80 — HABILLAGE CHARTE DU MOTEUR "UNE QUESTION PAR ECRAN" ═══
     Tout est scope sous .qs-mode (posee par le module quand il est actif, en
     mono-domaine uniquement). Hors de ce mode, l'apparence d'origine est intacte.
     Charte : terre cuite = fonds/selections (var --cta-bg, texte blanc --cta-text) ;
     anthracite = titres + le SEUL bouton plein (var --btn-bg / --btn-text) ;
     blanc = surfaces (var --lvl0). AUCUNE couleur en dur : que des jetons var(--...).
     Aucune bordure, aucune ombre, aucun relief, aucun degrade, aucun flou. */

  /* 9 + seq 84. Zone de question centree ~640px, SANS CADRE ENGLOBANT : l'ancetre
     [data-qual-sector] est rendu TRANSPARENT (jamais display:none — sinon isFieldShown
     casserait validation et declencheurs) ; fond, rayon et padding neutralises. La question
     est posee A MEME LE FOND ; ce sont les reponses qui sont des cartes blanches.
     (spec 3 > .wiz-qual-sector[...] spec 2, placee apres.) */
  .qs-mode .wiz-qual-sector[data-qual-sector]{
    max-width:640px;margin:1.5rem auto;
    background:transparent;border:0;box-shadow:none;border-radius:0;
    padding:0}

  /* 8. Barre de progression fine, tout en haut de la zone d'etape 2. */
  .qs-mode .qs-bar{height:4px;background:var(--border);border-radius:999px;overflow:hidden;
    max-width:640px;margin:0 auto 1.5rem}
  .qs-mode .qs-bar-fill{height:100%;width:0;background:var(--cta-bg);border-radius:999px;
    transition:width .3s ease}

  /* 1. Compteur "QUESTION X SUR Y" + 2. pastille "Necessaire", centres au-dessus du titre. */
  .qs-mode .qs-head{max-width:640px;margin:0 auto .5rem;text-align:center}
  .qs-mode .qs-count{font-family:var(--font-mono);font-size:.75rem;font-weight:700;
    letter-spacing:.08em;text-transform:uppercase;color:var(--qs-muted)}
  .qs-mode .qs-required{display:inline-block;margin-left:.5rem;
    background:var(--cta-bg);color:var(--cta-text);
    font-size:.7rem;font-weight:700;border-radius:999px;padding:.15rem .6rem;
    text-transform:uppercase;letter-spacing:.03em;vertical-align:middle}

  /* 3 + seq 84. Titre de la question : ~34px, gras, anthracite, centre (spec 3 > .socle-card .wiz-qual-label). */
  .qs-mode .wiz-qual-field .wiz-qual-label{
    font-size:2.125rem;line-height:1.2;font-weight:800;color:var(--text-strong);
    text-align:center;margin:0 auto .6rem;max-width:640px}
  @media (max-width:560px){
    .qs-mode .wiz-qual-field .wiz-qual-label{font-size:1.55rem}
  }
  /* seq — de l'air sous le GRAND TITRE des ecrans du module s1 (familles + ecran combine) : la 1re
     rangee de tuiles etait trop proche. Ecart porte a 1.5rem (deja en usage ailleurs dans le parcours).
     Scope #s1Screen (id de la boite s1) -> les questionnaires de l'etape 2, memes .wiz-qual-label mais
     HORS #s1Screen, ne sont pas touches. Vaut telephone ET ordinateur. */
  #s1Screen .wiz-qual-field .wiz-qual-label{margin-bottom:1.5rem}

  /* 4. Texte d'aide : ~14,5px, gris, centre, sans lisere (spec 3 > .wiz-qual-help spec 1). */
  .qs-mode .wiz-qual-field .wiz-qual-help{
    font-size:.9rem;color:var(--qs-muted);text-align:center;
    border-left:0;padding-left:0;margin:0 auto 1.25rem;max-width:640px}

  /* 5. Reponses empilees pleine largeur, ~12px entre elles (spec 3 > .wiz-qual-options spec 1). */
  .qs-mode .wiz-qual-field .wiz-qual-options{
    flex-direction:column;align-items:stretch;gap:.75rem;max-width:640px;margin:0 auto}

  /* 5 + seq 86. Chaque reponse : carte BLANCHE large et haute, bordure fine (autorisee par
        Gerard pour cet ecran), rayon 12px, libelle a GAUCHE ~17px, chevron a droite. Flex :
        libelle a gauche, chevron a droite (justify-content:space-between). AUCUNE ombre.
        (spec 3 > .wiz-qual-pill spec 1 et [...trigger...] .wiz-qual-pill spec 3.) */
  /* seq 89 — picto a GAUCHE + libelle groupes (gap), chevron pousse a DROITE (margin-left:auto).
     Alignement constant : picto a la meme distance du bord (padding-left), libelle au meme depart. */
  .qs-mode .wiz-qual-field .wiz-qual-pill{
    display:flex;align-items:center;gap:.85rem;
    width:100%;text-align:left;min-height:68px;
    padding:1.375rem 1.5rem;border:1px solid var(--border);border-radius:12px;
    background:var(--lvl0);color:var(--text-strong);box-shadow:none;
    font-size:1.0625rem;font-weight:600;transition:background .15s,border-color .15s}
  /* seq 89 — pictogramme a gauche : ~26px, ne se comprime jamais, couleur terre cuite au repos. */
  .qs-picto{display:none}
  .qs-mode .wiz-qual-field .wiz-qual-pill .qs-picto{
    display:inline-flex;flex:none;align-items:center;color:var(--sec-color, var(--cta-bg))}
  .qs-mode .wiz-qual-field .wiz-qual-pill .qs-picto svg{width:26px;height:26px}
  .qs-mode .wiz-qual-field .wiz-qual-pill:hover .qs-picto,
  .qs-mode .wiz-qual-field .wiz-qual-pill.selected .qs-picto{color:var(--cta-text)}
  /* Chevron a droite, en var(--qs-muted) au repos (item flex pousse a droite). */
  .qs-mode .wiz-qual-field .wiz-qual-pill::after{
    content:'';flex:none;margin-left:auto;width:.5rem;height:.5rem;
    border-right:2px solid var(--qs-muted);border-top:2px solid var(--qs-muted);
    transform:rotate(45deg)}
  /* Survol / selection : fond + bordure terre cuite, libelle ET chevron en var(--cta-text)
     (spec 4 > .wiz-qual-pill:hover/.selected spec 2 et [...trigger...] spec 4). */
  .qs-mode .wiz-qual-field .wiz-qual-pill:hover,
  .qs-mode .wiz-qual-field .wiz-qual-pill.selected{
    background:var(--cta-bg);border-color:var(--cta-bg);color:var(--cta-text);box-shadow:none}
  .qs-mode .wiz-qual-field .wiz-qual-pill:hover::after,
  .qs-mode .wiz-qual-field .wiz-qual-pill.selected::after{
    border-right-color:var(--cta-text);border-top-color:var(--cta-text)}
  /* G3 — pastille de SORTIE "Je prefere ne pas repondre" : MEME forme et MEME chevron (::after) qu'une
     reponse, mais DISCRETE — c'est une sortie, pas un choix. Texte attenue, italique, fond transparent,
     pas de picto a gauche, un peu plus basse. Le survol ne la colore pas comme une reponse retenue. */
  /*  ⚠️ 06/09 : « font-weight:500 » etait une QUATRIEME graisse, et
      « .qs-picto{display:none} » privait cette tuile du seul dessin de sa
      grille -- son titre remontait alors dans la rangee du pictogramme.
      Elle reste discrete par sa COULEUR et son italique, pas par un
      gabarit a part : c est une tuile comme les autres.               */
  .qs-mode .wiz-qual-field .wiz-qual-pill.qs-skip-pill{
    min-height:var(--tu-h);background:transparent;border-color:var(--border);
    color:var(--qs-muted);font-style:italic;font-weight:700}
  .qs-mode .wiz-qual-field .wiz-qual-pill.qs-skip-pill:hover{
    background:var(--lvl0);border-color:var(--qs-muted);color:var(--text-strong)}
  .qs-mode .wiz-qual-field .wiz-qual-pill.qs-skip-pill:hover::after{
    border-right-color:var(--qs-muted);border-top-color:var(--qs-muted)}

  /* 6. Sous les reponses : Retour (gris) et Ignorer (terre cuite foncee), liens nus centres. */
  .qs-mode .qs-nav{display:flex;justify-content:center;align-items:center;
    gap:1.5rem;margin:1.5rem auto 0;max-width:640px;flex-wrap:wrap}
  .qs-mode .qs-nav .qs-link{font-size:.9rem;color:var(--qs-muted);text-decoration:none}
  .qs-mode .qs-nav .qs-link:hover{text-decoration:underline}
  .qs-mode .qs-nav .qs-skip{color:var(--accent-dark);text-decoration:underline}
  /* seq (defaut fleche) — VARIANTE propre au SEUL ecran de precision (etape 2) : le "Retour" se cale
     a GAUCHE (margin-right:auto absorbe l'espace a sa droite -> Continuer/Ignorer poussés a droite),
     comme le "Retour" des .wiz-actions des autres ecrans. Regle plus precise que .qs-mode .qs-nav
     (partagee) : les qs-nav du defile de l'etape 1 et du recap gardent EXACTEMENT leur disposition
     centree. Place seule : ni l'ordre des actions ni le comportement du retour ne changent. */
  .wiz-step[data-step="2"] .qs-nav [data-qs-back]{margin-right:auto}

  /* 7. Le SEUL bouton plein de l'ecran : anthracite, texte blanc
        (spec 3 > .wiz-btn-primary spec 1 ; hover spec 4 > .wiz-btn-primary:hover spec 2). */
  .qs-mode .qs-nav [data-qs-continue]{
    background:var(--btn-bg);color:var(--btn-text);
    border:0;border-radius:10px;padding:.85rem 1.6rem;
    font-size:.95rem;font-weight:700;box-shadow:none;text-decoration:none}
  .qs-mode .qs-nav [data-qs-continue]:hover{
    background:var(--btn-bg);color:var(--btn-text);text-decoration:none}

  /* Boutons globaux de l'etape 2 masques pendant le defile (code intact, juste caches ;
     retablis des que .qs-mode disparait). La barre sticky qui les porte est neutralisee
     (padding/margin/fond) car son display:flex est pose en ligne et ne peut etre efface par une classe. */
  .qs-mode [data-goto="1"],
  .qs-mode [data-next-from="2"]{display:none}
  .qs-mode #step2StdActions{margin:0;padding:0;background:transparent}

  /* ═══ seq 81 — MODE PLEIN ECRAN : ne montrer QUE la question courante ═══
     1. On masque les VOISINS (a-e du releve + le titre d'etape et les messages
        d'intro). display:none autorise : aucun n'est ancetre d'une question, donc
        isFieldShown n'est jamais trompe. Tout reapparait quand .qs-mode disparait. */
  .qs-mode .wiz-step-head,       /* titre "Precisez votre projet" + aide (voisin) */
  .qs-mode .wiz-socle-head,      /* (a) en-tetes "Votre logement" / "Pour affiner..." (voisin) */
  .qs-mode .wiz-sec-title,       /* "Precisez votre projet" (voisin) */
  .qs-mode .wiz-sec-note,        /* (b) "Aucune question n'est obligatoire..." (voisin) */
  .qs-mode .wiz-acc-head,        /* (c) bandeau du secteur "Photovoltaique" (voisin) */
  .qs-mode .wiz-picked,          /* (d) "Ce que vous avez selectionne" + "Voir les autres options" (voisin) */
  .qs-mode .wiz-socle-recap,     /* recap du socle (voisin) */
  .qs-mode .wiz-field{display:none}   /* (e) "Autre chose a preciser ?" (voisin ; en etape 2 = uniquement la note) */

  /* 2. Neutraliser la GRILLE 2 colonnes : la question occupe toute la largeur.
        L'originale (735) n'est PAS dans un @media -> la mienne non plus.
        Spec 4 > spec 3, placee apres. Aucun !important. */
  .qs-mode .wiz-qual-sector.wiz-socle-card .wiz-secq-body{display:block}

  /* 4. Cadre UNIQUE : on retire les traits de separation internes (border-top) des
        cartes internes et de la section "declencheur", pour que le cadre blanc unique
        (pose plus haut sur [data-qual-sector]) soit identique d'un ecran a l'autre. */
  .qs-mode .wiz-qual-sector.wiz-socle-card{border-top:0;padding:0}
  .qs-mode .wiz-sec-advance{border-top:0;padding:0;margin:0}

  /* ═══ seq 82 ═══ */
  /* 2. Message contextuel (#qualContextMsg / #qualContextMsgSim, classe .wiz-qual-intro)
        replace par le JS SOUS les reponses : petit texte gris, centre, sans cadre ni bordure.
        On ne touche ni a sa condition ni a son texte (geres par updateContextMsg). Spec 2 >
        .wiz-qual-intro (spec 1). L'affichage reste pilote par le JS (display/hidden inline). */
  .qs-mode .wiz-qual-intro{
    background:transparent;border:0;border-left:0;border-radius:0;
    padding:0;margin:1rem auto 0;max-width:640px;
    font-size:.85rem;line-height:1.5;color:var(--qs-muted);text-align:center}

  /* 3. Centrage VERTICAL sur grand ecran (>= 900px) : le contenu de l'ecran de question
        est centre dans sa zone (plus de grand vide sous une question courte). La barre de
        progression reste en haut ; #qualSectorsWrap est centre par marges automatiques.
        Sous 900px : rien (le contenu reste aligne en haut). Aucun !important, aucun hex. */
  @media (min-width:900px){
    /* seq 101 — DEFAUT C : l'affichage du defile est conditionne a .active. Une etape qui garderait
       .qs-mode (module non demonte) ne peut plus rester visible hors de son tour -> plus de
       superposition (ex. tuiles etape 1 sous l'ecran de remerciement). L'invariant "seule l'etape
       active est visible" est retabli a la source. */
    .wiz-step.qs-mode.active{display:flex;flex-direction:column;min-height:70vh}
    .qs-mode #qualSectorsWrap{margin-top:auto;margin-bottom:auto}
  }

  /* seq 86 (5b) — pendant le defile, les deux messages contextuels sont masques sur TOUS les
     ecrans (aides comprise). Voisins (jamais ancetres) -> display:none sans danger. A l'extinction
     de .qs-mode ils redeviennent visibles selon leur condition d'origine, a leur place d'origine
     (aucun deplacement en JS ; texte et updateContextMsg inchanges). */
  .qs-mode #qualContextMsg,
  .qs-mode #qualContextMsgSim{display:none}

  /* seq 84/85/86/87 — FOND de la zone d'etape 2. seq 87 : plus AUCUN fond (le background
     blanc de la seq 86 est retire). La regle balai en tout dernier du bloc s'en charge. */
  .wiz-step.qs-mode{}

  /* seq 85 — PLUS AUCUN CADRE : tous les ANCETRES de la question (dont .wiz-socle-card, qui
     porte un fond blanc en L240 et n'a pas [data-qual-sector], echappant a la seq 84)
     deviennent transparents, sans ombre, sans bordure, sans rayon, sans padding. Ils restent
     dans le flux (JAMAIS display:none, sinon isFieldShown casserait validation/declencheurs).
     Placee en fin de bloc -> apres toute regle qui leur poserait un fond/ombre. */
  .qs-mode #qualSectorsWrap,
  .qs-mode .wiz-acc-body,
  .qs-mode .wiz-sec-questions,
  .qs-mode .wiz-sec-advance,
  .qs-mode .wiz-secq-body,
  .qs-mode .wiz-socle-body,
  .qs-mode .wiz-qual-sector{
    background:transparent;box-shadow:none;border:0;border-radius:0;padding:0}

  /* ═══ seq 88 ═══ */
  /* Point 2 — NEUTRALISER LES ANCETRES du step (hors de portee des regles .qs-mode) grace a
     .qs-active posee sur le body. Le cadre (.wiz-card, L5 : fond --lvl1 + box-shadow + radius)
     et le blanc (.wiz-wrap, L2) deviennent transparents. On GARDE le padding lateral de .wiz-card.
     Spec (0,2,1) > .wiz-card / .wiz-wrap (0,1,0). */
  body.qs-active .wiz-card{background:transparent;box-shadow:none;border:0;border-radius:0}
  body.qs-active .wiz-wrap{background:transparent}
  /* defaut 3 — l'ecran "Verifiez votre demande" (etape 4) repose sur le gris clair de la charte
     (--lvl1, le fond DESSINE de .wiz-card) au lieu du blanc du body : les cadres blancs du recap
     ressortent. Regle PLUS SPECIFIQUE que la transparence seq 88 ci-dessus (grace a :has) ->
     l'emporte sans !important, uniquement quand l'etape 4 est active. Repli : un navigateur sans
     :has ignore la ligne -> l'ecran reste comme aujourd'hui, jamais casse. */
  body.qs-active .wiz-card:has(.wiz-step[data-step="4"].active){background:var(--wiz-recap-bg)}
  /* N2 (04/08) — ecran des coordonnees (etape 3) : MEME mecanique que l'etape 4, meme jeton --wiz-recap-bg. */
  body.qs-active .wiz-card:has(.wiz-step[data-step="3"].active){background:var(--wiz-recap-bg)}
  /* defaut 3 (coins) — sur telephone/tablette, le rectangle gris de l'etape 4 retrouve ses QUATRE coins
     arrondis : rayon commun du parcours (--card-radius). Desktop non concerne (le gris remplit la colonne
     de droite bord a bord). Aucune interaction avec la barre epinglee : elle n'est sticky qu'en desktop
     (min-width:1024px) ; sur telephone elle est dans le flux -> pas de decrochement a traiter. */
  @media (max-width:1023px){
    body.qs-active .wiz-card:has(.wiz-step[data-step="4"].active){border-radius:var(--card-radius)}
    /* N2 — etape 3 : memes coins arrondis que l'etape 4 sur telephone/tablette. */
    body.qs-active .wiz-card:has(.wiz-step[data-step="3"].active){border-radius:var(--card-radius)}
    /* N1 — fond de page du parcours sur TELEPHONE : pose sur .wiz-wrap (meme element que le degrade de
       bureau), APRES la transparence seq88 (l.1008) -> gagne sous 1024px. Desktop non concerne. */
    body.qs-active .wiz-wrap{background:var(--wiz-fond-mobile)}
  }

  /* Point 3a — GRILLE DU SOCLE : selecteur reel = .wiz-socle-body{display:grid} (L256).
     On la force en UNE SEULE COLONNE. Spec 2 > .wiz-socle-body (spec 1). */
  .qs-mode .wiz-socle-body{display:block}

  /* Point 4 — ANCIENNE REGLE BALAI (seq 87) REECRITE SANS AUCUN !important : la vraie cause (le
     cadre ancetre) est traitee au Point 2. Le balai `*` (spec 2) suffit pour tout, SAUF le champ
     declencheur en @media >=1024 (L538, spec 3) -> une regle ciblee (spec 4) le neutralise,
     toujours sans !important. Les re-declarations (pastille, bouton, barre) sont plus specifiques
     que le balai (spec >=3), donc elles tiennent. */
  .wiz-step.qs-mode,
  .wiz-step.qs-mode *{
    background:transparent;box-shadow:none;border:0;border-radius:0}
  /* seq 1 — le balai ci-dessus (.wiz-step.qs-mode * = specificite 0,2,0) remet a zero contour/fond/coins
     de TOUS les descendants du defile, y compris nos champs texte. On NE LE TOUCHE PAS : on ecrit PLUS
     PRECIS (.wiz-step.qs-mode .wiz-qual-input = 0,3,0 > 0,2,0) pour retablir l'habillage du seul champ,
     sans !important. Reprend les valeurs retenues : contour 1.5px --qs-input-border, fond blanc, coins 12px. */
  .wiz-step.qs-mode .wiz-qual-input{
    background:#ffffff;border:1.5px solid var(--qs-input-border);border-radius:12px}
  .wiz-step.qs-mode .wiz-qual-input:focus{border-color:var(--cta-bg)} /* Q 04/08 : focus jaune d'action */
  .wiz-step.qs-mode .wiz-qual-field[data-qual-trigger="1"]{
    background:transparent;box-shadow:none;border:0;border-radius:0}
  .wiz-step.qs-mode .wiz-qual-pill{
    background:var(--lvl0);border:1px solid var(--border);border-radius:12px}
  .wiz-step.qs-mode .wiz-qual-pill:hover,
  .wiz-step.qs-mode .wiz-qual-pill.selected{
    background:var(--cta-bg);border-color:var(--cta-bg)}
  .wiz-step.qs-mode .qs-required{
    background:var(--cta-bg);border-radius:999px}
  .wiz-step.qs-mode [data-qs-continue]{
    background:var(--btn-bg);border-radius:10px}
  .wiz-step.qs-mode .qs-bar{
    background:var(--border);border-radius:999px}
  .wiz-step.qs-mode .qs-bar-fill{
    background:var(--cta-bg);border-radius:999px}

  /* Point 2 (suite) — sur grand ecran, .wiz-wrap a un degrade (L426) : on le neutralise DANS
     le meme @media, comme demande, pour qu'il ne reprenne pas le dessus. */
  @media (min-width:1024px){
    body.qs-active .wiz-wrap{background:transparent}
  }

  /* ═══ seq 90 — COLONNE DE GAUCHE DISTINCTE (.wiz-header : logo + Retour + fil d'etapes) ═══
     Fond gris froid + trait fin, GLOBAL (visible a toutes les etapes). Aucun degrade, aucune ombre.
     Sous 1024px la colonne est un bandeau AU-DESSUS du contenu -> trait en bas (border-bottom).
     Specificite 1, placee apres .wiz-header (L8 base / L457 desktop). */
  .wiz-header{border-bottom:1px solid var(--rail-line)}
  /* texte discret de la colonne, lisible sur le nouveau fond (2d). On ne touche ni au logo ni
     aux pastilles d'etape (2f). */
  .wiz-back{color:var(--rail-text)}
  .wiz-sidenav-hint{color:var(--rail-text)}
  @media (min-width:1024px){
    /* Colonne de gauche : trait vertical sur TOUTE la hauteur, pas de trait en bas. */
    /* seq3 : fond de la colonne de gauche en vert sauge DESATURE et MAT (jeton dedie --wiz-rail-bg),
       plus soutenu et moins vif que --accent. Texte (--rail-text) et lien retour lisibles (>=4,5:1). */
    .wiz-header{background:var(--wiz-rail-bg);border-bottom:0;border-right:1px solid var(--rail-line);align-self:stretch;min-height:100vh}
    /* 2c — la teinte vient UNIQUEMENT de la colonne : on neutralise le degrade de .wiz-wrap (L426). */
    .wiz-wrap{background:transparent}
    /* seq (defaut fond gris) — a l'etape 4, le gris --lvl1 remplit TOUTE la colonne de droite,
       bord a bord (la carte etant plafonnee a 1000px centree, elle laissait des bandes blanches).
       Degrade a arret net : transparent sur la colonne de gauche (0->320px = largeur fixe de la grille,
       laissee au vert), gris a partir de 320px. Regle plus specifique (:has) que .wiz-wrap transparent
       ci-dessus -> l'emporte sans !important. Le contenu (carte 1000px) reste centre par-dessus. */
    /* seq — RETOUR AU BEIGE : etapes 3 ET 4 sur le beige --field-panel, bord a bord (arret net a 320px,
       colonne de gauche verte non mordue). ORDINATEUR seul (ces degrades n'existent pas sous 1024px). */
    body.qs-active .wiz-wrap:has(.wiz-step[data-step="4"].active){background:linear-gradient(to right,transparent 320px,var(--field-panel) 320px)}
    body.qs-active .wiz-wrap:has(.wiz-step[data-step="3"].active){background:linear-gradient(to right,transparent 320px,var(--field-panel) 320px)}
    /* la carte de l'etape 4 (fond global gris --wiz-recap-bg de L986, CONSERVE pour le MOBILE) passe au
       beige sur ORDINATEUR pour que la colonne soit uniforme. Meme selecteur que L986, place APRES ->
       gagne sur desktop ; le mobile garde le gris (regle globale inchangee). */
    body.qs-active .wiz-card:has(.wiz-step[data-step="4"].active){background:var(--field-panel)}
    /* N2 — etape 3 sur ORDINATEUR : meme beige --field-panel que l'etape 4 (mirror de la ligne au-dessus). */
    body.qs-active .wiz-card:has(.wiz-step[data-step="3"].active){background:var(--field-panel)}
  }

  /* ═══ seq 91 + 94 — COLONNE DE GAUCHE : contenu en haut + EPINGLAGE (sticky) ═══
     seq 94 : la mise en page verticale et l'ordre passent sur le conteneur interne
     .wiz-rail-inner, qui recoit position:sticky (le contenu suit la lecture). .wiz-header
     garde son fond/trait/hauteur pleine : le fond ne bouge pas, seul le contenu suit.
     MOBILE : .wiz-rail-inner{display:contents} -> ses enfants redeviennent enfants directs
     du .wiz-header et le bandeau horizontal (space-between : logo a gauche, Retour a droite)
     est reproduit a l'identique, sans epinglage. */
  .wiz-rail-inner{display:contents}
  @media (min-width:1024px){
    .wiz-header{justify-content:flex-start}
    /* Mise en page verticale reportee de .wiz-header vers le conteneur interne. */
    .wiz-rail-inner{display:flex;flex-direction:column;gap:1.5rem;width:100%;
      position:sticky;top:0;max-height:100vh;overflow-y:auto}
    /* « Retour a l'accueil » en dernier (colle en bas si de la place). */
    .wiz-back{order:1;margin-top:auto}
  }

  /* ═══ seq 92 — accroche, preuves, recapitulatif vivant (colonne de gauche) ═══
     Visibles UNIQUEMENT en desktop ; en mobile la colonne se reduit au logo (point 3). */
  .wiz-rail-intro,.wiz-rail-recap{display:none}
  @media (min-width:1024px){
    /* a. Accroche : chiffres en gras (var --text-strong), texte lisible sur --rail-bg. */
    .wiz-rail-intro{display:block;text-align:left}
    .wiz-rail-accroche{font-size:.95rem;line-height:1.5;color:var(--text-body);margin:0 0 1rem}
    .wiz-rail-accroche strong{color:var(--text-strong);font-weight:800}
    /* b. Preuves : coche fine terre cuite + texte discret. */
    .wiz-rail-proofs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.55rem}
    .wiz-rail-proofs li{display:flex;align-items:center;gap:.55rem;font-size:.85rem;color:var(--rail-text)}
    .wiz-rail-check{flex:none;width:16px;height:16px;color:var(--cta-bg)}
    /* Recapitulatif vivant. */
    .wiz-rail-recap{display:block;text-align:left}
    .wiz-rail-recap-title{font-family:var(--font-mono);font-size:.72rem;font-weight:700;
      letter-spacing:.08em;text-transform:uppercase;color:var(--rail-text);margin:0 0 .5rem}
    /* seq 93 — ligne empilee en 2 niveaux : libelle (1 seule ligne, tronque en CSS) puis reponse. */
    .wiz-rail-recap-row{display:block;padding:.5rem 0;border-bottom:1px solid var(--rail-line)}
    .wiz-rail-recap-row:last-child{border-bottom:0}
    .wiz-rail-recap-q{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
      font-size:.75rem;color:var(--rail-text);margin-bottom:.15rem}
    .wiz-rail-recap-a{display:block;text-align:left;font-size:.82rem;font-weight:700;
      color:var(--text-strong);line-height:1.35;overflow-wrap:anywhere}
    .wiz-rail-recap-skip{display:block;font-style:italic;color:var(--rail-text);opacity:.7;font-size:.82rem}
    .wiz-rail-recap-empty{font-style:italic;color:var(--rail-text);font-size:.82rem;margin:0}
    /* seq 100 — recap groupe par metier (multidomaine) : intitule du domaine en petites capitales. */
    .wiz-rail-recap-metier{font-size:.7rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;
      color:var(--rail-text);margin:.15rem 0 .3rem}
    .wiz-rail-recap-group + .wiz-rail-recap-group{margin-top:.5rem}
    /* seq 101 — DEFAUT C : parcours termine (etape 5) -> plus de recap ni d'accroche a gauche. */
    body.wiz-parcours-done .wiz-rail-recap,
    body.wiz-parcours-done .wiz-rail-intro{display:none}
  }

  /* seq 95 — l'ecran du defile de l'etape 1 (#s1Screen, cree en JS) reutilise le meme
     centrage vertical que l'etape 2 (memes classes .qs-mode pour tout le reste). */
  @media (min-width:900px){
    .qs-mode #s1Screen{margin-top:auto;margin-bottom:auto}
  }

  /* ═══ seq 96 — GRILLE DE TUILES (module s1, etape 1, quand >=6 reponses ; classe .s1-grid posee
     par s1Render). L'ETAPE 2 N'EST PAS CONCERNEE : ses reponses restent en liste (pas de .s1-grid).
     Tuile : presque carree, tres arrondie, fond blanc + bordure fine (herites de .wiz-qual-pill),
     AUCUNE ombre ; PICTO au-dessus (~34px, 40px telephone), LIBELLE dessous (2 lignes max), pas de
     chevron. Survol/selection : fond var(--cta-bg), libelle+picto var(--cta-text) (herites aussi).
     Colonnes : 4 au-dela de 1100px, 3 entre 800-1100px, 2 en dessous. Meme hauteur (grid-auto-rows:1fr). */
  /*  P6 — PALIER 1 : LE TELEPHONE (au repos, donc au-dessous de 800px).
      Il lit ses propres jetons --s1-tel-*, jamais ceux de l'ordinateur.  */
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid{
    display:grid;gap:var(--s1-tel-ecart);grid-auto-rows:1fr;
    grid-template-columns:var(--s1-cols-tel);
    max-width:var(--s1-largeur);margin:0 auto}
  /*  30/08 — CHAQUE ECRAN SON JETON, sur telephone comme sur ordinateur.  */
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"]{grid-template-columns:var(--s1-cols-tel-famille)}
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"]{grid-template-columns:var(--s1-cols-tel-metier)}
  /*  LA TUILE : pictogramme A GAUCHE, nom a droite, detail sous le nom.
      C'etait un picto au-dessus d'un nom centre, coupe par des points de
      suspension, et les pictos flottaient a des hauteurs differentes.  */
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill{
    flex-direction:row;justify-content:flex-start;align-items:center;gap:.6rem;
    text-align:left;min-height:var(--s1-tel-hauteur);padding:.7rem .8rem;
    border-radius:var(--s1-tel-arrondi)}
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill::after{content:none}
  /*  ALIGNES : le picto ne flotte plus, il est cale au centre de sa boite et
      ne se laisse ni etirer ni comprimer.  */
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto{
    flex:0 0 auto;align-self:center;display:flex;align-items:center;justify-content:center}
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto svg{
    width:var(--s1-tel-picto);height:var(--s1-tel-picto)}
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-corps{
    flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:.12rem}
  /*  LE NOM N EST PLUS COUPE : il dispose de --s1-lignes-nom lignes, et les
      mots longs se cassent plutot que de deborder.  */
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label{
    display:-webkit-box;-webkit-line-clamp:var(--s1-lignes-nom);-webkit-box-orient:vertical;
    overflow:hidden;overflow-wrap:anywhere;line-height:1.2;font-weight:700;
    font-size:var(--s1-tel-nom)}
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail{
    display:-webkit-box;-webkit-line-clamp:var(--s1-lignes-nom);-webkit-box-orient:vertical;
    overflow:hidden;overflow-wrap:anywhere;line-height:1.25;font-weight:400;
    color:var(--text-muted);font-size:var(--s1-tel-detail)}
  /*  Selectionnee, la tuile passe au citron : le detail suit l'encre du reste.  */
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected .s1-pill-detail{
    color:inherit}

  /*  ═══════════════════════════════════════════════════════════════════════
   *   ⚠️ CE BLOC N EST PLUS LA SOURCE DU DESSIN — 04/09/2026
   *  ═══════════════════════════════════════════════════════════════════════
   *
   *  IL ANNONCAIT _maquettes/COMPANIUM_maquette_parcours_telephone_v2.html,
   *  validee le 30/08. CETTE MAQUETTE NE FAIT PLUS FOI. Le dessin du
   *  parcours vient desormais de _maquettes/COMPANIUM_maquette_site_public
   *  .html, du 03/09, qui prime sur toute maquette anterieure -- et sur ce
   *  commentaire.
   *
   *  CE QUI SUIT EST GARDE, ET CE N EST PAS UN OUBLI : le bloc du 03/09 est
   *  ECRIT PLUS BAS DANS CE FICHIER, donc il gagne sur celui-ci. Ce qui
   *  reste ici sert de socle a ce qu il ne redit pas. Une suppression
   *  aurait demande de juger 1 700 lignes une a une, et une seule erreur
   *  y aurait casse un ecran.
   *
   *  Ce que le bloc du 30/08 posait, et qui reste vrai de LUI :
   *  deux colonnes, tuile carree, pictogramme sur une ligne de hauteur
   *  FIXE au-dessus du nom, arrondi administrable.
   *
   *  ⚠️ LES DEUX ECRANS, PAS UN SEUL. L ecran des familles et celui des
   *  sous-categories se ressemblent enfin.
   *
   *  ⚠️ LA LIGNE DE HAUTEUR FIXE EST CE QUI ALIGNE TOUT. Sans elle, un
   *  pictogramme de 30 px et un autre de 26 px poseraient leur nom a deux
   *  hauteurs differentes dans la meme rangee. La ligne fait 34 px quelle que
   *  soit l icone : c est --s1-tuile-picto, et il vient de la base.
   *
   *  ⚠️ ET LA ZONE DE TEXTE RESERVE SES LIGNES : trois sur l ecran des
   *  familles, quatre sur celui des sous-categories. Le texte de toutes les
   *  tuiles demarre donc au meme pixel, qu il tienne sur une ligne ou sur
   *  quatre. C est une reserve, pas une limite : un nom plus long allonge la
   *  zone, il ne se fait pas couper.
   *
   *  ⚠️ AU SURVOL ET A L APPUI, LE PICTOGRAMME REPASSE EN GRAPHITE. Mesure de
   *  la maquette : un pictogramme en couleur sur le citron tombe a 4,1 pour 1,
   *  sous le seuil de 4,5. En graphite il est a 16,2. Et un telephone n a pas
   *  de survol : c est :active qui en tient lieu, et le survol est enferme
   *  dans @media (hover: hover) pour qu il ne colle pas au doigt.
   *
   *  ⚠️ CARREE, LA TUILE ALLONGE L ECRAN DES SOUS-CATEGORIES — mesure du 30/08,
   *  +17,7 % sur les neuf familles. Gerard a choisi le carre en connaissance
   *  de cause. Ce n est donc pas un oubli, et cela ne se rediscute pas ici.
   *
   *  ⚠️ TOUT VIT DANS @media (max-width:799.98px). L ordinateur ne voit pas
   *  une ligne de ce bloc : mesure avant/apres a 1280 et 1440 px, zero
   *  difference.
   */
  @media (max-width:799.98px){
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid{
      gap:var(--s1-tuile-ecart); grid-auto-rows:1fr; }

    /*  ═══════════════════════════════════════════════════════════════════
     *   LA TUILE — RECOPIEE DE LA MAQUETTE, PAS ADAPTEE — 31/08/2026
     *  ═══════════════════════════════════════════════════════════════════
     *  ⚠️ SOURCE PERIMEE — 04/09/2026. Elle disait
     *  _maquettes/COMPANIUM_maquette_parcours_telephone_v2.html, lignes 64
     *  a 92. Cette maquette ne fait plus foi : le dessin vient de
     *  COMPANIUM_maquette_site_public.html, du 03/09, applique plus bas.
     *  Les nombres qui suivent sont ceux du 31/08 ; ils ne servent plus
     *  que la ou le bloc du 03/09 ne dit rien.
     *
     *  ⚠️ QUATRE FOIS J AI CORRIGE L ANCIEN CODE AU LIEU DE POSER CELUI-CI, ET
     *  QUATRE FOIS GERARD A VU DES TUILES DECALEES. Sur la salle de marche, la
     *  carte a ete REMPLACEE en entier et elle a ete bonne du premier coup. La
     *  difference n est pas la difficulte, c est la methode.
     *
     *  CE QUE DIT LA MAQUETTE, ET QU IL FAUT LIRE EN ENTIER :
     *    .t  { display:grid; grid-template-rows: var(--tuile-picto) auto;
     *          row-gap:9px; align-content:center; justify-items:center; }
     *    .t .p { height: var(--tuile-picto); }        <- ligne de hauteur FIXE
     *    .t .n { font-weight:600; line-height:1.25; } <- AUCUN centrage
     *    #ec1 .t .n { min-height: calc(3 * 1.25em); } <- la reserve, SUR LE TEXTE
     *    #ec2.carre .t .n { min-height: calc(4 * 1.25em); }
     *
     *  ⚠️ ET SA PROPRE NOTE DIT POURQUOI CA MARCHE : « les pictogrammes de
     *  chaque rangee sont sur une ligne fixe de 34 px, et LES TEXTES DEMARRENT
     *  TOUS A LA MEME HAUTEUR : c est ce qui les aligne. »
     *  Le texte est donc ANCRE EN HAUT de sa reserve. Je l avais centre dedans
     *  hier soir — encore une interpretation, et elle deplacait la premiere
     *  ligne de chaque libelle.
     *
     *  ⚠️ LA SEULE CHOSE QUE JE NE PRENDS PAS A LA MAQUETTE : SES DESSINS.
     *  Ce sont des exemples. Les pictogrammes viennent de la base — 23 poses
     *  par la migration des pictogrammes, 74 de plus par celle des
     *  sous-categories. La maquette dit COMMENT la tuile est batie ; la base
     *  dit QUEL dessin chaque tuile porte.
     */

    /*  ⚠️ LE NIVEAU INTERMEDIAIRE DISPARAIT DE LA GRILLE.
     *  La maquette n a que DEUX enfants dans la tuile : « .p » et « .n ». Mon
     *  balisage en a un de plus, « .s1-pill-corps », qui enveloppe le nom et le
     *  detail — indispensable SUR ORDINATEUR, ou les deux s affichent.
     *  « display:contents » le fait disparaitre de la grille sans toucher au
     *  balisage : ses enfants deviennent enfants directs de la tuile, exactement
     *  comme dans la maquette. L ordinateur, lui, ne voit pas cette regle.  */
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-corps{
      display:contents; }

    /*  ⚠️ 31/08 — LE CENTRAGE HORIZONTAL, ET C EST LE DEFAUT QU ON CHERCHAIT
     *  DEPUIS TROIS JOURS.
     *
     *  Trois jours de mesures VERTICALES — ecart de pictogramme, vide sous le
     *  texte, reserve de lignes — et personne n avait mesure l HORIZONTAL.
     *  Releve du 31/08, ecran des sous-categories : 22 tuiles sur 31 avaient
     *  leur contenu colle a gauche, avec jusqu a 93 px d ecart entre la marge
     *  de gauche et celle de droite, sur un carre de 154 px.
     *
     *  « Climatisation » : boite de 83 px, 11 px a gauche, 60 px a droite.
     *  Les tuiles PARAISSAIENT centrees uniquement quand leur libelle etait
     *  assez long pour remplir toute la largeur.
     *
     *  POURQUOI. La tuile porte bien « justify-items:center » — mesure, la
     *  valeur calculee le confirme. Mais le nom et le detail sont enveloppes
     *  dans .s1-pill-corps, que « display:contents » fait disparaitre de la
     *  grille. Ses enfants deviennent items de grille SANS recevoir le
     *  justify-items du conteneur : ils restent colles au bord.
     *
     *  La maquette n a pas ce probleme parce qu elle n a pas de niveau
     *  intermediaire — ses deux enfants sont directs. On ecrit donc
     *  explicitement ce qu elle obtient implicitement.
     */
    /*  ⚠️ 04/09 (nuit) — « justify-self:center » RETIRE, MEME SOURCE.
     *  Elle centrait le pictogramme et le texte dans la tuile : a l ecran,
     *  « Toiture & Charpente » demarrait quinze pixels plus a droite que
     *  « Facades & Gros oeuvre » de la meme rangee. La maquette du 03/09 cale
     *  a GAUCHE, et sa note le dit : « texte a gauche, jamais justifie ».
     *  La declaration est videe, le selecteur reste pour dire ce qu il fut. */
    /*  ⚠️ RETIRE LE 06/09 : « justify-self:start ». Elle pesait (0,6,0) --
        un cran de plus que la couche v2 -- et tenait le pictogramme et le
        texte COLLES A GAUCHE de leur tuile. Mesure du 06/09 : le centre du
        pictogramme etait a -123,5 px du centre de la tuile.
        Elle venait de la maquette du 03/09, qui calait a gauche ; la v2
        centre, et c est elle qui fait foi depuis le 05/09 (§18.1).     */

    /*  LA TUILE — maquette ligne 64.  */
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] .wiz-qual-pill,
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"] .wiz-qual-pill{
      background:#fff; border-radius:var(--s1-tuile-rayon); padding:14px 10px;
      /*  ⚠️ 31/08 — « grid-template-columns:100% », ET C EST LA VRAIE CAUSE DU
       *  DECALAGE. Mesure : la colonne implicite de la tuile ne faisait que
       *  83 px au lieu de 132 sur « Climatisation ». Une grille sans colonne
       *  declaree en cree une qui se dimensionne SUR SON CONTENU ; les items y
       *  etaient bien centres, mais LA COLONNE, elle, restait collee a gauche.
       *  D ou 22 tuiles sur 31 decalees, jusqu a 93 px d ecart.
       *
       *  ⚠️ LA MAQUETTE PORTE LE MEME DEFAUT — elle ne declare pas de colonne
       *  non plus. Il ne s y voit pas parce que ses neuf libelles de
       *  demonstration sont tous assez longs pour remplir la largeur. Je l ai
       *  mesuree : ecart nul chez elle, sur SES donnees. C est une correction
       *  qu elle ne pouvait pas reveler, et je la signale comme telle.  */
      /*  ⚠️ 04/09/2026 (nuit) — CINQ DECLARATIONS RETIREES ICI, A LEUR SOURCE.
       *  CE BLOC EST LA MAQUETTE DU PARCOURS TELEPHONE DU 30/08. Elle ne fait
       *  PLUS FOI depuis la consigne du 04/09 -- mais son selecteur porte un
       *  ATTRIBUT de plus ([data-s1-ecran="famille"]) que celui du dessin
       *  retenu : (0,5,0) contre (0,4,0). Il gagnait donc en silence, et
       *  aucune regle ecrite plus bas ne pouvait le rattraper.
       *
       *  CE QUE CELA DONNAIT A L ECRAN, sur l ecran de choix des travaux :
       *  une ombre douce a la place du contour noir -- Gerard le voyait, et
       *  ma mesure du 04/09 disait le contraire parce qu elle portait sur une
       *  AUTRE tuile que celle-la. L ecran avait raison.
       *
       *  RETIRE :  box-shadow (l ombre douce)        -> le contour du 04/09
       *            aspect-ratio:1/1                   -> la hauteur reglable
       *            justify-items / text-align:center  -> le texte cale a gauche
       *            display:grid + grid-template-rows   -> la colonne de flex
       *  GARDE  :  le fond, l arrondi, l air interieur, le curseur.
       *
       *  ⚠️ ON N EMPILE PAS UNE REGLE DE PLUS. Une sixieme couche par-dessus
       *  aurait marche jusqu au jour ou quelqu un aurait cherche pourquoi le
       *  meme dessin est ecrit six fois.  */
      cursor:pointer;
      /*  ⚠️ RETIRE LE 07/09 : la transition du FOND. C est ELLE qui faisait
       *  disparaitre le pictogramme au clic sur telephone. Ce selecteur pese
       *  (0,6,0) -- deux crans de plus que la couche v2 -- et il gagnait donc
       *  contre la regle ecrite en fin de feuille.
       *  Releve du 07/09, un point toutes les 20 ms : le dessin passait au
       *  jaune d un coup, le fond mettait 120 ms a devenir bleu nuit, et le
       *  contraste tombait a 1,12 pendant trois pas consecutifs.
       *  SIXIEME declaration retiree de ce bloc perime du 30/08.        */
      min-height:0; }

    /*  LA LIGNE DU PICTOGRAMME — hauteur FIXE, maquette ligne 71.
     *  C est elle qui aligne toute la rangee.  */
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto{
      display:flex; align-items:center; justify-content:center;
      height:var(--s1-tuile-picto); align-self:auto; flex:none; }
    /*  ⚠️ 31/08 — LA TAILLE DU DESSIN DEVIENT UN REGLAGE.
     *  Elle etait ecrite en dur a 30 px : Gerard ne pouvait pas la changer sans
     *  moi. Elle vient desormais de `parcours_picto_dessin`, et la HAUTEUR DE
     *  LA LIGNE qui la porte de `parcours_tuile_picto` — les deux se reglent
     *  depuis l administration. La ligne doit rester un peu plus haute que le
     *  dessin, sinon le dessin touche le texte.  */
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto svg{
      width:var(--s1-picto-dessin); height:var(--s1-picto-dessin); }

    /*  LE NOM — maquette ligne 73. Aucun centrage, aucune coupure.  */
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label{
      display:block; -webkit-line-clamp:none; overflow:visible;
      font-weight:600; line-height:1.25; overflow-wrap:break-word; }

    /*  LA RESERVE DE LIGNES, POSEE SUR LE TEXTE — maquette lignes 85 et 91.
     *  Le nombre de lignes reste administrable ; la maquette dit 3 et 4.  */
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] .s1-pill-label{
      font-size:14px; min-height:calc(var(--s1-lignes-famille) * 1.25em); }
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"] .s1-pill-label{
      font-size:13px; min-height:calc(var(--s1-lignes-sous) * 1.25em); }
    /*  ⚠️ LA LIGNE DE DETAIL DISPARAIT SUR TELEPHONE, ET C EST ELLE QUI
     *  EMPECHAIT LE CARRE : avec elle, la tuile la plus chargee demandait
     *  162,9 px pour 155 de large — il manquait 7,9 px. L ORDINATEUR LA
     *  GARDE : la regle est enfermee ici, sous 800 px.  */
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail{ display:none; }

    /*  LE CHOIX, LE SURVOL ET L APPUI — citron, pictogramme en graphite.  */
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected,
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:active{
      background:var(--s1-tuile-selection); box-shadow:0 2px 5px rgba(20,23,10,.20); }
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected .qs-picto svg,
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:active .qs-picto svg{
      stroke:var(--s1-tuile-encre) !important; color:var(--s1-tuile-encre) !important; }
    /*  ⚠️ LE SURVOL SEULEMENT LA OU IL EXISTE. Sur un telephone, un :hover
     *  reste colle apres le doigt : la tuile resterait jaune apres le retour.  */
    @media (hover: hover){
      .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:hover{
        background:var(--s1-tuile-selection); box-shadow:0 2px 5px rgba(20,23,10,.20); }
      .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:hover .qs-picto svg{
        stroke:var(--s1-tuile-encre) !important; color:var(--s1-tuile-encre) !important; }
    }
  }
  /*  P6 — PALIER 2 : AU-DELA DE 800px. On passe au jeu de l'ordinateur, et
      CHAQUE ECRAN lit son propre jeton de colonnes (marqueur data-s1-ecran).  */
  @media (min-width:800px){
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid{gap:var(--s1-ecart)}
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"]{grid-template-columns:var(--s1-cols-famille)}
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"]{grid-template-columns:var(--s1-cols-metier)}
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill{
      min-height:var(--s1-hauteur);border-radius:var(--s1-arrondi);padding:.85rem 1rem}
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto svg{
      width:var(--s1-picto);height:var(--s1-picto)}
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label{font-size:var(--s1-nom)}
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail{font-size:var(--s1-detail)}
  }
  /*  P6 — PALIER 3 : AU-DELA DE 1100px. Il posait 4 colonnes en dur, ce qui
      laissait la neuvieme categorie seule en bas de la grille. Il reprend
      desormais les MEMES jetons que le palier 2 : c'est le jeton qui decide,
      plus le palier. Les trois paliers sont ainsi traites.  */
  @media (min-width:1100px){
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"]{grid-template-columns:var(--s1-cols-famille)}
    .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"]{grid-template-columns:var(--s1-cols-metier)}
  }
  /*  P6 — LE SUR-TITRE ET LE GRAND TITRE prennent la MEME largeur que la
      grille, et se calent donc sur son bord gauche. Scope #s1Screen : les
      questionnaires de l'etape 2 ne sont pas touches.  */
  #s1Screen .qs-head,
  #s1Screen .wiz-qual-field > .wiz-qual-label{
    max-width:var(--s1-largeur);margin-left:auto;margin-right:auto}
  /* seq — ECRAN COMBINE (etape 1) : sous le titre de la famille, chaque METIER est un TITRE DE GROUPE
     au-dessus de ses tuiles de sous-secteurs. Le titre porte un filet a gauche a la couleur du metier
     (--sec-color, administrable) ; texte en --text-strong (lisible). Tout est visible, on defile. */
  /* seq — meme boite 720px centree que la grille .s1-grid -> la pastille s'aligne sur le BORD GAUCHE
     des tuiles. Ecart entre groupes (2rem) NETTEMENT > ecart pastille/tuiles (.55rem) : repere franc
     au defilement (surtout mobile, 34 tuiles/6 groupes). */
  .s1-groupe{max-width:var(--s1-largeur);margin:0 auto 2rem}   /* P6 : etait 720px en dur */
  /* seq — titre de groupe = PASTILLE : rectangle arrondi (pas gelule), picto + nom cote a cote.
     Fond = couleur du metier TRES PALE (color-mix 14% sur --lvl0) ; picto + texte = couleur PLEINE via
     currentColor. AUCUN contour, AUCUNE ombre. Repli LISIBILITE : le JS pose --pastille-fg:var(--text-strong)
     (fonce) quand le contraste tombe sous 4,5:1 ; sinon --pastille-fg est absent -> couleur pleine du
     metier (--sec-color), ou --accent-dark si le metier n'a pas de couleur. Repli color-mix (vieux
     navigateurs) : --lvl2. */
  .s1-groupe-titre{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--font-display);font-weight:700;font-size:.9rem;line-height:1.2;margin:0 0 .55rem;padding:.32rem .6rem;border:0;box-shadow:none;border-radius:8px;color:var(--pastille-fg, var(--sec-color, var(--accent-dark)));background:var(--lvl2);background:color-mix(in srgb, var(--sec-color, var(--accent-dark)) 14%, var(--lvl0))}
  .s1-groupe-picto{display:inline-flex;flex:none;align-items:center}
  .s1-groupe-picto svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}

  /* ═══ seq 97 — FIL D'ETAPES REMONTE EN HAUT : bandeau horizontal (#wizStepRail) a 2 LIGNES ═══ */
  /* L1 = 4 grandes etapes ; L2 = domaines (etape 2). Les 2 lignes empilees et centrees. */
  .wiz-steprail{flex-direction:column;gap:.5rem}
  .wiz-steprail-line{display:flex;align-items:center;justify-content:center;width:100%;max-width:600px;margin:0 auto}
  .wiz-steprail-line1{gap:.3rem;flex-wrap:nowrap}
  /* d. Les domaines GLISSENT (defilement lateral) : jamais de retour a la ligne, barre masquee,
     hauteur du bandeau CONSTANTE (1 ou 5 domaines). */
  .wiz-steprail-domains{display:flex;flex-wrap:nowrap;align-items:center;gap:.6rem;max-width:100%;
    overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}
  .wiz-steprail-domains::-webkit-scrollbar{display:none}
  .wiz-steprail-line2 .wiz-sidenav-sub{padding:0;flex:none;color:var(--rail-text);white-space:nowrap;font-size:.78rem}
  .wiz-steprail-line2 .wiz-sidenav-sub.current{color:var(--cta-bg);font-weight:700}
  .wiz-steprail-line2 .wiz-sidenav-sub.current .wiz-sidenav-subdot{background:var(--cta-bg)}
  /* passes : une coche a la place du point. */
  .wiz-steprail-line2 .wiz-sidenav-sub.done .wiz-sidenav-subdot{width:auto;height:auto;background:none}
  .wiz-steprail-line2 .wiz-sidenav-sub.done .wiz-sidenav-subdot::after{content:'✓';color:var(--rail-text);font-size:.72rem;line-height:1}
  .wiz-steprail-domains-mobile{font-size:.8rem;color:var(--rail-text);text-align:center;white-space:nowrap;
    overflow:hidden;text-overflow:ellipsis;max-width:100%}
  /* a+b. Grand ecran : le fil HORIZONTAL devient visible en haut ; le fil VERTICAL disparait. */
  @media (min-width:1024px){
    .wiz-steprail{display:flex !important}   /* neutralise le display:none!important de L484 (meme @media) */
    .wiz-sidenav{display:none}
    .wiz-steprail-domains-mobile{display:none}   /* desktop : les chips, pas le texte */
    /* 3. La barre de defilement de la colonne colle au BORD DROIT (contre le trait) : la zone
       qui defile va jusqu'au bord, le texte garde sa marge. */
    .wiz-header{padding-right:0}
    .wiz-rail-inner{padding-right:1.5rem}
  }
  /* e. Telephone : ligne 2 = texte "Domaine X sur Y — nom" (pas les chips). */
  @media (max-width:1023px){
    .wiz-steprail-domains{display:none}
  }

  /* ═══ seq 98 — HABILLAGE DES 3 DERNIERS ECRANS (coordonnees / recap / merci) — APPARENCE SEULE.
     Meme charte que le defile : titre centre, champs en cartes blanches a bordure fine, un seul
     bouton plein anthracite, colonne + fil conserves. Aucune validation/nom/attribut touche. */
  /* Titre du step remonte (le sidebar qui l'affichait a disparu en seq 97), centre. */
  /* T (14/08) — l'ecran d'entree (step 0) est supprime : ces regles ne visent plus que
     les etapes 3 (coordonnees) et 4 (recap). */
  .wiz-step[data-step="3"] .wiz-step-head,
  .wiz-step[data-step="4"] .wiz-step-head{display:block}
  .wiz-step[data-step="3"] .wiz-step-head h2,
  .wiz-step[data-step="4"] .wiz-step-head h2{text-align:center;font-size:1.9rem;line-height:1.2;
    font-weight:800;color:var(--text-strong);margin:0 auto .5rem;max-width:640px}
  .wiz-step[data-step="3"] .wiz-step-hint,
  .wiz-step[data-step="4"] .wiz-step-hint{text-align:center;color:var(--qs-muted);max-width:640px;margin:0 auto 1.5rem}
  /* a. Coordonnees : zone 640px centree, pas de cadre lourd. */
  /* seq — RETOUR AU BEIGE : le panneau des coordonnees reste au beige --field-panel PARTOUT (l'override
     desktop qui le passait au gris a ete retire). Sur ordinateur, le degrade de .wiz-wrap etend ce
     meme beige bord a bord ; le panneau (640px centre) s'y fond -> colonne uniforme. */
  /* Q3 04/08 : plus AUCUN cadre autour de l'etape 3 (coordonnees). Le panneau devient un simple
     conteneur transparent (ni fond, ni bordure, ni rayon, ni ombre) ; les champs (cartes blanches a
     bordure) reposent directement sur le fond gris de la page, mobile ET ordinateur. */
  .wiz-step[data-step="3"] .wiz-fill{max-width:640px;margin:0 auto 1.5rem;background:transparent;box-shadow:none;padding:0;border-radius:0}
  .wiz-step[data-step="3"] .wiz-field{max-width:640px;margin:0 auto 1rem}
  /* Libelle en petites capitales grises au-dessus du champ. */
  .wiz-step[data-step="3"] .wiz-field > label{font-size:.72rem;font-weight:700;letter-spacing:.05em;
    text-transform:uppercase;color:var(--text-strong);margin-bottom:.4rem}
  /* Champ : carte blanche, bordure fine, coins arrondis, hauteur genereuse (comme les cartes de reponse). */
  .wiz-step[data-step="3"] .wiz-field input[type=text],
  .wiz-step[data-step="3"] .wiz-field input[type=email],
  .wiz-step[data-step="3"] .wiz-field input[type=tel],
  .wiz-step[data-step="3"] .wiz-field select{background:var(--lvl0);border:1px solid var(--field-border);
    border-radius:12px;padding:.95rem 1rem;min-height:56px}
  /* UN SEUL bouton plein anthracite (coordonnees + envoi) ; le Retour reste un lien discret (inchange). */
  .wiz-step[data-step="3"] [data-next-from="3"],
  .wiz-step[data-step="4"] [data-submit-final]{background:var(--btn-bg);color:var(--btn-text);
    border:0;border-radius:10px;padding:.85rem 1.6rem;font-weight:700}
  .wiz-step[data-step="3"] [data-next-from="3"]:hover,
  .wiz-step[data-step="4"] [data-submit-final]:hover{background:var(--btn-bg);color:var(--btn-text)}
  .wiz-step[data-step="4"] [data-submit-final]:disabled{opacity:.55}
  /* b. Recap : consentement sans cadre lourd ni ombre ; recap centre 640. */
  .wiz-step[data-step="4"] .wiz-consent{background:transparent;border:0;box-shadow:none;padding:.4rem 0;max-width:640px;margin:0 auto 1.25rem}
  /* seq4 — ORDINATEUR : le bloc consentement (case + texte juridique) recoit un cadre de MEME FORME que
     les autres (arrondi 12px, padding 1rem 1.1rem, meme ecart 1.25rem herite ci-dessus), mais teinte
     VERT PALE --accent (jeton) pour signaler une info importante — PAS une alerte. DECOR SEUL : ni le
     texte, ni la case, ni son id, ni la verification ne sont touches. Contraste texte juridique
     (--text-primary #111315) sur --accent = ~17:1 (parfaitement lisible). Place APRES la globale
     ci-dessus (meme specificite) -> gagne sur desktop ; le MOBILE garde le bloc nu. */
  /* seq — le cadre du consentement prend la MEME FORME que ses voisins (releve sur .wiz-thanks-message :
     rayon 12px, padding 1.15rem 1.25rem, meme ombre ; largeur 640px et ecart au bloc du dessus deja
     identiques). SEULE la couleur differe : vert pale --accent conserve. Decor seul. */
  @media (min-width:1024px){ .wiz-step[data-step="4"] .wiz-consent{background:var(--accent);border-radius:12px;padding:1.15rem 1.25rem;box-shadow:0 4px 14px rgba(20,25,30,.16), 0 1px 0 rgba(20,25,30,.07)} }
  .wiz-step[data-step="4"] .wiz-final-recap,
  .wiz-step[data-step="4"] .wiz-thanks-message{max-width:640px;margin-left:auto;margin-right:auto}
  /* c. Merci : rond terre cuite + coche BLANCHE (l'icone svg herite du stroke via CSS). */
  .wiz-step[data-step="5"] .wiz-thanks-icon{background:var(--cta-bg)}
  .wiz-step[data-step="5"] .wiz-thanks-icon svg{stroke:var(--cta-text)}

  /*  30/08/2026 — LES TROIS REGLES DU BOUTON « Continuer » SONT PARTIES avec
      lui : il ne vivait que sur l ecran « sous », supprime ce jour-la, et la
      maquette validee le proscrit sur les deux ecrans de tuiles. Du style
      pour un element qui n existe plus est une piste qui ne mene nulle part. */

  /* seq 109 — mise en page de la section AIDES du recapitulatif (etape 4). TOUT est scope sous
     .wiz-recap-aides : ces regles n'atteignent JAMAIS l'ecran aides du parcours (memes classes
     .wiz-aides-item/.wiz-aides-check, mais hors de .wiz-recap-aides). Surpasse par specificite
     la regle "carte" (fond/rayon/ombre) posee plus haut, sans !important. */
  .wiz-recap-aides .wiz-aides-item{background:transparent;border:0;border-radius:0;box-shadow:none;padding:.6rem 0}
  .wiz-recap-aides .wiz-aides-item + .wiz-aides-item{border-top:1px solid var(--border)}
  .wiz-recap-aides .wiz-aides-check{background:transparent;border:0;border-radius:0;box-shadow:none;
    border-top:1px solid var(--border);padding:.85rem 0 0;align-items:flex-start;gap:10px}
  .wiz-recap-aides-sep{border-top:1px solid var(--border);margin:20px 0}

  /* seq 131 — ECRAN DE GESTION DES PROJETS. Un seul cadre englobant, lignes separees par un trait fin,
     aucune ombre. Couleurs : uniquement des jetons deja definis. */
  .s1-gestion-phrase{color:var(--qs-muted);margin:0 0 1rem}
  .s1-gestion-liste{border:1px solid var(--border);border-radius:12px;margin-bottom:1rem}
  .s1-gestion-ligne{display:flex;align-items:center;gap:.7rem;padding:.85rem 1rem;cursor:pointer}
  .s1-gestion-ligne + .s1-gestion-ligne{border-top:1px solid var(--border)}
  .s1-gestion-picto{flex:none;display:flex;color:var(--text-strong)}
  .s1-gestion-picto svg{width:26px;height:26px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
  .s1-gestion-corps{flex:1 1 auto;min-width:0}
  .s1-gestion-nom{display:block;font-weight:700;color:var(--text-strong)}
  .s1-gestion-sous{display:block;font-size:.82rem;color:var(--text-muted);overflow-wrap:anywhere}
  .s1-gestion-pastille{flex:none;min-width:22px;height:22px;padding:0 .3rem;border-radius:11px;background:var(--cta-bg);
    color:var(--cta-text);display:inline-flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:800}
  .s1-gestion-croix{flex:none;background:transparent;border:0;color:var(--text-muted);font-size:1.3rem;line-height:1;cursor:pointer;padding:0 .2rem}
  .s1-gestion-ajouter{display:inline-block;margin:0 0 1rem}
  /* seq 137 — ECRAN "VOS DEMANDES" (repere du fil du haut) : liste des metiers + avancement chiffre.
     S'inspire visuellement de l'ecran de gestion (seq 131) SANS le modifier ; classes dediees, pas de
     croix de retrait (le retrait vit dans "Vos besoins"). Couleurs : uniquement des jetons. */
  .wiz-dmd-screen{padding:.5rem 0}
  .wiz-dmd-title{display:block;font-family:var(--font-mono);font-size:.75rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-strong);text-align:center;margin-bottom:.4rem}
  .wiz-dmd-liste{border:1px solid var(--border);border-radius:12px;margin-bottom:1rem}
  .wiz-dmd-ligne{display:flex;align-items:center;gap:.7rem;padding:.85rem 1rem}
  .wiz-dmd-ligne + .wiz-dmd-ligne{border-top:1px solid var(--border)}
  .wiz-dmd-picto{flex:none;display:flex;color:var(--text-strong)}
  .wiz-dmd-picto svg{width:26px;height:26px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
  .wiz-dmd-corps{flex:1 1 auto;min-width:0}
  .wiz-dmd-nom{display:block;font-weight:700;color:var(--text-strong)}
  .wiz-dmd-sous{display:block;font-size:.82rem;color:var(--text-muted);overflow-wrap:anywhere}
  .wiz-dmd-avance{display:block;font-size:.8rem;color:var(--text-muted);margin-top:.15rem}
  .wiz-dmd-modif{flex:none;font-family:var(--font-body);font-size:.85rem;font-weight:700;color:var(--accent-dark);background:none;border:none;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
  .wiz-dmd-modif:hover{color:var(--text-primary)}
  .wiz-dmd-nav{margin-top:1rem;text-align:center}
  .wiz-dmd-retour{font-size:.9rem;color:var(--accent-dark);text-decoration:none}
  .wiz-dmd-retour:hover{text-decoration:underline}


/* ══════════════════════════════════════════════════════════════════════════
   LE PARCOURS, D APRES LA MAQUETTE DU 03/09          04/09/2026
   _maquettes/COMPANIUM_maquette_site_public.html

   ⚠️ CE BLOC EST LE DERNIER DE LA FEUILLE, ET CE N EST PAS UN HASARD. La
   feuille d origine du parcours vient d etre versee juste au-dessus, telle
   quelle : ce qui suit gagne sur elle, sans qu on ait eu a la desosser.
   Aucune de ses regles n a ete supprimee — on les RECOUVRE, la ou la
   maquette dit autre chose. Un desossage aurait demande de juger 1 700
   lignes une a une, et une seule erreur y aurait casse un ecran.

   ⚠️ AUCUN SELECTEUR NEUF DANS LE BALISAGE. On habille les classes qui
   existent — .wiz-*, .s1-*, .qs-* — parce que le JavaScript s y accroche.
   Les quinze reperes du releve du 06/09 sont donc intacts par construction :
   on n a touche a aucun d eux.

   ⚠️ LES NEUF REGLAGES SONT REBRANCHES, un par un, et chacun est nomme dans
   la regle qui le lit.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── LA PAGE : deux colonnes, comme « .par » ─────────────────────────────── */
.wiz-wrap {
  max-width:none; margin:0; padding:0; background:var(--cp-blanc);
  /*  ⚠️ 300 px au lieu de 248 (06/09) : la colonne coupait les libelles de
      question. La troncature est retiree -- le texte passe a la ligne -- et
      la colonne s elargit un peu pour que deux mots y tiennent.        */
  display:grid; grid-template-columns:300px 1fr; min-height:620px;
}

/* ── LA COLONNE LATERALE : « .cote » ─────────────────────────────────────── */
.wiz-header { background:var(--cp-blanc); border-right:1px solid var(--cp-filet);
  border-bottom:0; }
.wiz-rail-inner { padding:24px 20px; }
.wiz-logo { display:flex; align-items:center; gap:10px; text-decoration:none; }
.wiz-logo-img { width:30px; height:30px; }
.wiz-logo-text { font-size:15px; letter-spacing:.4px; color:var(--cp-encre); font-weight:600; }
/*  « .cote h6 » — le titre du recapitulatif.  */
.wiz-rail-recap-title { font-size:10.5px; letter-spacing:1.4px; color:var(--cp-leg);
  margin:20px 0 9px; font-weight:700; text-transform:uppercase; }
/*  « .rep » — une reponse deja donnee.  */
.wiz-rail-recap-row { padding:9px 0; border-bottom:1px solid var(--cp-filet); }
.wiz-rail-recap-q { font-size:11px; color:var(--cp-leg); display:block; }
.wiz-rail-recap-a { font-size:13px; color:var(--cp-titre); font-weight:600; line-height:1.3; }
.wiz-rail-recap-empty { font-size:12.5px; color:var(--cp-leg); font-style:italic; }
.wiz-rail-recap-metier { font-size:10.5px; letter-spacing:1.2px; color:var(--cp-leg);
  margin:14px 0 4px; font-weight:700; text-transform:uppercase; }
/*  « .ret » — le retour a l accueil.  */
.wiz-back { margin-top:20px; font-size:13px; color:var(--cp-txt); text-decoration:none;
  display:inline-flex; align-items:center; gap:7px; font-weight:600; }
.wiz-back:hover { color:var(--cp-titre); }

/* ── LE CORPS : « .corps » ───────────────────────────────────────────────── */
.wiz-card { display:flex; flex-direction:column; padding:24px 32px;
  min-height:620px; min-width:0; max-width:none; margin:0;
  background:var(--cp-blanc); border:0; border-radius:0; box-shadow:none; }

/* ── LE FIL DES ETAPES : « .fil » ────────────────────────────────────────── */
.wiz-steprail { display:flex; align-items:center; justify-content:center;
  margin-bottom:4px; flex-wrap:wrap; background:none; border:0; padding:0; }
.wiz-steprail-line { display:flex; align-items:center; flex-wrap:wrap;
  justify-content:center; }
.wiz-steprail-item { display:flex; align-items:center; gap:8px; padding:4px 11px;
  font-size:12.5px; color:var(--cp-leg); }
.wiz-steprail-num { width:23px; height:23px; border-radius:50%; background:var(--cp-creme);
  display:flex; align-items:center; justify-content:center; font-size:11.5px;
  font-weight:700; font-style:normal; color:var(--cp-leg); flex:none; }
.wiz-steprail-item.current { color:var(--cp-titre); font-weight:700; }
.wiz-steprail-item.current .wiz-steprail-num { background:var(--cp-encre); color:#fff; }
.wiz-steprail-item.done .wiz-steprail-num { background:var(--cp-encre); color:#fff; }
.wiz-steprail-sep { width:34px; height:1px; background:var(--cp-filet); display:block; }

/* ── LA QUESTION : « .q » ────────────────────────────────────────────────── */
/*  ⚠️ « .wiz-step.qs-mode », PAS SEULEMENT « .qs-mode .wiz-step ». La classe
    qs-mode est posee SUR l etape 2 elle-meme (qsScope), pas sur un ancetre :
    la regle descendante ne l atteignait donc JAMAIS, et l ecran s etalait sur
    908 px au lieu des 880 de la maquette. Mesure du 04/09.                  */
#s1Screen, .qs-mode .wiz-step[data-step], .wiz-step.qs-mode[data-step] {
  margin:auto auto; width:100%; max-width:880px; padding:22px 0; min-width:0; }
.qs-head .qs-count, .qs-head { text-align:center; font-size:10.5px; letter-spacing:1.6px;
  font-weight:700; color:var(--cp-leg); margin-bottom:9px; text-transform:uppercase; }
.qs-mode .wiz-qual-field > .wiz-qual-label,
#s1Screen .wiz-qual-field > .wiz-qual-label {
  margin:0 0 8px; font-size:25px; letter-spacing:-.6px; color:var(--cp-titre);
  line-height:1.15; text-align:center; font-weight:600; font-family:inherit; }
.qs-mode .wiz-qual-help, .qs-aide { margin:0 auto 24px; font-size:14.5px;
  color:var(--cp-leg); text-align:center; max-width:62ch; }
/*  L AVERTISSEMENT « MAISON » -- une NOTE, pas une erreur (07/09).
    ⚠️ PAS DE ROUGE, et c est la meme raison qu a la case de consentement
    (CDC 17.12) : le visiteur n a rien fait de mal. Sa demande part quand
    meme, la phrase le dit -- l accuser d une faute serait un mensonge.
    Graisse 400 : 700 reste au seul geste principal de l ecran (CDC 13.5). */
.wiz-qual-warn { margin:0 auto 24px; max-width:62ch; font-size:14.5px;
  font-weight:400; line-height:1.5; text-align:center; color:var(--cp-titre);
  background:rgba(20,23,26,.045); border-radius:10px; padding:10px 14px; }

/* ══ LES TUILES DE METIER — la MEME famille qu a l accueil ════════════════
   « .tu » : pictogramme en haut, nom, ligne de detail. Ce sont les ecrans
   famille, metier et sous-categorie du premier pas.

   LES REGLAGES REBRANCHES ICI, un par un :
     --s1-cols-famille / --s1-cols-metier  les colonnes
     --s1-tuile-ecart                      l ecartement
     --s1-tuile-rayon                      l arrondi
     --s1-tuile-picto                      la LIGNE du pictogramme
     --s1-picto-dessin                     le DESSIN, distinct de sa ligne
     --s1-lignes-famille / --s1-lignes-sous  les lignes reservees au nom
     --s1-tuile-selection                  la couleur de l etat choisi
     --s1-touche-delai                     le temps du retour au toucher     */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid {
  display:grid; gap:var(--s1-tuile-ecart, 10px); grid-auto-rows:1fr;
  grid-template-columns:var(--s1-cols-metier, repeat(3, 1fr));
  max-width:none; margin:0;
}
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] {
  grid-template-columns:var(--s1-cols-famille, repeat(2, 1fr)); }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"] {
  grid-template-columns:var(--s1-cols-metier, repeat(3, 1fr)); }

.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill {
  /*  ⚠️ UNE COLONNE DE FLEX QUI COMMENCE EN HAUT, ET C EST DELIBERE.
      En bloc, l espace libre d une tuile au contenu court se repartissait
      au-dessus et au-dessous : mesure du 04/09, sept tuiles posaient leur
      pictogramme a 26 et deux a 18, sur la meme rangee. Une colonne de
      flex calee sur flex-start ne laisse aucune place a cette repartition. */
  position:relative; display:flex; flex-direction:column;
  justify-content:flex-start; align-items:stretch;
  width:100%; height:100%;
  background:var(--cp-blanc); border:0;
  border-radius:var(--s1-tuile-rayon, 10px);
  padding:18px 17px; min-height:0;
  box-shadow:inset 0 0 0 1px var(--cp-filet);
  text-align:left; color:inherit; font-weight:400;
  /*  ⚠️ align-content:start — MESURE, PAS SUPPOSITION. La regle d origine
      centre le contenu du bouton. Sur un bloc, « align-content » agit
      depuis Chrome 123 : les tuiles au contenu court voyaient donc leur
      pictogramme descendre de 8 pixels par rapport aux autres. Mesure du
      04/09 : sept tuiles a 26, deux a 18, sur la meme rangee.            */
  align-content:start; justify-content:normal;
  transition:transform var(--s1-touche-delai, .13s), box-shadow var(--s1-touche-delai, .13s);
}
/*  Le filet jaune qui apparait au survol, a gauche — signature de la maquette. */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill::before {
  content:""; position:absolute; left:0; top:13px; bottom:13px; width:3px;
  border-radius:0 3px 3px 0; background:transparent;
  transition:background var(--s1-touche-delai, .13s); }
/*  ⚠️ 05/09/2026 (soir) — CETTE REGLE GARDAIT LE FOND BLANC AU SURVOL, ET
    C EST ELLE QUI FAISAIT DISPARAITRE LE TITRE. Elle date du 04/09, quand la
    tuile de metier restait claire au survol. La maquette v2 la veut a
    l ENCRE -- et ma regle v2, ecrite plus bas, donne au titre le BLANC.
    Les deux se sont rencontrees : fond blanc, titre blanc.
    MESURE DU 05/09 sur la page servie : fond rgb(255,255,255), titre
    rgb(255,255,255), CONTRASTE = 1. Le texte n etait pas efface, il etait
    invisible.
    ⚠️ Elle gagnait par « .s1-grid » : (0,5,0) contre (0,4,0). Une regle de
    plus n aurait rien change -- il fallait retirer celle-ci.
    ⚠️ ET LA MEME REGLE POUR LE TELEPHONE RESTE, plus bas dans sa requete de
    media : la, le fond DOIT rester blanc, puisqu il n y a pas de survol.  */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:hover {
  transform:none; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:hover::before {
  background:var(--s1-tuile-selection, var(--cp-jaune)); }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill::after { content:none; }

/*  ⚠️ LA LIGNE DU PICTOGRAMME A UNE HAUTEUR FIXE, ET LE DESSIN SE CENTRE
    DEDANS. Sans cela, un dessin plus haut qu un autre decale le nom qui le
    suit : mesure du 04/09, deux profils de tuile, 8 pixels d ecart entre
    eux sur la meme rangee. C est exactement le defaut que la reserve de
    lignes corrige plus bas pour le NOM ; il fallait le meme pour le DESSIN.
    Les deux reglages sont distincts et c est voulu : --s1-tuile-picto est
    la LIGNE, --s1-picto-dessin est le DESSIN.                             */
/*  ⚠️ align-self:flex-start — LE PICTOGRAMME EST CALE A GAUCHE.
    La maquette pose « .tu svg { display:block } » : un bloc, donc au bord
    gauche. Une regle plus haut dans cette feuille lui donnait
    « align-self:center » -- heritage de l ancienne tuile en ligne, ou le
    picto etait a cote du texte et non au-dessus. Mesure du 04/09 : le
    dessin se posait a 128 pixels du bord d une tuile de 285, c est-a-dire
    au milieu, pendant que le nom demarrait a 17.                        */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto {
  display:flex; align-items:center; justify-content:flex-start;
  align-self:flex-start;
  margin:0 0 10px; height:var(--s1-tuile-picto, 30px); flex:none;
  color:var(--sec-color, var(--cp-gris)); }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto svg {
  width:var(--s1-picto-dessin, 30px); height:var(--s1-picto-dessin, 30px); }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-corps {
  display:block; min-width:0; }
/*  ⚠️ LA HAUTEUR DU NOM EST RESERVEE. C est ce qui fait que la ligne de
    detail demarre a la MEME distance du haut dans toutes les tuiles d une
    rangee, meme quand un nom tient sur une ligne et son voisin sur deux.   */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label {
  display:-webkit-box; -webkit-box-orient:vertical; overflow:hidden;
  -webkit-line-clamp:var(--s1-lignes-nom, 2); line-clamp:var(--s1-lignes-nom, 2);
  min-height:calc(var(--s1-lignes-nom, 2) * 1.25em);
  font-size:14.5px; font-weight:600; color:var(--cp-titre);
  margin-bottom:3px; line-height:1.25; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] {
  --s1-lignes-nom: var(--s1-lignes-famille, 3); }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"],
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="sous"] {
  --s1-lignes-nom: var(--s1-lignes-sous, 4); }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail {
  display:-webkit-box; -webkit-box-orient:vertical; overflow:hidden;
  -webkit-line-clamp:var(--s1-lignes-nom, 2); line-clamp:var(--s1-lignes-nom, 2);
  font-size:12px; color:var(--cp-leg); line-height:1.4; font-weight:400; }
/*  L etat choisi : le fond passe a l encre, comme « .tu.on » de la maquette. */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected {
  background:var(--tu-fond-on); box-shadow:none; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected::before {
  background:var(--s1-tuile-selection, var(--cp-jaune)); }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected .s1-pill-label { color:#fff; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected .s1-pill-detail { color:#A9B0B6; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected .qs-picto {
  color:var(--s1-tuile-selection, var(--cp-jaune)); }

/* ══ LES TUILES DE REPONSE — « .tu.mini » ═════════════════════════════════
   Une ligne : pictogramme, libelle, pastille de choix a droite.
   RONDE pour un choix unique, CARREE pour un choix multiple -- c est le
   « .tu.carre » de la maquette, et c est la seule chose qui distingue les
   deux a l oeil.

   ⚠️ LA PASTILLE EST UN ::after, PAS UN ELEMENT. Ajouter une balise aurait
   demande de toucher au JavaScript qui fabrique ces boutons -- interdit ici,
   et inutile : la pastille ne porte aucune information que la classe
   « selected » ne porte deja.                                             */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) { display:flex;
  flex-direction:column; gap:10px; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill {
  display:flex; align-items:center; gap:12px; width:100%;
  padding:14px 15px; min-height:0; text-align:left;
  background:var(--cp-blanc); border:0;
  border-radius:var(--s1-tuile-rayon, 10px);
  box-shadow:inset 0 0 0 1px var(--cp-filet);
  font-size:14.5px; font-weight:600; color:var(--cp-titre);
  transition:box-shadow var(--s1-touche-delai, .13s), background var(--s1-touche-delai, .13s);
}
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill:hover {
  background:var(--cp-blanc); box-shadow:inset 0 0 0 1.5px var(--cp-encre); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .qs-picto {
  flex:none; width:23px; height:23px; margin:0;
  color:var(--sec-color, var(--cp-gris)); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .qs-picto svg {
  width:23px; height:23px; }
/*  LA PASTILLE. Vide au repos, pleine quand la reponse est retenue.        */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill::after {
  content:""; margin-left:auto; flex:none; width:19px; height:19px;
  border-radius:50%; border:0; transform:none; position:relative;
  box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); }
.qs-mode .wiz-qual-field[data-qual-type="checkbox"] .wiz-qual-options:not(.s1-grid) .wiz-qual-pill::after {
  border-radius:5px; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected {
  background:var(--cp-blanc); color:var(--cp-titre);
  box-shadow:inset 0 0 0 1.5px var(--s1-tuile-selection, var(--cp-jaune)); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected::after {
  box-shadow:inset 0 0 0 1.5px var(--s1-tuile-selection, var(--cp-jaune));
  background:radial-gradient(circle at center,
    var(--s1-tuile-selection, var(--cp-jaune)) 0 45%, transparent 46%); }

/* ── LA NAVIGATION SOUS LA QUESTION : « .nav2 », « .bn », « .bg » ────────── */
.qs-mode .qs-nav { display:flex; gap:11px; margin-top:26px; align-items:center;
  justify-content:center; padding-top:18px; border-top:1px solid var(--cp-filet);
  max-width:880px; margin-left:auto; margin-right:auto; }

/* ── LES CHAMPS DE SAISIE : « .champ » ───────────────────────────────────── */
.qs-mode .wiz-field label, .qs-mode .wiz-qual-input-label {
  display:block; font-size:12.5px; font-weight:700; color:var(--cp-titre);
  margin-bottom:5px; text-align:left; }
.qs-mode .wiz-field input[type=text], .qs-mode .wiz-field input[type=email],
.qs-mode .wiz-field input[type=tel], .qs-mode .wiz-qual-input {
  width:100%; font:inherit; font-size:15.5px; height:50px; padding:0 14px;
  border:0; border-radius:10px; background:var(--cp-blanc); color:var(--cp-titre);
  box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); }

/* ── LE TELEPHONE ────────────────────────────────────────────────────────── */
@media (max-width:760px) {
  .wiz-wrap { grid-template-columns:1fr; min-height:0; }
  .wiz-header { display:none; }
  .wiz-card { padding:16px 15px; min-height:0; }
  .wiz-steprail-label { display:none; }
  .wiz-steprail-sep { width:16px; }
  .qs-mode .wiz-qual-field > .wiz-qual-label,
  #s1Screen .wiz-qual-field > .wiz-qual-label { font-size:19px; }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"],
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"] {
    grid-template-columns:var(--s1-cols-tel-famille, repeat(2, 1fr)); }
}

/* ── POINT 1.7 — CE QUI ETAIT ECRIT DANS LES ATTRIBUTS DE LA PAGE ────────
   Huit attributs style= de DECORATION deviennent des regles. Les quatorze
   autres restent dans la page, et c est justifie :
     douze sont un MASQUAGE que le JavaScript allume et eteint ;
     quatre portent --sec-color, la couleur du metier, VENUE DE LA BASE --
     elle change d une ligne a l autre, aucune feuille ne peut la porter.
   Deux etaient mixtes : le masquage reste, la mise en forme est partie.  */
.wiz-field-colle  { margin-top:0; }
.wiz-field-ancre  { position:relative; }
.wiz-field-court  { flex:0 0 110px; }
.wiz-field-moyen  { flex:0 0 130px; }
.wiz-lien-fort    { color:var(--accent-dark); font-weight:700; }
.wiz-note         { color:var(--text-muted); }
.wiz-hint-ville   { color:var(--text-muted); font-size:.8rem;
                    margin-top:-.9rem; margin-bottom:1rem; }
.wiz-bouton-detache { margin-top:1.5rem; }



/* ══ SEQUENCES 2 ET 3 (04/09/2026) — L ECRAN DE QUESTION AU DESSIN DE LA MAQUETTE ══

   La maquette pose sur UN ecran : un CHAPEAU, un TITRE, une PHRASE
   d explication, puis une ou plusieurs questions -- chacune des suivantes
   precedee d un INTERTITRE (« .sq ») -- et enfin les deux boutons.

   ⚠️ NOTRE BASE NE PORTE PAS DE TITRE D ECRAN. Elle porte des libelles de
   question. Le seul appariement qui n INVENTE AUCUN TEXTE est donc :

       la 1re question de l ecran -> son libelle est le TITRE    (.qs-premier)
       les suivantes              -> leur libelle est l INTERTITRE (.qs-suivant)

   Sur un ecran a une seule question, la seconde regle ne s applique jamais :
   l ecran retrouve exactement le dessin d avant le groupement.

   L AIR, RECOPIE DE LA MAQUETTE :
       .q h3    { margin:0 0 8px }        titre     -> phrase       8 px
       .q .aide { margin:0 auto 24px }    phrase    -> 1re rangee  24 px
       .q .sq   { margin:28px 0 10px }    intertitre  28 dessus, 10 dessous  */
.qs-mode .wiz-qual-field.qs-suivant > .wiz-qual-label {
  margin:28px 0 10px; font-size:16.5px; line-height:1.3;
  letter-spacing:0; text-align:center; font-weight:600; }
/*  ⚠️ 600, ET LA MAQUETTE ECRIT 700. Ce n est pas un oubli : 700 est reserve
    au SEUL geste principal de l ecran (regle des trois graisses, CDC 13.5).
    Un intertitre a la meme graisse que le bouton « Continuer » ferait deux
    gestes principaux sur le meme ecran. Ecart assume, et signale.          */

/*  ⚠️ L AIR SOUS LE TITRE EXISTE MEME SANS PHRASE D EXPLICATION. La plupart
    de nos questions n ont pas de help_text : sans cette regle, la premiere
    rangee remonterait a 8 px du titre au lieu des 24 de la maquette.       */
.qs-mode .wiz-qual-field.qs-premier > .wiz-qual-label + .wiz-qual-options,
.qs-mode .wiz-qual-field.qs-premier > .wiz-qual-label + .wiz-qual-input,
.qs-mode .wiz-qual-field.qs-premier > .wiz-qual-label + .wiz-qual-textarea { margin-top:24px; }

/* ── LA DISPOSITION DES REPONSES — UNE REGLE, PAS UN CHOIX AU CAS PAR CAS ──

   La maquette fixe ses grilles a la main : g3, g2, g2, g4, g4. Nous ne le
   pouvons pas -- nos libelles viennent de la base et changent sans preavis.
   La regle DERIVABLE qui redonne les cinq ecrans de la maquette :

       colonnes = min( nombre de reponses , plafond(plus long libelle) )
       plafond :  <= 19 caracteres -> 4    <= 24 -> 3    <= 34 -> 2    au-dela -> 1

   Verifiee sur les cinq ecrans de la maquette, sans exception :
       type de logement  3 reponses, 23 car. -> min(3,3) = 3   (la maquette : g3)
       vous etes         2 reponses, 12 car. -> min(2,4) = 2   (la maquette : g2)
       financement       4 reponses, 30 car. -> min(4,2) = 2   (la maquette : g2)
       budget            4 reponses, 16 car. -> min(4,4) = 4   (la maquette : g4)
       delai             4 reponses, 19 car. -> min(4,4) = 4   (la maquette : g4)

   Elle est calculee EN PHP a la fabrication de la question et ecrite dans
   data-qs-cols : aucune mesure a l affichage, donc aucune bascule visible au
   chargement.                                                              */
/*  ⚠️ « max-width:640px » ETAIT POSE PLUS HAUT dans cette feuille, du temps ou
    les reponses etaient EMPILEES sur une seule colonne : une colonne large de
    908 aurait donne des tuiles interminables. En grille, il rend le contraire :
    quatre colonnes dans 640 font 154 px, et « 15 000 a 30 000 € » y passe a la
    ligne en laissant l euro tout seul. Mesure du 04/09. La maquette borne son
    ecran de question a 880 (« .q { max-width:880px } »), pas ses reponses.    */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) {
  display:grid; grid-template-columns:1fr; align-items:stretch;
  max-width:none; margin:0;
  gap:var(--s1-tuile-ecart, 8px); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="2"] {
  grid-template-columns:repeat(2, 1fr); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="3"] {
  grid-template-columns:repeat(3, 1fr); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="4"] {
  grid-template-columns:repeat(4, 1fr); }
/*  La grille etire ses cellules : toutes les tuiles d une rangee ont la meme
    hauteur, sans qu aucune hauteur soit ecrite nulle part. C est le meme
    mecanisme que « grid-auto-rows:1fr » sur les tuiles de metier.          */
/*  ⚠️ UNE SEULE DIMENSION DE TUILE DE REPONSE, SUR TOUS LES ECRANS.
    La grille etire deja ses cellules : sur UNE rangee, toutes les tuiles ont
    la meme hauteur. Mais d un ECRAN a l autre, non -- mesure du 04/09 :
    « Maison / Appartement » donnait 51 px, « Premiere installation /
    Remplacement / Depannage ou entretien » donnait 66, parce que le troisieme
    libelle passe a deux lignes. Deux dimensions, donc, et le visiteur voit la
    tuile changer de taille en avancant.
    La hauteur du LIBELLE est donc RESERVEE, comme elle l est deja pour le nom
    des tuiles de metier : deux lignes, le maximum qu un libelle atteint a
    cette largeur. Une tuile d une ligne ne perd qu une ligne, et plus rien ne
    bouge d un ecran a l autre.                                              */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill {
  height:100%; align-items:center;
  min-height:calc(var(--s1-lignes-reponse, 2) * 1.3em + 28px); }
/*  La pastille « Je prefere ne pas repondre » tient TOUTE la rangee : elle
    saute l ecran, elle n est pas une reponse parmi les autres.             */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .qs-skip-pill {
  grid-column:1 / -1; }

/* ── LE LISERE JAUNE AU SURVOL, SUR LES TUILES DE REPONSE AUSSI ───────────
   Releve du 04/09 dans la maquette : « .tu:hover::before{background:var(--jaune)} »
   ne distingue pas « .mini ». Le liisere de 3 px est donc pose sur TOUTES les
   tuiles, reponses comprises -- et il ne l etait chez nous que sur les tuiles
   de metier.
   ⚠️ C est un FOND de 3 px, jamais un texte ni un trait de contour : sur
   fond clair, le jaune ne se lit pas autrement (CDC 14.4).                 */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill {
  position:relative; overflow:hidden; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill::before {
  content:""; position:absolute; left:0; top:10px; bottom:10px; width:3px;
  border-radius:0 3px 3px 0; background:transparent; pointer-events:none;
  transition:background var(--s1-touche-delai, .13s); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill:hover::before,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected::before {
  background:var(--s1-tuile-selection, var(--cp-jaune)); }

/* ── LA COLONNE DE GAUCHE : « .rep » ET SON LIEN « Modifier » ────────────
   Maquette : « .rep a { font-size:11px; color:var(--leg);
                         border-bottom:1px solid var(--filetF) } »
   Un lien SOULIGNE PAR UN FILET, pas par un souligne de texte : c est ce qui
   le distingue de la reponse juste au-dessus sans ajouter de couleur.       */
.wiz-rail-recap-modif { display:inline-block; margin-top:4px; font-size:11px;
  color:var(--cp-leg); text-decoration:none; font-weight:400;
  border-bottom:1px solid var(--cp-filet-fort); }
.wiz-rail-recap-modif:hover { color:var(--cp-titre); border-bottom-color:var(--cp-titre); }

/* ── LES DEUX BOUTONS SOUS L ECRAN : « .bg » et « .bn » ──────────────────
   La maquette : « .nav2 » aligne Precedent a gauche, Continuer a droite, un
   ressort entre les deux. Notre barre centrait tout.                       */
/*  ⚠️ LA QUATRIEME GRAISSE, TROUVEE PAR MESURE LE 04/09.
    Le bandeau du bloc des aides (« Ces travaux peuvent ouvrir droit... »)
    etait en 800 -- seul reste d une echelle a huit graisses. Il ne parait
    jamais PENDANT le defile (la question veut_aides en est exclue), mais il
    parait ailleurs, et une graisse de plus dans la feuille est une graisse de
    plus a l ecran un jour. 600 : c est un titre, comme les autres.
    ⚠️ On cible l element releve, pas tout l ecran : un « * { font-weight } »
    masquerait la prochaine derive au lieu de la montrer (CDC 13.5).       */
.wiz-aides-head { font-weight:600; }

.qs-mode .qs-nav { justify-content:space-between; }
.qs-mode .qs-nav [data-qs-back] { margin-right:auto; }
.qs-mode .qs-nav [data-qs-continue] { margin-left:auto; }

@media (max-width:760px) {
  /*  La maquette : « body.tel .g4, body.tel .g3 { 1fr 1fr } » et
      « body.tel .g2 { 1fr } ». Quatre et trois passent a deux, deux passe a un. */
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="3"],
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="4"] {
    grid-template-columns:repeat(2, 1fr); }
  /*  ⚠️ RETIRE LE 06/09 : « deux passe a un ». Sur telephone, une question a
      deux reponses courtes -- « Maison / Appartement », « Proprietaire /
      Locataire » -- doit tenir sur UNE ligne. Cette regle les empilait, et
      le bouton Continuer sortait de l ecran : mesure du 06/09, son bas a
      868 px pour une fenetre de 844.                                    */
  .qs-mode .wiz-qual-field.qs-suivant > .wiz-qual-label { font-size:15px; margin-top:22px; }
  /*  ⚠️ TROIS LIGNES RESERVEES SUR TELEPHONE, PAS DEUX. Mesure du 04/09 a
      390 px : deux colonnes y font 176 px de large, soit onze caracteres de
      texte utile, et « Depannage ou entretien » y passe a TROIS lignes. La
      reserve de deux lignes redonnait alors deux hauteurs de tuile -- 66 et
      85 -- c est-a-dire exactement le defaut qu elle corrige sur ordinateur.
      La reserve n est pas un nombre absolu : c est le maximum qu un libelle
      atteint A CETTE LARGEUR-LA.                                          */
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) { --s1-lignes-reponse: 3; }
}



/* ══ SEQUENCES 2 ET 3 DU 04/09 (soir) — LES TUILES ET LE CENTRAGE VERTICAL ══

   RELEVE COMPARATIF maquette / page servie, a 1440x1080, avant correction :

     propriete                  maquette      nous      ecart
     hauteur du cadre              786        1314      +528   <-- il DEBORDE
     vide sous le cadre            270        -259      -529       la fenetre
     ecart entre tuiles             12           8        -4
     hauteur d une tuile (fam)     131         158       +27
     hauteur d une tuile (met)     114         125       +11   <-- DEUX hauteurs
     rapport largeur/hauteur      2.18        1.82     -0.36   <-- presque carre
     air titre -> 1re rangee (fam)  54           8       -46
     largeur du bloc               880         880         0
     air interieur d une tuile  18/17px     18/17px        0

   ⚠️ LE CADRE DEBORDAIT DE 259 PIXELS, ET C EST LA CAUSE DU RESTE.
   « .wiz-wrap { min-height:100vh } » (regle du 1024px, plus haut dans cette
   feuille) imposait la hauteur de la FENETRE a un bloc deja pose DANS un
   cadre qui tient lui-meme la hauteur -- plus la marge du cadre (2x24), son
   air interieur (2x22) et le pied France Renov'. Le cadre faisait donc 1314
   pour une fenetre de 1080 : le contenu se calait en haut, et les 259 pixels
   du bas sortaient de l ecran. Ce n est pas le centrage qui manquait, c est
   la hauteur qui etait fausse.

   ⚠️ ON LA SUPPRIME A SA SOURCE, on n empile pas une regle par-dessus.
   Depuis le 07/09, c est le CADRE qui tient la hauteur
   (« .cp-cadre { min-height: calc(100vh - 2 * marge) } »). Le parcours n a
   plus a la tenir : il remplit ce que le site lui laisse.                   */

/*  1. LE SITE REMPLIT LE CADRE, ET SON CONTENU REMPLIT LE SITE.
    Sans cela, le fond ardoise du cadre reparaitrait sous une page courte.   */
.cp-cadre { display:flex; flex-direction:column; }
.cp-site  { flex:1; display:flex; flex-direction:column; min-height:0; }
/*  ⚠️ RIEN NE S ETIRE PAR DEFAUT. Le gabarit pose dans le site le contenu de
    la page, PUIS l encart France Renov', PUIS le pied. Sur l accueil, ce
    contenu est une suite de sections : les laisser s etirer ou se comprimer
    deformerait la page entiere. Seul le conteneur d un ECRAN prend la place
    qui reste -- le parcours et le simulateur, qui sont des ecrans, pas des
    pages qui defilent.                                                      */
.cp-site > * { flex:0 0 auto; }
.cp-site > .wiz-wrap, .cp-site > .cps-par { flex:1 1 auto; min-height:0; }

/*  2. LE PARCOURS NE S IMPOSE PLUS 100vh — NI PAR SA GRILLE, NI PAR SON RAIL.
    ⚠️ DEUX ENDROITS, ET LE SECOND EST CELUI QU ON OUBLIE. Retirer le 100vh de
    « .wiz-wrap » ne changeait RIEN a la mesure : la colonne de gauche
    (« .wiz-header », ligne 1768) en portait un elle aussi, et une cellule de
    grille tire sa grille avec elle. Releve du 04/09 : cadre a 1314 avant, 1314
    apres la premiere correction. On mesure, on ne suppose pas.
    « align-self:stretch » suffit : le rail s etire a la hauteur de la grille,
    il ne la fixe plus.                                                       */
@media (min-width:1024px) {
  .wiz-wrap   { min-height:0; align-items:stretch; }
  .wiz-header { min-height:0; }
}

/*  3. LA CARTE REMPLIT LA COLONNE, ET L ECRAN SE CENTRE DEDANS.
    C est exactement « .corps { display:flex; flex-direction:column } » +
    « .q { margin:auto auto } » de la maquette.

    ⚠️ « margin:auto », PAS « justify-content:center ». La difference compte
    le jour ou le contenu depasse : une marge automatique se reduit a zero et
    le bloc repart du haut, tandis qu un centrage par justify-content coupe
    le HAUT du contenu — on perdrait le titre de la question. C est la
    reponse au point 3.3 de la consigne, et elle tient toute seule.          */
.wiz-card { height:auto; min-height:100%; }
/*  ⚠️ LE FORMULAIRE EST LE MAILLON QU ON OUBLIE. Entre la carte et l ecran, il
    y a un <form> : la carte avait beau etre une colonne de flex, le formulaire
    restait un bloc ordinaire, et l ecran s y calait en haut. Mesure du 04/09 :
    carte 839, formulaire 756, contenu visible 570 -- 186 pixels de vide, tous
    en bas. C est la chaine entiere qui doit conduire la hauteur, pas son
    premier maillon.                                                          */
.wiz-card > form { flex:1; display:flex; flex-direction:column; min-height:0; }
.wiz-card > form > * { flex:0 0 auto; }
/*  L ECRAN ACTIF SE CENTRE, quel qu il soit : choix de famille, de metier, de
    specialite, questionnaire, coordonnees, recapitulatif.                    */
.wiz-card > form > .wiz-step.active,
.qs-mode .wiz-step[data-step], .wiz-step.qs-mode[data-step], #s1Screen {
  margin-top:auto; margin-bottom:auto; }

/*  ⚠️ ET DANS L ETAPE 2, LE CENTRAGE SE FAIT SUR SES BORNES, pas sur un bloc.
    L etape 1 porte un enfant unique (#s1Screen) : sa marge automatique la
    centre. L etape 2 n en a pas — elle porte une suite d elements : la barre
    de progression, le chapeau, les questions, la barre des boutons. Mesure du
    04/09 : 22 px au-dessus, 228 au-dessous. Une marge automatique sur la
    PREMIERE et sur la DERNIERE se partagent l espace a egalite.

    ⚠️ ET ELLES CEDENT TOUTES SEULES quand le contenu depasse : une marge
    automatique se reduit a zero, la ou « justify-content:center » couperait le
    HAUT du contenu -- donc le titre de la question. C est le point 3.3 de la
    consigne, tenu par le choix de la propriete et non par une regle de plus. */
.wiz-step.qs-mode[data-step] { display:flex; flex-direction:column; }
.wiz-step.qs-mode[data-step] > * { flex:0 0 auto; }
.qs-mode .qs-bar  { margin-top:auto; }
.qs-mode .qs-nav  { margin-bottom:auto; }

/* ── LES TUILES DE CHOIX : UNE SEULE HAUTEUR SUR TOUT LE PARCOURS ─────────
   Mesure du 04/09 : 158 px sur l ecran des familles, 125 sur celui des
   metiers. La cause n est pas la reserve du NOM (deja posee) mais celle du
   DETAIL : « -webkit-line-clamp » borne un maximum, il ne reserve rien. Et
   l ecran des specialites n a PAS de ligne de detail du tout — on ne peut
   donc pas reserver sur un element qui n existe pas toujours.

   La hauteur se pose donc sur LA TUILE, et elle est REGLABLE : c est un
   reglage de « Gestion du site public », que Gerard ajuste a l oeil.

   ⚠️ 131 PX EST LA VALEUR DE LA MAQUETTE (285 de large sur 130,7 de haut),
   et elle rend le rapport que la consigne demande : un rectangle nettement
   plus large que haut, 288/131 = 2,20 contre 2,18 dans la maquette. A 158,
   nous etions a 1,82 — presque un carre.                                   */
/*  ⚠️ RETIRE LE 06/09 : LA HAUTEUR IMPOSEE A LA RANGEE. La maquette v2 fait
    la hauteur d une tuile par la SOMME DE SES RANGEES ; une hauteur posee a
    cote ne peut que la contredire. Et elle lisait le meme reglage que la
    hauteur MINI (« tuile_choix_hauteur ») avec le sens inverse : le passer a
    60, valeur de la maquette, ecrasait les ecrans de choix a 60 px pour un
    contenu qui en demande 199 -- air bas mesure a -138,8 le 06/09.       */
/*  La ligne de detail ne pousse plus la tuile : elle occupe la place qui
    reste, et elle se coupe si elle deborde. Le NOM, lui, garde sa reserve
    de deux lignes -- c est le maximum qu un nom atteint a cette largeur.   */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill { overflow:hidden; }
/*  ⚠️ LA LIGNE DE DETAIL SE COUPE PROPREMENT, AVEC SES POINTS DE SUSPENSION.
    Sans ce clamp, l « overflow:hidden » de la tuile tranchait le texte en
    plein milieu d un mot, et a mi-hauteur d une ligne : vu a la mesure du
    04/09 sur « Chauffage & Climatisation, Production d'eau chaude ».
    UNE ligne, et c est ce que la hauteur permet : 131 - 36 (l air interieur)
    - 30 (le pictogramme) - 10 (sa marge) = 55, dont 36 pour les deux lignes
    reservees au nom. Il reste une ligne de detail, pas deux.
    Le nombre est un jeton : il suit la hauteur si Gerard la change.        */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail {
  min-height:0;
  -webkit-line-clamp:var(--s1-lignes-detail, 1); line-clamp:var(--s1-lignes-detail, 1); }

/* ── L AIR SOUS LE TITRE, MEME SANS PHRASE D EXPLICATION ──────────────────
   Mesure : 8 px sur l ecran des familles (qui n a pas d aide), 54 dans la
   maquette. La regle posee plus haut ne visait que « .qs-premier » — une
   marque du questionnaire groupe, que l ecran 1 ne porte pas.              */
#s1Screen .wiz-qual-label + .wiz-qual-options,
#s1Screen .wiz-qual-label + .qs-aide + .wiz-qual-options { margin-top:24px; }
#s1Screen .qs-aide { margin-top:8px; }



/* ══ AJOUT DU 04/09 (soir) — LE BOUTON, L AIR EN HAUT, LES RANGEES ═════════ */

/* ── A — LES DEUX BOUTONS DE LA MAQUETTE, SUR TOUS LES ECRANS ─────────────
   « .bg » : transparent, un filet, a gauche.  « .bn » : a l encre, a droite.
   Le lien discret « ← Retour » disparait : deux gestes de meme importance
   doivent avoir deux dessins de meme famille, sinon le visiteur croit que
   l un des deux n en est pas un.                                           */
.qs-mode .qs-nav .qs-precedent {
  font:inherit; font-size:14.5px; font-weight:600; cursor:pointer;
  padding:14px 20px; border:0; border-radius:11px;
  background:transparent; color:var(--cp-titre);
  box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort);
  transition:box-shadow var(--s1-touche-delai, .13s); }
.qs-mode .qs-nav .qs-precedent:hover { box-shadow:inset 0 0 0 1.5px var(--cp-encre); }

/*  ⚠️ LE BOUTON ETEINT SE VOIT. Un bouton qui refuse en silence fait croire
    a une panne ; celui-la dit qu il attend une reponse. On ne change QUE
    l opacite et le curseur : la forme reste la meme, donc la place aussi. */
.qs-mode .qs-nav [data-qs-continue].qs-eteint {
  opacity:.42; cursor:not-allowed; }

/* ── B — L AIR EN HAUT DE PAGE, ET IL EST REGLABLE ────────────────────────
   Releve de la maquette : « .fil { margin-bottom:4px } » + « .q { padding:
   22px 0 } » = 26 px entre la barre des etapes et le chapeau ; puis
   « .chap { margin-bottom:9px } » entre le chapeau et le titre.

   ⚠️ VAUT SUR TOUTES LES PAGES DU PARCOURS, pas seulement les questions :
   la regle vise « .wiz-step », donc les choix, les coordonnees et l envoi
   en heritent -- et le fil des etapes est le meme partout.                */
/*  ⚠️ UNE SEULE FOIS, SUR L ETAPE. « #s1Screen » vit DANS l etape 1 : le poser
    sur les deux additionnait les deux airs -- 52 px mesures au lieu des 26
    regles. Un air qui vaut le double du reglage est un reglage qui ment.  */
.wiz-card > form > .wiz-step { padding-top:var(--sd-parcours-air-haut, 26px); }
#s1Screen { padding-top:0; }
.wiz-steprail { margin-bottom:0; }
.qs-head .qs-count, .qs-head { margin-bottom:9px; }

/* ── C — LES RANGEES INCOMPLETES ──────────────────────────────────────────
   LE DEFAUT : quatre reponses sur trois colonnes, et la quatrieme s etirait
   sur toute la largeur. La cause etait a moi : « .qs-skip-pill { grid-column:
   1 / -1 } », pose le 04/09 au matin pour que la pastille « Je prefere ne pas
   repondre » tienne sa rangee. Elle occupait autant que les trois autres
   reunies.

   ⚠️ ET UNE GRILLE NE CENTRE PAS SA DERNIERE RANGEE. « repeat(N, 1fr) » cale
   les cellules restantes a gauche, quoi qu on fasse : les colonnes existent
   meme vides. On passe donc en FLEX, ou chaque tuile porte la largeur
   qu elle aurait eue dans la grille, et ou « justify-content:center » centre
   la rangee incomplete. La largeur se calcule, elle ne s estime pas :
       largeur = (100% - (N - 1) x ecart) / N                               */
/*  ⚠️ « flex-flow: row wrap », ET LE MOT « row » COMPTE. Une regle posee plus
    haut dans cette feuille met « flex-direction:column » sur ces memes
    conteneurs -- du temps ou les reponses etaient empilees. Sans le dire
    ici, elle restait en vigueur : le flex-basis calcule s appliquait alors
    a la HAUTEUR, et les neuf tuiles se rangeaient en UNE colonne, chacune
    large de 880. Mesure du 04/09 : width 880, height 141,6 au lieu de
    285 x 131. Une propriete heritee qu on ne redit pas est une propriete
    qui decide a notre place.                                             */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid),
/*  ⚠️ RETIRE LE 06/09 : « display:flex » et « justify-content:center ».
    Cette regle du 04/09 faisait des tuiles de choix des elements de flex
    dimensionnes par leur CONTENU. Mesure du 06/09 sur telephone : SIX
    largeurs differentes dans la meme grille -- 319 / 252,8 / 270 / 267,4 /
    360 / 231,4 -- et neuf sur ordinateur. Une grille rend des colonnes
    egales ; c est aussi ce qui tient une hauteur unique par grille
    (« grid-auto-rows:1fr »). Et « justify-content:center » contredisait la
    derniere rangee a gauche, que la v2 demande.                       */
/*  Et la largeur des tuiles cesse d etre imposee : c est le flex-basis qui
    la donne. « width:100% » etait pose sur la tuile, avec une specificite
    plus forte que la regle qui la range.                                 */
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill { width:auto; }

.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) > * {
  flex:0 0 100%; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="2"] > * {
  flex:0 0 calc((100% - 1 * var(--s1-tuile-ecart, 12px)) / 2); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="3"] > * {
  flex:0 0 calc((100% - 2 * var(--s1-tuile-ecart, 12px)) / 3); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="4"] > * {
  flex:0 0 calc((100% - 3 * var(--s1-tuile-ecart, 12px)) / 4); }
/*  La pastille de sortie redevient une tuile comme les autres. */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .qs-skip-pill {
  grid-column:auto; }

/*  Les tuiles de METIER : meme mecanique, et la hauteur reglee se pose
    directement sur la tuile puisqu il n y a plus de rangee de grille.
    ⚠️ SUR « .wiz-qual-pill », PAS SUR « > * » : une regle posee plus haut
    donne « height:100% » a la tuile avec une specificite plus forte, et
    « align-items:stretch » l etirait alors a la hauteur de sa rangee --
    141,6 px mesures au lieu des 131 regles.                             */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid > * {
  flex:0 0 calc((100% - 2 * var(--s1-tuile-ecart, 12px)) / 3); }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] > * {
  flex-basis:calc((100% - (var(--s1-n-famille, 3) - 1) * var(--s1-tuile-ecart, 12px)) / var(--s1-n-famille, 3)); }

@media (max-width:760px) {
  /*  Deux colonnes pour ce qui en avait trois ou quatre, une pour ce qui en
      avait deux -- « body.tel .g4, body.tel .g3 { 1fr 1fr } » de la maquette. */
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="3"] > *,
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="4"] > * {
    flex:0 0 calc((100% - 1 * var(--s1-tuile-ecart, 12px)) / 2); }
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="2"] > * {
    flex:0 0 100%; }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid > *,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] > * {
    flex:0 0 calc((100% - 1 * var(--s1-tuile-ecart, 12px)) / 2); }
}



/* ══ AJOUT DU 04/09 (soir) — PAS DE CADRE SUR TELEPHONE ════════════════════

   Sur un telephone, le site s affichait comme une CARTE posee dans un cadre
   sombre : coins arrondis, marge grise autour, fond sombre visible en haut et
   en bas. Un ecran DANS un ecran, sur un appareil dont l ecran fait deja la
   largeur du contenu -- le cadre ne faisait qu y voler de la place.

   ⚠️ SUR ORDINATEUR LE CADRE RESTE. C est le cadre de l ecran de la charte,
   pose le 07/09 ; on n y touche pas, et aucune de ces regles ne sort de la
   requete de media.

   ⚠️ DEUX CONDITIONS, ET IL FAUT LES DEUX. « .cp-sans-cadre-tel » dit que
   l interrupteur est sur NON -- c est le serveur qui le pose, il ne connait
   pas la largeur de l ecran. La requete de media dit qu on est sur telephone.
   Aucune des deux ne suffit seule.

   ⚠️ L AIR INTERIEUR RESTE. Ce qui disparait, c est le CADRE, pas la
   respiration du contenu : les 15 px de la maquette sont portes par les
   pages elles-memes (.wiz-card, .cps-corps, --ac-gouttiere), pas par le
   cadre -- ils ne bougent donc pas.                                          */
@media (max-width:760px) {
  body.cp-sans-cadre-tel .cp-cadre {
    margin:0; padding:0; border-radius:0; background:transparent;
    max-width:none; min-height:100vh;
  }
  body.cp-sans-cadre-tel .cp-site { border-radius:0; }
  /*  Le fond de la page devient celui du site : sans cela, la moindre
      difference de hauteur laisserait reparaitre une bande sombre.          */
  body.cp-sans-cadre-tel.cp-fond { background:var(--cp-creme); }
}



/* ══ AJOUT DU 04/09 (soir) — LE DESSIN DES TUILES SUR TELEPHONE ════════════

   ⚠️ SUR TELEPHONE UNIQUEMENT. Sur ordinateur rien ne change : la tuile reste
   claire au repos et le lisere jaune parait au survol. C est la maquette, et
   elle reste. Aucune de ces regles ne sort de la requete de media.

   LE DEFAUT : sur un telephone il n y a PAS de survol. Le lisere jaune ne
   paraissait donc que si l on MAINTENAIT le doigt sur la tuile ; au repos,
   rien ne disait qu elle etait touchable.

   AU REPOS : fond blanc, contour, et le lisere jaune de 3 px a gauche, en
   permanence. CHOISIE : fond a l encre, le meme lisere, et le voyant allume --
   c est deja l etat choisi de la maquette, on ne l invente pas, on le garde.

   ⚠️ LE CONTOUR PERMANENT REMPLACE CELUI DU SURVOL, il ne s y ajoute pas.
   Deux « inset ... 0 0 0 Npx » superposes epaissiraient le bord : la regle de
   survol est donc REDITE ici avec la meme valeur qu au repos, pour qu il n y
   ait jamais qu un seul trait -- et pour qu il n y ait aucun etat
   intermediaire entre le repos et la selection.                              */
@media (max-width:760px) {
  /*  1. LES TUILES DE METIER (famille, metier, specialite) ─────────────── */
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:hover {
    background:var(--cp-blanc);
    box-shadow:inset 0 0 0 var(--sd-tuile-tel-trait, 1.5px) var(--sd-tuile-tel-contour, #14171A);
    transform:none;
  }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill::before,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:hover::before {
    background:var(--s1-tuile-selection, var(--cp-jaune));
  }
  /*  CHOISIE : le fond passe a l encre, le lisere reste, le nom passe au blanc.
      L etat choisi de la maquette, inchange.                                */
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected:hover {
    background:var(--tu-fond-on); box-shadow:none; }

  /*  2. LES TUILES DE REPONSE ──────────────────────────────────────────── */
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill,
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill:hover {
    background:var(--cp-blanc);
    box-shadow:inset 0 0 0 var(--sd-tuile-tel-trait, 1.5px) var(--sd-tuile-tel-contour, #14171A);
  }
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill::before,
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill:hover::before {
    background:var(--s1-tuile-selection, var(--cp-jaune)); }
  /*  CHOISIE : fond a l encre, lisere jaune, voyant allume. Le texte et le
      pictogramme passent au blanc, sinon l encre les avalerait.             */
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected,
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected:hover {
    background:var(--tu-fond-on); color:#fff;
    box-shadow:inset 0 0 0 var(--sd-tuile-tel-trait, 1.5px) var(--tu-fond-on); }
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected .qs-picto {
    color:var(--s1-tuile-selection, var(--cp-jaune)); }
  /*  LE VOYANT : le cercle et son point central, en jaune sur l encre.      */
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected::after {
    box-shadow:inset 0 0 0 1.5px var(--s1-tuile-selection, var(--cp-jaune));
    background:radial-gradient(circle at center,
      var(--s1-tuile-selection, var(--cp-jaune)) 0 45%, transparent 46%); }
}


/* ══════════════════════════════════════════════════════════════════════════
   LE SIMULATEUR PHOTOVOLTAIQUE — feuille sortie de
   resources/views/simulator.php le 04/09/2026, telle quelle, dans son ordre.

   ⚠️ MEME RAISON QUE POUR LE PARCOURS : elle vivait DANS la page, donc
   APRES ce fichier dans le document. Toute regle ecrite ici perdait contre
   elle, en silence.

   ⚠️ TOUS SES SELECTEURS SONT PORTES PAR #companium-solar-simulator ou
   prefixes .cps- : rien ne peut mordre sur l accueil ni sur le parcours.

   ⚠️ SIX LIGNES ETAIENT FABRIQUEES PAR PHP — le bouton de fin, dont les
   valeurs viennent des reglages du site public. Elles sont devenues des
   variables --sim-envoi-*, publiees par le gabarit a cote des --sd-*.
   Les valeurs n ont pas bouge : elles ont change de chemin, pas de source.

   ⚠️ UN QUATRIEME BLOC EST RESTE DANS LA PAGE, et ce n est pas un oubli :
   il est ecrit dans un gabarit de chaine JavaScript et compose un AUTRE
   document -- la pre-etude imprimable. Ce n est pas la feuille de la page.
   ══════════════════════════════════════════════════════════════════════════ */

  /*  Regle portee : elle ne vise que ce bloc-ci.  */
  .cps-sortie-haut{max-width:1120px;margin:0 auto;padding:14px 16px 0}
  .cps-sortie-haut a{font-size:14px;font-weight:600;text-decoration:none;
    color:var(--text-muted,#6A7278)}
  .cps-sortie-haut a:hover{text-decoration:underline}
  /*  ⚠️ ET LA SORTIE DE FIN, sous le bouton d envoi : une simulation finie
   *  est un cul-de-sac si rien ne dit ou aller ensuite.  */
  .cps-sortie-fin{display:flex;flex-wrap:wrap;gap:10px 22px;justify-content:center;
    margin:0 0 28px;font-size:14px}
  .cps-sortie-fin a{color:var(--text-muted,#6A7278);text-decoration:none;font-weight:600}
  .cps-sortie-fin a:hover{text-decoration:underline}
  @media (max-width:700px){
    /*  Sur telephone les deux liens tiennent chacun sur sa ligne, centres.  */
    .cps-sortie-fin{flex-direction:column;align-items:center;gap:12px}
  }


    /* SEQ2 — palette "Olive chaud sur fond blanc" (validee Gerard). Jetons nommes dans le scope du
       simulateur ; les jetons app.css utilises par le simulateur sont surcharges LOCALEMENT (aucun impact
       sur le reste du site). Le trait a sa propre valeur (un trait derive du fond blanc serait invisible). */
    #companium-solar-simulator{--sim-accent:#E6FF12;--sim-accent-fonce:#BFD022;--sim-accent-pale:#EFEFEC;--sim-trait:#E6E4DA;--sim-texte:#1A1E20;--sim-texte-doux:#6A7278;--sim-fond:#FFFFFF;--ink:var(--sim-texte);--muted:var(--sim-texte-doux);--soft:var(--lvl3);--soft2:var(--lvl4);--soft3:#D6D9DC;--accent-ink:#071A33;--green:var(--sim-accent);--line:var(--sim-trait);--sim-page:#F4F4F1;--cta-bg:var(--sim-accent);--accent:var(--sim-accent-pale);--accent-dark:var(--sim-accent-fonce);--accent-hover:var(--sim-accent-pale);--accent-soft:var(--sim-accent-pale);--icon-accent:var(--sim-accent);--select-ring:var(--sim-accent);--sim-ico-soleil:#B87333;--sim-ico-courbe:#7A8C2A;--sim-ico-foyer:#6E4E7A;--sim-ico-pertes:#5C6166;--sim-ico-stockage:#2F7A12;--sim-ico-materiel:#3F6E8C;--sim-ico-retenu:var(--sim-accent);--sim-hero-offset:150px;font-family:'Space Grotesk',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:var(--ink);background:var(--sim-page);line-height:1.45}
    #companium-solar-simulator *{box-sizing:border-box}
    #companium-solar-simulator button,#companium-solar-simulator input,#companium-solar-simulator select,#companium-solar-simulator textarea{font:inherit}
    #companium-solar-simulator .wrap{max-width:1120px;margin:0 auto;padding:0 16px}
    #companium-solar-simulator .hero{padding:24px 0 18px;position:relative;overflow:hidden;min-height:calc(100vh - var(--sim-hero-offset));display:flex;flex-direction:column;justify-content:center}   /* SEQ3A : premiere page centree verticalement (menu haut + bandeau France Renov' bas pris en compte via --sim-hero-offset) */
    #companium-solar-simulator .hero:before{content:"";position:absolute;right:-140px;top:-160px;width:360px;height:360px;border-radius:50%;background:transparent;filter:none}
    #companium-solar-simulator .hero-card,.cps-card{position:relative;background:var(--lvl0);border:0;border-radius:32px;box-shadow:0 4px 14px rgba(20,25,30,.16), 0 1px 0 rgba(20,25,30,.07);padding:24px}
    #companium-solar-simulator h1,#companium-solar-simulator h2,#companium-solar-simulator h3,#companium-solar-simulator p{margin:0}
    #companium-solar-simulator h1{font-size:clamp(34px,5vw,54px);line-height:1.02;letter-spacing:-.04em;font-weight:950;color:#050A14}
    #companium-solar-simulator h1 span{display:block;color:var(--green);font-size:.72em}
    #companium-solar-simulator h2{font-size:clamp(24px,3vw,32px);line-height:1.1;font-weight:950;color:var(--ink)}
    #companium-solar-simulator h3{font-size:22px;line-height:1.15;font-weight:950;color:var(--ink)}
    #companium-solar-simulator .section{padding:0 0 22px}
    #companium-solar-simulator .stack{display:grid;gap:22px;padding-bottom:36px}
    #companium-solar-simulator .grid{display:grid;gap:14px}
    #companium-solar-simulator .grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
    #companium-solar-simulator .grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
    #companium-solar-simulator .grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
    #companium-solar-simulator .grid-6{grid-template-columns:repeat(6,minmax(0,1fr))}
    #companium-solar-simulator .head{display:flex;align-items:center;gap:12px;margin-bottom:18px}
    #companium-solar-simulator .head .ico{width:36px;height:36px;color:var(--sim-accent);display:inline-flex;align-items:center;justify-content:center;flex:none}
    #companium-solar-simulator .head .ico svg{width:36px;height:36px;display:block}
    #companium-solar-simulator .badge{display:inline-flex;align-items:center;gap:8px;width:max-content;border-radius:999px;background:var(--soft2);border:0;padding:8px 14px;font-size:12px;font-weight:950;text-transform:uppercase;letter-spacing:.12em;color:var(--ink)}
    #companium-solar-simulator .top-actions{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:18px}
    #companium-solar-simulator .small{font-size:13px;color:var(--muted);font-weight:650;line-height:1.6}
    #companium-solar-simulator .micro{font-size:11px;color:var(--muted);font-weight:800;line-height:1.45}
    #companium-solar-simulator .label{display:block;margin:0 0 8px;font-size:11px;font-weight:950;text-transform:uppercase;letter-spacing:.13em;color:var(--muted)}
    #companium-solar-simulator .field{width:100%;border:1px solid var(--line);background:var(--field-bg);border-radius:18px;padding:13px 14px;outline:none;font-weight:800;color:var(--ink)}
    #companium-solar-simulator .field:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(122,140,42,.25)}
    #companium-solar-simulator .field:disabled{opacity:.55;cursor:not-allowed;background:#fff}
    #companium-solar-simulator .pill-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}
    /* Toutes les pastilles ont la MEME largeur et la MEME hauteur : grille a
       colonnes egales. Un libelle long passe sur deux lignes plutot que d'elargir
       la pastille (avant : `flex`, chaque pastille se dimensionnait sur son texte,
       d'ou des rangees bancales). */
    #companium-solar-simulator .pill-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:8px;align-items:stretch}
    #companium-solar-simulator .pill-grid .pill{width:100%;min-width:0;height:100%}
    #companium-solar-simulator .cps-calc-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}
    #companium-solar-simulator .cps-cf-card{background:#fbfaf7;border-radius:14px;padding:12px 8px;display:flex;flex-direction:column;align-items:center;text-align:center}
    #companium-solar-simulator .cps-cf-svg{width:56px;height:56px;margin-bottom:6px}
    #companium-solar-simulator .cps-cf-t{font-size:12px;font-weight:800;color:#23292D;margin:0}
    #companium-solar-simulator .cps-cf-v{font-size:12px;font-weight:700;color:#071A33;margin:2px 0 0}
    #companium-solar-simulator .cps-cf-d{font-size:10.5px;color:#6b7780;margin:3px 0 0;line-height:1.4}
    @media(max-width:640px){#companium-solar-simulator .cps-calc-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
    #companium-solar-simulator .pill{min-height:42px;border-radius:var(--tile-radius);border:0;background:var(--soft2);color:var(--muted);font-size:12px;font-weight:800;line-height:1.15;padding:9px 12px;cursor:pointer;transition:background .15s ease,color .15s ease;box-shadow:none}
    #companium-solar-simulator .pill:hover{background:var(--soft3);color:var(--ink)}
    /* Zone dépliable « en dire plus sur votre toiture » : sobre, sans bordure. */
    #companium-solar-simulator .cps-roof-more{background:var(--soft2);border-radius:18px;padding:0;overflow:hidden}
    #companium-solar-simulator .cps-roof-more-sum{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 18px;cursor:pointer;list-style:none}
    #companium-solar-simulator .cps-roof-more-sum::-webkit-details-marker{display:none}
    #companium-solar-simulator .cps-roof-more-title{display:block;font-size:14px;font-weight:800;color:var(--ink)}
    #companium-solar-simulator .cps-roof-more-hint{display:block;margin-top:2px;font-size:11.5px;font-weight:600;color:var(--muted)}
    #companium-solar-simulator .cps-roof-more-txt{flex:1;min-width:0}
    /* Le declencheur doit se VOIR : libelle explicite + triangle bien lisible. */
    #companium-solar-simulator .cps-roof-more-cta{display:flex;flex-direction:column;align-items:center;gap:3px;flex:0 0 auto}
    #companium-solar-simulator .cps-roof-more-cta-txt{font-size:10.5px;font-weight:800;color:var(--ink);white-space:nowrap}
    #companium-solar-simulator .cps-roof-more-cta-txt::after{content:'Déplier'}
    #companium-solar-simulator .cps-roof-more[open] .cps-roof-more-cta-txt::after{content:'Replier'}
    #companium-solar-simulator .cps-roof-more[open] .cps-roof-more-cta-txt::after{content:'Cliquer pour replier'}
    #companium-solar-simulator .cps-roof-more-tri{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:999px;background:var(--accent-soft);transition:transform .2s ease}
    #companium-solar-simulator .cps-roof-more-tri svg{width:19px;height:19px;fill:none;stroke:var(--cta-bg);stroke-width:2.8;stroke-linecap:round;stroke-linejoin:round}
    #companium-solar-simulator .cps-roof-more[open] .cps-roof-more-tri{transform:rotate(180deg)}
    #companium-solar-simulator .cps-roof-more-sum:hover .cps-roof-more-tri{transform:scale(1.06)}
    #companium-solar-simulator .cps-roof-more[open] .cps-roof-more-sum:hover .cps-roof-more-tri{transform:rotate(180deg) scale(1.06)}
    #companium-solar-simulator .cps-roof-more-body{padding:0 18px 18px}
    /* Pastille ILLUSTRÉE : dessin au-dessus, libellé dessous. Le tracé hérite de la
       couleur du texte -> gris au repos, anthracite sur le citron sélectionné. */
    #companium-solar-simulator .pill.has-picto{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;height:86px;min-height:86px;padding:9px 5px;border-radius:var(--tile-radius);border:1px solid var(--sim-trait);background:var(--sim-fond);color:var(--ink);box-shadow:0 3px 8px rgba(20,25,30,.22),0 1px 0 rgba(20,25,30,.10)}
    /* SEQ2 — picto en ACCENT sur les tuiles NON selectionnees (sur la tuile active, il reste blanc via currentColor) */
    #companium-solar-simulator .pill.has-picto:not(.active) .cps-choice-picto svg{stroke:var(--sim-accent)}
    /* 21/07/2026 — coche de selection (CSS pur, aucun element HTML ajoute) */
    #companium-solar-simulator .pill.has-picto.active::after{content:'✓';position:absolute;top:8px;right:8px;width:20px;height:20px;border-radius:50%;background:var(--cta-text);color:var(--cta-bg);font-size:12px;line-height:20px;text-align:center}
    #companium-solar-simulator .pill.has-picto .cps-choice-picto{flex:0 0 auto}
    #companium-solar-simulator .cps-choice-picto{display:block;line-height:0}
    #companium-solar-simulator .cps-choice-picto svg{width:var(--picto-size);height:auto;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;display:block}
    #companium-solar-simulator .pill.has-picto .cps-pill-text{display:flex;align-items:center;justify-content:center;flex:1 1 auto;min-height:26px;font-size:10.5px;font-weight:800;line-height:1.2;text-align:center;hyphens:auto;overflow-wrap:anywhere}
    #companium-solar-simulator .pill.active{background:var(--cta-bg);border:0;color:var(--cta-text);box-shadow:none}
    #companium-solar-simulator .hint{margin-top:10px;background:transparent;border:0;border-radius:0;box-shadow:none;padding:0;color:var(--text-muted);font-size:12px;font-weight:700;line-height:1.55}
    #companium-solar-simulator .info{border:0;background:var(--soft2);border-radius:22px;padding:16px;color:var(--ink);font-weight:750}
    #companium-solar-simulator .subcard{border:0;background:var(--soft);border-radius:24px;padding:16px}
    #companium-solar-simulator .metric{border:0;background:var(--result-card-bg);border-radius:22px;padding:16px;min-height:116px;box-shadow:var(--tile-shadow);display:flex;flex-direction:column;height:100%}
    #companium-solar-simulator .metric .name{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:950}
    #companium-solar-simulator .metric .micro{color:var(--muted);margin-top:auto}
    /* 22/07/2026 — picto des paves chiffres (trait vert, en haut de carte) */
    #companium-solar-simulator .cps-metric-ico{color:var(--icon-accent);margin-bottom:8px}
    #companium-solar-simulator .cps-metric-ico svg{width:34px;height:auto;display:block}
    #companium-solar-simulator .metric .value{margin-top:8px;font-size:24px;line-height:1.05;color:var(--result-num);font-weight:950}
    #companium-solar-simulator .metric.green{background:var(--result-card-bg)}
    #companium-solar-simulator .equipment-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px}
    #companium-solar-simulator .toggle{min-height:116px;border-radius:24px;border:0;background:var(--soft2);color:var(--ink);padding:12px;text-align:center;cursor:pointer;font-size:12px;font-weight:800;line-height:1.2;box-shadow:none;transition:background .15s ease}
    #companium-solar-simulator .toggle .emoji{display:flex;align-items:center;justify-content:center;margin:0 auto 10px;width:48px;height:48px;border-radius:16px;background:#E5E7EB;font-size:40px}
    #companium-solar-simulator .toggle.active{background:var(--cta-bg);border:0;color:var(--cta-text);box-shadow:none}
    #companium-solar-simulator .toggle.disabled{cursor:not-allowed;opacity:.55;background:var(--soft)}
    /* V2 — tuiles blanches : relief + survol (choix : logement, personnes, presence, equipements...) */
    #companium-solar-simulator .toggle:not(.active){box-shadow:0 1px 2px rgba(20,25,30,.08)}
    #companium-solar-simulator .toggle:not(.active):hover{background:var(--tile-hover);box-shadow:0 1px 2px rgba(20,25,30,.08);cursor:pointer}
    #companium-solar-simulator .pill.has-picto:not(.active):hover{background:var(--tile-hover);box-shadow:0 5px 12px rgba(20,25,30,.26);cursor:pointer}

    #companium-solar-simulator .cps-equipment-groups{display:grid;gap:18px;margin-top:16px}
    #companium-solar-simulator .cps-equipment-category{border:0;background:transparent}
    #companium-solar-simulator .cps-equipment-title{display:flex;align-items:center;gap:8px;margin:0 0 10px;font-size:13px;font-weight:850;color:#23292D;letter-spacing:-.01em}
    /* Panneau recapitulatif des equipements selectionnes */
    #companium-solar-simulator .cps-equip-layout{display:flex;gap:16px;align-items:flex-start;margin-top:16px}
    #companium-solar-simulator .cps-equip-main{flex:1;min-width:0}
    #companium-solar-simulator .cps-equip-recap{flex:0 0 214px;align-self:flex-start;background:color-mix(in srgb, var(--sim-accent) 6%, #fff);border:0;border-radius:20px;padding:16px 16px;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;min-height:0}/* SEQ2C : fond tres pale teinte d'accent (maquette v9) */
    /* Deux listes dans le panneau (actuels + projets futurs) : titre de section. */
    #companium-solar-simulator .cps-recap-sub{font-size:11px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin:12px 0 7px}
    #companium-solar-simulator .cps-recap-sub:first-of-type{margin-top:0}
    #companium-solar-simulator .cps-recap-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
    #companium-solar-simulator .cps-recap-title{font-size:13px;font-weight:850;color:var(--ink);letter-spacing:-.01em}
    #companium-solar-simulator .cps-recap-count{margin-left:auto;font-size:12px;font-weight:800;background:var(--sim-accent);color:var(--cta-text);border-radius:999px;padding:3px 9px;min-width:22px;text-align:center}/* SEQ2C : pastille ronde accent, texte blanc */
    #companium-solar-simulator .cps-recap-empty{font-size:12px;color:var(--muted);line-height:1.5;margin:0}
    #companium-solar-simulator .cps-recap-list{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding-right:5px;scroll-padding-block:4px}
    /* Ascenseur discret, dans la charte. */
    #companium-solar-simulator .cps-recap-list::-webkit-scrollbar{width:5px}
    #companium-solar-simulator .cps-recap-list::-webkit-scrollbar-thumb{background:rgba(48,56,59,.22);border-radius:999px}
    #companium-solar-simulator .cps-recap-list::-webkit-scrollbar-track{background:transparent}
    #companium-solar-simulator .cps-recap-head{flex:none}
    #companium-solar-simulator .cps-recap-chip{display:flex;align-items:center;gap:7px;width:100%;flex:0 0 auto;min-height:47px;box-sizing:border-box;text-align:left;background:var(--soft);border:0;border-radius:12px;padding:6px 6px 6px 9px;font-family:inherit;color:var(--ink)}
    #companium-solar-simulator .cps-recap-chip-emoji{font-size:15px;line-height:1;flex:none}
    #companium-solar-simulator .cps-recap-chip-label{flex:1;min-width:0;font-size:12.5px;font-weight:700;line-height:1.25}
    #companium-solar-simulator .cps-recap-chip-qty{color:var(--muted);font-weight:700;margin-left:3px}
    /* SEULE la croix supprime : vrai bouton, zone de clic confortable au doigt. */
    #companium-solar-simulator .cps-recap-chip-x{flex:none;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;min-height:26px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--muted);font-size:13px;font-weight:800;line-height:1;cursor:pointer;transition:background .15s,color .15s}
    #companium-solar-simulator .cps-recap-chip-x:hover{background:rgba(179,38,30,.08);color:#b3261e}/* SEQ4B : ancien rouge-brique de suppression remplace par le rouge d'erreur neutre (plus aucune teinte marron) */
    #companium-solar-simulator .cps-cat-count{font-size:11px;font-weight:800;background:var(--accent);color:#23292D;border-radius:999px;padding:2px 8px;margin-left:2px}
    #companium-solar-simulator .cps-equipment-category[open] .cps-cat-count{display:none}
    @media(max-width:980px){
      #companium-solar-simulator .cps-equip-layout{flex-direction:column;gap:12px}
      #companium-solar-simulator .cps-equip-recap{position:sticky;top:0;z-index:6;flex-basis:auto;width:100%}
      /* Liste VERTICALE avec ascenseur : ~3 pastilles visibles, on fait défiler
         pour voir le reste. Le défilement vertical est bien plus naturel au
         pouce que l'horizontal, et l'en-tête + compteur restent toujours vus. */
      #companium-solar-simulator .cps-recap-list{flex-direction:column;flex-wrap:nowrap;gap:8px;max-height:157px;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding-right:4px}
      #companium-solar-simulator .cps-recap-chip{flex:0 0 auto;width:100%}
      #companium-solar-simulator .cps-recap-chip-label{white-space:normal}
      /* Ascenseur discret, dans la charte. */
      #companium-solar-simulator .cps-recap-list::-webkit-scrollbar{width:5px}
      #companium-solar-simulator .cps-recap-list::-webkit-scrollbar-thumb{background:rgba(48,56,59,.22);border-radius:999px}
      #companium-solar-simulator .cps-recap-list::-webkit-scrollbar-track{background:transparent}
    }
    #companium-solar-simulator .cps-equipment-category-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}
    @media(max-width:980px){#companium-solar-simulator .cps-equipment-category-grid{grid-template-columns:repeat(3,1fr)}}
    @media(max-width:640px){#companium-solar-simulator .cps-equipment-category-grid{grid-template-columns:repeat(2,1fr);gap:10px}}
    #companium-solar-simulator .result-power{font-size:clamp(46px,7vw,72px);font-weight:950;letter-spacing:-.06em;line-height:1;color:var(--ink)}
    #companium-solar-simulator .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:52px;border:0;border-radius:999px;padding:12px 18px;font-size:13px;font-weight:950;text-align:center;cursor:pointer;text-decoration:none;line-height:1.2}
    #companium-solar-simulator .btn.dark{background:#23292D;color:#fff!important}
    #companium-solar-simulator .btn.accent{background:var(--cta-bg);color:var(--cta-text)!important}
    #companium-solar-simulator .btn.light{background:#fff;color:var(--ink)!important;border:0}
    #companium-solar-simulator .btn.full{width:100%}
    #companium-solar-simulator .btn[disabled]{opacity:.55;cursor:not-allowed;box-shadow:none;transform:none}
    #companium-solar-simulator .notice{border-radius:22px;background:var(--grey-soft);border:0;padding:14px;color:#23292D;font-size:13px;font-weight:800;line-height:1.55}
    #companium-solar-simulator .battery-reco{border-radius:24px;border:0;background:var(--grey-soft);padding:18px;box-shadow:0 1px 2px rgba(20,25,30,.08)}
    #companium-solar-simulator .battery-reco h3{margin-top:4px}
    #companium-solar-simulator .chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
    #companium-solar-simulator .chip{display:inline-flex;border-radius:999px;background:#fbfaf7;padding:7px 10px;font-size:11px;font-weight:900;color:var(--ink)}
    #companium-solar-simulator .empty{border-radius:26px;background:var(--soft);padding:40px 20px;text-align:center}
    #companium-solar-simulator .hidden{display:none!important}
    #companium-solar-simulator .footer-note{padding:0 0 42px}
    @media(max-width:980px){#companium-solar-simulator .grid-2,#companium-solar-simulator .grid-3,#companium-solar-simulator .grid-4{grid-template-columns:1fr 1fr}#companium-solar-simulator .equipment-grid{grid-template-columns:repeat(3,1fr)}#companium-solar-simulator .pill-grid{grid-template-columns:repeat(2,1fr)}}
    @media(max-width:640px){#companium-solar-simulator .wrap{padding:0 12px}#companium-solar-simulator .hero-card,.cps-card{border-radius:24px;padding:18px}#companium-solar-simulator .grid-2,#companium-solar-simulator .grid-3,#companium-solar-simulator .grid-4{grid-template-columns:1fr}#companium-solar-simulator .equipment-grid{grid-template-columns:repeat(2,1fr);gap:10px}#companium-solar-simulator .toggle{min-height:104px;border-radius:20px}#companium-solar-simulator .pill-grid{grid-template-columns:1fr}#companium-solar-simulator .top-actions{align-items:stretch}#companium-solar-simulator .top-actions .btn{width:100%}#companium-solar-simulator .hero{padding-top:26px}}


    /* CHARTE V4 (23/07/2026) — RETOUR A LA CHARTE D'ORIGINE (lime/beige/cream) extraite du
       fichier de reference simulateur_companium_etapes.html. Zones de LECTURE claires a texte
       NOIR ; palette : vert de charte app.css, aucun lime ; jamais
       un fond general. Les tokens gris des passes precedentes sont remappes ICI, en scope
       simulateur uniquement (le parcours n'est pas touche). Ombres NETTES conservees (anti-flou
       valide en chantier V3 : on ne reintroduit pas le flou des grandes ombres d'origine). */
    #companium-solar-simulator{
      --bg:var(--lvl05);
      --white:var(--lvl0);
      --cream:var(--lvl0);
      --dark:var(--text-strong);
      --black:var(--text-strong);
      --text:var(--text-strong);
      --muted:var(--text-muted);
      --green:var(--accent-dark);
      --soft:var(--lvl1);
      --soft2:var(--lvl1);
      --soft3:var(--lvl1);
      --line:var(--border);
      --accent-ink:var(--text-strong);
      --ink:var(--text-strong);
      --sim-page:#F4F4F1;
      /* remap des tokens gris (passes precedentes) -> palette d'origine, scope simulateur */
      --tile-bg:var(--lvl0); --tile-hover:var(--accent); --field-bg:var(--lvl0);
      --card-bg:var(--lvl0); --band-bg:var(--lvl0); --result-card-bg:var(--lvl0); --grey-soft:var(--lvl1);
      --select-ring:var(--cta-bg);
      background:var(--sim-page);
      color:var(--dark);
      font-family:'Space Grotesk',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
      text-shadow:none;
    }
    #companium-solar-simulator .wrap{max-width:1120px}
    #companium-solar-simulator .hero{padding:54px 0 22px;background:var(--sim-page)}
    #companium-solar-simulator .hero:before{background:transparent;filter:none}
    #companium-solar-simulator .hero-card,
    #companium-solar-simulator .cps-card{
      background:var(--card-bg);
      border:0;
      box-shadow:0 4px 14px rgba(20,25,30,.16), 0 1px 0 rgba(20,25,30,.07);
      border-radius:34px;
    }
    #companium-solar-simulator h1{color:var(--black);font-weight:720;letter-spacing:-.052em}
    #companium-solar-simulator h1 span{color:var(--green);font-weight:430;letter-spacing:-.035em;margin-top:10px}
    #companium-solar-simulator h2,
    #companium-solar-simulator h3{color:var(--dark);font-weight:680;letter-spacing:-.03em}
    #companium-solar-simulator .small,
    #companium-solar-simulator .micro,
    #companium-solar-simulator .hint{color:var(--text-muted);font-weight:500}
    #companium-solar-simulator .label,
    #companium-solar-simulator .metric .name{color:var(--muted);font-weight:700}
    #companium-solar-simulator .badge,
    #companium-solar-simulator .chip{
      background:rgba(122,140,42,.24);
      border:1px solid rgba(122,140,42,.28);
      color:var(--dark);
      font-weight:700;
    }
    #companium-solar-simulator .field,
    #companium-solar-simulator select.field,
    #companium-solar-simulator input.field,
    #companium-solar-simulator textarea.field{
      background:#fff;
      color:#23292D!important;
      border:1px solid rgba(48,56,59,.18);
      box-shadow:0 1px 2px rgba(20,25,30,.08);
      font-weight:650;
      -webkit-text-fill-color:#23292D;
      appearance:auto;
    }
    #companium-solar-simulator select.field option{
      color:#23292D;
      background:#fff;
      font-weight:650;
    }
    #companium-solar-simulator .field::placeholder{color:#68727b;opacity:.78}
    #companium-solar-simulator .field:focus{
      border-color:var(--sim-accent);
      box-shadow:0 0 0 4px rgba(220,188,24,.30),0 8px 20px rgba(48,56,59,.08); /* S3 04/08 : focus jaune d'action (ex olive) */
    }
    /* CHARTE V4 — tuiles de choix : BLANCHES texte noir, HOVER lime pale (Option B), selection lime */
    #companium-solar-simulator .pill{
      background:var(--sim-fond);
      color:var(--ink);
      border:1px solid var(--sim-trait);
      box-shadow:0 3px 8px rgba(20,25,30,.22), 0 1px 0 rgba(20,25,30,.10);
      font-weight:720;
      cursor:pointer;
      transition:background .15s ease,color .15s ease,box-shadow .15s ease,transform .15s ease;
    }
    #companium-solar-simulator .pill:hover{
      background:var(--accent);
      color:var(--black);
      transform:translateY(-1px);
      box-shadow:0 5px 12px rgba(20,25,30,.26);
    }
    #companium-solar-simulator .pill.active{
      background:var(--cta-bg);
      border:0;
      color:var(--cta-text);
      box-shadow:none;
      transform:none;
    }
    #companium-solar-simulator .toggle{
      background:var(--sim-fond);
      color:var(--ink);
      border:1px solid var(--sim-trait);
      box-shadow:0 3px 8px rgba(20,25,30,.22), 0 1px 0 rgba(20,25,30,.10);
      font-weight:720;
      cursor:pointer;
      transition:background .15s ease,color .15s ease,box-shadow .15s ease,transform .15s ease;
      display:flex;
      flex-direction:column;
      align-items:center;
    }
    #companium-solar-simulator .toggle:hover:not(.disabled){
      background:var(--accent);
      transform:translateY(-1px);
      box-shadow:0 5px 12px rgba(20,25,30,.26);
    }
    #companium-solar-simulator .toggle .emoji{background:var(--soft);color:var(--green)}
    #companium-solar-simulator .toggle.active{
      background:var(--cta-bg);
      border:0;
      color:var(--cta-text);
      box-shadow:none;
      transform:none;
    }
    #companium-solar-simulator .toggle.active .emoji{background:transparent;color:var(--cta-text)}
    #companium-solar-simulator .subcard,
    #companium-solar-simulator .hint{background:transparent}
    /* SEQ4a — note "Prime a l'autoconsommation : non disponible" : pas de cadre, texte seul dans le flux */
    #companium-solar-simulator #cps-prime-note{background:transparent;border:0;box-shadow:none;padding:0;margin-top:10px}
    #companium-solar-simulator .info,
    #companium-solar-simulator .metric.green,
    #companium-solar-simulator .battery-reco{background:var(--grey-soft);border-color:var(--line)}
    #companium-solar-simulator .metric{
      border:0;
      box-shadow:var(--tile-shadow);
    }
    #companium-solar-simulator .metric .value{color:var(--result-num);font-weight:750}
    #companium-solar-simulator .metric.green{background:var(--result-card-bg)}
    #companium-solar-simulator .result-power{color:var(--dark);font-weight:750}
    #companium-solar-simulator .result-hero{
      background:#fbfaf7;
      border-color:rgba(48,56,59,.10);
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .btn{
      min-height:48px;
      border-radius:999px;
      border:0;
      font-weight:750;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
      transition:transform .22s ease,box-shadow .22s ease,background .22s ease,color .22s ease,border-color .22s ease;
    }
    #companium-solar-simulator .btn:hover{transform:translateY(-2px);box-shadow:0 1px 2px rgba(20,25,30,.08)}
    /* CHARTE V4 — boutons d'origine : accent = degrade LIME (texte fonce), dark hover lime */
    #companium-solar-simulator .btn.accent{
      background:var(--cta-bg);
      border-color:transparent;
    }
    #companium-solar-simulator #cps-start-simulation{
      color:var(--cta-text)!important;
    }
    #companium-solar-simulator .btn.accent:hover{background:var(--accent-dark)}
    #companium-solar-simulator .btn.dark{
      background:#30383b;
      color:#fff!important;
      border-color:#30383b;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .btn.dark:hover{
      background:var(--cta-bg);
      color:#1f292c!important;
    }
    /*  ⚠️ 04/09/2026 — LE BOUTON DE FIN, AU CENTRE ET EN JAUNE.
     *  Les valeurs viennent des reglages du site public ; celles-ci ne sont
     *  que les replis.  */
    #companium-solar-simulator .cps-envoi{
      margin:var(--sim-envoi-air, 32px) 0;
      display:flex;justify-content:center;
    }
    #companium-solar-simulator .cps-bt-final{
      background:var(--sim-envoi-fond, #E6FF12);
      color:var(--sim-envoi-encre, #14170A)!important;
      border:0;
      font-size:var(--sim-envoi-taille, 17px);
      font-weight:800;
      padding:var(--sim-envoi-padding, 18px 32px);
      border-radius:12px;
      max-width:100%;
      /*  ⚠️ LE LISERE N EST PAS UNE DECORATION. Mesure du 04/09 : le jaune
       *  #E6FF12 sur le blanc de la page donne 1,12 contre 1 — le bouton n a
       *  plus de bord, il flotte. Le texte, lui, donne 16,15 : c est le
       *  CONTOUR qui manque, pas la lisibilite. Il est reglable, et se met a
       *  zero si Gerard le veut sans.  */
      box-shadow:inset 0 0 0 var(--sim-envoi-filet, 2px) var(--sim-envoi-encre, #14170A);
    }
    #companium-solar-simulator .cps-bt-final:disabled{opacity:.5;cursor:not-allowed}
    #companium-solar-simulator .btn.light{
      background:#fff;
      color:#30383b!important;
      border:1px solid var(--lvl3);
      box-shadow:0 3px 8px rgba(20,25,30,.22),0 1px 0 rgba(20,25,30,.10);
    }
    #companium-solar-simulator .btn.light:hover{background:var(--accent);box-shadow:0 5px 12px rgba(20,25,30,.26)}
    #companium-solar-simulator .notice{background:#fff7d8;border-color:var(--line);color:#30383b}
    @media(max-width:640px){
      #companium-solar-simulator .hero{padding-top:30px}
      #companium-solar-simulator .hero-card,
      #companium-solar-simulator .cps-card{border-radius:26px}
      #companium-solar-simulator .btn:hover,
      #companium-solar-simulator .toggle:hover:not(.disabled),
      #companium-solar-simulator .pill:hover{transform:none}
    }


    /* Sélecteur présence en journée : choix doux sans bordures visibles, avec LED */
    #companium-solar-simulator .cps-presence-card{
      background:#fbfaf7;
      border-color:transparent !important;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
      padding:18px;
    }
    #companium-solar-simulator .cps-presence-layout{
      display:grid;
      grid-template-columns:minmax(0,1fr) minmax(390px,.95fr);
      gap:20px;
      align-items:center;
    }
    #companium-solar-simulator .cps-presence-intro{
      display:flex;
      flex-direction:column;
      justify-content:center;
      min-width:0;
    }
    #companium-solar-simulator .cps-presence-intro .small{
      font-size:15px;
      line-height:1.55;
    }
    #companium-solar-simulator #cps-presence-note{
      margin-top:10px !important;
      font-size:12.8px;
      line-height:1.55;
      color:#4f5b61;
    }
    /*  ⚠️ RETIRE LE 06/09 : LE DESSIN PROPRE DES QUATRE BLOCS DE PRESENCE.
        Ils etaient une RANGEE a fond gris, coins a 22, ombre portee, dessin
        de 22 px a gauche et texte a gauche -- et, une fois CHOISIS, un
        REMPLISSAGE JAUNE (« background:var(--cta-bg) ») avec une coche
        noire posee en haut a droite.
        Releve du 06/09, avant : fond rgb(230,255,18), titre rgb(20,23,26).
        Le jaune sur clair ne peut etre qu un FOND, jamais un texte (§14.4) ;
        mais ici c est un bloc de CHOIX, et la maquette n a qu un seul dessin
        pour ce qui se choisit : fond blanc au repos, fond encre et lisere
        jaune une fois retenu. Ce sont donc des tuiles, et rien d autre.
        La carte pale qui les contient reste : c est un encart.           */


    /* Correctifs ciblés : lisibilité des listes/champs + recommandation batterie plus visible */
    #companium-solar-simulator select.field,
    #companium-solar-simulator input.field,
    #companium-solar-simulator textarea.field{
      color:#23292D !important;
      background:#fff !important;
      font-size:15px !important;
      font-weight:650 !important;
      line-height:1.25 !important;
      min-height:52px !important;
      appearance:auto !important;
      -webkit-appearance:auto !important;
      text-align:left !important;
    }
    #companium-solar-simulator select.field{
      padding-right:38px !important;
      cursor:pointer;
    }
    #companium-solar-simulator select.field option{
      color:#23292D !important;
      background:#fff !important;
      font-size:15px !important;
      font-weight:500 !important;
    }
    #companium-solar-simulator .field::placeholder{
      color:#68727b !important;
      opacity:1 !important;
      font-weight:500 !important;
    }
    #companium-solar-simulator .field:disabled{
      color:#7b858c !important;
      background:#fbfaf7 !important;
      opacity:.85 !important;
    }
    #companium-solar-simulator #cps-day-presence{
      text-align:left;
      min-height:78px;
      border:1px solid rgba(122,140,42,.26);
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator #cps-day-presence:not(.accent){
      background:#fbfaf7 !important;
      color:#23292D !important;
    }
    #companium-solar-simulator .battery-reco{
      position:relative;
      border:0 !important;
      background:#fbfaf7 !important;
      box-shadow:0 1px 2px rgba(20,25,30,.08)!important;
      padding:22px !important;
    }
    #companium-solar-simulator .battery-reco .label{
      color:#071A33 !important;
    }
    #companium-solar-simulator .battery-reco h3{
      font-size:clamp(22px,2.5vw,30px);
      letter-spacing:-.035em;
    }
    #companium-solar-simulator .battery-reco .btn{
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    @media(max-width:640px){
      #companium-solar-simulator select.field,
      #companium-solar-simulator input.field{
        font-size:16px !important;
      }
      #companium-solar-simulator #cps-day-presence{
        align-items:flex-start;
        gap:12px;
      }
    }


    /* Correctif mobile uniquement : centrage, grilles et champs sans débordement */
    @media(max-width:640px){
      #companium-solar-simulator{
        width:100% !important;
        max-width:100% !important;
        overflow-x:hidden !important;
      }
      /*  ⚠️ « padding:12px !important » RETIRE LE 06/09 : l air etait compte
          DEUX FOIS. « .cps-corps » porte deja la gouttiere de 15 px ;
          « .wrap » en rajoutait 12, et toute carte du simulateur tombait a
          27 du bord au lieu de 15. Un « !important » ne se recouvre pas.  */
      #companium-solar-simulator .wrap{
        width:100% !important;
        max-width:100% !important;
        margin-left:auto !important;
        margin-right:auto !important;
      }
      #companium-solar-simulator .hero-card,
      #companium-solar-simulator .cps-card{
        width:100% !important;
        max-width:100% !important;
        margin-left:auto !important;
        margin-right:auto !important;
        overflow:hidden !important;
      }
      #companium-solar-simulator .grid,
      #companium-solar-simulator .grid-2,
      #companium-solar-simulator .grid-3,
      #companium-solar-simulator .grid-4,
      #companium-solar-simulator .grid-6{
        grid-template-columns:1fr !important;
        width:100% !important;
        max-width:100% !important;
      }
      #companium-solar-simulator .pill-grid,
      #companium-solar-simulator .equipment-grid{
        width:100% !important;
        max-width:100% !important;
      }
      #companium-solar-simulator input,
      #companium-solar-simulator select,
      #companium-solar-simulator textarea,
      #companium-solar-simulator button,
      #companium-solar-simulator .btn,
      #companium-solar-simulator .field,
      #companium-solar-simulator .metric,
      #companium-solar-simulator .subcard,
      #companium-solar-simulator .info{
        max-width:100% !important;
        min-width:0 !important;
      }
      #companium-solar-simulator .top-actions{
        width:100% !important;
      }
      #companium-solar-simulator .result-power{
        word-break:normal !important;
        overflow-wrap:anywhere !important;
      }
    }


    /* Bloc résultat : solution solaire proposée avec pictogrammes */
    #companium-solar-simulator .cps-solar-solution{
      margin-top:16px;
      border:0 !important;
      background:#fbfaf7;
      border-radius:28px;
      padding:22px;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .cps-solution-intro{
      margin-top:8px;
      color:#4f5b61 !important;
      font-size:15px !important;
      line-height:1.6 !important;
      font-weight:550 !important;
    }
    #companium-solar-simulator #cps-alternative{
      border:0 !important;
      background:transparent !important;
      padding:0 !important;
      margin-top:12px !important;
      color:#4f5b61 !important;
      font-size:14px !important;
      line-height:1.6 !important;
      font-weight:600 !important;
    }
    #companium-solar-simulator .battery-reco{
      border:0 !important;
      box-shadow:0 1px 2px rgba(20,25,30,.08)!important;
    }


    /* Optimisation ciblée de la zone résultats : explication, autoconsommation, batterie, hypothèses */
    #companium-solar-simulator .cps-explain-block{
      margin-top:16px;
      background:#fbfaf7;
      border:0 !important;
      border-radius:26px;
      padding:22px;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .cps-explain-block h3{
      margin-top:4px;
    }
    #companium-solar-simulator #cps-sizing-text{
      margin-top:12px !important;
      text-align:justify;
      color:#4f5b61 !important;
      font-size:14.5px !important;
      line-height:1.7 !important;
      font-weight:520 !important;
    }
    #companium-solar-simulator #cps-sizing-text p{
      margin:0 0 12px !important;
    }
    #companium-solar-simulator #cps-sizing-text p:last-child{
      margin-bottom:0 !important;
    }
    #companium-solar-simulator #cps-alternative{
      text-align:justify;
      background:var(--lvl4) !important;
      border:0 !important;
      border-radius:18px !important;
      padding:13px 15px !important;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .cps-autoconsumption-block{
      margin-top:16px;
      border:0 !important;
      border-radius:26px;
      padding:22px;
      background:#fbfaf7;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .cps-autoconsumption-grid{
      display:grid;
      grid-template-columns:repeat(4,minmax(0,1fr));
      gap:12px;
      margin-top:16px;
    }
    #companium-solar-simulator .cps-auto-card{
      position:relative;
      overflow:hidden;
      border:0 !important;
      border-radius:22px;
      padding:16px;
      min-height:118px;
      background:rgba(255,255,255,.62);
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .cps-auto-card > *{
      position:relative;
      z-index:1;
    }
    #companium-solar-simulator .cps-auto-card .name{
      font-size:10px;
      text-transform:uppercase;
      letter-spacing:.12em;
      color:#68727b;
      font-weight:800;
    }
    #companium-solar-simulator .cps-auto-card .value{
      margin-top:8px;
      font-size:24px;
      line-height:1.05;
      color:#23292D;
      font-weight:760;
    }
    #companium-solar-simulator .cps-auto-card .micro{
      margin-top:7px;
      display:block;
      color:#4f5b61;
      font-weight:520;
    }
    #companium-solar-simulator .cps-hypotheses-block{
      margin-top:16px;
      border:0 !important;
      border-radius:24px;
      background:#fbfaf7 !important;
      padding:18px;
      box-shadow:inset 0 0 0 1px rgba(48,56,59,.08);
    }
    #companium-solar-simulator .cps-assumption-list{
      display:grid;
      gap:8px;
      margin-top:12px;
    }
    #companium-solar-simulator .cps-assumption-row{
      display:grid;
      grid-template-columns:190px minmax(0,1fr);
      gap:12px;
      align-items:start;
      padding:10px 12px;
      border-radius:16px;
      background:rgba(255,255,255,.60);
    }
    #companium-solar-simulator .cps-assumption-row .name{
      font-size:10px;
      text-transform:uppercase;
      letter-spacing:.12em;
      color:#68727b;
      font-weight:800;
    }
    #companium-solar-simulator .cps-assumption-row .small{
      color:#23292D !important;
      font-weight:600 !important;
      line-height:1.45 !important;
    }
    @media(max-width:980px){
      #companium-solar-simulator .cps-autoconsumption-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
    }
    @media(max-width:640px){
      #companium-solar-simulator .cps-explain-block,
      #companium-solar-simulator .cps-autoconsumption-block,
      #companium-solar-simulator .cps-hypotheses-block{padding:18px;border-radius:22px;}
      #companium-solar-simulator .cps-autoconsumption-grid{grid-template-columns:1fr;}
      #companium-solar-simulator .cps-assumption-row{grid-template-columns:1fr;gap:4px;}
      #companium-solar-simulator #cps-sizing-text{text-align:left;}
    }

    /* Correctif affichage groupes d'équipements : les catégories doivent occuper toute la largeur */
    #companium-solar-simulator #cps-current-usages.equipment-grid,
    #companium-solar-simulator #cps-future-usages.equipment-grid{
      display:block !important;
      grid-template-columns:none !important;
      width:100% !important;
      max-width:100% !important;
    }
    #companium-solar-simulator #cps-current-usages .cps-equipment-groups,
    #companium-solar-simulator #cps-future-usages .cps-equipment-groups{
      width:100% !important;
      max-width:100% !important;
      display:grid !important;
      gap:18px !important;
    }





    #companium-solar-simulator .cps-toggle-main{
      appearance:none;
      -webkit-appearance:none;
      border:0;
      background:transparent;
      color:inherit;
      width:100%;
      padding:0;
      margin:0;
      cursor:pointer;
      font:inherit;
      font-weight:inherit;
      line-height:inherit;
      text-align:center;
      display:flex;
      flex-direction:column;
      align-items:center;
      justify-content:flex-start;
    }
    #companium-solar-simulator .cps-qty-controls{
      display:inline-grid;
      grid-template-columns:24px minmax(28px,auto) 24px;
      align-items:center;
      justify-content:center;
      gap:3px;
      margin:auto 0 0;   /* SEQ2D : margin-top:auto -> compteur colle EN BAS de la tuile (flex column), aligne d'une tuile a l'autre */
      padding:10px 3px 2px;
      border-top:1px solid var(--sim-trait);   /* SEQ2D : trait fin qui separe le compteur du contenu */
      border-radius:0;
      background:transparent;
      box-shadow:none;
      width:100%;
    }
    #companium-solar-simulator .cps-qty-btn{
      width:24px;
      height:24px;
      min-height:24px;
      border:0;
      border-radius:999px;
      background:#fff;
      color:#30383b;
      font-size:15px;
      font-weight:900;
      line-height:1;
      cursor:pointer;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
      display:inline-flex;
      align-items:center;
      justify-content:center;
      padding:0;
    }
    #companium-solar-simulator .cps-qty-value{
      min-width:28px;
      text-align:center;
      font-size:12px;
      font-weight:900;
      color:#20282b;
      line-height:1;
    }
    #companium-solar-simulator .toggle:not(.active) .cps-qty-controls{
      opacity:.58;
    }
    #companium-solar-simulator .toggle.active .cps-qty-controls{
      background:transparent;
      box-shadow:none;
      border-top-color:rgba(255,255,255,.35);
    }
    @media(max-width:640px){
      #companium-solar-simulator .cps-qty-controls{
        grid-template-columns:22px minmax(24px,auto) 22px;
        margin-top:7px;
      }
      #companium-solar-simulator .cps-qty-btn{
        width:22px;
        height:22px;
        min-height:22px;
      }
    }



    /*  ⚠️ RETIRE LE 06/09 : SEPT REGLES « !important » QUI FIXAIENT LA TUILE
        DU SIMULATEUR SUR TELEPHONE -- hauteur 84 px, air 8/4, titre a 9,8 px,
        dessin a 31x26, trois colonnes. Elles dataient d avant la maquette
        unique. Mesure du 06/09, avant : hauteur 84 pour un contenu qui en
        demande 127 (34 de dessin + 3,75 em de titre + 2 x 16 d air), donc
        air haut = air bas = 1,8 px et le texte coupe.
        ⚠️ « !important » ne se recouvre pas : il se RETIRE. Une regle plus
        lourde par-dessus n aurait rien change, et deux dessins auraient
        continue de cohabiter dans la feuille.                            */
    @media(max-width:640px){
    }
  

    /*  ⚠️ RETIRE LE 06/09 : CINQ COUCHES SUCCESSIVES SUR LA MEME TUILE.
        « Refonte design », « Refonte finale », « Correctif final demande »,
        « Ajustement final », plus leurs reprises telephone : 603 lignes, presque
        toutes en « !important », qui donnaient a la tuile d equipement trois
        hauteurs contradictoires (148, puis 142, puis 142 a nouveau), deux
        dessins de compteur et un remplissage JAUNE une fois cochee.

        Releve du 06/09, avant : DEUX hauteurs dans la meme grille -- 169 et
        191 sur ordinateur, 155 et 181 sur telephone -- air haut 14, air bas
        11. La consigne demande l air a egalite.

        ⚠️ ON NE POUVAIT PAS RECOUVRIR : « !important » ne perd contre rien
        d autre qu un « !important » plus lourd, et en empiler un sixieme
        aurait laisse cinq dessins concurrents dans la feuille. C est
        exactement le cas que Gerard decrit : on retire A LA SOURCE.
        Le dessin unique de la tuile est ecrit une seule fois, plus bas,
        avec les autres.                                                  */

    /* Ajustement haut simulateur : titre simple + coches sans pastilles, halo indépendant par phrase */
    #companium-solar-simulator .cps-hero-label{
      display:inline-flex;
      align-items:center;
      gap:8px;
      color:#23292D;
      font-size:13px;
      font-weight:780;
      letter-spacing:.02em;
      text-transform:uppercase;
      background:transparent !important;
      border:0 !important;
      box-shadow:none !important;
      padding:0 !important;
    }
    #companium-solar-simulator .cps-hero-label .sun{
      color:#071A33;
      font-size:17px;
      line-height:1;
      filter:drop-shadow(0 0 8px rgba(247,201,72,.38));
    }
    #companium-solar-simulator .cps-hero-checks{
      display:flex;
      flex-wrap:wrap;
      gap:18px;
      margin-top:18px;
    }
    #companium-solar-simulator .cps-hero-check{
      position:relative;
      display:inline-flex;
      align-items:center;
      gap:7px;
      min-height:28px;
      padding:3px 4px;
      border:0 !important;
      border-radius:0 !important;
      background:transparent !important;
      color:#23292D;
      font-size:12.8px;
      font-weight:760;
      line-height:1.25;
      box-shadow:none !important;
      isolation:isolate;
    }
    /* SEQ3b — halo FLOU supprime (fini le rendu pale) : delimitation par le contraste seul */
    #companium-solar-simulator .cps-hero-check::before{
      display:none;
    }
    #companium-solar-simulator .cps-check-box{
      width:auto;
      height:auto;
      flex:0 0 auto;
      display:inline-flex;
      align-items:center;
      justify-content:center;
      border:0 !important;
      border-radius:0 !important;
      background:transparent !important;
      color:var(--cta-text); /* P5-b : le citron sur blanc tombait a 1,71 ; le noir donne 18,16. Le vert d'origine (SEQ3b) n'existe plus dans la charte. */
      font-size:15px;
      font-weight:950;
      line-height:1;
      box-shadow:none !important;
    }
    @media(max-width:640px){
      #companium-solar-simulator .cps-hero-checks{
        display:grid;
        grid-template-columns:1fr;
        gap:8px;
      }
      #companium-solar-simulator .cps-hero-check{
        width:100%;
      }
    }


    /* Modifications consommation retenue + prix kWh compact */
    #companium-solar-simulator .cps-kwh-price-card{
      padding:12px 14px !important;
    }
    #companium-solar-simulator .cps-kwh-price-row{
      display:flex;
      align-items:center;
      gap:8px 10px;
      flex-wrap:wrap;
    }
    #companium-solar-simulator #cps-electricity-price{
      width:92px !important;
      min-width:92px !important;
      max-width:100px !important;
      min-height:42px !important;
      padding:9px 11px !important;
      text-align:center !important;
    }
    /* Surface habitable : champ court + unite COLLEE a cote (elle passait a la
       ligne sur mobile quand le champ prenait toute la largeur). */
    #companium-solar-simulator .cps-surface-row{display:flex;align-items:center;gap:10px;flex-wrap:nowrap}
    #companium-solar-simulator #cps-living-surface{width:110px !important;min-width:90px !important;max-width:120px !important;flex:0 0 auto;text-align:center}
    #companium-solar-simulator .cps-surface-unit{flex:0 0 auto;white-space:nowrap;font-weight:800;color:var(--muted);font-size:13px}
    #companium-solar-simulator .cps-kwh-unit{
      white-space:nowrap;
      color:var(--ink) !important;
      /*  ⚠️ « font-weight:750 !important » RETIRE LE 06/09 : une quatrieme
          graisse, invisible a l oeil face a 700, et qui ne se recouvrait pas.
          La regle des trois est plus bas dans cette feuille.            */
      display:flex !important;
      align-items:center !important;
      min-height:42px !important;
      margin:0 !important;
    }
    #companium-solar-simulator .cps-kwh-price-help{
      margin:0 !important;
      padding:0 !important;
      background:transparent !important;
      border:0 !important;
      flex:1 1 310px;
      min-width:230px;
      line-height:1.45 !important;
    }
    #companium-solar-simulator .cps-consumption-result{
      margin-top:16px;
      border:0 !important;
      border-radius:24px;
      background:#fbfaf7;
      padding:18px;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .cps-consumption-result-grid{
      display:grid;
      grid-template-columns:repeat(3,minmax(0,1fr));
      gap:12px;
      margin-top:14px;
    }
    #companium-solar-simulator .cps-consumption-result-item{
      border-radius:18px;
      background:rgba(255,255,255,.72);
      padding:13px 14px;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    #companium-solar-simulator .cps-consumption-result-detail{
      margin-top:12px !important;
      background:var(--lvl1) !important;
      border-radius:16px !important;
      padding:11px 13px !important;
    }
    @media(max-width:980px){
      #companium-solar-simulator .cps-consumption-result-grid{
        grid-template-columns:1fr;
      }
    }
    @media(max-width:640px){
      #companium-solar-simulator .cps-kwh-price-row{
        align-items:flex-start;
      }
      #companium-solar-simulator .cps-kwh-price-help{
        flex-basis:100%;
        min-width:0;
      }
      #companium-solar-simulator #cps-electricity-price{
        width:88px !important;
        min-width:88px !important;
      }
    }



    /* Objectif de dimensionnement technique */
    #companium-solar-simulator .cps-sizing-goal-card{
      margin-top:16px;
      background:#fbfaf7;
      border-color:transparent !important;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    /*  ⚠️ RETIRE LE 06/09 : LE DESSIN PROPRE DES TROIS BLOCS D OBJECTIF.
        Economies / Equilibre / Autonomie etaient une RANGEE -- dessin a
        gauche, texte a gauche, grille « 22px minmax(0,1fr) », air 12/14,
        hauteur mini 64, plus deux « !important » de colonnes. Le titre
        « strong » et le detail « span » n etaient pas atteints par les
        regles de la tuile : au choix, le fond passait a l encre et le texte
        RESTAIT A L ENCRE.
        Releve du 06/09, avant : air haut 16, air bas 61,1 (ordinateur) et
        trois airs bas differents sur telephone -- 47,9 / 40,5 / 55,3.
        Ce sont des tuiles de choix : elles prennent le dessin de la
        maquette, comme toutes les autres. Le fond pale de la CARTE reste :
        c est un encart, pas une tuile.                                   */


    /* Parcours progressif simulateur Companium */
    #companium-solar-simulator .hero-card,
    #companium-solar-simulator .cps-card{
      border-radius:12px !important;
    }
    #companium-solar-simulator .subcard,
    #companium-solar-simulator .metric,
    #companium-solar-simulator .result-hero,
    #companium-solar-simulator .cps-solar-solution,
    #companium-solar-simulator .cps-explain-block,
    #companium-solar-simulator .cps-autoconsumption-block,
    #companium-solar-simulator .cps-hypotheses-block,
    #companium-solar-simulator .battery-reco{
      border-radius:10px !important;
    }
    #companium-solar-simulator .cps-wizard-progress{
      position:relative;
      background:var(--lvl0);
      border:0;
      border-radius:14px;
      padding:14px;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
      overflow:hidden;
      margin-top:24px; /* SEQ3 — descend le bandeau pour qu'on voie son cadre entier */
    }
    #companium-solar-simulator #cps-wizard-progress{
      scroll-margin-top:24px;
    }
    #companium-solar-simulator .cps-wizard-topline{
      display:flex;
      justify-content:space-between;
      gap:16px;
      align-items:flex-start;
    }
    #companium-solar-simulator #cps-wizard-eyebrow{
      margin-bottom:4px;
    }
    #companium-solar-simulator .cps-wizard-count{
      flex:0 0 auto;
      border-radius:999px;
      background:var(--cta-bg);
      border:1px solid var(--cta-bg);
      padding:8px 12px;
      font-size:12px;
      font-weight:800;
      color:var(--cta-text);
      white-space:nowrap;
    }
    #companium-solar-simulator .cps-wizard-bar{
      height:9px;
      border-radius:999px;
      background:rgba(48,56,59,.10);
      overflow:hidden;
      margin-top:16px;
    }
    #companium-solar-simulator .cps-wizard-bar span{
      display:block;
      height:100%;
      width:0%;
      border-radius:999px;
      background:var(--cta-bg);
      transition:width .25s ease;
    }
    #companium-solar-simulator .cps-wizard-checks{
      display:flex;
      flex-wrap:wrap;
      gap:8px;
      margin-top:14px;
    }
    #companium-solar-simulator .cps-wizard-chip{
      display:inline-flex;
      align-items:center;
      gap:6px;
      border-radius:999px;
      background:#fff;
      border:1px solid rgba(48,56,59,.10);
      padding:7px 10px;
      color:#68727b;
      font-size:11px;
      font-weight:750;
    }
    /*  P5-b : fond blanc + encre citron = 1,31 pour 1. Le cadre reste citron :
        c'est LUI qui marque l'etape franchie, pas l'ecriture.  */
    #companium-solar-simulator .cps-wizard-chip.done{
      background:var(--bg);
      color:var(--cta-text);
      border-color:var(--cta-bg);
    }
    #companium-solar-simulator .cps-wizard-chip.current{
      background:var(--cta-bg);
      color:var(--cta-text);
      border-color:var(--cta-bg);
    }
    #companium-solar-simulator .cps-step-card{
      display:none;
    }
    #companium-solar-simulator .cps-step-card.is-active-step{
      display:block;
      animation:cpsStepIn .22s ease both;
    }
    @keyframes cpsStepIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
    #companium-solar-simulator .cps-wizard-nav{
      display:flex;
      justify-content:space-between;
      gap:12px;
      align-items:center;
      margin-top:22px;
      padding-top:16px;
      border-top:1px solid var(--sim-trait);   /* SEQ2B : pied d'ecran separe par un trait fin (maquette v9) */
    }
    #companium-solar-simulator .cps-wizard-nav .btn{
      min-width:150px;
    }
    #companium-solar-simulator .cps-wizard-nav .btn{
      background:transparent;
      border:0;
      box-shadow:none;
      color:var(--cta-text)!important;   /* P5-b : citron sur blanc = 1,71 pour 1 */
      min-width:0;
      padding:12px 4px;
      border-radius:0;
      font-weight:750;
    }
    #companium-solar-simulator .cps-wizard-nav .btn:hover{
      background:transparent;
      box-shadow:none;
      transform:none;
      color:var(--text-strong)!important;
    }
    #companium-solar-simulator .cps-wizard-nav .btn[data-wizard-prev]::before{
      content:"\2190";
      margin-right:2px;
    }
    #companium-solar-simulator .cps-wizard-nav .btn[data-wizard-next]::after{
      content:"\2192";
      margin-left:2px;
    }
    #companium-solar-simulator .cps-step-note{
      margin:0 0 16px;
      background:transparent;
      border:0;
      border-radius:0;
      box-shadow:none;
      padding:0;
      color:var(--text-muted);
      font-size:13px;
      line-height:1.55;
      font-weight:550;
    }
    #companium-solar-simulator .cps-equipment-page-note{
      margin-top:12px;
      border-radius:12px;
      background:#fff;
      padding:12px 14px;
      color:#4f5b61;
      font-size:13px;
      line-height:1.5;
      box-shadow:0 1px 2px rgba(20,25,30,.08);
    }
    @media(max-width:640px){
      #companium-solar-simulator .hero-card,
      #companium-solar-simulator .cps-card,
      #companium-solar-simulator .cps-wizard-progress{
        border-radius:12px !important;
      }

      /* ── Bandeau de progression ALLÉGÉ sur mobile ─────────────────────────
         Il mangeait trop de hauteur et repoussait le contenu utile vers le bas.
         On retire l'accroche et le sous-titre (redondants avec le titre de
         l'étape juste en dessous), on garde la barre de progression + le
         compteur, et les étapes deviennent de simples libellés texte cochés,
         cliquables — au lieu de grosses pastilles. */
      #companium-solar-simulator .cps-wizard-progress{
        padding:12px 14px;
        margin-top:16px; /* SEQ3 mobile */
      }
      #companium-solar-simulator #cps-wizard-eyebrow,
      #companium-solar-simulator #cps-wizard-subtitle{
        display:none;
      }
      #companium-solar-simulator .cps-wizard-topline{
        display:flex;
        align-items:center;
        justify-content:space-between;
        gap:10px;
      }
      #companium-solar-simulator #cps-wizard-title{
        font-size:14px;
        line-height:1.25;
        margin:0 !important;
      }
      #companium-solar-simulator .cps-wizard-count{
        flex:0 0 auto;
        width:max-content;
        padding:5px 9px;
        font-size:11px;
        background:transparent;
        border:0;
        color:#68727b;
      }
      #companium-solar-simulator .cps-wizard-bar{
        height:6px;
        margin-top:10px;
      }
      /* Étapes : liens texte discrets, plus de pastilles encombrantes. */
      #companium-solar-simulator .cps-wizard-checks{
        gap:6px 12px;
        margin-top:10px;
      }
      #companium-solar-simulator .cps-wizard-chip{
        padding:0;
        border:0 !important;
        background:transparent !important;
        border-radius:0;
        font-size:11.5px;
        font-weight:700;
        color:#8a949c;
        gap:3px;
      }
      #companium-solar-simulator .cps-wizard-chip.done{
        background:transparent !important;
        color:#071A33;
      }
      #companium-solar-simulator .cps-wizard-chip.current{
        background:transparent !important;
        color:#23292D;
        text-decoration:underline;
        text-underline-offset:3px;
        text-decoration-thickness:2px;
      }
      #companium-solar-simulator .cps-wizard-chip.clickable{
        text-decoration:underline;
        text-underline-offset:3px;
      }

      /* ── Navigation : « Précédent » et « Continuer » CÔTE À CÔTE ──────────
         Ils s'empilaient en pleine largeur et volaient de la hauteur. */
      #companium-solar-simulator .cps-wizard-nav{
        display:flex;
        flex-direction:row;
        gap:8px;
        margin-top:16px;
        padding-top:12px;
      }
      #companium-solar-simulator .cps-wizard-nav .btn{
        flex:1 1 0;
        width:auto;
        min-width:0;
        min-height:44px;
        padding:10px 12px;
        font-size:12.5px;
      }

    }

    /*  ⚠️ RETIRE LE 06/09 : la grille d equipements adaptative au telephone.
        Trois colonnes, dessin a 56, titre a 9,8 px, compteur a 23 px de
        haut -- tout en « !important ». Le site n a qu une regle de colonnes
        sur telephone : DEUX, comme toutes les autres grilles.          */

  

    #companium-solar-simulator .cps-address-suggestions{position:absolute;left:0;right:0;top:100%;z-index:60;margin-top:6px;background:#fff;border:1px solid rgba(7,26,51,.14);border-radius:16px;box-shadow:0 1px 2px rgba(20,25,30,.08);overflow:hidden;max-height:280px;overflow-y:auto}
    #companium-solar-simulator .cps-address-suggestions.hidden{display:none}
    #companium-solar-simulator .cps-address-suggestion{padding:11px 14px;cursor:pointer;font-weight:650;font-size:14px;color:#23292D;border-bottom:1px solid rgba(7,26,51,.06)}
    #companium-solar-simulator .cps-address-suggestion:last-child{border-bottom:0}
    #companium-solar-simulator .cps-address-suggestion:hover,#companium-solar-simulator .cps-address-suggestion.active{background:#fbfaf7}
    #companium-solar-simulator .cps-address-suggestion small{display:block;color:#5E6A78;font-weight:600;font-size:12px;margin-top:2px}
    #companium-solar-simulator #cps-address-manual-toggle{color:#071A33;font-weight:600;/* 06/09 : etait 800, quatrieme graisse */text-decoration:none;cursor:pointer}
    #companium-solar-simulator #cps-address-manual-toggle:hover{text-decoration:underline}
    #companium-solar-simulator .cps-send-success{margin-top:12px;border-radius:16px;background:var(--grey-soft);border:0;padding:14px;color:#23292D;font-weight:750;line-height:1.5}
    #companium-solar-simulator .cps-confirm-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:20px}
    #companium-solar-simulator .cps-confirm-step{background:#fff;border:0;border-radius:18px;padding:16px;text-align:center}
    #companium-solar-simulator .cps-confirm-ico{width:30px;height:30px;color:var(--sim-accent);display:inline-flex;align-items:center;justify-content:center}
    #companium-solar-simulator .cps-confirm-ico svg{width:30px;height:30px;display:block}
    #companium-solar-simulator .cps-confirm-t{font-weight:850;color:#23292D;margin-top:8px}
    #companium-solar-simulator .cps-confirm-d{font-size:12.5px;color:#5E6A78;margin-top:4px;line-height:1.5}
    #companium-solar-simulator .cps-keep-box{margin-top:18px;border-radius:20px;background:var(--grey-soft);border:0;padding:18px}
    @media(max-width:640px){#companium-solar-simulator .cps-confirm-steps{grid-template-columns:1fr}}
    #companium-solar-simulator .cps-wizard-chip.clickable{cursor:pointer}
    #companium-solar-simulator .cps-wizard-chip.clickable:hover{border-color:var(--cta-bg);color:#23292D}
    #companium-solar-simulator .cps-global-progress{margin:0 0 18px;border-radius:16px;background:var(--grey-soft);border:0;padding:12px 16px}
    #companium-solar-simulator .cps-global-progress.hidden{display:none}
    #companium-solar-simulator .cps-gp-inner{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-weight:800;font-size:13.5px;color:#23292D}
    #companium-solar-simulator .cps-gp-step.done{color:#23292D}
    #companium-solar-simulator .cps-method-collapsible{margin-top:16px;border:0;border-radius:16px;background:var(--soft2);overflow:hidden}
    #companium-solar-simulator .cps-method-collapsible summary{cursor:pointer;list-style:none;padding:14px 18px;font-weight:750;font-size:14px;color:#23292D;display:flex;align-items:center;justify-content:space-between;gap:12px}
    #companium-solar-simulator .cps-method-collapsible summary::-webkit-details-marker{display:none}
    #companium-solar-simulator .cps-method-collapsible summary::after{content:'+';font-size:20px;color:#071A33;font-weight:800;line-height:1}
    #companium-solar-simulator .cps-method-collapsible[open] summary::after{content:'–'}
    #companium-solar-simulator details.cps-fold > summary.cps-fold-sum{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:10px}
    #companium-solar-simulator details.cps-fold > summary.cps-fold-sum::-webkit-details-marker{display:none}
    /* SEQ3C — picto au trait devant le titre de chaque zone repliable */
    #companium-solar-simulator .cps-fold-titre,#companium-solar-simulator .cps-roof-more-title-wrap{display:inline-flex;align-items:center;gap:8px}
    #companium-solar-simulator .cps-fold-ico{width:17px;height:17px;flex:none;fill:none;stroke:var(--sim-accent);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
    /* Meme declencheur partout que sur la toiture : libelle explicite + gros rond
       citron avec chevron. Impossible de rater que c'est cliquable. */
    #companium-solar-simulator .cps-fold-toggle{display:flex;flex-direction:column;align-items:center;gap:3px;flex:0 0 auto;white-space:nowrap}
    #companium-solar-simulator .cps-fold-label{font-size:10.5px;font-weight:800;color:var(--ink)}
    #companium-solar-simulator .cps-fold-label::before{content:'Cliquer pour déplier'}
    #companium-solar-simulator details.cps-fold[open] .cps-fold-label::before{content:'Cliquer pour replier'}
    #companium-solar-simulator .cps-fold-tri{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:999px;background:var(--accent-soft);color:var(--cta-text);font-size:15px;font-weight:800;/* P5-b : 1,18 pour 1 */line-height:1;transition:transform .2s ease}
    #companium-solar-simulator details.cps-fold[open] .cps-fold-tri{transform:rotate(180deg)}
    #companium-solar-simulator .cps-fold-sum:hover .cps-fold-tri{transform:scale(1.06)}
    #companium-solar-simulator details.cps-fold[open] .cps-fold-sum:hover .cps-fold-tri{transform:rotate(180deg) scale(1.06)}
    /* Zones depliables = cartes niveau 3, sans trait. Les 3 conteneurs (.cps-explain-block,
       .cps-hypotheses-block, .cps-sources-block) passent transparents+padding:0 pour que les 4 folds
       aient EXACTEMENT la meme largeur et le meme alignement (avant, .cps-sources-block gardait le
       padding de .subcard -> fold "Sur quoi repose" decale/plus etroit). */
    #companium-solar-simulator #cps-result .cps-explain-block,
    #companium-solar-simulator #cps-result .cps-hypotheses-block,
    #companium-solar-simulator #cps-result .cps-sources-block{background:transparent !important;box-shadow:none !important;border:0 !important;padding:0 !important;margin-top:14px !important;}
    /* SEQ4b — interieur BLANC CASSE, header distinct, detache de la page par le fond (pas de trait) */
    #companium-solar-simulator #cps-result details.cps-fold{background:var(--sim-fond);border:1px solid var(--sim-trait);border-radius:14px;padding:0;box-shadow:0 4px 14px rgba(20,25,30,.04);overflow:hidden;}
    /* SEQ5 — folds plus FINS : en-tete compact (padding vertical reduit), hover lime pale, palette */
    #companium-solar-simulator #cps-result details.cps-fold > summary.cps-fold-sum{cursor:pointer;padding:12px 16px;background:transparent;}
    #companium-solar-simulator #cps-result details.cps-fold > summary.cps-fold-sum:hover{background:var(--accent);}
    #companium-solar-simulator #cps-result details.cps-fold > *:not(summary){margin-left:14px;margin-right:14px;}
    #companium-solar-simulator #cps-result details.cps-fold[open]{padding-bottom:10px;}
    /* SEQ5 — folds consecutifs RAPPROCHES (14px) ; bat la regle de section a 40px (specificite +haute) */
    #companium-solar-simulator #cps-result > .cps-explain-block + .cps-explain-block,
    #companium-solar-simulator #cps-result > .cps-explain-block + .cps-hypotheses-block,
    #companium-solar-simulator #cps-result > .cps-hypotheses-block + .cps-sources-block{margin-top:14px !important;}
    #companium-solar-simulator .cps-method-body{padding:0 18px 16px}
    #companium-solar-simulator .cps-method-body p{font-size:13px;line-height:1.6;color:#4f5b61;margin-top:10px;text-align:justify}
    #companium-solar-simulator .cps-gp-arrow{color:#5E6A78;font-weight:700}
    /* Bloc « Sur quoi repose votre etude » : les sources rendues visibles. */
    #companium-solar-simulator .cps-sources-body{padding-top:14px}
    #companium-solar-simulator .cps-sources-intro{font-size:12.5px;color:var(--muted);font-weight:700;margin:0 0 12px}
    #companium-solar-simulator .cps-sources-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}
    #companium-solar-simulator .cps-source{grid-row:span 3;display:grid;grid-template-rows:subgrid;grid-template-columns:auto 1fr;column-gap:9px;row-gap:5px;background:#fff;border-radius:14px;padding:12px 13px}
    #companium-solar-simulator .cps-source-ico{grid-column:1;grid-row:1;align-self:center;color:#071A33}
    #companium-solar-simulator .cps-source-ico svg{width:20px;height:20px;display:block}
    #companium-solar-simulator .cps-source>p:nth-of-type(1){grid-column:2;grid-row:1}
    #companium-solar-simulator .cps-source>p:nth-of-type(2){grid-column:1 / -1;grid-row:2}
    #companium-solar-simulator .cps-source>p:nth-of-type(3){grid-column:1 / -1;grid-row:3}
    #companium-solar-simulator .cps-source-t{margin:0;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
    #companium-solar-simulator .cps-source-v{margin:5px 0 6px;font-size:14px;font-weight:850;color:var(--ink)}
    #companium-solar-simulator .cps-source-s{margin:0;font-size:11.5px;line-height:1.5;color:var(--muted);font-weight:600}
    #companium-solar-simulator .cps-sources-foot{margin:14px 0 0;font-size:12px;line-height:1.6;color:var(--muted);font-weight:600}
    #companium-solar-simulator .cps-sources-foot strong{color:var(--ink)}

    /* SEQ3D — boite de dialogue HTML (jamais l'alerte native), charte du simulateur */
    #companium-solar-simulator .cps-modal{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:20px}
    #companium-solar-simulator .cps-modal[hidden]{display:none}
    #companium-solar-simulator .cps-modal-voile{position:absolute;inset:0;background:rgba(26,30,32,.55)}
    #companium-solar-simulator .cps-modal-card{position:relative;background:var(--sim-fond);border:1px solid var(--sim-trait);border-radius:24px;box-shadow:0 18px 48px rgba(17,19,21,.22);max-width:440px;width:100%;padding:26px 24px}
    #companium-solar-simulator .cps-modal-title{font-size:20px;font-weight:950;color:var(--sim-texte);margin:0 0 10px}
    #companium-solar-simulator .cps-modal-text{font-size:14px;line-height:1.55;color:var(--sim-texte-doux);margin:0 0 20px;white-space:pre-line}
    #companium-solar-simulator .cps-modal-card .btn{width:100%}
    #companium-solar-simulator .cps-field-error{box-shadow:0 0 0 2px #b3261e}
    /* SEQ3 — intitule numerote de niveau (signaletique de hierarchie, maquette v9) */
    #companium-solar-simulator .cps-niveau{display:flex;align-items:center;gap:10px;margin:26px 0 12px;font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--sim-texte-doux);font-weight:800}
    #companium-solar-simulator .cps-niveau:first-child{margin-top:2px}
    #companium-solar-simulator .cps-niveau .cps-niveau-n{width:20px;height:20px;border-radius:50%;background:var(--sim-accent);color:var(--cta-text);display:flex;align-items:center;justify-content:center;font-size:11px;flex:none}
    /* SEQ4B/4C — tuile de saisie libre (Autre equipement / Autre projet) */
    #companium-solar-simulator .cps-other-block{margin-top:16px}
    #companium-solar-simulator .cps-other-block:empty{display:none;margin:0}/* SEQ3 : conteneurs desormais vides (saisie libre passee dans la grille) -> aucun espace mort */
    /* SEQ3 : "Autre equipement" / "Autre projet" = DERNIERE TUILE de la grille (rigoureusement
       identique aux tuiles catalogue : picto au trait + titre + mention grise + compteur en bas).
       Elle grandit vers le bas quand des lignes nom/kWh apparaissent dedans (compteur >= 1) ;
       les lignes s'empilent verticalement pour tenir dans la largeur etroite d'une tuile. */
    /*  ⚠️ RETIRE LE 06/09 : la tuile « Autre equipement » avait sa propre
        hauteur (142) et un « grid-column:span 2 » des qu une ligne existait.
        Les lignes de saisie ne sont plus dans la tuile : elles s ouvrent SOUS
        la grille. La tuile est donc une tuile comme les autres.          */
    #companium-solar-simulator .cps-other-sub{margin-top:3px;font-size:9.5px;line-height:1.16;font-weight:700;color:var(--sim-texte-doux);text-align:center}
    #companium-solar-simulator .cps-other-lines{width:100%;margin-top:8px;display:flex;flex-direction:column;gap:8px;border-top:1px solid var(--sim-trait);padding-top:10px}
    #companium-solar-simulator .cps-other-line{display:flex;flex-direction:column;gap:5px;text-align:left}
    #companium-solar-simulator .cps-other-line .field{width:100%;min-height:32px;padding:6px 8px;font-size:11.5px}
    #companium-solar-simulator .cps-other-kwh-wrap{display:flex;align-items:center;gap:4px}
    #companium-solar-simulator .cps-other-kwh-wrap .field{flex:1}
    #companium-solar-simulator .cps-other-kwh-wrap .micro{white-space:nowrap;font-size:9px}
    /* U3 04/08 : "Autre equipement" OUVERT (des qu'une ligne existe) occupe DEUX colonnes de la grille ;
       ferme (aucune ligne), il reprend une seule colonne. C'est la DERNIERE tuile de la grille -> l'elargir
       ne decale pas les tuiles precedentes. La grille equipements fait au minimum 2 colonnes (jamais 1),
       donc l'elargissement s'applique a toutes les tailles. */
    /* champs COTE A COTE : nom a gauche (souple), kWh a droite (largeur fixe) ; le compteur reste dessous. */
    #companium-solar-simulator .cps-other-line{ display:grid; grid-template-columns:minmax(0,1fr) 140px; gap:10px; align-items:center; }
    /* tres petit ecran (<400px) : cote a cote trop etroit -> champs empiles. */
    @media(max-width:399px){ #companium-solar-simulator .cps-other-line{ grid-template-columns:minmax(0,1fr); } }

    /* ===== HABILLAGE — page de resultat en 6 niveaux (charte olive/blanc) ===== */
    /* carte blanche commune : meme fond, meme trait, memes coins, meme ombre douce */
    #companium-solar-simulator .cps-rep,
    #companium-solar-simulator .cps-repose,
    #companium-solar-simulator .cps-flux,
    #companium-solar-simulator .cps-sol{background:var(--sim-fond);border:1px solid var(--sim-trait);border-radius:20px;box-shadow:0 10px 30px rgba(20,25,30,.06)}
    #companium-solar-simulator .cps-kicker{font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--sim-texte-doux);font-weight:800;margin:0 0 6px}
    /* U6 04/08 : kicker "Batterie ajoutee" quand la batterie est retenue -> coche epaisse + libelle en jaune d'action. */
    #companium-solar-simulator .cps-kicker.cps-batt-done{color:var(--cta-bg);display:inline-flex;align-items:center;gap:6px}
    #companium-solar-simulator .cps-batt-check{width:15px;height:15px;flex:none}
    #companium-solar-simulator .cps-preserve{display:none !important}
    #companium-solar-simulator .cps-actions{display:flex;gap:14px;flex-wrap:wrap;justify-content:center;padding:24px 0 4px}
    /* SEQ2 — bouton « Recommencer la simulation » : discret, sobre, centre, moins fort que l'action principale. */
    #companium-solar-simulator .cps-restart{display:inline-flex;align-items:center;gap:8px;background:var(--sim-fond);border:1px solid var(--sim-trait);border-radius:999px;padding:9px 16px;font:inherit;font-size:13px;font-weight:700;color:var(--sim-texte-doux);cursor:pointer;transition:border-color .15s ease,color .15s ease}
    #companium-solar-simulator .cps-restart:hover{border-color:var(--sim-texte-doux);color:var(--sim-texte)}
    #companium-solar-simulator .cps-restart-ic{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
    /* --- N1 bandeau reponse : maison | puissance | economie --- */
    #companium-solar-simulator .cps-rep{display:flex;align-items:center;gap:34px;flex-wrap:wrap;padding:30px}
    #companium-solar-simulator .cps-rep-maison{flex:0 0 140px}
    #companium-solar-simulator .cps-rep-maison svg{width:140px;height:auto;stroke:var(--sim-accent);fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
    #companium-solar-simulator .cps-rep-chiffre{flex:1 1 250px;min-width:230px}
    #companium-solar-simulator .cps-rep-gros{font-size:60px;font-weight:900;letter-spacing:-.04em;line-height:1;margin:0;color:var(--sim-texte)}
    #companium-solar-simulator .cps-rep-gros .cps-kwc{font-size:26px;font-weight:700;margin-left:4px;letter-spacing:0}
    #companium-solar-simulator .cps-rep-sous{font-size:14px;color:var(--sim-texte-doux);margin:12px 0 0;line-height:1.5}
    #companium-solar-simulator .cps-rep-sec{flex:0 0 220px;border-left:1px solid var(--sim-trait);padding-left:30px}
    /*  P5-b : citron sur blanc = 1,36 pour 1. Un chiffre qu'on ne lit pas ne sert a rien.  */
    #companium-solar-simulator .cps-rep-val{font-size:34px;font-weight:900;color:var(--cta-text);letter-spacing:-.025em;line-height:1.05;margin:0}
    #companium-solar-simulator .cps-rep-an{font-size:14px;color:var(--sim-texte-doux);margin:6px 0 0}
    @media(max-width:720px){
      #companium-solar-simulator .cps-rep{gap:22px}
      #companium-solar-simulator .cps-rep-maison{flex-basis:110px}
      #companium-solar-simulator .cps-rep-maison svg{width:110px}
      #companium-solar-simulator .cps-rep-sec{flex:1 1 100%;border-left:0;border-top:1px solid var(--sim-trait);padding-left:0;padding-top:16px}
    }
    /* --- N2 bande coupee en quatre --- */
    #companium-solar-simulator .cps-repose{display:grid;grid-template-columns:repeat(4,1fr);gap:0;overflow:hidden;padding:0}
    #companium-solar-simulator .cps-repose-bloc{padding:18px 22px;min-width:0}
    #companium-solar-simulator .cps-repose-bloc + .cps-repose-bloc{border-left:1px solid var(--sim-trait)}
    #companium-solar-simulator .cps-k{font-size:10.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--sim-texte-doux);font-weight:800;margin:0 0 6px}
    #companium-solar-simulator .cps-repose .cps-v{font-size:18px;font-weight:800;margin:0;color:var(--sim-texte)}
    #companium-solar-simulator .cps-v-muted,#companium-solar-simulator .cps-repose .cps-v-muted{font-size:12.5px;font-weight:600;color:var(--sim-texte-doux)}
    #companium-solar-simulator .cps-repose-detail{font-size:12.5px;color:var(--sim-texte-doux);margin:10px 2px 0}
    @media(max-width:720px){
      #companium-solar-simulator .cps-repose{grid-template-columns:1fr 1fr}
      #companium-solar-simulator .cps-repose-bloc + .cps-repose-bloc{border-left:0}
      #companium-solar-simulator .cps-repose-bloc:nth-child(even){border-left:1px solid var(--sim-trait)}
      #companium-solar-simulator .cps-repose-bloc:nth-child(n+3){border-top:1px solid var(--sim-trait)}
    }
    @media(max-width:430px){
      #companium-solar-simulator .cps-repose{grid-template-columns:1fr}
      #companium-solar-simulator .cps-repose-bloc + .cps-repose-bloc{border-left:0;border-top:1px solid var(--sim-trait)}
    }
    /* --- N3 flux : ruban + 4 chiffres --- */
    #companium-solar-simulator .cps-flux{padding:26px 30px}
    #companium-solar-simulator .cps-flux h3{font-size:20px;font-weight:800;letter-spacing:-.02em;margin:0 0 6px;color:var(--sim-texte)}
    #companium-solar-simulator .cps-flux-intro{color:var(--sim-texte-doux);font-size:14px;margin:0 0 20px}
    #companium-solar-simulator .cps-chiffres-flux{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:24px;padding-top:22px;border-top:1px solid var(--sim-trait)}
    #companium-solar-simulator .cps-cf{text-align:left}
    #companium-solar-simulator .cps-cf-v{font-size:23px;font-weight:900;letter-spacing:-.02em;margin:0;color:var(--sim-texte)}
    #companium-solar-simulator .cps-u{font-size:12px;color:var(--sim-texte-doux);margin:3px 0 0}
    /* Y4 04/08 : dans une rangee de chiffres, les intitules occupent la MEME hauteur (2 lignes reservees)
       -> les grands chiffres demarrent tous au meme niveau, meme si un intitule tient sur 1 ligne (ex
       "Autoconsommation") et un autre sur 2 ("Production annuelle"). Une rangee dont les 2 intitules tiennent
       deja pareil (ex Rachat/Surface) reste alignee : les 2 gardent la meme hauteur, donc non degradee. */
    #companium-solar-simulator .cps-chiffres-flux .cps-k,
    #companium-solar-simulator .cps-repose .cps-k{min-height:2.5em}
    @media(max-width:720px){#companium-solar-simulator .cps-chiffres-flux{grid-template-columns:repeat(2,1fr);gap:18px 14px}}
    /* --- N4 solution : texte + coches | dessin --- */
    #companium-solar-simulator .cps-sol{display:flex;gap:32px;flex-wrap:wrap;padding:26px 30px}
    #companium-solar-simulator .cps-sol-txt{flex:1 1 320px;min-width:280px}
    #companium-solar-simulator .cps-sol-txt h3{font-size:20px;font-weight:800;letter-spacing:-.02em;margin:0 0 10px;color:var(--sim-texte)}
    #companium-solar-simulator .cps-sol-phrase{font-size:15px;line-height:1.6;margin:0 0 14px;color:var(--sim-texte)}
    #companium-solar-simulator .cps-sol-dessin{flex:0 0 250px;color:var(--sim-accent)}
    #companium-solar-simulator .cps-sol-dessin svg{width:100%;height:auto}
    @media(max-width:720px){#companium-solar-simulator .cps-sol-dessin{flex:1 1 100%;max-width:240px;margin:0 auto}}
    /* SEQ1 (remplacement) : liste NUE de la maquette (.solution .liste). Classe fraiche -> zero heritage. */
    #companium-solar-simulator .cps-liste{display:block;margin-top:6px}
    #companium-solar-simulator .cps-liste-l{display:flex;gap:11px;align-items:flex-start;padding:9px 0;font-size:14px;line-height:1.5;color:var(--sim-texte-doux);border-top:1px solid var(--sim-trait)}
    #companium-solar-simulator .cps-liste-l:first-child{border-top:0}
    #companium-solar-simulator .cps-liste-l.cps-sol-hidden{display:none}
    #companium-solar-simulator .cps-liste-ck{width:17px;height:17px;flex:none;margin-top:2px;stroke:var(--sim-accent);fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
    #companium-solar-simulator .cps-liste-ico{width:20px;height:20px;flex:none;margin-top:1px;color:var(--sim-accent);display:inline-flex}
    #companium-solar-simulator .cps-liste-ico svg{width:20px;height:20px;display:block}
    #companium-solar-simulator .cps-sol-retenue .cps-liste-ico,#companium-solar-simulator .cps-sol-retenue b{color:var(--sim-ico-retenu)}
    #companium-solar-simulator .cps-liste-l b{font-weight:700;color:var(--sim-texte)}
    #companium-solar-simulator #cps-solution-title:empty{display:none}
    /* Y2 04/08 : le gros titre du cadre est remplace par un CERCLE (puissance preconisee). Telephone :
       cercle puis phrase, l'un sous l'autre. Ordinateur (>=640px) : cercle a gauche, phrase a droite. */
    #companium-solar-simulator .cps-sol-head{display:flex;flex-direction:column;gap:12px;margin-bottom:14px}
    #companium-solar-simulator .cps-sol-cercle{flex:none;width:92px;height:92px;border-radius:50%;
      background:var(--cta-bg);color:var(--cta-text);display:flex;flex-direction:column;align-items:center;
      justify-content:center;line-height:1;text-align:center}
    #companium-solar-simulator .cps-sol-cercle-v{font-size:26px;font-weight:900;letter-spacing:-.02em}
    #companium-solar-simulator .cps-sol-cercle-u{font-size:12px;font-weight:700;margin-top:3px}
    @media(min-width:640px){ #companium-solar-simulator .cps-sol-head{flex-direction:row;align-items:center;gap:18px} }
    #companium-solar-simulator .cps-repose .cps-v small{font-size:13px;font-weight:400;color:var(--sim-texte-doux)}
    /* SEQ1/04-08 — le cadre resultat devient un conteneur TRANSPARENT : plus de fond, ni rayon, ni trait, ni ombre. Le beige de page (--sim-page) transparait, les blocs blancs ressortent. */
    #companium-solar-simulator #cps-result-card{background:transparent;border:0;border-radius:0;box-shadow:none}
    /* --- N6 batterie : bloc centre, blanc --- */
    #companium-solar-simulator #cps-battery-recommendation.cps-batt{background:var(--sim-fond) !important;border:1px solid var(--sim-trait) !important;border-radius:20px !important;box-shadow:0 10px 30px rgba(20,25,30,.06) !important;padding:26px 30px;display:flex;flex-direction:row;align-items:center;text-align:left;gap:34px}
    #companium-solar-simulator .cps-batt-media{flex:0 0 200px;display:flex;align-items:center;justify-content:center}
    #companium-solar-simulator .cps-batt-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;align-items:flex-start}
    #companium-solar-simulator .cps-batt-ico{color:var(--sim-accent)}
    #companium-solar-simulator .cps-batt-ico svg{width:200px;height:240px;display:block}
    @media(max-width:760px){#companium-solar-simulator #cps-battery-recommendation.cps-batt{flex-direction:column;align-items:flex-start;gap:20px}#companium-solar-simulator .cps-batt-media{flex:0 0 auto}}
    #companium-solar-simulator .cps-batt-txt{font-size:14px;color:var(--sim-texte-doux);line-height:1.55;width:100%;margin:2px 0 6px}
    #companium-solar-simulator #cps-battery-recommendation.cps-batt .btn{margin-top:20px}
    /* --- N6 sources : cartes aerees a deux colonnes --- */
    #companium-solar-simulator .cps-sources-grid{grid-template-columns:1fr 1fr !important;gap:12px !important}
    #companium-solar-simulator .cps-source{display:flex !important;gap:16px;align-items:flex-start;border:1px solid var(--sim-trait) !important;border-radius:12px;padding:14px 16px;background:var(--sim-fond)}
    #companium-solar-simulator .cps-source-ico{display:block !important;flex:0 0 32px;width:32px;height:32px;align-self:flex-start}
    #companium-solar-simulator .cps-source-ico svg{width:32px;height:32px;display:block}
    #companium-solar-simulator .cps-source-body{flex:1 1 auto;min-width:0}
    /* S13 — lignes nues « intitule — valeur » du volet « Pourquoi cette proposition ? » : sans cadre ni fond, simple filet de separation. */
    #companium-solar-simulator .cps-nue-liste{margin-top:12px}
    #companium-solar-simulator .cps-nue{display:flex;justify-content:space-between;gap:16px;padding:7px 0;border-top:1px solid var(--sim-trait);font-size:13px}
    #companium-solar-simulator .cps-nue:first-child{border-top:0}
    #companium-solar-simulator .cps-nue-k{color:var(--sim-texte-doux)}
    #companium-solar-simulator .cps-nue-v{color:var(--sim-texte);font-weight:700;text-align:right}
    #companium-solar-simulator .cps-source-t{margin:0 0 5px !important;font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--sim-texte-doux)}
    #companium-solar-simulator .cps-source-v{margin:0 0 5px !important;font-size:15px;font-weight:800;color:var(--sim-texte)}
    #companium-solar-simulator .cps-source-s{margin:0 !important;font-size:12px;line-height:1.5;color:var(--sim-texte-doux);font-weight:500}
    @media(max-width:560px){#companium-solar-simulator .cps-sources-grid{grid-template-columns:1fr !important}}
    /* --- N4 projection dans le temps (histogramme + reglages) --- */
    #companium-solar-simulator .cps-proj{background:var(--sim-fond);border:1px solid var(--sim-trait);border-radius:20px;box-shadow:0 10px 30px rgba(20,25,30,.06);padding:26px 30px}
    #companium-solar-simulator .cps-proj h3{font-size:20px;font-weight:800;letter-spacing:-.02em;margin:0 0 6px;color:var(--sim-texte)}
    #companium-solar-simulator .cps-proj-intro{color:var(--sim-texte-doux);font-size:14px;margin:0 0 20px;max-width:66ch}
    #companium-solar-simulator .cps-proj-reglages{display:flex;flex-wrap:wrap;gap:12px 22px;align-items:center;background:color-mix(in srgb,var(--sim-accent) 6%,#fff);border-radius:12px;padding:14px 18px;margin-bottom:24px}
    #companium-solar-simulator .cps-proj-reglages label{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--sim-texte);font-weight:600}
    #companium-solar-simulator .cps-proj-reglages select{font:inherit;font-size:13.5px;padding:6px 10px;border-radius:8px;border:1px solid var(--sim-trait);background:#fff;color:var(--sim-texte)}
    #companium-solar-simulator .cps-proj-cumul{text-align:center;margin-bottom:26px}
    #companium-solar-simulator .cps-proj-cumul-v{font-size:52px;font-weight:900;color:var(--cta-text);/* P5-b : 1,36 pour 1 */letter-spacing:-.035em;line-height:1;margin:0}
    #companium-solar-simulator .cps-proj-cumul-s{font-size:14px;color:var(--sim-texte-doux);margin:9px 0 0}
    #companium-solar-simulator .cps-proj-duo{display:flex;gap:14px;margin-bottom:26px}
    #companium-solar-simulator .cps-proj-f{flex:1;border:1px solid var(--sim-trait);border-radius:12px;padding:16px 18px;min-width:0}
    #companium-solar-simulator .cps-proj-f .cps-k{margin:0 0 5px}
    #companium-solar-simulator .cps-proj-f-v{font-size:24px;font-weight:900;letter-spacing:-.02em;margin:0;color:var(--sim-texte)}
    #companium-solar-simulator .cps-proj-f-v.cps-proj-accent{color:var(--cta-text)}/* P5-b : 1,36 pour 1 */
    #companium-solar-simulator .cps-proj-graphe{position:relative;display:flex;align-items:flex-end;gap:2px;height:210px;border-bottom:1px solid var(--sim-trait);margin-bottom:8px}
    #companium-solar-simulator .cps-proj-annee{flex:1;display:flex;align-items:flex-end;justify-content:center;gap:2px;height:100%}
    #companium-solar-simulator .cps-proj-bar{width:44%;border-radius:4px 4px 0 0;min-height:1px;position:relative;height:var(--h, 0%)}
    #companium-solar-simulator .cps-proj-bar.sans{background:#D7DBD5}
    #companium-solar-simulator .cps-proj-bar.avec{background:var(--sim-accent)}
    /* Y1 04/08 : plus AUCUN montant vertical DANS les barres (il debordait sous les barres courtes et
       recouvrait les etiquettes d'annees). A la place : le montant "avec installation" en HORIZONTAL, petit,
       AU-DESSUS des barres, aux deux extremites seulement (annee 1 et derniere annee) ; + un cartouche au
       toucher (annee + montant). Les deux montants d'une paire se chevauchant toujours (barres ~15px, montant
       ~40px), on n'affiche que celui de la barre JAUNE (signale). */
    #companium-solar-simulator .cps-proj-top{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);
      margin-bottom:3px;font-size:9px;font-weight:800;line-height:1;white-space:nowrap;pointer-events:none;color:var(--cta-text)}/* P5-b : le citron sur blanc tombait a 1,71 ; c'est la BARRE qui porte la couleur, pas le montant */
    #companium-solar-simulator .cps-proj-tip{position:absolute;z-index:5;transform:translateX(-50%);
      background:#fff;border:1px solid var(--sim-trait);border-radius:8px;padding:4px 8px;font-size:11px;
      font-weight:700;color:#22262A;white-space:nowrap;box-shadow:0 2px 8px rgba(20,25,30,.12);pointer-events:none;display:none}
    @media(max-width:640px){
      #companium-solar-simulator .cps-proj-graphe{height:140px}   /* U4.1 : hauteur reduite d'~1/3 (210px -> 140px) */
    }
    #companium-solar-simulator .cps-proj-axe{display:flex;gap:3px;font-size:11px;color:var(--sim-texte-doux);margin-bottom:16px}
    #companium-solar-simulator .cps-proj-axe span{flex:1;text-align:center}
    #companium-solar-simulator .cps-proj-legende{display:flex;flex-wrap:wrap;gap:18px;font-size:13px;color:var(--sim-texte-doux)}
    #companium-solar-simulator .cps-proj-legende i{width:11px;height:11px;border-radius:3px;display:inline-block;margin-right:7px;vertical-align:-1px}
    @media(max-width:640px){#companium-solar-simulator .cps-proj-duo{flex-direction:column}}
    /* SEQ5E — respiration : tous les blocs blancs de la page resultat au meme habillage
       (fond blanc, trait fin, coins arrondis, ombre tres douce). Uniformise les volets N7. */
    #companium-solar-simulator #cps-result .subcard{background:var(--sim-fond);border:1px solid var(--sim-trait);border-radius:16px;box-shadow:0 4px 14px rgba(20,25,30,.04)}
    #companium-solar-simulator #cps-result .cps-explain-block,
    #companium-solar-simulator #cps-result .cps-hypotheses-block,
    #companium-solar-simulator #cps-result .cps-sources-block{margin-top:12px}
  

/* ══════════════════════════════════════════════════════════════════════════
   LE SIMULATEUR, D APRES LA MAQUETTE DU 03/09          04/09/2026
   _maquettes/COMPANIUM_maquette_site_public.html, ecran « #e-simu »

   ⚠️ DERNIER BLOC DE LA FEUILLE, comme celui du parcours et pour la meme
   raison : la feuille d origine du simulateur vient d etre versee au-dessus,
   telle quelle. Ce qui suit gagne sur elle sans qu on ait eu a la desosser.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── LES DEUX COLONNES : « .par » ────────────────────────────────────────── */
.cps-par { display:grid; grid-template-columns:248px 1fr; min-height:620px; }
.cps-cote { background:var(--cp-blanc); padding:24px 20px;
  border-right:1px solid var(--cp-filet); }
.cps-cote-marque { display:flex; align-items:center; gap:10px; text-decoration:none;
  color:inherit; }
.cps-cote-marque svg { width:30px; height:30px; color:var(--cp-encre); flex:none; }
.cps-cote-marque b { font-size:15px; letter-spacing:.4px; color:var(--cp-encre);
  font-weight:600; }
.cps-cote-titre { font-size:10.5px; letter-spacing:1.4px; color:var(--cp-leg);
  margin:20px 0 9px; font-weight:700; text-transform:uppercase; }
.cps-cote-vide { font-size:12.5px; color:var(--cp-leg); font-style:italic; margin:0; }
.cps-cote-retour { margin-top:20px; font-size:13px; color:var(--cp-txt);
  text-decoration:none; display:inline-flex; align-items:center; gap:7px;
  font-weight:600; }
.cps-cote-retour:hover { color:var(--cp-titre); }
.cps-corps { display:flex; flex-direction:column; padding:24px 32px;
  min-height:620px; min-width:0; }

/*  ⚠️ LE LIEN DE RETOUR EN HAUT DE PAGE FAIT DOUBLE EMPLOI avec celui de la
    colonne : il disparait sur ordinateur, il reste sur telephone -- ou la
    colonne, elle, n existe pas. Rien n est retire : c est un seul et meme
    geste, pose la ou il sert.                                              */
.cps-sortie-haut { display:none; }

/* ── LE FIL DES ETAPES : « .fil » ────────────────────────────────────────── */
#companium-solar-simulator .cps-wizard-progress {
  background:none; border:0; box-shadow:none; padding:0; margin:0 0 4px;
  max-width:none; }
#companium-solar-simulator .cps-wizard-checks {
  display:flex; align-items:center; justify-content:center; flex-wrap:wrap;
  gap:0; row-gap:7px; }
#companium-solar-simulator .cps-wizard-chip {
  display:flex; align-items:center; gap:8px; padding:4px 11px;
  font-size:12.5px; color:var(--cp-leg); background:none; border:0;
  border-radius:0; box-shadow:none; font-weight:400; }
#companium-solar-simulator .cps-wizard-chip::before {
  content:""; width:5px; height:5px; border-radius:50%;
  background:var(--cp-filet-fort); flex:none; }
#companium-solar-simulator .cps-wizard-chip.done { color:var(--cp-txt); }
#companium-solar-simulator .cps-wizard-chip.done::before { background:#5C6B10; }
#companium-solar-simulator .cps-wizard-chip.current { color:var(--cp-titre); font-weight:700; }
#companium-solar-simulator .cps-wizard-chip.current::before {
  background:var(--cp-jaune); box-shadow:0 0 0 3px rgba(230,255,18,.35); }
#companium-solar-simulator .cps-wizard-bar { height:2px; background:var(--cp-filet);
  margin-bottom:11px; border-radius:0; }
#companium-solar-simulator .cps-wizard-bar span { background:var(--cp-encre); }

/* ── LA QUESTION : « .q » ────────────────────────────────────────────────── */
#companium-solar-simulator .cps-card {
  margin:auto auto; width:100%; max-width:880px; padding:22px 0;
  min-width:0; background:none; border:0; box-shadow:none; border-radius:0; }
#companium-solar-simulator .cps-card > h2,
#companium-solar-simulator .cps-step-card h2 {
  margin:0 0 8px; font-size:25px; letter-spacing:-.6px; color:var(--cp-titre);
  line-height:1.15; text-align:center; font-weight:600; }
#companium-solar-simulator .cps-card > .label,
#companium-solar-simulator .cps-hero-label {
  text-align:center; font-size:10.5px; letter-spacing:1.6px; font-weight:700;
  color:var(--cp-leg); text-transform:uppercase; }

/* ── LES TUILES DE REPONSE : « .tu.mini » ────────────────────────────────
   Les boutons de choix du simulateur -- type de logement, occupants,
   orientation... -- prennent le meme dessin que ceux du parcours : une
   ligne, un libelle, une pastille a droite.
   RONDE : le simulateur ne pose que des choix uniques.

 ⚠️ 04/09 (soir) — CES REGLES VISAIENT « .opts button » ET « .seg button »,
 QUI N EXISTENT NULLE PART. Mesure : 0 occurrence dans simulator.php, contre
 14 pour « .pill ». Toute cette couche etait donc MORTE depuis le jour ou on
 l a ecrite -- le simulateur n a jamais recu le dessin de tuile de la
 maquette. C est le neuvieme mecanisme de ce projet qui a l air de marcher et
 ne fait rien. Les selecteurs visent desormais « .pill-grid .pill ».        */
#companium-solar-simulator .pill-grid .pill {
  display:flex; align-items:center; gap:12px; width:100%;
  padding:14px 15px; text-align:left;
  background:var(--cp-blanc); border:0;
  border-radius:var(--sd-tuile-rayon, 10px);
  box-shadow:inset 0 0 0 1px var(--cp-filet);
  font-size:14.5px; font-weight:600; color:var(--cp-titre);
  transition:box-shadow .13s, background .13s; }
#companium-solar-simulator .pill-grid .pill:hover {
  box-shadow:inset 0 0 0 1.5px var(--cp-encre); }
#companium-solar-simulator .pill-grid .pill::after {
  content:""; margin-left:auto; flex:none; width:19px; height:19px;
  border-radius:50%; box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); }
#companium-solar-simulator .pill-grid .pill.active,
#companium-solar-simulator .pill-grid .pill[aria-pressed="true"] {
  background:var(--cp-blanc); color:var(--cp-titre);
  box-shadow:inset 0 0 0 1.5px var(--cp-jaune); }
#companium-solar-simulator .pill-grid .pill.active::after,
#companium-solar-simulator .pill-grid .pill[aria-pressed="true"]::after {
  box-shadow:inset 0 0 0 1.5px var(--cp-jaune);
  background:radial-gradient(circle at center, var(--cp-jaune) 0 45%, transparent 46%); }

/* ── LE BOUTON DE FIN : « .benvoi » ──────────────────────────────────────── */
#companium-solar-simulator .cps-envoi { text-align:center; padding:8px 0 0;
  margin:var(--sim-envoi-air, 32px) 0; display:flex; justify-content:center; }
#companium-solar-simulator .cps-bt-final {
  font:inherit; font-size:var(--sim-envoi-taille, 16.5px); font-weight:800;
  border:0; cursor:pointer;
  padding:var(--sim-envoi-padding, 18px 34px); border-radius:12px;
  background:var(--sim-envoi-fond, #E6FF12);
  color:var(--sim-envoi-encre, #14170A)!important;
  box-shadow:inset 0 0 0 var(--sim-envoi-filet, 2px) var(--sim-envoi-encre, #14170A);
  display:inline-flex; align-items:center; justify-content:center; }

/* ── LES SORTIES DE FIN : « .sorties » ───────────────────────────────────── */
#companium-solar-simulator .cps-sortie-fin { margin-top:16px; display:flex; gap:22px;
  justify-content:center; flex-wrap:wrap; }
#companium-solar-simulator .cps-sortie-fin a { font-size:13px; color:var(--cp-txt);
  cursor:pointer; font-weight:600; border-bottom:1px solid var(--cp-filet-fort);
  text-decoration:none; }

/* ── LE TELEPHONE ────────────────────────────────────────────────────────── */
@media (max-width:760px) {
  .cps-par { grid-template-columns:1fr; min-height:0; }
  .cps-cote { display:none; }
  .cps-corps { padding:16px 15px; min-height:0; }
  /*  La colonne disparait : le lien de retour du haut reprend son role.     */
  .cps-sortie-haut { display:block; }
  #companium-solar-simulator .cps-card > h2,
  #companium-solar-simulator .cps-step-card h2 { font-size:19px; }
}

/* ── POINT 2.4 — CE QUI ETAIT ECRIT DANS LES ATTRIBUTS DU SIMULATEUR ─────
   Les 128 attributs style= de la page etaient TOUS de la decoration :
   aucun masquage, aucune valeur fabriquee par PHP -- compte fait avant
   d y toucher. Chaque declaration DISTINCTE devient une regle, et les
   elements qui portaient la meme la partagent : « margin-top:16px »
   etait ecrit douze fois dans la page, il l est une fois ici.

   Les noms sont neutres a dessein. Un nom qui decrirait l APPARENCE
   (« .sim-marge-16 ») mentirait des qu on changerait la valeur ; un nom
   qui decrirait le ROLE demanderait de deviner l intention de chacun
   des 128. On numerote, et la declaration se lit a cote.               */
.sim-d68 { margin-top:0; }
.sim-d35 { margin-top:4px; }
.sim-d20 { margin-top:9px; }
.sim-d11 { margin-top:8px; }
.sim-d5 { margin-top:6px; }
.sim-d32 { margin-top:18px; }
.sim-d6 { margin-top:10px; }
.sim-d3 { margin-top:12px; }
.sim-d2 { margin-top:14px; }
.sim-d1 { margin-top:16px; }
.sim-d25 { margin-top:22px; }
.sim-d41 { margin:10px 0 2px; }
.sim-d29 { position:relative; }
.sim-d37 { background:#D7DBD5; }
.sim-d31 { margin-bottom:12px; }
.sim-d22 { margin-bottom:18px; }
.sim-d8 { color:var(--ico-foyer); }
.sim-d76 { color:var(--ico-pertes); }
.sim-d18 { color:var(--ico-courbe); }
.sim-d9 { color:var(--ico-soleil); }
.sim-d19 { color:var(--ico-materiel); }
.sim-d43 { color:var(--sim-ico-foyer); }
.sim-d44 { color:var(--sim-ico-pertes); }
.sim-d16 { color:var(--sim-ico-courbe); }
.sim-d15 { color:var(--sim-ico-soleil); }
.sim-d75 { background:var(--barre-avec); }
.sim-d74 { background:var(--barre-sans); }
.sim-d38 { background:var(--sim-accent); }
.sim-d14 { margin-top:8px;color:#6b7780; }
.sim-d72 { flex:${Math.max(1,_autoRate)}; }
.sim-d46 { color:var(--sim-ico-materiel); }
.sim-d45 { color:var(--sim-ico-stockage); }
.sim-d42 { margin-top:14px;color:#6b7780; }
.sim-d39 { font-weight:600;color:#071A33; }
.sim-d21 { padding:30px;overflow:hidden; }
.sim-d17 { flex:0 0 auto;min-width:150px; }
.sim-d7 { color:#071A33;font-weight:600; }
.sim-d73 { flex:${Math.max(1,_reseauRate)}; }
.sim-d12 { grid-template-columns:1fr 170px; }
.sim-d77 { width:${qrMm}mm;height:${qrMm}mm; }
.sim-d48 { position:relative;margin-top:14px; }
.sim-d53 { text-align:center;padding:6px 0 2px; }
.sim-d10 { grid-template-columns:repeat(2,1fr); }
.sim-d4 { grid-template-columns:repeat(3,1fr); }
.sim-d13 { line-height:1;color:var(--sim-accent); }
.sim-d33 { display:flex;align-items:center;gap:8px; }
/*  .sim-d60 RETIREE LE 06/09 : elle contenait du JavaScript, donc elle ne
    declarait rien. La hauteur se pose desormais par « --h ».            */
.sim-d78 { margin:0 0 8px;font-size:19px;color:#23292D; }
.sim-d56 { width:19px;height:19px;display:inline-block; }
.sim-d54 { width:64px;height:64px;display:inline-block; }
.sim-d36 { width:42px;height:42px;display:inline-block; }
.sim-d27 { font-weight:800;color:#23292D;margin:2px 0 0; }
.sim-d50 { margin:16px 0 0;font-weight:800;color:#22262A; }
.sim-d40 { margin-top:10px;color:#4f5b61;font-weight:500; }
.sim-d70 { height:'+(_pr.sans[j]/_gmax*100).toFixed(1)+'%; }
.sim-d59 { grid-template-columns:1fr auto;align-items:center; }
.sim-d47 { display:flex;flex-wrap:wrap;gap:8px;margin-top:6px; }
/*  .sim-d61 RETIREE LE 06/09 : meme cause, meme reparation.             */
.sim-d28 { grid-template-columns:minmax(0,1fr) 150px minmax(0,1fr); }
.sim-d71 { height:'+(Math.max(0,_pr.avec[j])/_gmax*100).toFixed(1)+'%; }
.sim-d63 { display:flex;height:44px;border-radius:11px;overflow:hidden; }
.sim-d79 { margin:0 0 20px;color:#3d4a52;font-size:14px;line-height:1.5; }
.sim-d34 { display:flex;gap:10px;align-items:flex-start;margin-top:16px; }
.sim-d80 { display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap; }
.sim-d55 { margin-top:8px;max-width:580px;margin-left:auto;margin-right:auto; }
.sim-d57 { width:19px;height:19px;display:inline-block;color:var(--sim-accent); }
.sim-d26 { margin-top:26px;display:flex;gap:12px;flex-wrap:wrap;align-items:center; }
.sim-d49 { position:absolute;left:-99999px;top:auto;width:1px;height:1px;overflow:hidden; }
.sim-d64 { display:flex;flex-wrap:wrap;gap:18px;margin-top:14px;font-size:13px;color:#6A7278; }
.sim-d58 { display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:12px; }
.sim-d52 { flex:0 0 auto;width:22px;height:22px;margin-top:2px;accent-color:var(--select-ring);cursor:pointer; }
.sim-d30 { margin-top:16px;display:flex;justify-content:space-between;gap:14px;align-items:center;flex-wrap:wrap; }
.sim-d69 { width:'+w+'%;background:'+c+';color:'+tc+';font-size:10px;text-align:center;line-height:26px;font-weight:800; }
.sim-d67 { display:inline-block;width:11px;height:11px;border-radius:3px;background:#D7DBD5;margin-right:7px;vertical-align:-1px; }
.sim-d66 { display:inline-block;width:11px;height:11px;border-radius:3px;background:'+accentDark+';margin-right:7px;vertical-align:-1px; }
.sim-d65 { display:inline-block;width:11px;height:11px;border-radius:3px;background:var(--sim-accent);margin-right:7px;vertical-align:-1px; }
.sim-d23 { margin:0;color:#23292D;font-size:clamp(34px,5vw,54px);line-height:1.03;font-weight:720;letter-spacing:-.05em;text-transform:none; }
.sim-d51 { display:flex;gap:12px;align-items:flex-start;margin-top:8px;transition:border-color .2s,background .2s,box-shadow .2s;cursor:pointer; }
.sim-d62 { width:'+w+'%;background:'+bg+';height:100%;display:flex;align-items:center;justify-content:center;color:'+tc+';font-size:13px;font-weight:800; }
.sim-d24 { display:block!important;margin-top:14px;color:#4f5b61;font-size:0.36em;font-weight:500;line-height:1.6;letter-spacing:-.01em;text-transform:none;max-width:840px; }

/* ══ POINT 3.3 — TROIS GRAISSES, PAS HUIT ═════════════════════════════════
   Mesure du 04/09, sur la page servie : l accueil en portait cinq (400, 500,
   600, 700 et le 900 que le navigateur donne a <b> par defaut), le parcours
   quatre, le simulateur HUIT — 400, 430, 500, 600, 700, 750, 760, 950.

   La regle est de trois au plus, et elles ont un role chacune :
       400  le texte courant
       600  les titres et les libelles
       700  le seul geste principal de l ecran
   Les valeurs intermediaires (430, 500, 750, 760, 950) ne se distinguaient
   de leur voisine par rien qu un oeil puisse voir : elles ajoutaient du
   desordre, pas de la hierarchie.

   ⚠️ ON CIBLE LES ELEMENTS RELEVES, PAS TOUT L ECRAN. Un « * { font-weight } »
   ecraserait aussi ce qui est deja juste, et masquerait la prochaine derive
   au lieu de la montrer.                                                    */
#companium-solar-simulator h1 span,
#companium-solar-simulator .sim-d24            { font-weight:400; }
#companium-solar-simulator .cps-check-box      { font-weight:700; }
#companium-solar-simulator .cps-hero-check span,
#companium-solar-simulator .cps-hero-check     { font-weight:600; }
#companium-solar-simulator .btn.accent         { font-weight:700; }
#companium-solar-simulator .small              { font-weight:400; }
/*  Le parcours : un seul <strong> a 900, celui du compteur.                 */
.wiz-wrap strong                               { font-weight:700; }

/* ══ SEQUENCE 4 — L ECRAN D ACCUEIL DU SIMULATEUR ═════════════════════════
   04/09/2026. Il ne ressemblait a rien de la maquette : un titre de 54 px,
   une accroche de 19 px, et cette accroche EN JAUNE SUR BLANC.

   ⚠️ LE JAUNE N EST JAMAIS UNE COULEUR DE TEXTE SUR CLAIR — releve fait sur
   les 25 emplois du jaune de la maquette (voir le compte rendu du 04/09).
   Sur fond sombre il est un texte ; sur fond clair il est TOUJOURS un fond :
   fond de bouton, lisere de 3 px, pastille, ou surlignage — et dans ce
   dernier cas le texte reste a l encre (maquette, ligne 1112 : le mot
   « simulateur » est surligne, il n est pas colore).

   Mesure du 04/09 sur la page servie : le paragraphe d accroche etait en
   rgb(191,208,34) sur rgb(255,255,255). Contraste 1,66 contre 1. Le seuil
   d un texte est 4,5.

   LES TAILLES viennent de « .q h3 » et « .q .aide » de la maquette -- ce
   sont celles d un ecran de question, et cet accueil en est un.            */
#companium-solar-simulator .hero h1 {
  font-size:25px; letter-spacing:-.6px; line-height:1.15;
  color:var(--cp-titre); font-weight:600; margin:0 0 8px; }
#companium-solar-simulator .hero h1 span,
#companium-solar-simulator .sim-d24 {
  /*  Cale sur le bord gauche du titre, pas centre : « margin:auto » le
      poussait a 634 px quand le titre demarrait a 511.                   */
  display:block; margin:8px 0 0; font-size:14.5px; line-height:1.5;
  letter-spacing:normal; font-weight:400;
  /*  L encre douce des paragraphes de la maquette, jamais le jaune.        */
  color:var(--cp-leg); max-width:62ch; }
#companium-solar-simulator .cps-hero-label {
  text-align:left; font-size:10.5px; letter-spacing:1.6px; font-weight:700;
  color:var(--cp-leg); text-transform:uppercase; }

/* ── LES AUTRES ENDROITS OU LE JAUNE SERVAIT DE TEXTE SUR CLAIR ──────────
   Releves un par un sur la page servie, en cherchant tout element dont la
   couleur est jaune et dont le fond calcule est clair. Un DESSIN en jaune
   sur blanc tombe a 1,12 contre 1 : il ne se voit pas davantage qu un texte.
   La maquette met ses pictogrammes en « --gris » sur fond clair, et ne les
   passe au jaune que sur la tuile a fond encre.                            */
#companium-solar-simulator .head .ico,
#companium-solar-simulator .cps-confirm-ico,
#companium-solar-simulator .cps-sol-dessin,
#companium-solar-simulator .cps-liste-ico,
#companium-solar-simulator .cps-batt-ico,
#companium-solar-simulator .toggle .emoji { color:var(--cp-gris); }
#companium-solar-simulator .cps-fold-ico,
#companium-solar-simulator .cps-liste-ck,
#companium-solar-simulator .cps-rep-maison svg,
#companium-solar-simulator .pill.has-picto:not(.active) .cps-choice-picto svg,
#companium-solar-simulator .cps-equipment-category-grid .toggle:not(.active) .cps-picto {
  stroke:var(--cp-gris); color:var(--cp-gris); }
/*  « la solution retenue » : son libelle passait au jaune sur blanc.       */
#companium-solar-simulator .cps-sol-retenue .cps-liste-ico,
#companium-solar-simulator .cps-sol-retenue b { color:var(--cp-titre); }
/*  Les deux classes issues des anciens attributs, qui portaient le jaune.  */
#companium-solar-simulator .sim-d13,
#companium-solar-simulator .sim-d57 { color:var(--cp-gris); }

/* ══ AJOUT DU 04/09 (soir) — LES TUILES DU SIMULATEUR SUR TELEPHONE ════════

   La precision de Gerard : « partout ou j ai ecrit toutes les tuiles du
   parcours, lis : ET DU SIMULATEUR ». Meme dessin, meme raison -- sur un
   telephone il n y a pas de survol.

   ⚠️ UNIQUEMENT CE QUI EST UNE TUILE. Le simulateur porte aussi des champs de
   saisie, des curseurs et une carte : « .pill-grid .pill » sont ses tuiles de
   reponse, et rien d autre n est vise ici.

   ⚠️ CE BLOC EST EN FIN DE FEUILLE, ET C EST DELIBERE : la couche du
   simulateur vit apres celle du parcours, et une regle posee avant elle
   perdrait en silence.                                                      */
@media (max-width:760px) {
  /*  AU REPOS : fond blanc, contour, et le lisere jaune a gauche.
      Le contour du survol est REDIT a l identique -- un seul trait, jamais
      deux superposes, et aucun etat intermediaire au toucher.              */
  #companium-solar-simulator .pill-grid .pill,
  #companium-solar-simulator .pill-grid .pill:hover {
    position:relative; overflow:hidden;
    background:var(--cp-blanc);
    box-shadow:inset 0 0 0 var(--sd-tuile-tel-trait, 1.5px) var(--sd-tuile-tel-contour, #14171A); }
  /*  Le lisere : le simulateur n en avait pas du tout. On le pose comme celui
      du parcours -- un FOND de 3 px, jamais un texte ni un trait (CDC 14.4). */
  #companium-solar-simulator .pill-grid .pill::before {
    content:""; position:absolute; left:0; top:10px; bottom:10px; width:3px;
    border-radius:0 3px 3px 0; pointer-events:none;
    background:var(--s1-tuile-selection, var(--cp-jaune)); }
  /*  CHOISIE : fond a l encre, lisere jaune, voyant allume.                */
  #companium-solar-simulator .pill-grid .pill.active,
  #companium-solar-simulator .pill-grid .pill[aria-pressed="true"] {
    background:var(--tu-fond-on); color:#fff;
    box-shadow:inset 0 0 0 var(--sd-tuile-tel-trait, 1.5px) var(--tu-fond-on); }
  #companium-solar-simulator .pill-grid .pill.active::after,
  #companium-solar-simulator .pill-grid .pill[aria-pressed="true"]::after {
    box-shadow:inset 0 0 0 1.5px var(--s1-tuile-selection, var(--cp-jaune));
    background:radial-gradient(circle at center,
      var(--s1-tuile-selection, var(--cp-jaune)) 0 45%, transparent 46%); }
}


/* ══ SEQUENCES 2 ET 3 DU 04/09 (nuit) — LA BARRE DU HAUT ET L ACCUEIL MOBILE ══

   ⚠️ CE BLOC EST EN FIN DE FEUILLE : les regles de l accueil vivent au debut,
   celles du telephone dans un media plus haut. Une correction posee avant elles
   perdrait en silence.                                                        */

/*  2.1 — LE BOUTON A TROIS TRAITS. Il n existe QUE sur telephone. Sur
    ordinateur les cinq liens tiennent en ligne : un bouton de plus y serait un
    geste de plus pour rien.                                                  */
.ac-menu { display:none; }
.ac-menu span { display:block; width:19px; height:2px; border-radius:2px;
  background:var(--cp-encre); transition:transform .18s, opacity .18s; }

@media (max-width:760px) {
  .ac-menu {
    display:flex; flex-direction:column; justify-content:center; gap:4px;
    width:38px; height:36px; padding:0 9px; flex:none; cursor:pointer;
    border:0; border-radius:9px; background:transparent;
    box-shadow:inset 0 0 0 1px var(--cp-filet-fort);
  }
  /*  Ouvert, les trois traits deviennent une croix : le meme bouton ferme.  */
  .ac-menu.ouvert span:nth-child(1) { transform:translateY(6px) rotate(45deg); }
  .ac-menu.ouvert span:nth-child(2) { opacity:0; }
  .ac-menu.ouvert span:nth-child(3) { transform:translateY(-6px) rotate(-45deg); }

  /*  ⚠️ LE PANNEAU EST « .ac-nav » LUI-MEME, pas un second menu. Deux menus
      finiraient par ne plus dire la meme chose. Il reste « display:none »
      tant qu il n est pas ouvert -- c est la regle d origine, on ne la
      remplace pas, on lui ajoute son contraire.                            */
  .ac-nav.ouvert {
    display:flex; flex-direction:column; gap:0;
    position:absolute; top:100%; left:0; right:0; z-index:40;
    background:var(--cp-blanc); padding:6px 0;
    box-shadow:0 10px 24px rgba(9,11,13,.18);
    border-top:1px solid var(--cp-filet);
  }
  .ac-nav.ouvert a { padding:13px var(--ac-gouttiere); font-size:15px; }
  .ac-nav.ouvert a::after { content:none; }
  /*  La barre devient le repere du panneau : sans cela il se poserait par
      rapport a la page et suivrait le defilement.                          */
  .ac-top { position:relative; }

  /*  2.2 — « Espace partenaire » VA TOUT A DROITE. Sur ordinateur, c est
      « .ac-nav { flex:1 } » qui l y poussait ; le menu masque, il retombait
      contre le logo.                                                       */
  .ac-bhaut { margin-left:auto; }

  /*  3.2 — LES DEUX BOUTONS COTE A COTE, MOITIE-MOITIE, MEME HAUTEUR.
      ⚠️ « align-items:stretch » et non « center » : c est lui qui donne aux
      deux boutons la MEME hauteur quand le libelle du second passe sur deux
      lignes. Un centrage les laisserait de tailles differentes.
      ⚠️ Et « min-width:0 » sur chacun : sans lui, un bouton dont le texte ne
      se coupe pas refuse de descendre sous sa largeur minimale, et la rangee
      deborde (le meme piege que le bandeau du bas, CDC 12.5).              */
  .ac-action .cp-boutons { display:flex; align-items:stretch; gap:10px; }
  .ac-action .cp-boutons > .cp-bp,
  .ac-action .cp-boutons > .cp-bs {
    flex:1 1 0; min-width:0; width:auto; height:auto; min-height:52px;
    white-space:normal; text-align:center; line-height:1.25;
    padding:10px 14px; border-radius:12px; }
}

/* ══ SEQUENCE 3 DU 04/09 (nuit) — L ACCUEIL SUR TELEPHONE ══════════════════ */
@media (max-width:760px) {

  /*  3.1 — LE TRAIT JAUNE REMONTE LEGEREMENT. Il se calait sur la hauteur de
      la ligne de texte, donc au niveau du panneau COMPANIUM visible derriere
      sur la photo. Deux pixels suffisent : au-dela, il flotterait.          */
  .ac-pastille { position:relative; top:-2px; }

  /*  3.3 — LES NEUF TUILES : CARREES, RESSERREES, PLEINE LARGEUR.
      ⚠️ EXCEPTION ASSUMEE a la hauteur unique posee le 04/09 : celle-la vaut
      sur ordinateur, ou une tuile est un rectangle large. Sur le carre mobile
      de l accueil, une hauteur fixe en pixels donnerait soit un rectangle
      etire, soit un carre qui deborde selon la largeur du telephone.
      « aspect-ratio:1 » suit la largeur, quel que soit l appareil.
      ⚠️ RETIRE LE 06/09 : « padding-left:0 ; padding-right:0 » sur cette
      seule section. Les tuiles de metier prenaient TOUTE la largeur de
      l ecran et touchaient les deux bords -- mesure du 06/09 : 0 px a
      gauche et 0 a droite, quand les neuf autres sections etaient a 15.
      La maquette v2 ecrit « .sec { padding:30px 15px } » pour TOUTES ses
      sections, sans exception : c est elle qui fait foi.                */
  /*  ⚠️ 05/09/2026 — TOUT LE DESSIN DE TUILE DE CE BLOC EST RETIRE, A SA
 SOURCE. Il datait du 04/09 : douze declarations qui redessinaient la tuile
 de l accueil sur telephone (flex, picto a 26, deux lignes de nom, detail
 colle au bas) ET la peignaient EN NOIR AU REPOS.

 LA MAQUETTE v2 FAIT FOI DEPUIS AUJOURD HUI, et elle dit autre chose : sur
 telephone, TOUTE tuile est BLANCHE au repos, avec son contour noir et son
 lisere jaune deja visibles. Le fond noir y est reserve a l etat CHOISI.

 ⚠️ ET CE BLOC GAGNAIT PAR SON IDENTIFIANT : « #ac-metiers .cp-tuile » vaut
 (1,1,0) contre (0,1,0) pour la regle de la v2. Mesure du 05/09 : les tuiles
 de l accueil sur telephone faisaient 53 et 71 px de haut au lieu de 160, et
 leur pictogramme se retrouvait a -360 du haut de la tuile. Une regle plus
 bas ne pouvait pas la rattraper : il fallait la retirer ici.

 CE QUI RESTE : la section pleine largeur et l air de ses titres, que la v2
 ne contredit pas.                                                        */
}

/* ══ SEQUENCES 4.4, 5 ET 6 DU 04/09 (nuit) ════════════════════════════════ */

/* ── 4.4 — LE SURVOL DEVIENT NOIR AVEC LE JAUNE, SUR ORDINATEUR ───────────
   ⚠️ DECISION DE GERARD DU 04/09, et elle PRIME SUR LA MAQUETTE, qui ne
   prevoit qu un contour assombri. Elle vaut au parcours ET au simulateur.
   ⚠️ Elle ne s applique QUE sur ordinateur : sur telephone il n y a pas de
   survol, et le dessin y est deja noir a la selection.                     */
@media (min-width:761px) {
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover,
  #companium-solar-simulator .pill-grid .pill:hover {
    background:var(--cp-encre); color:#fff;
    box-shadow:inset 0 0 0 1.5px var(--cp-encre); }
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover::before,
  #companium-solar-simulator .pill-grid .pill:hover::before,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option:hover::before {
    background:var(--s1-tuile-selection, var(--cp-jaune)); }
  /*  Le nom, le detail et le dessin doivent suivre le fond : sur l encre,
      l encre ne se lit pas.                                               */
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .s1-pill-label,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .cps-pill-text { color:#fff; }
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .s1-pill-detail { color:#A9B0B6; }
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .qs-picto,
  #companium-solar-simulator .pill-grid .pill:hover svg {
    color:var(--s1-tuile-selection, var(--cp-jaune)); }
  /*  La pastille de choix reste lisible sur l encre.                       */
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill:hover::after,
  #companium-solar-simulator .pill-grid .pill:hover::after {
    box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); }
}

/* ── 5.1 — RETIREE LE 06/09 : ELLE EMPECHAIT LE CENTRAGE DE LA v2 ─────────
   Ce bloc du 04/09 donnait au simulateur SA PROPRE hauteur (92/88 px) et un
   « display:flex; flex-direction:column » pose sur « .pill.has-picto ».

   ⚠️ C EST LA CAUSE, MESUREE, DU DEFAUT DE CENTRAGE. Un point d exclamation
   dans un selecteur pese plus que dix classes -- ici c est une classe de
   plus qui suffisait : « .pill-grid .pill.has-picto » vaut (1,3,0), la
   regle de la maquette v2 « .pill-grid .pill » vaut (1,2,0). La v2 ecrivait
   « display:grid » et ses deux rangees ; le calcul rendait « display:flex ».
   Releve du 06/09 sur la page servie, avant : display=flex, rangees
   annoncees « 34px 36.25px » mais INERTES, hauteurs 108,3 et 98 dans deux
   grilles voisines, titre a 26 px au lieu de 36,25.

   ⚠️ SUPPRIMEE, PAS RECOUVERTE. Ajouter une regle plus lourde par-dessus
   aurait laisse ici un dessin concurrent qui reparaitrait au premier
   selecteur oublie. Le reglage « tuile_simu_hauteur » n a donc plus de
   lecteur : sa migration le dit dans son libelle.                        */

/* ── 5.2 — L ETAT CHOISI PASSE EN NOIR, comme au parcours ─────────────────
   Il restait blanc avec un contour jaune : rien ne distinguait franchement
   une reponse retenue d une reponse offerte.                               */
#companium-solar-simulator .pill-grid .pill.active,
#companium-solar-simulator .pill-grid .pill[aria-pressed="true"] {
  background:var(--cp-encre); color:#fff;
  box-shadow:inset 0 0 0 1.5px var(--cp-encre); }
#companium-solar-simulator .pill-grid .pill.active::before,
#companium-solar-simulator .pill-grid .pill[aria-pressed="true"]::before {
  content:""; position:absolute; left:0; top:10px; bottom:10px; width:3px;
  border-radius:0 3px 3px 0; pointer-events:none;
  background:var(--s1-tuile-selection, var(--cp-jaune)); }
#companium-solar-simulator .pill-grid .pill.active svg { color:var(--s1-tuile-selection, var(--cp-jaune)); }

/* ── 5.4 — LE CHAPEAU AVAIT SA PREMIERE LETTRE COUPEE ─────────────────────
   « VOTRE ETUDE SE CONSTRUIT » demarrait au bord exact de son conteneur :
   l interlettre de 1,6 px pousse le premier caractere vers la gauche, et
   « overflow:hidden » le tranchait. Un demi-caractere d air suffit, et il
   suit l interlettre plutot que d etre un nombre en dur.                   */
#companium-solar-simulator .cps-card > .label,
#companium-solar-simulator .cps-hero-label,
#companium-solar-simulator .cps-wizard-title {
  padding-left:2px; padding-right:2px; }

/* ── 5.5 — LE FIL D ARIANE : UN TRAIT DESSOUS, PAS UN SURLIGNAGE ──────────
   ⚠️ Le jaune plein derriere un texte fonce est un SURLIGNAGE : il attire
   plus que l etape elle-meme. Un trait de 3 px en dessous dit la meme chose
   sans peindre le mot. Les deux fils -- celui du parcours et celui du
   simulateur -- prennent le meme dessin : ils disent la meme chose.        */
#companium-solar-simulator .cps-wizard-chip.current {
  background:transparent; position:relative; }
#companium-solar-simulator .cps-wizard-chip.current::after {
  content:""; position:absolute; left:11px; right:11px; bottom:0; height:3px;
  border-radius:3px 3px 0 0; background:var(--cp-jaune); }
.wiz-steprail-item.current { background:transparent; position:relative; }
.wiz-steprail-item.current::after {
  content:""; position:absolute; left:11px; right:11px; bottom:0; height:3px;
  border-radius:3px 3px 0 0; background:var(--cp-jaune); }

/* ── 6 — LA CASE DE CONSENTEMENT ──────────────────────────────────────────
   ⚠️ C EST LE CONSENTEMENT DE LA LOI DU 11/08. Un consentement doit etre
   VISIBLEMENT DONNE, jamais glisse : le cadre le dit, et il se coche d un
   bout a l autre -- viser une case de 16 px au doigt est penible.
   ⚠️ ET SON DESSIN RESTE PLUS SOBRE QUE CELUI D UNE TUILE DE REPONSE : c est
   un accord, pas une reponse au questionnaire. Pas de fond noir, pas de
   lisere jaune : un filet qui s epaissit et un fond a peine teinte.        */
#companium-solar-simulator #cps-consent-box {
  display:flex; align-items:flex-start; gap:12px; cursor:pointer;
  padding:14px 16px; border-radius:12px;
  background:var(--cp-blanc);
  box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort);
  transition:box-shadow .13s, background .13s; }
#companium-solar-simulator #cps-consent-box:hover {
  box-shadow:inset 0 0 0 1.5px var(--cp-encre); }
#companium-solar-simulator #cps-consent-box input[type=checkbox] {
  flex:none; width:19px; height:19px; margin:1px 0 0; accent-color:var(--cp-encre);
  cursor:pointer; }
#companium-solar-simulator #cps-consent-box .small {
  flex:1; min-width:0; line-height:1.45; }
/*  Coche : le filet passe a l encre et le fond se teinte a peine. Discret,
    et pourtant lisible d un coup d oeil.                                   */
#companium-solar-simulator #cps-consent-box:has(input:checked) {
  background:#F4F6F3;
  box-shadow:inset 0 0 0 1.5px var(--cp-encre); }

/*  6.5 — LE LIEN AVEC LE BOUTON D ENVOI SE VOIT. Toucher le bouton eteint
    fait clignoter le cadre de la case : c est elle qui manque, et elle le
    dit elle-meme plutot que par un message ailleurs sur l ecran.           */
#companium-solar-simulator #cps-consent-box.cps-manque {
  animation:cpsManque .9s ease; }
@keyframes cpsManque {
  0%,100% { box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); }
  20%,60% { box-shadow:inset 0 0 0 2.5px var(--cp-encre); }
}

/* ══════════════════════════════════════════════════════════════════════════
   LA MAQUETTE v2 — REFERENCE UNIQUE DEPUIS LE 05/09/2026
   _maquettes/COMPANIUM_maquette_v2.html
   ══════════════════════════════════════════════════════════════════════════

   ⚠️ ELLE REMPLACE CELLE DU 03/09, ET CELLE DU PARCOURS TELEPHONE DU 30/08.
   Toute regle plus haut dans cette feuille qui cite une maquette anterieure
   est PERIMEE : ce bloc la recouvre. On ne desosse pas les couches d avant --
   on ecrit APRES, et on gagne (methode du 04/09, CDC 13.1).

   ⚠️ COMMENT LA MAQUETTE A ETE TRADUITE. Sa vue telephone est simulee par un
   ATTRIBUT pose sur un conteneur : « .scene[data-vue="tel"] », 58 fois.
   CET ATTRIBUT N EXISTE PAS SUR LE VRAI SITE. Chacune de ces regles devient
   une regle sous REQUETE DE MEDIA, au seuil deja retenu par le site :

       .scene[data-vue="tel"] X   ->   @media (max-width:760px) { X }

   Recopier l attribut aurait donne 58 regles qui n auraient jamais rien peint.

   ⚠️ CE QUI N EST PAS LE SITE ET N EST PAS REPRIS : le bouton rond jaune, le
   panneau de reglages et ses curseurs, les boutons Ordinateur/Telephone, le
   choix d ecran, et le conteneur « .scene ». C est l outil de maquettage ;
   l ecran d administration existe deja (/admin/apparence-site).

   ⚠️ LES DOUZE REGLAGES viennent de « site_display_settings » et portent
   CHACUN deux colonnes. Ils arrivent ici par « --sd-* », que
   site_display_css() publie avec la requete de media qui tranche a 760 px --
   pas par site_display(), qui ne lirait qu une colonne sur deux.
   ══════════════════════════════════════════════════════════════════════════ */

/* ── LES JETONS DE LA TUILE, une seule fois pour les trois ecrans ───────── */
:root {
  --tu-ecart:    var(--sd-tuile-ecart, 5px);
  --tu-picto:    var(--sd-tuile-picto, 34px);
  --tu-liseret:  var(--sd-tuile-liseret, 3px);
  --tu-air:      var(--sd-tuile-air, 16px);
  --tu-rayon:    var(--sd-tuile-rayon, 12px);
  --tu-h:        var(--sd-tuile-choix-hauteur, 60px);
  --tu-h-acc:    var(--sd-tuile-hauteur-accueil, 60px);
  --tu-h-plate:  var(--sd-tuile-hauteur-plate, 78px);
  /*  ⚠️ « --tu-h-det » A DISPARU DE LA MAQUETTE v2, et ce n est pas un oubli :
 la hauteur d une tuile a detail n est plus un nombre pose a cote, elle est la
 SOMME de ses rangees -- pictogramme + titre + detail + air + ecarts. Deux
 reglages pour une seule mesure finiraient par se contredire. Le reglage
 « tuile_hauteur_detail » reste en base, sans lecteur ; sa migration le dit.  */
  --tu-lg-titre: var(--sd-tuile-lignes-titre, 2.5em);
  /*  ⚠️ 2,4 em SE COMPTE SUR LA TUILE, JAMAIS SUR LE DETAIL. La tuile
      est en 14,5 px : la rangee vaut donc 34,8 px, et deux lignes de detail
      (12 px x 1,35 x 2 = 32,4) y tiennent. Comptee sur le detail lui-meme,
      la meme valeur ne fait que 28,8 px et TRANCHE la seconde ligne en plein
      milieu de ses lettres -- vu le 07/09 sur « Menuiseries & Fermetures ».
      C est pour cela que le detail prend « height:100% » et non « 2.4em ».  */
  --tu-lg-det:   var(--sd-tuile-lignes-detail, 2.4em);
  /*  ⚠️ LE FOND DE LA TUILE SURVOLEE OU CHOISIE — maquette v2 du 06/09,
      « --tu-fond-on ». UN SEUL REGLAGE : toutes les regles qui peignaient
      une tuile a l encre passent par lui, sur les trois ecrans, au survol
      comme a l etat choisi.
      ⚠️ ET LE RESTE DE LA CHARTE NE LE LIT PAS : le pied de page, la barre
      des etapes, les boutons et le bandeau gardent « --cp-encre ». Les
      confondre aurait repeint la moitie du site.                       */
  --tu-fond-on:  var(--sd-tuile-choisie-fond, #131C30);
  --air-titre:   var(--sd-air-titre-ecran, 24px);
}

/* ══ LA TUILE — UN SEUL DESSIN, PARTOUT ═══════════════════════════════════
   Maquette v2, lignes 157 a 200. Trois familles de tuiles existent dans le
   site et recoivent le MEME dessin :
     .cp-tuile                              l accueil
     .wiz-qual-pill                         le parcours (choix ET reponses)
     #companium-solar-simulator .pill       le simulateur

   ⚠️ C EST UNE GRILLE A RANGEES, PAS UN EMPILEMENT : une rangee pour le
   pictogramme, une pour le titre, le reste dessous. C est ce qui aligne le
   contenu d une tuile a l autre -- un empilement laisse chaque tuile placer
   son texte la ou son propre contenu le pousse.                             */
.cp-grille,
.qs-mode .wiz-qual-field .wiz-qual-options,
#companium-solar-simulator .pill-grid,
#companium-solar-simulator .cps-presence-choices {
  display:flex; flex-wrap:wrap; gap:var(--tu-ecart);
  justify-content:flex-start;
  align-items:stretch; max-width:none; margin:0;
  grid-template-columns:none; grid-auto-rows:auto;
}

.cp-tuile,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill,
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option {
  position:relative; width:auto; height:auto;
  min-height:var(--tu-h);
  background:var(--cp-blanc); border:0; border-radius:var(--tu-rayon);
  box-shadow:inset 0 0 0 1px var(--cp-filet-fort);
  padding:var(--tu-air) 14px; cursor:pointer; overflow:hidden;
  /*  ⚠️ « align-content:center » ET DES RANGEES FIXES — maquette v2 du
      05/09. La v1 ancrait le contenu en haut (« start ») avec une rangee
      de titre en « auto » : une tuile au nom court laissait tout son air
      EN BAS. La v2 reserve la rangee du titre et centre le bloc : l air
      se partage en haut et en bas, a egalite.                          */
  display:grid; grid-template-rows:var(--tu-picto) var(--tu-lg-titre);
  align-content:center; justify-items:center; gap:7px;
  text-align:center; text-decoration:none;
  font:inherit; font-size:14.5px; font-weight:700; color:var(--cp-titre);
  transition:background .12s, box-shadow .12s;
}

/*  ── LE LISERE, POSE A L INTERIEUR DU CONTOUR ─────────────────────────────
    ⚠️ « left:1.5px; top:1.5px; bottom:1.5px » et un arrondi reduit de 2 :
    pose sur le bord exact, il deborderait des coins arrondis. C est la
    maquette v2 qui l ecrit ainsi, et la raison se voit a l oeil.           */
.cp-tuile::before,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill::before,
#companium-solar-simulator .pill-grid .pill::before,
#companium-solar-simulator .cps-presence-choices .cps-presence-option::before {
  content:""; position:absolute; left:1.5px; top:1.5px; bottom:1.5px;
  width:var(--tu-liseret); background:transparent; pointer-events:none;
  border-radius:calc(var(--tu-rayon) - 2px) 0 0 calc(var(--tu-rayon) - 2px);
  transition:background .12s;
}

/*  ── LE PICTOGRAMME : centre, en haut, a distance FIXE du bord ───────────
    ⚠️ AUCUN FOND NI CADRE derriere un dessin, nulle part : la couleur est
    sur le TRAIT.                                                           */
.cp-tuile > svg,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-picto,
#companium-solar-simulator .pill-grid .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid .pill .cps-goal-picto,
#companium-solar-simulator .cps-presence-choices .cps-presence-led,
#companium-solar-simulator .pill-grid .pill > svg {
  width:var(--tu-picto); height:var(--tu-picto); flex:none; margin:0;
  display:flex; align-items:center; justify-content:center; align-self:center;
  background:none; border:0; border-radius:0;
  color:var(--cp-gris);
}
.cp-tuile > svg { display:block; }
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-picto svg,
#companium-solar-simulator .pill-grid .pill .cps-choice-picto svg,
/*  ⚠️ Le dessin des objectifs porte « width="22" » EN ATTRIBUT dans la page.
    Sans cette ligne il restait a 22 dans une case de 34, et son haut tombait
    a 22 la ou toutes les autres grilles le posent a 16 (mesure du 06/09). */
#companium-solar-simulator .pill-grid .pill .cps-goal-picto svg,
#companium-solar-simulator .cps-presence-choices .cps-presence-led svg {
  width:100%; height:100%; }

/*  ── LE TITRE : centre, avec ses lignes reservees ────────────────────────
    La reserve est ce qui met le detail a la meme hauteur d une tuile a
    l autre, meme quand un nom tient sur une ligne et son voisin sur deux.  */
.cp-tuile b,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-rep-titre,
#companium-solar-simulator .pill-grid .pill .cps-pill-text,
#companium-solar-simulator .pill-grid .pill > strong,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy strong {
  display:flex; align-items:center; justify-content:center;
  width:100%; height:100%;
  font-size:14.5px; font-weight:700; color:var(--cp-titre);
  line-height:1.25; margin:0; text-align:center;
  -webkit-line-clamp:none; line-clamp:none; overflow:visible;
}
.cp-tuile span,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-detail,
#companium-solar-simulator .pill-grid .pill .cps-pill-det,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy small {
  display:flex; align-items:flex-start; justify-content:center; width:100%;
  height:100%; min-height:0; font-size:12px; color:var(--cp-leg); line-height:1.35;
  -webkit-line-clamp:none; line-clamp:none; overflow:hidden;
}
/*  Le corps de la tuile de metier enveloppe titre et detail : il occupe une
    cellule et laisse ses deux enfants se ranger dessous.                   */
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-corps {
  display:block; width:100%; min-width:0; }

/* ── LES ETATS, ORDINATEUR ────────────────────────────────────────────────
   Au repos : fond blanc, contour clair, PAS de lisere.
   Au survol : fond encre, lisere jaune, TITRE EN BLANC, detail gris clair,
   pictogramme en jaune.
   ⚠️ LE TITRE EN BLANC N EST PAS UN DETAIL : sans lui, le texte a l encre
   disparait sur le fond a l encre.                                          */
@media (min-width:761px) {
  .cp-tuile:hover,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover,
  #companium-solar-simulator .pill-grid .pill:hover,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option:hover {
    background:var(--tu-fond-on); box-shadow:inset 0 0 0 1px var(--tu-fond-on);
    transform:none; color:#fff; }
  .cp-tuile:hover::before,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover::before,
  #companium-solar-simulator .pill-grid .pill:hover::before,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option:hover::before {
    background:var(--s1-tuile-selection, var(--cp-jaune)); }
  .cp-tuile:hover b,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .s1-pill-label,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .qs-rep-titre,
  #companium-solar-simulator .pill-grid .pill:hover .cps-pill-text,
  #companium-solar-simulator .pill-grid .pill:hover > strong,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option:hover .cps-presence-copy strong { color:#fff; }
  #companium-solar-simulator .pill-grid .pill:hover .cps-pill-det,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option:hover .cps-presence-copy small { color:#AEB4B9; }
  .cp-tuile:hover span,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .s1-pill-detail { color:#AEB4B9; }
  .cp-tuile:hover > svg,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .qs-picto,
  #companium-solar-simulator .pill-grid .pill:hover .cps-choice-picto,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option:hover .cps-presence-led,
  #companium-solar-simulator .pill-grid .pill:hover > svg {
    color:var(--s1-tuile-selection, var(--cp-jaune)); }
}

/* ── L ETAT CHOISI : le meme dessin que le survol, plus le voyant ────────── */
.cp-tuile.cp-on,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill.selected,
#companium-solar-simulator .pill-grid .pill.active,
#companium-solar-simulator .pill-grid .pill[aria-pressed="true"],
#companium-solar-simulator .cps-presence-choices .cps-presence-option.active,
#companium-solar-simulator .cps-presence-choices .cps-presence-option[aria-pressed="true"] {
  background:var(--tu-fond-on); box-shadow:inset 0 0 0 1px var(--tu-fond-on); color:#fff; }
.cp-tuile.cp-on::before,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill.selected::before,
#companium-solar-simulator .pill-grid .pill.active::before,
#companium-solar-simulator .pill-grid .pill[aria-pressed="true"]::before,
#companium-solar-simulator .cps-presence-choices .cps-presence-option.active::before,
#companium-solar-simulator .cps-presence-choices .cps-presence-option[aria-pressed="true"]::before {
  background:var(--s1-tuile-selection, var(--cp-jaune)); }
.cp-tuile.cp-on b,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill.selected .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill.selected .qs-rep-titre,
/*  ⚠️ LE TITRE DES OBJECTIFS EST UN « strong », PAS UN « .cps-pill-text ».
 Il n etait nomme dans AUCUNE regle d etat : au choix, le fond passait a
 l encre et le titre y restait. Mesure du 06/09, avant : fond
 rgb(17,19,21), titre rgb(17,19,21), CONTRASTE 1 -- le mot disparaissait.
 C est exactement le defaut du 05/09 sur le parcours, au meme endroit du
 raisonnement : une regle ecrite pour une classe, un ecran qui en porte
 une autre.                                                            */
#companium-solar-simulator .pill-grid .pill.active .cps-pill-text,
#companium-solar-simulator .pill-grid .pill.active > strong,
#companium-solar-simulator .cps-presence-choices .cps-presence-option.active .cps-presence-copy strong,
#companium-solar-simulator .cps-presence-choices .cps-presence-option[aria-pressed="true"] .cps-presence-copy strong { color:#fff; }
#companium-solar-simulator .pill-grid .pill.active .cps-pill-det,
#companium-solar-simulator .cps-presence-choices .cps-presence-option.active .cps-presence-copy small,
#companium-solar-simulator .cps-presence-choices .cps-presence-option[aria-pressed="true"] .cps-presence-copy small { color:#AEB4B9; }
.cp-tuile.cp-on span,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill.selected .s1-pill-detail { color:#AEB4B9; }
.cp-tuile.cp-on > svg,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill.selected .qs-picto,
#companium-solar-simulator .pill-grid .pill.active .cps-choice-picto,
#companium-solar-simulator .cps-presence-choices .cps-presence-option.active .cps-presence-led,
#companium-solar-simulator .cps-presence-choices .cps-presence-option[aria-pressed="true"] .cps-presence-led,
#companium-solar-simulator .pill-grid .pill.active > svg {
  color:var(--s1-tuile-selection, var(--cp-jaune)); }

/* ── LE VOYANT : en haut a droite, ROND, ou CARRE en choix multiple ─────── */
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill::after,
#companium-solar-simulator .pill-grid .pill::after,
#companium-solar-simulator .cps-presence-choices .cps-presence-option::after {
  content:""; position:absolute; right:10px; top:10px; margin:0;
  width:18px; height:18px; border-radius:50%; flex:none; transform:none;
  box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); background:transparent; }
.qs-mode .wiz-qual-field[data-qual-type="checkbox"] .wiz-qual-options .wiz-qual-pill::after {
  border-radius:5px; }
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill.selected::after,
#companium-solar-simulator .pill-grid .pill.active::after,
#companium-solar-simulator .pill-grid .pill[aria-pressed="true"]::after,
#companium-solar-simulator .cps-presence-choices .cps-presence-option.active::after,
#companium-solar-simulator .cps-presence-choices .cps-presence-option[aria-pressed="true"]::after {
  box-shadow:inset 0 0 0 2px var(--s1-tuile-selection, var(--cp-jaune));
  background:radial-gradient(circle,
    var(--s1-tuile-selection, var(--cp-jaune)) 0 42%, transparent 44%); }
/*  Les ecrans de CHOIX (famille, metier, specialite) et l accueil ne se
    selectionnent pas : pas de voyant. On touche une tuile, on entre.       */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill::after,
.cp-tuile::after { content:none; }

/* ── LES TUILES SANS PICTOGRAMME : « .grille.plate » de la maquette ───────
   ⚠️ DETECTEES PAR « :has() », donc SANS toucher au HTML. Une reponse sans
   dessin est une tuile plate : une seule rangee, contenu centre, hauteur
   propre. Sans cela, elle garderait la rangee vide du pictogramme -- un trou
   de 34 px en haut de la tuile.                                             */
/*  ⚠️ LA GRILLE EST PLATE, PAS LA TUILE. Mesure du 05/09 : en decidant tuile
    par tuile, une grille ou deux reponses sur quatre portaient un dessin
    rendait DEUX hauteurs et DEUX positions de titre -- 65,7 et 78, 14,7 et
    29,9. La maquette pose « .grille.plate » sur la GRILLE : ou toutes les
    tuiles gardent la rangee du pictogramme, ou aucune ne l a.           */
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.qs-picto)) .wiz-qual-pill {
  min-height:var(--tu-h-plate); grid-template-rows:1fr; align-content:center; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.qs-picto)) .qs-rep-titre {
  min-height:0; }

/*  ── LA TROISIEME RANGEE, RESERVEE PAR GRILLE ────────────────────────────
    Maquette v2 : « .grille:has(.det) > .tu » et « .grille:has(.cpt) > .tu ».
    La reserve est posee sur la GRILLE, donc sur TOUTES ses tuiles.
    ⚠️ C EST CE QUI TIENT L EXCEPTION NOMMEE PAR LA CONSIGNE : sur l ecran
    du statut, seule « Locataire » porte une phrase (l accord du
    proprietaire). « Proprietaire » garde quand meme la rangee vide -- sans
    quoi les deux tuiles n auraient ni la meme hauteur ni le titre a la
    meme place. Une reserve decidee tuile par tuile rendrait deux dessins
    cote a cote (mesure du 05/09 : 65,7 et 78).
    ⚠️ ET ELLE NE SE POSE QUE LA. Une grille sans aucun detail garde deux
    rangees : reserver partout ajouterait un trou sous le titre.        */
.qs-mode .wiz-qual-field .wiz-qual-options:has(.s1-pill-detail) .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid):has(.s1-pill-detail) .wiz-qual-pill,
.cp-grille:has(.cp-tuile span) .cp-tuile,
#companium-solar-simulator .pill-grid:has(.cps-pill-det) .pill,
#companium-solar-simulator .pill-grid:has(.cps-cpt) .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option {
  grid-template-rows:var(--tu-picto) var(--tu-lg-titre) var(--tu-lg-det); }
/*  L enveloppe du texte disparait de la grille : « display:contents » fait
    du titre et du detail deux cases a part entiere, comme dans la maquette.
    ⚠️ Sans elle, les deux tiendraient dans la SEULE case du titre.      */
#companium-solar-simulator .cps-presence-choices .cps-presence-copy { display:contents; }
/*  Quatre blocs, quatre colonnes -- deux sur telephone comme partout.     */
#companium-solar-simulator .cps-presence-choices .cps-presence-option {
  width:calc((100% - 3 * var(--tu-ecart)) / 4); flex:none; }
@media (max-width:760px) {
  #companium-solar-simulator .cps-presence-choices .cps-presence-option {
    width:calc((100% - var(--tu-ecart)) / 2); }
}

/* ── LES COLONNES ─────────────────────────────────────────────────────────
   La largeur se calcule, elle ne s estime pas :
       largeur = (100% - (n - 1) x ecart) / n                                */
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="2"] > *,
.cp-grille.cp-g2 > * { width:calc((100% - 1 * var(--tu-ecart)) / 2); }
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="3"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid > *,
.cp-grille.cp-g3 > *,
#companium-solar-simulator .pill-grid > * { width:calc((100% - 2 * var(--tu-ecart)) / 3); }
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="4"] > *,
#companium-solar-simulator .pill-grid.sim-d4 > * { width:calc((100% - 3 * var(--tu-ecart)) / 4); }
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="1"] > * { width:100%; }
/*  La pastille « Je prefere ne pas repondre » est une tuile comme les autres. */
.qs-mode .wiz-qual-field .wiz-qual-options .qs-skip-pill { grid-column:auto; }

/* ── L ACCUEIL : ses tuiles de metier sont plus hautes ───────────────────── */
.cp-tuile { min-height:var(--tu-h-acc); }

/* ══ LE TELEPHONE — les 58 regles de « .scene[data-vue=tel] » ══════════════ */
@media (max-width:760px) {
  /*  Contour noir et lisere jaune VISIBLES AU REPOS : il n y a pas de survol
      sur un telephone, et rien ne disait qu une tuile etait touchable.      */
  .cp-tuile,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill,
  #companium-solar-simulator .pill-grid .pill,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option {
    box-shadow:inset 0 0 0 1.5px var(--sd-tuile-tel-contour, #14171A);
    --tu-lg-titre:var(--sd-tuile-lignes-titre, 3.75em); }
  .cp-tuile::before,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill::before,
  #companium-solar-simulator .pill-grid .pill::before {
    background:var(--s1-tuile-selection, var(--cp-jaune)); }

  /*  DEUX COLONNES, quel que soit le nombre demande sur ordinateur.        */
  .qs-mode .wiz-qual-field .wiz-qual-options > *,
  .cp-grille > *,
  #companium-solar-simulator .pill-grid > * {
    width:calc((100% - var(--tu-ecart)) / 2); }
  .qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="1"] > * { width:100%; }

  /*  ⚠️ SUR L ACCUEIL, LES TUILES DE METIER SONT CARREES. « aspect-ratio »
      et non une hauteur en pixels : elle suit la largeur du telephone, quel
      que soit l appareil.                                                   */
  #ac-metiers .cp-tuile { aspect-ratio:1 / 1; min-height:var(--tu-h-acc); }
}

/* ══ MAQUETTE v2 — LES RATTRAPAGES DE SPECIFICITE, MESURES ET NOMMES ═══════

   ⚠️ TROIS BLOCS PLUS HAUT DANS CETTE FEUILLE REDESSINENT LA TUILE DE REPONSE
   sous « .wiz-qual-options:not(.s1-grid) .wiz-qual-pill » : le « :not » ajoute
   une classe, donc (0,5,0) contre (0,4,0) pour la regle de la v2. Ils dataient
   du 04/09, quand la tuile de reponse etait une RANGEE -- pictogramme a gauche,
   texte, pastille a droite. La v2 leur donne le meme dessin qu aux autres.

   MESURE DU 05/09, avant : deux hauteurs sur le meme ecran (65,7 et 78) et
   deux positions de titre (14,7 et 29,9). Une seule valeur est attendue.

   ⚠️ ON REDIT AU MEME NIVEAU DE SPECIFICITE, on n invente pas un cran de plus.
   Ecrire « :not(.s1-grid) » ici remet les deux regles a egalite : la plus
   tardive gagne, et c est celle-ci. C est le seul moyen de recouvrir sans
   desosser trois blocs dont chaque ligne demanderait un jugement.         */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill {
  min-height:var(--tu-h); height:auto; width:auto;
  /*  Le centrage de la v2, redit au meme niveau de specificite.        */
  display:grid; grid-template-rows:var(--tu-picto) var(--tu-lg-titre);
  align-content:center; justify-items:center; gap:7px; align-items:stretch;
  padding:var(--tu-air) 14px; text-align:center;
  border-radius:var(--tu-rayon);
  box-shadow:inset 0 0 0 1px var(--cp-filet-fort);
  font-size:14.5px; font-weight:700; color:var(--cp-titre);
}
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill .qs-picto {
  width:var(--tu-picto); height:var(--tu-picto); align-self:center; margin:0; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill .qs-picto svg {
  width:100%; height:100%; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill::before {
  left:1.5px; top:1.5px; bottom:1.5px; width:var(--tu-liseret);
  border-radius:calc(var(--tu-rayon) - 2px) 0 0 calc(var(--tu-rayon) - 2px); }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill::after {
  position:absolute; right:10px; top:10px; margin:0;
  width:18px; height:18px; }
/*  La grille sans aucun pictogramme est PLATE -- au meme niveau, la aussi.  */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid):not(:has(.qs-picto)) .wiz-qual-pill {
  min-height:var(--tu-h-plate); grid-template-rows:1fr; align-content:center; }

/*  Les largeurs de colonne, redites au meme niveau.                        */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="2"] > * {
  width:calc((100% - 1 * var(--tu-ecart)) / 2); flex:none; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="3"] > * {
  width:calc((100% - 2 * var(--tu-ecart)) / 3); flex:none; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="4"] > * {
  width:calc((100% - 3 * var(--tu-ecart)) / 4); flex:none; }
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="1"] > * {
  width:100%; flex:none; }

@media (max-width:760px) {
  /*  ⚠️ LES GRILLES DE L ACCUEIL PORTENT LEUR NOMBRE DE COLONNES EN CLASSE
      (« .cp-g3 ») : une regle sur « .cp-grille > * » seule perdait contre
      elle. Mesure du 05/09 : trois colonnes de 126,7 px sur un telephone de
      390, au lieu de deux.                                                  */
  .cp-grille.cp-g2 > *, .cp-grille.cp-g3 > * {
    width:calc((100% - var(--tu-ecart)) / 2); }
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) > * {
    width:calc((100% - var(--tu-ecart)) / 2); }
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="1"] > * {
    width:100%; }
  /*  Le contour et le lisere au repos, redits au meme niveau.               */
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill {
    box-shadow:inset 0 0 0 1.5px var(--sd-tuile-tel-contour, #14171A); }
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill::before {
    background:var(--s1-tuile-selection, var(--cp-jaune)); }
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected {
    background:var(--tu-fond-on); box-shadow:inset 0 0 0 1.5px var(--tu-fond-on); }
}
/*  L etat choisi, redit au meme niveau.                                     */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill.selected {
  background:var(--tu-fond-on); box-shadow:inset 0 0 0 1px var(--tu-fond-on); color:#fff; }
@media (min-width:761px) {
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill:hover {
    background:var(--tu-fond-on); box-shadow:inset 0 0 0 1px var(--tu-fond-on); color:#fff; }
}

/* ── LA DERNIERE RANGEE INCOMPLETE EST ALIGNEE A GAUCHE ────────────────────
   ⚠️ LA v2 REVIENT SUR LA DECISION DU 04/09. Hier, la rangee incomplete etait
   CENTREE ; la maquette v2 ecrit « justify-content:flex-start ». Ses valeurs
   se recopient : elle est desormais a GAUCHE.
   ⚠️ ET IL FAUT LE REDIRE AU MEME NIVEAU DE SPECIFICITE que la regle d hier
   (« :not(.s1-grid) », « .s1-grid ») : ecrit une seule fois sur
   « .wiz-qual-options », le centrage d hier gagnait encore. Vu a l ecran sur
   les specialites du chauffage : deux rangees incompletes, centrees.      */
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid),
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid,
#companium-solar-simulator .pill-grid,
.cp-grille { justify-content:flex-start; }

/* ══ LE SIMULATEUR PREND LE MEME GABARIT QUE LE PARCOURS — 05/09 (soir) ════

   RELEVE AVANT CORRECTION, sur la page servie, grille par grille :

     grille          classes            largeur de tuile      air interieur
     housing         .pill-grid         auto                  10px 8px
     occupants       .pill-grid.sim-d4  calc(25% - 3.75px)    10px 8px
     ownership       .pill-grid.sim-d10 auto                  10px 8px
     sizingGoal      .pill-grid.sim-d4  calc(25% - 3.75px)    10px 8px

   DEUX CAUSES, ET LA SECONDE EST UNE ERREUR DE LECTURE DE MA PART :

   1. UNE GRILLE SANS CLASSE NE RECOIT AUCUNE LARGEUR : « auto ». Ses tuiles
      prennent la largeur de leur contenu -- « Maison plain-pied » est plus
      large que « 1 a 2 pers. » parce que son texte est plus long. C est
      exactement ce que Gerard voit.

   2. ⚠️ « sim-d4 » N EST PAS UN NOMBRE DE COLONNES. C est une des 80 classes
      « .sim-dN » posees le 04/09 pour sortir les « style= » de la page : un
      NUMERO D ORDRE. Je l ai lue comme « quatre colonnes » et j ai ecrit une
      regle a quatre colonnes dessus -- alors qu elle en declarait DEJA trois
      (« .sim-d4 { grid-template-columns:repeat(3,1fr) } », ligne 5759). Une
      supposition, pas une lecture ; le nom d une classe ne dit pas ce qu elle
      fait.

   LA CORRECTION : toutes les grilles du simulateur prennent TROIS colonnes,
   comme celles du parcours, et l air interieur de la maquette v2. La classe
   « sim-d4 » ne decide plus rien.                                          */
/*  ⚠️ ON ECRIT SUR « .pill-grid .pill », PAS SUR « .pill-grid > * ».
    Une regle posee plus haut donne « width:100% » a « .pill-grid .pill » --
    (1,2,0) contre (1,1,0) pour un selecteur d enfant. Mesure du 05/09 : les
    grilles PORTANT une classe recevaient bien leur largeur, celles qui n en
    portaient pas restaient a « auto », et leurs tuiles prenaient la largeur
    de leur texte. « Maison plain-pied » etait donc plus large que
    « 1 a 2 pers. » -- exactement ce que Gerard voit.                      */
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .pill-grid .pill.has-picto {
  width:calc((100% - 2 * var(--tu-ecart)) / 3); flex:none;
  padding:var(--tu-air) 14px; }

@media (max-width:760px) {
  #companium-solar-simulator .pill-grid .pill {
    width:calc((100% - var(--tu-ecart)) / 2); }
}

/* ══ LA TUILE D EQUIPEMENT — LE MEME DESSIN QUE TOUTES LES AUTRES ══════════
   Maquette v2, « .tu.eq » : c est une tuile de choix comme les autres, avec
   une TROISIEME rangee pour le compteur (« .grille:has(.cpt) > .tu »).

   ⚠️ LE COMPTEUR RESTE DANS LA TUILE, la saisie libre s ouvre SOUS LA GRILLE
   (« .saisie-hors » de la maquette). Une tuile qui grandit decale toute sa
   rangee : c est ce qui donnait deux hauteurs dans une meme grille.        */
#companium-solar-simulator .cps-equipment-category-grid {
  display:flex; flex-wrap:wrap; gap:var(--tu-ecart);
  justify-content:flex-start; align-items:stretch;
  grid-template-columns:none; }
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  position:relative; width:calc((100% - 3 * var(--tu-ecart)) / 4); flex:none;
  height:auto; min-height:var(--tu-h); max-height:none;
  background:var(--cp-blanc); border:0; border-radius:var(--tu-rayon);
  box-shadow:inset 0 0 0 1px var(--cp-filet-fort);
  padding:var(--tu-air) 14px; cursor:pointer; overflow:hidden;
  display:grid;
  grid-template-rows:var(--tu-picto) var(--tu-lg-titre) var(--tu-lg-det);
  align-content:center; justify-items:center; gap:7px;
  text-align:center; color:var(--cp-titre);
  transition:background .12s, box-shadow .12s; transform:none; }
/*  L enveloppe du bouton n est pas une case : ses deux enfants le sont.    */
#companium-solar-simulator .cps-equipment-category-grid .cps-toggle-main {
  display:contents; }
#companium-solar-simulator .cps-equipment-category-grid .toggle::before {
  content:""; position:absolute; left:1.5px; top:1.5px; bottom:1.5px;
  width:var(--tu-liseret); background:transparent; pointer-events:none;
  border-radius:calc(var(--tu-rayon) - 2px) 0 0 calc(var(--tu-rayon) - 2px);
  transition:background .12s; }
/*  ⚠️ AUCUN FOND NI CADRE DERRIERE LE DESSIN : la couleur est sur le trait. */
#companium-solar-simulator .cps-equipment-category-grid .cps-picto {
  width:var(--tu-picto); height:var(--tu-picto); margin:0;
  display:flex; align-items:center; justify-content:center; align-self:center;
  background:none; border:0; border-radius:0; box-shadow:none;
  color:var(--cp-gris); }
#companium-solar-simulator .cps-equipment-category-grid .cps-picto svg {
  width:100%; height:100%; }
#companium-solar-simulator .cps-equipment-category-grid .cps-toggle-label {
  display:flex; align-items:center; justify-content:center;
  width:100%; height:100%; margin:0; padding:0;
  font-size:14.5px; font-weight:700; color:var(--cp-titre);
  line-height:1.25; text-align:center; overflow:hidden; }
#companium-solar-simulator .cps-equipment-category-grid .cps-other-sub { display:none; }
/*  ── LE COMPTEUR, TROISIEME RANGEE ────────────────────────────────────── */
#companium-solar-simulator .cps-equipment-category-grid .cps-qty-controls {
  display:flex; align-items:center; justify-content:center; gap:10px;
  width:100%; height:100%; margin:0; padding:0;
  border:0; border-top:0; background:none; box-shadow:none; }
#companium-solar-simulator .cps-equipment-category-grid .cps-qty-btn {
  width:26px; height:26px; border-radius:50%; padding:0;
  border:1px solid var(--cp-filet-fort); background:var(--cp-blanc);
  color:var(--cp-titre); font:inherit; font-size:15px; line-height:1;
  cursor:pointer; box-shadow:none; }
#companium-solar-simulator .cps-equipment-category-grid .cps-qty-value {
  font-size:14px; font-weight:700; color:var(--cp-titre);
  min-width:14px; text-align:center; }
/*  ── LE VOYANT : CARRE, car cocher un equipement est un choix MULTIPLE ─── */
#companium-solar-simulator .cps-equipment-category-grid .toggle::after {
  content:""; position:absolute; right:10px; top:10px; margin:0;
  width:18px; height:18px; border-radius:5px;
  box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); background:transparent; }
/*  ── LES ETATS : identiques a toutes les tuiles du site ────────────────── */
@media (min-width:761px) {
  #companium-solar-simulator .cps-equipment-category-grid .toggle:hover:not(.disabled) {
    background:var(--tu-fond-on); box-shadow:inset 0 0 0 1px var(--tu-fond-on);
    transform:none; }
  #companium-solar-simulator .cps-equipment-category-grid .toggle:hover::before {
    background:var(--s1-tuile-selection, var(--cp-jaune)); }
  #companium-solar-simulator .cps-equipment-category-grid .toggle:hover .cps-toggle-label,
  #companium-solar-simulator .cps-equipment-category-grid .toggle:hover .cps-qty-value { color:#fff; }
  #companium-solar-simulator .cps-equipment-category-grid .toggle:hover .cps-picto {
    color:var(--s1-tuile-selection, var(--cp-jaune)); }
  #companium-solar-simulator .cps-equipment-category-grid .toggle:hover .cps-qty-btn {
    background:transparent; border-color:#3A4046; color:#fff; }
}
#companium-solar-simulator .cps-equipment-category-grid .toggle.active {
  background:var(--tu-fond-on); box-shadow:inset 0 0 0 1px var(--tu-fond-on); }
#companium-solar-simulator .cps-equipment-category-grid .toggle.active::before {
  background:var(--s1-tuile-selection, var(--cp-jaune)); }
#companium-solar-simulator .cps-equipment-category-grid .toggle.active::after {
  box-shadow:inset 0 0 0 2px var(--s1-tuile-selection, var(--cp-jaune));
  background:radial-gradient(circle,
    var(--s1-tuile-selection, var(--cp-jaune)) 0 42%, transparent 44%); }
#companium-solar-simulator .cps-equipment-category-grid .toggle.active .cps-toggle-label { color:#fff; }
#companium-solar-simulator .cps-equipment-category-grid .toggle.active .cps-picto { color:var(--s1-tuile-selection, var(--cp-jaune)); }
#companium-solar-simulator .cps-equipment-category-grid .toggle.active .cps-qty-value { color:var(--s1-tuile-selection, var(--cp-jaune)); }
#companium-solar-simulator .cps-equipment-category-grid .toggle.active .cps-qty-btn {
  background:transparent; border-color:#3A4046; color:#fff; }
#companium-solar-simulator .cps-equipment-category-grid .toggle.disabled { cursor:not-allowed; opacity:.55; }

/*  ── LA SAISIE LIBRE, SOUS LA GRILLE ──────────────────────────────────── */
#companium-solar-simulator .cps-other-block:empty { display:none; }
#companium-solar-simulator .cps-other-block {
  display:block; margin-top:var(--tu-ecart); padding:16px;
  background:var(--cp-blanc); border-radius:var(--tu-rayon);
  box-shadow:inset 0 0 0 1.5px var(--cp-encre); }
#companium-solar-simulator .cps-other-block .cps-other-titre {
  font-size:13px; font-weight:700; color:var(--cp-titre); margin-bottom:10px; }
#companium-solar-simulator .cps-other-block .cps-other-line {
  display:flex; gap:10px; flex-wrap:wrap; align-items:center;
  margin-bottom:8px; }

@media (max-width:760px) {
  #companium-solar-simulator .cps-equipment-category-grid .toggle {
    width:calc((100% - var(--tu-ecart)) / 2);
    box-shadow:inset 0 0 0 1.5px var(--sd-tuile-tel-contour, #14171A);
    --tu-lg-titre:var(--sd-tuile-lignes-titre, 3.75em); }
  #companium-solar-simulator .cps-equipment-category-grid .toggle::before {
    background:var(--s1-tuile-selection, var(--cp-jaune)); }
}

/*  ── UNE GRILLE DU SIMULATEUR SANS AUCUN DESSIN EST PLATE ─────────────────
    « .grille.plate » de la maquette : une seule rangee, contenu centre,
    hauteur propre. Sans elle, la civilite garderait la rangee vide du
    pictogramme -- un trou de 34 px en haut de la tuile.
    ⚠️ LA GRILLE EST PLATE, PAS LA TUILE (mesure du 05/09 : en decidant tuile
    par tuile, une meme grille rendait deux hauteurs et deux positions de
    titre).                                                                 */
#companium-solar-simulator .pill-grid:not(:has(.cps-choice-picto)):not(:has(.cps-goal-picto)) .pill {
  min-height:var(--tu-h-plate); grid-template-rows:1fr; align-content:center; }
#companium-solar-simulator .pill-grid:not(:has(.cps-choice-picto)):not(:has(.cps-goal-picto)) .pill .cps-pill-text {
  min-height:0; }

/* ══ LES ECRANS DE CHOIX PRENNENT LA TUILE DE LA MAQUETTE v2 — 06/09 ═══════
   Famille, metier, specialite. Ils gardaient le dessin du 30/08 : une RANGEE
   (pictogramme a gauche, texte a gauche) dans une tuile de hauteur FIXE.

   ⚠️ LA MAQUETTE v2 EST LA REFERENCE UNIQUE depuis le 05/09, et §14.1 le dit
   deja : ses trois ecrans de choix emploient « .tu », la meme grande carte
   qu a l accueil -- dessin au-dessus, nom, detail, le tout centre.

   ⚠️ ON REDIT AU MEME NIVEAU DE SPECIFICITE (0,5,0). Les blocs du 30/08
   ecrivent « .wiz-qual-options.s1-grid .wiz-qual-pill » : une regle a (0,4,0)
   perdrait sans rien dire. On ne desosse pas ces blocs -- ils portent aussi
   les colonnes et les jetons administrables -- on recouvre le seul dessin.  */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill {
  display:grid; grid-template-rows:var(--tu-picto) var(--tu-lg-titre);
  align-content:center; justify-items:center; gap:7px;
  flex-direction:column; height:auto; min-height:var(--tu-h);
  padding:var(--tu-air) 14px; text-align:center;
  border-radius:var(--tu-rayon); }
/*  L enveloppe du texte n est pas une case : ses deux enfants le sont.      */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-corps {
  display:contents; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto {
  width:var(--tu-picto); height:var(--tu-picto); align-self:center; margin:0;
  display:flex; align-items:center; justify-content:center; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto svg {
  width:100%; height:100%; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label {
  display:flex; align-items:center; justify-content:center;
  width:100%; height:100%; text-align:center;
  font-size:14.5px; font-weight:700; line-height:1.25;
  -webkit-line-clamp:none; line-clamp:none; overflow:visible; }
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail {
  display:flex; align-items:flex-start; justify-content:center;
  width:100%; height:100%; min-height:0; text-align:center;
  font-size:12px; line-height:1.35;
  -webkit-line-clamp:none; line-clamp:none; overflow:hidden; }
/*  La troisieme rangee, reservee par GRILLE et non par tuile.              */
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid:has(.s1-pill-detail) .wiz-qual-pill {
  grid-template-rows:var(--tu-picto) var(--tu-lg-titre) var(--tu-lg-det); }
@media (max-width:760px) {
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill {
    flex-direction:column; text-align:center;
    min-height:var(--tu-h); padding:var(--tu-air) 14px;
    border-radius:var(--tu-rayon); }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto svg {
    width:100%; height:100%; }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-corps {
    display:contents; }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail {
    -webkit-line-clamp:none; line-clamp:none; text-align:center; }
}

/* ══ UNE TUILE SANS DESSIN DANS UNE GRILLE QUI EN PORTE ════════════════════
   ⚠️ « Je prefere ne pas repondre » n a pas de pictogramme, ses voisines si.
   Sans rien, son titre tombait dans la PREMIERE rangee -- celle du dessin --
   et son air bas montait a 59,3 la ou ses voisines sont a 16 (mesure du
   06/09, quatre grilles sur deux metiers).
   Elle garde la rangee du dessin VIDE : c est la meme reserve que la ligne
   de detail, et pour la meme raison -- une grille rend UN dessin.          */
.qs-mode .wiz-qual-field .wiz-qual-options:has(.qs-picto) .wiz-qual-pill:not(:has(.qs-picto)) > *:first-child,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid):has(.qs-picto) .wiz-qual-pill:not(:has(.qs-picto)) > *:first-child {
  grid-row-start:2; }

/* ══════════════════════════════════════════════════════════════════════════
   L ECRAN DE RESULTAT DU SIMULATEUR, REFAIT — maquette v2, 06/09/2026
   ══════════════════════════════════════════════════════════════════════════
   ⚠️ AUCUNE VALEUR AFFICHEE NE CHANGE. Tous les identifiants sont conserves,
   et le banc « simulateur-reference » releve les 27 chiffres de cet ecran
   avant et apres : ils doivent etre identiques.
   ⚠️ AUCUN FOND NI CADRE DERRIERE UN PICTOGRAMME, nulle part sur cet ecran :
   la couleur est sur le TRAIT.                                             */

/* ── LE BANDEAU : pastille jaune, titre au centre, economie a droite ────── */
#companium-solar-simulator .cps-rep {
  background:var(--cp-encre); border-radius:16px; padding:26px 28px; color:#fff;
  display:grid; grid-template-columns:auto 1fr auto; gap:26px;
  align-items:center; margin-bottom:26px; box-shadow:none; }
#companium-solar-simulator .cps-rep-pastille {
  width:104px; height:104px; border-radius:50%;
  background:var(--s1-tuile-selection, var(--cp-jaune));
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  flex:none; }
#companium-solar-simulator .cps-rep-pastille .cps-rep-gros {
  margin:0; font-size:30px; font-weight:700; color:var(--cp-encre);
  line-height:1; letter-spacing:-1px; text-align:center; }
#companium-solar-simulator .cps-rep-pastille .cps-kwc {
  display:block; font-size:12px; font-weight:700; color:var(--cp-encre);
  letter-spacing:0; margin-top:3px; }
#companium-solar-simulator .cps-rep-chiffre .cps-kicker {
  margin:0 0 6px; font-size:20px; color:#fff; font-weight:600;
  letter-spacing:-.4px; text-transform:none; }
#companium-solar-simulator .cps-rep-sous {
  margin:0; font-size:14px; color:#B8BFC6; max-width:52ch; }
#companium-solar-simulator .cps-rep-sec {
  text-align:right; flex:none; padding-left:26px; border-left:1px solid #2C3238; }
#companium-solar-simulator .cps-rep-sec .cps-kicker {
  font-size:10.5px; letter-spacing:1.6px; color:#8A9199; font-weight:600;
  text-transform:uppercase; margin:0; }
#companium-solar-simulator .cps-rep-val {
  display:block; margin:0; font-size:32px; font-weight:700;
  color:var(--s1-tuile-selection, var(--cp-jaune));
  letter-spacing:-1px; line-height:1.2; }
#companium-solar-simulator .cps-rep-an { margin:0; font-size:12.5px; color:#8A9199; }

/* ── LE GRAPHIQUE : valeurs AU-DESSUS des barres, legende DESSOUS ───────── */
#companium-solar-simulator .cps-barres {
  display:flex; align-items:flex-end; gap:14px; height:150px;
  padding-bottom:26px; border-bottom:1px solid var(--cp-filet);
  position:relative; }
#companium-solar-simulator .cps-b {
  flex:1; display:flex; flex-direction:column; justify-content:flex-end;
  align-items:center; height:100%; position:relative; min-width:0; }
#companium-solar-simulator .cps-b i {
  display:block; width:100%; border-radius:6px 6px 0 0;
  height:var(--h, 0%); }
#companium-solar-simulator .cps-b-v {
  font-size:12px; font-weight:700; color:var(--cp-titre); margin-bottom:5px; }
#companium-solar-simulator .cps-b-k {
  position:absolute; bottom:-22px; font-size:11.5px; color:var(--cp-leg);
  white-space:nowrap; max-width:100%; overflow:hidden; text-overflow:ellipsis; }
#companium-solar-simulator .cps-b-a i { background:var(--s1-tuile-selection, var(--cp-jaune)); }
#companium-solar-simulator .cps-b-b i { background:#ECD98A; }
#companium-solar-simulator .cps-b-c i { background:#C9CDD1; }
#companium-solar-simulator .cps-legende {
  display:flex; gap:18px; margin-top:34px; flex-wrap:wrap; }
#companium-solar-simulator .cps-li {
  display:flex; align-items:center; gap:7px; font-size:12.5px; color:var(--cp-txt); }
#companium-solar-simulator .cps-li i {
  width:12px; height:12px; border-radius:3px; display:block; flex:none; }
#companium-solar-simulator .cps-li-a i { background:var(--s1-tuile-selection, var(--cp-jaune)); }
#companium-solar-simulator .cps-li-b i { background:#ECD98A; }
#companium-solar-simulator .cps-li-c i { background:#C9CDD1; }

/* ── LES CHIFFRES EN FICHES ─────────────────────────────────────────────── */
#companium-solar-simulator .cps-repose,
#companium-solar-simulator .cps-chiffres-flux {
  display:flex; flex-wrap:wrap; gap:12px;
  grid-template-columns:none; }
#companium-solar-simulator .cps-repose-bloc,
#companium-solar-simulator .cps-cf {
  flex:1 1 200px; min-width:0;
  background:var(--cp-blanc); border-radius:var(--tu-rayon); padding:16px;
  box-shadow:inset 0 0 0 1px var(--cp-filet); border:0;
  display:flex; gap:12px; align-items:flex-start; text-align:left; }
#companium-solar-simulator .cps-fiche-ic {
  width:30px; height:30px; flex:none;
  display:flex; align-items:center; justify-content:center;
  background:none; border:0; border-radius:0; box-shadow:none;
  color:var(--cp-encre); }
#companium-solar-simulator .cps-fiche-ic svg { width:26px; height:26px; }
#companium-solar-simulator .cps-fiche-txt { min-width:0; }
#companium-solar-simulator .cps-repose-bloc .cps-k,
#companium-solar-simulator .cps-cf .cps-k {
  font-size:10.5px; letter-spacing:1.4px; color:var(--cp-leg);
  font-weight:600; text-transform:uppercase; margin:0 0 3px; }
#companium-solar-simulator .cps-repose-bloc .cps-v,
#companium-solar-simulator .cps-repose-bloc .cps-v strong,
#companium-solar-simulator .cps-cf .cps-cf-v {
  /*  ⚠️ « line-height » ENTIER, pour la meme raison que la reserve du
      libelle : 17 px sans hauteur de ligne posee rendait 19,55, et la fiche
      tombait sur une hauteur fractionnaire.                            */
  display:block; margin:0; font-size:17px; line-height:24px; color:var(--cp-titre);
  font-weight:700; letter-spacing:-.3px; }
#companium-solar-simulator .cps-cf .cps-u {
  margin:5px 0 0; font-size:12.5px; color:var(--cp-leg); line-height:18px; }

/* ── LES POSTES DE L INSTALLATION, EN LISTE ─────────────────────────────── */
#companium-solar-simulator #cps-solution-config.cps-liste {
  background:var(--cp-blanc); border-radius:var(--tu-rayon);
  box-shadow:inset 0 0 0 1px var(--cp-filet); overflow:hidden; }
#companium-solar-simulator #cps-solution-config .cps-liste-l {
  display:flex; gap:14px; align-items:flex-start;
  padding:14px 16px; border-bottom:1px solid var(--cp-filet);
  background:none; border-radius:0; }
#companium-solar-simulator #cps-solution-config .cps-liste-l:last-child { border-bottom:0; }
#companium-solar-simulator #cps-solution-config .cps-liste-ico {
  width:26px; height:26px; flex:none;
  display:flex; align-items:center; justify-content:center;
  background:none; border:0; border-radius:0; box-shadow:none;
  color:var(--cp-encre); }
#companium-solar-simulator #cps-solution-config .cps-liste-ico svg { width:22px; height:22px; }
#companium-solar-simulator #cps-solution-config .cps-liste-l b {
  display:block; font-size:14.5px; font-weight:600; color:var(--cp-titre); }

/*  ⚠️ AUCUN FOND, AUCUN CADRE DERRIERE UN DESSIN, SUR TOUT L ECRAN.       */
#companium-solar-simulator #cps-result-card .cps-fiche-ic,
#companium-solar-simulator #cps-result-card .cps-liste-ico,
#companium-solar-simulator #cps-result-card .cps-batt-ico,
#companium-solar-simulator #cps-result-card .cps-fold-ico,
#companium-solar-simulator #cps-result-card .ico {
  background:none; border:0; border-radius:0; box-shadow:none; }

/* ── TELEPHONE : le bandeau en colonne, les fiches pleine largeur ───────── */
@media (max-width:760px) {
  #companium-solar-simulator .cps-rep {
    grid-template-columns:1fr; text-align:center; gap:16px; padding:22px 16px; }
  #companium-solar-simulator .cps-rep-pastille { margin:0 auto; }
  #companium-solar-simulator .cps-rep-sous { max-width:none; }
  #companium-solar-simulator .cps-rep-sec {
    text-align:center; padding:16px 0 0; border-left:0; border-top:1px solid #2C3238; }
  #companium-solar-simulator .cps-repose-bloc,
  #companium-solar-simulator .cps-cf { flex:1 1 100%; }
  #companium-solar-simulator .cps-b-k {
    white-space:normal; font-size:10.5px; line-height:1.2; text-align:center; }
  #companium-solar-simulator .cps-barres { padding-bottom:34px; }
}

/*  Les cartes de facteurs de calcul sont des fiches comme les autres :
    fond blanc et filet, jamais un fond creme qui ferait un second dessin.  */
#companium-solar-simulator #cps-result-card .cps-cf-card {
  background:var(--cp-blanc); border-radius:var(--tu-rayon);
  box-shadow:inset 0 0 0 1px var(--cp-filet); border:0; }
#companium-solar-simulator #cps-result-card .cps-cf-card > svg {
  background:none; border:0; border-radius:0; box-shadow:none;
  color:var(--cp-encre); }

/* ══ TROIS GRAISSES SUR LE SIMULATEUR — RELEVE DU 06/09 ════════════════════
   §13.5 avait ramene l accueil et le parcours a trois graisses. Le simulateur,
   lui, en portait DOUZE, mesurees sur ses neuf ecrans servis :
       400 · 500 · 520 · 550 · 600 · 680 · 700 · 720 · 750 · 800 · 850 · 900
   Les valeurs intermediaires ne se distinguent de leur voisine par rien qu un
   oeil puisse voir.

       400   le texte courant
       600   les titres et les libelles
       700   le geste principal et les chiffres de l ecran

   ⚠️ ON CIBLE LES ELEMENTS RELEVES, PAS TOUT L ECRAN. Un « * { font-weight } »
   ecraserait aussi ce qui est juste, et masquerait la prochaine derive au lieu
   de la montrer.
   ⚠️ ET « <b> » VAUT 900 PAR DEFAUT dans le navigateur : un « <b> » sans regle
   est une quatrieme graisse qu on n a pas choisie. C est le cas de « strong »
   ici, releve a 900.                                                        */

/* ── vers 400 : ce qui etait a 500, 520 et 550 ──────────────────────────── */
#companium-solar-simulator .hint,
#companium-solar-simulator .micro,
#companium-solar-simulator .cps-source-s,
#companium-solar-simulator .cps-step-note,
#companium-solar-simulator .cps-nue-k,
#companium-solar-simulator p { font-weight:400; }

/* ── vers 600 : ce qui etait a 680, 720 et 750 ──────────────────────────── */
#companium-solar-simulator h3,
#companium-solar-simulator .cps-qty-btn,
#companium-solar-simulator .btn.light,
#companium-solar-simulator .cps-kwh-unit { font-weight:600; }

/* ── vers 600 : ce qui etait a 800 et 850 — titres, libelles, surtitres ─── */
#companium-solar-simulator .cps-wizard-count,
#companium-solar-simulator .cps-surface-unit,
#companium-solar-simulator .cps-roof-more-title,
#companium-solar-simulator .cps-recap-count,
#companium-solar-simulator .cps-recap-title,
#companium-solar-simulator .cps-niveau,
#companium-solar-simulator .cps-niveau-n,
#companium-solar-simulator .cps-k,
#companium-solar-simulator .cps-kicker,
#companium-solar-simulator .cps-fold-tri,
#companium-solar-simulator .cps-cf-t,
#companium-solar-simulator .cps-source-t,
#companium-solar-simulator .cps-assumption-row .name,
#companium-solar-simulator .notice,
#companium-solar-simulator .cps-confirm-t,
#companium-solar-simulator a { font-weight:600; }

/* ── vers 700 : les CHIFFRES de l ecran, et le geste principal ──────────── */
#companium-solar-simulator strong,
#companium-solar-simulator .cps-proj-cumul-v,
#companium-solar-simulator .cps-proj-f-v,
#companium-solar-simulator .cps-proj-top,
#companium-solar-simulator .cps-sol-cercle-v,
#companium-solar-simulator .cps-cf-v,
#companium-solar-simulator .cps-source-v,
#companium-solar-simulator .btn.accent,
#companium-solar-simulator .cps-bt-final { font-weight:700; }

/*  ── LES QUATRE SURVIVANTES, REDITES A LEUR NIVEAU DE SPECIFICITE ────────
    Mesure du 06/09 apres le premier passage : quatre graisses tenaient encore,
    portees par des selecteurs plus lourds que « #simulateur .classe ».
        720  .cps-qty-btn        posee dans un bloc de compteur
        750  .cps-kwh-unit       idem
        800  h3                  « .cps-flux h3 », « .cps-sol-txt h3 »,
                                 « .cps-proj h3 » -- (1,2,1) contre (1,0,1)
        800  a                   « .cps-fold-sum a » et voisins
    ⚠️ UN SELECTEUR PLUS LOURD NE SE DEVINE PAS : il se releve. C est la
    troisieme fois sur ce chantier qu une regle juste perd en silence.     */
#companium-solar-simulator .cps-flux h3,
#companium-solar-simulator .cps-sol-txt h3,
#companium-solar-simulator .cps-proj h3,
#companium-solar-simulator .cps-card h3,
#companium-solar-simulator .subcard h3 { font-weight:600; }
#companium-solar-simulator .cps-kwh-price-row .cps-kwh-unit,
#companium-solar-simulator .cps-equipment-category-grid .cps-qty-btn,
#companium-solar-simulator .cps-fold-sum a,
#companium-solar-simulator .cps-card a,
#companium-solar-simulator .subcard a,
#companium-solar-simulator .cps-sources-block a { font-weight:600; }


/*  ── LE TRAIT DES DESSINS D EQUIPEMENT ────────────────────────────────────
    Leurs SVG portent trois classes -- « .stroke », « .fill », « .soft-fill » --
    dont la peinture vivait dans le bloc retire le 06/09. Sans elle, un
    « .soft-fill » sans regle se peint en NOIR PLEIN : « Autre equipement »
    rendait un carre noir a l ecran (vu le 06/09).
    ⚠️ ET IL N EST PAS QUESTION DE LEUR RENDRE LEUR ANCIEN REMPLISSAGE :
    « .soft-fill » etait peint en JAUNE, et le jaune sur clair n est jamais un
    dessin -- il y tombe a 1,12 de contraste (§14.4). La couleur est sur le
    TRAIT, et elle suit celle de la tuile.                                  */
#companium-solar-simulator .cps-picto svg { fill:none; }
#companium-solar-simulator .cps-picto .stroke,
#companium-solar-simulator .cps-picto .fill,
#companium-solar-simulator .cps-picto .soft-fill {
  fill:none; stroke:currentColor; stroke-width:2;
  stroke-linecap:round; stroke-linejoin:round; }

/* ══ LA ZONE DE TOUCHE DU COMPTEUR — relevé du 06/09/2026 ══════════════════
   Le « + » et le « − » font 26 × 26 px, la valeur de la maquette. Relevé sur
   la page servie, à 390 px : sur les cinq points d un bouton — centre et
   quatre coins — TROIS tombaient sur « div.cps-qty-controls », dont
   closest(button,a) vaut NULL. Un doigt couvre bien plus que 26 px : c est
   exactement le « une fois sur deux » que Gérard constate.

   ⚠️ ON N AGRANDIT PAS LE DESSIN, ON AGRANDIT LA ZONE. Le rond reste à 26,
   comme la maquette l écrit ; un pseudo-élément transparent porte la surface
   touchable à 36 × 44.

   ⚠️ ET LA LARGEUR NE DÉPASSE PAS LA MOITIÉ DE L ÉCART. L écart entre les
   deux boutons est de 10 px : une zone plus large ferait se chevaucher celle
   du « + » et celle du « − » au-dessus du chiffre, et une même touche
   incrémenterait ou décrémenterait selon l ordre du DOM. 5 px de chaque côté,
   pas un de plus.                                                          */
#companium-solar-simulator .cps-equipment-category-grid .cps-qty-btn {
  position:relative; z-index:1; touch-action:manipulation; }
#companium-solar-simulator .cps-equipment-category-grid .cps-qty-btn::after {
  content:""; position:absolute; top:-9px; bottom:-9px; left:-5px; right:-5px; }

/*  Le corps de la tuile ne doit pas voler le geste destiné au compteur.     */
#companium-solar-simulator .cps-equipment-category-grid .cps-qty-controls {
  position:relative; z-index:1; }

/*  ⚠️ « touch-action:manipulation » sur ce qui se touche : sans lui, le
    navigateur attend de savoir si un second appui arrive (double-appui pour
    zoomer) avant de délivrer le clic. C est un retard, pas une perte — mais
    sur un compteur qu on actionne vingt fois de suite, il se lit comme un
    appui sur deux qui ne répond pas.                                       */
#companium-solar-simulator .cps-equipment-category-grid .toggle,
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill,
.cp-tuile,
.ac-menu { touch-action:manipulation; }

/* ══ LE TÉLÉPHONE, AUX VALEURS DE LA MAQUETTE v2 — 06/09/2026 ══════════════
   Recopiées de ses règles « .scene[data-vue="tel"] », transposées en requête
   de média au seuil de 760 px (§18.2). Ce ne sont pas des choix : ce sont ses
   valeurs.

   ⚠️ CE N EST L OUBLI DE PERSONNE : ces règles sont dans la maquette depuis le
   05/09, et aucune consigne ne les avait demandées. Elles n ont jamais été
   écrites, elles n ont pas été défaites.                                    */
@media (max-width:760px) {
  /*  maquette l.150 : .sec { padding:30px 15px }  — nous étions à 28.        */
  .ac-sec { padding:30px var(--ac-gouttiere); }
  /*  maquette l.151 : .sec h2 { font-size:24px }  — nous étions à 22.        */
  .ac-page h2 { font-size:24px; letter-spacing:-.6px; }
  /*  maquette l.133 : .action { padding:20px 15px } — nous étions à 24.      */
  .ac-action, .ac-action.ac-seul { padding:20px var(--ac-gouttiere); }
  /*  maquette l.107 : .hero .dedans { padding:0 15px } — la hauteur vient du
      réglage, le contenu se centre dedans.                                  */
  .ac-hero-in { padding:0 var(--ac-gouttiere); }

  /*  ⚠️ LA TUILE DE MÉTIER N EST PLUS CARRÉE SUR TÉLÉPHONE.
      Maquette v2, l.225-228 : « #metiers .tu { min-height:var(--tu-h-acc-tel);
      padding:14px 10px } » et « aspect-ratio:auto ». Le carré était une
      décision du 04/09 ; la v2 revient dessus, et ses valeurs se recopient.
      À 390 px, un carré de 187 de côté donnait une tuile plus haute que large
      pour un nom de deux mots — beaucoup d air vide sous le texte.          */
  /*  ⚠️ L AIR PROPRE DES TUILES D ACCUEIL EST RETIRE (06/09). « 14px 10px »
      remontait leur pictogramme de 10 px par rapport a toutes les autres
      tuiles du site. Elles prennent « --tu-air », comme les autres.     */
  #ac-metiers .cp-tuile { aspect-ratio:auto; min-height:var(--tu-h-acc); }
  #ac-metiers .cp-tuile b { font-size:13.5px; }
  #ac-metiers .cp-tuile span { font-size:11px; }
}

/* ══════════════════════════════════════════════════════════════════════════
   L ACCUEIL DU SIMULATEUR — 06/09/2026
   ══════════════════════════════════════════════════════════════════════════
   Il n avait jamais été repris : une carte blanche isolée au milieu du vide,
   un titre, quatre coches serrées sur une ligne, un bouton. Il ne ressemblait
   à aucun autre écran du site.

   ⚠️ LA MAQUETTE NE MONTRE PAS CET ÉCRAN. Elle donne son VOCABULAIRE, et
   c est lui qu on reprend, valeur par valeur :
       .chapeau { font-size:11px; letter-spacing:2px; font-weight:800 }
       .sec h2  { font-size:29px; letter-spacing:-.9px }
       .sec .intro { font-size:15px; max-width:66ch }
       .bt      { border-radius:10px; padding:15px 20px; font-size:15px }
       .bt-1    { background:var(--jaune); color:var(--encre) }
       .sec     { padding:44px 30px }  ·  téléphone : 30px 15px
   Les graisses de la maquette (800, 720) sont ramenées à l échelle des trois
   (§13.5) : 600 pour les titres et libellés, 700 pour le geste principal.  */

/*  ── LA CARTE SE POSE EN HAUT, ELLE NE FLOTTE PLUS ───────────────────────
    ⚠️ RETIRÉ À SA SOURCE : « min-height:calc(100vh - offset) » avec
    « justify-content:center » sur « .hero ». C est ce qui laissait la carte
    au milieu d un grand vide, très loin du bandeau du haut, alors que les
    neuf autres écrans commencent sous la barre des étapes.               */
#companium-solar-simulator .hero {
  min-height:0; display:block; padding:44px 0 22px; }
@media (max-width:760px) {
  #companium-solar-simulator .hero { padding:30px 0 22px; }
}

/*  ── LA CARTE : celle des neuf autres écrans ─────────────────────────────  */
#companium-solar-simulator .hero-card {
  background:var(--cp-blanc); border-radius:var(--tu-rayon); border:0;
  box-shadow:inset 0 0 0 1px var(--cp-filet);
  padding:30px; overflow:visible; }

/*  ── LE SURTITRE : petites capitales, barre jaune à gauche ───────────────
    Maquette : « .hero .surtitre i { width:3px; background:var(--jaune) } ».
    ⚠️ Le jaune est un TRAIT DE FOND ici, pas une couleur de texte : sur
    clair il ne peut être que cela (§14.4).                                */
#companium-solar-simulator .cps-hero-label {
  display:inline-flex; align-items:center; gap:0;
  font-size:11px; letter-spacing:2px; font-weight:600;
  color:var(--cp-leg); text-transform:uppercase;
  padding-left:11px; border-left:3px solid var(--cp-jaune);
  background:none; border-radius:0; }
#companium-solar-simulator .cps-hero-label .sun { display:none; }

/*  ── LE TITRE ET SON CHAPEAU ─────────────────────────────────────────────  */
#companium-solar-simulator .hero h1,
#companium-solar-simulator .hero-card .sim-d23 {
  margin:0 0 8px; font-size:29px; line-height:1.1; letter-spacing:-.9px;
  color:var(--cp-titre); font-weight:600; }
#companium-solar-simulator .hero-card .sim-d24 {
  display:block; margin:0; font-size:15px; font-weight:400;
  line-height:1.6; color:var(--cp-txt); max-width:66ch; letter-spacing:0; }

/*  ── LES QUATRE ARGUMENTS EN LISTE, PAS EN LIGNE SERRÉE ──────────────────
    Ils tenaient sur une seule rangée, trois d un côté et le quatrième seul
    en dessous : on ne les lit pas, on les survole.                        */
#companium-solar-simulator .cps-hero-checks {
  display:flex; flex-direction:column; gap:10px;
  margin-top:22px; padding:0; }
#companium-solar-simulator .cps-hero-check {
  display:flex; align-items:flex-start; gap:10px;
  font-size:14.5px; line-height:1.4; color:var(--cp-txt); }
/*  ⚠️ AUCUN FOND NI CADRE DERRIÈRE LA COCHE : la couleur est sur le signe.  */
#companium-solar-simulator .cps-check-box {
  flex:none; width:18px; height:18px; line-height:18px; text-align:center;
  background:none; border:0; border-radius:0; box-shadow:none;
  color:var(--cp-titre); font-weight:600; font-size:14px; }

/*  ── LE GESTE PRINCIPAL : jaune, encre par-dessus ────────────────────────  */
#companium-solar-simulator .cps-hero-start {
  margin-top:26px; display:flex; gap:12px; flex-wrap:wrap; align-items:center; }
#companium-solar-simulator #cps-start-simulation {
  background:var(--cp-jaune); color:var(--cp-encre);
  border:0; border-radius:10px; padding:15px 20px;
  font-size:15px; font-weight:700; min-height:0; }
#companium-solar-simulator .cps-hero-start .small {
  font-size:13px; color:var(--cp-leg); font-weight:400; }

/*  ── TÉLÉPHONE : la même respiration de 15 px que partout ────────────────  */
@media (max-width:760px) {
  #companium-solar-simulator .hero-card { padding:22px var(--ac-gouttiere, 15px); }
  /*  ⚠️ L AIR ETAIT COMPTE DEUX FOIS. « .cps-corps » porte deja la
      gouttiere de 15 px ; « .wrap » en rajoutait 12, et la carte tombait a
      27 du bord au lieu de 15 (mesure du 06/09). C est le meme defaut que
      l air sous la barre des etapes le 04/09 (§16.8) : un air qui vaut le
      double du reglage est un reglage qui ment.                        */
  #companium-solar-simulator .wrap { padding:0; }
  #companium-solar-simulator .hero h1,
  #companium-solar-simulator .hero-card .sim-d23 { font-size:24px; letter-spacing:-.6px; }
  #companium-solar-simulator .cps-hero-start { flex-direction:column; align-items:stretch; }
  #companium-solar-simulator #cps-start-simulation { width:100%; }
}


/* ══ LES FICHES DU RÉSULTAT — 06/09/2026 ═══════════════════════════════════

   LA BANDE BLANCHE, ÉTABLIE PAR MESURE AVANT D ÊTRE RETIRÉE.
   Elle ne venait pas d une carte posée dessous : c est le CONTENEUR des
   fiches qui la portait. Relevé du 06/09, sur la page servie :

       conteneur « .cps-repose »   876 × 137,2   fond rgb(255,255,255) + ombre
       première fiche              209,5 × 135,2 fond rgb(255,255,255) + filet

   Deux blancs superposés, et le conteneur dépasse d un pixel en haut comme en
   bas — d où le rectangle plus large qu elles que Gérard voit.

   ⚠️ ET LE MÊME DÉFAUT EXISTAIT SUR « CE QUE PRODUIT VOTRE INSTALLATION » :
   « .cps-flux » est une carte blanche de 876 × 637 qui porte quatre fiches
   blanches. Vérifié aussi sur la liste des postes d installation : elle, en
   revanche, est CORRECTE — le fond blanc est celui de la liste elle-même,
   son parent est transparent, il n y a qu un seul blanc.

   Les fiches se posent donc sur le fond de la page, comme dans la maquette.  */
#companium-solar-simulator #cps-result-card .cps-repose,
#companium-solar-simulator #cps-result-card .cps-flux {
  background:none; box-shadow:none; border:0; padding-left:0; padding-right:0; }

/*  ── LES QUATRE FICHES S ALIGNENT ────────────────────────────────────────
    Relevé AVANT, ordinateur : le haut de la valeur tombait à 49,4 sur deux
    fiches et à 45,3 sur les deux autres — le libellé en petites capitales
    passe sur deux lignes chez les unes, une seule chez les autres.
    Téléphone : trois hauteurs de fiche — 85,9 · 86,9 · 111,5 — « Méthode
    utilisée » poussant la sienne sur trois lignes.

    ⚠️ LA RÉSERVE EST LA MÊME RÉPONSE QUE POUR LES TUILES : on réserve la
    place du libellé, et la valeur démarre au même endroit quelle que soit la
    longueur du texte. Et « grid-auto-rows:1fr » donne UNE hauteur de fiche
    par bloc, y compris sur téléphone où elles sont l une sous l autre.     */
#companium-solar-simulator #cps-result-card .cps-repose,
#companium-solar-simulator #cps-result-card .cps-chiffres-flux {
  display:grid; grid-template-columns:repeat(auto-fit, minmax(190px, 1fr));
  grid-auto-rows:1fr; gap:12px; }
#companium-solar-simulator #cps-result-card .cps-repose-bloc,
#companium-solar-simulator #cps-result-card .cps-cf {
  flex:none; }
#companium-solar-simulator #cps-result-card .cps-repose-bloc .cps-k,
#companium-solar-simulator #cps-result-card .cps-cf .cps-k {
  /*  ⚠️ EN PIXELS ENTIERS, PAS EN « em ». A 10,5 px, « 2.6em » vaut 27,3 :
      la fiche tombait a 112,58 de haut, ses voisines demarraient donc a une
      ordonnee fractionnaire, et le navigateur calait leur texte sur la
      grille des pixels -- 16 sur la premiere, 17 sur les trois autres
      (mesure du 06/09 au centieme). Une reserve entiere supprime la
      fraction a la source.                                             */
  min-height:28px; line-height:1.3; display:flex; align-items:flex-start; }
#companium-solar-simulator #cps-result-card .cps-fiche-txt {
  display:flex; flex-direction:column; width:100%; }

@media (max-width:760px) {
  #companium-solar-simulator #cps-result-card .cps-repose,
  #companium-solar-simulator #cps-result-card .cps-chiffres-flux {
    grid-template-columns:1fr; }
}

/* ══════════════════════════════════════════════════════════════════════════
   LES SIX MESURES — 06/09/2026
   ══════════════════════════════════════════════════════════════════════════
   Mes relevés annonçaient « 0 en défaut » sur des écrans qui portaient des
   textes coupés, des textes collés aux bords et des pictogrammes en haut à
   gauche. Ils mesuraient la distance DU HAUT de la tuile au pictogramme : un
   pictogramme collé A GAUCHE passe ce contrôle.

   ÉTAT AVANT, 68 grilles, trois écrans, deux tailles :
       M1 texte tronqué ........ 7 grilles
       M2 texte au bord ........ 4 grilles
       M3 picto décentré ....... 7 grilles   (jusqu à −123,5 px)
       M4 titre décentré ....... 4 grilles
       M5 haut du picto ........ 0
       M6 hauteur de tuile ..... 0                                         */

/* ── M1 : LA RÉSERVE EST UN MINIMUM, PLUS UNE HAUTEUR FIXE ────────────────
   Cause établie : la rangée du détail était une piste FIXE (« --tu-lg-det »,
   2,4 em ≈ 34,8 px) et le texte était coupé par l « overflow:hidden » de la
   tuile. Ce n était PAS une troncature posée exprès — aucun « line-clamp » ne
   s appliquait : la mesure rendait « 158 × 74 dans 158 × 35 ».

   « minmax(réserve, auto) » garde à la réserve son rôle — aligner le détail
   d une tuile à l autre quand les noms sont courts — et laisse le texte long
   pousser la tuile.

   ⚠️ ET C EST « grid-auto-rows:1fr » SUR LA GRILLE QUI TIENT M6. Sans lui,
   une tuile qui grandit ne grandit qu elle : la grille rendrait deux hauteurs.
   Les grilles passent donc de flex à GRILLE — ce qui aligne aussi la dernière
   rangée incomplète à gauche, sans règle de plus.                          */
.cp-grille,
.qs-mode .wiz-qual-field .wiz-qual-options,
#companium-solar-simulator .pill-grid,
#companium-solar-simulator .cps-presence-choices,
#companium-solar-simulator .cps-equipment-category-grid {
  display:grid; grid-auto-rows:1fr; gap:var(--tu-ecart);
  align-items:stretch; justify-content:stretch; }

/*  Les colonnes, reprises telles quelles de ce que les largeurs disaient.   */
.cp-grille.cp-g2 { grid-template-columns:repeat(2, minmax(0, 1fr)); }
.cp-grille, .cp-grille.cp-g3 { grid-template-columns:repeat(3, minmax(0, 1fr)); }
.qs-mode .wiz-qual-field .wiz-qual-options,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid { grid-template-columns:repeat(3, minmax(0, 1fr)); }
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="1"] { grid-template-columns:minmax(0, 1fr); }
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="2"] { grid-template-columns:repeat(2, minmax(0, 1fr)); }
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="3"] { grid-template-columns:repeat(3, minmax(0, 1fr)); }
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="4"] { grid-template-columns:repeat(4, minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid { grid-template-columns:repeat(3, minmax(0, 1fr)); }
#companium-solar-simulator .cps-presence-choices,
#companium-solar-simulator .cps-equipment-category-grid { grid-template-columns:repeat(4, minmax(0, 1fr)); }

/*  ⚠️ EN GRILLE, LA LARGEUR EST CELLE DE LA COLONNE. Les « width:calc() »
    posés du temps du flex la contrediraient : ils sont neutralisés au même
    niveau de spécificité que celui où ils sont écrits.                     */
.cp-tuile,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="1"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="2"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="3"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="4"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid > *,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] > *,
.cp-grille > *,
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .pill-grid .pill.has-picto,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  width:auto; min-width:0; max-width:none; flex:initial; flex-basis:auto; }

/*  Les rangées de la tuile : réserve MINIMALE, jamais fixe.                */
.cp-tuile,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill,
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  /*  ⚠️ LA RESERVE DU TITRE EST FIXE, ET C EST ELLE QUI ALIGNE LES
      PICTOGRAMMES. Essayee en « minmax », elle a fait apparaitre le defaut
      de la sequence 4 : trois grilles rendaient DEUX hauteurs de
      pictogramme, selon que le libelle tenait sur une ou deux lignes. Le
      contenu etant centre, une rangee de titre plus haute remonte le
      dessin. Seul le DETAIL peut croitre : il est en dernier, il pousse
      vers le bas et ne deplace rien au-dessus de lui.                 */
  grid-template-rows:var(--tu-picto) minmax(var(--tu-lg-titre), auto);
  /*  ⚠️ « align-content:start », ET C EST CE QUE DEMANDE LA SEQUENCE 4.
      Le contenu centre remonte le dessin des qu une rangee grandit : mesure
      du 06/09, deux grilles rendaient DEUX ou TROIS hauteurs de pictogramme
      (16 / 24,1 / 32,2) selon le nombre de lignes du libelle. Cale en haut,
      le pictogramme est TOUJOURS a l air interieur -- une seule valeur par
      grille, par construction, quoi qu il grandisse en dessous.
      ⚠️ LE PRIX EN EST DIT : dans une grille aux libelles inegaux, une
      tuile au nom court garde plus d air EN BAS que sa voisine. C est le
      choix de la consigne -- « ce qui precede et ce qui suit le titre
      demarrent au meme endroit » -- et il remplace l egalite haut/bas
      demandee la veille, qui ne peut pas tenir en meme temps.        */
  align-content:start; justify-items:center; }
.qs-mode .wiz-qual-field .wiz-qual-options:has(.s1-pill-detail) .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid:has(.s1-pill-detail) .wiz-qual-pill,
.cp-grille:has(.cp-tuile span) .cp-tuile,
#companium-solar-simulator .pill-grid:has(.cps-pill-det) .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  grid-template-rows:var(--tu-picto) minmax(var(--tu-lg-titre), auto)
                     minmax(var(--tu-lg-det), auto); }
/*  Une grille sans aucun dessin reste plate — une seule rangée.            */
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.qs-picto)) .wiz-qual-pill,
#companium-solar-simulator .pill-grid:not(:has(.cps-choice-picto)):not(:has(.cps-goal-picto)) .pill {
  grid-template-rows:1fr; }

/*  ⚠️ AUCUN TEXTE N EST COUPÉ. « height:100% » forçait le texte à la hauteur
    de la piste ; avec une piste « minmax », c est le texte qui la fixe.    */
.cp-tuile b, .cp-tuile span,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-detail,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-rep-titre,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-skip-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail,
#companium-solar-simulator .pill-grid .pill .cps-pill-text,
#companium-solar-simulator .pill-grid .pill > strong,
#companium-solar-simulator .pill-grid .pill .cps-pill-det,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy strong,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy small,
#companium-solar-simulator .cps-equipment-category-grid .cps-toggle-label,
#companium-solar-simulator .cps-equipment-category-grid .cps-other-sub {
  height:auto; min-height:0; max-height:none;
  overflow:visible; -webkit-line-clamp:none; line-clamp:none;
  /*  ── M2 : le texte ne touche jamais le bord de sa tuile ──────────────
      ⚠️ « overflow-wrap:anywhere » ET « min-width:0 » : sans eux, un mot
      plus long que la colonne SORT de la tuile. Mesure du 06/09 :
      « Remplacement » débordait de 3,2 px, contour compris.            */
  overflow-wrap:anywhere; word-break:normal; min-width:0; max-width:100%; }

/*  Le titre garde sa réserve, mais par le bas : c est la piste qui la porte. */
.cp-tuile b,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-rep-titre,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-skip-pill-label,
#companium-solar-simulator .pill-grid .pill .cps-pill-text,
#companium-solar-simulator .pill-grid .pill > strong,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy strong,
#companium-solar-simulator .cps-equipment-category-grid .cps-toggle-label {
  display:flex; align-items:center; justify-content:center; width:100%;
  text-align:center; }
.cp-tuile span,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-detail,
#companium-solar-simulator .pill-grid .pill .cps-pill-det,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy small {
  display:flex; align-items:flex-start; justify-content:center; width:100%;
  text-align:center; }

/* ── M2 : LA RESPIRATION INTÉRIEURE ───────────────────────────────────────
   L air horizontal valait 10 px sur les écrans de choix et 14 ailleurs ; le
   seuil de la consigne est 8, et un mot long passait dessous. Il vaut
   désormais « --tu-air » des quatre côtés, comme la maquette l écrit pour le
   haut et le bas.                                                          */
.cp-tuile,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"] .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-pill.qs-skip-pill,
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .pill-grid .pill.has-picto,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  padding:var(--tu-air); }

/* ── M3 et M4 : LE PICTOGRAMME ET LE TITRE SONT CENTRÉS ───────────────────
   ⚠️ La règle qui les tenait à gauche est retirée à sa source, plus haut dans
   cette feuille : « justify-self:start » posé le 04/09 (nuit) d après la
   maquette du 03/09, qui calait à gauche. Elle pesait (0,6,0) — un cran de
   plus que la couche v2, d où le pictogramme à −123,5 px du centre.
   Ce qui suit ne fait que redire le centrage au même niveau.               */
.cp-tuile > *,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill > *,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill > *,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail,
#companium-solar-simulator .pill-grid .pill > *,
#companium-solar-simulator .cps-presence-choices .cps-presence-option > *,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy > *,
#companium-solar-simulator .cps-equipment-category-grid .toggle > *,
#companium-solar-simulator .cps-equipment-category-grid .cps-toggle-main > * {
  justify-self:center; }
.cp-tuile,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill,
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  text-align:center; }

/* ── LE TÉLÉPHONE : deux colonnes, et le même dessin ──────────────────────
   ⚠️ Le bloc du 30/08 met encore les tuiles de choix en RANGÉE sur téléphone
   — pictogramme à gauche, texte à droite. C est lui qui rendait −123,5. Il est
   redit ici en colonne, au même niveau de spécificité.                     */
@media (max-width:760px) {
  .cp-grille, .cp-grille.cp-g2, .cp-grille.cp-g3,
  .qs-mode .wiz-qual-field .wiz-qual-options,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid,
  .qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="2"],
  .qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="3"],
  .qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="4"],
  #companium-solar-simulator .pill-grid,
  #companium-solar-simulator .cps-presence-choices,
  #companium-solar-simulator .cps-equipment-category-grid {
    grid-template-columns:repeat(2, minmax(0, 1fr)); }
  .qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="1"] {
    grid-template-columns:minmax(0, 1fr); }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill {
    flex-direction:column; text-align:center; padding:var(--tu-air); }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto {
    justify-self:center; align-self:center; }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-corps { display:contents; }
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail {
    justify-self:center; text-align:center;
    -webkit-line-clamp:none; line-clamp:none; overflow:visible; }
}


/* ══ LE BANDEAU DU HAUT SUR TÉLÉPHONE — 06/09/2026 ═════════════════════════
   ⚠️ IL S EST INVERSÉ TROIS FOIS. L ordre est donc écrit en CHIFFRES, par
   « order », et mesuré — pas décrit.

   Relevé AVANT, à 390 px, de gauche à droite :
       a.ac-marque   à  15 du bord gauche
       button.ac-menu à 204,5      <- le bouton à trois traits AU MILIEU
       a.ac-bhaut     à 261, soit 15 du bord droit

   Attendu, et posé ici :
       1  le LOGO,                à 15 px du bord gauche
       2  « ESPACE PARTENAIRE »,  au milieu
       3  le BOUTON A TROIS TRAITS, à 15 px du bord DROIT

   ⚠️ SUR ORDINATEUR, RIEN NE CHANGE : « order » n est écrit que sous 760 px,
   et le bouton à trois traits y est masqué par la feuille.                 */
@media (max-width:760px) {
  .ac-top .ac-marque { order:1; margin-right:auto; }
  .ac-top .ac-bhaut  { order:2; margin-left:0; margin-right:auto; }
  .ac-top .ac-menu   { order:3; margin-left:0; }
}

/* ══ LES DEUX BOUTONS DE L ACCUEIL, SUR TÉLÉPHONE ══════════════════════════
   Relevé AVANT : 175 × 60 chacun, rapport largeur/hauteur **2,9** — deux
   rectangles trop plats. Le seuil demandé est entre 1,1 et 1,8.

   ⚠️ ON POSE UNE HAUTEUR MINIMALE, PAS UNE HAUTEUR. Le second libellé passe
   sur deux lignes ; une hauteur fixe le couperait, et c est exactement le
   défaut que la séquence 1 vient de retirer.
   À 175 de large, une hauteur de 118 donne 1,48 — au milieu de la fourchette.
   Les deux gardent la MÊME hauteur : ils sont étirés par leur rangée.      */
@media (max-width:760px) {
  .ac-action .cp-boutons { display:flex; gap:10px; align-items:stretch; }
  .ac-action .cp-boutons > .cp-bp,
  .ac-action .cp-boutons > .cp-bs {
    flex:1 1 0; min-width:0; width:auto; height:auto; min-height:118px;
    display:flex; align-items:center; justify-content:center;
    white-space:normal; text-align:center; line-height:1.25;
    padding:12px 14px; border-radius:12px; }
}


/* ══ EN GRILLE, LA LARGEUR EST CELLE DE LA COLONNE — 06/09/2026 ════════════
   ⚠️ ET UNE LARGEUR EN POURCENTAGE SE RECALCULE SUR LA COLONNE. Les règles du
   flex disaient « width: (100% − 2 × écart) / 3 ». Une fois la grille posée,
   ce « 100 % » n est plus celui de la grille mais celui de la CELLULE : la
   tuile faisait 124 px dans une colonne de 382 (mesure du 06/09, accueil).
   C est un piège discret — la règle n était pas fausse, son référentiel a
   changé sous elle.

   Elles sont neutralisées ici au niveau de spécificité où elles sont écrites,
   sélecteur par sélecteur — jamais par un « * ».                           */
.cp-grille > *,
.cp-grille.cp-g2 > *,
.cp-grille.cp-g3 > *,
.qs-mode .wiz-qual-field .wiz-qual-options > *,
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="1"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="2"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="3"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="4"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid > *,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="metier"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) > *,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="1"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="2"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="3"] > *,
.qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="4"] > *,
#companium-solar-simulator .pill-grid > *,
#companium-solar-simulator .pill-grid.sim-d4 > *,
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .pill-grid .pill.has-picto,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  width:auto; min-width:0; max-width:none;
  flex:initial; flex-basis:auto; justify-self:stretch; }

@media (max-width:760px) {
  .cp-grille > *,
  .cp-grille.cp-g2 > *,
  .cp-grille.cp-g3 > *,
  .qs-mode .wiz-qual-field .wiz-qual-options > *,
  .qs-mode .wiz-qual-field .wiz-qual-options[data-qs-cols="1"] > *,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid > *,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid[data-s1-ecran="famille"] > *,
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid) > *,
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="1"] > *,
  #companium-solar-simulator .pill-grid > *,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option,
  #companium-solar-simulator .cps-equipment-category-grid .toggle {
    width:auto; min-width:0; max-width:none; justify-self:stretch; }
}


/* ══════════════════════════════════════════════════════════════════════════
   SEQUENCE 1 — LE BLOC DE PRESENCE SUR TELEPHONE
   ══════════════════════════════════════════════════════════════════════════
   ⚠️ C EST MA REGRESSION DU 06/09, ET JE LA NOMME. En retirant le dessin
   propre des blocs de presence, j ai emporte avec lui SA VERSION TELEPHONE :
   le « @media(max-width:980px){ .cps-presence-layout{grid-template-columns:1fr} } »
   vivait dans le meme bloc.

   Releve du 06/09 (soir), a 390 px :
       grid-template-columns .. 0px 390px
       colonne de texte ....... 0 px         <- ecrasee
       colonne des tuiles ..... 390 px dans un bloc de 324
       debordement a droite ... 86 px

   La cause est bien le CONTENEUR : « minmax(390px, .95fr) » impose 390 px a
   la seconde colonne, et la premiere, « minmax(0,1fr) », tombe a zero. D ou
   le texte a un mot par ligne et les tuiles qui passent dessous.

   ⚠️ LE SEUIL EST 980, PAS 760 : a 900 px de large, deux colonnes dont une de
   390 laissent moins de 500 px au texte, et la meme ecrasure recommence.    */
@media (max-width:980px) {
  #companium-solar-simulator .cps-presence-layout {
    display:grid; grid-template-columns:minmax(0, 1fr); gap:16px; }
  #companium-solar-simulator .cps-presence-intro { min-width:0; }
  #companium-solar-simulator .cps-presence-choices { width:100%; }
}

/*  1.4 — LES AUTRES BLOCS A DEUX COLONNES DU SIMULATEUR.
    Verifies a la mesure : « .grid-2 », « .grid-3 », « .cps-equip-layout » et
    la carte « objectif de dimensionnement » rendent DEJA une seule colonne
    sous 980 px (mesure : 360 px, une colonne, debordement 0). Rien a y
    changer -- on ne pose pas une regle pour un defaut qui n existe pas.
    ⚠️ Ce garde-fou, lui, est neuf : aucune grille du simulateur ne peut plus
    imposer une largeur minimale superieure a l ecran.                      */
@media (max-width:980px) {
  #companium-solar-simulator .grid-2,
  #companium-solar-simulator .grid-3,
  #companium-solar-simulator .grid-4,
  #companium-solar-simulator .cps-equip-layout { grid-template-columns:minmax(0, 1fr); }
  #companium-solar-simulator .cps-equip-layout { flex-direction:column; }
  #companium-solar-simulator .cps-equip-recap { flex-basis:auto; width:100%; }
}

/* ══════════════════════════════════════════════════════════════════════════
   SEQUENCE 9 — LE DEPLIABLE DE LA TOITURE
   ══════════════════════════════════════════════════════════════════════════
   « Souhaitez-vous en dire plus sur votre toiture ? » vivait dans un encart
   pale, avec « Cliquer pour deplier » en petit et un chevron a peine visible :
   rien ne disait que c etait cliquable.

   ⚠️ LA ZONE ENTIERE EST DEJA LE « summary » — donc deja cliquable. Ce qui
   manquait n est pas le geste, c est le SIGNAL. On le donne : un contour net,
   un fond blanc au lieu du pale, un chevron a l encre dans une pastille jaune,
   et un etat ouvert qui se voit.                                            */
#companium-solar-simulator .cps-roof-more {
  background:var(--cp-blanc); border-radius:var(--tu-rayon);
  box-shadow:inset 0 0 0 1.5px var(--cp-filet-fort); overflow:hidden; }
#companium-solar-simulator .cps-roof-more[open] {
  box-shadow:inset 0 0 0 1.5px var(--tu-fond-on); }
#companium-solar-simulator .cps-roof-more-sum {
  padding:var(--tu-air); cursor:pointer; min-height:64px;
  touch-action:manipulation; }
#companium-solar-simulator .cps-roof-more-sum:hover {
  background:var(--cp-creme, #F7F6F1); }
#companium-solar-simulator .cps-roof-more-title {
  font-size:14.5px; font-weight:600; color:var(--cp-titre); }
#companium-solar-simulator .cps-roof-more-hint {
  font-size:12.5px; font-weight:400; color:var(--cp-leg); }
/*  ⚠️ LE CHEVRON EST UN FOND JAUNE AVEC UN TRAIT A L ENCRE, jamais un trait
    jaune : sur clair, le jaune ne peut etre qu un fond (§14.4). A l encre sur
    le jaune, il est a 15,3 de contraste -- il se voit.                     */
#companium-solar-simulator .cps-roof-more-tri {
  width:34px; height:34px; border-radius:999px;
  background:var(--cp-jaune); flex:none; }
#companium-solar-simulator .cps-roof-more-tri svg {
  width:20px; height:20px; stroke:var(--cp-encre); stroke-width:2.6; }
#companium-solar-simulator .cps-roof-more-cta-txt {
  font-size:11px; letter-spacing:1px; font-weight:600;
  color:var(--cp-titre); text-transform:uppercase; }
/*  ⚠️ LE LIBELLE EXISTE DEJA, en « ::after » ligne 3205 : le mien s y
    AJOUTAIT, et l ecran affichait « DEPLIERCLIQUER POUR DEPLIER ». Vu a la
    capture, pas a la relecture. On ne pose donc pas un second libelle : on
    rend LISIBLE celui qui est la.                                       */
#companium-solar-simulator .cps-roof-more-cta {
  display:flex; align-items:center; gap:9px; flex:none; }

/*  Les autres depliables du resultat prennent le meme signal.               */
#companium-solar-simulator details.cps-fold > summary.cps-fold-sum {
  padding:var(--tu-air); min-height:64px; touch-action:manipulation; }
#companium-solar-simulator .cps-fold-tri {
  width:34px; height:34px; background:var(--cp-jaune); color:var(--cp-encre); }
#companium-solar-simulator .cps-fold-label { font-size:11px; color:var(--cp-titre); }


/* ══ SEQUENCE 4 — LA PREMIERE LIGNE DES TITRES S ALIGNE ════════════════════
   Relevé du 06/09, écran de choix à 390 px :
       boîte du titre .......... 57      — une seule valeur
       PREMIERE LIGNE du titre . 56,9 / 65,7 / 74,4   — trois valeurs

   ⚠️ LA MESURE PORTE SUR LA LIGNE, PAS SUR LA BOITE, et c est tout le point :
   la boîte était bien à la même place. Le titre y était CENTRE
   (« align-items:center ») : un nom d une ligne descendait au milieu de sa
   réserve, un nom de deux lignes la remplissait. Calé en haut, la première
   ligne démarre au même endroit quel que soit le nombre de lignes.

   ⚠️ ET C EST UN ECART AVEC LA MAQUETTE TELLE QU ELLE EST SUR LE DISQUE :
   elle écrit encore « .tu b { align-items:center } ». La consigne dit que la
   v2 le corrige ; le fichier déposé ne le porte pas. On suit la consigne, et
   on le dit.                                                               */
.cp-tuile b,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-rep-titre,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-skip-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label,
#companium-solar-simulator .pill-grid .pill .cps-pill-text,
#companium-solar-simulator .pill-grid .pill > strong,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy strong,
#companium-solar-simulator .cps-equipment-category-grid .cps-toggle-label {
  align-items:flex-start; }

/* ══ SEQUENCE 6 — DEUX TUILES PAR LIGNE DANS LE QUESTIONNAIRE ══════════════
   ⚠️ RETIRE A SA SOURCE, plus haut dans cette feuille : la règle du 04/09
   « …:not(.s1-grid)[data-qs-cols="2"] { grid-template-columns:1fr } », posée
   dans le média du téléphone. Elle pesait (0,5,1) — un cran de plus que la
   règle des colonnes de la v2 — et faisait tomber à UNE colonne ce que la
   page demandait à deux. Relevé du 06/09 : « Maison / Appartement » à UNE
   tuile par rangée, et le bouton Continuer à 868 px pour une fenêtre de 844.
   Ce qui suit ne fait que redire deux colonnes au même niveau.             */
@media (max-width:760px) {
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="2"],
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="3"],
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="4"] {
    grid-template-columns:repeat(2, minmax(0, 1fr)); }
  .qs-mode .wiz-qual-field .wiz-qual-options:not(.s1-grid)[data-qs-cols="1"] {
    grid-template-columns:minmax(0, 1fr); }
  /*  6.2 — le bloc de questions est centré dans la largeur.                */
  .qs-mode .wiz-qual-field { margin-left:auto; margin-right:auto; }
  .qs-mode .wiz-qual-field .wiz-qual-label,
  .qs-mode .wiz-qual-field .qs-aide { text-align:center; }
}

/* ══ SEQUENCE 7 — LA COLONNE DE GAUCHE NE TRONQUE PLUS ═════════════════════
   Elle coupait les libellés de question en points de suspension :
   « S'agit-il d une maison ou d un a… ». La cause est nommée, et elle est
   unique : « white-space:nowrap » avec « text-overflow:ellipsis » sur
   « .wiz-rail-recap-q ».

   ⚠️ LA COLONNE DEFILE DEJA : rien n oblige un libellé à tenir sur une ligne.
   Le texte passe à la ligne, la colonne s allonge, et elle défile.         */
.wiz-rail-recap-q,
.wiz-steprail-line2 .wiz-rail-recap-q {
  white-space:normal; overflow:visible; text-overflow:clip;
  overflow-wrap:anywhere; line-height:1.3; }



/* ══════════════════════════════════════════════════════════════════════════
   L ACCUEIL SUR TELEPHONE — maquette COMPANIUM_accueil_mobile.html, 06/09
   ══════════════════════════════════════════════════════════════════════════
   ⚠️ DEUX MAQUETTES, DEUX PERIMETRES. Celle-ci ne vaut QUE pour l accueil sur
   telephone ; tout le reste suit COMPANIUM_maquette_v2.html. Rien ici ne sort
   du « @media (max-width:760px) », et rien n y touche a l ordinateur.

   ⚠️ LES TROIS TEXTES SONT PLACES EN POURCENTAGE DE LA HAUTEUR DE LA PHOTO,
   pas en pixels : la photo change de hauteur, ils restent a leur place.
   Sept valeurs, toutes reglables, toutes dans la colonne telephone.        */
@media (max-width:760px) {

  /*  ── LE BANDEAU : les trois textes poses SUR la photo ─────────────────── */
  .ac-hero-in {
    position:absolute; inset:0; padding:0; min-height:0;
    display:block; }
  .ac-hero-in > * { max-width:none; }

  /*  Tous alignes sur le MEME bord gauche, a la gouttiere.                  */
  .ac-pastille,
  .ac-hero h1,
  .ac-hero-ver {
    position:absolute; left:var(--ac-gouttiere); right:var(--ac-gouttiere);
    margin:0; }

  .ac-pastille {
    top:var(--sd-hero-surtitre-y, 9%);
    display:flex; align-items:center; gap:9px;
    font-size:11.5px; letter-spacing:1.6px; font-weight:600; color:#fff;
    text-transform:uppercase; text-shadow:0 1px 6px rgba(0,0,0,.6);
    padding-left:0; border-left:0; }
  /*  ⚠️ LA BARRE JAUNE EST UN FOND, pas une couleur de texte (§14.4).      */
  .ac-pastille::before {
    content:""; width:3px; height:17px; flex:none;
    background:var(--cp-jaune); display:block; }

  .ac-hero h1 {
    top:var(--sd-hero-titre-y, 43%);
    font-size:31px; line-height:1.08; letter-spacing:-.9px;
    color:#fff; font-weight:700; text-shadow:0 2px 12px rgba(0,0,0,.55); }
  .ac-hero h1 em { display:block; color:var(--cp-jaune); font-style:normal; }

  .ac-hero-ver {
    top:var(--sd-hero-mention-y, 88%); right:auto;
    display:flex; align-items:center; gap:8px;
    font-size:14px; font-weight:700; color:#fff;
    text-shadow:0 1px 8px rgba(0,0,0,.7); }
  /*  ⚠️ LA COCHE EST JAUNE, SANS PASTILLE ET SANS FOND : c est un TRAIT sur
      la photo -- fond sombre, donc le jaune y est lisible (§14.4).         */
  .ac-hero-ver svg {
    width:17px; height:17px; flex:none;
    stroke:var(--cp-jaune); stroke-width:3; fill:none; }

  /*  Le voile de la maquette mobile : sombre en haut ET en bas, clair au
      milieu, pour que les trois textes se detachent.                       */
  .ac-hero-voile { background:linear-gradient(180deg,
    rgba(0,0,0,calc(var(--sd-photo-bandeau-voile, 0) + .30))  0%,
    rgba(0,0,0,calc(var(--sd-photo-bandeau-voile, 0) + .05)) 38%,
    rgba(0,0,0,calc(var(--sd-photo-bandeau-voile, 0) + .10)) 62%,
    rgba(0,0,0,calc(var(--sd-photo-bandeau-voile, 0) + .55)) 100%); }

  /*  ── LES DEUX BOUTONS : le dessin « A » ──────────────────────────────── */
  .ac-action .cp-boutons { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
  .ac-action .cp-boutons > .cp-bp,
  .ac-action .cp-boutons > .cp-bs {
    aspect-ratio:1.15; min-height:0; height:auto; width:auto;
    border-radius:14px; padding:16px; border:0;
    display:flex; flex-direction:column;
    align-items:flex-start; justify-content:space-between;
    text-align:left; }
  .ac-action .cp-boutons > .cp-bp { background:var(--cp-jaune); color:var(--cp-encre); }
  .ac-action .cp-boutons > .cp-bs {
    background:var(--tu-fond-on); color:#fff; box-shadow:none; }
  .ac-action .cp-boutons > .cp-bp svg { width:22px; height:22px; color:var(--cp-encre); }
  .ac-action .cp-boutons > .cp-bs svg { width:22px; height:22px; color:var(--cp-jaune); }
  .ac-action .cp-boutons .cp-bt-txt { display:block; }
  .ac-action .cp-boutons .cp-bt-txt b {
    display:block; font-size:16px; font-weight:700; line-height:1.2; margin-bottom:3px; }
  .ac-action .cp-boutons .cp-bt-txt small {
    display:block; font-size:11.5px; line-height:1.3; opacity:.75; font-weight:400; }

  /*  ── LES SOURCES, EN BAS D ECRAN, SANS PASTILLES ─────────────────────── */
  .ac-srcs {
    background:var(--cp-creme, #F7F6F1); border-top:1px solid var(--cp-filet);
    border-bottom:0; display:block; padding:20px var(--ac-gouttiere) 26px; }
  .ac-srcs-l { display:flex; align-items:center; gap:9px; margin-bottom:14px;
    font-size:12.5px; color:var(--cp-txt); font-weight:400; }
  .ac-srcs-p { display:flex; flex-wrap:wrap; gap:9px 18px; }
  /*  ⚠️ PLUS DE PASTILLE : ni fond, ni contour, ni arrondi. Une coche jaune,
      le nom en gras, sur la creme.                                          */
  .ac-srcs-p > span {
    display:flex; align-items:center; gap:7px;
    background:none; border:0; border-radius:0; box-shadow:none; padding:0;
    font-size:13.5px; font-weight:700; color:#2A2E31; }
  .ac-src-coche {
    width:15px; height:15px; flex:none;
    stroke:var(--cp-jaune); stroke-width:3; fill:none; }
}

/*  ⚠️ SUR ORDINATEUR, RIEN NE CHANGE. La mention et les sous-titres
    n existent pas dans la maquette v2 : ils y sont masques, pas retires --
    le libelle reste dans le registre, et il suffira d une regle pour les
    montrer si Gerard le decide.                                            */
/*  ⚠️ « <b> » VAUT 900 PAR DEFAUT dans le navigateur (§13.5). Le titre des
    deux boutons est un « <b> » depuis aujourd hui : sans cette ligne, il
    ajoutait une QUATRIEME graisse sur l accueil -- relevee a 1920, 1440 et
    1024, et absente a 390 ou une regle du telephone la fixait deja.    */
.ac-action .cp-boutons .cp-bt-txt b { font-weight:700; }
.ac-action .cp-boutons .cp-bt-txt small { font-weight:400; }

@media (min-width:761px) {
  /*  ⚠️ 07/09 (13 h) -- « ARTISANS VERIFIES » N ETAIT PAS MASQUE PAR
      HASARD : cette ligne le retirait de l ordinateur, decision du 06/09
      recopiee de la maquette. GERARD TRANCHE L INVERSE : il le veut sur les
      deux appareils. La regle est RETIREE A SA SOURCE, pas recouverte --
      une pile de plus aurait marche jusqu au jour ou quelqu un aurait
      cherche pourquoi le meme element est masque puis remontre.        */
  .ac-action .cp-boutons .cp-bt-txt small { display:none; }
  .ac-src-coche { display:none; }
}


/* ══════════════════════════════════════════════════════════════════════════
   LES PICTOGRAMMES EN COULEUR — maquette v2 du 07/09
   ══════════════════════════════════════════════════════════════════════════
   Au repos, le dessin d une tuile porte la couleur de son metier ; survolee ou
   choisie, il passe au JAUNE. Le jaune gagne toujours.

   ⚠️ LA COULEUR VIENT DE LA BASE, par « --sec-color » -- le nom qui existait
   deja pour la couleur du metier, publie par le parcours depuis longtemps, et
   que le controle « aucune mise en forme dans les pages » reconnait comme une
   DONNEE (§13.3). En inventer un second aurait fait deux noms pour une chose.

   ⚠️ LA CHAINE EST CELLE DU DESSIN (§14.2) :
       la couleur de la sous-categorie -> celle de son SECTEUR
       -> celle de sa FAMILLE -> le neutre #6E7075
   Elle est tenue par le repli de « var() », pas par du code.               */
.cp-tuile > svg,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-picto,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto {
  color:var(--sec-color, #6E7075); }

/*  ⚠️ LE JAUNE GAGNE TOUJOURS, ET IL FAUT « !important » — la maquette
    l ecrit ainsi, et pour la meme raison : « --sec-color » est pose EN LIGNE
    sur la tuile, donc plus fort que n importe quel selecteur. Sans lui, une
    tuile choisie garderait la couleur de son metier sur un fond bleu nuit.  */
@media (min-width:761px) {
  .cp-tuile:hover > svg,
  .qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill:hover .qs-picto,
  .qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill:hover .qs-picto {
    color:var(--s1-tuile-selection, var(--cp-jaune)) !important; }
}
.cp-tuile.cp-on > svg,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill.selected .qs-picto,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill.selected .qs-picto {
  color:var(--s1-tuile-selection, var(--cp-jaune)) !important; }

/* ══ LE SIMULATEUR : la palette par nom de groupe ═══════════════════════════
   ⚠️ ET CELLE-CI N EST PAS ADMINISTRABLE, je le dis plutot que de le laisser
   croire. Les tuiles du simulateur ne sont ni des familles ni des secteurs :
   elles n ont aucune ligne en base ou poser une couleur. La consigne rend la
   palette administrable « par FAMILLE et par SECTEUR » — c est fait ; ici, la
   couleur est nommee dans la feuille, et il faudra une consigne pour la
   changer.                                                                  */
#companium-solar-simulator .pill-grid[data-group="housing"] .pill .cps-choice-picto { color:#A2603C; }
#companium-solar-simulator .pill-grid[data-group="occupants"] .pill .cps-choice-picto { color:#B0526E; }
#companium-solar-simulator .pill-grid[data-group="ownership"] .pill .cps-choice-picto { color:#3E8C63; }
#companium-solar-simulator .pill-grid[data-group="roofType"] .pill .cps-choice-picto { color:#A2603C; }
#companium-solar-simulator .pill-grid[data-group="roofPanCount"] .pill .cps-choice-picto { color:#A2603C; }
#companium-solar-simulator .pill-grid[data-group="inputMode"] .pill .cps-choice-picto { color:#E0921F; }
#companium-solar-simulator .pill-grid[data-group="hasFutureProjects"] .pill .cps-choice-picto { color:#E0921F; }
#companium-solar-simulator .pill-grid[data-group="sizingGoal"] .pill .cps-goal-picto { color:#E0921F; }
#companium-solar-simulator .cps-presence-choices .cps-presence-led { color:#3F7BA8; }
#companium-solar-simulator .cps-equipment-category-grid .cps-picto { color:#3F7BA8; }
/*  « Autre equipement » est un cas neutre.                                  */
#companium-solar-simulator .cps-equipment-category-grid .cps-other-tile .cps-picto { color:#6E7075; }
/*  Le jaune gagne ici aussi.                                                */
@media (min-width:761px) {
  #companium-solar-simulator .pill-grid .pill:hover .cps-choice-picto,
  #companium-solar-simulator .pill-grid .pill:hover .cps-goal-picto,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option:hover .cps-presence-led,
  #companium-solar-simulator .cps-equipment-category-grid .toggle:hover .cps-picto {
    color:var(--s1-tuile-selection, var(--cp-jaune)) !important; }
}
#companium-solar-simulator .pill-grid .pill.active .cps-choice-picto,
#companium-solar-simulator .pill-grid .pill.active .cps-goal-picto,
#companium-solar-simulator .cps-presence-choices .cps-presence-option.active .cps-presence-led,
#companium-solar-simulator .cps-equipment-category-grid .toggle.active .cps-picto {
  color:var(--s1-tuile-selection, var(--cp-jaune)) !important; }

/* ══ SEQUENCE 2 — LES PICTOGRAMMES DES FICHES ══════════════════════════════
   ⚠️ AUCUN FOND NI CADRE DERRIERE : la couleur est sur le TRAIT.
   Les quatre aides prennent la couleur que la maquette leur donne. Elles sont
   nommees par leur DESSIN : voir juste dessous pourquoi le rang ne tenait pas.  */
/*  ⚠️ LA COULEUR SUIT LE DESSIN, PAS LE RANG -- corrige le 07/09.
    Je les avais nommees par leur rang. Releve du 07/09 : la page rend CINQ
    rubriques, pas quatre -- « Prime a l autoconsommation » est en quatrieme
    position -- et l eco-PTZ, cinquieme, recevait le gris neutre pendant que
    le violet allait a la prime. Le dessin, lui, est deja choisi par la page
    (le tableau $pictoAide de home.php) et il DIT de quelle aide il s agit. */
.ac-aide > svg { color:#6E7075; background:none; border:0; box-shadow:none; }
.ac-aide > svg:has(use[href="#cp-i-maison"])  { color:#3E8C63; }  /* MaPrimeRenov  */
.ac-aide > svg:has(use[href="#cp-i-euro"])    { color:#E0921F; }  /* CEE           */
.ac-aide > svg:has(use[href="#cp-i-devis"])   { color:#3F7BA8; }  /* TVA a 5,5 %   */
.ac-aide > svg:has(use[href="#cp-i-horloge"]) { color:#5B4FC4; }  /* eco-PTZ       */
/*  Les fiches de l ecran de resultat, dans le meme ordre de lecture.        */
#companium-solar-simulator #cps-result-card .cps-fiche-ic {
  background:none; border:0; box-shadow:none; }
#companium-solar-simulator #cps-result-card .cps-repose-bloc:nth-of-type(1) .cps-fiche-ic { color:#3E8C63; }
#companium-solar-simulator #cps-result-card .cps-repose-bloc:nth-of-type(2) .cps-fiche-ic { color:#E0921F; }
#companium-solar-simulator #cps-result-card .cps-repose-bloc:nth-of-type(3) .cps-fiche-ic { color:#3F7BA8; }
#companium-solar-simulator #cps-result-card .cps-repose-bloc:nth-of-type(4) .cps-fiche-ic { color:#5B4FC4; }
#companium-solar-simulator #cps-result-card .cps-cf:nth-of-type(1) .cps-fiche-ic { color:#E0921F; }
#companium-solar-simulator #cps-result-card .cps-cf:nth-of-type(2) .cps-fiche-ic { color:#3E8C63; }
#companium-solar-simulator #cps-result-card .cps-cf:nth-of-type(3) .cps-fiche-ic { color:#3F7BA8; }
#companium-solar-simulator #cps-result-card .cps-cf:nth-of-type(4) .cps-fiche-ic { color:#5B4FC4; }

/* ══ SEQUENCE 3 — LA LIGNE DE DETAIL TIENT SUR DEUX LIGNES ═════════════════
   ⚠️ CECI ANNULE UNE REGLE DU 06/09. Il y etait ecrit « aucun texte tronque,
   nulle part » ; Gerard a tranche autrement pour CE TEXTE-LA. La ligne de
   detail tient sur DEUX lignes au maximum et se termine par des points de
   suspension quand elle deborde — le visiteur verra la suite en entrant.

   ⚠️ CELA NE VAUT QUE POUR LA LIGNE DE DETAIL. Le TITRE d une tuile n est
   jamais tronque, et aucun autre texte du site non plus. La mesure des six
   points ne compte donc plus le detail : elle compte les TITRES.

   ⚠️ DEUX LIGNES PARTOUT, meme quand le texte est court : c est la reserve
   qui tient l alignement d une tuile a l autre. D ou la hauteur fixe, et non
   un « minmax ».                                                            */
.cp-tuile span,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-detail,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail,
#companium-solar-simulator .pill-grid .pill .cps-pill-det,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy small {
  display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2;
  line-clamp:2; overflow:hidden;
  /*  ⚠️ 07/09 -- « height:100% », PAS « var(--tu-lg-det) ». Le jeton vaut
      2,4 EM, et un « em » se compte sur l element qui le lit : 34,8 px sur la
      tuile (14,5 px), 28,8 px sur le detail (12 px). En le relisant ici, la
      boite du detail devenait plus COURTE que sa propre rangee, et le clamp
      tranchait la seconde ligne en plein milieu de ses lettres. La maquette v2
      ecrit « .tu .det{width:100%;height:100%} » (ligne 228) : le detail remplit
      la rangee que la grille lui reserve, il ne la recalcule pas.        */
  height:100%; max-height:100%; }
/*  La rangee du detail redevient FIXE : c est la reserve de deux lignes.    */
.qs-mode .wiz-qual-field .wiz-qual-options:has(.s1-pill-detail) .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid:has(.s1-pill-detail) .wiz-qual-pill,
.cp-grille:has(.cp-tuile span) .cp-tuile,
#companium-solar-simulator .pill-grid:has(.cps-pill-det) .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option {
  grid-template-rows:var(--tu-picto) minmax(var(--tu-lg-titre), auto)
                     var(--tu-lg-det); }

/* ══ LE DESSIN CHANGE DE COULEUR APRES LE FOND — 07/09/2026 ════════════════
   ⚠️ LE DEFAUT QUE GERARD VOYAIT EST ICI, ET IL EST DANS LA TRANSITION.
   Releve du 07/09, un point toutes les 20 ms, sur telephone :

       0 ms   dessin #D4553A   fond blanc              contraste 4,07
      41 ms   dessin JAUNE     fond BLANC              contraste 1,12   <---
      60 ms   dessin JAUNE     fond rgb(216,218,221)   contraste 1,25   <---
      81 ms   dessin JAUNE     fond rgb(145,149,158)   contraste 2,67   <---
     101 ms   dessin JAUNE     fond rgb(88,95,109)     contraste 5,71
     162 ms   dessin JAUNE     fond bleu nuit          contraste 15,11

   TROIS pas consecutifs sous 3, dont un a 1,12. Le fond porte une transition
   de 120 ms ; la couleur du dessin n en avait AUCUNE : elle sautait au jaune
   en 41 ms et restait JAUNE SUR BLANC pendant une centaine de millisecondes.
   Le dessin est toujours peint -- il est simplement invisible.

   ⚠️ SUR ORDINATEUR LE DEFAUT NE PARAIT PAS, et c est ce qui l a rendu si
   difficile a reproduire : la souris survole avant de cliquer, donc le fond
   est deja sombre au moment du clic. Sur un telephone, il n y a pas de
   survol : on passe du blanc au bleu nuit d un coup.

   LA CORRECTION est celle que la consigne indique : le dessin change de
   couleur APRES le fond. Un delai egal a la duree de la transition du fond
   suffit -- il garde sa couleur de metier, lisible sur clair, tant que le
   fond n est pas devenu sombre.                                            */
.cp-tuile > svg,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-picto,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .qs-picto,
#companium-solar-simulator .pill-grid .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid .pill .cps-goal-picto,
#companium-solar-simulator .cps-presence-choices .cps-presence-led,
#companium-solar-simulator .cps-equipment-category-grid .cps-picto {
  /*  ⚠️ RETARDER LE DESSIN NE SUFFISAIT PAS : le creux se deplacait.
      Mesure du 07/09 avec un delai de 120 ms : la couleur du METIER passait
      alors sur le fond intermediaire, et #D4553A sur rgb(144,149,158)
      rendait 1,35 -- pire que le jaune sur blanc.
      ⚠️ AUCUNE COULEUR MOYENNE NE SURVIT A UN FOND QUI TRAVERSE LE GRIS
      MOYEN : le creux n est pas une question de qui change en premier, il
      est dans le passage lui-meme. La consigne offrait la seconde issue --
      « ou sans transition du tout » -- et c est la seule qui tienne.   */
  transition:none; }

/*  Le FOND passe d un coup : c est lui qui creait les pas intermediaires.
    Le contour garde sa transition -- il ne porte aucun texte, donc aucun
    contraste ne peut y tomber.                                          */
.cp-tuile,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .wiz-qual-pill,
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  transition:box-shadow .12s; }


/* ══ SEQUENCE 4 — LES DEUX PICTOGRAMMES DES BOUTONS ════════════════════════
   Mesure du 07/09, accueil a 390 px, AVANT :

       « Je recois mes devis »          rendu, 22x22, trait 2 px
       « Estimer mon projet solaire »   rendu, 22x22, trait 1,5 px

   Les deux dessins etaient bien rendus et de meme taille ; LEUR EPAISSEUR
   DIFFERAIT, et cela se voit cote a cote.

   ⚠️ LA CAUSE N ETAIT PAS DANS LA FEUILLE. Chaque dessin de la banque
   declare son epaisseur sur son propre <g> ; un attribut de presentation
   pose la est CLONE dans l arbre du <use>, et AUCUN selecteur du document
   ne peut le rattraper. Ecrire « stroke-width » sur le bouton n aurait rien
   change. Les deux dessins concernes ne la declarent donc plus -- retiree a
   sa source dans « pictos.php » -- et c est L ENDROIT qui la donne, comme
   la maquette v2 l ecrit elle-meme :
       maquette ligne 145   .bt svg   { stroke-width:2 }     (telephone)
       maquette ligne 431   .fiche .ic svg { stroke-width:1.6 }
   Le SOLEIL sert aux deux endroits : c est la preuve que l epaisseur
   appartient a la place, jamais au dessin.                                */
.ac-page svg { stroke-width:1.6; }
@media (max-width:760px) {
  .ac-action .cp-boutons > .cp-bp svg,
  .ac-action .cp-boutons > .cp-bs svg { stroke-width:2; }
}


/* ══════════════════════════════════════════════════════════════════════════
   L ACCUEIL TIENT JUSQU AU CADENAS — 07/09/2026
   ══════════════════════════════════════════════════════════════════════════
   En arrivant sur l accueil, un telephone doit voir SANS DEFILER : le bandeau,
   la photo et ses trois textes, le titre du bloc d action, les deux boutons,
   et LES DEUX LIGNES ENTIERES de la phrase de securite.

   LE SEUIL : 390 x 700. Le point qui tranche est le BAS DE LA DERNIERE LIGNE
   de la phrase, pas le bas de sa boite -- une boite porte son interligne et
   son air, l oeil ne voit que la ligne (§20.4).

   RELEVE DU 07/09, AVANT :   bas de la derniere ligne = 805,7   ->  -105,7

   ⚠️ ON PREND LE MINIMUM, DANS L ORDRE : le titre, puis les airs, puis la
   photo en dernier recours. Chaque valeur est un REGLAGE avec sa colonne
   telephone : ce qui se corrige a l oeil se rattrape sans toucher au code.

   ⚠️ ET SUR ORDINATEUR, RIEN NE CHANGE. Chaque jeton porte en repli la valeur
   d ordinateur d aujourd hui -- 20 px, 20 px, 34 px -- et sa colonne
   ordinateur en base porte la meme. Les trois regles qui suivent sont donc
   sans effet a 1440 : c est mesure, pas suppose.                            */

/*  ── ETAPE 1 — LE TITRE DU BLOC D ACTION ────────────────────────────────
    ⚠️ ET UNE CORRECTION DE LA CONSIGNE, QUI SE DIT. Elle annonce un titre
    « sur deux lignes ». Mesure du 07/09 : le TEXTE tient deja sur UNE ligne
    (police 20 px, largeur 329,5 pour 360 disponibles). Ce qui fait deux
    lignes, c est le BLOC : « Decrivez vos travaux… » (31 px), l ecart de la
    boite flex (13 px), puis « Moins de deux minutes » (20,1 px) qui passe
    dessous -- 64,1 px en tout.

    ⚠️ LES METTRE COTE A COTE EST IMPOSSIBLE, ET C EST CHIFFRE : « Moins de
    deux minutes » occupe 156 px des 360 disponibles ; le titre devrait alors
    tenir dans 191, soit une police de 12 px -- plus petite que la phrase de
    securite (12,5). Le titre principal de l ecran deviendrait le plus petit
    texte de la page. On ne le fait pas.

    Le gain se prend donc sur les trois mesures du bloc, sans rien empiler :
    police 20 -> 18, interligne serre, ecart 13 -> 6.                      */
.ac-action-t b { font-size:var(--sd-action-titre-taille, 20px); }
.ac-action-t   { margin-bottom:var(--sd-action-titre-dessous, 20px); }
@media (max-width:760px) {
  .ac-action-t   { gap:6px; line-height:1.2; }
  .ac-action-t b { line-height:1.2; }
  .ac-action-t span { line-height:1.25; }
}

/*  ── ETAPE 2 — LES AIRS ─────────────────────────────────────────────────
    Trois airs se suivent entre la photo et la phrase de securite :
        au-dessus du titre ...... le padding haut du bloc d action
        sous le titre ........... la marge basse de « .ac-action-t »
        au-dessus du cadenas .... « bouton_dessous », qui existait deja
    ⚠️ AUCUN NE DESCEND SOUS 12 px, c est la borne de la consigne, et elle
    est ecrite dans les bornes du reglage en base -- pas seulement ici.

    ⚠️ ECART ASSUME AVEC LA MAQUETTE : elle ecrit « .action{padding:20px 15px} »
    sur telephone (l.133). Nous passons le haut a 12. C est une decision de
    Gerard pour cet ecran, elle est nommee, et elle reste un reglage.      */
.ac-action, .ac-action.ac-seul { padding-top:var(--sd-action-air-haut, 34px); }
/*  ⚠️ UN REPLI SE DONNE PAR APPAREIL, ET LE DEPOT SUR STAGING L A
    MONTRE. Tant que la migration n est pas jouee, « --sd-action-air-haut »
    n existe pas et le repli decide seul. Ecrit une seule fois a 34 px, il
    remplacait les 20 px que le telephone portait depuis le 06/09 : la page
    du telephone GRANDISSAIT de 14 px, sur un ecran ou l on vient d en
    gagner 106. Un repli qui change le rendu n est pas un repli.
    Mesure sur staging avant correction : bas de la derniere ligne a 801,8
    au lieu des 805,7 attendus -- l ecart etait masque par le resserrement
    du titre, qui, lui, ne depend d aucun reglage.                        */
@media (max-width:760px) {
  .ac-action, .ac-action.ac-seul { padding-top:var(--sd-action-air-haut, 20px); }
}

/*  ── ETAPE 3 — LA PHOTO, EN DERNIER RECOURS ─────────────────────────────
    Descendue par pas de 10 px, et on s est arrete AU PREMIER QUI TIENT :
        420 -> 749,4    410 -> 739,4    400 -> 729,4
        390 -> 719,4    380 -> 709,4    370 -> 699,4   TIENT
    Elle vit dans « hero_hauteur », colonne telephone : 430 -> 370.

    ⚠️ LE PLANCHER EST 350 px, ET IL N EST PAS EN BASE -- il ne peut pas
    y etre. « min_value » est UNE colonne pour les DEUX valeurs de la ligne :
    pose a 350, il aurait rendu la valeur ORDINATEUR (330) inferieure a son
    propre minimum, et le premier enregistrement depuis /admin/apparence-site
    aurait fait grandir la photo de l ordinateur tout seul. Le plancher est
    donc ecrit ici et dans la migration, et il attend une borne par colonne.
    Sous 350, les trois textes poses sur la photo se serrent et le titre
    passe sur trois lignes.

    ⚠️ ET LA MARGE N EST QUE DE 0,6 px a 370. C est le MINIMUM que la
    consigne demande de prendre, et c est ce qui est livre ; 360 px en
    donnerait 10,6. Un seul reglage separe les deux.                       */


/* ══════════════════════════════════════════════════════════════════════════
   LE CONTENU D UNE TUILE EST CENTRE — 07/09/2026
   ══════════════════════════════════════════════════════════════════════════
   ⚠️ CE QUE LA MESURE A MONTRE, ET QUI N ETAIT PAS CE QUE JE CROYAIS.
   Releve du 07/09, 20 grilles, deux appareils :

       l air au-dessus du premier element ......... 24, PARTOUT
       l air au-dessous de la BOITE du dernier .... 24, PARTOUT
       l air au-dessous de l ENCRE du dernier ..... -38,1 a +61,4

   La BOITE etait deja centree. Ce que Gerard voit depuis trois jours, c est
   l ENCRE : le texte flotte EN HAUT de sa reserve et laisse le vide EN BAS.
   Une tuile au detail d une ligne garde 16,2 px de plus sous son texte que sa
   voisine a deux lignes -- exactement une ligne de detail.

   ⚠️ LA SORTIE DE L ARBITRAGE, ET ELLE TIENT LES TROIS CONTRAINTES.
   Gerard demande « autant d air au-dessus du pictogramme qu en dessous de la
   DERNIERE LIGNE de texte ». Il suffit d ancrer le DERNIER ELEMENT PEINT AU
   BAS de sa rangee : sa derniere ligne tombe alors toujours au meme endroit,
   donc l air du bas vaut « --tu-air » quoi qu il arrive.
       le pictogramme garde sa rangee fixe en haut  -> air du haut constant
       le dernier element est ancre en bas          -> air du bas constant
       la premiere ligne du titre reste calee en haut -> elle reste alignee
   Le vide se retrouve ENTRE le titre et le detail, la ou il ne se lit pas
   comme un desequilibre. C est ce que la maquette v2 rend, mesuree a 24 / 24.

   ⚠️ ET CELA NE REVIENT PAS SUR LE 06/09 : la decision d alors -- caler la
   premiere ligne du titre en haut -- est GARDEE. Ce qui change est le bas.  */

/*  ── LE DETAIL EST ANCRE EN BAS DE SA RANGEE ─────────────────────────────
    ⚠️ « -webkit-box-pack » NE MARCHE PLUS, ET LE RELEVE L A MONTRE.
    Premier essai : pousser les lignes vers le bas DANS la boite, par
    « -webkit-box-pack:end ». Il a marche sur les grilles de metiers et pas
    sur celles de familles. Relevé topographique des neuf tuiles :
        display calcule ... « flow-root »   -- et non « -webkit-box »
        -webkit-box-pack .. « end »         -- declare, donc, mais inerte
        detail ............ 1 ligne dans une boite de 34,8 px
    Le navigateur normalise « display:-webkit-box » en bloc des que le
    « line-clamp » standard s applique : la propriete de boite webkit n a
    plus de boite webkit sur quoi agir. Elle est declaree et sans effet --
    exactement le genre de regle qui a l air de marcher (§16.12).

    LA BOITE SE DEPLACE, PLUTOT QUE SON CONTENU : hauteur AUTO -- elle epouse
    ses une ou deux lignes -- bornee par sa rangee, et posee EN BAS de
    celle-ci. La derniere ligne tombe alors toujours au meme endroit.
    ⚠️ « max-height:100% » REMPLACE « height:100% » du §21.5, et le
    defaut d alors ne revient pas : la rangee vaut 34,8 px et deux lignes en
    demandent 32,4. La boite ne peut plus etre plus courte que son texte.  */
.cp-tuile span,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-detail,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-detail,
#companium-solar-simulator .pill-grid .pill .cps-pill-det,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy small {
  height:auto; max-height:100%; align-self:end; }

/*  ── QUAND LA GRILLE N A PAS DE DETAIL, LE DERNIER EST LE TITRE ──────────
    ⚠️ LA DECISION SE PREND SUR LA GRILLE, JAMAIS SUR LA TUILE (§18.5). Sur
    l ecran du statut, seule « Locataire » porte une phrase : la grille EN A
    donc un, et c est le detail qui s ancre -- « Proprietaire » garde sa
    rangee vide, et son titre reste cale en haut comme celui de sa voisine.
    C est l exception que la consigne nomme, et elle se tient toute seule.  */
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.s1-pill-detail)) .wiz-qual-pill .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.s1-pill-detail)) .wiz-qual-pill .qs-rep-titre,
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.s1-pill-detail)) .wiz-qual-pill .qs-skip-pill-label,
.cp-grille:not(:has(.cp-tuile span)) .cp-tuile b,
#companium-solar-simulator .pill-grid:not(:has(.cps-pill-det)) .pill .cps-pill-text,
#companium-solar-simulator .pill-grid:not(:has(.cps-pill-det)) .pill > strong,
#companium-solar-simulator .cps-equipment-category-grid .cps-toggle-label {
  /*  ⚠️ LES DEUX, ET LE RELEVE DIT POURQUOI. « align-items » pousse le
      texte au bas de SA BOITE ; encore faut-il que la boite remplisse sa
      rangee. Mesure du 07/09 sur le simulateur : « .cps-pill-text » declarait
      « align-items:flex-end » et faisait 18,125 px de haut -- une ligne, pas
      la rangee. Le texte etait donc deja au bas d une boite qui, elle,
      restait en haut : 33,2 px d air sous le texte contre 24 au-dessus.
      « align-self:end » descend LA BOITE au bas de sa rangee. Sur une boite
      qui remplit deja sa rangee, il ne fait rien -- les deux cohabitent.  */
  align-items:flex-end; align-self:end; }

/*  ── UNE GRILLE PLATE SE CENTRE, ELLE NE S ANCRE PAS ────────────────────
    ⚠️ MESURE DU 07/09, ET C EST MA PROPRE REGLE QUI L A CAUSEE. Sur l ecran
    « Madame / Monsieur », la grille est PLATE : pas de pictogramme, une seule
    rangee (« grid-template-rows:1fr »). Ancrer son unique element en bas l a
    colle au fond de la tuile -- 35,9 px d air au-dessus contre 24,1 en
    dessous. L ancrage repond a une question qui ne se pose pas ici : quand il
    n y a qu un element, le haut et le bas sont le meme reglage.
    Sur une grille plate, on CENTRE -- c est la maquette v2 (« .grille.plate >
    .tu { align-content:center } », l.258) et c est aussi le bon sens.       */
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.qs-picto)) .wiz-qual-pill .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.qs-picto)) .wiz-qual-pill .qs-rep-titre,
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.qs-picto)) .wiz-qual-pill .qs-skip-pill-label,
#companium-solar-simulator .pill-grid:not(:has(.cps-choice-picto)):not(:has(.cps-goal-picto)) .pill .cps-pill-text,
#companium-solar-simulator .pill-grid:not(:has(.cps-choice-picto)):not(:has(.cps-goal-picto)) .pill > strong {
  align-items:center; align-self:center; }


/* ══════════════════════════════════════════════════════════════════════════
   L ECRAN D ENTREE DU SIMULATEUR — 07/09/2026
   ══════════════════════════════════════════════════════════════════════════
   ⚠️ LA MAQUETTE v2 NE MONTRE PAS CET ECRAN. Elle donne le vocabulaire --
   chapeau, titre, colonne laterale, boutons, espacements -- pas son dessin.
   Il n est donc PAS invente : il est RECOPIE de l ecran qui le suit, celui de
   la localisation. Meme colonne, meme en-tete, memes espacements, memes
   graisses. C est le seul moyen de passer de l un a l autre sans rupture.

   RELEVE DU 07/09, AVANT, sur les six reperes :
       fond du corps ....... rgb(244,244,241)  =  identique
       colonne laterale .... 248 px, blanche   =  identique
       bord gauche ......... 32 / 15           =  identique
       titre ............... 29 px CONTRE 25   <- ECART
       carte blanche ....... OUI  CONTRE non   <- ECART, et c est LE defaut
       bouton .............. 48 px, jaune, rayon 10  =  identique

   Deux ecarts seulement, donc -- mais le premier saute aux yeux : une carte
   blanche posee au milieu du vide, quand les huit ecrans suivants n en ont
   aucune.                                                                  */

/*  ── 1. LA CARTE BLANCHE DISPARAIT ──────────────────────────────────────
    ⚠️ ON RETIRE, ON N EMPILE PAS. « .hero-card » garde son selecteur -- il
    porte le contenu -- mais plus aucune de ses declarations de carte : ni
    fond, ni ombre, ni arrondi, ni air interieur. Le meme bloc habille aussi
    « .cps-card », qui sert AILLEURS : on ne touche donc que « .hero-card ». */
#companium-solar-simulator .hero-card {
  background:transparent; box-shadow:none; border:0; border-radius:0;
  padding:0; }

/*  ── 2. L ECRAN PREND LA STRUCTURE DES HUIT AUTRES ──────────────────────
    ⚠️ « min-height:calc(100vh - …) » EST RETIRE, et c est lui qui creait le
    vide. Il centrait la carte au milieu de la fenetre, donc loin de tout le
    reste ; les ecrans suivants, eux, commencent en haut de leur section.  */
#companium-solar-simulator .hero {
  min-height:0; display:block;
  padding:var(--sd-simu-entree-air, 34px) 0 var(--sd-simu-entree-air, 34px);
  background:transparent; }
#companium-solar-simulator .hero:before { display:none; }

/*  ── 3. LES QUATRE ARGUMENTS EN LISTE ───────────────────────────────────
    Une ligne par argument, chacun avec sa coche, au lieu d une ligne serree
    ou les quatre se disputaient la largeur.
    ⚠️ ET DEUX GRAISSES DISPARAISSENT AU PASSAGE : le releve du 07/09 donnait
    « font-weight:760 » sur l argument et « 950 » sur la coche -- deux valeurs
    qu aucun oeil ne distingue de 700, et deux de plus que les trois de la
    charte (§13.5). Elles n avaient jamais ete relevees parce que cet ecran
    n a jamais ete traverse par le banc.                                   */
#companium-solar-simulator .cps-hero-checks {
  display:grid; grid-template-columns:1fr;
  gap:var(--sd-simu-entree-liste-ecart, 10px);
  margin-top:20px; }
#companium-solar-simulator .cps-hero-check {
  width:100%; min-height:0; padding:0; gap:10px;
  font-size:14.5px; font-weight:400; line-height:1.45;
  color:var(--cp-txt); }
#companium-solar-simulator .cps-check-box {
  font-size:14px; font-weight:700; color:var(--cp-titre); }

/*  ── 4. LE BOUTON PREND LE DESSIN DES BOUTONS D ACTION ──────────────────
    Il l avait deja sur ordinateur -- 48 px, fond jaune, encre a l encre,
    rayon 10. Sur telephone il faisait 48 quand « Continuer » en fait 44 :
    les deux lisent desormais la meme mesure.                              */
#companium-solar-simulator .cps-hero-start { margin-top:22px; }
#companium-solar-simulator #cps-start-simulation {
  min-height:var(--sd-simu-bouton-hauteur, 48px); padding:12px 20px; }

/*  ── 4bis. LE TITRE PREND LA TAILLE DE CELUI DE L ECRAN SUIVANT ────────
    Releve du 07/09 : 29 px a l entree contre 25 sur la localisation, et
    24 contre 19 sur telephone. Le titre de l entree etait donc le plus gros
    de tout le simulateur -- une rupture de plus a la premiere page.
    ⚠️ UN SEUL REGLAGE, DEUX COLONNES, et un repli par appareil (§22.2). */
#companium-solar-simulator .hero h1,
#companium-solar-simulator .hero-card .sim-d23 {
  font-size:var(--sd-simu-titre-taille, 25px); font-weight:600;
  letter-spacing:-.6px; line-height:1.15; }

/*  ── 5. SUR TELEPHONE, LA MEME RESPIRATION QUE LE RESTE DU SITE ─────────
    15 px de chaque cote, et pas de cadre. La mesure d avant donnait deja 15 :
    la regle est redite au meme niveau pour que le retrait de la carte ne la
    fasse pas tomber.                                                      */
@media (max-width:760px) {
  #companium-solar-simulator .hero .wrap { padding:0 var(--ac-gouttiere); }
  #companium-solar-simulator .hero-card { border-radius:0; padding:0; }
  /*  ⚠️ LE MEME JETON, UN REPLI PAR APPAREIL (§22.2). Un seul reglage
      en base, deux colonnes ; ici, deux replis -- 48 et 44 -- pour que la
      page rende juste AVANT que la migration soit jouee.               */
  #companium-solar-simulator #cps-start-simulation {
    min-height:var(--sd-simu-bouton-hauteur, 44px); width:100%; }
  #companium-solar-simulator .hero h1,
  #companium-solar-simulator .hero-card .sim-d23 {
    font-size:var(--sd-simu-titre-taille, 19px); }
}


/* ══════════════════════════════════════════════════════════════════════════
   LE BANDEAU DES SOURCES, ET L ACCUEIL QUI VA JUSQU AU BOUT — 07/09/2026
   ══════════════════════════════════════════════════════════════════════════
   RELEVE DU 07/09, AVANT :

   TELEPHONE   fond du bandeau  rgb(247,246,241)  =  CELUI DE LA PAGE
               un trait de 1 px en HAUT
               contenu a 15 px de chaque bord            (deja juste)
               phrase du drapeau sur DEUX lignes
               hauteur 150,6 px, cinq sources sur deux rangees
               bas de la derniere source ......... 847,4  pour un seuil de 700

   ORDINATEUR  fond du bandeau  blanc  sur une page creme   (deja juste)
               un trait de 1 px en BAS
               contenu a 32 px a gauche et 330,5 a DROITE  <- pas centre

   Il manquait donc 147,4 px sur telephone, et le bandeau ne se distinguait
   pas du fond sur l appareil ou il en avait le plus besoin.                */

/*  ── SEQUENCE 3.1 — AUCUN TRAIT ─────────────────────────────────────────
    Ni en haut ni en bas. Ce qui separe le bandeau du reste est desormais sa
    couleur, pas un filet.                                                 */
.ac-srcs { border-top:0; border-bottom:0; }

/*  ── SEQUENCE 3.2 — UN FOND LEGEREMENT PLUS CLAIR QUE LA PAGE ───────────
    L ordinateur l avait deja : blanc sur creme. Le telephone portait le meme
    creme que la page, donc rien ne le distinguait. Un seul reglage, les deux
    appareils.
    ⚠️ LA CLEF FINIT PAR « _fond », ET CE N EST PAS UN DETAIL : c est a ce
    suffixe que « site_display_css() » reconnait une couleur (§19.1). Nommee
    autrement, elle serait traitee comme un nombre, la couleur refusee, et la
    variable publiee VIDE -- donc la declaration entiere invalide.        */
.ac-srcs { background:var(--sd-srcs-fond, #FFFFFF); }

/*  ── SEQUENCE 3.3 — LE CONTENU EST CENTRE DANS LA LARGEUR ───────────────
    Mesure du 07/09 sur ordinateur : 32 px a gauche, 330,5 a droite. Le
    bandeau va d un bord a l autre, son contenu se calait a gauche et le vide
    s accumulait a droite.                                                 */
@media (min-width:761px) {
  .ac-srcs { justify-content:center; }
  .ac-srcs-p { justify-content:center; }
}

/*  ── SEQUENCE 2 — CE QU IL A FALLU RENDRE ───────────────────────────────
    Il manquait 147,4 px. Pris dans cet ordre, et rien d autre :
        la photo ....................... 370 -> 250   -120
        la phrase du drapeau sur UNE ligne             -19,4
        l air en haut du bandeau ....... 20 -> 14        -6
        la marge sous la phrase ........ 14 ->  8        -6
        les sources, police 13,5 -> 12,5                 -3
    ⚠️ LES AIRS DU BLOC D ACTION NE SONT PAS TOUCHES : ils sont a 12 px
    depuis ce matin, et la consigne dit de ne pas y revenir.
    ⚠️ NI LES DEUX BOUTONS, NI LEUR DESSIN.                              */
@media (max-width:760px) {
  .ac-srcs { padding:var(--sd-srcs-air-haut, 14px) var(--ac-gouttiere) 18px; }
  /*  La phrase tient sur UNE ligne : 11 px pour 331 px utiles.           */
  .ac-srcs-l { margin-bottom:10px; font-size:11px; white-space:nowrap;
    overflow:hidden; text-overflow:ellipsis; }
  .ac-srcs-p { gap:7px 14px; }
  .ac-srcs-p > span { font-size:12.5px; }
}


/* ══════════════════════════════════════════════════════════════════════════
   LE TITRE SE CENTRE DANS SA RESERVE — 07/09/2026 (nuit)
   ══════════════════════════════════════════════════════════════════════════
   ⚠️ CECI ANNULE LA DECISION DU 06/09, et c est Gerard qui tranche.

   Le 06/09, le titre a ete cale EN HAUT de sa reserve pour que la PREMIERE
   LIGNE s aligne d une tuile a l autre (§20.4). Ce que cela donnait a l ecran :

       « Climatisation » (une ligne) face a « Pompe a chaleur air/eau »
       (deux lignes) -> la ligne unique tombait au niveau de la PREMIERE
       ligne de sa voisine, donc tout en haut d une reserve a moitie vide.

       « PAC geothermique » (deux lignes) face a « Maintenance systeme »
       (trois lignes) -> le titre court tenait le haut, et le vide se voyait
       en dessous.

   Gerard veut le contraire : le titre COURT au MILIEU de la hauteur occupee
   par le titre LONG.

   ⚠️ CE QUE CELA COUTE, ET C EST ASSUME : les PREMIERES lignes ne sont plus
   alignees entre elles. Les deux ne peuvent pas tenir ensemble -- une reserve
   fixe ne peut caler qu un seul bord -- et la consigne dit de ne pas chercher.

   ⚠️ CE QUI NE CHANGE PAS, et qui est verifie a la mesure :
       le pictogramme garde sa rangee fixe en haut   -> une valeur par grille
       le bloc reserve reste centre dans la tuile    -> 24 en haut, 24 en bas
       la ligne de detail reste ancree en bas        -> l air du bas ne bouge pas
   Le titre se centre DANS SA RANGEE : il ne touche a rien au-dessus ni en
   dessous de lui.                                                          */

/*  ⚠️ « align-self:stretch » AUTANT QUE « align-items:center », et le releve
    du 07/09 au soir dit pourquoi : sur le simulateur, « .cps-pill-text »
    declarait deja son alignement et faisait 18,125 px -- une ligne, pas la
    rangee. Centrer le contenu d une boite qui ne remplit pas sa rangee ne
    deplace rien. La boite s etire d abord, le texte se centre ensuite.   */
.cp-tuile b,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-rep-titre,
.qs-mode .wiz-qual-field .wiz-qual-options .wiz-qual-pill .qs-skip-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options.s1-grid .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.s1-pill-detail)) .wiz-qual-pill .s1-pill-label,
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.s1-pill-detail)) .wiz-qual-pill .qs-rep-titre,
.qs-mode .wiz-qual-field .wiz-qual-options:not(:has(.s1-pill-detail)) .wiz-qual-pill .qs-skip-pill-label,
.cp-grille:not(:has(.cp-tuile span)) .cp-tuile b,
#companium-solar-simulator .pill-grid .pill .cps-pill-text,
#companium-solar-simulator .pill-grid .pill > strong,
#companium-solar-simulator .pill-grid:not(:has(.cps-pill-det)) .pill .cps-pill-text,
#companium-solar-simulator .pill-grid:not(:has(.cps-pill-det)) .pill > strong,
#companium-solar-simulator .cps-presence-choices .cps-presence-copy strong,
#companium-solar-simulator .cps-equipment-category-grid .cps-toggle-label {
  align-items:center; align-self:stretch; }


/* ══════════════════════════════════════════════════════════════════════════
   LE BLOC D ACTION DESCEND, ET LES ETAPES PRENNENT UNE COULEUR — 07/09 (nuit)
   ══════════════════════════════════════════════════════════════════════════
   RELEVE DU 07/09 AU SOIR, a 390 x 700, AVANT :

       haut du titre du bloc d action ......  323,0
       bas de la derniere source ...........  689,6   (marge : 10,4 px)
       haut de « COMMENT CA MARCHE » .......  707,6   (deja hors du 1er ecran)

       le bandeau des sources, piece par piece :
           air en haut ......................  14
           la phrase du drapeau .............  17     (une ligne, 11 px)
           air entre le drapeau et la liste .  10
           les cinq sources .................  2 rangees de 19,4, ecartees de 7
           air sous la derniere source ......  18

   ⚠️ CE QUI EST DEMANDE ET CE QUI TIENT NE SE REJOIGNENT PAS, ET C EST DIT.
   Descendre de 30 px demande 30 - 10,4 = 19,6 px pris ailleurs. Les deux
   leviers autorises rendent 9 px :
       l air entre le drapeau et la liste .... 10 -> 6    -4
       l interligne des sources ..............  7 -> 2    -5
   Le troisieme -- l air SOUS la derniere source -- ne change RIEN a la mesure
   demandee : il vit APRES elle, dans le remplissage bas du bandeau.
   IL MANQUE DONC 15 px, et le rapport dit ou les reprendre. Ce qui est livre
   ici est la descente qui TIENT : 15 px, avec 4,4 px de marge.
   ⚠️ C EST UN REGLAGE : la valeur se change en un seul endroit, sans code.  */

@media (max-width:760px) {
  /*  A.3.1 — l air entre le drapeau et la liste des sources.               */
  .ac-srcs-l { margin-bottom:var(--sd-srcs-phrase-dessous, 6px); }
  /*  A.3.2 — l interligne des sources : c est le seul ecart VERTICAL de la
      liste ; l ecart horizontal, lui, ne change rien a la hauteur.        */
  .ac-srcs-p { row-gap:var(--sd-srcs-liste-ecart, 2px); }
}

/* ══ B — LES PICTOGRAMMES DE « COMMENT CA MARCHE » ═════════════════════════
   Ils etaient tous gris (« --cp-gris »). Une teinte par etape, choisie pour
   le sens du geste qu elle nomme :

       01  « Vous decrivez vos travaux » ........ bleu    #3F7BA8  4,56
       02  « Nous cherchons les bons artisans » . indigo  #5B4FC4  6,25
       03  « Les artisans vous recontactent » ... vert    #3E8C63  4,09
       04  (rang libre, non pose en base) ....... ambre   #B5731A  3,87

   ⚠️ LA COULEUR SUIT LE DESSIN, PAS LE RANG. C est la lecon du 07/09 au
   matin sur les fiches des aides : la page rendait CINQ rubriques la ou j en
   comptais quatre, et les couleurs avaient glisse d un cran. Le dessin de
   chaque etape est choisi par la page (« $pictoEtape ») et il dit de quelle
   etape il s agit.
   ⚠️ QUATRE RANGS SONT PREVUS, TROIS SONT RENDUS : le registre ne porte
   aujourd hui que trois etapes. Le quatrieme reglage attend son texte.     */
.ac-etape svg:has(use[href="#cp-i-loupe"])  { color:var(--sd-etape1-couleur, #3F7BA8); }
.ac-etape svg:has(use[href="#cp-i-form"])   { color:var(--sd-etape2-couleur, #5B4FC4); }
.ac-etape svg:has(use[href="#cp-i-attend"]) { color:var(--sd-etape3-couleur, #3E8C63); }
.ac-etape svg:has(use[href="#cp-i-tel"])    { color:var(--sd-etape4-couleur, #B5731A); }


/* ==========================================================================
   LE SIMULATEUR DEVIENT REGLABLE - 07/09/2026 (nuit)
   ==========================================================================
   ⚠️ CE QUI MANQUAIT, ETABLI LE 07/09 AU MATIN : les tuiles du simulateur
   ne sont ni des familles ni des secteurs, elles n ont AUCUNE ligne en base.
   Rien de ce qui leur est propre n etait reglable.

   ⚠️ ET ON NE REDOUBLE PAS CE QUI EXISTE. Le fond de la tuile choisie, le
   lisere, l air interieur, l arrondi et la taille du pictogramme sont DEJA
   communs a tout le site (tuile_choisie_fond, tuile_liseret, tuile_air,
   tuile_rayon, tuile_picto). Le simulateur les lit comme les deux autres
   ecrans. Un doublon finit toujours par se contredire : c est arrive le
   04/09 sur l ecartement des tuiles, et cela a coute une seance.

   ⚠️ LA HAUTEUR MINI REPREND UN REGLAGE EXISTANT : tuile_simu_hauteur,
   declare SANS LECTEUR le 06/09 quand la hauteur est devenue la somme des
   rangees. Il en retrouve un ici, et c est bien une hauteur MINIMALE -- la
   nuance est exactement ce qui avait fait retirer l ancienne.

   LE RELEVE DU 07/09 AU SOIR, neuf ecrans, avant :
       presence ...... 4 colonnes,  48 px utiles -> 4 mots coupes, 4 descriptions tronquees
       housing ....... 3 colonnes,  92 px utiles -> « professionnel » 95,9 px
       equipements ... 4 colonnes, 110 px utiles -> « thermodynamique » 129,2 px
       toiture ....... 3 colonnes,  81 px utiles -> « mecaniques » 84,6 px
   Un mot se casse quand sa largeur depasse la largeur utile de sa boite :
   « overflow-wrap:anywhere » le coupe alors n importe ou. Ce n est pas un
   jugement a l oeil, c est une comparaison de deux nombres.            */

#companium-solar-simulator .pill-grid[data-group="housing"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="housing"] .pill .cps-goal-picto {
  color:var(--sd-simu-housing-couleur, #A2603C); }
#companium-solar-simulator .pill-grid[data-group="housing"] {
  grid-template-columns:repeat(var(--sd-simu-cols-housing, 2), minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid[data-group="occupants"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="occupants"] .pill .cps-goal-picto {
  color:var(--sd-simu-occupants-couleur, #B0526E); }
#companium-solar-simulator .pill-grid[data-group="occupants"] {
  grid-template-columns:repeat(var(--sd-simu-cols-occupants, 3), minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid[data-group="ownership"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="ownership"] .pill .cps-goal-picto {
  color:var(--sd-simu-ownership-couleur, #3E8C63); }
#companium-solar-simulator .pill-grid[data-group="ownership"] {
  grid-template-columns:repeat(var(--sd-simu-cols-ownership, 3), minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid[data-group="roofType"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="roofType"] .pill .cps-goal-picto {
  color:var(--sd-simu-rooftype-couleur, #A2603C); }
#companium-solar-simulator .pill-grid[data-group="roofType"] {
  grid-template-columns:repeat(var(--sd-simu-cols-rooftype, 3), minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid[data-group="roofPanCount"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="roofPanCount"] .pill .cps-goal-picto {
  color:var(--sd-simu-roofpans-couleur, #A2603C); }
#companium-solar-simulator .pill-grid[data-group="roofPanCount"] {
  grid-template-columns:repeat(var(--sd-simu-cols-roofpans, 3), minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid[data-group="inputMode"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="inputMode"] .pill .cps-goal-picto {
  color:var(--sd-simu-inputmode-couleur, #B5731A); }
#companium-solar-simulator .pill-grid[data-group="inputMode"] {
  grid-template-columns:repeat(var(--sd-simu-cols-inputmode, 3), minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid[data-group="hasFutureProjects"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="hasFutureProjects"] .pill .cps-goal-picto {
  color:var(--sd-simu-futureprojects-couleur, #B5731A); }
#companium-solar-simulator .pill-grid[data-group="hasFutureProjects"] {
  grid-template-columns:repeat(var(--sd-simu-cols-futureprojects, 3), minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid[data-group="sizingGoal"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="sizingGoal"] .pill .cps-goal-picto {
  color:var(--sd-simu-sizinggoal-couleur, #B5731A); }
#companium-solar-simulator .pill-grid[data-group="sizingGoal"] {
  grid-template-columns:repeat(var(--sd-simu-cols-sizinggoal, 3), minmax(0, 1fr)); }
#companium-solar-simulator .pill-grid[data-group="civility"] .pill .cps-choice-picto,
#companium-solar-simulator .pill-grid[data-group="civility"] .pill .cps-goal-picto {
  color:var(--sd-simu-civility-couleur, #6E7075); }
#companium-solar-simulator .pill-grid[data-group="civility"] {
  grid-template-columns:repeat(var(--sd-simu-cols-civility, 3), minmax(0, 1fr)); }

/*  Les blocs de choix qui ne portent PAS de « data-group » : la toiture et
    l orientation. C est chez eux que « mecaniques » se cassait a 81 px. */
#companium-solar-simulator .pill-grid:not([data-group]) {
  grid-template-columns:repeat(var(--sd-simu-cols-autres, 2), minmax(0, 1fr)); }

/*  LA PRESENCE EN JOURNEE : quatre tuiles de 48 px sur une seule rangee.
    « Presence ponctuelle » y devenait « Presen / ce ponct / uelle ».   */
#companium-solar-simulator .cps-presence-choices {
  grid-template-columns:repeat(var(--sd-simu-cols-presence, 2), minmax(0, 1fr)); }
#companium-solar-simulator .cps-presence-choices .cps-presence-led {
  color:var(--sd-simu-presence-couleur, #3F7BA8); }

/*  LES EQUIPEMENTS.                                                    */
#companium-solar-simulator .cps-equipment-category-grid {
  grid-template-columns:repeat(var(--sd-simu-cols-equipements, 3), minmax(0, 1fr)); }
#companium-solar-simulator .cps-equipment-category-grid .cps-picto {
  color:var(--sd-simu-equipements-couleur, #3F7BA8); }

/*  L ECARTEMENT et la HAUTEUR MINI, communs aux blocs du simulateur.   */
#companium-solar-simulator .pill-grid,
#companium-solar-simulator .cps-presence-choices,
#companium-solar-simulator .cps-equipment-category-grid {
  gap:var(--sd-simu-tuile-ecart, 10px); }
#companium-solar-simulator .pill-grid .pill,
#companium-solar-simulator .cps-presence-choices .cps-presence-option,
#companium-solar-simulator .cps-equipment-category-grid .toggle {
  min-height:var(--sd-tuile-simu-hauteur, 92px); }

/*  ⚠️ SUR TELEPHONE, LES MEMES JETONS, UN REPLI PAR APPAREIL.        */
@media (max-width:760px) {
  #companium-solar-simulator .cps-presence-choices {
    grid-template-columns:repeat(var(--sd-simu-cols-presence, 1), minmax(0, 1fr)); }
  #companium-solar-simulator .cps-equipment-category-grid {
    grid-template-columns:repeat(var(--sd-simu-cols-equipements, 2), minmax(0, 1fr)); }
  #companium-solar-simulator .pill-grid .pill,
  #companium-solar-simulator .cps-presence-choices .cps-presence-option,
  #companium-solar-simulator .cps-equipment-category-grid .toggle {
    min-height:var(--sd-tuile-simu-hauteur, 88px); }
}

/*  ⚠️ UN MOT DE 129,2 px DANS UNE BOITE DE 127 — LE DERNIER, ET IL SE DIT.
    Apres le passage a deux colonnes, il restait UN mot coupe sur les neuf
    ecrans : « thermodynamique » sur la tuile d equipement, telephone.
    Il manque 2,2 px, et les trois issues ont ete pesees :
        une colonne au lieu de deux -> dix tuiles empilees, l ecran double ;
        une police plus petite ---> le libelle devient le plus petit du site ;
        moins d air horizontal ---> 24 px de chaque cote pour une grille de
                                    DIX tuiles, c est la plus dense du site.
    C est la troisieme qui est retenue : l air horizontal passe a 16 px sur
    CETTE grille et sur CE seul appareil. La largeur utile passe de 127 a 143.
    ⚠️ L air VERTICAL ne bouge pas : c est lui qui tient le centrage.       */
@media (max-width:760px) {
  #companium-solar-simulator .cps-equipment-category-grid .toggle {
    padding-left:16px; padding-right:16px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   07/09/2026 — L AIR DES SOURCES, LES DEUX BOUTONS, LES QUATRE ETAPES
   ═══════════════════════════════════════════════════════════════════════════
   ⚠️ CETTE COUCHE NE FAIT QUE REPRENDRE DES VALEURS DEJA ECRITES EN DUR PLUS
   HAUT, pour les rendre reglables. Toutes les valeurs de repli sont celles que
   la feuille portait : sans la migration, l ecran rend exactement pareil.
   ⚠️ Elle est ecrite EN FIN DE FICHIER, donc elle gagne a specificite egale.
   On ne desosse pas les couches d avant (CDC 13.1).                        */

/*  ── L AIR AU-DESSUS DU BANDEAU DES SOURCES ─────────────────────────────
    ⚠️ A NE PAS CONFONDRE avec « --sd-srcs-air-haut », qui est le padding DU
    bandeau -- l air entre son bord et le drapeau. Celui-ci est une MARGE
    au-dessus : l air entre la phrase du cadenas et le bandeau.
    Repli 0 sur les deux appareils : c est ce que la feuille faisait, l air
    venant entierement du bas du bloc d action. Un seul repli suffit donc ici
    -- il vaut la meme chose des deux cotes (CDC 22.2).                     */
.ac-srcs { margin-top: var(--sd-srcs-air-dessus, 0px); }

/*  ══ LES DEUX BOUTONS DE L ACCUEIL ══════════════════════════════════════
    ⚠️ LA DISPOSITION TIENT SUR UNE SEULE BASCULE, ET SANS AUCUN JAVASCRIPT.
    « --sd-boutons-empiles » vaut 0 ou 1, et il sert de BASE DE FLEX :

        0  ->  base 0    les deux grandissent a parts egales : COTE A COTE
        1  ->  base 100% chacun prend une ligne entiere : L UN SOUS L AUTRE

    C est la seule facon d ecrire un « si » en CSS sans dupliquer la regle.
    ⚠️ ET LES DEUX GARDENT LE MEME BORD GAUCHE : le second est borne par sa
    largeur maximale, jamais centre. Un « justify-content:center » l aurait
    decale, et Gerard a demande le contraire.                               */
.ac-action .cp-boutons {
  display: flex; flex-wrap: wrap; align-items: stretch;
  justify-content: flex-start;
  gap: var(--sd-boutons-ecart, 11px);
}
.ac-action .cp-boutons > .cp-bp,
.ac-action .cp-boutons > .cp-bs {
  flex: 1 1 calc(var(--sd-boutons-empiles, 0) * 100%);
  min-width: 0;
  aspect-ratio: auto;
  height: auto;
  min-height: var(--sd-boutons-hauteur, 56px);
  border-radius: var(--sd-boutons-rayon, 11px);
}
.ac-action .cp-boutons > .cp-bs {
  /*  ⚠️ LE JETON PORTE DEJA SON UNITE. « --sd-boutons-second-largeur »
      vaut « 85% », pas « 85 » : le multiplier par 1% rendait « calc(85% * 1%) »,
      une declaration invalide, et le second bouton reprenait toute la largeur.
      Mesure avant : rapport 100 %. C est le piege du CDC 12.3, dans l autre
      sens -- la forme SANS unite existe aussi, en « -f », et c est elle qu il
      faut quand on multiplie.                                              */
  max-width: var(--sd-boutons-second-largeur, 100%);
}
.ac-action .cp-boutons .cp-bt-txt b     { font-size: var(--sd-boutons-titre-taille, 16px); }
.ac-action .cp-boutons .cp-bt-txt small { font-size: var(--sd-boutons-soustitre-taille, 11.5px); }

/*  ══ LES QUATRE ETAPES DE « COMMENT CA MARCHE » ═════════════════════════
    Trois moyens de separer, cumulables : un ecart, un trait, un fond.

    ⚠️ LE TRAIT EST LE MEME REGLAGE DES DEUX COTES, MAIS PAS LE MEME BORD.
    Sur ordinateur les etapes sont cote a cote : le trait est a GAUCHE.
    Sur telephone elles sont empilees : il passe AU-DESSUS. Un second reglage
    pour le second bord aurait fait deux valeurs pour une seule idee.

    ⚠️ ET LA BASCULE MULTIPLIE L EPAISSEUR. « calc(0 * 1px) » rend 0px, donc
    aucun trait : pas besoin d une regle de plus pour l eteindre.           */
.ac-etapes { gap: var(--sd-etapes-ecart, 0px); }
.ac-etape {
  border-left: calc(var(--sd-etapes-trait, 1) * var(--sd-etapes-trait-epaisseur, 1px))
               solid var(--sd-etapes-trait-couleur, #E4E2DA);
}
.ac-etape:first-child { border-left: 0; }

/*  ── LE FOND DE CHAQUE ETAPE ────────────────────────────────────────────
    ⚠️ IL EST POSE PAR UN CALQUE, ET SON OPACITE EST LA BASCULE. Une couleur
    ne s eteint pas en CSS ; une opacite, si. Le calque est en position
    absolue : eteint, il ne coute pas un pixel de hauteur -- ce qui compte,
    l accueil mobile etant deja au ras des 700 px.                          */
.ac-etape { position: relative; }
.ac-etape::before {
  content: ''; position: absolute; inset: 0; border-radius: 10px;
  /*  ⚠️ « etapes_fond_visible », PAS « etapes_fond » : une clef qui finit
      par « _fond » est prise pour une couleur, et « 1 » y est refuse -- le
      jeton n etait alors publie nulle part (CDC 19.1).                     */
  opacity: var(--sd-etapes-fond-visible, 0);
  pointer-events: none; z-index: 0;
}
.ac-etape > * { position: relative; z-index: 1; }
.ac-etapes > .ac-etape:nth-child(1)::before { background: var(--sd-etape1-fond, #EDF3F8); }
.ac-etapes > .ac-etape:nth-child(2)::before { background: var(--sd-etape2-fond, #F0EEFA); }
.ac-etapes > .ac-etape:nth-child(3)::before { background: var(--sd-etape3-fond, #EBF4EF); }
.ac-etapes > .ac-etape:nth-child(4)::before { background: var(--sd-etape4-fond, #F8F1E6); }

/*  ── LA COULEUR DU NUMERO ───────────────────────────────────────────────
    Les quatre portaient le meme gris pale, contraste 1,7 sur blanc. Chacune
    prend la teinte de son pictogramme -- toutes mesurees au-dessus de 3.    */
.ac-etapes > .ac-etape:nth-child(1) .ac-n { color: var(--sd-etape1-numero-couleur, #3F7BA8); }
.ac-etapes > .ac-etape:nth-child(2) .ac-n { color: var(--sd-etape2-numero-couleur, #5B4FC4); }
.ac-etapes > .ac-etape:nth-child(3) .ac-n { color: var(--sd-etape3-numero-couleur, #3E8C63); }
.ac-etapes > .ac-etape:nth-child(4) .ac-n { color: var(--sd-etape4-numero-couleur, #B5731A); }

@media (max-width: 760px) {
  /*  ⚠️ UN REPLI SE DONNE PAR APPAREIL (CDC 22.2). Sur telephone la feuille
      ecrivait : ecart 10, arrondi 14, hauteur libre, titre 16, sous-titre
      11.5 -- et les etapes empilees avec 18 px d ecart et AUCUN trait. Ce
      sont ces valeurs-la qui sont ecrites ici, pas celles de l ordinateur. */
  .ac-action .cp-boutons { gap: var(--sd-boutons-ecart, 10px); }
  .ac-action .cp-boutons > .cp-bp,
  .ac-action .cp-boutons > .cp-bs {
    flex: 1 1 calc(var(--sd-boutons-empiles, 1) * 100%);
    min-height: var(--sd-boutons-hauteur, 64px);
    border-radius: var(--sd-boutons-rayon, 14px);
  }
  .ac-action .cp-boutons > .cp-bs {
    max-width: var(--sd-boutons-second-largeur, 85%);
  }
  .ac-action .cp-boutons .cp-bt-txt b     { font-size: var(--sd-boutons-titre-taille, 16px); }
  .ac-action .cp-boutons .cp-bt-txt small { font-size: var(--sd-boutons-soustitre-taille, 11.5px); }

  .ac-etapes { gap: var(--sd-etapes-ecart, 18px); }
  .ac-etape {
    border-left: 0;
    border-top: calc(var(--sd-etapes-trait, 0) * var(--sd-etapes-trait-epaisseur, 1px))
                solid var(--sd-etapes-trait-couleur, #E4E2DA);
  }
  .ac-etape:first-child { border-top: 0; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   07/09/2026 — L ECRAN D ENTREE DU SIMULATEUR : SES HUIT REGLAGES ET SON
   PICTOGRAMME DECORATIF
   ═══════════════════════════════════════════════════════════════════════════
   ⚠️ LES QUATRE REGLAGES DU MATIN NE SONT PAS REDOUBLES : le titre
   (--sd-simu-titre-taille), la hauteur du bouton (--sd-simu-bouton-hauteur),
   l air du bloc (--sd-simu-entree-air) et l ecart des arguments
   (--sd-simu-entree-liste-ecart) restent seuls a faire ce qu ils font.
   Les huit ci-dessous reprennent des valeurs qui etaient ecrites en dur.     */

#companium-solar-simulator .hero .cps-hero-label { font-size: var(--sd-simu-chapeau-taille, 12px); }
#companium-solar-simulator .hero h1 .sim-d24 {
  font-size:   var(--sd-simu-texte-taille, 15px);
  line-height: var(--sd-simu-texte-interligne, 1.55);
}
#companium-solar-simulator .hero h1 { margin-bottom: var(--sd-simu-titre-dessous, 14px); }
#companium-solar-simulator .hero .cps-hero-check { font-size: var(--sd-simu-args-taille, 14px); }
#companium-solar-simulator .hero .cps-hero-start { margin-top: var(--sd-simu-bouton-dessus, 18px); }
#companium-solar-simulator .hero #cps-start-simulation {
  border-radius: var(--sd-simu-bouton-rayon, 10px);
  font-size:     var(--sd-simu-bouton-taille, 15px);
}

/*  ── LE PICTOGRAMME DECORATIF ───────────────────────────────────────────
    ⚠️ LA POSITION EST UN ATTRIBUT, PAS UN JETON. Le serveur ne connait pas
    la largeur de l ecran : il ecrit LES DEUX positions sur la carte --
    « data-picto-ordi » et « data-picto-tel » -- et la requete de media
    choisit laquelle compte. C est le meme principe que le temoin du cadre
    (CDC 16.10), et il ne coute aucun JavaScript.

    ⚠️ ET LA BASCULE PASSE PAR LA TAILLE. On ne peut pas eteindre une image
    avec un nombre ; on peut la reduire a zero. « calc(0 * 190px) » rend 0px,
    et « overflow:hidden » fait le reste : eteint, le dessin ne coute pas un
    pixel de hauteur -- ce qui compte, l ecran d entree devant tenir.        */
#companium-solar-simulator .cps-hero-avec-picto { display: flex; gap: 28px; align-items: center; }
#companium-solar-simulator .cps-hero-texte { min-width: 0; flex: 1 1 auto; }
#companium-solar-simulator .cps-hero-picto {
  flex: none; overflow: hidden; line-height: 0;
  width:  calc(var(--sd-simu-picto-visible, 1) * var(--sd-simu-picto-taille, 190px));
  height: calc(var(--sd-simu-picto-visible, 1) * var(--sd-simu-picto-taille, 190px));
  color:  var(--sd-simu-picto-couleur, #3F7BA8);
}
#companium-solar-simulator .cps-hero-picto svg { width: 100%; height: 100%; display: block; }

#companium-solar-simulator .cps-hero-avec-picto[data-picto-ordi="droite"]  { flex-direction: row; }
#companium-solar-simulator .cps-hero-avec-picto[data-picto-ordi="gauche"]  { flex-direction: row-reverse; }
#companium-solar-simulator .cps-hero-avec-picto[data-picto-ordi="dessus"]  { flex-direction: column-reverse; align-items: flex-start; }
#companium-solar-simulator .cps-hero-avec-picto[data-picto-ordi="dessous"] { flex-direction: column; align-items: flex-start; }

@media (max-width: 760px) {
  /*  ⚠️ UN REPLI SE DONNE PAR APPAREIL (CDC 22.2) : ce sont les valeurs que
      la feuille ecrivait pour le telephone, pas celles de l ordinateur.    */
  #companium-solar-simulator .hero .cps-hero-label { font-size: var(--sd-simu-chapeau-taille, 11.5px); }
  #companium-solar-simulator .hero h1 .sim-d24 {
    font-size:   var(--sd-simu-texte-taille, 14px);
    line-height: var(--sd-simu-texte-interligne, 1.5);
  }
  #companium-solar-simulator .hero h1 { margin-bottom: var(--sd-simu-titre-dessous, 12px); }
  #companium-solar-simulator .hero .cps-hero-check { font-size: var(--sd-simu-args-taille, 13.5px); }
  #companium-solar-simulator .hero .cps-hero-start { margin-top: var(--sd-simu-bouton-dessus, 16px); }
  #companium-solar-simulator .hero #cps-start-simulation {
    border-radius: var(--sd-simu-bouton-rayon, 10px);
    font-size:     var(--sd-simu-bouton-taille, 15px);
  }
  #companium-solar-simulator .cps-hero-avec-picto { gap: 16px; }
  #companium-solar-simulator .cps-hero-picto {
    width:  calc(var(--sd-simu-picto-visible, 1) * var(--sd-simu-picto-taille, 120px));
    height: calc(var(--sd-simu-picto-visible, 1) * var(--sd-simu-picto-taille, 120px));
  }
  /*  ⚠️ SUR TELEPHONE C EST « data-picto-tel » QUI DECIDE, et il gagne parce
      qu il est ecrit ici, apres l autre, a specificite egale.              */
  #companium-solar-simulator .cps-hero-avec-picto[data-picto-tel="droite"]  { flex-direction: row; align-items: center; }
  #companium-solar-simulator .cps-hero-avec-picto[data-picto-tel="gauche"]  { flex-direction: row-reverse; align-items: center; }
  #companium-solar-simulator .cps-hero-avec-picto[data-picto-tel="dessus"]  { flex-direction: column-reverse; align-items: flex-start; }
  #companium-solar-simulator .cps-hero-avec-picto[data-picto-tel="dessous"] { flex-direction: column; align-items: flex-start; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   07/09/2026 — LA BARRE DE MENU FIXE EN BAS, SUR TELEPHONE
   ═══════════════════════════════════════════════════════════════════════════
   ⚠️ ELLE N EXISTE QUE SOUS 760 px. Au-dessus, la regle ne la peint pas du
   tout : sur ordinateur, rien ne change, et c est mesure.

   ⚠️ ET DEUX CONDITIONS, IL FAUT LES DEUX. « .cp-avec-barre-bas » sur le
   <body> dit que Gerard l a allumee ; la requete de media dit qu on est sur
   telephone. Aucune des deux ne suffit seule (meme principe que le cadre,
   CDC 16.10).                                                               */
.cp-barre-bas { display: none; }

@media (max-width: 760px) {
  body.cp-avec-barre-bas .cp-barre-bas {
    display: flex;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
    height: calc(var(--sd-barre-bas-hauteur, 59px) + env(safe-area-inset-bottom, 0px));
    padding-bottom: env(safe-area-inset-bottom, 0px);
    background: var(--sd-barre-bas-fond, #FFFFFF);
    border-top: 1px solid var(--cp-filet, #E4E2DA);
    box-shadow: 0 -2px 10px rgba(20, 23, 26, .07);
  }
  body.cp-avec-barre-bas .cp-bb-lien {
    flex: 1 1 0; min-width: 0;
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 3px; text-decoration: none;
    color: var(--sd-barre-bas-encre, #3A3D40);
  }
  body.cp-avec-barre-bas .cp-bb-lien svg {
    width:  var(--sd-barre-bas-picto-taille, 22px);
    height: var(--sd-barre-bas-picto-taille, 22px);
    flex: none; display: block;
  }
  /*  ⚠️ LE LIBELLE NE SE COUPE PAS, IL SE RETRECIT PAS NON PLUS : il tient ou
      il ne tient pas, et c est la mesure qui tranche (CDC 24.5). « white-space
      :nowrap » avec « overflow:hidden » dit la verite -- un mot coupe se voit,
      un mot qui deborde en silence non.                                     */
  body.cp-avec-barre-bas .cp-bb-lien span {
    font-size: var(--sd-barre-bas-texte-taille, 10.5px);
    line-height: 1.1; font-weight: 600;
    max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  body.cp-avec-barre-bas .cp-bb-on { color: var(--sd-barre-bas-active-couleur, #131C30); }
  body.cp-avec-barre-bas .cp-bb-on span { font-weight: 700; }
  /*  L entree courante porte un trait au-dessus : une couleur seule ne se voit
      pas quand les cinq entrees sont deja sombres.                          */
  body.cp-avec-barre-bas .cp-bb-on::before {
    content: ''; position: absolute; top: 0; width: 44px; height: 3px;
    border-radius: 0 0 3px 3px;
    background: var(--sd-barre-bas-active-couleur, #131C30);
  }
  body.cp-avec-barre-bas .cp-bb-lien { position: relative; }

  /*  ⚠️ LA PLACE EST RESERVEE EN BAS DE CHAQUE PAGE, ET C EST LA SEULE
      CORRECTION DE HAUTEUR DE CE CHANTIER. Sans elle, la barre recouvrirait
      le bouton « Continuer » du parcours et du simulateur, qui vit en bas de
      page. Une barre fixe qui cache un bouton, c est un bouton qu on
      n atteint plus (CDC 9.18).                                            */
  body.cp-avec-barre-bas {
    padding-bottom: calc(var(--sd-barre-bas-hauteur, 59px) + env(safe-area-inset-bottom, 0px));
  }

  /*  ⚠️ ET LE BOUTON A TROIS TRAITS DISPARAIT — mais SEULEMENT quand la barre
      est la. Le masquer sans condition rendrait le menu inatteignable sur
      telephone le jour ou Gerard eteindrait la barre : c est exactement le
      defaut du 04/09 (CDC 17.7), retrouve par une autre porte.             */
  body.cp-avec-barre-bas .ac-menu { display: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   07/09/2026 — ON ARRIVE AU DEBUT DE LA SECTION, ET « ESPACE PARTENAIRE »
   PASSE A DROITE
   ═══════════════════════════════════════════════════════════════════════════

   ⚠️ CE QUI CLOUAIT L ARRIVEE : app.css:366 écrivait « scroll-margin-top:70px »
   sur .ac-sec, une seule valeur pour les deux appareils. Le titre d une section
   arrive donc a :

        scroll-margin-top  +  l air interieur de la section

   Verifie au pixel : ordinateur 70 + 54 = 124 (mesure 124,3), telephone
   70 + 30 = 100 (mesure 99,6). Le modele est exact, et il explique tout : on
   arrivait 124 px trop bas, donc on voyait encore la fin de la section d avant.

   ⚠️ ET LE BANDEAU N EST FIXE QUE SUR ORDINATEUR : « position:sticky » a la
   ligne 339, remis a « relative » sous 760 px (ligne 5147). Le decalage n a
   donc pas la meme raison d etre des deux cotes -- une seule valeur ne pouvait
   pas convenir aux deux.                                                      */

.ac-sec { scroll-margin-top: var(--sd-ancre-arrivee, 18px); }

@media (max-width: 760px) {
  /*  Le bandeau n est pas fixe ici : rien a degager au-dessus. L air interieur
      de la section (30 px) suffit a ne pas coller le titre au bord.          */
  .ac-sec { scroll-margin-top: var(--sd-ancre-arrivee, 0px); }

  /*  ── « ESPACE PARTENAIRE » PREND LA PLACE DU BOUTON A TROIS TRAITS ──────
      Le 06/09, l ordre du bandeau avait ete pose par « order » et mesure
      (CDC 18.6) : logo a gauche, « Espace partenaire » au milieu, bouton a
      trois traits a droite. Le bouton est descendu dans la barre du bas, et
      le milieu est devenu un vide a droite.

      ⚠️ SEULEMENT QUAND LA BARRE EST LA. Sans le temoin, eteindre la barre
      ferait revenir le bouton a trois traits SANS lui rendre sa place, et
      les deux se chevaucheraient a droite.                                  */
  body.cp-avec-barre-bas .ac-top .ac-bhaut {
    order: 3;
    margin-left: auto;
    margin-right: 0;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   07/09/2026 (13 h) — LES TROIS TEXTES DE LA PHOTO, SUR ORDINATEUR AUSSI
   ═══════════════════════════════════════════════════════════════════════════
   ⚠️ POURQUOI LES TROIS REGLAGES NE FAISAIENT RIEN. Tout le placement des
   textes sur la photo -- « position:absolute » et « top: var(--sd-hero-*-y) »
   -- vivait DANS « @media (max-width:760px) ». Au-dessus de 760 px, aucune
   regle ne lisait ces jetons : ils etaient publies, corrects, et personne ne
   les lisait. C est la cause (b), et c est la cinquieme piste que Gerard
   soupconnait -- le bloc n existait que pour le telephone.

   ⚠️ ET J AI RAPPORTE CES TROIS REGLAGES « FAITS » LE 07/09 A MIDI SANS LES
   AVOIR MESURES SUR ORDINATEUR. C est exactement ce que le §19.1 interdit :
   « fait » sans chiffre n est pas une reponse.

   Le meme mecanisme est donc pose au-dessus de 760 px, avec SES PROPRES
   replis -- un repli se donne par appareil (§22.2).                          */
@media (min-width: 761px) {
  .ac-hero-in { position: absolute; inset: 0; padding: 0; min-height: 0; display: block; }
  .ac-hero-in > * { max-width: none; }

  /*  Tous alignes sur le MEME bord gauche, a la gouttiere -- comme sur
      telephone. Le bord droit reste libre : un titre de 50 px ne doit pas
      etre borne par la gouttiere de droite sur un grand ecran.             */
  .ac-hero .ac-pastille,
  .ac-hero h1,
  .ac-hero .ac-hero-ver {
    position: absolute; left: var(--ac-gouttiere); right: auto; margin: 0;
    max-width: calc(100% - 2 * var(--ac-gouttiere));
  }
  .ac-hero .ac-pastille  { top: var(--sd-hero-surtitre-y, 12%); }
  .ac-hero h1            { top: var(--sd-hero-titre-y, 34%); }

  /*  ⚠️ LA COCHE EST JAUNE, SANS PASTILLE ET SANS FOND : c est un trait sur
      la photo. Fond sombre, donc le jaune y est lisible (§14.4) -- sur clair
      il ne le serait pas.                                                  */
  .ac-hero .ac-hero-ver {
    top: var(--sd-hero-mention-y, 84%);
    display: flex; align-items: center; gap: 9px;
    font-size: 15px; font-weight: 700; color: #fff;
    text-shadow: 0 1px 8px rgba(0,0,0,.7);
  }
  .ac-hero .ac-hero-ver svg {
    width: 18px; height: 18px; flex: none;
    stroke: var(--cp-jaune); stroke-width: 3; fill: none;
  }
}

/*  ── LE RELAIS QUI NE MENAIT NULLE PART ─────────────────────────────────
    ⚠️ « --air-titre » etait DEFINI UNE FOIS ET LU ZERO FOIS. Le jeton
    « --sd-air-titre-ecran » etait publie, correct, relaye dans « --air-titre »
    ... et la chaine s arretait la. « Air sous le titre d un ecran » ne
    pilotait donc rien, et la valeur qu il devait porter etait ecrite en dur
    ici meme : « margin:0 auto 24px ».
    Le releve : 1 definition, 0 lecture -- le seul relais mort de la feuille. */
.qs-mode .wiz-qual-help, .qs-aide { margin-bottom: var(--air-titre, 24px); }

/*  ── DEUX AUTRES RELAIS QUI NE MENAIENT NULLE PART ──────────────────────
    ⚠️ « --s1-lignes-famille » et « --s1-lignes-sous » sont LUS QUATRE FOIS
    dans la feuille (lignes 2109, 2111, 2514, 2517) et DEFINIS ZERO FOIS. Le
    repli de var() s appliquait donc toujours : « Lignes reservees au titre »
    ne reservait rien, quelle que soit la valeur posee en base.
    Le releve : defini 0, lu 4. C est le meme defaut que « --air-titre », dans
    l autre sens -- la, on definissait sans lire ; ici on lit sans definir.  */
:root {
  --s1-lignes-famille: var(--sd-tuile-lignes-famille, 3);
  --s1-lignes-sous:    var(--sd-tuile-lignes-sous, 4);
}
