/* ============ NEVODI — Design System ============ */
@import url('https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,400;12..96,500;12..96,600;12..96,700;12..96,800&family=Manrope:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');

/* ===================== TOKENS ===================== */
:root {
  --paper:    #FBFAF8;
  --paper-2:  #F2EEE7;
  --ink:      #13223C;
  --ink-2:    #0C1628;
  --ink-soft: #51607B;
  --line:     rgba(19,34,60,.10);

  --cyan:    #2BB8D9;
  --blue:    #2C8FC9;
  --orange:  #F9A83E;
  --pink:    #F1679A;
  --magenta: #EE4E86;

  --grad:      linear-gradient(108deg,#2BB8D9 0%,#2C8FC9 24%,#EE4E86 60%,#F1679A 76%,#F9A83E 100%);
  --grad-soft: linear-gradient(108deg,#2BB8D9,#EE4E86 62%,#F9A83E);

  --surface:      #fff;
  --surface-line: rgba(19,34,60,.18);
  --placeholder:  rgba(19,34,60,.33);
  --pattern-line: rgba(19,34,60,.05);
  --nav-bg:       rgba(251,250,248,.82);
  --nav-mobile-bg: rgba(251,250,248,.97);

  /* fluid horizontal gutter: 20px on mobile → 96px on wide screens */
  --gutter: clamp(20px, 5.5vw, 96px);

  --ease: cubic-bezier(.22,1,.36,1);
  --r:    22px;
  --nav-h: 72px;
}

/* ===================== THEME SOMBRE =====================
   .dark/.cta/.page-hero restent inchangés (déjà sombres par design) ;
   seuls les tokens des surfaces claires s'inversent. */
:root[data-theme="dark"] {
  --paper:    #0C1628;
  --paper-2:  #131F38;
  --ink:      #F2EEE7;
  --ink-soft: #93A2BE;
  --line:     rgba(255,255,255,.12);

  --surface:      #16203A;
  --surface-line: rgba(255,255,255,.22);
  --placeholder:  rgba(242,238,231,.35);
  --pattern-line: rgba(255,255,255,.06);
  --nav-bg:       rgba(12,22,40,.82);
  --nav-mobile-bg: rgba(12,22,40,.97);
}
@media (prefers-color-scheme:dark) {
  :root:not([data-theme="light"]) {
    --paper:    #0C1628;
    --paper-2:  #131F38;
    --ink:      #F2EEE7;
    --ink-soft: #93A2BE;
    --line:     rgba(255,255,255,.12);

    --surface:      #16203A;
    --surface-line: rgba(255,255,255,.22);
    --placeholder:  rgba(242,238,231,.35);
    --pattern-line: rgba(255,255,255,.06);
    --nav-bg:       rgba(12,22,40,.82);
    --nav-mobile-bg: rgba(12,22,40,.97);
  }
}

/* ===================== SKIP LINK ===================== */
.skip-link {
  position:absolute; top:-100px; left:16px; z-index:999;
  background:var(--ink-2); color:#fff;
  padding:12px 20px; border-radius:10px;
  font-family:'Manrope'; font-weight:700; font-size:14px;
  text-decoration:none;
  transition:top .2s var(--ease);
}
.skip-link:focus {
  top:16px;
}

/* ===================== RESET ===================== */
*, *::before, *::after { box-sizing:border-box; margin:0; padding:0 }
html { scroll-behavior:smooth }
/* Décale toute cible d'ancre (#services, #kadix...) sous la nav fixe */
[id] { scroll-margin-top: 100px }
body {
  background: var(--paper);
  color: var(--ink);
  font-family: 'Manrope', system-ui, sans-serif;
  font-size: 18px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
::selection { background:var(--magenta); color:#fff }
a   { color:inherit; text-decoration:none }
img { display:block; max-width:100%; height:auto }
ul  { list-style:none }

/* ===================== TYPE ===================== */
h1,h2,h3,h4 {
  font-family: 'Bricolage Grotesque', sans-serif;
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -.02em;
}
.mono {
  font-family: 'JetBrains Mono', monospace;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: .16em;
  font-size: 11.5px;
}

/* ===================== LAYOUT ===================== */
/* Full-width container — no max-width, fluid padding */
.wrap { width:100%; padding:0 var(--gutter) }

section { position:relative }

/* Section vertical rhythm */
.sec { padding: clamp(72px,9vw,130px) 0 }
.sec-head { margin-bottom: clamp(40px,5vw,64px) }
.sec-head .mono { color:var(--magenta); margin-bottom:16px; display:block }
.sec-head h2 {
  font-size: clamp(32px,4.8vw,64px);
  letter-spacing:-.03em; font-weight:800;
}
.sec-head p {
  color:var(--ink-soft); margin-top:18px;
  font-size: clamp(16px,1.6vw,19px); max-width:56ch;
}

/* ===================== GRADIENT TEXT ===================== */
.grad-text {
  background: var(--grad);
  -webkit-background-clip:text; background-clip:text;
  -webkit-text-fill-color:transparent; color:transparent;
  background-size:200% 100%;
  animation:shimmer 7s linear infinite;
}
@keyframes shimmer { to { background-position:200% 0 } }

/* ===================== GRAIN ===================== */
.grain {
  position:fixed; inset:0; z-index:9998; pointer-events:none;
  opacity:.05; mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ===================== CURSOR GLOW ===================== */
.cursor-glow {
  position:fixed; top:0; left:0; width:200px; height:200px; border-radius:50%;
  background:radial-gradient(circle,rgba(238,78,134,.16),rgba(43,184,217,.09) 50%,transparent 72%);
  transform:translate(-50%,-50%); pointer-events:none; z-index:1; filter:blur(8px);
  will-change:transform;
}
@media (max-width:760px) { .cursor-glow { display:none } }

/* ===================== BUTTONS ===================== */
.btn {
  display:inline-flex; align-items:center; gap:9px;
  font-family:'Manrope'; font-weight:700; font-size:15px;
  padding:13px 26px; border-radius:100px; border:none;
  cursor:pointer; white-space:nowrap;
  transition:transform .3s var(--ease), box-shadow .3s var(--ease);
}
.btn .arrow { transition:transform .35s var(--ease) }
.btn:hover   { transform:translateY(-2px) }
.btn:hover .arrow { transform:translate(3px,-3px) }

.btn-grad  { color:#fff; background:var(--grad); box-shadow:0 10px 30px -8px rgba(238,78,134,.5) }
.btn-grad:hover { box-shadow:0 16px 40px -8px rgba(238,78,134,.65) }

.btn-ghost { color:var(--ink); background:transparent; border:1.5px solid var(--surface-line) }
.btn-ghost:hover { border-color:var(--ink) }

.btn-dim { color:#fff; background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.22) }
.btn-dim:hover { background:rgba(255,255,255,.2) }

/* ===================== NAV ===================== */
.nav {
  position:fixed; top:0; left:0; right:0; z-index:200;
  display:flex; align-items:center; justify-content:space-between;
  padding:18px var(--gutter);
  transition:padding .4s var(--ease), background .4s, box-shadow .4s;
}
.nav.solid {
  padding:11px var(--gutter);
  background:var(--nav-bg);
  backdrop-filter:blur(20px) saturate(1.4);
  box-shadow:0 1px 0 var(--line);
}

.brand { display:flex; align-items:center; gap:10px; z-index:201 }
.brand img { height:34px; filter:drop-shadow(0 4px 10px rgba(238,78,134,.15)) }
.brand b {
  font-family:'Bricolage Grotesque'; font-weight:800;
  font-size:22px; letter-spacing:-.03em; color:var(--ink);
}

.nav-links { display:flex; align-items:center; gap:28px }

.nlink { font-weight:600; font-size:15px; color:var(--ink); position:relative; padding:4px 0 }
.nlink::after {
  content:''; position:absolute; left:0; bottom:-2px; height:2px; width:0;
  background:var(--grad); transition:width .35s var(--ease);
}
.nlink:hover::after, .nlink.active::after { width:100% }
.nlink.active { color:var(--magenta) }

/* ----- Bascule de thème ----- */
.theme-toggle {
  position:relative; display:inline-flex; align-items:center; justify-content:center;
  width:40px; height:40px; min-width:40px; border-radius:50%;
  border:1.5px solid var(--surface-line); background:transparent;
  color:var(--ink); cursor:pointer; flex-shrink:0;
  transition:border-color .25s, transform .25s;
}
.theme-toggle:hover { border-color:var(--ink); transform:translateY(-2px) }
.theme-toggle svg {
  position:absolute; width:18px; height:18px;
  transition:opacity .35s var(--ease), transform .45s var(--ease);
}
.theme-toggle .ti-sun  { opacity:1; transform:rotate(0) scale(1) }
.theme-toggle .ti-moon { opacity:0; transform:rotate(-45deg) scale(.5) }
:root[data-theme="dark"] .theme-toggle .ti-sun  { opacity:0; transform:rotate(45deg) scale(.5) }
:root[data-theme="dark"] .theme-toggle .ti-moon { opacity:1; transform:rotate(0) scale(1) }

/* Bascule animée : un cercle qui s'étend depuis le bouton révèle le
   nouveau thème (progressive enhancement — sans support, bascule
   instantanée, tout aussi fonctionnelle). */
::view-transition-old(root), ::view-transition-new(root) { animation:none; mix-blend-mode:normal }

/* ----- Hamburger ----- */
.nav-burger {
  display:none;
  flex-direction:column; align-items:center; justify-content:center; gap:5px;
  width:44px; height:44px; background:none; border:none;
  cursor:pointer; padding:0; z-index:201;
}
.nav-burger span {
  display:block; width:28px; height:2px; background:var(--ink);
  border-radius:2px; transition:all .35s var(--ease);
}
.nav-burger.open span:nth-child(1) { transform:rotate(45deg) translate(5px,5px) }
.nav-burger.open span:nth-child(2) { opacity:0; transform:scaleX(0) }
.nav-burger.open span:nth-child(3) { transform:rotate(-45deg) translate(5px,-5px) }

@media (max-width:860px) {
  .nav-links .nlink { display:none }
  /* Le CTA texte est déjà dans le menu burger (.mob-cta) : le garder
     ici en plus du logo + bouton thème + burger fait déborder la nav
     sur les petits écrans. */
  .nav-links .btn { display:none }
  .nav-links { gap:14px }
  .nav-burger { display:flex }
}

/* ----- Mobile fullscreen menu ----- */
.nav-mobile {
  position:fixed; inset:0; z-index:199;
  background:var(--nav-mobile-bg);
  backdrop-filter:blur(24px) saturate(1.3);
  display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:6px;
  opacity:0; visibility:hidden; pointer-events:none;
  transition:opacity .4s var(--ease), visibility 0s linear .4s;
  overflow-y:auto; padding:24px 0;
}

/* Viewports too short for the fullscreen menu at its default size
   (e.g. a phone in landscape) get a top-aligned, scrollable layout
   instead of justify-content:center, which would otherwise clip the
   start of the list with no way to reach it via scroll. */
@media (max-height:520px) {
  .nav-mobile { justify-content:flex-start; padding:84px 0 32px; gap:0 }
  .nav-mobile a { font-size:clamp(24px,7vw,34px); padding:6px 20px }
  .nav-mobile .mob-cta { margin-top:14px }
}
.nav-mobile.open {
  opacity:1; visibility:visible; pointer-events:all;
  transition:opacity .4s var(--ease), visibility 0s linear 0s;
}

.nav-mobile a {
  font-family:'Bricolage Grotesque'; font-weight:800;
  font-size:clamp(30px,8vw,54px); letter-spacing:-.03em;
  color:var(--ink); padding:8px 20px;
  transition:color .2s;
}
.nav-mobile a:hover { color:var(--magenta) }

.nav-mobile .mob-cta {
  margin-top:24px;
  font-size:18px !important;
  background:var(--grad);
  color:#fff !important;
  padding:14px 32px !important;
  border-radius:100px;
}
.nav-mobile .mob-cta:hover { opacity:.9 }

/* ===================== REVEAL ===================== */
.reveal {
  opacity:0; transform:translateY(28px);
  transition:opacity .9s var(--ease), transform .9s var(--ease);
}
.reveal.in { opacity:1; transform:none }
.reveal[data-d="1"] { transition-delay:.08s }
.reveal[data-d="2"] { transition-delay:.16s }
.reveal[data-d="3"] { transition-delay:.24s }
.reveal[data-d="4"] { transition-delay:.32s }

.no-anim .reveal { opacity:1!important; transform:none!important; transition:none!important }
.no-anim .step .bar { width:100%!important; transition:none!important }
.no-anim .grad-text { animation:none!important }

/* ===================== AURORA BLOBS ===================== */
.aurora { position:absolute; inset:-15%; z-index:0; filter:blur(70px); opacity:.9 }
.blob   { position:absolute; border-radius:50%; mix-blend-mode:multiply; will-change:transform }
.b1 { width:48vw;height:48vw; background:radial-gradient(circle,#2BB8D9,transparent 70%); top:-8%;left:-6%; animation:drift1 18s var(--ease) infinite alternate }
.b2 { width:46vw;height:46vw; background:radial-gradient(circle,#EE4E86,transparent 70%); top:6%;right:-10%; animation:drift2 22s var(--ease) infinite alternate }
.b3 { width:42vw;height:42vw; background:radial-gradient(circle,#F9A83E,transparent 70%); bottom:-14%;left:24%; animation:drift3 20s var(--ease) infinite alternate }
.b4 { width:30vw;height:30vw; background:radial-gradient(circle,#2C8FC9,transparent 70%); bottom:2%;right:18%; animation:drift1 26s var(--ease) infinite alternate-reverse }
@keyframes drift1 { to { transform:translate(8vw,6vh) scale(1.15) } }
@keyframes drift2 { to { transform:translate(-7vw,8vh) scale(1.1) } }
@keyframes drift3 { to { transform:translate(5vw,-7vh) scale(1.2) } }

/* ===================== HERO ===================== */
.hero {
  position:relative;
  min-height:100svh;
  display:flex; align-items:center;
  overflow:hidden;
  padding: clamp(100px,14vw,140px) 0 clamp(60px,8vw,100px);
}
.hero-inner { position:relative; z-index:2; width:100% }

.hero h1 {
  font-size: clamp(42px,7.5vw,116px);
  font-weight:800; letter-spacing:-.04em; line-height:.95;
  max-width:min(760px,90vw);
}
.hero p.lead {
  font-size: clamp(16px,1.8vw,21px);
  color:var(--ink-soft); max-width:52ch;
  margin-top: clamp(20px,2.5vw,32px);
  line-height:1.6;
}
.hero-cta {
  display:flex; gap:14px; flex-wrap:wrap;
  margin-top: clamp(28px,3.5vw,44px);
}

/* Scroll cue */
.scrollcue {
  position:absolute; bottom:28px; left:50%; transform:translateX(-50%);
  z-index:3; display:flex; flex-direction:column; align-items:center; gap:10px;
  color:var(--ink-soft);
}
.scrollcue .line {
  width:1.5px; height:44px;
  background:linear-gradient(var(--ink-soft),transparent);
  position:relative; overflow:hidden;
}
.scrollcue .line::after {
  content:''; position:absolute; top:-50%; left:0; width:100%; height:50%;
  background:var(--magenta); animation:cue 1.8s var(--ease) infinite;
}
@keyframes cue { to { top:120% } }
@media (max-width:560px) { .scrollcue { display:none } }

/* ===================== MARQUEE ===================== */
.marquee {
  border-top:1px solid var(--line); border-bottom:1px solid var(--line);
  padding:22px 0; overflow:hidden; background:var(--paper);
}
.marquee-track {
  display:flex; white-space:nowrap; width:max-content;
  animation:march 28s linear infinite;
}
/* marquee toujours en mouvement */
.marquee span {
  font-family:'Bricolage Grotesque'; font-weight:700;
  font-size: clamp(24px,4vw,52px);
  letter-spacing:-.02em; padding:0 28px;
  color:var(--ink); display:inline-flex; align-items:center; gap:28px;
}
.marquee span .dot { width:11px;height:11px;border-radius:50%;background:var(--grad);display:inline-block }
.marquee span em { font-style:normal; color:transparent; -webkit-text-stroke:1.2px var(--surface-line) }
@keyframes march { to { transform:translateX(-50%) } }

/* ===================== SERVICES GRID ===================== */
.svc-grid {
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap: clamp(14px,2vw,24px);
}
@media (max-width:900px) { .svc-grid { grid-template-columns:repeat(2,1fr) } }
@media (max-width:560px) { .svc-grid { grid-template-columns:1fr } }

.svc {
  position:relative; border-radius:var(--r);
  padding: clamp(24px,3vw,40px);
  background:var(--surface); border:1px solid var(--line); overflow:hidden;
  transition:transform .4s var(--ease), box-shadow .4s var(--ease);
  transform-style:preserve-3d;
}
.svc::before {
  content:''; position:absolute; inset:0; background:var(--grad);
  opacity:0; transition:opacity .45s var(--ease); z-index:0;
}
.svc:hover { box-shadow:0 32px 72px -24px rgba(19,34,60,.3) }
.svc > * { position:relative; z-index:1; transition:color .4s }
/* Gradient-fill + white-text hover is desktop-only: on touch it would
   fire on tap and stay "stuck" (illegible dark-on-dark risk) until the
   user taps elsewhere. */
@media (hover:hover) and (pointer:fine) {
  .svc:hover::before { opacity:1 }
  .svc:hover :is(h3,p,.svc-list li,.svc-ico) { color:#fff }
  .svc:hover .svc-ico { border-color:rgba(255,255,255,.4) }
  .svc:hover .svc-list li::before { background:#fff }
}

.svc-ico {
  width:58px; height:58px; border-radius:14px; border:1px solid var(--line);
  display:grid; place-items:center;
  margin:0 0 22px; transition:border-color .4s;
}
.svc-ico svg { width:28px; height:28px }
.svc h3 { font-size:clamp(20px,2.2vw,26px); font-weight:700; letter-spacing:-.02em }
.svc p  { color:var(--ink-soft); margin-top:10px; font-size:15px; line-height:1.55 }
.svc-list { margin-top:20px; display:flex; flex-direction:column; gap:8px }
.svc-list li {
  font-size:14px; font-weight:500; padding-left:18px;
  position:relative; color:var(--ink);
}
.svc-list li::before {
  content:''; position:absolute; left:0; top:8px;
  width:7px; height:7px; border-radius:50%; background:var(--grad);
}

/* ===================== EXEMPLE CONCRET ===================== */
.example-grid {
  display:grid; grid-template-columns:1fr 1fr;
  gap:clamp(32px,5vw,72px); align-items:center;
}
@media (max-width:820px) { .example-grid { grid-template-columns:1fr; gap:32px } }

.example-copy h2 { font-size:clamp(26px,3.4vw,46px); margin-top:16px; margin-bottom:22px }
.example-before, .example-after {
  font-size:clamp(15px,1.5vw,17px); color:var(--ink-soft);
  margin-bottom:14px; line-height:1.6;
}
.example-before strong, .example-after strong { color:var(--ink); font-weight:700 }
.example-copy .btn { margin-top:16px }

.example-visual {
  aspect-ratio:4/3; border-radius:var(--r); background:var(--ink-2);
  position:relative; overflow:hidden;
  padding:clamp(20px,3vw,32px);
  display:flex; align-items:flex-end;
}
.example-visual::before { content:''; position:absolute; inset:0; background:var(--grad); opacity:.1 }
.example-bars {
  display:flex; align-items:flex-end; gap:clamp(6px,1.4vw,12px);
  height:70%; width:100%; position:relative; z-index:1;
}
.example-bars span {
  flex:1; border-radius:6px 6px 0 0; background:var(--grad); opacity:.9;
  transform:scaleY(0); transform-origin:bottom; transition:transform .8s var(--ease);
}
.example-grid.in .example-bars span,
.no-anim .example-bars span { transform:scaleY(1) }
.example-bars span:nth-child(1) { transition-delay:.05s }
.example-bars span:nth-child(2) { transition-delay:.12s }
.example-bars span:nth-child(3) { transition-delay:.19s }
.example-bars span:nth-child(4) { transition-delay:.26s }
.example-bars span:nth-child(5) { transition-delay:.33s }
.example-bars span:nth-child(6) { transition-delay:.40s }

/* ===================== WORKS GRID ===================== */
.works-grid {
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap: clamp(14px,2vw,24px);
}
@media (max-width:580px) { .works-grid { grid-template-columns:1fr } }

.work {
  position:relative; border-radius:var(--r); overflow:hidden;
  aspect-ratio:16/11; cursor:pointer; border:1px solid var(--line);
  display:block;
}
.work .ph {
  position:absolute; inset:0;
  background:repeating-linear-gradient(135deg,var(--pattern-line) 0 2px,transparent 2px 10px), var(--paper-2);
  transition:transform .7s var(--ease);
}
.work .veil { position:absolute; inset:0; background:var(--grad); opacity:0; mix-blend-mode:screen; transition:opacity .5s }
.work .meta {
  position:absolute; inset:0;
  display:flex; flex-direction:column; justify-content:flex-end;
  padding: clamp(18px,2.5vw,30px); z-index:2;
}
.work .cat {
  font-family:'JetBrains Mono'; font-size:11px; letter-spacing:.14em;
  text-transform:uppercase; color:var(--ink-soft); transition:color .4s;
}
.work .ttl {
  font-family:'Bricolage Grotesque'; font-weight:700;
  font-size:clamp(18px,2.2vw,26px); letter-spacing:-.02em;
  margin-top:5px; transition:color .4s;
}
.work .phlabel {
  position:absolute; top:18px; left:18px; z-index:2;
  font-family:'JetBrains Mono'; font-size:11px; color:var(--ink-soft);
  background:rgba(255,255,255,.65); padding:4px 9px; border-radius:6px;
  backdrop-filter:blur(4px); transition:opacity .4s;
}
.work .go {
  position:absolute; top:18px; right:18px; z-index:2;
  width:38px; height:38px; border-radius:50%; background:#fff;
  display:grid; place-items:center; font-size:15px;
  opacity:0; transform:scale(.7) rotate(-30deg);
  transition:all .4s var(--ease);
}
/* Veil fill + white text + reveal chrome is desktop-only so a tap on
   touch doesn't leave the card looking "stuck" with hidden phlabel /
   white-on-gradient text until the user taps elsewhere. */
@media (hover:hover) and (pointer:fine) {
  .work:hover .ph { transform:scale(1.06) }
  .work:hover .veil { opacity:.8 }
  .work:hover .cat, .work:hover .ttl { color:#fff }
  .work:hover .phlabel { opacity:0 }
  .work:hover .go { opacity:1; transform:scale(1) rotate(0) }
}

/* ===================== DARK / ABOUT ===================== */
.dark { background:var(--ink-2); color:#fff; overflow:hidden }
.dark .sec-head h2  { color:#fff }
.dark .sec-head p   { color:rgba(255,255,255,.6) }
.dark-aurora { position:absolute; inset:0; z-index:0; opacity:.4; filter:blur(90px) }
.dark-aurora .blob { mix-blend-mode:screen }

.about-grid {
  position:relative; z-index:2;
  display:grid;
  grid-template-columns:1.1fr .9fr;
  gap: clamp(32px,5vw,80px);
  align-items:center;
}
@media (max-width:860px) { .about-grid { grid-template-columns:1fr; gap:40px } }

.about-statement {
  font-family:'Bricolage Grotesque'; font-weight:600;
  font-size:clamp(24px,3vw,40px); line-height:1.18; letter-spacing:-.02em;
}
.about-statement em {
  font-style:normal; background:var(--grad);
  -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
}
.about-sub { color:rgba(255,255,255,.65); margin-top:22px; font-size:clamp(15px,1.6vw,17px); max-width:48ch }

.about-card {
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.11);
  border-radius:var(--r); padding:clamp(20px,3vw,34px); backdrop-filter:blur(8px);
}
.about-card .row {
  display:flex; align-items:center; gap:14px; padding:16px 0;
  border-bottom:1px solid rgba(255,255,255,.09);
}
.about-card .row:last-child { border-bottom:none }
.about-card .row .k {
  width:44px; height:44px; border-radius:12px; background:var(--grad);
  display:grid; place-items:center; flex-shrink:0;
  font-family:'JetBrains Mono'; font-weight:600; color:#fff; font-size:14px;
}
.about-card .row .t { font-weight:700; font-size:clamp(14px,1.5vw,17px) }
.about-card .row .d { color:rgba(255,255,255,.55); font-size:13px; margin-top:2px }

/* ===================== STEPS / PROCESS ===================== */
.steps {
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap: clamp(16px,2.5vw,28px);
}
@media (max-width:800px) { .steps { grid-template-columns:repeat(2,1fr) } }
@media (max-width:480px) { .steps { grid-template-columns:1fr } }

.step { padding-top:26px; border-top:2px solid var(--line); position:relative }
.step .bar { position:absolute; top:-2px; left:0; height:2px; width:0; background:var(--grad); transition:width 1s var(--ease) }
.step.in .bar { width:100% }
.step h4 { font-size:clamp(17px,1.8vw,21px); font-weight:700; margin:0 0 8px; letter-spacing:-.02em }
.step p  { color:var(--ink-soft); font-size:clamp(14px,1.4vw,15px); line-height:1.55 }

/* ===================== CTA BLOCK ===================== */
.cta {
  position:relative; border-radius:clamp(20px,3vw,36px); overflow:hidden;
  padding:clamp(48px,7vw,96px) clamp(28px,5vw,80px);
  text-align:center; background:var(--ink-2);
}
.cta .cta-aurora { position:absolute; inset:0; z-index:0; opacity:.55; filter:blur(60px) }
.cta-inner { position:relative; z-index:2 }
.cta h2 { color:#fff; font-size:clamp(30px,5vw,72px); font-weight:800; letter-spacing:-.03em; line-height:1 }
.cta p  { color:rgba(255,255,255,.7); margin:20px auto 0; max-width:46ch; font-size:clamp(16px,1.7vw,19px) }
.cta .cta-row { display:flex; gap:14px; justify-content:center; margin-top:36px; flex-wrap:wrap }

/* ===================== FOOTER ===================== */
.footer { padding:clamp(56px,7vw,80px) 0 clamp(24px,3vw,40px); background:var(--paper) }
.footer-top {
  display:grid;
  grid-template-columns:1.4fr repeat(3,1fr);
  gap: clamp(32px,4vw,64px);
  padding-bottom: clamp(32px,4vw,50px);
  border-bottom:1px solid var(--line);
  align-items:start;
}
.footer .brand img { height:40px }
.foot-tag { color:var(--ink-soft); margin-top:14px; font-size:14px; max-width:30ch; line-height:1.6 }
.foot-col h5 {
  font-family:'JetBrains Mono'; font-size:10px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--ink-soft); margin-bottom:14px; font-weight:600;
}
.foot-col a {
  display:block; font-weight:600; font-size:14px;
  padding:7px 0; margin-bottom:2px;
  color:var(--ink); transition:color .22s, transform .22s var(--ease);
}
.foot-col a:hover { color:var(--magenta); transform:translateX(3px) }
.footer-bot {
  display:flex; justify-content:space-between; align-items:center;
  gap:12px; flex-wrap:wrap;
  padding-top: clamp(20px,2.5vw,28px);
  color:var(--ink-soft);
}
.footer-bot .mono { font-size:11px }

@media (max-width:860px) {
  .footer-top { grid-template-columns:1fr 1fr; }
  .footer-top > div:first-child { grid-column:1/-1 }
}
@media (max-width:480px) {
  .footer-top { grid-template-columns:1fr }
  .footer-top > div:first-child { grid-column:auto }
  .footer-bot { flex-direction:column; text-align:center; gap:8px }
}

/* ===================== INNER PAGE HERO ===================== */
.page-hero {
  position:relative; overflow:hidden; background:var(--ink-2);
  padding: clamp(120px,16vw,180px) 0 clamp(60px,8vw,96px);
}
.page-hero .aurora { opacity:.45 }
.page-hero-inner { position:relative; z-index:2 }

.page-hero .breadcrumb {
  display:inline-flex; align-items:center; gap:8px;
  color:rgba(255,255,255,.58); font-family:'JetBrains Mono';
  font-size:11px; letter-spacing:.14em; text-transform:uppercase; margin-bottom:18px;
}
.page-hero .breadcrumb a { color:var(--cyan); transition:color .22s }
.page-hero .breadcrumb a:hover { color:var(--pink) }
.page-hero h1 {
  color:#fff; font-size:clamp(38px,6.5vw,90px);
  font-weight:800; letter-spacing:-.035em; line-height:.97;
}
.page-hero p {
  color:rgba(255,255,255,.58); font-size:clamp(16px,1.8vw,21px);
  margin-top:18px; max-width:52ch;
}

/* ===================== CONTACT FORM ===================== */
.contact-grid {
  display:grid;
  grid-template-columns:1fr 1.4fr;
  gap: clamp(40px,6vw,96px);
  align-items:start;
}
@media (max-width:860px) { .contact-grid { grid-template-columns:1fr; gap:48px } }

.contact-info h2 { font-size:clamp(26px,3.5vw,44px); margin-bottom:14px }
.contact-info > p { color:var(--ink-soft); margin-bottom:36px; font-size:clamp(15px,1.6vw,17px) }

.contact-items { display:flex; flex-direction:column; gap:14px; margin-bottom:32px }
.contact-item {
  display:flex; align-items:center; gap:14px; padding:16px 18px;
  background:var(--surface); border-radius:14px; border:1px solid var(--line);
  transition:transform .3s var(--ease);
}
.contact-item:hover { transform:translateX(5px) }
.contact-item-icon {
  width:42px; height:42px; min-width:42px; border-radius:11px;
  background:var(--grad); display:grid; place-items:center; font-size:1rem;
}
.contact-item-label {
  font-family:'JetBrains Mono'; font-size:9.5px;
  letter-spacing:.14em; text-transform:uppercase; color:var(--ink-soft); margin-bottom:2px;
}
.contact-item-value { font-weight:700; font-size:14px }
.contact-item-value a:hover { color:var(--magenta) }

.contact-form-box {
  background:var(--surface); border-radius:var(--r); padding:clamp(24px,3.5vw,44px);
  box-shadow:0 8px 40px rgba(0,0,0,.07); border:1px solid var(--line);
}
.form-title { font-size:clamp(18px,2vw,22px); margin-bottom:4px }
.form-sub   { color:var(--ink-soft); font-size:14px; margin-bottom:26px }

.form-row { display:grid; grid-template-columns:1fr 1fr; gap:16px }
@media (max-width:560px) { .form-row { grid-template-columns:1fr } }

.form-group { margin-bottom:16px }
.form-label { display:block; font-weight:600; font-size:13.5px; margin-bottom:6px }
.form-label span { color:var(--magenta); margin-left:2px }

.form-input,
.form-select,
.form-textarea {
  width:100%; padding:12px 15px;
  border:1.5px solid var(--line); border-radius:12px;
  font-family:'Manrope'; font-size:16px; color:var(--ink);
  background:var(--paper); outline:none;
  transition:border-color .22s, box-shadow .22s, background .22s;
  -webkit-appearance:none;
}
.form-input::placeholder,
.form-textarea::placeholder { color:var(--placeholder) }
.form-input:focus,
.form-select:focus,
.form-textarea:focus {
  border-color:var(--cyan); box-shadow:0 0 0 4px rgba(43,184,217,.11); background:var(--surface);
}
.form-textarea { resize:vertical; min-height:130px }
.form-select   { cursor:pointer }

.form-submit {
  width:100%; padding:14px; border-radius:100px; border:none;
  background:var(--grad); color:#fff;
  font-family:'Manrope'; font-size:16px; font-weight:700;
  display:flex; align-items:center; justify-content:center; gap:10px;
  box-shadow:0 10px 28px -8px rgba(238,78,134,.5); margin-top:6px; cursor:pointer;
  transition:transform .3s var(--ease), box-shadow .3s var(--ease);
}
.form-submit:hover { transform:translateY(-2px); box-shadow:0 16px 36px -8px rgba(238,78,134,.65) }
.form-submit.loading { opacity:.7; pointer-events:none }
.form-submit .btn-text { display:flex; align-items:center; gap:8px }
.form-submit .spinner-el { display:none }
.form-submit.loading .btn-text { display:none }
.form-submit.loading .spinner-el { display:block }

.spin { width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:rotate .7s linear infinite }
@keyframes rotate { to { transform:rotate(360deg) } }

.form-alert {
  display:none; padding:13px 16px; border-radius:11px; font-size:14px;
  font-weight:600; margin-top:14px; align-items:center; gap:9px;
}
.form-alert.show { display:flex }
.form-alert.success { background:rgba(34,197,94,.1); color:#15803d; border:1px solid rgba(34,197,94,.2) }
.form-alert.error   { background:rgba(239,68,68,.1);  color:#b91c1c; border:1px solid rgba(239,68,68,.2) }
/* Le texte #15803d/#b91c1c est pensé pour un fond clair : sur --surface
   sombre le contraste tombe sous 3:1. On éclaircit uniquement en thème
   sombre, sans toucher au fond/à la bordure. */
:root[data-theme="dark"] .form-alert.success { color:#4ade80 }
:root[data-theme="dark"] .form-alert.error   { color:#f87171 }
@media (prefers-color-scheme:dark) {
  :root:not([data-theme="light"]) .form-alert.success { color:#4ade80 }
  :root:not([data-theme="light"]) .form-alert.error   { color:#f87171 }
}
.form-group.has-error .form-input,
.form-group.has-error .form-select,
.form-group.has-error .form-textarea { border-color:#ef4444; box-shadow:0 0 0 3px rgba(239,68,68,.09) }

/* ===================== REDUCED MOTION ===================== */
@media (prefers-reduced-motion:reduce) {
  *, *::before, *::after { animation-duration:.01ms!important; transition-duration:.01ms!important }
  .cursor-glow { display:none }
}
