/* =========================================================
   Chameleon Digital Studio — design system (kit officiel)
   ========================================================= */

:root {
  --bg-main: #031426;
  --bg-secondary: #061D31;
  --card: #08243A;
  --cyan: #00C9C8;
  --lime: #A8E61D;
  --orange: #FF7A16;
  --coral: #EF3B2D;
  --text: #FFFFFF;
  --text-muted: #B9C6D2;
  --text-soft: #8FB0C0;
  --text-bright: #EAF6F8;
  --border: rgba(255, 255, 255, 0.14);
  --radius: 18px;
  --font-display: "Sora", "Sora Fallback", sans-serif;
  --font-body: "Inter", "Inter Fallback", sans-serif;
}

body {
  font-family: var(--font-body);
  color: var(--text);
  background: var(--bg-main);
  font-size: 17px;
}

h1, h2, h3, h4 {
  font-family: var(--font-display);
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1.12;
}

a { color: var(--cyan); }

.chameleon-wrap {
  max-width: 1240px;
  margin: 0 auto;
  padding: 0 32px;
}
.chameleon-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-display);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--cyan);
  margin-bottom: 18px;
}
.chameleon-eyebrow::before {
  content: "";
  width: 22px;
  height: 2px;
  background: var(--orange);
  display: inline-block;
}

/* ---------- Site header (GeneratePress) ---------- */
#masthead, .site-header, .main-navigation {
  background: rgba(3, 20, 38, 0.82) !important;
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--border) !important;
}
.main-navigation a, .site-title a, .site-description {
  color: var(--text) !important;
}
.main-navigation a:hover { color: var(--cyan) !important; }
.main-navigation .button-wrap a,
.main-navigation .menu-item.button-wrap > a,
.main-navigation ul.menu > li:last-child > a {
  background: var(--lime) !important;
  color: var(--bg-main) !important;
  border-radius: 999px !important;
  padding: 10px 22px !important;
  font-family: var(--font-display) !important;
  font-weight: 600 !important;
}

/* ---------- Buttons ---------- */
.chameleon-btn {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 14px;
  letter-spacing: 0.03em;
  padding: 16px 30px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  text-decoration: none !important;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.chameleon-btn:hover { transform: translateY(-2px); }
.chameleon-btn.is-primary {
  background: var(--lime);
  color: var(--bg-main) !important;
  box-shadow: 0 10px 30px -8px rgba(168, 230, 29, 0.5);
}
.chameleon-btn.is-outline {
  background: transparent;
  color: var(--cyan) !important;
  border: 1.5px solid var(--cyan);
}
.chameleon-btn.is-outline:hover { background: rgba(0, 201, 200, 0.1); }

/* ---------- Hero ---------- */
.chameleon-hero {
  position: relative;
  background: var(--bg-main);
  padding: 130px 0 0;
  overflow: hidden;
}
.chameleon-hero .chameleon-wrap {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: 40px;
  align-items: center;
  position: relative;
  z-index: 2;
  padding-bottom: 70px;
}
.chameleon-hero-decor-points {
  position: absolute;
  top: 0;
  right: 0;
  width: 55%;
  opacity: 0.7;
  z-index: 1;
  pointer-events: none;
}
.chameleon-hero-decor-wave {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -2px;
  width: 100%;
  z-index: 1;
  line-height: 0;
}
.chameleon-hero-decor-wave svg { width: 100%; height: auto; display: block; }
.chameleon-hero h1 {
  font-size: clamp(2.3rem, 4vw, 3.4rem);
  color: var(--text);
  margin: 0 0 22px;
}
.chameleon-hero h1 .accent { color: var(--cyan); }
.chameleon-hero p.chameleon-lede {
  font-size: 1.1rem;
  color: var(--text-muted);
  max-width: 46ch;
  margin-bottom: 32px;
}
.chameleon-hero-actions { display: flex; gap: 16px; flex-wrap: wrap; }


/* ---------- Sections ---------- */
.chameleon-section {
  padding: 100px 0;
  position: relative;
}
.chameleon-section.is-secondary { background: var(--bg-secondary); }
.chameleon-section.is-main { background: var(--bg-main); }

.chameleon-split { display: grid; grid-template-columns: 3fr 5fr; gap: 60px; align-items: start; }
.chameleon-split h2 { font-size: clamp(1.8rem, 3vw, 2.5rem); margin: 0 0 18px; }
.chameleon-split p { color: var(--text-muted); font-size: 1.05rem; }

.chameleon-commits { display: flex; gap: 30px; margin-top: 30px; flex-wrap: wrap; }
.chameleon-commit { font-family: var(--font-display); font-weight: 600; font-size: 0.95rem; display: flex; align-items: center; gap: 10px; }
.chameleon-commit::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--lime); display: inline-block; }

/* ---------- Services ---------- */
.chameleon-section-head { max-width: 720px; margin: 0 auto 56px; text-align: center; }
.chameleon-section-head h2 { font-size: clamp(1.8rem, 3vw, 2.5rem); margin: 0; }
.chameleon-section-head.is-left { margin: 0 0 56px; text-align: left; }

.chameleon-services-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.chameleon-service-card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 32px 26px;
}
.chameleon-service-card svg { width: 40px; height: 40px; margin-bottom: 20px; }
.chameleon-service-card h3 { font-size: 1.15rem; margin: 0 0 10px; }
.chameleon-service-card p { color: var(--text-muted); font-size: 0.95rem; margin-bottom: 16px; }
.chameleon-service-card a { font-family: var(--font-display); font-weight: 600; font-size: 0.85rem; text-decoration: none; }
.chameleon-service-card a:hover { text-decoration: underline; }

/* ---------- Méthode ---------- */
.chameleon-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; position: relative; margin-top: 50px; }
.chameleon-steps::before {
  content: "";
  position: absolute;
  top: 22px;
  left: 6%;
  right: 6%;
  height: 1px;
  background: var(--border);
}
.chameleon-step { position: relative; padding-right: 20px; }
.chameleon-step-num {
  width: 44px; height: 44px;
  border-radius: 50%;
  background: var(--card);
  border: 1px solid var(--cyan);
  color: var(--cyan);
  font-family: var(--font-display);
  font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  margin-bottom: 20px;
  position: relative;
  z-index: 2;
}
.chameleon-step h3 { font-size: 1.05rem; margin: 0 0 8px; }
.chameleon-step p { margin: 0; color: var(--text-muted); font-size: 0.92rem; }

/* ---------- Réalisations ---------- */
.chameleon-case {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
}
.chameleon-case-visual {
  /* Source canonique unique du composant. Le camelon canonique est pose ici en
     decoration de fond, discret (220px, decale hors cadre en bas a droite).
     Il est volontairement neutralise plus bas sur .chameleon-preview.chameleon-case-visual,
     c'est-a-dire exactement sur les panneaux qui portent une capture cliente :
     aucune decoration Chameleon ne passe jamais derriere une capture client. */
  background-image:
    linear-gradient(135deg, rgba(6,29,49,0.92), rgba(3,20,38,0.97)),
    url('https://chameleondigitalstudio.com/wp-content/uploads/2026/08/hero-chameleon-canonique-900.webp');
  background-repeat: no-repeat;
  background-position: right -30px bottom -30px;
  background-size: 220px;
  padding: 50px 40px;
  min-height: 260px;
  display: flex; flex-direction: column; justify-content: center;
  border-right: 1px solid var(--border);
}
.chameleon-case-info { padding: 46px 42px; }
.chameleon-case-info h3 { font-size: 1.5rem; margin: 10px 0 14px; }
.chameleon-case-info ul { list-style: none; margin: 18px 0; padding: 0; }
.chameleon-case-info li { padding: 6px 0; color: var(--text-muted); }
.chameleon-case-info li::before { content: "✓ "; color: var(--cyan); font-weight: 700; }
.chameleon-case-info a.chameleon-case-link { font-weight: 700; text-decoration: none; }
.chameleon-next-project {
  margin-top: 24px;
  border: 1px dashed var(--border);
  border-radius: var(--radius);
  padding: 28px;
  text-align: center;
  color: var(--text-muted);
}
.chameleon-next-project b { color: var(--text); font-family: var(--font-display); display: block; margin-bottom: 6px; }

/* ---------- Réassurance ---------- */
.chameleon-reassurance { display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; text-align: center; }
.chameleon-reassurance-item { padding: 20px; }
.chameleon-reassurance-item span { display: block; font-family: var(--font-display); font-weight: 700; }

/* ---------- Contact ---------- */
.chameleon-contact { display: grid; grid-template-columns: 1fr 1fr; gap: 60px; }
/* Lot C11 : les enfants de la grille de contact ne peuvent pas imposer leur
   largeur minimale (min-content) a la colonne. Sans cela, l option la plus
   longue du selecteur d offre etirait la colonne a 378 px sur mobile et le
   formulaire se faisait rogner a droite sous 440 px. Aucun effet au-dela. */
.chameleon-contact > * { min-width: 0; }
.chameleon-contact h2 { font-size: clamp(1.8rem, 3vw, 2.5rem); }
.chameleon-contact p { color: var(--text-muted); }
.chameleon-contact-info { margin-top: 26px; color: var(--text-muted); font-size: 0.95rem; }
.chameleon-contact-info div { margin-bottom: 8px; }
.chameleon-form { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 34px; }
.chameleon-form label { display: block; font-family: var(--font-display); font-size: 12px; font-weight: 600; color: var(--text-muted); margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.06em; }
.chameleon-form input, .chameleon-form select, .chameleon-form textarea {
  width: 100%; background: var(--bg-main); border: 1px solid var(--border); border-radius: 10px;
  padding: 13px 16px; color: var(--text); font-family: var(--font-body); margin-bottom: 18px;
}
.chameleon-form .chameleon-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.chameleon-form .chameleon-consent { display: flex; gap: 10px; align-items: flex-start; font-size: 0.85rem; color: var(--text-muted); margin-bottom: 20px; }
.chameleon-form .chameleon-consent input { width: 24px; height: 24px; flex: 0 0 auto; margin: 0; }

/* ---------- Footer ---------- */
.chameleon-footer { background: var(--bg-secondary); border-top: 1px solid var(--border); padding: 50px 0 30px; color: var(--text-muted); font-size: 0.9rem; }
.chameleon-footer-top { display: grid; grid-template-columns: 1.4fr 1fr 1fr; gap: 40px; margin-bottom: 30px; }
.chameleon-footer-top h4 { font-family: var(--font-display); color: var(--text); font-size: 0.95rem; margin: 0 0 14px; }
.chameleon-footer-top ul { list-style: none; margin: 0; padding: 0; }
.chameleon-footer-top li { margin-bottom: 8px; }
.chameleon-footer-top a { color: var(--text-muted); text-decoration: none; }
.chameleon-footer-top a:hover { color: var(--cyan); }
.chameleon-footer-bottom { border-top: 1px solid var(--border); padding-top: 20px; display: flex; justify-content: space-between; flex-wrap: wrap; gap: 12px; }

/* ---------- Motion ---------- */
@keyframes chameleonRise { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
.chameleon-hero h1, .chameleon-hero p, .chameleon-hero-actions { animation: chameleonRise 0.7s ease both; }
.chameleon-hero p { animation-delay: 0.1s; }
.chameleon-hero-actions { animation-delay: 0.2s; }

/* ---------- Responsive ---------- */
@media (max-width: 900px) {
  .chameleon-hero .chameleon-wrap, .chameleon-split, .chameleon-case, .chameleon-contact { grid-template-columns: 1fr; }
  .chameleon-services-grid { grid-template-columns: repeat(2, 1fr); }
  .chameleon-steps { grid-template-columns: repeat(2, 1fr); gap: 30px; }
  .chameleon-steps::before { display: none; }
  .chameleon-reassurance { grid-template-columns: repeat(2, 1fr); }
  .chameleon-footer-top { grid-template-columns: 1fr; }
  .chameleon-hero { padding: 100px 0 0; }
  .chameleon-section { padding: 64px 0; }
}
@media (max-width: 600px) {
  .chameleon-services-grid, .chameleon-reassurance { grid-template-columns: 1fr; }
  .chameleon-wrap { padding: 0 20px; }
  .chameleon-form .chameleon-row { grid-template-columns: 1fr; }
}


/* ---------- Kit visuels rels ---------- */
/* (le fond decoratif de .chameleon-case-visual est desormais declare une seule fois,
   dans la source canonique du composant plus haut dans ce fichier) */
/* --- Micro-lot CTA final : composition groupee (titre + phrase + CTA + mascotte) --- */
.chameleon-next-project {
	  display: flex;
	  align-items: center;
	  justify-content: center;
	  gap: 32px;
	  max-width: 820px;
	  margin-left: auto;
	  margin-right: auto;
	  padding: 26px 32px;
	  text-align: left;
}
.chameleon-next-project::after {
	  content: "";
	  flex: 0 0 auto;
	  width: 100px;
	  height: 92px; /* asset 384x353 : ratio respecte, aucune deformation */
	  background-image: url('https://chameleondigitalstudio.com/wp-content/uploads/2026/08/hero-chameleon-canonique-900-768x768.webp');
	  background-repeat: no-repeat;
	  background-position: center;
	  background-size: contain;
}
.cds-next-copy { min-width: 0; }
.cds-next-copy > p { margin: 14px 0 0; }
@media (max-width: 720px) {
	  .chameleon-next-project { flex-direction: column; gap: 18px; padding: 24px 22px; text-align: center; }
	  .chameleon-next-project::after { width: 72px; height: 66px; }
}

/* ---------- Carousel realisations ---------- */
.chameleon-carousel {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius);
}
.chameleon-carousel-track {
  display: flex;
  transition: transform 0.5s cubic-bezier(.4,0,.2,1);
}
.chameleon-carousel-slide {
  min-width: 100%;
  flex-shrink: 0;
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  background: var(--card);
  border: 1px solid var(--border);
}
.chameleon-carousel-slide .chameleon-case-visual {
  border-right: 1px solid var(--border);
  min-height: 320px;
}
.chameleon-carousel-slide .chameleon-case-info { padding: 46px 44px; }
.chameleon-carousel-nav {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 24px;
  margin-top: 24px;
}
.chameleon-carousel-arrow {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1.5px solid var(--cyan);
  background: transparent;
  color: var(--cyan);
  font-size: 18px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}
.chameleon-carousel-dots { display: flex; gap: 10px; }
.chameleon-carousel-dot {
  width: 10px; height: 10px; border-radius: 50%;
  background: var(--border);
  border: none; cursor: pointer; padding: 0;
}
.chameleon-carousel-dot.is-active { background: var(--lime); }
@media (max-width: 900px) {
  .chameleon-carousel-slide { grid-template-columns: 1fr; }
  .chameleon-carousel-slide .chameleon-case-visual { border-right: none; border-bottom: 1px solid var(--border); min-height: 200px; }
}

/* ---------- Apercu navigateur (carousel) ---------- */
.chameleon-preview.chameleon-case-visual {
  background: linear-gradient(135deg, var(--bg-secondary), var(--bg-main));
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 40px 36px;
}
.chameleon-browser {
  width: 100%;
  max-width: 460px;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--card);
  border: 1px solid var(--border);
  box-shadow: 0 24px 60px -18px rgba(0,0,0,0.6);
}
.chameleon-browser-bar {
  display: flex;
  align-items: center;
  gap: 7px;
  padding: 10px 14px;
  background: #0a1c2c;
  border-bottom: 1px solid var(--border);
}
.chameleon-browser-bar i {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--border);
  display: inline-block;
}
.chameleon-browser-bar i:nth-child(1) { background: #FF5F57; }
.chameleon-browser-bar i:nth-child(2) { background: #FEBC2E; }
.chameleon-browser-bar i:nth-child(3) { background: #28C840; }
.chameleon-browser-bar em {
  margin-left: 10px;
  font-style: normal;
  font-size: 12px;
  color: var(--text-muted);
  font-family: var(--font-body);
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
/* Apercus du portfolio — version unique. 19 aout 2026 (Lot 6).
   Le balisage est passe d'un <span> a fond CSS a une vraie <img loading="lazy">,
   dans le contenu des pages 6 (FR) et 83 (EN) : les 156 228 o des deux apercus
   quittent la fenetre critique. Les proprietes de fond n'ont donc plus d'objet.
   L'ancienne regle :hover (background-position top center -> bottom center, 3,5 s)
   a ete supprimee et NON transposee en object-position, parce qu'elle etait
   mesurablement sans effet : boite reelle 457,639 x 285,562 (ratio 0,62399) contre
   une image 1200 x 749 (ratio 0,62417), soit 0,082 px de debordement vertical
   disponible a 768 et 1440 px, et 0,064 px a 390 px.
   object-fit et object-position transposent a l'identique background-size: cover
   et background-position: top center, et protegent le cadrage si le ratio changeait.
   Rollback : retablir les deux regles d'origine ET le <span> a style inline. */
.chameleon-browser-shot {
  display: block;
  width: 100%;
  aspect-ratio: 1200 / 749;
  object-fit: cover;
  object-position: top center;
}
@media (max-width: 900px) {
  .chameleon-preview.chameleon-case-visual { padding: 26px 22px; min-height: auto; }
}

/* ---------- Reassurance icones + descriptions ---------- */
.chameleon-reassurance-item svg {
  width: 40px;
  height: 40px;
  color: var(--cyan);
  margin-bottom: 16px;
}
.chameleon-reassurance-item span {
  display: block;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.05rem;
  margin-bottom: 8px;
}
.chameleon-reassurance-item p {
  color: var(--text-muted);
  font-size: 0.92rem;
  margin: 0;
}

/* ---------- Formulaire devis (messages + honeypot) ---------- */
.cds-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }
.cds-msg { border-radius: 12px; padding: 16px 18px; margin-bottom: 18px; font-size: 0.95rem; line-height: 1.5; }
.cds-msg.is-ok { background: rgba(168,230,29,0.12); border: 1px solid var(--lime); color: var(--text); }
.cds-msg.is-err { background: rgba(239,59,45,0.12); border: 1px solid var(--coral); color: var(--text); }


/* ===================== PREMIUM POLISH ===================== */
/* Bug navigation "Realisations" : scroll-behavior smooth retire au profit de auto.
   Les cinq feuilles de style sont chargees en asynchrone par LiteSpeed (rel=preload as=style
   puis onload rel=stylesheet). Au moment ou le navigateur execute le saut d ancre d une URL
   de type /#realisations, seul le CSS critique inline est applique : le document mesure alors
   25 949 px au lieu de 6 760 px et #realisations se situe a 13 353 px au lieu de 2 554 px.
   Avec scroll-behavior smooth ce saut est anime : le CSS arrive pendant l animation, le document
   se replie, la position est ecretee en bas de page et l internaute atterrit sur la section
   contact. En auto, le saut est instantane et le navigateur le rejoue a chaque reflow jusqu au
   load, ce qui corrige de lui-meme la position. La regle prefers-reduced-motion plus bas devient
   redondante mais reste sans effet de bord. */
html { scroll-behavior: auto; }

/* Reveal au defilement (ne masque que si le JS est pret) */
.cds-reveal-ready .cds-reveal { opacity: 0; transform: translateY(26px); will-change: opacity, transform; }
.cds-reveal-ready .cds-reveal.is-visible { opacity: 1; transform: none; transition: opacity 0.7s cubic-bezier(.2,.7,.2,1), transform 0.7s cubic-bezier(.2,.7,.2,1); }

/* En-tete condense + ombre au scroll */
#masthead, .site-header { transition: box-shadow 0.3s ease, background 0.3s ease; }
.inside-header { transition: padding 0.3s ease; }
body.cds-scrolled #masthead, body.cds-scrolled .site-header { box-shadow: 0 12px 34px -14px rgba(0,0,0,0.65); background: rgba(3,20,38,0.94) !important; }
body.cds-scrolled .inside-header { padding-top: 6px !important; padding-bottom: 6px !important; }

/* Boutons : halo affine */
.chameleon-btn.is-primary:hover { box-shadow: 0 16px 42px -8px rgba(168,230,29,0.65); }
.main-navigation ul.menu > li:last-child > a { transition: transform 0.2s ease, box-shadow 0.2s ease; display: inline-block; }
.main-navigation ul.menu > li:last-child > a:hover { transform: translateY(-2px); box-shadow: 0 12px 30px -8px rgba(168,230,29,0.55); }

/* Cartes services : relief + halo + icone */
.chameleon-service-card { transition: transform 0.28s ease, box-shadow 0.28s ease, border-color 0.28s ease, background 0.28s ease; }
.chameleon-service-card:hover { transform: translateY(-6px); border-color: rgba(0,201,200,0.55); box-shadow: 0 26px 55px -24px rgba(0,201,200,0.35); background: #0a2942; }
.chameleon-service-card svg { transition: transform 0.3s ease; }
.chameleon-service-card:hover svg { transform: scale(1.12) rotate(-3deg); }

/* Reassurance : survol icones */
.chameleon-reassurance-item { transition: transform 0.28s ease; }
.chameleon-reassurance-item:hover { transform: translateY(-4px); }
.chameleon-reassurance-item svg { transition: transform 0.3s ease; }
.chameleon-reassurance-item:hover svg { transform: translateY(-3px) scale(1.1); }

/* Etapes methode : survol numero */
.chameleon-step-num { transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease, color 0.3s ease; }
.chameleon-step:hover .chameleon-step-num { transform: translateY(-4px); background: var(--cyan); color: var(--bg-main); box-shadow: 0 12px 30px -10px rgba(0,201,200,0.5); }

/* Carousel : fleches remplies au survol */
.chameleon-carousel-arrow { transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease; }
.chameleon-carousel-arrow:hover { background: var(--cyan); color: var(--bg-main); transform: scale(1.08); }

/* Champs formulaire : focus */
.chameleon-form input:focus, .chameleon-form select:focus, .chameleon-form textarea:focus { outline: none; border-color: var(--cyan); box-shadow: 0 0 0 3px rgba(0,201,200,0.15); }

/* Case RGPD : la coche suit la marque au lieu du bleu systeme */
.chameleon-form input[type="checkbox"] { accent-color: var(--cyan); }

/* Selects : meme traitement que les autres champs. La fleche est un SVG inline
   (data-URI), donc aucune requete supplementaire. appearance:none ne retire
   aucune fonctionnalite clavier : Espace / Entree / fleches restent operants. */
.chameleon-form select {
  appearance: none; -webkit-appearance: none; -moz-appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' fill='none' stroke='%23B9C6D2' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 16px center;
  padding-right: 44px;
}
.chameleon-form select:focus {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' fill='none' stroke='%2300C9C8' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

/* Accents decoratifs (carres du kit) */
.chameleon-section { overflow: hidden; }
.chameleon-section.is-secondary::before { content:''; position:absolute; top:44px; right:48px; width:12px; height:12px; border-radius:2px; background:var(--orange); box-shadow: 24px 12px 0 var(--lime), 46px -8px 0 var(--cyan), 12px 34px 0 var(--coral); opacity:0.55; transform: rotate(8deg); pointer-events:none; }
.chameleon-contact::after { content:''; position:absolute; left:-6px; bottom:10px; width:10px; height:10px; border-radius:2px; background:var(--cyan); box-shadow: 20px 16px 0 var(--orange), -4px 34px 0 var(--lime); opacity:0.5; pointer-events:none; }
.chameleon-contact { position: relative; }



/* Respect des preferences de mouvement */
@media (prefers-reduced-motion: reduce) { .cds-reveal-ready .cds-reveal { opacity:1 !important; transform:none !important; } html { scroll-behavior: auto; } }


/* ===== HERO — fond constellation (comme la maquette) ===== */
.chameleon-hero-decor-points, .chameleon-hero-decor-wave { display: none !important; }
.chameleon-hero { background: radial-gradient(130% 110% at 72% 32%, #06243d 0%, #04182b 48%, #031426 100%) !important; }
.chameleon-hero::before {
  content: '';
  display: none;
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  opacity: 0.82;
  z-index: 1;
  pointer-events: none;
}

/* 25 aout 2026, lots F5 et F5.1 : le raster constellation n existe qu en bureau.
   Mesure en trace Chrome (400 px, CPU x4, Slow 4G, cache desactive) : ce calque
   faisait tomber l Element Render Delay du hero de 1016-1115 ms a 37 ms une fois
   retire. C est un heritage du hero d avant la refonte, pose AU-DESSUS du nouveau
   systeme (z-index 1 contre 0 pour .hero-bg), en plein ecran et a 82 % d opacite.
   Comparaison visuelle a 390 px : hors quelques points tres faibles, le hero est
   inchange — la photo, le degrade, le camelon et les arcs portent deja la scene.

   F5.1 : la regle de base ci-dessus ne declare plus background-image du tout, et le
   calque y est en display:none. Le raster n est introduit qu ici. Declarer l URL
   dans la regle commune suffisait a la faire demander sur mobile, meme avec le
   calque masque et le preload correctement limite a (min-width: 901px).
   Un seul point de declaration, aucune propriete dupliquee, aucun bloc max-width.

   Le media DOIT rester synchronise avec celui du preload emis par cds_lcp_preload
   dans functions.php.
   Rollback : remettre background-image dans la regle de base et retirer ce bloc. */
@media (min-width: 901px) {
  .chameleon-hero::before {
    display: block;
    background-image: url('https://chameleondigitalstudio.com/wp-content/uploads/2026/07/hero-constellation.webp');
  }
}
.chameleon-hero .chameleon-wrap { position: relative; z-index: 2; }


/* ===== FOOTER premium (4 colonnes + marque) ===== */
.chameleon-footer-top { grid-template-columns: 1.7fr 1fr 1.2fr 1.2fr 1.25fr !important; gap: 34px; align-items: start; }
.chameleon-footer-logo { height: 42px; width: auto; display: block; margin-bottom: 16px; }
.chameleon-footer-brand p { max-width: 34ch; color: var(--text-muted); }
.chameleon-footer-contact { font-size: 0.9rem; line-height: 1.9; color: var(--text-muted); }
.chameleon-footer-contact a { color: var(--text-muted); text-decoration: none; }
.chameleon-footer-contact a:hover { color: var(--cyan); }
@media (max-width: 900px) { .chameleon-footer-top { grid-template-columns: 1fr 1fr !important; } }
@media (max-width: 600px) { .chameleon-footer-top { grid-template-columns: 1fr !important; } }


/* ===== MENU premium (soulignement anime) ===== */
.main-navigation ul.menu > li > a { position: relative; }
.main-navigation ul.menu > li:not(:last-child) > a::after { content: ''; position: absolute; left: 18px; right: 18px; bottom: 12px; height: 2px; border-radius: 2px; background: linear-gradient(90deg, var(--cyan), var(--lime)); transform: scaleX(0); transform-origin: left center; transition: transform 0.3s cubic-bezier(.2,.7,.2,1); }
.main-navigation ul.menu > li:not(:last-child) > a:hover::after { transform: scaleX(1); }

/* ===== FOOTER premium finitions ===== */
.chameleon-footer-top { grid-template-columns: 1.9fr 1.1fr 1.3fr 1.3fr !important; }
.chameleon-footer-top h4 { text-transform: uppercase; letter-spacing: 0.09em; font-size: 0.82rem; position: relative; padding-bottom: 12px; margin-bottom: 16px; }
.chameleon-footer-top h4::after { content: ''; position: absolute; left: 0; bottom: 0; width: 26px; height: 2px; border-radius: 2px; background: linear-gradient(90deg, var(--cyan), var(--lime)); }
.chameleon-footer-top li a { position: relative; transition: color 0.2s ease, padding-left 0.25s ease; }
.chameleon-footer-top li a:hover { color: var(--cyan); padding-left: 6px; }
.chameleon-footer-squares { margin-top: 22px; width: 12px; height: 12px; border-radius: 2px; background: var(--orange); box-shadow: 20px 0 0 var(--lime), 40px -6px 0 var(--cyan), 14px 20px 0 var(--coral); opacity: 0.7; }
@media (max-width: 900px) { .chameleon-footer-top { grid-template-columns: 1fr 1fr !important; } }
@media (max-width: 600px) { .chameleon-footer-top { grid-template-columns: 1fr !important; } }


/* ===== FAQ (accordéon) ===== */
.chameleon-faq { max-width: 820px; margin: 0 auto; display: flex; flex-direction: column; gap: 14px; }
.chameleon-faq-item { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; transition: border-color 0.25s ease, box-shadow 0.25s ease; }
.chameleon-faq-item[open] { border-color: rgba(0,201,200,0.45); box-shadow: 0 18px 40px -24px rgba(0,201,200,0.3); }
.chameleon-faq-item summary { list-style: none; cursor: pointer; padding: 22px 26px; font-family: var(--font-display); font-weight: 600; font-size: 1.05rem; color: var(--text); display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.chameleon-faq-item summary::-webkit-details-marker { display: none; }
.chameleon-faq-item summary:hover { color: var(--cyan); }
.chameleon-faq-icon { flex-shrink: 0; width: 22px; height: 22px; position: relative; }
.chameleon-faq-icon::before, .chameleon-faq-icon::after { content: ''; position: absolute; background: var(--cyan); border-radius: 2px; transition: transform 0.25s ease, opacity 0.25s ease; }
.chameleon-faq-icon::before { top: 10px; left: 3px; right: 3px; height: 2px; }
.chameleon-faq-icon::after { left: 10px; top: 3px; bottom: 3px; width: 2px; }
.chameleon-faq-item[open] .chameleon-faq-icon::after { transform: scaleY(0); opacity: 0; }
.chameleon-faq-answer { padding: 0 26px 24px; color: var(--text-muted); }
.chameleon-faq-answer p { margin: 0; line-height: 1.7; font-size: 1rem; }


/* ===== Pages légales / contenu ===== */
.chameleon-legal-wrap { max-width: 820px; }
/* Lot 9J-D : courbe fluide unique du H1 de contenu.
   L ancienne valeur clamp(2rem, 4vw, 2.8rem) atteignait son minimum des 800 px :
   le H1 restait fige a 32 px de 800 px jusqu au mobile, alors que le H2 continuait
   de descendre en douceur. A 768 px le rapport tombait a 1,07 et la hierarchie
   disparaissait. La pente est recalculee pour passer par 35,5 px a 768 px sans
   deplacer ni 1024 px (40,96) ni 1440 px (44,8), inchanges au pixel pres.
   Une seule regle canonique, aucun correctif par breakpoint. */
.chameleon-legal h1 { font-size: clamp(2rem, 1.195rem + 2.133vw, 2.8rem); margin: 0 0 28px; }
.chameleon-legal h2 { font-size: 1.3rem; margin: 38px 0 12px; color: var(--text); }
.chameleon-legal p { color: var(--text-muted); line-height: 1.75; margin: 0 0 10px; }
.chameleon-legal a { color: var(--cyan); }
/* Lot 9D3 : le CTA lime doit rester lisible dans les sections legal.
   .chameleon-legal a (0,1,1) ecrasait la couleur de .cds-cta (0,1,0) :
   texte cyan sur fond lime, contraste 1,37:1. Bleu nuit de la charte : 12,37:1. */
.chameleon-legal a.cds-cta { color: var(--bg-main); }
.chameleon-legal strong { color: var(--text); }


/* ===== Page 404 ===== */
.chameleon-404 { text-align: center; padding: 130px 0 110px; }
.chameleon-404 .chameleon-eyebrow { justify-content: center; }
.chameleon-404 h1 { font-size: clamp(2rem, 5vw, 3.2rem); margin: 0 0 18px; }
.chameleon-404 p { color: var(--text-muted); max-width: 48ch; margin: 0 auto 34px; font-size: 1.05rem; }
.chameleon-404-actions { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; }


/* ===== Footer 2026 (badge + mot-signature) ===== */
.chameleon-footer { position: relative; overflow: hidden; padding-bottom: 0; }
.chameleon-footer-lead { display: grid; grid-template-columns: 1.35fr 1fr; gap: 50px; align-items: start; }
.chameleon-availability { display: inline-flex; align-items: center; gap: 9px; font-family: var(--font-display); font-size: 0.8rem; font-weight: 600; color: var(--text); background: rgba(168,230,29,0.08); border: 1px solid rgba(168,230,29,0.32); padding: 7px 15px; border-radius: 999px; margin-bottom: 22px; }
.chameleon-availability i { width: 8px; height: 8px; border-radius: 50%; background: var(--lime); animation: cdsPulse 2.2s infinite; }
@keyframes cdsPulse { 0%{box-shadow:0 0 0 0 rgba(168,230,29,0.5);} 70%{box-shadow:0 0 0 8px rgba(168,230,29,0);} 100%{box-shadow:0 0 0 0 rgba(168,230,29,0);} }
.chameleon-footer-nav { display: grid; grid-template-columns: 1fr 1.35fr; gap: 40px; }
.chameleon-footer h3 { text-transform: uppercase; letter-spacing: 0.09em; font-size: 0.82rem; position: relative; padding-bottom: 12px; margin-bottom: 16px; }
.chameleon-footer h3::after { content:''; position:absolute; left:0; bottom:0; width:26px; height:2px; border-radius:2px; background: linear-gradient(90deg, var(--cyan), var(--lime)); }
.chameleon-footer-nav li a { position: relative; transition: color 0.2s ease, padding-left 0.25s ease; }
.chameleon-footer-nav li a:hover { color: var(--cyan); padding-left: 6px; }
.chameleon-footer-wordmark { position: relative; text-align: center; line-height: 0.7; margin-top: 24px; pointer-events: none; user-select: none; }
.chameleon-footer-wordmark::before { content:''; position:absolute; left:50%; bottom:12%; width:70%; height:70%; transform:translateX(-50%); background: radial-gradient(ellipse at center, rgba(0,201,200,0.16), rgba(168,230,29,0.06) 45%, transparent 70%); filter: blur(30px); z-index:0; }
.chameleon-footer-wordmark span { position: relative; z-index:1; display: inline-block; font-family: var(--font-display); font-weight: 800; letter-spacing: -0.035em; font-size: clamp(4.5rem, 21vw, 18rem); white-space: nowrap; background: linear-gradient(180deg, rgba(0,201,200,0.22), rgba(168,230,29,0.10) 45%, rgba(255,255,255,0.02)); -webkit-background-clip: text; background-clip: text; color: transparent; transform: translateY(24%); }
@media (max-width: 900px) { .chameleon-footer-lead { grid-template-columns: 1fr; gap: 34px; } .chameleon-footer-nav { grid-template-columns: 1fr 1fr; } }
@media (max-width: 600px) { .chameleon-footer-nav { grid-template-columns: 1fr; } }


/* Footer nav — retrait puces + liens propres */
.chameleon-footer-nav ul { list-style: none; margin: 0; padding: 0; }
.chameleon-footer-nav li { margin-bottom: 9px; }
.chameleon-footer-nav li a { color: var(--text-muted); text-decoration: none; }
.chameleon-footer-nav li a:hover { color: var(--cyan); }


/* ===================== Touches 2026 ===================== */
/* Monospace pour libellés / métadonnées (contraste éditorial) */
.chameleon-eyebrow, .chameleon-footer h3, .chameleon-availability, .chameleon-browser-bar em, .chameleon-service-card a, .chameleon-case-link, .chameleon-footer-bottom { font-family: 'Space Mono', monospace; }
.chameleon-eyebrow { letter-spacing: 0.10em; }
.chameleon-availability { letter-spacing: 0.01em; }
.chameleon-footer h3 { letter-spacing: 0.06em; }

/* Grain subtil premium */
body::after { content: ''; position: fixed; inset: 0; z-index: 9998; pointer-events: none; background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27140%27%20height%3D%27140%27%3E%3Cfilter%20id%3D%27n%27%3E%3CfeTurbulence%20type%3D%27fractalNoise%27%20baseFrequency%3D%270.9%27%20numOctaves%3D%272%27%20stitchTiles%3D%27stitch%27%2F%3E%3C%2Ffilter%3E%3Crect%20width%3D%27100%25%27%20height%3D%27100%25%27%20filter%3D%27url%28%23n%29%27%2F%3E%3C%2Fsvg%3E"); background-size: 140px 140px; opacity: 0.05; mix-blend-mode: overlay; }

/* Bandeau cinétique (marquee) */
.chameleon-marquee { overflow: hidden; background: var(--bg-secondary); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); padding: 18px 0; }
.chameleon-marquee-track { display: flex; width: max-content; animation: cdsMarquee 30s linear infinite; }
.chameleon-marquee-track span { font-family: var(--font-display); font-weight: 700; font-size: clamp(1.05rem, 1.9vw, 1.55rem); color: var(--text); white-space: nowrap; padding: 0 26px; display: inline-flex; align-items: center; }
.chameleon-marquee-track span.sep { color: var(--cyan); padding: 0 2px; }
.chameleon-marquee:hover .chameleon-marquee-track { animation-play-state: paused; }
@keyframes cdsMarquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .chameleon-marquee-track { animation: none; } }


/* ===== CTA en-tete affine (plus compact) ===== */
.main-navigation ul.menu > li:last-child > a { padding: 6px 15px !important; font-size: 0.8rem !important; font-weight: 600 !important; line-height: 1.2 !important; align-self: center; }


/* Footer wordmark fix haut (haut visible, bas qui deborde) */
.chameleon-footer-wordmark { font-size: clamp(4.5rem, 21vw, 18rem) !important; line-height: 1 !important; height: 0.74em !important; overflow: hidden !important; margin-top: 18px !important; }
.chameleon-footer-wordmark span { font-size: inherit !important; transform: none !important; }
.chameleon-footer-wordmark::before { bottom: 0 !important; height: 130% !important; }


/* wordmark entier (mot complet visible) */
.chameleon-footer-wordmark { height: auto !important; overflow: visible !important; line-height: 0.82 !important; margin-top: 14px !important; }
.chameleon-footer { padding-bottom: 28px !important; }




/* Footer — legal en bas (comme les meilleurs sites) */
.chameleon-footer-lead { grid-template-columns: 1.5fr 1fr !important; }
.chameleon-footer-nav { grid-template-columns: 1fr !important; }
.chameleon-footer-legal { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 20px; }
.chameleon-footer-legal a { color: var(--text-muted); text-decoration: none; position: relative; }
.chameleon-footer-legal a:hover { color: var(--cyan); }
.chameleon-footer-legal a::before { content: '·'; position: absolute; left: -12px; color: var(--text-muted); opacity: 0.5; }
@media (max-width: 700px){ .chameleon-footer-legal a::before { display: none; } }


/* Footer nav 2 colonnes equilibre */
.chameleon-footer-lead { grid-template-columns: 1.4fr 1.3fr !important; gap: 48px !important; }
.chameleon-footer-nav { grid-template-columns: 1fr 1fr !important; gap: 30px !important; }
@media (max-width: 900px){ .chameleon-footer-lead { grid-template-columns: 1fr !important; } .chameleon-footer-nav { grid-template-columns: 1fr 1fr !important; } }


/* --- /* --- Micro-lot CTA final : l'ancien bloc mobile de repositionnement du fond mascotte est retire.
   La mascotte n'est plus un background du conteneur mais un element de la composition flex
   (.chameleon-next-project::after), donc ces surcharges !important n'avaient plus d'objet. --- */


/* --- A11y : agrandir les zones tactiles (cds-a11y-touch) --- */
.chameleon-footer-legal a{display:inline-block;padding:6px 3px;}
.chameleon-carousel-dot{position:relative;}
.chameleon-carousel-dot::after{content:'';position:absolute;inset:-9px;border-radius:50%;}


/* ===== Pages Services & Études de cas (cds-svc-page / cds-case) ===== */
.chameleon-legal .cds-lead{color:var(--muted);font-size:1.08rem;max-width:65ch;margin:-.2em 0 1.4em}
.cds-grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:18px 0 22px}
.cds-block{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px}
.cds-block h3{font-family:var(--font-display);font-size:1rem;margin:0 0 8px;color:#fff}
.cds-block p,.cds-block ul{margin:0;color:var(--text-muted);font-size:.95rem}
.cds-block ul{list-style:none;padding:0}
.cds-block ul li{position:relative;padding:4px 0 4px 22px}
.cds-block ul li::before{content:"→";position:absolute;left:0;color:var(--cyan);font-family:"Space Mono",monospace}
.cds-steps{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0 24px}
.cds-step{flex:1;min-width:150px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:14px;padding:15px 17px}
.cds-step .n{font-family:"Space Mono",monospace;color:var(--lime);font-size:.8rem}
.cds-step b{display:block;font-family:var(--font-display);margin:5px 0 3px;color:#fff}
.cds-step span{color:var(--text-muted);font-size:.9rem}
/* Lot 9D3 : timeline verticale sur mobile, une etape par ligne. */
@media (max-width: 700px){ .cds-steps .cds-step{ flex: 1 0 100%; } }
/* Lot 9D3 : trois etapes par ligne sur grand ecran, pour une timeline reguliere. */
@media (min-width: 701px){ .cds-steps .cds-step{ flex: 1 1 30%; } }
.cds-tags{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 18px}
.cds-tag{font-family:"Space Mono",monospace;font-size:.68rem;letter-spacing:.05em;color:var(--cyan);border:1px solid var(--border);border-radius:999px;padding:4px 12px}
.cds-cta{display:inline-flex;align-items:center;gap:10px;margin-top:6px;background:var(--lime);color:var(--bg-main);font-family:var(--font-display);font-weight:700;font-size:14px;line-height:1.5;letter-spacing:.03em;text-decoration:none;padding:16px 30px;border-radius:999px;box-shadow:0 10px 30px -8px rgba(168,230,29,.5)}
.cds-cta:hover{filter:brightness(1.06)}
.cds-note{font-size:.9rem;color:var(--text-muted)}
.cds-case-img{width:100%;height:auto;border-radius:var(--radius);border:1px solid var(--border);display:block;margin:0 0 22px;background:var(--card)}

/* --- Micro-lot espacements portfolio : rythme vertical des etudes de cas ---
   Audit : trois enchainements avaient une gouttiere de 0 px, parce que le conteneur
   qui precede n a pas de marge basse (.chameleon-commits, .cds-block, .cds-swatches)
   et que l element suivant n a pas de marge haute. Tous les autres intervalles de ces
   pages sont deja sur une echelle reguliere : 10 / 12 / 18 / 22 / 38 px.
   Les valeurs ci-dessous reprennent cette echelle, aucune valeur nouvelle n est introduite.
   Regles d adjacence volontairement, pour ne viser que la relation defectueuse :
   .cds-block place dans .cds-grid2 n est jamais suivi d une image ni d un paragraphe,
   ces regles n ont donc aucun effet sur les grilles a deux colonnes. */
.chameleon-commits + .cds-case-img{margin-top:18px}
.cds-block + .cds-case-img,
.cds-block + p,
.cds-swatches + p{margin-top:22px}
/* Lot 9F2C : deux .cds-block consecutifs dans le corps de page (bloc + callout).
   Selecteur d enfant direct de .chameleon-legal-wrap, pour ne jamais toucher
   les .cds-block places dans .cds-grid2, qui sont des elements de grille. */
.chameleon-legal-wrap > .cds-block + .cds-block{margin-top:22px}
.chameleon-legal .cds-back{font-family:"Space Mono",monospace;font-size:.8rem;color:var(--cyan);text-decoration:none}
@media(max-width:640px){.cds-grid2{grid-template-columns:1fr}}


/* ===== Fix bande blanche + effets premium (cds-fullbleed-fix) ===== */
.inside-article:has(.chameleon-section){background:transparent !important;padding:0 !important;box-shadow:none !important;border:0 !important}
.site-main:has(.chameleon-section){margin-top:0 !important}
.entry-content:has(.chameleon-section){margin-top:0 !important;margin-bottom:0 !important}
.content-area:has(.chameleon-section),.site-content:has(.chameleon-section){background:transparent}
/* Effet premium : lueur douce en haut de section + entrée */
.chameleon-section.is-main{position:relative;overflow:hidden}
.chameleon-section.is-main::after{content:"";position:absolute;top:0;left:0;right:0;height:420px;background:radial-gradient(120% 90% at 82% -20%, rgba(0,201,200,.12), transparent 60%);pointer-events:none;z-index:0}
.chameleon-legal-wrap{position:relative;z-index:1}
.chameleon-legal h1{animation:cdsFadeUp .6s ease both}
.chameleon-legal .cds-lead,.chameleon-legal .cds-tags{animation:cdsFadeUp .6s ease .08s both}
@keyframes cdsFadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
/* Survols premium */
.cds-block,.cds-step{transition:transform .25s ease,border-color .25s ease,box-shadow .25s ease}
.cds-block:hover,.cds-step:hover{transform:translateY(-4px);border-color:rgba(0,201,200,.55);box-shadow:0 12px 32px rgba(0,0,0,.28)}
.cds-case-img{transition:transform .45s ease,box-shadow .45s ease;will-change:transform}
.cds-case-img:hover{transform:scale(1.015);box-shadow:0 16px 44px rgba(0,0,0,.35)}
.cds-cta{transition:transform .2s ease,box-shadow .2s ease}
.cds-cta:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(168,230,29,.4)}
.cds-tag{transition:border-color .2s ease,color .2s ease}
.cds-tag:hover{border-color:var(--cyan)}

/* cds-en-title-fix : masque le titre de page en double sur les pages traduites EN */
.page-id-83 .entry-header{display:none!important}

/* cds-lang-switcher-premium : selecteur de langue compact type premium (toggle FR/EN) */
.main-navigation .lang-item{margin:0!important}
.main-navigation li.lang-item-fr{margin-left:16px!important}
.main-navigation .lang-item a{display:inline-block!important;padding:5px 11px!important;font-size:0!important;line-height:1.55!important;color:var(--text-bright)!important;border:1px solid rgba(255,255,255,.24)!important;background:transparent!important;transition:background .2s,color .2s!important}
.main-navigation .lang-item a::before{font-size:12.5px;font-weight:700;letter-spacing:.05em}
.main-navigation .lang-item-fr a::before{content:"FR"}
.main-navigation .lang-item-en a::before{content:"EN"}
.main-navigation li.lang-item-fr a{border-radius:7px 0 0 7px!important;border-right-width:0!important}
.main-navigation li.lang-item-en a{border-radius:0 7px 7px 0!important}
.main-navigation li.lang-item.current-lang a{background:#00C9C8!important;color:var(--bg-main)!important;border-color:#00C9C8!important}
.main-navigation li.lang-item:not(.current-lang) a:hover{background:rgba(255,255,255,.10)!important;color:#fff!important}

/* cds-lang-fix2 : force le masquage du texte sur la langue active + taille du code */
.main-navigation li.lang-item.current-lang a,
.main-navigation li.lang-item.current-menu-item a{font-size:0!important}
.main-navigation .lang-item a::before{font-size:12.5px!important;display:inline-block;line-height:1.55}

/* cds-lang-fix3 : specificite ID pour battre le theme */
#site-navigation .lang-item{margin:0!important}
#site-navigation li.lang-item-fr{margin-left:16px!important}
#site-navigation .lang-item a{display:inline-block!important;padding:5px 11px!important;font-size:0!important;line-height:1.55!important;color:var(--text-bright)!important;border:1px solid rgba(255,255,255,.24)!important;background:transparent!important}
#site-navigation .lang-item a::before{font-size:12.5px!important;font-weight:700;letter-spacing:.05em}
#site-navigation .lang-item-fr a::before{content:"FR"}
#site-navigation .lang-item-en a::before{content:"EN"}
#site-navigation li.lang-item-fr a{border-radius:7px 0 0 7px!important;border-right-width:0!important}
#site-navigation li.lang-item-en a{border-radius:0 7px 7px 0!important}
#site-navigation li.lang-item.current-lang a{background:#00C9C8!important;color:var(--bg-main)!important;border-color:#00C9C8!important;font-size:0!important}
#site-navigation li.lang-item:not(.current-lang) a:hover{background:rgba(255,255,255,.10)!important;color:#fff!important}

/* cds-preview-tag : libelle d'apercu neutre (remplace la fausse barre de navigateur) */
.chameleon-browser-tag{display:block;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--text-soft);padding:9px 14px;background:rgba(255,255,255,.04);border-bottom:1px solid rgba(255,255,255,.08)}

/* cds-mobile-fixes : hamburger visible + selecteur FR/EN cote a cote sur mobile */
.main-navigation .menu-toggle,.main-navigation .menu-toggle span,.main-navigation .menu-toggle .gp-icon,.main-navigation .menu-toggle svg{color:var(--text-bright)!important;fill:var(--text-bright)!important}
.main-navigation .menu-toggle{font-size:22px!important}
.main-navigation .menu-toggle,.main-navigation .menu-toggle .mobile-menu,.main-navigation .menu-toggle .screen-reader-text{font-family:var(--font-display);font-weight:700;letter-spacing:.03em}
.main-navigation .menu-toggle:hover,.main-navigation .menu-toggle:hover span,.main-navigation .menu-toggle:hover .gp-icon{color:#00C9C8!important;fill:#00C9C8!important}
@media (max-width:768px){
  #site-navigation .main-nav ul li.lang-item{display:inline-block!important;width:auto!important;vertical-align:middle}
  #site-navigation .main-nav ul li.lang-item-fr{margin-left:16px!important}
  #site-navigation .main-nav ul li.lang-item a{padding:6px 12px!important}
}

/* cds-back-link : lien retour en haut des etudes de cas */
.cds-back{display:block;width:-moz-fit-content;width:fit-content;margin:0 0 22px;color:var(--text-soft);font-size:.92rem;font-weight:600;letter-spacing:.02em;text-decoration:none;transition:color .2s,transform .2s}
.cds-back:hover{color:#00C9C8;transform:translateX(-3px)}

/* cds-tap-targets : cibles tactiles 24px pour les pastilles du carrousel (WCAG 2.5.8) */
.chameleon-carousel-dot{width:24px!important;height:24px!important;min-width:24px;padding:0!important;background:transparent!important;border:none!important;box-shadow:none!important;position:relative;margin:0 3px!important;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.chameleon-carousel-dot::after{content:none!important}
.chameleon-carousel-dot::before{content:""!important;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:10px;height:10px;border-radius:50%;background:rgba(255,255,255,.35);transition:background .2s,transform .2s}
.chameleon-carousel-dot.is-active::before{background:#A8E61D;transform:translate(-50%,-50%) scale(1.15)}
.chameleon-carousel-dot:hover::before{background:rgba(255,255,255,.6)}

/* cds-back-sticky : lien retour collant sur etudes de cas */
.cds-back{position:sticky;top:14px;z-index:30;display:inline-flex;align-items:center;gap:6px;background:rgba(6,20,38,.72);border:1px solid rgba(255,255,255,.14);padding:8px 15px;border-radius:999px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 6px 18px rgba(0,0,0,.25)}
.cds-back:hover{color:#A8E61D;border-color:rgba(168,230,29,.5);transform:translateX(-3px)}

/* cds-back-float : bouton retour flottant, toujours visible sur etudes de cas */
.cds-back{position:fixed!important;left:22px;bottom:26px;top:auto!important;margin:0!important;z-index:60;background:rgba(6,20,38,.85)}
@media(max-width:600px){.cds-back{left:14px;bottom:16px;padding:8px 13px!important;font-size:.85rem}}

/* cds-hp-a11y : honeypot en display:none pour un arbre d'accessibilite bien forme (agents IA) */
.cds-hp{display:none!important}


/* === Correction (cds) : caler le wordmark "Chameleon" sur la largeur des blocs du footer === */
/* cds-footer-wordmark-fit : le conteneur devient une unite de reference (cqi) ;
   le mot occupe ~100% de sa largeur a tous les ecrans, comme les autres colonnes. */
.chameleon-footer-wordmark {
    container-type: inline-size;
    overflow: hidden;
}
.chameleon-footer-wordmark span {
    font-size: 17.2cqi !important;
    line-height: 0.82 !important;
}


/* === cds-social : liens reseaux sociaux du footer (Instagram / Facebook) === */
.chameleon-social {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 22px 0 0;
    padding: 0;
    list-style: none;
}
.chameleon-social a {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    color: var(--text-muted);
    background: rgba(255, 255, 255, 0.04);
    border: 1px solid var(--border);
    text-decoration: none !important;
    transition: color .25s ease, background .25s ease, border-color .25s ease, transform .25s ease, box-shadow .25s ease;
}
.chameleon-social a svg {
    width: 20px;
    height: 20px;
    display: block;
    fill: currentColor;
}
.chameleon-social a:hover,
.chameleon-social a:focus-visible {
    color: #fff;
    background: rgba(0, 201, 200, 0.14);
    border-color: rgba(0, 201, 200, 0.55);
    transform: translateY(-3px);
    box-shadow: 0 10px 26px rgba(0, 0, 0, 0.3);
}
.chameleon-social a:focus-visible {
    outline: 2px solid var(--lime);
    outline-offset: 3px;
}
@media (prefers-reduced-motion: reduce) {
    .chameleon-social a { transition: none; }
    .chameleon-social a:hover,
    .chameleon-social a:focus-visible { transform: none; }
}


/* === cds-offers-contact : styles remontes depuis le contenu des pages 6 et 83 (1er aout 2026) ===
   Etaient dupliques dans un <style> inline sur chaque version linguistique.
   Places en fin de fichier pour conserver exactement la meme priorite qu'avant. */
.chameleon-offers-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:10px}
@media(max-width:1100px){.chameleon-offers-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.chameleon-offers-grid{grid-template-columns:1fr}}
.chameleon-offer-card{display:flex;flex-direction:column;background:linear-gradient(180deg,var(--card),var(--bg-secondary));border:1px solid var(--border);border-radius:var(--radius);padding:26px 22px;transition:transform .25s,border-color .25s,box-shadow .25s}
.chameleon-offer-card:hover{transform:translateY(-5px);border-color:rgba(0,201,200,.5);box-shadow:0 18px 40px rgba(0,0,0,.35)}
.chameleon-offer-card svg{width:38px;height:38px;margin-bottom:14px}
.chameleon-offer-card h3{font-size:1.16rem;margin:0 0 8px;color:var(--text-bright)}
.chameleon-offer-card p{color:var(--text-soft);font-size:.93rem;line-height:1.55;flex:1;margin:0 0 18px}
.chameleon-offer-price{padding-top:14px;border-top:1px solid var(--border);margin-bottom:16px}
.chameleon-offer-price span{display:block;font-size:.7rem;letter-spacing:.09em;text-transform:uppercase;color:var(--text-soft);margin-bottom:2px}
.chameleon-offer-price b{font-size:1.45rem;color:var(--text-bright);font-weight:800}
.chameleon-offer-price b small{font-size:.8rem;font-weight:600;color:var(--text-soft)}
.chameleon-offer-cta{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:transparent;border:1px solid var(--cyan);color:var(--cyan);font-family:var(--font-display);font-weight:700;font-size:13px;letter-spacing:.03em;padding:13px 22px;border-radius:999px;text-decoration:none;transition:background .2s ease,transform .2s ease}
.chameleon-offer-cta:hover{background:#00C9C8;color:var(--bg-main)}
.chameleon-offers-note{text-align:center;color:var(--text-soft);font-size:.93rem;margin-top:26px;line-height:1.6}
.chameleon-offers-note b{color:var(--text-bright)}

.chameleon-contact-info{display:flex;flex-direction:column;gap:12px;margin-top:26px}
.cds-contact-line{display:inline-flex;align-items:center;gap:13px;color:var(--text-bright);text-decoration:none;padding:13px 17px;border:1px solid rgba(255,255,255,.10);border-radius:12px;background:rgba(255,255,255,.03);transition:border-color .2s,transform .2s,background .2s;width:fit-content;max-width:100%}
.cds-contact-line:hover{border-color:rgba(0,201,200,.55);background:rgba(0,201,200,.07);transform:translateX(3px)}
.cds-contact-line svg{width:21px;height:21px;flex:none}
.cds-contact-line span{display:flex;flex-direction:column;font-weight:700;font-size:1.02rem;line-height:1.3}
.cds-contact-line span small{font-weight:600;font-size:.7rem;letter-spacing:.09em;text-transform:uppercase;color:var(--text-soft);margin-bottom:2px}
.cds-contact-meta{color:var(--text-soft);font-size:.88rem;margin-top:4px}
@media(max-width:600px){.cds-contact-line{width:100%}.cds-contact-line span{font-size:.95rem;word-break:break-word}}


/* === cds-a11y-touch2 : cibles tactiles des colonnes du pied de page (WCAG 2.5.8) ===
   Les liens Navigation / Offres faisaient 18 px de haut, sous le minimum de 24 px. */
.chameleon-footer-nav a{display:inline-block;padding:3px 0}

/* ==========================================================================
   cds-fonts-local — polices auto-hébergées (2 août 2026)
   Remplace la feuille distante fonts.googleapis.com : plus aucune connexion
   tierce avant le premier rendu, et plus aucune IP visiteur transmise à Google.
   Fichiers déposés par Apparence → Polices, sous-ensemble latin uniquement
   (suffisant pour le français et l'anglais).
   ========================================================================== */

/* Un seul fichier par famille : Sora et Inter sont des polices VARIABLES.
   Verifie le 19 aout 2026 : les 5 fichiers sora-*-latin.woff2 ont la meme
   empreinte SHA-256 (811e11966d29...), et les 4 inter-*-latin.woff2 aussi
   (3100e775e861...). Google sert un fichier variable unique par famille ;
   il avait ete telecharge une fois par graisse puis renomme, d'ou 3 fois
   le meme fichier telecharge sur une seule page. Largeurs d avance mesurees
   identiques au centieme sur les 9 graisses (Sora 400-800, Inter 400-700).
   Gain mesure sur l accueil : 256 432 -> 108 068 octets.
   Rollback : redeclarer une regle par graisse vers son propre fichier ;
   les 11 fichiers restent en place dans uploads/fonts/. */
@font-face {
  font-family: 'Sora';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('/wp-content/uploads/fonts/sora-400-latin.woff2') format('woff2');
}

@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/wp-content/uploads/fonts/inter-400-latin.woff2') format('woff2');
}

@font-face {
  font-family: 'Space Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/wp-content/uploads/fonts/space-mono-400-latin.woff2') format('woff2');
}

@font-face {
  font-family: 'Space Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/wp-content/uploads/fonts/space-mono-700-latin.woff2') format('woff2');
}

/* Polices de repli calibrees — reduction du decalage au basculement (CLS).
   Mesure du 19 aout 2026, texte temoin de 113 caracteres rendu a 100px :
     Arial / Helvetica / Liberation Sans : largeur 5802,637 asc 91 desc 21
     Sora 700                            : largeur 6605,024 asc 97 desc 29
     Inter 400                           : largeur 6098,389 asc 97 desc 24
   size-adjust = largeur police web / largeur police de repli.
   ascent-override et descent-override = metrique de la police web / size-adjust,
   pour que la boite du repli occupe exactement la place de la police finale.
   Sora est calibree sur la graisse 700 (les titres, coupables identifies du CLS),
   Inter sur la graisse 400 (le texte courant).
   Rollback : supprimer ces deux regles et retirer les deux noms de repli des
   piles --font-display et --font-body. */
@font-face {
  font-family: 'Sora Fallback';
  src: local('Arial'), local('Helvetica'), local('Liberation Sans'), local('Arimo');
  size-adjust: 113.83%;
  ascent-override: 85.22%;
  descent-override: 25.48%;
  line-gap-override: 0%;
}

@font-face {
  font-family: 'Inter Fallback';
  src: local('Arial'), local('Helvetica'), local('Liberation Sans'), local('Arimo');
  size-adjust: 105.10%;
  ascent-override: 92.30%;
  descent-override: 22.84%;
  line-gap-override: 0%;
}

/* ==========================================================================
   cds-cookiebanner — bandeau de consentement à la charte (3 août 2026)
   Complianz expose ses couleurs en variables CSS « --cmplz_* » : on les
   redéfinit plutôt que de lutter contre ses sélecteurs.

   ⚠️ « Accepter » et « Refuser » ont volontairement le MÊME poids visuel.
      La CNIL exige que refuser soit aussi simple qu'accepter ; deux boutons
      strictement identiques ferment le débat. Ne pas mettre l'un en avant.
   ========================================================================== */

#cmplz-cookiebanner-container .cmplz-cookiebanner {
	--cmplz_banner_background_color: var(--card);
	--cmplz_banner_border_color: var(--border);
	--cmplz_banner_border_width: 1px;
	--cmplz_banner_border_radius: var(--radius);
	--cmplz_text_color: var(--text);
	--cmplz_hyperlink_color: var(--cyan);
	--cmplz_button_border_radius: 999px;

	--cmplz_button_accept_background_color: transparent;
	--cmplz_button_accept_border_color: var(--cyan);
	--cmplz_button_accept_text_color: var(--cyan);

	--cmplz_button_deny_background_color: transparent;
	--cmplz_button_deny_border_color: var(--cyan);
	--cmplz_button_deny_text_color: var(--cyan);

	--cmplz_button_settings_background_color: transparent;
	--cmplz_button_settings_border_color: transparent;
	--cmplz_button_settings_text_color: var(--text-muted);

	font-family: var(--font-body);
	box-shadow: 0 18px 40px rgba(0, 0, 0, .45);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-title {
	font-family: var(--font-display);
	color: var(--text);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-message,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-description {
	color: var(--text-muted);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn {
	min-height: 44px;
	font-weight: 600;
	border: 1px solid transparent;
	transition: background-color .18s ease, color .18s ease, transform .18s ease;
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-accept,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-deny {
	border-color: var(--cyan);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-accept:hover,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-deny:hover,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-accept:focus-visible,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-deny:focus-visible {
	background-color: var(--cyan);
	color: var(--bg-main);
	transform: translateY(-2px);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-view-preferences:hover,
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn.cmplz-save-preferences:hover {
	color: var(--text);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-close {
	width: 44px;
	height: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--text-muted);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-close:hover {
	color: var(--cyan);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-divider {
	background-color: var(--border);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-link,
#cmplz-cookiebanner-container .cmplz-cookiebanner a {
	color: var(--cyan);
}

#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-category {
	accent-color: var(--cyan);
}

/* Typographie : les boutons Complianz retombaient sur la pile systeme */
#cmplz-cookiebanner-container .cmplz-cookiebanner,
#cmplz-cookiebanner-container .cmplz-cookiebanner p,
#cmplz-cookiebanner-container .cmplz-cookiebanner li { font-family: var(--font-body) !important; }
#cmplz-cookiebanner-container .cmplz-cookiebanner .cmplz-btn,
#cmplz-manage-consent .cmplz-btn { font-family: var(--font-display) !important; }

/* Bouton flottant "Gerer le consentement" : seul element blanc du site avant ce lot.
   Les !important sont imposes par les styles Complianz eux-memes, deja en !important.
   Aucun comportement Complianz n'est modifie : apparence uniquement. */
#cmplz-manage-consent .cmplz-btn.cmplz-manage-consent {
	background: var(--card) !important;
	color: var(--text-soft) !important;
	border: 1px solid var(--border) !important;
	border-radius: 999px !important;
	font-weight: 700 !important;
	font-size: 13px !important;
	letter-spacing: .03em;
	padding: 10px 18px !important;
	box-shadow: 0 10px 28px -14px rgba(0,0,0,.7);
	transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}
#cmplz-manage-consent .cmplz-btn.cmplz-manage-consent:hover {
	background: rgba(0,201,200,.12) !important;
	color: var(--cyan) !important;
	border-color: rgba(0,201,200,.55) !important;
}
#cmplz-manage-consent .cmplz-btn.cmplz-manage-consent:focus-visible {
	outline: 2px solid var(--cyan);
	outline-offset: 3px;
}

/* Zone cliquable du logo alignee sur l image (l ancre etait en display:inline) */
.site-logo a { display: inline-block; }
/* Lot 9H-B : le logo recadre (1180x420) ne porte plus que 8% de marge transparente,
   la largeur desktop de 190px fixee par GeneratePress convient donc aussi en dessous.
   Seule la bande 769-1024px reste a l etroit : la navigation desktop complete y demarre
   juste apres la boite du logo. En dessous de 769px le menu passe en hamburger et l air
   revient, aucune reduction n y est necessaire. */
/* Lot 9I-B0 : le header doit tenir sur une seule ligne jusqu'au passage en hamburger (<=768px).
   Compression progressive et lineaire entre 1024px (valeurs de reference) et 769px (les plus resserrees) :
   padding du conteneur 40->20px, padding des liens 17->9px, logo 155->120px,
   police de navigation 15->13.5px, chip de langue 10->6px, gouttiere avant FR/EN 14->8px.
   Borne basse a 768.02px et non 769px : le hamburger GeneratePress s'active a max-width:768px ;
   une largeur de viewport fractionnaire (zoom navigateur) tombait sinon dans un trou ou la
   navigation desktop complete s'affichait sans cette compression.
   Les deux !important ne sont pas des contournements de specificite : ils sont imposes par les
   regles #site-navigation .lang-item a et #site-navigation li.lang-item-fr, deja en !important plus haut. */
@media (min-width: 768.02px) and (max-width: 1024px){
  .site-header .header-image{ width: calc(13.725vw + 14.45px); }
  .site-header .inside-header{ padding-left: calc(7.843vw - 40.31px); padding-right: calc(7.843vw - 40.31px); }
  .main-navigation .main-nav ul li a{ padding-left: calc(3.137vw - 15.13px); padding-right: calc(3.137vw - 15.13px); font-size: calc(0.588vw + 8.98px); }
  #site-navigation .lang-item a{ padding: 5px calc(1.569vw - 6.06px) !important; }
  #site-navigation li.lang-item-fr{ margin-left: calc(2.353vw - 10.09px) !important; }
}

/* Lot 9D3.2 — cartes projets : lien d'etude de cas ancre en bas de carte */
.cds-block.cds-projet{ display: flex; flex-direction: column; }
.cds-block.cds-projet > p:last-child{ margin-top: auto; }

/* Lot 9D4 — page Maintenance : checklist scannable et encadre de transition */
.cds-block ul.cds-checklist li{ display: flex; gap: 12px; align-items: flex-start; padding: 14px 2px; border-top: 1px solid var(--border); }
.cds-block ul.cds-checklist li:first-child{ border-top: 0; padding-top: 6px; }
.cds-block ul.cds-checklist li:last-child{ padding-bottom: 6px; }
.cds-block ul.cds-checklist li::before{ content: none; }
.cds-block ul.cds-checklist li svg{ flex: 0 0 auto; margin-top: 3px; }
.cds-block ul.cds-checklist b{ display: block; font-family: var(--font-display); font-size: 0.98rem; color: var(--text); margin-bottom: 3px; }
.cds-block ul.cds-checklist span{ display: block; color: var(--text-muted); }
.cds-block.cds-callout{ border-left: 3px solid var(--cyan); }
.cds-block.cds-callout p + p{ margin-top: 12px; }

/* Micro-lot — lien secondaire des cartes d'offres */
.chameleon-offers-grid{ --cds-more-h: 40px; }
.cds-more{ align-self: flex-start; display: inline-flex; align-items: center; min-height: 32px; margin-top: 8px; font-size: 0.9rem; font-weight: 600; color: var(--cyan); text-decoration: none; text-underline-offset: 3px; }
.cds-more:hover{ text-decoration: underline; }
.cds-more:focus-visible{ text-decoration: underline; outline: 2px solid var(--cyan); outline-offset: 3px; border-radius: 4px; }
@media (min-width: 1101px){ .chameleon-offer-card:not(:has(.cds-more)) .chameleon-offer-cta{ margin-bottom: var(--cds-more-h); } }

/* ==========================================================================
   Lot 9F2C - Schema vertical d'un site One Page (page /site-one-page/)
   Diagramme HTML/CSS, aucun asset, aucune image.
   ========================================================================== */
.cds-structure{ display: grid; grid-template-columns: 1fr; gap: 22px; margin: 18px 0 22px; }
@media (min-width: 1000px){ .cds-structure{ grid-template-columns: minmax(0, 1fr) 296px; align-items: start; } }
@media (min-width: 1000px){ .cds-pagemap{ margin: 0; max-width: none; } }
.cds-pagemap{ margin: 0 auto; max-width: 340px; }
.cds-pagemap-frame{ background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px; display: flex; flex-direction: column; gap: 7px; }
.cds-pagemap-top{ display: flex; align-items: center; gap: 6px; padding: 2px 3px 10px; border-bottom: 1px solid var(--border); }
.cds-pagemap-top span{ display: block; width: 26px; height: 6px; border-radius: 3px; background: rgba(255,255,255,.18); }
.cds-pagemap-top span:first-child{ width: 38px; background: var(--cyan); opacity: .75; margin-right: auto; }
.cds-pagemap-row{ border: 1px solid var(--border); border-radius: 10px; padding: 9px 11px; background: rgba(255,255,255,.02); }
.cds-pagemap-row b{ display: block; font-family: var(--font-display); font-size: .66rem; letter-spacing: .06em; text-transform: uppercase; color: var(--cyan); }
.cds-pagemap-line{ display: block; height: 5px; border-radius: 3px; background: rgba(255,255,255,.13); margin-top: 6px; }
.cds-pagemap-line + .cds-pagemap-line{ width: 68%; }
.cds-pagemap-cta{ display: block; width: 76px; height: 12px; border-radius: 999px; background: var(--lime); margin-top: 9px; }
.cds-pagemap-cols{ display: flex; gap: 6px; margin-top: 7px; }
.cds-pagemap-cols span{ flex: 1 1 0; height: 24px; border-radius: 5px; background: rgba(255,255,255,.05); border: 1px solid var(--border); }
.cds-pagemap-row.is-hero{ border-color: rgba(0,201,200,.34); }
.cds-pagemap-row.is-contact{ border-color: rgba(168,230,29,.30); }
.cds-pagemap figcaption{ margin-top: 10px; color: var(--text-muted); font-size: .82rem; line-height: 1.45; text-align: center; }

/* ==========================================================================
   Lot 9F3B - Page /site-vitrine/
   1. .cds-arbo : schema d architecture multi-pages. HTML/CSS pur, aucun asset.
      Desktop  (>= 1000px) : arborescence horizontale, un rail, cinq branches.
      Tablette (640-999px) : architecture verticale, sous-pages en ligne.
      Mobile   (< 640px)   : architecture verticale, sous-pages empilees.
   2. .cds-proc : bande de processus en six temps, etape cle accentuee.
   ========================================================================== */

.cds-arbo{ margin: 22px 0; }
.cds-arbo-node{ background: var(--bg-secondary); border: 1px solid var(--border); border-radius: 9px; padding: 9px 10px; font-family: var(--font-display); font-size: .8rem; line-height: 1.25; color: var(--text); text-align: center; }
.cds-arbo-root{ display: flex; justify-content: center; position: relative; padding-bottom: 22px; }
.cds-arbo-root .cds-arbo-node{ min-width: 168px; padding: 11px 20px; border-color: rgba(0,201,200,.45); }
.cds-arbo-root::after{ content: ""; position: absolute; left: 50%; bottom: 0; width: 1px; height: 22px; background: var(--border); }
.cds-arbo-branches{ display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
.cds-arbo-branch{ position: relative; padding-top: 22px; }
.cds-arbo-branch::before{ content: ""; position: absolute; top: 0; left: 50%; width: 1px; height: 22px; background: var(--border); }
.cds-arbo-branch::after{ content: ""; position: absolute; top: 0; left: -6px; right: -6px; height: 1px; background: var(--border); }
.cds-arbo-branch:first-child::after{ left: 50%; }
.cds-arbo-branch:last-child::after{ right: 50%; }
.cds-arbo-branch.is-future .cds-arbo-node{ border-style: dashed; color: var(--text-muted); }
.cds-arbo-leaves{ list-style: none; margin: 10px 0 0; padding: 0 0 0 14px; position: relative; }
.cds-arbo-leaves::before{ content: ""; position: absolute; left: 0; top: 0; bottom: 12px; width: 1px; background: var(--border); }
.cds-arbo-leaves li{ position: relative; padding: 3px 0 3px 12px; font-size: .78rem; color: var(--text-muted); }
.cds-arbo-leaves li::before{ content: ""; position: absolute; left: -14px; top: 50%; width: 14px; height: 1px; background: var(--border); }
.cds-arbo figcaption{ margin-top: 16px; color: var(--text-muted); font-size: .82rem; line-height: 1.45; text-align: center; }

@media (max-width: 999px){
  .cds-arbo-root{ justify-content: flex-start; padding-bottom: 0; }
  .cds-arbo-root::after{ left: 24px; bottom: -18px; height: 18px; }
  .cds-arbo-branches{ display: block; position: relative; margin-top: 18px; padding-left: 48px; }
  .cds-arbo-branches::before{ content: ""; position: absolute; left: 24px; top: 0; bottom: 26px; width: 1px; background: var(--border); }
  .cds-arbo-branch{ padding-top: 0; margin-top: 10px; }
  .cds-arbo-branch:first-child{ margin-top: 0; }
  .cds-arbo-branch::before{ top: 20px; left: -24px; width: 24px; height: 1px; }
  .cds-arbo-branch::after{ content: none; }
  .cds-arbo-node{ text-align: left; max-width: 360px; }
  .cds-arbo figcaption{ text-align: left; }
}

@media (min-width: 640px) and (max-width: 999px){
  .cds-arbo-leaves{ display: flex; flex-wrap: wrap; column-gap: 24px; padding-left: 0; }
  .cds-arbo-leaves::before{ content: none; }
  .cds-arbo-leaves li{ padding-left: 14px; }
  .cds-arbo-leaves li::before{ left: 0; width: 8px; }
}

.cds-proc{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; margin: 18px 0 22px; background: var(--border); border: 1px solid var(--border); border-radius: 14px; overflow: hidden; }
.cds-proc-step{ background: var(--bg-secondary); padding: 16px 18px 18px; }
.cds-proc-step b{ display: block; font-family: "Space Mono", monospace; font-size: .72rem; letter-spacing: .08em; color: var(--text-muted); }
.cds-proc-step h3{ font-family: var(--font-display); font-size: .98rem; margin: 6px 0; color: #fff; }
.cds-proc-step p{ margin: 0; color: var(--text-muted); font-size: .9rem; line-height: 1.5; }
.cds-proc-step.is-key{ box-shadow: inset 0 2px 0 var(--cyan); }
.cds-proc-step.is-key b,
.cds-proc-step.is-key h3{ color: var(--cyan); }
@media (max-width: 900px){ .cds-proc{ grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px){ .cds-proc{ grid-template-columns: 1fr; } }


/* ==========================================================================
   Hero - composition futuriste. Implementation canonique unique.
   Plans du fond vers l avant : 1 fond sombre / 2 nuages / 3 brume /
   4 gradient de lisibilite / 5 halo / 6 anneaux CSS / 7 cameleon /
   8 enseigne / 9 contenu editorial.
   Anneaux en conic-gradient + mask, aucune image raster.
   Animations : transform et opacity uniquement, aucun JS.
   ========================================================================== */

.hero-bg{ position: absolute; inset: 0; z-index: 0; overflow: hidden; pointer-events: none; }
.hero-bg > span{ position: absolute; background-repeat: no-repeat; }
.hero-bg-photo{ inset: 0; background-image: url('https://chameleondigitalstudio.com/wp-content/uploads/2026/08/hero-lacanau-cyberpunk-clean.webp'); background-size: cover; background-position: 74% 64%; opacity: .9; }
.hero-bg-clouds{ inset: -5%; background-image: url('https://chameleondigitalstudio.com/wp-content/uploads/2026/08/hero-clouds-overlay-1500.webp'); background-size: cover; background-position: center top; opacity: .24; animation: heroDrift 130s ease-in-out infinite alternate; }
.hero-bg-fog{ inset: -5%; background-image: url('https://chameleondigitalstudio.com/wp-content/uploads/2026/08/hero-fog-overlay-1500.webp'); background-size: cover; background-position: center bottom; opacity: .20; animation: heroDrift 96s ease-in-out infinite alternate-reverse; }
.hero-bg-scrim{ inset: 0; background-image: linear-gradient(96deg, rgba(3,20,38,.97) 0%, rgba(3,20,38,.93) 30%, rgba(3,20,38,.64) 54%, rgba(3,20,38,.26) 78%, rgba(3,20,38,.36) 100%), linear-gradient(to bottom, rgba(3,20,38,.45) 0%, rgba(3,20,38,0) 26%, rgba(3,20,38,.74) 100%); }
@keyframes heroDrift{ from{ transform: translate3d(-1.6%, 0, 0); } to{ transform: translate3d(1.6%, 0, 0); } }

.hero-visual{ position: relative; width: 100%; max-width: 520px; margin: 0 auto; aspect-ratio: 1; }
.hero-glow{ position: absolute; left: 50%; top: 50%; translate: -50% -50%; width: 96%; aspect-ratio: 1; z-index: 0; background: url('https://chameleondigitalstudio.com/wp-content/uploads/2026/08/hero-chameleon-glow-700.webp') center/contain no-repeat; opacity: .42; }
.hero-orbits{ position: absolute; inset: 0; z-index: 1; pointer-events: none; }
/* Anneaux du hero. La geometrie est portee par un masque SVG inline : un trace
   vectoriel est reellement antialiase, contrairement aux arrets nets d un
   conic-gradient ou d un radial-gradient, qui etaient la cause du crenelage.
   La couleur reste portee par le fond de l element, degrade conique compris.
   viewBox 200x200 ; le rayon du trace est calibre pour que le trait occupe
   exactement la meme bande qu avant, de (rayon - epaisseur) a rayon.
   deep  : 102% / trait 1px   / 360 deg
   tech  :  88% / trait 1px   / 232 deg / tirets 2,4 deg pleins puis 6,6 deg vides
   main  :  98% / trait 2px   / 150 deg / degrade conique conserve tel quel
   amber :  72% / trait 1,5px /  58 deg
   lime  :  58% / trait 2px   /  34 deg */
.hero-orbit{ position: absolute; left: calc(50% + var(--dx, 0px)); top: calc(50% + var(--dy, 0px)); translate: -50% -50%; width: var(--d); aspect-ratio: 1; rotate: var(--from, 0deg); background: var(--c); -webkit-mask-image: var(--arc); mask-image: var(--arc); -webkit-mask-size: 100% 100%; mask-size: 100% 100%; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
.hero-orbit.is-deep{ --d: 102%; --c: rgba(0,201,200,.13); --dx: 12px; --dy: -16px; --arc: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Ccircle cx='100' cy='100' r='99.811' fill='none' stroke='black' stroke-width='1' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E"); }
.hero-orbit.is-tech{ --d: 88%; --c: rgba(0,201,200,.22); --dx: -28px; --dy: 18px; --from: 118deg; --arc: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cpath d='M100 0.219A99.781 99.781 0 1 1 21.371 161.431' fill='none' stroke='black' stroke-width='1' vector-effect='non-scaling-stroke' pathLength='232' stroke-dasharray='2.4 6.6'/%3E%3C/svg%3E"); animation: heroSpin 55s linear -37s infinite reverse; }
.hero-orbit.is-main{ --d: 98%; --dx: 14px; --dy: 22px; --from: 188deg; --arc: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cpath d='M79.29 2.569A99.608 99.608 0 0 1 149.804 186.263' fill='none' stroke='black' stroke-width='2' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E"); background: conic-gradient(from 0deg, rgba(0,201,200,0) 0deg, rgba(0,201,200,1) 44deg, rgba(0,201,200,.45) 118deg, rgba(0,201,200,0) 150deg, transparent 150deg), conic-gradient(from 0deg, rgba(0,201,200,.13) 0deg, rgba(0,201,200,0) 14deg, rgba(0,201,200,0) 348deg, rgba(0,201,200,.13) 360deg); animation: heroSpin 74s linear -38s infinite; }
.hero-orbit.is-amber{ --d: 72%; --dx: 54px; --dy: -48px; --from: -34deg; --arc: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cpath d='M100 0.401A99.599 99.599 0 0 1 196.64 75.905' fill='none' stroke='black' stroke-width='1.5' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E"); background: conic-gradient(from 0deg, rgba(255,146,74,.8) 0deg, rgba(255,146,74,.8) 46deg, rgba(255,146,74,.46) 56deg, rgba(255,146,74,.24) 62deg, rgba(255,146,74,.11) 68deg, rgba(255,146,74,0) 76deg); animation: heroSpin 90s linear -8s infinite reverse; }
.hero-orbit.is-lime{ --d: 58%; --dx: -58px; --dy: 44px; --from: 142deg; z-index: 3; --arc: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cpath d='M100 0.663A99.337 99.337 0 0 1 176.097 36.147' fill='none' stroke='black' stroke-width='2' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E"); background: conic-gradient(from 0deg, rgba(168,230,29,.78) 0deg, rgba(168,230,29,.78) 27deg, rgba(168,230,29,.44) 34deg, rgba(168,230,29,.22) 39deg, rgba(168,230,29,.10) 44deg, rgba(168,230,29,0) 50deg); animation: heroSpin 65s linear -39s infinite reverse; }
.hero-nodes{ position: absolute; inset: 0; z-index: 1; animation: heroSpin 104s linear infinite; }
.hero-nodes i{ position: absolute; left: 50%; top: 50%; width: 5px; height: 5px; border-radius: 50%; background: rgba(0,201,200,.85); transform: rotate(var(--a)) translateX(var(--r)); }
.hero-chameleon{ position: absolute; left: 50%; top: 50%; translate: -50% -50%; z-index: 2; width: 50%; aspect-ratio: 1; background: url('https://chameleondigitalstudio.com/wp-content/uploads/2026/08/hero-chameleon-canonique-900-768x768.webp') center/contain no-repeat; filter: drop-shadow(0 16px 30px rgba(0,0,0,.50)); }
@keyframes heroSpin{ from{ rotate: 0deg; } to{ rotate: 360deg; } }

@media (max-width: 900px){
  .hero-visual{ max-width: 420px; }
  .hero-chameleon{ width: 54%; }
  .hero-nodes,
  .hero-orbit.is-amber{ display: none; }
  .hero-bg-photo{ opacity: .5; background-position: 62% 60%; }
  .hero-bg-clouds{ opacity: .16; }
  .hero-bg-fog{ opacity: .12; }
  .hero-bg-scrim{ background-image: linear-gradient(to bottom, rgba(3,20,38,.88) 0%, rgba(3,20,38,.62) 42%, rgba(3,20,38,.92) 100%); }
}
@media (max-width: 640px){
  .chameleon-hero{ padding: 72px 0 0; }
  .chameleon-hero .chameleon-wrap{ gap: 28px; padding-bottom: 44px; }
  .hero-visual{ max-width: 300px; }
  .hero-chameleon{ width: 70%; }
  .hero-orbit.is-tech{ display: none; }
  .hero-bg-fog{ display: none; }
  .hero-bg-photo{ opacity: .34; background-position: 58% 58%; }
  .hero-bg-clouds{ display: none; }
}
@media (prefers-reduced-motion: reduce){
  .hero-orbit,
  .hero-nodes,
  .hero-bg-clouds,
  .hero-bg-fog{ animation: none; }
  .chameleon-hero h1,
  .chameleon-hero p,
  .chameleon-hero-actions{ animation: none; }
}


/* ---------- Focus clavier : anneau de marque unique ----------
   Aucun indicateur de focus n'est supprime ici ; ce bloc en ajoute un,
   coherent avec la charte, la ou seul l'anneau natif du navigateur existait.
   Lot 9J-D : la liste est completee pour couvrir 100 % des controles reellement
   focusables - lien du logo, lien d evitement, fleches et puces du carrousel,
   liens de capture, lignes de contact, liens inline du contenu, et l integralite
   de la banniere Complianz. Un seul systeme, un seul anneau, aucun !important :
   Complianz ne declare aucun outline concurrent. Aucun etat hover n est touche,
   aucune apparence normale n est modifiee. */
.chameleon-btn:focus-visible,
.cds-cta:focus-visible,
.chameleon-offer-cta:focus-visible,
.main-navigation .main-nav ul li a:focus-visible,
.chameleon-faq-item summary:focus-visible,
.chameleon-form input:focus-visible,
.chameleon-form select:focus-visible,
.chameleon-form textarea:focus-visible,
.chameleon-form button:focus-visible,
.chameleon-form [type="submit"]:focus-visible,
.chameleon-footer a:focus-visible,
.chameleon-case-info a:focus-visible,
.site-logo a:focus-visible,
.skip-link:focus-visible,
.chameleon-section a:focus-visible,
.chameleon-section button:focus-visible,
.chameleon-legal-wrap a:focus-visible,
.chameleon-carousel-arrow:focus-visible,
.chameleon-carousel-dot:focus-visible,
.chameleon-shot-link:focus-visible,
.cds-contact-line:focus-visible,
#cmplz-cookiebanner-container a:focus-visible,
#cmplz-cookiebanner-container button:focus-visible,
#cmplz-cookiebanner-container input:focus-visible,
#cmplz-cookiebanner-container .cmplz-close:focus-visible {
  outline: 2px solid var(--cyan);
  outline-offset: 3px;
  border-radius: 6px;
}


/* ---------- Lot 9J-B2 : hierarchie canonique des pages interieures ----------
   Portee : les 4 pages Offres et les 4 etudes de cas, et elles seules.
   Le discriminant est structurel, pas nominatif : ces 8 pages sont les seules
   dont .chameleon-legal-wrap porte un enfant direct .chameleon-commits.
   Les 6 pages juridiques utilisent le meme conteneur mais n'ont pas ce bloc :
   leur sobriete reste intacte. L'accueil n'utilise pas ce conteneur du tout.
   Aucune classe par page n'est creee.

   Les <h2> de ces pages sont tous des titres de section (categorie A du brief) :
   l'inventaire n'a trouve aucun <h2> a l'interieur d'une carte. Les titres
   internes de cartes sont des <h3> a 16 px : ils ne sont pas touches. */

.chameleon-legal-wrap:has(> .chameleon-commits) > h2{
	font-size: clamp(1.625rem, 1.502rem + 0.762vw, 2.25rem); /* 26 -> 36 px */
	line-height: 1.16;
	letter-spacing: -0.005em;
	margin-top: clamp(40px, 1.875rem + 2.6vw, 64px);
	margin-bottom: 18px;
}
/* premier titre de contenu : il suit deja le bloc d'introduction, on evite la double respiration */
.chameleon-legal-wrap:has(> .chameleon-commits) > .chameleon-commits + h2,
.chameleon-legal-wrap:has(> .chameleon-commits) > .cds-tags + h2{
	margin-top: clamp(34px, 1.5rem + 2.2vw, 52px);
}

/* Etudes de cas : aucune signature decorative dans l'introduction.
   Lot 9J-B2.1, correction de perimetre du 25/08/2026 : le camelon decoratif
   place a droite du H1, ses arcs SVG, son halo et l'espace vertical qui lui
   etait reserve sur mobile ont ete entierement retires des quatre etudes de
   cas. Aucune illustration de remplacement : l'introduction respire.
   Le fond continu (voile neutralise en contexte boite) est conserve, il est
   defini plus bas. Aucun autre camelon du site n'est touche : hero d'accueil,
   logo header, logo footer, favicon et Site Icon sont hors de portee de ce
   selecteur, qui n'existe plus. */

/* Captures clientes : seul le cadre respire davantage.
   L'image n'est ni recadree, ni recoloree, ni deformee, ni reconstruite. */
.chameleon-legal-wrap:has(> .chameleon-commits) > .cds-case-img{
	margin-top: 34px; margin-bottom: 34px;
	box-shadow: 0 24px 60px -20px rgba(0,0,0,.55);
}


/* ---------- Fond continu des pages interieures ----------
   CAUSE DE LA COUTURE VERTICALE, identifiee a la source et mesuree :
   .chameleon-section.is-main::after est un voile cyan de 420 px de haut ancre sur
   la boite de la section (top:0; left:0; right:0).
   - Accueil : sections pleine largeur (1421 px mesures a 1440) -> le voile couvre
     tout l'ecran, aucune couture possible.
   - Pages interieures : la section est contrainte a 1200 px par le conteneur de
     contenu de GeneratePress (mesure : x 149 -> 1349 dans un viewport de 1516 px).
     Le voile s'arretait donc net aux deux bords de cette boite, contre le fond du
     body reste sans voile : deux lignes verticales franches, d'ou l'impression de
     deux blocs juxtaposes.
   Correction a la source : le voile est neutralise dans le seul contexte encadre.
   Aucune couche n'est ajoutee par-dessus, aucun masque de rattrapage.
   L'accueil n'entre pas dans ce selecteur : ses sections n'ont pas d'enfant
   direct .chameleon-legal-wrap. */
.chameleon-section.is-main:has(> .chameleon-legal-wrap)::after{ background: none; }


/* ---------- Lot 9I-F4 : allegement de la mise en page initiale, mobile ----------
   Mesure A/B en trace Chrome (viewport 400 px, CPU x4, Slow 4G, cache desactive,
   mediane de 3 traces par variante) :
     LCP                   3562 ms -> 2377 ms   (-1185 ms, -33 %)
     Element render delay  1308 ms ->  204 ms   (-1104 ms, -84 %)
     TTFB, load delay et load duration : inchanges.
   Le gain ne vient donc pas du reseau mais du travail de mise en page initial.
   Les cinq sections ciblees sont integralement sous la ligne de flottaison :
   leur sous-arbre, soit 218 noeuds sur les 647 du document (34 %), n est plus
   mis en page au premier rendu.

   Portee volontairement limitee a max-width: 600px. C est la seule largeur ou le
   gain a ete mesure ; au-dela le score est deja de 98 et rien ne justifie d y
   prendre un risque. Le hero, le header, le marquee et #a-propos sont exclus.

   contain-intrinsic-size porte sur la boite de CONTENU : le padding vertical de
   128 px de chaque section s ajoute par-dessus. Les valeurs ci-dessous sont donc
   les hauteurs mesurees a 390 px moins ce padding. Elles sont prises a mi-chemin
   entre le francais et l anglais, dont les hauteurs different jusqu a 160 px :
   l ecart residuel sur la hauteur du document est de -76 px en FR et +93 px en EN,
   soit moins de 1 %. Le mot-cle auto fait que cette valeur ne sert qu au tout
   premier rendu : ensuite le navigateur memorise la hauteur reelle.

   Rollback : supprimer ce bloc, il est autonome et ne modifie aucune autre regle. */
@media (max-width: 600px){
	#services,
	#methode,
	#realisations,
	#faq,
	#contact{ content-visibility: auto; }

	#services{ contain-intrinsic-size: auto 1960px; }
	#methode{ contain-intrinsic-size: auto 554px; }
	#realisations{ contain-intrinsic-size: auto 1430px; }
	#faq{ contain-intrinsic-size: auto 1020px; }
	#contact{ contain-intrinsic-size: auto 1480px; }
}

/* --------------------------------------------------------------
 * Sous-menus de la navigation principale.
 * Le theme enfant n'avait jamais style de sous-menu : sans ces
 * regles, GeneratePress applique un fond gris clair (#f0f0f0)
 * sous des liens blancs, donc illisible.
 * Tout est porte par ul.sub-menu : ces regles n'ont aucun effet
 * tant qu'aucun sous-menu n'existe dans le menu.
 * ------------------------------------------------------------ */

/*
 * L'en-tete porte un backdrop-filter, qui cree un contexte
 * d'empilement : sans z-index explicite, le hero se peint par-dessus
 * et masque les deux tiers bas du panneau deroulant. Mesure : les
 * points bas du sous-menu renvoyaient SECTION.chameleon-hero.
 * La valeur reste tres inferieure au 99999 du bandeau Complianz,
 * qui doit continuer de passer devant.
 */
.site-header {
	z-index: 100;
}

/* A partir de 769 px le menu complet est affiche : le sous-menu est
   un panneau flottant, calque sur l'en-tete (fond sombre translucide,
   flou, filet a 14 %). */
@media (min-width: 769px) {
	.main-navigation .main-nav ul ul.sub-menu {
		min-width: 240px;
		background-color: rgba(3, 20, 38, 0.96);
		-webkit-backdrop-filter: blur(10px);
		backdrop-filter: blur(10px);
		border: 1px solid var(--border);
		border-radius: 14px;
		padding: 6px 0;
		overflow: hidden;
	}
}

/* Liens du sous-menu, dans les deux contextes. */
.main-navigation .main-nav ul ul.sub-menu li a {
	color: var(--text);
	background-color: transparent;
	font-size: 15px;
	line-height: 1.4;
	padding: 10px 20px;
	white-space: normal;
}

.main-navigation .main-nav ul ul.sub-menu li a:hover,
.main-navigation .main-nav ul ul.sub-menu li a:focus,
.main-navigation .main-nav ul ul.sub-menu li.current-menu-item > a {
	color: var(--cyan);
	background-color: rgba(255, 255, 255, 0.06);
}

/* Jusqu'a 768 px le menu est un panneau deplie : pas de surface
   flottante, seulement un retrait et un filet vertical. */
@media (max-width: 768px) {
	.main-navigation .main-nav ul ul.sub-menu {
		background-color: transparent;
		border: 0;
		border-left: 1px solid var(--border);
		border-radius: 0;
		margin-left: 20px;
		padding: 0;
	}

	.main-navigation .main-nav ul ul.sub-menu li a {
		padding-top: 12px;
		padding-bottom: 12px;
	}
}

/* --------------------------------------------------------------
 * Chevron du sous-menu.
 * GeneratePress insere un SVG de 1em dans .dropdown-menu-toggle,
 * dont le dessin et l'alignement ne suivent pas le reste de
 * l'interface. On le masque et on trace un chevron en CSS.
 * ------------------------------------------------------------ */
.main-navigation .dropdown-menu-toggle {
	position: relative;
	padding: 0 14px 0 8px;
	color: var(--text);
}

.main-navigation .dropdown-menu-toggle .gp-icon {
	display: none;
}

.main-navigation .dropdown-menu-toggle::after {
	content: "";
	position: absolute;
	top: 50%;
	left: 8px;
	width: 7px;
	height: 7px;
	border-right: 1.5px solid currentColor;
	border-bottom: 1.5px solid currentColor;
	color: rgba(255, 255, 255, 0.62);
	transform: translateY(-70%) rotate(45deg);
	transition: color 0.15s ease-in-out;
}

/* Survol, focus clavier, et sous-menu ouvert : GeneratePress pose
   aria-expanded sur la bascule et .sfHover sur l'element parent. */
.main-navigation li.menu-item-has-children:hover > a .dropdown-menu-toggle::after,
.main-navigation li.menu-item-has-children:focus-within > a .dropdown-menu-toggle::after,
.main-navigation li.sfHover > a .dropdown-menu-toggle::after,
.main-navigation .dropdown-menu-toggle[aria-expanded="true"]::after {
	color: var(--cyan);
}

/* --------------------------------------------------------------
 * Section A propos : mise en page en trois rangees a partir de
 * 769 px. Le bloc identite occupait la seule colonne de droite, ce
 * qui l'allongeait et laissait un vide sous le titre a gauche.
 *
 * Ces regles supposent que .cds-identite et .chameleon-commits sont
 * des enfants directs de .chameleon-split. Tant qu'ils restent
 * imbriques dans la colonne de droite, aucune ne s'applique.
 *
 * Le point de bascule est 900 px, et non 769 : c'est a partir de
 * cette largeur que .chameleon-split passe lui-meme en deux
 * colonnes, verifie par mesure. Aligner les deux evite une rangee
 * a deux colonnes posee dans une section qui n'en a qu'une.
 * ------------------------------------------------------------ */
@media (min-width: 900px) {
	#a-propos .chameleon-split > .cds-identite {
		grid-column: 1 / -1;
		display: grid;
		grid-template-areas: none;
		grid-template-columns: 3fr 5fr;
		column-gap: 60px;
		align-items: start;
		margin-top: 0;
		padding-top: 34px;
	}

	#a-propos .chameleon-split > .cds-identite > .cds-id-carte {
		grid-area: auto;
		display: flex;
		gap: 20px;
		align-items: center;
	}

	#a-propos .chameleon-split > .cds-identite .cds-id-photo,
	#a-propos .chameleon-split > .cds-identite .cds-id-tete,
	#a-propos .chameleon-split > .cds-identite .cds-id-bio {
		grid-area: auto;
	}

	#a-propos .chameleon-split > .cds-identite .cds-id-bio {
		max-width: none;
	}

	#a-propos .chameleon-split > .chameleon-commits {
		grid-column: 1 / -1;
		justify-content: space-between;
		width: 100%;
	}
}

/* Entre 769 et 1199 px la colonne de gauche est trop etroite pour
   un portrait de 160 px : il ne resterait que 150 px au nom, qui en
   demande 186 sur une ligne. Le portrait passe donc a 120 px. */
@media (min-width: 900px) and (max-width: 1199.98px) {
	#a-propos .chameleon-split > .cds-identite .cds-id-photo {
		width: 120px;
		height: 120px;
	}

	#a-propos .chameleon-split > .cds-identite > .cds-id-carte {
		gap: 18px;
	}
}

/* Jusqu'a 900 px, disposition mobile inchangee : portrait de 80 px
   a gauche du nom, texte dessous sur toute la largeur. La taille du
   portrait est reaffirmee ici parce que la regle generale du bloc
   passe a 160 px des 769 px.
   La borne est ecrite 899.98 et non 899 : la largeur de fenetre
   peut etre fractionnaire, et un couple 899 / 900 laisse une zone
   morte ou aucune des deux requetes ne s'applique. Mesure a l'appui :
   a 899,5 px les deux renvoyaient faux. */
@media (max-width: 899.98px) {
	#a-propos .chameleon-split > .cds-identite {
		display: grid;
		grid-template-areas: none;
		grid-template-columns: 1fr;
		row-gap: 16px;
	}

	#a-propos .chameleon-split > .cds-identite .cds-id-photo {
		width: 80px;
		height: 80px;
	}

	#a-propos .chameleon-split > .cds-identite > .cds-id-carte {
		grid-area: auto;
		display: flex;
		gap: 16px;
		align-items: center;
	}

	#a-propos .chameleon-split > .cds-identite .cds-id-photo,
	#a-propos .chameleon-split > .cds-identite .cds-id-tete,
	#a-propos .chameleon-split > .cds-identite .cds-id-bio {
		grid-area: auto;
	}
}

/* --------------------------------------------------------------
 * Bloc identite de la section A propos.
 *
 * Une seule grille, deux dispositions.
 * A partir de 769 px : le portrait occupe la colonne de gauche sur
 * les deux rangees, le nom et le texte se suivent a droite.
 * Jusqu'a 768 px : le portrait passe a 80 px et reste a gauche du
 * nom et de la fonction, le texte revient dessous sur toute la
 * largeur. Le portrait seul au-dessus allongeait le bloc et lui
 * donnait un aspect de fiche CV.
 *
 * Ces regles ne s'appliquent que si un element .cds-identite existe.
 * ------------------------------------------------------------ */
.cds-identite {
	display: grid;
	grid-template-columns: 160px 1fr;
	grid-template-areas:
		"photo tete"
		"photo bio";
	column-gap: 26px;
	row-gap: 12px;
	align-items: start;
	margin-top: 30px;
	padding-top: 30px;
	border-top: 1px solid var(--border);
}

.cds-identite .cds-id-photo {
	grid-area: photo;
	width: 160px;
	height: 160px;
	border-radius: 16px;
	object-fit: cover;
	display: block;
}

.cds-identite .cds-id-tete {
	grid-area: tete;
}

.cds-identite .cds-id-nom {
	font-family: var(--font-display);
	font-weight: 700;
	font-size: 1.18rem;
	line-height: 1.25;
	color: var(--text);
	margin: 0 0 3px;
}

.cds-identite .cds-id-role {
	font-family: var(--font-body);
	font-size: 0.85rem;
	line-height: 1.4;
	color: var(--cyan);
	margin: 0;
}

.cds-identite .cds-id-bio {
	grid-area: bio;
	font-family: var(--font-body);
	font-size: 0.96rem;
	line-height: 1.62;
	color: var(--text-muted);
	margin: 0;
	max-width: 62ch;
}

@media (max-width: 768px) {
	.cds-identite {
		grid-template-columns: 80px 1fr;
		grid-template-areas:
			"photo tete"
			"bio   bio";
		column-gap: 16px;
		row-gap: 16px;
		align-items: center;
		margin-top: 24px;
		padding-top: 24px;
	}

	.cds-identite .cds-id-photo {
		width: 80px;
		height: 80px;
		border-radius: 12px;
	}

	.cds-identite .cds-id-nom {
		font-size: 1.05rem;
	}

	.cds-identite .cds-id-role {
		font-size: 0.8rem;
	}
}

/* ==========================================================================
   LOT C3-C — CADRE DU PORTRAIT ET EFFET DE SURVOL
   Le cadre reprend exactement la geometrie de la photo, aux memes points de
   rupture. Il porte le rayon et l'overflow ; la photo zoome a l'interieur.
   Ces regles restent inertes tant que <span class="cds-id-cadre"> n'entoure
   pas l'image dans le contenu des pages 6 et 83.
   ========================================================================== */

.cds-identite .cds-id-cadre {
	display: block;
	flex: 0 0 auto;
	overflow: hidden;
	line-height: 0;
	width: 160px;
	height: 160px;
	border-radius: 16px;
	transition: box-shadow 0.22s ease-out;
}

.cds-identite .cds-id-cadre .cds-id-photo {
	width: 100%;
	height: 100%;
	border-radius: 0;
	display: block;
	transition: transform 0.22s ease-out;
}

#a-propos .chameleon-split > .cds-identite .cds-id-cadre .cds-id-photo {
	width: 100%;
	height: 100%;
}

@media (min-width: 900px) and (max-width: 1199.98px) {
	#a-propos .chameleon-split > .cds-identite .cds-id-cadre {
		width: 120px;
		height: 120px;
	}
}

@media (max-width: 899.98px) {
	#a-propos .chameleon-split > .cds-identite .cds-id-cadre {
		width: 80px;
		height: 80px;
	}
}

@media (max-width: 768px) {
	.cds-identite .cds-id-cadre {
		width: 80px;
		height: 80px;
		border-radius: 12px;
	}
}

@media (hover: hover) and (pointer: fine) {
	.cds-identite .cds-id-cadre:hover {
		box-shadow: 0 0 0 1px rgba(0, 201, 200, 0.55), 0 8px 26px -6px rgba(0, 201, 200, 0.3);
	}

	.cds-identite .cds-id-cadre:hover .cds-id-photo {
		transform: scale(1.025);
	}
}

@media (prefers-reduced-motion: reduce) {
	.cds-identite .cds-id-cadre .cds-id-photo {
		transition: none;
	}

	.cds-identite .cds-id-cadre:hover .cds-id-photo {
		transform: none;
	}
}

/* ==========================================================================
   LOT C3-D — LIGNE DES TROIS ENGAGEMENTS
   Regroupe les trois elements au centre, sous le bloc identite, au lieu de les
   etirer d'un bord a l'autre. Bornee a #a-propos et a 900 px et au-dela :
   le comportement mobile n'est pas touche.
   ========================================================================== */

@media (min-width: 900px) {
	#a-propos .chameleon-split > .chameleon-commits {
		justify-content: center;
		max-width: 800px;
		margin-top: 0;
		margin-left: auto;
		margin-right: auto;
		gap: 44px;
		row-gap: 16px;
	}

	#a-propos .chameleon-split > .chameleon-commits .chameleon-commit {
		font-size: 14px;
		font-weight: 600;
	}

	#a-propos .chameleon-split > .chameleon-commits .chameleon-commit::before {
		width: 6px;
		height: 6px;
	}
}
