/* =========================================================================
   NEOS Consulting — Feuille de styles principale
   -------------------------------------------------------------------------
   Site vitrine statique. Thème sombre par défaut + bascule clair.

   COMMENT LIRE CE FICHIER
   - Toutes les COULEURS passent par des « variables CSS » (ex. var(--red)) :
     on ne code jamais une couleur en dur. Pour changer une couleur partout,
     il suffit de modifier sa variable dans la section 1.
   - Le fichier est découpé en SECTIONS numérotées (voir le sommaire). Pour
     retrouver une partie, cherchez par ex. « === 3. NAVIGATION === » (Ctrl+F).
   - Chaque bloc « sélecteur { propriété:valeur } » cible un élément de la page
     (le sélecteur, ex. .nav-cta) et lui applique une mise en forme.

   RAPPELS RAPIDES DE SYNTAXE
   - var(--x)            : réutilise la variable --x définie plus haut.
   - rgba(r,v,b,a)       : couleur rouge/vert/bleu + transparence a (0 à 1).
   - clamp(min,idéal,max): valeur « élastique » bornée (sert au responsive).
   - :hover              : état au survol de la souris.
   - ::before / ::after  : petit élément décoratif ajouté par le CSS.
   - transition          : anime en douceur le passage d'un état à l'autre.

   SOMMAIRE
     1.  Tokens de couleur & thèmes
     2.  Base & utilitaires d'accessibilité
     3.  Navigation
     4.  Hero
     5.  Sections génériques
     6.  À propos
     7.  Proposition de valeur
     8.  Expertises
     9.  Contact
     10. Pied de page
     11. Modale
     12. Responsive
     13. Mouvement réduit (accessibilité)
     14. Pages légales
     15. Bandeau de consentement aux cookies (optionnel)
     16. Formulaire de contact (interactif)
   ========================================================================= */

/* === 1. TOKENS DE COULEUR & THÈMES === */

/* Réinitialisation : on enlève les marges/espacements par défaut du navigateur
   et on inclut bordure + padding dans la largeur des éléments (box-sizing),
   pour des dimensions prévisibles. Le « * » vise TOUS les éléments. */
*{margin:0;padding:0;box-sizing:border-box}

/* Couleurs de la charte NEOS, identiques quel que soit le thème.
   « : root » = la racine du document : ces variables sont disponibles partout. */
:root{
  --red:#C32C2C;            /* rouge — accent principal (boutons, liens, chiffres) */
  --red-rgb:195,44,44;      /* le rouge en canaux R,V,B : permet rgba(var(--red-rgb),.1) pour des rouges transparents */
  --red-light:#D94F4F;      /* rouge plus clair, utilisé au survol des boutons */
  --blue:#44546A;           /* bleu-ardoise — couleur secondaire (sous-titres, taglines) */
  --blue-light:#5A6E88;     /* bleu clair de la charte (token conservé pour usage futur) */
  --green:#00CF96;          /* vert charte — message de succès du formulaire de contact */
  --white:#FFFFFF;          /* blanc — texte posé sur un fond de couleur (ex. bouton rouge) */
  --toggle-off:#AAAAAA;     /* gris de la pastille de la bascule de thème (position « clair ») */
  --overlay:rgba(0,0,0,.7); /* voile noir semi-transparent affiché derrière la modale */
}

/* Les variables qui CHANGENT selon le thème sont regroupées ici.
   Le thème actif est piloté par l'attribut data-theme sur la balise <html>
   (data-theme="dark" par défaut ; la bascule passe à "light"). Changer ce seul
   attribut suffit à recolorer toute la page, car tout pointe vers ces variables.
   --logo-word / --logo-sub = couleurs du logo (wordmark / sous-titre). */
[data-theme="dark"]{--bg:#0A0A0F;--bg2:#111118;--bg3:#16161F;--text:#F0EEE8;--text-muted:#8A8A9A;--border:rgba(var(--red-rgb),0.2);--border2:rgba(255,255,255,0.06);--nav-bg:rgba(10,10,15,0.85);--input-bg:#16161F;--modal-bg:#0D0D14;--logo-word:#F0EEE8;--logo-sub:#A8BEC9;color-scheme:dark}
/* Mêmes variables, valeurs adaptées au fond clair (bons contrastes en thème clair). */
[data-theme="light"]{--bg:#F7F6F3;--bg2:#FFFFFF;--bg3:#EFF0F2;--text:#1A1A24;--text-muted:#6B7280;--border:rgba(var(--red-rgb),0.25);--border2:rgba(0,0,0,0.08);--nav-bg:rgba(247,246,243,0.92);--input-bg:#F0F1F3;--modal-bg:#F4F4F8;--logo-word:#44546A;--logo-sub:#44546A;color-scheme:light}

/* Police de marque Montserrat : @font-face déclare une police perso.
   Elle est AUTO-HÉBERGÉE (fichier dans assets/fonts/) : aucun appel à Google
   Fonts à l'exécution, ce qui respecte la vie privée des visiteurs (RGPD).
   - font-weight:400 700 : une seule police « variable » couvre les graisses 400 à 700.
   - font-display:swap   : affiche d'abord une police système puis bascule sur
     Montserrat dès qu'elle est chargée (le texte reste visible immédiatement). */
@font-face{
  font-family:'Montserrat';
  font-style:normal;
  font-weight:400 700;
  font-display:swap;
  src:url('../assets/fonts/montserrat-latin.woff2') format('woff2');
}

/* === 2. BASE & UTILITAIRES D'ACCESSIBILITÉ === */

/* Comportement global de défilement de la page :
   - scroll-behavior:smooth  : les clics sur les ancres (#section) défilent en douceur.
   - scroll-padding-top:68px : réserve la hauteur de la barre fixe (68px) pour que
     la section visée ne se retrouve pas cachée DERRIÈRE la navigation. */
html{scroll-behavior:smooth;scroll-padding-top:68px}

/* Réglages de base de la page : couleurs (via variables), pile de polices système
   pour le texte courant, et transition douce des couleurs lors du changement de thème.
   overflow-x:hidden empêche toute barre de défilement horizontale accidentelle. */
body{background:var(--bg);color:var(--text);font-family:'Segoe UI',system-ui,sans-serif;overflow-x:hidden;transition:background .3s,color .3s}

/* Ces conteneurs reçoivent parfois le focus par programme (lien d'évitement,
   retour depuis la modale) : on masque le contour pour éviter un encadré disgracieux. */
#main-content:focus,#contact:focus{outline:none}

/* Anneau de focus visible au CLAVIER seulement (:focus-visible). La navigation à
   la souris n'affiche donc pas ce contour : aucun changement visuel pour la souris,
   mais un repère clair pour qui navigue au clavier (accessibilité). */
:focus-visible{outline:2px solid var(--red);outline-offset:2px}

/* Lien « Aller au contenu » : caché très loin hors de l'écran (left:-9999px), il
   réapparaît dès qu'il reçoit le focus (:focus) — premier arrêt utile au clavier. */
.skip-link{position:absolute;left:-9999px;top:0;z-index:300;padding:10px 16px;background:var(--red);color:var(--white);font-size:13px;letter-spacing:.04em;text-decoration:none}
.skip-link:focus{left:8px;top:8px}

/* === 3. NAVIGATION === */

/* Barre de navigation FIXE en haut de l'écran (position:fixed reste visible au
   défilement). z-index:100 la place au-dessus du contenu ; backdrop-filter:blur
   floute ce qui passe derrière ; background semi-transparent (var(--nav-bg)).
   display:flex aligne logo / menu / actions sur une ligne, espacés (space-between). */
header nav{position:fixed;top:0;left:0;right:0;z-index:100;padding:0 5%;display:flex;align-items:center;justify-content:space-between;height:68px;border-bottom:1px solid var(--border2);backdrop-filter:blur(16px);background:var(--nav-bg);transition:background .3s}
.nav-logo{display:inline-flex;align-items:center;text-decoration:none}        /* logo = lien vers l'accueil */
.nav-right{display:flex;align-items:center;gap:1.5rem}                         /* groupe bascule + bouton « contact » */

/* Logo NEOS : c'est un SVG inséré directement dans le HTML (« inline »), ce qui
   permet de colorer ses parties via le thème. Les classes lw/ls/ld/ld-line ciblent
   chacune une partie du dessin et lui appliquent une couleur (variable de thème). */
.brand-logo{display:block;width:auto}
.brand-logo text{font-family:'Montserrat','Segoe UI',system-ui,sans-serif}      /* police du logo (Montserrat, repli système) */
.brand-logo .lw{fill:var(--logo-word)}      /* « lw » = wordmark : le mot NEOS */
.brand-logo .ls{fill:var(--logo-sub)}       /* « ls » = sous-titre : le mot CONSULTING */
.brand-logo .ld{fill:var(--red)}            /* « ld » = dot : le point rouge */
.brand-logo .ld-line{stroke:var(--red)}     /* le filet (trait) rouge sous le logo */
.brand-logo--full{height:38px}              /* logo complet : barre de navigation ET pied de page (identiques) */

/* Liens du menu : petits, en gris discret (--text-muted), qui rougissent au survol. */
.nav-links{display:flex;gap:2rem;list-style:none}
.nav-links a{font-size:13px;color:var(--text-muted);text-decoration:none;letter-spacing:.04em;transition:color .2s}
.nav-links a:hover{color:var(--red)}

/* Bouton « Nous contacter » : contour rouge qui se remplit en rouge au survol. */
.nav-cta{font-size:13px;padding:8px 20px;border:1px solid var(--red);color:var(--red);background:transparent;cursor:pointer;letter-spacing:.06em;text-decoration:none;transition:all .2s}
.nav-cta:hover{background:var(--red);color:var(--white)}

/* Bascule de thème (l'interrupteur sombre/clair). C'est un vrai <button> ; on
   neutralise donc le style natif des boutons (fond, bordure, police) pour qu'il
   ressemble exactement à l'interrupteur dessiné. Le curseur « main » se transmet
   aux <span> internes (le libellé et la piste). */
.theme-toggle{display:flex;align-items:center;gap:8px;cursor:pointer;background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;-webkit-appearance:none;appearance:none}
.toggle-label{font-size:12px;color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;user-select:none}  /* le mot « Dark »/« Light » */
.toggle-track{display:block;width:40px;height:22px;border-radius:11px;background:var(--border2);border:1px solid var(--border2);position:relative;transition:background .3s}  /* la « piste » arrondie */
[data-theme="dark"] .toggle-track{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.28)}  /* piste neutre en thème sombre (pas de rouge) */
.toggle-thumb{position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--toggle-off);transition:transform .3s,background .3s}  /* la pastille ronde */
[data-theme="dark"] .toggle-thumb{transform:translateX(18px);background:var(--text)}  /* en sombre : pastille claire neutre, glissée à droite */

/* === 4. HERO === */

/* Section d'accueil plein écran (min-height:100vh = au moins la hauteur de l'écran),
   contenu centré verticalement (flex + justify-content:center). position:relative
   sert de repère aux décors en position:absolute ci-dessous ; overflow:hidden évite
   que le décor lumineux ne déborde. */
#hero{min-height:100vh;display:flex;flex-direction:column;justify-content:center;padding:90px 5% 24px;position:relative;overflow:hidden}
.hero-content{position:relative;z-index:1}  /* le texte passe AU-DESSUS des décors (z-index:1) */

/* Halo lumineux rouge en fond (dégradé radial), un peu plus marqué en thème sombre
   (.06) qu'en thème clair (.04). « inset:0 » colle le décor aux 4 bords de la section. */
[data-theme="dark"] .hero-bg{position:absolute;inset:0;background:radial-gradient(ellipse 80% 60% at 60% 40%,rgba(var(--red-rgb),.06) 0%,transparent 70%)}
[data-theme="light"] .hero-bg{position:absolute;inset:0;background:radial-gradient(ellipse 80% 60% at 60% 40%,rgba(var(--red-rgb),.04) 0%,transparent 70%)}
.hero-line{position:absolute;top:0;left:5%;width:1px;height:100%;background:linear-gradient(to bottom,transparent,var(--red),transparent);opacity:.25}  /* fin trait vertical rouge décoratif */

/* Filigrane : grand logotype NEOS (mot NEOS + point rouge) en fond du hero, purement
   décoratif. Ancré à droite et centré verticalement — dans la zone vide à droite du texte
   (titre, accroche et boutons sont alignés à gauche), placé dans la moitié droite à hauteur
   du titre (tout débordement éventuel est rogné par #hero overflow:hidden). Couleurs issues
   des classes .brand-logo (.lw -> var(--logo-word), .ld -> var(--red)) : il suit donc le thème
   automatiquement, sans aucune couleur en dur. Reste SOUS le contenu (.hero-content a
   z-index:1), ne capte pas la souris, hors tabulation. */
.hero-watermark{position:absolute;top:50%;right:6%;transform:translateY(-50%);width:min(52%,620px);height:auto;z-index:0;pointer-events:none;user-select:none;opacity:.06;transition:opacity .3s}  /* opacité par défaut = thème sombre */
.hero-watermark .ld{opacity:.85}  /* le point rouge garde un peu plus de présence (multiplié par l'opacité du conteneur) */
[data-theme="light"] .hero-watermark{opacity:.07}  /* fond clair + logo ardoise (#44546A) : un cran plus marqué pour rester perceptible */

/* Titre principal. font-size:clamp(min, idéal, max) = taille ÉLASTIQUE : jamais
   plus petite que 2.4rem, jamais plus grande que 4rem, et entre les deux elle suit
   5% de la largeur de l'écran (5vw) — c'est ce qui rend le titre responsive sans
   media query. <em> à l'intérieur du titre s'affiche en rouge, sans italique. */
h1{font-size:clamp(2.4rem,5vw,4rem);font-weight:700;line-height:1.12;max-width:700px;letter-spacing:-.01em;color:var(--text)}
h1 em{font-style:normal;color:var(--red)}
.hero-sub{margin-top:1.5rem;font-size:1.05rem;color:var(--text-muted);max-width:480px;line-height:1.7}  /* paragraphe d'accroche */
.hero-btns{margin-top:2.5rem;display:flex;gap:1rem;flex-wrap:wrap}  /* les 2 boutons (passent à la ligne si besoin) */

/* Bandeau de statistiques (6 / 360° / 100%), séparé du reste par un filet en haut. */
.hero-stats{margin-top:5rem;display:flex;gap:3rem;flex-wrap:wrap;padding-top:3rem;border-top:1px solid var(--border2)}
.stat-val{font-size:2.2rem;font-weight:700;color:var(--red);line-height:1}  /* le grand chiffre rouge */
.stat-lbl{font-size:13px;color:var(--text-muted);margin-top:6px;letter-spacing:.04em}  /* le libellé sous le chiffre */

/* Boutons rouges pleins — base commune FACTORISÉE (mutualisée) :
   on regroupe ici les propriétés identiques aux 3 boutons rouges du site —
   .btn-primary (hero), .form-btn (contact), .modal-cta-btn (modale) — pour éviter
   de répéter le même code. Chaque bouton ne redéfinit ensuite QUE ses différences
   (espacements, display…). Le :hover commun éclaircit le rouge. */
.btn-primary,.form-btn,.modal-cta-btn{background:var(--red);color:var(--white);font-weight:600;font-size:14px;border:none;cursor:pointer}
.btn-primary:hover,.form-btn:hover,.modal-cta-btn:hover{background:var(--red-light)}
.btn-primary{padding:14px 32px;letter-spacing:.06em;display:inline-block;text-decoration:none;transition:all .2s}  /* spécificités du bouton principal du hero */

/* Bouton secondaire : juste un contour, qui devient rouge au survol. */
.btn-sec{padding:14px 32px;border:1px solid var(--border2);color:var(--text);font-size:14px;letter-spacing:.06em;display:inline-block;text-decoration:none;transition:all .2s;cursor:pointer}
.btn-sec:hover{border-color:var(--red);color:var(--red)}

/* === 5. SECTIONS GÉNÉRIQUES === */

/* Espacement vertical commun à toutes les <section> (100px haut/bas, 5% sur les côtés). */
section{padding:100px 5%;transition:background .3s}
h2{font-size:clamp(1.8rem,3vw,2.6rem);font-weight:700;line-height:1.2;letter-spacing:-.01em;color:var(--text)}  /* titres de section (élastiques) */
h2 em{font-style:normal;color:var(--red)}  /* mot mis en avant, en rouge */
.s-sub{font-size:1rem;color:var(--text-muted);max-width:520px;line-height:1.7;margin-top:1rem}  /* sous-titre de section */

/* Sur-titres / « taglines » bleus — base commune FACTORISÉE :
   le petit texte bleu en MAJUSCULES espacées qui coiffe les sections et les cartes
   (.hero-tag, .s-tag, .exp-tagline, .modal-tagline, .modal-section-title) partage
   couleur + majuscules + graisse. Chacun ne précise ensuite que taille/marge/espacement. */
.hero-tag,.s-tag,.exp-tagline,.modal-tagline,.modal-section-title{color:var(--blue);text-transform:uppercase;font-weight:600}
.hero-tag{font-size:12px;letter-spacing:.2em;margin-bottom:1.5rem}
.s-tag{font-size:18px;letter-spacing:.2em;margin-bottom:1rem}

/* === 6. À PROPOS === */
#about{background:var(--bg2)}  /* fond légèrement différent pour distinguer la section */

/* Mise en page en 2 colonnes (texte | encarts) via CSS Grid. « 1fr 1fr » = deux
   colonnes de largeur égale ; gap:6rem = l'espace entre elles. (Repasse en 1 colonne
   sur petit écran — voir section 12 Responsive.) */
.about-grid{display:grid;grid-template-columns:1fr 1fr;gap:6rem;align-items:center;margin-top:4rem}
.about-copy p{color:var(--text-muted);line-height:1.8;font-size:.98rem;margin-bottom:1.2rem}  /* paragraphes de gauche */
.about-more{margin-top:1.5rem}  /* le lien « En savoir plus » sous les paragraphes */

/* Colonne de droite : 3 encarts empilés (flex en colonne). */
.about-pills{display:flex;flex-direction:column;gap:1.5rem}
.pill{padding:1.5rem;border:1px solid var(--border2);background:var(--bg3);position:relative;overflow:hidden;transition:border-color .3s}  /* un encart */
.pill::before{content:'';position:absolute;top:0;left:0;width:3px;height:0;background:var(--red);transition:height .4s}  /* bande rouge qui grandit au survol (comme les cartes « Notre valeur ») */
.pill:hover{border-color:var(--border)}
.pill:hover::before{height:100%}
.pill-icon{width:32px;height:32px;background:rgba(var(--red-rgb),.1);border:1px solid rgba(var(--red-rgb),.3);display:flex;align-items:center;justify-content:center;margin-bottom:.75rem;font-size:14px;color:var(--red)}  /* la pastille d'icône (◈) */
.pill-title{font-size:.95rem;font-weight:600;margin-bottom:.4rem;color:var(--text)}
.pill-desc{font-size:.88rem;color:var(--text-muted);line-height:1.6}

/* === 7. PROPOSITION DE VALEUR === */
#valeur{background:var(--bg3)}

/* Grille de 4 cartes de largeur égale (repeat(4,1fr) = 1fr répété 4 fois). */
.val-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1.5rem;margin-top:4rem}
.val-card{padding:2rem 1.5rem;border:1px solid var(--border2);background:var(--bg2);position:relative;overflow:hidden;transition:border-color .3s}

/* Petit trait rouge qui « grandit » à gauche de la carte au survol. C'est un élément
   décoratif créé par le CSS (::before) : il part d'une hauteur 0 (height:0) et passe
   à 100% au survol de la carte (.val-card:hover::before), animé par transition. */
.val-card::before{content:'';position:absolute;top:0;left:0;width:3px;height:0;background:var(--red);transition:height .4s}
.val-card:hover{border-color:var(--border)}
.val-card:hover::before{height:100%}
.val-num{font-size:2.5rem;font-weight:700;color:rgba(var(--red-rgb),.5);line-height:1;margin-bottom:1rem}  /* gros numéro 01..04, rouge translucide bien visible */
.val-title{font-size:1rem;font-weight:600;margin-bottom:.75rem;color:var(--blue)}
.val-desc{font-size:.88rem;color:var(--text-muted);line-height:1.7}

/* === 8. EXPERTISES === */
#expertises{background:var(--bg2)}

/* Astuce visuelle : la grille a un fond (--border2) et un gap d'1px. Les cartes
   posées par-dessus laissent voir ce fond UNIQUEMENT dans les interstices d'1px :
   cela dessine de fines lignes de séparation entre les cartes, sans bordures. */
.exp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--border2);margin-top:4rem}
.exp-card{background:var(--bg2);padding:2.5rem 2rem;transition:background .25s;cursor:pointer;position:relative;overflow:hidden}

/* Mention « Découvrir → » générée par le CSS (::after), invisible par défaut
   (opacity:0) et légèrement décalée ; elle apparaît et se remet en place au survol. */
.exp-card::after{content:'Découvrir →';position:absolute;bottom:1.5rem;right:1.5rem;font-size:12px;letter-spacing:.08em;color:var(--red);opacity:0;transition:opacity .3s,transform .3s;transform:translateX(-6px)}
.exp-card:hover{background:var(--bg3)}
.exp-card:hover::after{opacity:1;transform:translateX(0)}
.exp-icon{width:44px;height:44px;border:1px solid var(--red);display:flex;align-items:center;justify-content:center;margin-bottom:1.25rem;font-size:1.1rem;color:var(--red);transition:background .2s}  /* carré d'icône (◉) */
.exp-card:hover .exp-icon{background:rgba(var(--red-rgb),.08)}  /* léger fond rouge sur l'icône au survol de la carte */
.exp-title{font-size:1.05rem;font-weight:600;margin-bottom:.5rem;color:var(--text)}
.exp-tagline{font-size:.82rem;letter-spacing:.06em;margin-bottom:.75rem}  /* (couleur/majuscules héritées de la base factorisée, section 5) */
.exp-desc{font-size:.88rem;color:var(--text-muted);line-height:1.7}

/* === 9. CONTACT === */
#contact{background:var(--bg)}
#contact .s-tag,#contact h2{text-align:center}                       /* sur-titre et titre centrés dans cette section */
#contact .s-sub{text-align:center;margin-left:auto;margin-right:auto} /* sous-titre centré (marges auto = bloc centré) */

/* Carte du formulaire : centrée (margin auto) et de largeur maximale 680px. */
.contact-inner{max-width:680px;margin:4rem auto 0;padding:3rem;border:1px solid var(--border);background:var(--bg2)}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem}  /* une ligne = 2 champs côte à côte */
.form-row.full{grid-template-columns:1fr}                                         /* variante « pleine largeur » : 1 champ */
input,textarea{width:100%;padding:12px 16px;background:var(--input-bg);border:1px solid var(--border2);color:var(--text);font-size:14px;font-family:inherit;outline:none;transition:border-color .2s}
input:focus,textarea:focus{border-color:var(--red)}                  /* bordure rouge quand le champ est actif */
input::placeholder,textarea::placeholder{color:var(--text-muted)}    /* couleur du texte indicatif (placeholder) */
textarea{height:120px;resize:none}                                   /* zone de message à hauteur fixe, non redimensionnable */
.form-btn{width:100%;margin-top:1rem;padding:15px;letter-spacing:.1em;text-transform:uppercase;transition:background .2s}  /* (couleurs héritées de la base factorisée, section 4) */

/* === 10. PIED DE PAGE === */

/* Pied de page : logo / copyright / liens, répartis sur une ligne (space-between).
   flex-wrap + gap : les éléments passent proprement à la ligne sur petit écran. */
footer{padding:2rem 5%;border-top:1px solid var(--border2);display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;align-items:center;font-size:13px;color:var(--text-muted);background:var(--bg)}
.footer-logo{display:inline-flex;align-items:center;text-decoration:none}  /* logo complet = lien vers l'accueil */
.footer-links{display:flex;flex-wrap:wrap;gap:1.5rem}                        /* groupe des liens légaux */
footer a{color:var(--text-muted);text-decoration:none}
footer a:hover{color:var(--red)}

/* === 11. MODALE === */

/* La modale est un panneau qui glisse depuis la droite quand on clique une carte
   d'expertise. Elle est composée de 2 parties :
   - .modal-overlay : le VOILE plein écran derrière (fixed, couvre tout via inset:0).
     Fermé, il est transparent et « traversable » (pointer-events:none) ; ouvert
     (classe .open ajoutée par le JavaScript), il s'assombrit et capte les clics. */
.modal-overlay{position:fixed;inset:0;z-index:200;background:transparent;display:flex;align-items:stretch;pointer-events:none;transition:background .4s}
.modal-overlay.open{background:var(--overlay);pointer-events:all}

/* - .modal-panel : le PANNEAU de contenu. Au repos il est poussé hors écran à droite
     (translateX(100%)) ; à l'ouverture il revient à sa place (translateX(0)). La
     transition + la courbe cubic-bezier donnent l'effet de glissement fluide. */
.modal-panel{position:fixed;top:0;right:0;bottom:0;width:min(680px,100%);background:var(--modal-bg);transform:translateX(100%);transition:transform .45s cubic-bezier(.22,1,.36,1);overflow-y:auto;display:flex;flex-direction:column}
.modal-overlay.open .modal-panel{transform:translateX(0)}

/* En-tête de la modale : reste collé en haut au défilement (position:sticky). */
.modal-header{padding:2.5rem 2.5rem 0;display:flex;justify-content:space-between;align-items:flex-start;border-bottom:1px solid var(--border2);padding-bottom:2rem;position:sticky;top:0;background:var(--modal-bg);z-index:1}
.modal-close{width:36px;height:36px;border:1px solid var(--border2);background:transparent;color:var(--text-muted);font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}  /* bouton croix (✕) */
.modal-close:hover{border-color:var(--red);color:var(--red)}
.modal-title{font-size:2rem;font-weight:700;color:var(--text);line-height:1.15}
.modal-title em{font-style:normal;color:var(--red)}
.modal-body{padding:2.5rem;flex:1;display:flex;flex-direction:column;gap:2.5rem}  /* corps : blocs empilés avec espace régulier (gap) */
.modal-intro{font-size:1rem;color:var(--text-muted);line-height:1.8}
.modal-tagline{font-size:11px;letter-spacing:.2em;margin-bottom:.75rem}        /* (base bleue factorisée, section 5) */
.modal-section-title{font-size:11px;letter-spacing:.18em;margin-bottom:1.25rem} /* (base bleue factorisée, section 5) */

/* Liste des missions : chaque ligne a une puce ronde rouge (.mission-dot). */
.modal-missions{display:flex;flex-direction:column;gap:.75rem}
.mission-item{display:flex;align-items:flex-start;gap:1rem;padding:1rem 1.25rem;border:1px solid var(--border2);background:var(--bg3);transition:border-color .2s}
.mission-item:hover{border-color:rgba(var(--red-rgb),.3)}
.mission-dot{width:6px;height:6px;background:var(--red);border-radius:50%;margin-top:7px;flex-shrink:0}  /* la puce ronde (border-radius:50%) */
.mission-text{font-size:.92rem;color:var(--text);line-height:1.6}

/* Étiquettes d'outils/compétences : au survol, une bande rouge grandit sur le bord
   gauche (même structure que les encarts « Qui sommes-nous » et les cartes « Notre valeur »). */
.tags{display:flex;flex-wrap:wrap;gap:.5rem}
.tag{font-size:12px;padding:5px 12px;border:1px solid var(--border2);color:var(--text-muted);letter-spacing:.04em;position:relative;overflow:hidden;transition:border-color .3s,color .2s}
.tag::before{content:'';position:absolute;top:0;left:0;width:3px;height:0;background:var(--red);transition:height .4s}
.tag:hover{border-color:var(--border);color:var(--text)}
.tag:hover::before{height:100%}

/* Bas de la modale : margin-top:auto pousse ce bloc tout en bas du panneau. */
.modal-cta{margin-top:auto;padding-top:2rem;border-top:1px solid var(--border2)}
.modal-cta-btn{display:block;width:100%;padding:16px;letter-spacing:.1em;text-transform:uppercase;text-align:center;text-decoration:none;transition:background .2s}  /* (couleurs héritées de la base factorisée, section 4) */

/* === 12. RESPONSIVE === */
/* Les « media queries » adaptent la mise en page selon la largeur de l'écran.
   Elles ne s'appliquent QUE sous le seuil indiqué (mobile/tablette d'abord). */

/* Jusqu'à 900px (tablette) : on passe en 1 colonne pour À propos et Valeur,
   en 2 colonnes pour les Expertises, le menu de nav est masqué, formulaire en 1 colonne. */
@media(max-width:900px){
  .about-grid,.val-grid{grid-template-columns:1fr}
  .exp-grid{grid-template-columns:1fr 1fr}
  .nav-links{display:none}
  .form-row{grid-template-columns:1fr}
}
/* Jusqu'à 600px (mobile) : Expertises en 1 seule colonne, statistiques resserrées,
   et marges intérieures de la modale réduites pour les petits écrans. */
@media(max-width:600px){
  .exp-grid{grid-template-columns:1fr}
  .hero-stats{gap:2rem}
  .modal-header,.modal-body{padding:1.5rem}
  .hero-watermark{width:min(80%,420px);right:-2%;opacity:.05}  /* filigrane : centré à droite, plus petit sur petit écran */
  [data-theme="light"] .hero-watermark{opacity:.06}
}

/* === 13. MOUVEMENT RÉDUIT (accessibilité) === */
/* Si l'utilisateur a demandé « réduire les animations » dans son système, on coupe
   le défilement animé et on rend toutes les transitions/animations quasi instantanées
   (.01ms). !important force cette règle à l'emporter sur les autres. Confort pour les
   personnes sensibles au mouvement. */
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{transition-duration:.01ms!important;animation-duration:.01ms!important}
}

/* === 14. PAGES LÉGALES (mentions-legales.html, politique-de-confidentialite.html) === */
/* Colonne de lecture centrée et confortable pour les pages de texte légal.
   Elles réutilisent l'en-tête, le pied de page et la charte du site. */
.legal{max-width:820px;margin:0 auto}
.legal h1{font-size:clamp(1.9rem,4vw,2.6rem);margin-bottom:.4rem}
.legal-updated{color:var(--text-muted);font-size:.88rem;margin-bottom:2.5rem}  /* ligne « dernière mise à jour » */
.legal h2{font-size:1.4rem;font-weight:700;color:var(--text);margin:2.5rem 0 1rem;letter-spacing:-.01em}  /* titres de rubrique */
.legal h3{font-size:1.05rem;font-weight:600;color:var(--text);margin:1.5rem 0 .5rem}
.legal p,.legal li{color:var(--text-muted);line-height:1.8;font-size:.98rem}
.legal p{margin-bottom:1rem}
.legal ul{padding-left:1.25rem;margin-bottom:1rem}   /* réaffiche le retrait des listes (annulé par la réinitialisation globale) */
.legal li{margin-bottom:.4rem}
.legal address{font-style:normal;color:var(--text-muted);line-height:1.8}  /* bloc de coordonnées (hébergeur) */
.legal p a,.legal li a,.legal address a{color:var(--red);text-decoration:underline}  /* liens dans le texte */
.legal p a:hover,.legal li a:hover,.legal address a:hover{color:var(--red-light)}
/* Champ à renseigner par l'éditeur : surligné pour être bien repérable. */
.todo{background:rgba(var(--red-rgb),.12);border:1px dashed var(--red);color:var(--text);padding:1px 6px;border-radius:3px;font-size:.92em}
.legal-back{margin-top:3rem}  /* lien « retour à l'accueil » (réutilise le style .btn-sec) */

/* === 15. BANDEAU DE CONSENTEMENT AUX COOKIES (optionnel — voir js/cookies.js) === */
/* Styles présents mais SANS effet tant que le bandeau (js/cookies.js) reste inactif.
   Les 3 actions (Accepter / Refuser / Personnaliser) ont volontairement le MÊME
   style, pour un choix « à parts égales » conforme aux recommandations CNIL. */
.cookie-ui{position:fixed;left:0;right:0;bottom:0;z-index:400;display:flex;justify-content:center;padding:1rem}
.cookie-banner{width:100%;max-width:960px;background:var(--bg2);border:1px solid var(--border);box-shadow:0 8px 30px rgba(0,0,0,.4);padding:1.25rem 1.5rem;display:flex;flex-direction:column;gap:1rem}
.cookie-text{font-size:.92rem;color:var(--text-muted);line-height:1.6}
.cookie-text a{color:var(--red);text-decoration:underline}
.cookie-actions{display:flex;flex-wrap:wrap;gap:.75rem}
.cookie-btn{flex:1 1 auto;min-width:150px;padding:11px 18px;border:1px solid var(--border2);background:transparent;color:var(--text);font-size:13px;font-weight:600;letter-spacing:.04em;cursor:pointer;transition:all .2s}
.cookie-btn:hover{border-color:var(--red);color:var(--red)}
.cookie-btn--primary{flex:1 1 auto;background:var(--red);border-color:var(--red);color:var(--white)}      /* utilisé seulement pour « Enregistrer » dans le panneau */
.cookie-btn--primary:hover{background:var(--red-light);border-color:var(--red-light);color:var(--white)}
.cookie-cat{display:flex;gap:.75rem;align-items:flex-start;padding:.75rem 0;border-top:1px solid var(--border2)}
.cookie-cat-info{display:flex;flex-direction:column;gap:.2rem}
.cookie-cat-desc{font-size:.85rem;color:var(--text-muted)}
@media(max-width:600px){.cookie-btn{flex-basis:100%}}

/* === 16. FORMULAIRE DE CONTACT (interactif) === */
/* Champ piège anti-robots : présent dans le code mais hors écran (un robot le remplit). */
.hp-field{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
/* Case de consentement RGPD : la case garde son apparence native (pas le style des <input> texte). */
.form-consent{display:flex;align-items:flex-start;gap:.6rem;margin:1rem 0 .25rem;font-size:.88rem;color:var(--text-muted);line-height:1.5}
.form-consent input{appearance:auto;-webkit-appearance:auto;width:18px;height:18px;padding:0;margin:.15rem 0 0;background:none;border:none;accent-color:var(--red);flex-shrink:0}
.form-consent a{color:var(--red);text-decoration:underline}
/* Bouton « Envoyer » pendant l'envoi (désactivé). */
.form-btn:disabled{opacity:.6;cursor:progress}
/* Message de retour (succès / erreur) sous le bouton. */
.form-message{margin-top:1rem;font-size:.92rem;line-height:1.5;min-height:1.2em}
.form-message--success{color:var(--green)}
.form-message--error{color:var(--red-light)}
