/* ============================================================================
 *  ATELIER — Système de design "cinématographique" pour gchamak.fr
 *  --------------------------------------------------------------------------
 *  Refonte premium des pages publiques (accueil, galerie, contact, etc.).
 *
 *  Chargé EN DERNIER dans app/(site)/layout.tsx, après le CSS legacy
 *  (style.css…). Il surcharge donc le visuel historique tout en réutilisant
 *  les mêmes classes que les composants React existants — aucune logique
 *  fonctionnelle n'est touchée.
 *
 *  Principe directeur : la photo est la star. L'interface disparaît.
 *  Near-black chaud + champagne, typographie éditoriale (Fraunces/Inter),
 *  mouvement maîtrisé. Tout respecte prefers-reduced-motion et le tactile.
 * ========================================================================== */

/* ============================================================
 *  1. TOKENS
 * ============================================================ */
:root {
  /* Fonds — near-black légèrement chaud, profondeurs successives */
  --gc-black:     #08080A;
  --gc-bg:        #0C0C0E;
  --gc-bg-soft:   #111013;
  --gc-panel:     #161418;
  --gc-panel-2:   #1D1A1F;

  /* Encres — blanc chaud, jamais pur (plus premium, moins clinique) */
  --gc-text:      #F3EFE8;
  --gc-text-2:    #C2BCB1;
  --gc-text-3:    #8B857B;
  --gc-text-4:    #645F57;

  /* Filets */
  --gc-line:        rgba(243, 239, 232, 0.10);
  --gc-line-strong: rgba(243, 239, 232, 0.20);

  /* Champagne — l'accent signature, affiné et désaturé */
  --gc-gold:      #C6A15B;
  --gc-gold-2:    #D9B978;
  --gc-gold-deep: #9B7C3E;
  --gc-gold-soft: rgba(198, 161, 91, 0.14);
  --gc-gold-line: rgba(198, 161, 91, 0.34);
  --gc-gold-glow: rgba(198, 161, 91, 0.20);

  /* Typographie */
  --gc-serif: 'Fraunces', 'Playfair Display', Georgia, 'Times New Roman', serif;
  --gc-sans:  'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;

  /* Rythme & formes */
  --gc-container: 1320px;
  --gc-gutter: clamp(1.25rem, 5vw, 4rem);
  --gc-radius: 4px;
  --gc-radius-lg: 10px;

  /* Mouvement */
  --gc-ease:       cubic-bezier(0.22, 1, 0.36, 1);
  --gc-ease-expo:  cubic-bezier(0.16, 1, 0.30, 1);
  --gc-ease-inout: cubic-bezier(0.65, 0, 0.35, 1);
  --gc-dur: 600ms;

  --gc-header-h: 88px;
  color-scheme: dark;
}

/* ============================================================
 *  1b. THÈME CLAIR (white / beige) — bascule via [data-theme="light"]
 *  posé sur <html> (cf. script anti-FOUC dans app/layout.tsx + le bouton
 *  bascule dans SiteHeader). Tout le site étant token-driven, ce bloc
 *  suffit à basculer arrière-plans, cartes, textes, footer, formulaires…
 * ============================================================ */
html[data-theme='light'] {
  --gc-black:     #E7DDC9;
  --gc-bg:        #F5EFE3;
  --gc-bg-soft:   #FBF7EE;
  --gc-panel:     #FFFFFF;
  --gc-panel-2:   #F2EBDB;

  --gc-text:      #211B12;
  --gc-text-2:    #5A5045;
  --gc-text-3:    #897E6C;
  --gc-text-4:    #A99B85;

  --gc-line:        rgba(33, 27, 18, 0.12);
  --gc-line-strong: rgba(33, 27, 18, 0.20);

  --gc-gold:      #9C7B36;
  --gc-gold-2:    #B7923F;
  --gc-gold-deep: #7E6228;
  --gc-gold-soft: rgba(156, 123, 54, 0.12);
  --gc-gold-line: rgba(156, 123, 54, 0.34);
  --gc-gold-glow: rgba(156, 123, 54, 0.18);

  color-scheme: light;
}

/* CONTEXTE SOMBRE permanent (dans les deux thèmes) :
   - les heroes plein-cadre (photo + scrim sombre),
   - le header (il flotte au-dessus des heroes ; le garder sombre évite le
     texte/logo blanc illisible sur fond clair quand on scrolle),
   - le footer (barre d'ancrage sombre, cohérente avec le header).
   On y re-épingle localement les tokens clairs → texte/eyebrow/CTA lisibles
   quel que soit le thème actif. */
.gc-hero,
.gc-pagehero,
.gc-closing,
header,
footer {
  --gc-black:     #08080A;
  --gc-bg:        #0C0C0E;
  --gc-text:      #F3EFE8;
  --gc-text-2:    #C2BCB1;
  --gc-text-3:    #8B857B;
  --gc-text-4:    #645F57;
  --gc-line:        rgba(243, 239, 232, 0.10);
  --gc-line-strong: rgba(243, 239, 232, 0.20);
  --gc-gold:      #C6A15B;
  --gc-gold-2:    #D9B978;
  --gc-gold-soft: rgba(198, 161, 91, 0.14);
  --gc-gold-line: rgba(198, 161, 91, 0.34);
}

/* ============================================================
 *  2. BASE / RESET DOUX  (s'applique uniquement aux pages publiques :
 *  atelier.css n'est chargé que dans le layout (site))
 * ============================================================ */
body {
  background: var(--gc-bg);
  color: var(--gc-text);
  font-family: var(--gc-sans);
  font-weight: 400;
  font-size: 17px;
  line-height: 1.65;
  letter-spacing: 0.005em;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* Curseur custom actif → on masque le curseur natif sur le pointeur fin */
@media (hover: hover) and (pointer: fine) {
  body.gc-has-cursor,
  body.gc-has-cursor a,
  body.gc-has-cursor button,
  body.gc-has-cursor [data-cursor] {
    cursor: none;
  }
}

::selection {
  background: var(--gc-gold);
  color: #14110A;
}

/* Barre de défilement discrète (WebKit) */
body::-webkit-scrollbar { width: 10px; }
body::-webkit-scrollbar-track { background: var(--gc-black); }
body::-webkit-scrollbar-thumb {
  background: #2A2730;
  border-radius: 20px;
  border: 2px solid var(--gc-black);
}
body::-webkit-scrollbar-thumb:hover { background: #3a3742; }

.container {
  max-width: var(--gc-container);
  margin: 0 auto;
  padding: 0 var(--gc-gutter);
}

/* Titres : Fraunces, contraste élevé, optique large */
h1, h2, h3, .gc-display {
  font-family: var(--gc-serif);
  font-weight: 400;
  font-optical-sizing: auto;
  letter-spacing: -0.015em;
  line-height: 1.05;
  color: var(--gc-text);
  text-wrap: balance;
}

a { color: inherit; }

/* Eyebrow / surtitre — la micro-typo qui "fait cher" */
.gc-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.8em;
  font-family: var(--gc-sans);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: var(--gc-gold);
}
.gc-eyebrow::before {
  content: '';
  width: clamp(20px, 4vw, 48px);
  height: 1px;
  background: var(--gc-gold-line);
}
.gc-eyebrow.is-centered { justify-content: center; }

/* ============================================================
 *  3. CURSEUR PERSONNALISÉ
 * ============================================================ */
.gc-cursor,
.gc-cursor-dot {
  position: fixed;
  top: 0;
  left: 0;
  pointer-events: none;
  z-index: 10000;
  border-radius: 50%;
  opacity: 0;
  will-change: transform;
}
.gc-cursor {
  width: 40px;
  height: 40px;
  margin: -20px 0 0 -20px;
  border: 1px solid var(--gc-gold-line);
  transform: translate3d(var(--gc-mx, -100px), var(--gc-my, -100px), 0) scale(1);
  transition:
    opacity 350ms ease,
    width 350ms var(--gc-ease),
    height 350ms var(--gc-ease),
    margin 350ms var(--gc-ease),
    border-color 350ms ease,
    background-color 350ms ease;
}
.gc-cursor-dot {
  width: 5px;
  height: 5px;
  margin: -2.5px 0 0 -2.5px;
  background: var(--gc-gold-2);
  transform: translate3d(var(--gc-dx, -100px), var(--gc-dy, -100px), 0);
}
body.gc-cursor-ready .gc-cursor,
body.gc-cursor-ready .gc-cursor-dot { opacity: 1; }

/* Sur un élément interactif : l'anneau grossit, le point se cache */
body.gc-cursor-hover .gc-cursor {
  width: 76px;
  height: 76px;
  margin: -38px 0 0 -38px;
  background: var(--gc-gold-soft);
  border-color: transparent;
}
body.gc-cursor-hover .gc-cursor-dot { opacity: 0; }

/* Sur une photo : libellé "Voir" dans l'anneau */
.gc-cursor-label {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--gc-sans);
  font-size: 0.6rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gc-gold-2);
  opacity: 0;
  transition: opacity 250ms ease;
}
body.gc-cursor-view .gc-cursor {
  width: 92px;
  height: 92px;
  margin: -46px 0 0 -46px;
  background: var(--gc-gold-soft);
  border-color: var(--gc-gold-line);
}
body.gc-cursor-view .gc-cursor .gc-cursor-label { opacity: 1; }
body.gc-cursor-view .gc-cursor-dot { opacity: 0; }

body.gc-cursor-down .gc-cursor { transform: translate3d(var(--gc-mx, -100px), var(--gc-my, -100px), 0) scale(0.82); }

/* ============================================================
 *  4. RIDEAU DE TRANSITION DE PAGE
 * ============================================================ */
.gc-curtain {
  position: fixed;
  inset: 0;
  z-index: 9500;
  pointer-events: none;
  background: var(--gc-black);
  transform-origin: top;
  transform: scaleY(0);
}
.gc-curtain::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--gc-gold), transparent);
  opacity: 0;
}
/* Joué à chaque navigation (remount via key=pathname) :
   le rideau couvre depuis le haut puis se retire vers le bas. */
.gc-curtain.is-animating {
  animation: gc-curtain-sweep 900ms var(--gc-ease-inout) forwards;
}
.gc-curtain.is-animating::after {
  animation: gc-curtain-line 900ms var(--gc-ease-inout) forwards;
}
@keyframes gc-curtain-sweep {
  0%   { transform: scaleY(0); transform-origin: top; }
  45%  { transform: scaleY(1); transform-origin: top; }
  46%  { transform: scaleY(1); transform-origin: bottom; }
  100% { transform: scaleY(0); transform-origin: bottom; }
}
@keyframes gc-curtain-line {
  0%, 44%  { opacity: 0; }
  46%      { opacity: 1; }
  60%      { opacity: 1; }
  100%     { opacity: 0; }
}

/* Reveal du contenu à chaque route.
   IMPORTANT : fill-mode `backwards` (pas `both`) pour ne PAS conserver de
   transform résiduel après l'animation — un transform non-`none` créerait un
   bloc englobant qui casserait les position:fixed internes (ex. le mode plein
   écran de la page Shooting). `backwards` applique l'état initial pendant le
   délai puis rend la main aux styles de base (transform: none). */
.gc-page {
  animation: gc-page-in 800ms var(--gc-ease) backwards;
  animation-delay: 220ms;
}
@keyframes gc-page-in {
  from { opacity: 0; transform: translate3d(0, 18px, 0); }
  to   { opacity: 1; transform: none; }
}

/* ============================================================
 *  5. HEADER / NAVIGATION (desktop)
 * ============================================================ */
header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  width: 100%;
  z-index: 1000;
  padding: 0;
  background: transparent;
  backdrop-filter: none;
  transition: background 500ms var(--gc-ease), border-color 500ms ease, backdrop-filter 500ms ease;
  border-bottom: 1px solid transparent;
}
/* Classe ajoutée en JS quand on scrolle (voir AtelierMotion) */
header.gc-scrolled {
  background: rgba(10, 10, 12, 0.72);
  backdrop-filter: blur(16px) saturate(120%);
  -webkit-backdrop-filter: blur(16px) saturate(120%);
  border-bottom-color: var(--gc-line);
}
nav.nav-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  max-width: var(--gc-container);
  margin: 0 auto;
  padding: 0 var(--gc-gutter);
  height: var(--gc-header-h);
  transition: height 500ms var(--gc-ease);
}
header.gc-scrolled nav.nav-bar { height: 68px; }

.logo { line-height: 0; }
.site-logo {
  height: 48px;
  width: auto;
  vertical-align: middle;
  transition: opacity 300ms ease, transform 500ms var(--gc-ease);
}
header.gc-scrolled .site-logo { height: 40px; }
.logo a:hover .site-logo { opacity: 0.82; }

.nav-menu ul {
  display: flex;
  align-items: center;
  gap: clamp(1.5rem, 3vw, 3rem);
  list-style: none;
  margin: 0;
  padding: 0;
}
.nav-menu a {
  position: relative;
  font-family: var(--gc-sans);
  font-size: 0.74rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gc-text-2);
  text-decoration: none;
  padding: 0.4rem 0;
  transition: color 300ms ease;
}
.nav-menu a::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: -2px;
  width: 100%;
  height: 1px;
  background: var(--gc-gold);
  transform: scaleX(0);
  transform-origin: right;
  transition: transform 420ms var(--gc-ease);
}
.nav-menu a:hover,
.nav-menu a.active { color: var(--gc-text); }
.nav-menu a:hover::after,
.nav-menu a.active::after { transform: scaleX(1); transform-origin: left; }
.nav-menu a.active { color: var(--gc-gold); }

/* Groupe d'actions à droite : menu + bascule de thème + trigger mobile */
.gc-nav-right {
  display: flex;
  align-items: center;
  gap: clamp(1rem, 2.4vw, 2rem);
}

/* Bouton bascule clair / sombre */
.gc-theme-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 999px;
  border: 1px solid var(--gc-line-strong);
  background: transparent;
  color: var(--gc-text-2);
  cursor: pointer;
  flex-shrink: 0;
  transition: color 300ms ease, border-color 300ms ease,
    background 300ms ease, transform 400ms var(--gc-ease);
}
.gc-theme-toggle:hover {
  color: var(--gc-gold);
  border-color: var(--gc-gold-line);
  background: var(--gc-gold-soft);
}
.gc-theme-toggle:hover svg { transform: rotate(35deg); }
.gc-theme-toggle svg { transition: transform 500ms var(--gc-ease); }

/* ============================================================
 *  6. BOUTONS PREMIUM
 * ============================================================ */
.btn,
.gc-btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.7em;
  padding: 1.05rem 2.2rem;
  font-family: var(--gc-sans);
  font-size: 0.76rem;
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--gc-text);
  background: transparent;
  border: 1px solid var(--gc-line-strong);
  border-radius: 999px;
  cursor: pointer;
  overflow: hidden;
  isolation: isolate;
  transition: color 400ms var(--gc-ease), border-color 400ms ease, transform 500ms var(--gc-ease);
}
.btn::before,
.gc-btn::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background: var(--gc-gold);
  transform: translateY(101%);
  transition: transform 500ms var(--gc-ease);
}
.btn:hover,
.gc-btn:hover {
  color: #14110A;
  border-color: var(--gc-gold);
}
.btn:hover::before,
.gc-btn:hover::before { transform: translateY(0); }

/* Variante pleine (CTA principal) */
.btn-primary,
.gc-btn-primary {
  background: var(--gc-gold);
  color: #14110A;
  border-color: var(--gc-gold);
}
.btn-primary::before,
.gc-btn-primary::before { background: var(--gc-text); }
.btn-primary:hover,
.gc-btn-primary:hover { color: #14110A; border-color: var(--gc-text); }

/* Lien-flèche minimal */
.gc-link {
  display: inline-flex;
  align-items: center;
  gap: 0.6em;
  font-family: var(--gc-sans);
  font-size: 0.78rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gc-text);
  text-decoration: none;
}
.gc-link svg { transition: transform 450ms var(--gc-ease); }
.gc-link:hover { color: var(--gc-gold); }
.gc-link:hover svg { transform: translateX(6px); }

/* ============================================================
 *  7. HERO D'ACCUEIL — cinématographique, plein cadre
 * ============================================================ */
.gc-hero {
  position: relative;
  min-height: 100svh;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  isolation: isolate;
}
.gc-hero__media {
  position: absolute;
  inset: 0;
  z-index: -2;
}
.gc-hero__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  /* Ken Burns lent — la photo respire sans jamais s'écraser sous un voile */
  animation: gc-kenburns 24s ease-in-out infinite alternate;
  transform-origin: 60% 40%;
}
@keyframes gc-kenburns {
  from { transform: scale(1.06); }
  to   { transform: scale(1.16); }
}
/* Dégradés AUX BORDS uniquement : centre vivant, lisibilité préservée */
.gc-hero__scrim {
  position: absolute;
  inset: 0;
  z-index: -1;
  background:
    linear-gradient(to top, rgba(8, 8, 10, 0.92) 0%, rgba(8, 8, 10, 0.45) 26%, rgba(8, 8, 10, 0) 52%),
    linear-gradient(to bottom, rgba(8, 8, 10, 0.55) 0%, rgba(8, 8, 10, 0) 30%),
    radial-gradient(120% 80% at 50% 50%, rgba(8, 8, 10, 0) 40%, rgba(8, 8, 10, 0.35) 100%);
}
.gc-hero__inner {
  width: 100%;
  max-width: var(--gc-container);
  margin: 0 auto;
  padding: 0 var(--gc-gutter) clamp(3.5rem, 9vh, 7rem);
}
.gc-hero__title {
  font-size: clamp(3.2rem, 11vw, 10.5rem);
  font-weight: 300;
  line-height: 0.94;
  letter-spacing: -0.02em;
  margin: 1.4rem 0 0;
  max-width: 14ch;
}
.gc-hero__title em {
  font-style: italic;
  font-weight: 300;
  color: var(--gc-gold-2);
}
.gc-hero__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 1.6rem;
  margin-top: 2.2rem;
  font-family: var(--gc-sans);
  font-size: 0.82rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gc-text-2);
}
.gc-hero__meta .dot { width: 4px; height: 4px; border-radius: 50%; background: var(--gc-gold); }
.gc-hero__cta {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-top: 2.6rem;
}

/* Indice de défilement */
.gc-scrollcue {
  position: absolute;
  right: var(--gc-gutter);
  bottom: clamp(3.5rem, 9vh, 7rem);
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.9rem;
  font-family: var(--gc-sans);
  font-size: 0.62rem;
  font-weight: 600;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--gc-text-3);
  writing-mode: vertical-rl;
}
.gc-scrollcue__line {
  width: 1px;
  height: 64px;
  background: var(--gc-line-strong);
  overflow: hidden;
  position: relative;
}
.gc-scrollcue__line::after {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--gc-gold);
  transform: translateY(-100%);
  animation: gc-scrollcue 2.4s var(--gc-ease) infinite;
}
@keyframes gc-scrollcue {
  0%   { transform: translateY(-100%); }
  50%  { transform: translateY(0); }
  100% { transform: translateY(100%); }
}
@media (max-width: 760px) { .gc-scrollcue { display: none; } }

/* ============================================================
 *  8. SECTIONS GÉNÉRIQUES
 * ============================================================ */
.gc-section { padding: clamp(5rem, 14vh, 11rem) 0; }
.gc-section--tight { padding: clamp(3.5rem, 8vh, 6rem) 0; }

.gc-section-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 2rem;
  flex-wrap: wrap;
  margin-bottom: clamp(2.5rem, 6vh, 4.5rem);
}
.gc-section-head__title {
  font-size: clamp(2.2rem, 5vw, 4.2rem);
  font-weight: 300;
}
.gc-section-head__title em { font-style: italic; color: var(--gc-gold-2); }
.gc-section-head .gc-eyebrow { margin-bottom: 1.2rem; }

/* Manifeste / intro — composition asymétrique */
.gc-intro { position: relative; }
.gc-intro__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(2.5rem, 6vw, 5rem);
  align-items: center;
}
@media (min-width: 900px) {
  .gc-intro__grid { grid-template-columns: 1.15fr 0.85fr; }
}
.gc-intro__statement {
  font-family: var(--gc-serif);
  font-weight: 300;
  font-size: clamp(1.8rem, 3.4vw, 3.1rem);
  line-height: 1.18;
  letter-spacing: -0.01em;
}
.gc-intro__statement em { font-style: italic; color: var(--gc-gold-2); }
.gc-intro__body { margin-top: 1.8rem; max-width: 46ch; }
.gc-intro__body p { color: var(--gc-text-2); margin: 0 0 1.1rem; }
.gc-intro__figure {
  position: relative;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: var(--gc-radius);
}
.gc-intro__figure img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gc-intro__figure figcaption {
  position: absolute;
  left: 1.1rem;
  bottom: 1.1rem;
  font-family: var(--gc-sans);
  font-size: 0.66rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gc-text);
  background: rgba(8, 8, 10, 0.55);
  backdrop-filter: blur(6px);
  padding: 0.4rem 0.8rem;
  border: 1px solid var(--gc-line);
  border-radius: 999px;
}

/* ============================================================
 *  9. DISCIPLINES — liste éditoriale numérotée
 * ============================================================ */
.gc-disciplines { border-top: 1px solid var(--gc-line); }
.gc-discipline {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 1.5rem;
  padding: clamp(1.4rem, 3.5vh, 2.4rem) 0;
  border-bottom: 1px solid var(--gc-line);
  text-decoration: none;
  color: var(--gc-text);
  position: relative;
  isolation: isolate;
}
.gc-discipline__num {
  font-family: var(--gc-sans);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.12em;
  color: var(--gc-text-3);
  transition: color 400ms ease;
}
.gc-discipline__name {
  font-family: var(--gc-serif);
  font-weight: 300;
  font-size: clamp(1.7rem, 4.4vw, 3.4rem);
  line-height: 1;
  transition: transform 600ms var(--gc-ease), color 400ms ease;
}
.gc-discipline__tags {
  font-family: var(--gc-sans);
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--gc-text-3);
  text-align: right;
  transition: color 400ms ease;
}
.gc-discipline::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(90deg, var(--gc-gold-soft), transparent);
  opacity: 0;
  transition: opacity 500ms ease;
}
.gc-discipline:hover::before { opacity: 1; }
.gc-discipline:hover .gc-discipline__name { transform: translateX(18px); color: var(--gc-gold-2); }
.gc-discipline:hover .gc-discipline__num,
.gc-discipline:hover .gc-discipline__tags { color: var(--gc-gold); }
@media (max-width: 620px) {
  .gc-discipline { grid-template-columns: auto 1fr; }
  .gc-discipline__tags { display: none; }
}

/* ============================================================
 *  10. APERÇU GALERIE (réencadre la section autour du composant
 *  GalleryPreview existant — mosaïque justifiée conservée)
 * ============================================================ */
.gallery-preview {
  width: 100% !important;
  margin-left: 0 !important;
  background: var(--gc-bg) !important;
  padding: clamp(5rem, 14vh, 11rem) 0 !important;
}
.gallery-preview .container {
  max-width: var(--gc-container) !important;
  width: 100% !important;
  padding: 0 var(--gc-gutter) !important;
  margin: 0 auto !important;
}
.gallery-preview > .container > h2 {
  font-size: clamp(2.2rem, 5vw, 4.2rem);
  font-weight: 300;
  text-align: left;
  margin: 0 0 0.6rem;
  letter-spacing: -0.015em;
}
.gallery-preview-subtitle {
  text-align: left !important;
  font-style: normal !important;
  font-size: 1rem !important;
  color: var(--gc-text-2) !important;
  margin: 0 0 clamp(2.5rem, 6vh, 4.5rem) !important;
  max-width: 52ch;
}
.gallery-preview-cta { text-align: center; margin-top: clamp(2.5rem, 6vh, 4rem); }

/* Raffinements mosaïque (au-dessus du legacy) : coins plus nets,
   image légèrement désaturée au repos, pleine vie au hover. */
.grid-preview.justified-rows .mosaic-item { border-radius: var(--gc-radius); }
.grid-preview.justified-rows .mosaic-item img { filter: saturate(0.92) brightness(0.98); }
.grid-preview.justified-rows .mosaic-item.is-hovered img { filter: saturate(1.08) brightness(1.05); }

/* ============================================================
 *  11. HERO DES PAGES INTÉRIEURES (galerie, contact…)
 * ============================================================ */
.gc-pagehero {
  position: relative;
  padding: calc(var(--gc-header-h) + clamp(4rem, 12vh, 8rem)) 0 clamp(3rem, 8vh, 6rem);
  overflow: hidden;
  isolation: isolate;
}
.gc-pagehero__media { position: absolute; inset: 0; z-index: -2; }
.gc-pagehero__media img { width: 100%; height: 100%; object-fit: cover; opacity: 0.5; }
.gc-pagehero::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(to bottom, rgba(8,8,10,0.6), rgba(8,8,10,0.82) 60%, var(--gc-bg));
}
.gc-pagehero__title {
  font-size: clamp(2.8rem, 8vw, 6.5rem);
  font-weight: 300;
  margin: 1.2rem 0 0;
  letter-spacing: -0.02em;
}
.gc-pagehero__title em { font-style: italic; color: var(--gc-gold-2); }
.gc-pagehero__lead {
  margin-top: 1.6rem;
  max-width: 58ch;
  font-size: 1.05rem;
  color: var(--gc-text-2);
}

/* Section CTA de clôture — invitation pleine largeur sur photo */
.gc-closing {
  position: relative;
  padding: clamp(6rem, 18vh, 12rem) 0;
  text-align: center;
  overflow: hidden;
  isolation: isolate;
  border-top: 1px solid var(--gc-line);
}
.gc-closing__media { position: absolute; inset: 0; z-index: -2; }
.gc-closing__media img {
  width: 100%; height: 100%; object-fit: cover;
  opacity: 0.32;
  transform: scale(1.04);
}
.gc-closing::after {
  content: '';
  position: absolute; inset: 0; z-index: -1;
  background: radial-gradient(80% 120% at 50% 50%, rgba(8,8,10,0.35), rgba(8,8,10,0.85));
}
.gc-closing__title {
  font-size: clamp(2.4rem, 6.5vw, 5.5rem);
  font-weight: 300;
  max-width: 18ch;
  margin: 1.4rem auto 0;
}
.gc-closing__title em { font-style: italic; color: var(--gc-gold-2); }
.gc-closing__cta { margin-top: 2.6rem; display: flex; justify-content: center; gap: 1rem; flex-wrap: wrap; }

/* ============================================================
 *  11b. PAGE GALERIE — grille masonry raffinée
 * ============================================================ */
.gc-gallery { padding-top: clamp(3rem, 7vh, 5rem); }

/* Filtres par catégorie (pilule éditoriale) */
.gc-gallery-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin-bottom: clamp(2rem, 5vh, 3.5rem);
}
.gc-filter {
  display: inline-flex;
  align-items: center;
  gap: 0.5em;
  padding: 0.6rem 1.2rem;
  border-radius: 999px;
  border: 1px solid var(--gc-line-strong);
  background: transparent;
  color: var(--gc-text-2);
  font-family: var(--gc-sans);
  font-size: 0.74rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  cursor: pointer;
  transition: color 300ms ease, border-color 300ms ease, background 300ms ease;
}
.gc-filter:hover { color: var(--gc-text); border-color: var(--gc-text-3); }
.gc-filter.is-active {
  background: var(--gc-gold);
  border-color: var(--gc-gold);
  color: #14110A;
}
.gc-filter-count {
  font-size: 0.66rem;
  font-weight: 500;
  opacity: 0.6;
  letter-spacing: 0;
}
.gc-gallery-empty {
  padding: clamp(3rem, 9vh, 6rem) 0;
  text-align: center;
  color: var(--gc-text-3);
  font-size: 1rem;
}
.gc-gallery .grid-item { padding: clamp(5px, 0.6vw, 9px); }
.gc-gallery .grid-item a {
  position: relative;
  display: block;
  border-radius: var(--gc-radius);
  overflow: hidden;
}
.gc-gallery .grid-item img {
  border-radius: var(--gc-radius);
  filter: saturate(0.92) brightness(0.95);
  transition: transform 700ms var(--gc-ease), filter 500ms ease;
}
.gc-gallery .grid-item:hover img {
  transform: scale(1.05);
  filter: saturate(1.08) brightness(1.04);
}
/* Cadre champagne fin au survol (remplace le voile noir legacy) */
.gc-gallery .grid-item::before {
  content: '';
  position: absolute;
  inset: clamp(5px, 0.6vw, 9px);
  z-index: 2;
  border: 1px solid transparent;
  border-radius: var(--gc-radius);
  background: transparent;
  pointer-events: none;
  transition: border-color 450ms ease;
}
.gc-gallery .grid-item:hover::before { border-color: var(--gc-gold-line); background: transparent; }

/* Marqueur de fin de galerie, sobre */
.gc-gallery .page-load-status { display: block; padding: clamp(3rem, 8vh, 5rem) 0 0; }
.gc-gallery .infinite-scroll-last {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1.2rem;
  font-family: var(--gc-sans);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--gc-text-3);
}
.gc-gallery .infinite-scroll-last::before,
.gc-gallery .infinite-scroll-last::after {
  content: '';
  width: clamp(30px, 8vw, 80px);
  height: 1px;
  background: var(--gc-line-strong);
}

/* ============================================================
 *  11c. PAGE CONTACT — infos, formulaire, FAQ
 * ============================================================ */
.gc-contact { padding: clamp(4rem, 11vh, 8rem) 0; }
.gc-contact .contact-grid {
  display: grid;
  grid-template-columns: 0.85fr 1.15fr;
  gap: clamp(2.5rem, 6vw, 6rem);
  align-items: start;
}
@media (max-width: 900px) {
  .gc-contact .contact-grid { grid-template-columns: 1fr; gap: 3rem; }
}
.gc-contact .contact-info h2 {
  font-family: var(--gc-serif);
  font-size: clamp(2rem, 3.6vw, 3.2rem);
  font-weight: 300;
  margin-bottom: 1.2rem;
}
.gc-contact .contact-info > p { color: var(--gc-text-2); max-width: 44ch; }
.gc-contact .contact-details {
  margin: clamp(2rem, 5vh, 3rem) 0;
  display: grid;
  gap: 1.6rem;
}
.gc-contact .contact-item h3 {
  font-family: var(--gc-sans);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gc-gold);
  margin-bottom: 0.4rem;
}
.gc-contact .contact-item p { color: var(--gc-text); margin: 0 0 0.2rem; }
.gc-contact .social-links h3 {
  font-family: var(--gc-sans);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gc-text-3);
  margin-bottom: 1rem;
}
.gc-contact .social-icons { display: flex; gap: 0.8rem; flex-wrap: wrap; }
.gc-contact .social-link {
  border-radius: 999px;
  border: 1px solid var(--gc-line-strong);
  color: var(--gc-text-2);
  padding: 0.75rem 1.4rem;
  font-size: 0.68rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  transition: color 350ms ease, border-color 350ms ease, background 350ms ease;
}
.gc-contact .social-link:hover {
  background: var(--gc-gold-soft);
  border-color: var(--gc-gold-line);
  color: var(--gc-gold);
}

/* Formulaire — panneau sobre, champs à soulignement champagne */
.contact-form-container {
  max-width: none;
  background: var(--gc-panel);
  border: 1px solid var(--gc-line);
  border-radius: var(--gc-radius-lg);
  padding: clamp(1.6rem, 3vw, 3rem);
  backdrop-filter: none;
}
.contact-form-container h2 {
  font-family: var(--gc-serif);
  font-size: clamp(1.6rem, 3vw, 2.2rem);
  font-weight: 300;
  margin-bottom: 1.8rem;
}
.form-group label {
  color: var(--gc-text-2);
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 0.14em;
}
.form-group input,
.form-group select,
.form-group textarea {
  color: var(--gc-text);
  border-bottom: 1px solid var(--gc-line-strong);
  font-family: var(--gc-sans);
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus { border-bottom-color: var(--gc-gold); }
.form-group input::placeholder,
.form-group textarea::placeholder { color: var(--gc-text-4); }
.form-group.checkbox-group {
  display: flex;
  align-items: flex-start;
  gap: 0.7rem;
}
.form-group.checkbox-group input {
  width: auto;
  margin-top: 0.3rem;
  accent-color: var(--gc-gold);
}
.form-group.checkbox-group label {
  text-transform: none;
  letter-spacing: 0;
  font-size: 0.85rem;
  color: var(--gc-text-2);
  margin: 0;
}
.form-message {
  border: 1px solid var(--gc-gold-line);
  background: var(--gc-gold-soft);
  border-radius: var(--gc-radius-lg);
  padding: 1.6rem;
}
.form-message h3 { font-family: var(--gc-serif); font-weight: 400; color: var(--gc-text); margin-bottom: 0.5rem; }
.form-message p { color: var(--gc-text-2); margin: 0; }
.form-message.error { border-color: rgba(220, 90, 90, 0.4); background: rgba(220, 90, 90, 0.08); }

/* FAQ */
.gc-faq { padding: clamp(4rem, 11vh, 8rem) 0; border-top: 1px solid var(--gc-line); }
.gc-faq .faq-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(1rem, 2vw, 1.5rem); }
@media (max-width: 720px) { .gc-faq .faq-grid { grid-template-columns: 1fr; } }
.gc-faq .faq-item {
  background: var(--gc-panel);
  border: 1px solid var(--gc-line);
  border-radius: var(--gc-radius-lg);
  padding: clamp(1.5rem, 2.5vw, 2.2rem);
  backdrop-filter: none;
  transition: border-color 450ms ease, background 450ms ease;
}
.gc-faq .faq-item:hover { border-color: var(--gc-gold-line); background: var(--gc-panel-2); }
.gc-faq .faq-item h3 {
  font-family: var(--gc-serif);
  font-weight: 400;
  font-size: 1.25rem;
  margin-bottom: 0.8rem;
  color: var(--gc-text);
}
.gc-faq .faq-item p { color: var(--gc-text-2); }

/* ============================================================
 *  12. FOOTER éditorial
 * ============================================================ */
footer {
  background: var(--gc-black);
  color: var(--gc-text-2);
  border-top: 1px solid var(--gc-line);
  padding: clamp(4rem, 10vh, 7rem) 0 2.5rem;
}
footer .footer-content {
  display: grid;
  grid-template-columns: 1.6fr 1fr 1fr 1.2fr;
  gap: clamp(2rem, 5vw, 4rem);
  margin-bottom: clamp(3rem, 7vh, 5rem);
}
@media (max-width: 860px) { footer .footer-content { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { footer .footer-content { grid-template-columns: 1fr; } }
footer .footer-section h3 {
  font-family: var(--gc-sans);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gc-text-3);
  margin-bottom: 1.4rem;
}
footer .footer-section:first-child h3 {
  font-family: var(--gc-serif);
  font-size: clamp(1.6rem, 3vw, 2.2rem);
  font-weight: 300;
  letter-spacing: -0.01em;
  text-transform: none;
  color: var(--gc-text);
}
footer .footer-section ul { list-style: none; padding: 0; margin: 0; }
footer .footer-section ul li { margin-bottom: 0.7rem; }
footer .footer-section a {
  color: var(--gc-text-2);
  text-decoration: none;
  font-size: 0.92rem;
  transition: color 300ms ease;
}
footer .footer-section a:hover { color: var(--gc-gold); }
footer .footer-section p { font-size: 0.92rem; color: var(--gc-text-2); margin: 0 0 0.4rem; }
footer .footer-bottom {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  padding-top: 2rem;
  border-top: 1px solid var(--gc-line);
  color: var(--gc-text-3);
  font-size: 0.82rem;
}
footer .footer-bottom a { color: var(--gc-text-3); text-decoration: none; }
footer .footer-bottom a:hover { color: var(--gc-gold); }

/* ============================================================
 *  13. UTILITAIRES D'ANIMATION (reveal au scroll, magnétique…)
 *  Pilotés par AtelierMotion.tsx via data-attributes.
 * ============================================================ */
[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  transition:
    opacity 900ms var(--gc-ease),
    transform 900ms var(--gc-ease);
  transition-delay: var(--gc-reveal-delay, 0ms);
  will-change: opacity, transform;
}
[data-reveal='left']  { transform: translateX(-32px); }
[data-reveal='right'] { transform: translateX(32px); }
[data-reveal='scale'] { transform: scale(1.04); }
[data-reveal].is-in {
  opacity: 1;
  transform: none;
}

/* Révèle un titre ligne par ligne via masque (clip) */
.gc-reveal-mask { display: block; overflow: hidden; }
.gc-reveal-mask > span {
  display: block;
  transform: translateY(110%);
  transition: transform 1000ms var(--gc-ease);
  transition-delay: var(--gc-reveal-delay, 0ms);
}
.is-in .gc-reveal-mask > span,
.gc-reveal-mask.is-in > span { transform: translateY(0); }

[data-magnetic] { will-change: transform; }

/* ============================================================
 *  14. HARMONISATION — menu mobile & cookies (de gold → champagne)
 *  (ces composants sont définis dans globals.css ; on raffine ici)
 * ============================================================ */
.gc-mobile-drawer { background: linear-gradient(180deg, var(--gc-panel) 0%, var(--gc-black) 100%); border-left-color: var(--gc-gold-soft); }
.gc-mobile-link { font-family: var(--gc-serif); font-weight: 300; }
.gc-mobile-link::before { background: var(--gc-gold); }
.gc-mobile-link:hover,
.gc-mobile-link:focus-visible,
.gc-mobile-link.is-active,
.gc-mobile-link.is-active .gc-mobile-link-num,
.gc-mobile-drawer-contact:hover { color: var(--gc-gold); }
.gc-menu-trigger-bar { background: var(--gc-text); }
.gc-mobile-drawer-social a:hover,
.gc-mobile-drawer-close:hover { background: var(--gc-gold-soft); border-color: var(--gc-gold-line); color: var(--gc-gold); }

/* ============================================================
 *  15. RESPONSIVE
 * ============================================================ */
@media (max-width: 768px) {
  body { font-size: 16px; }
  .gc-hero__cta { width: 100%; }
  .gc-hero__cta .btn { flex: 1 1 auto; }
}

/* ============================================================
 *  16. ACCESSIBILITÉ — prefers-reduced-motion
 * ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .gc-hero__media img { animation: none; transform: scale(1.04); }
  .gc-scrollcue__line::after { animation: none; }
  .gc-curtain.is-animating,
  .gc-curtain.is-animating::after { animation: none; }
  .gc-page { animation: none; }
  [data-reveal] { opacity: 1 !important; transform: none !important; transition: none; }
  .gc-reveal-mask > span { transform: none; transition: none; }
  .gc-cursor, .gc-cursor-dot { display: none; }
  @media (hover: hover) and (pointer: fine) {
    body.gc-has-cursor, body.gc-has-cursor a, body.gc-has-cursor button { cursor: auto; }
  }
}

/* ============================================================
 *  17. HARMONISATION — pages légales, confirmation & accents shooting
 * ============================================================ */

/* Accents de la page Shooting (formulaire.css) : or jaune → champagne.
   On ne touche qu'aux variables d'accent, pas aux surfaces. */
:root {
  --gold: #C6A15B;
  --gold-light: #D9B978;
  --gold-dark: #9B7C3E;
  --gold-600: #9B7C3E;
}

/* CGV / Mentions légales — éditorial sombre cohérent */
.cgv-container,
.mentions-container { color: var(--gc-text-2); }
.cgv-container { background: var(--gc-bg); padding-top: calc(var(--gc-header-h) + 3rem); }
.mentions-container { padding-top: calc(var(--gc-header-h) + 1.5rem); }
.cgv-container h1,
.mentions-title {
  font-family: var(--gc-serif);
  font-weight: 300;
  letter-spacing: -0.015em;
  color: var(--gc-text);
}
.cgv-container h2,
.mentions-section h2 {
  font-family: var(--gc-serif);
  font-weight: 400;
  color: var(--gc-text);
}
.cgv-container p,
.mentions-section p,
.mentions-section li { color: var(--gc-text-2); }
.cgv-container a,
.mentions-section a { color: var(--gc-gold); text-decoration-color: var(--gc-gold-line); }
.cgv-container a:hover,
.mentions-section a:hover { color: var(--gc-gold-2); }

/* Page de confirmation — était en fond clair, on repasse en sombre */
.confirmation-section {
  background: var(--gc-bg) !important;
  color: var(--gc-text);
  padding-top: calc(var(--gc-header-h) + 4rem) !important;
}
.confirmation-section h1 {
  font-family: var(--gc-serif);
  font-weight: 300;
  color: var(--gc-text);
}
.confirmation-message { color: var(--gc-text-2); }
.confirmation-btn {
  background: var(--gc-gold);
  color: #14110A;
  border-radius: 999px;
  letter-spacing: 0.04em;
}
.confirmation-btn:hover { background: var(--gc-gold-2); }
.confirmation-btn-secondary {
  border-radius: 999px;
  border: 1px solid var(--gc-line-strong);
  color: var(--gc-text);
}
.confirmation-btn-secondary:hover { background: var(--gc-text); color: #14110A; }

