/* ============================================================
   02 — LAYOUT
   Structure commune à toutes les pages : en-tête/navigation,
   pied de page, gabarit générique de section. Ce fichier ne
   contient aucun style propre à une page en particulier.
   ============================================================ */

/* ---------- NAV ----------
   Invisible et inerte au chargement — n'apparaît qu'au scroll, pour
   laisser le hero plein écran respirer sans rien au-dessus. La classe
   .scrolled (ajoutée par js/main.js) la fait apparaître avec un fond
   opaque. Sur une page sans bandeau sombre (ex. 404), .scrolled est
   appliquée dès le chargement — la nav y est visible immédiatement. */
header.site{
  position:fixed; top:-100px; left:0; right:0; z-index:100;
  background:rgba(0,15,159,0.94); /* var(--ink) — pas de rgba() sur une custom property */
  backdrop-filter:blur(14px) saturate(140%);
  border-bottom:1px solid var(--ink-line);
  box-shadow:0 12px 32px -16px rgba(0,0,0,0.4);
  opacity:0;
  /* On anime `top` plutôt qu'un transform:translateY() : un transform
     sur cet ancêtre créerait un nouveau bloc englobant pour son
     descendant position:fixed (le panneau nav.links plein écran côté
     mobile), qui se retrouverait alors confiné à la petite boîte du
     header (~76px) au lieu de couvrir tout le viewport. `top` produit
     le même glissement sans cet effet de bord. Courbe cubic-bezier
     "decel" (même famille que la révélation de l'empreinte) pour une
     arrivée franche puis un ralenti en douceur — plus premium qu'un
     ease générique. */
  transition:top .6s cubic-bezier(.16,.7,.2,1), opacity .5s ease;
  will-change:top;
}
header.site.scrolled{
  top:0;
  opacity:1;
}
.nav{
  display:flex; align-items:center; justify-content:space-between;
  height:76px;
}
.wordmark{
  display:flex;
  align-items:center;
}
/* Lockup officiel (icône + mot-symbole + "Print your ID"), fichier
   unique de la charte plutôt qu'une composition manuelle en CSS —
   proportions et espacement garantis fidèles à assets/logo/. */
.wordmark-logo{ height:60px; width:auto; display:block; }
nav.links{ display:flex; align-items:center; gap:38px; }
/* :not(.btn) — le bouton "Discuter du projet" est aussi un <a> dans
   ce menu, mais c'est un bouton plein (.btn-brass), pas un lien de
   nav : il ne doit ni hériter de cette couleur claire (qui écrasait
   son texte indigo par du blanc sur blanc), ni du soulignement. */
nav.links a:not(.btn){
  font-size:13.5px;
  color:var(--text-light-dim);
  letter-spacing:0.02em;
  position:relative;
  padding:6px 0;
  transition:color .25s ease;
}
nav.links a:not(.btn):hover,
nav.links a:not(.btn)[aria-current="page"]{ color:var(--text-light); }
nav.links a:not(.btn)::after{
  content:""; position:absolute; left:0; right:0; bottom:0;
  height:1px; background:var(--indigo-lt);
  transform:scaleX(0); transform-origin:left;
  transition:transform .3s ease;
}
nav.links a:not(.btn):hover::after,
nav.links a:not(.btn)[aria-current="page"]::after{ transform:scaleX(1); }

.menu-toggle{
  display:none;
  background:none; border:none; cursor:pointer;
  width:32px; height:24px; position:relative;
}
.menu-toggle span{
  position:absolute; left:0; right:0; height:1.5px; background:var(--text-light);
  transition:transform .3s ease, opacity .3s ease;
}
.menu-toggle span:nth-child(1){ top:2px; }
.menu-toggle span:nth-child(2){ top:11px; }
.menu-toggle span:nth-child(3){ top:20px; }
.menu-toggle.open span:nth-child(1){ transform:translateY(9px) rotate(45deg); }
.menu-toggle.open span:nth-child(2){ opacity:0; }
.menu-toggle.open span:nth-child(3){ transform:translateY(-9px) rotate(-45deg); }

/* ---------- GABARIT DE SECTION ---------- */
section{ position:relative; }
.section-pad{ padding:120px 0; }
.section-pad-sm{ padding:80px 0; }

.section-head{
  max-width:640px;
  margin-bottom:64px;
}
.section-head .eyebrow{ color:var(--indigo); margin-bottom:20px; }
.section-head h2{
  font-size:clamp(28px, 3.4vw, 42px);
  color:var(--text-dark);
  line-height:1.16;
}
.section-head p{
  margin-top:20px;
  color:var(--text-dim);
  font-size:16px;
  max-width:52ch;
}
/* Variante sur fond indigo (ex. section Services) */
.section-head.on-dark h2{ color:var(--text-light); }
.section-head.on-dark .eyebrow{ color:var(--indigo-lt); }
.section-head.on-dark p{ color:var(--text-light-dim); }

/* Pied de section — renvoie vers la page/section suivante du parcours */
.section-foot{ margin-top:56px; }

/* ---------- FOOTER ----------
   Bloc de clôture complet (logo, nav, contact) au-dessus d'une barre
   fine (copyright, légal) — avant, le footer entier tenait dans cette
   seule barre, en net retrait par rapport au reste du site. */
footer{
  background:var(--ink);
  border-top:1px solid var(--ink-line);
  position:relative;
  overflow:hidden;
}
/* Même correctif que .hero .hero-content, .pillars > .container etc. :
   ignore le plafond de 1180px du .container partagé. */
footer > .container{
  max-width:none;
  width:100%;
  margin-left:0;
  margin-right:0;
  padding-left:var(--edge);
  padding-right:var(--edge);
  box-sizing:border-box;
}
/* Repositionnée en haut à droite, derrière la bande CTA : le grand
   wordmark (.footer-wordmark-wrap) devient la signature du bas, la
   petite empreinte ne doit plus lui disputer ce rôle. */
footer .fp-watermark{
  width:460px; height:460px;
  top:-140px; right:-120px; bottom:auto;
  animation:footer-fingerprint-breathe 8.5s cubic-bezier(.45,0,.55,1) infinite;
}
/* Défini ici (fichier chargé sur les 8 pages) plutôt que de réutiliser
   le keyframe du hero, propre à 06-home.css et absent ailleurs. */
@keyframes footer-fingerprint-breathe{
  0%, 100%{ transform:scale(1); }
  50%{ transform:scale(1.05); }
}

/* ---------- BANDE CTA ----------
   Premier bloc du footer : accroche + double appel à l'action (WhatsApp,
   email). Fait le pont entre le contenu de page et le bloc coordonnées. */
.footer-cta{
  position:relative; z-index:1;
  display:flex; align-items:flex-end; justify-content:space-between;
  gap:48px; flex-wrap:wrap;
  padding:88px 0 48px;
}
.footer-cta-text{ width:100%; max-width:560px; }
.footer-cta-text .eyebrow{ margin-bottom:20px; }
.footer-cta-text h2{
  font-size:clamp(30px, 3.6vw, 48px);
  line-height:1.14;
  color:var(--text-light);
}
.footer-cta-text h2 em{ font-style:italic; color:var(--indigo-lt); font-weight:500; }
.footer-cta-text p{
  margin-top:18px; color:var(--text-light-dim); font-size:15px; max-width:44ch;
}
.footer-cta-action{
  display:flex; flex-direction:column; align-items:flex-end; gap:16px;
  text-align:right;
}
.footer-cta-action .btn{ white-space:nowrap; }
.footer-cta-email{ font-size:14px; color:var(--text-light-dim); transition:color .25s ease; }
.footer-cta-email:hover{ color:var(--text-light); }

.footer-divider{
  position:relative; z-index:1;
  height:1px; background:var(--ink-line);
  padding:0 !important; /* .container en hérite, mais c'est une ligne, pas une boîte */
}

.footer-main{
  position:relative; z-index:1;
  display:grid;
  grid-template-columns:1.3fr 1fr 1fr 1fr;
  gap:48px;
  padding:56px 0 48px;
}
/* Révélation en cascade (voir js/main.js : la classe .in est posée sur
   <footer> entier au scroll) — CTA en premier, puis les colonnes, avec
   un léger décalage plutôt que tout d'un coup. Fonctionne pareil sur
   mobile, où tout s'empile verticalement. */
.footer-cta > *,
.footer-main > *{
  opacity:0;
  transform:translateY(16px);
  transition:opacity .7s cubic-bezier(.16,.7,.2,1), transform .7s cubic-bezier(.16,.7,.2,1);
}
footer.in .footer-cta > *:nth-child(1){ transition-delay:0s; }
footer.in .footer-cta > *:nth-child(2){ transition-delay:.1s; }
footer.in .footer-main > *:nth-child(1){ transition-delay:.16s; }
footer.in .footer-main > *:nth-child(2){ transition-delay:.24s; }
footer.in .footer-main > *:nth-child(3){ transition-delay:.32s; }
footer.in .footer-main > *:nth-child(4){ transition-delay:.4s; }
footer.in .footer-cta > *,
footer.in .footer-main > *{ opacity:1; transform:translateY(0); }

/* Repères de calage au survol du logo — même motif que boutons/cartes.
   Enveloppe dédiée (.footer-logo-wrap) plutôt que directement sur le
   <img> : ::before/::after ne s'affichent pas de façon fiable sur les
   éléments remplacés (img) selon les navigateurs. */
.footer-logo-wrap{ position:relative; display:inline-block; }
.footer-logo-wrap::before,
.footer-logo-wrap::after{
  content:"";
  position:absolute;
  width:12px; height:12px;
  opacity:0;
  border-color:var(--text-light);
  transition:opacity .3s ease, transform .3s ease;
  pointer-events:none;
}
.footer-logo-wrap::before{
  top:-8px; left:-8px;
  border-top:1.5px solid; border-left:1.5px solid;
  transform:translate(5px, 5px);
}
.footer-logo-wrap::after{
  bottom:-8px; right:-8px;
  border-bottom:1.5px solid; border-right:1.5px solid;
  transform:translate(-5px, -5px);
}
.footer-logo-wrap:hover::before,
.footer-logo-wrap:hover::after{ opacity:0.7; transform:translate(0, 0); }

.footer-logo{ height:114px; width:auto; display:block; }
.footer-brand p{
  margin-top:20px;
  color:var(--text-light-dim);
  font-size:14px;
  line-height:1.65;
  max-width:36ch;
}
.footer-col-title{
  font-family:var(--body); font-weight:600; font-size:10.5px;
  letter-spacing:0.13em; text-transform:uppercase;
  color:var(--indigo-lt);
  margin-bottom:20px;
}
.footer-nav, .footer-contact{ display:flex; flex-direction:column; }
.footer-nav a,
.footer-contact a,
.footer-contact span{
  font-size:14px;
  color:var(--text-light-dim);
  margin-bottom:13px;
  transition:color .25s ease;
}
/* Soulignement qui se dessine au survol — même technique que les
   liens du header (nav.links a::after), pour que le footer se
   sente comme la même interface plutôt qu'une zone à part. */
.footer-nav a,
.footer-contact a{
  position:relative;
  width:fit-content;
}
.footer-nav a::after,
.footer-contact a::after{
  content:"";
  position:absolute; left:0; right:0; bottom:-2px;
  height:1px; background:var(--indigo-lt);
  transform:scaleX(0); transform-origin:left;
  transition:transform .3s ease;
}
.footer-nav a:hover,
.footer-contact a:hover{ color:var(--text-light); }
.footer-nav a:hover::after,
.footer-contact a:hover::after{ transform:scaleX(1); }

/* Colonne "Suivez-nous" : rangée de boutons ronds plutôt que la liste
   verticale des deux autres colonnes — l'icône suffit à identifier
   le réseau, l'empiler avec le nom en texte aurait fait redondant. */
.footer-social{ display:flex; flex-direction:row; gap:12px; }
.footer-social a{
  width:36px; height:36px;
  display:flex; align-items:center; justify-content:center;
  border:1px solid var(--ink-line);
  border-radius:50%;
  color:var(--text-light-dim);
  transition:color .25s ease, border-color .25s ease, transform .25s ease;
}
.footer-social a svg{ width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.4; }
.footer-social a:hover{
  color:var(--text-light);
  border-color:var(--indigo-lt);
  transform:translateY(-3px);
}

.footer-row{
  position:relative; z-index:1;
  border-top:1px solid var(--ink-line);
  padding:22px 0;
  display:flex; align-items:center; justify-content:space-between;
  font-family:var(--body); font-size:11px; letter-spacing:0.05em;
  color:var(--text-light-dim);
  flex-wrap:wrap;
  gap:10px;
}
.footer-links{
  display:flex; gap:20px; flex-wrap:wrap;
}
.footer-links a:hover{ color:var(--text-light); }

/* ---------- WORDMARK GÉANT ----------
   Signature de marque en fond, à l'échelle du footer entier — déborde
   et s'estompe vers le bas plutôt que de s'arrêter net. Wrapper dédié
   pour séparer l'entrée en fondu (transition, déclenchée par .in sur
   <footer>) de la respiration infinie (animation, sur l'enfant) : les
   deux ne peuvent pas cohabiter proprement sur le même `transform`. */
.footer-wordmark-wrap{
  position:absolute; z-index:0;
  left:50%; bottom:0;
  transform:translate(-50%, 10%);
  width:100%;
  display:flex; justify-content:center;
  opacity:0;
  pointer-events:none;
  -webkit-mask-image:linear-gradient(to bottom, #000 45%, transparent 92%);
          mask-image:linear-gradient(to bottom, #000 45%, transparent 92%);
  transition:opacity 1.2s cubic-bezier(.16,.7,.2,1);
}
footer.in .footer-wordmark-wrap{ opacity:0.13; }
/* Même famille que le mot-symbole "Indigo" (var(--display) = Super
   Nugget), plutôt que les tracés du tagline extraits du lockup — trop
   fins à cette échelle et d'une graisse différente de "Indigo". */
.footer-wordmark{
  font-family:var(--display);
  color:var(--text-light);
  font-size:clamp(120px, 18vw, 340px);
  line-height:0.9;
  white-space:nowrap;
  text-align:center;
  animation:footer-wordmark-breathe 12s cubic-bezier(.45,0,.55,1) infinite;
}
.footer-wordmark br.mobile-break{ display:none; }
@keyframes footer-wordmark-breathe{
  0%, 100%{ transform:scale(1); }
  50%{ transform:scale(1.015); }
}

/* ---------- RESPONSIVE ---------- */
@media (max-width: 980px){
  /* Fond plein indigo (identique au fond du hero, var(--ink)) au lieu
     du rgba()+blur desktop : sur mobile le menu ouvert couvre tout
     l'écran, la légère transparence se voyait comme un indigo plus
     clair/délavé au lieu de raccorder franchement avec le hero. */
  header.site{ background:var(--ink); backdrop-filter:none; }

  nav.links{
    position:fixed; top:76px; left:0; right:0; bottom:0;
    background:var(--ink);
    flex-direction:column;
    align-items:center;
    justify-content:center;
    text-align:center;
    padding:40px var(--edge);
    gap:30px;
    transform:translateX(100%);
    transition:transform .4s ease;
  }
  nav.links.open{ transform:translateX(0); }
  nav.links a:not(.btn){ font-size:20px; }
  nav.links .btn{ margin-top:10px; }
  .menu-toggle{ display:block; }

  /* Footer entièrement centré sur mobile — colonne unique empilée,
     plus lisible centrée que calée à gauche sur un écran étroit. */
  .footer-cta{ flex-direction:column; align-items:center; text-align:center; padding:64px 0 40px; }
  .footer-cta-text{ text-align:center; }
  .footer-cta-action{ align-items:center; text-align:center; width:100%; }
  .footer-cta-action .btn{ width:100%; text-align:center; }

  .footer-main{ grid-template-columns:1fr; gap:36px; padding:56px 0 40px; text-align:center; }
  .footer-brand{ display:flex; flex-direction:column; align-items:center; }
  .footer-brand p{ margin-left:auto; margin-right:auto; }
  .footer-nav, .footer-contact{ align-items:center; }
  .footer-social{ justify-content:center; }

  .footer-wordmark{ white-space:normal; font-size:clamp(84px, 30vw, 170px); }
  .footer-wordmark br.mobile-break{ display:inline; }
}

@media (max-width: 560px){
  .footer-row{ flex-direction:column; gap:10px; align-items:center; text-align:center; }
  .section-pad{ padding:88px 0; }
}
