/* Polices AUTO-HÉBERGÉES (#35) — gain LCP (zéro requête render-blocking cross-origin)
   + RGPD (aucune IP visiteur envoyée à Google). Fonts variables, sous-ensemble latin
   (couvre le français + ponctuation/€/flèches). Preload du woff2 dans chaque <head>. */
@font-face { font-family: 'Inter';  font-style: normal; font-weight: 400; font-display: swap; src: url('/assets/fonts/inter.woff2') format('woff2'); }
@font-face { font-family: 'Inter';  font-style: normal; font-weight: 600; font-display: swap; src: url('/assets/fonts/inter.woff2') format('woff2'); }
@font-face { font-family: 'Outfit'; font-style: normal; font-weight: 700; font-display: swap; src: url('/assets/fonts/outfit.woff2') format('woff2'); }
@font-face { font-family: 'Outfit'; font-style: normal; font-weight: 800; font-display: swap; src: url('/assets/fonts/outfit.woff2') format('woff2'); }
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 400; font-display: swap; src: url('/assets/fonts/jetbrains-mono.woff2') format('woff2'); } /* presentation.html : blocs de code */
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 600; font-display: swap; src: url('/assets/fonts/jetbrains-mono.woff2') format('woff2'); }

/* Anti-flash i18n — la langue par défaut est l'ANGLAIS mais le HTML source est en français.
   On masque main/footer jusqu'à ce que script.js applique la langue puis retire .i18n-cloak
   (révélation aussi via un setTimeout de secours). La nav se traduit instantanément (dico
   inline) donc reste visible. .i18n-cloak n'est posé QUE sur les pages qui chargent script.js. */
html.i18n-cloak main,
html.i18n-cloak footer { visibility: hidden !important; }

/* ═══════════════════════════════════════
   VARIABLES
═══════════════════════════════════════ */
:root {
  /* Couleurs principales — bleu Discord (blurple) + violet doux */
  --purple: #5865F2;            /* Discord blurple — accent primaire */
  --purple-light: #8B5CF6;      /* Violet doux — accent secondaire */
  --cyan: #60a5fa;
  --accent-teal: #6dcfb0;
  --bg: #05020f;
  --bg-card: rgba(88, 101, 242, 0.05);
  --bg-card-hover: rgba(88, 101, 242, 0.10);
  --border: rgba(88, 101, 242, 0.18);
  --border-hover: rgba(88, 101, 242, 0.45);
  --text: #ece8ff;
  --text-muted: #8b84b0;
  /* WCAG AA fix : #6f679a sur --bg #05020f donnait 3.57:1 → relevé à #9892bd (≈4.5:1) */
  --text-dim: #9892bd;
  --gradient: linear-gradient(135deg, #5865F2, #8B5CF6);
  --gradient-text: linear-gradient(135deg, #5865F2 0%, #8B5CF6 100%);
  --glow-purple: 0 0 40px rgba(88, 101, 242, 0.35);
  --radius: 16px;
  --radius-sm: 10px;
  --radius-lg: 24px;
  --transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  --font-display: 'Outfit', sans-serif;
  --font-body: 'Inter', sans-serif;
}

/* ═══════════════════════════════════════
   RESET & BASE
═══════════════════════════════════════ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html {
  scroll-behavior: smooth;
  overflow-x: hidden;
  /* Scrollbar globale CACHÉE sur TOUTES les pages — fix décalage 11.35px
     entre nav-links dashboard et autres pages. Avant : dashboard-enhance.css
     cachait scrollbar (width:0) seulement sur dashboard → accueil/tarifs/docs
     réservaient l'espace scrollbar système (~11-17px) → nav-links calculée
     avec width différente. Maintenant : scrollbar cachée partout, calcul
     identique. Scroll reste possible via wheel/touchpad/keys. */
  scrollbar-width: none;       /* Firefox */
  -ms-overflow-style: none;    /* IE/Edge legacy */
}
html::-webkit-scrollbar,
body::-webkit-scrollbar {
  width: 0 !important;
  height: 0 !important;
  display: none !important;
}
/* Selection text : violet thématique au lieu du blue système. */
::selection {
  background: rgba(139, 92, 246, 0.40);
  color: #ffffff;
}
::-moz-selection {
  background: rgba(139, 92, 246, 0.40);
  color: #ffffff;
}
section[id], h1[id], h2[id], h3[id] { scroll-margin-top: 80px; }
body {
  font-family: var(--font-body);
  background: var(--bg);
  color: var(--text);
  line-height: 1.6;
  overflow-x: hidden;
  min-height: 100vh;
  /* Font smoothing global (avant : seul dashboard l'avait) */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  scrollbar-width: none;
}
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
button { font-family: var(--font-body); cursor: pointer; }
input, textarea, select { font-family: var(--font-body); }

/* ═══════════════════════════════════════
   BACKGROUND EFFECTS
═══════════════════════════════════════ */
.bg-effects {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
}
.bg-grid {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(88, 101, 242, 0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(139, 92, 246, 0.04) 1px, transparent 1px);
  background-size: 64px 64px;
  mask-image: radial-gradient(ellipse 90% 70% at 50% 0%, black 30%, transparent 100%);
}
/* ── Ciel étoilé animé ──────────────────────────────────────
   Même technique que presentation.html : étoiles en box-shadow
   multiples (coordonnées vw/vh, générées une fois — seed 42),
   2 couches déphasées pour un scintillement organique, étoiles
   teintées violet/cyan en rappel de palette. CSS pur, zéro JS. */
.bg-effects::before,
.bg-effects::after {
  content: "";
  position: absolute;
  top: 0; left: 0;
  width: 2px; height: 2px;
  border-radius: 50%;
}
.bg-effects::before {
  box-shadow: 9vw 58vh 0 0 rgba(255,255,255,0.41), 38vw 3vh 0 0 rgba(255,255,255,0.39), 12vw 87vh 0 0 rgba(255,255,255,0.54), 85vw 50vh 0 0 rgba(255,255,255,0.90), 86vw 60vh 0 0 rgba(255,255,255,0.67), 14vw 95vh 0 0 rgba(255,255,255,0.31), 89vw 55vh 0 0 rgba(255,255,255,0.85), 55vw 26vh 0 0 rgba(255,255,255,0.37), 82vw 16vh 0 0 rgba(255,255,255,0.86), 47vw 6vh 0 0 rgba(255,255,255,0.79), 54vw 83vh 0 0 rgba(255,255,255,0.26), 68vw 38vh 0 0 rgba(255,255,255,0.80), 70vw 71vh 0 0 rgba(255,255,255,0.63), 99vw 45vh 0 0 rgba(255,255,255,0.72), 19vw 45vh 0 0 rgba(255,255,255,0.31), 77vw 59vh 0 0 rgba(255,255,255,0.33), 39vw 22vh 0 0 rgba(255,255,255,0.77), 2vw 28vh 0 0 rgba(255,255,255,0.43), 88vw 96vh 0 0 rgba(255,255,255,0.47), 87vw 58vh 0 0 rgba(255,255,255,0.38), 31vw 13vh 0 0 rgba(255,255,255,0.47), 10vw 92vh 0 0 rgba(255,255,255,0.89), 43vw 71vh 0 0 rgba(255,255,255,0.77), 12vw 51vh 0 0 rgba(255,255,255,0.45), 24vw 60vh 0 0 rgba(255,255,255,0.33), 49vw 21vh 0 0 rgba(255,255,255,0.70), 69vw 88vh 0 0 rgba(255,255,255,0.40), 70vw 84vh 0 0 rgba(255,255,255,0.78), 15vw 13vh 0 0 rgba(255,255,255,0.51), 65vw 99vh 0 0 rgba(255,255,255,0.60), 75vw 43vh 0 0 rgba(255,255,255,0.53), 8vw 83vh 0 0 rgba(255,255,255,0.28), 80vw 17vh 0 0 rgba(255,255,255,0.89), 28vw 49vh 0 0 rgba(255,255,255,0.50), 91vw 20vh 0 0 rgba(255,255,255,0.80), 53vw 26vh 0 0 rgba(255,255,255,0.46), 1vw 65vh 0 0 rgba(255,255,255,0.51), 47vw 25vh 0 0 rgba(255,255,255,0.49), 70vw 55vh 0 0 rgba(255,255,255,0.64), 23vw 38vh 0 0 rgba(255,255,255,0.64), 94vw 24vh 0 0 rgba(255,255,255,0.52), 95vw 57vh 0 0 rgba(255,255,255,0.85), 3vw 26vh 0 0 rgba(255,255,255,0.85), 50vw 95vh 0 0 rgba(255,255,255,0.60), 71vw 82vh 0 0 rgba(255,255,255,0.89), 56vw 69vh 0 0 rgba(255,255,255,0.45), 34vw 46vh 0 0 rgba(255,255,255,0.28), 97vw 4vh 0 0 rgba(255,255,255,0.75), 30vw 65vh 0 0 rgba(255,255,255,0.62), 47vw 25vh 0 0 rgba(255,255,255,0.68), 51vw 3vh 0 0 rgba(255,255,255,0.72), 73vw 90vh 0 0 rgba(255,255,255,0.80), 54vw 100vh 0 0 rgba(255,255,255,0.73), 62vw 78vh 0 0 rgba(255,255,255,0.89), 54vw 62vh 0 0 rgba(255,255,255,0.29), 75vw 2vh 0 0 rgba(255,255,255,0.41), 45vw 35vh 0 0 rgba(255,255,255,0.86), 57vw 3vh 0 0 rgba(255,255,255,0.62);
  animation: kx-star-twinkle 4.5s ease-in-out infinite alternate;
}
.bg-effects::after {
  width: 1px; height: 1px;
  box-shadow: 59vw 7vh 0 0 rgba(255,255,255,0.49), 11vw 26vh 0 0 rgba(255,255,255,0.33), 56vw 43vh 0 0 rgba(255,255,255,0.42), 67vw 60vh 0 0 rgba(255,255,255,0.83), 70vw 28vh 0 0 rgba(255,255,255,0.47), 88vw 56vh 0 0 rgba(255,255,255,0.80), 75vw 59vh 0 0 rgba(255,255,255,0.64), 15vw 23vh 0 0 rgba(255,255,255,0.42), 34vw 44vh 0 0 rgba(255,255,255,0.31), 64vw 83vh 0 0 rgba(255,255,255,0.72), 69vw 43vh 0 0 rgba(255,255,255,0.42), 73vw 52vh 0 0 rgba(255,255,255,0.46), 68vw 27vh 0 0 rgba(255,255,255,0.70), 96vw 80vh 0 0 rgba(255,255,255,0.73), 16vw 59vh 0 0 rgba(255,255,255,0.78), 70vw 1vh 0 0 rgba(255,255,255,0.56), 5vw 83vh 0 0 rgba(255,255,255,0.51), 39vw 97vh 0 0 rgba(255,255,255,0.39), 61vw 12vh 0 0 rgba(255,255,255,0.65), 57vw 93vh 0 0 rgba(255,255,255,0.55), 15vw 82vh 0 0 rgba(255,255,255,0.34), 77vw 12vh 0 0 rgba(255,255,255,0.83), 79vw 87vh 0 0 rgba(255,255,255,0.38), 86vw 9vh 0 0 rgba(255,255,255,0.77), 93vw 62vh 0 0 rgba(255,255,255,0.66), 89vw 76vh 0 0 rgba(255,255,255,0.60), 45vw 78vh 0 0 rgba(255,255,255,0.70), 50vw 60vh 0 0 rgba(255,255,255,0.39), 16vw 42vh 0 0 rgba(255,255,255,0.39), 79vw 69vh 0 0 rgba(255,255,255,0.33), 23vw 9vh 0 0 rgba(255,255,255,0.39), 98vw 40vh 0 0 rgba(255,255,255,0.74), 12vw 11vh 0 0 rgba(255,255,255,0.51), 26vw 45vh 0 0 rgba(255,255,255,0.75), 36vw 72vh 0 0 rgba(255,255,255,0.61), 23vw 96vh 0 0 rgba(255,255,255,0.43), 5vw 86vh 0 0 rgba(255,255,255,0.71), 31vw 33vh 0 0 rgba(255,255,255,0.36), 80vw 46vh 0 0 rgba(167,139,250,0.82), 78vw 44vh 0 0 rgba(167,139,250,0.52), 4vw 69vh 0 0 rgba(167,139,250,0.81), 74vw 28vh 0 0 rgba(167,139,250,0.53), 86vw 70vh 0 0 rgba(167,139,250,0.59), 82vw 18vh 0 0 rgba(167,139,250,0.52), 74vw 18vh 0 0 rgba(167,139,250,0.58), 98vw 76vh 0 0 rgba(167,139,250,0.64), 51vw 72vh 0 0 rgba(103,232,249,0.58), 6vw 51vh 0 0 rgba(103,232,249,0.51), 99vw 23vh 0 0 rgba(103,232,249,0.65), 88vw 58vh 0 0 rgba(103,232,249,0.57), 93vw 95vh 0 0 rgba(103,232,249,0.53), 65vw 100vh 0 0 rgba(103,232,249,0.65);
  opacity: .7;
  animation: kx-star-twinkle 6s ease-in-out infinite alternate-reverse;
}
@keyframes kx-star-twinkle {
  from { opacity: 0.45; }
  to   { opacity: 1; }
}
/* Étoiles filantes — rares et discrètes (1 passage / ~13 s et ~21 s,
   traversée ~1,5 s). Posées sur .bg-grid::* car les orbes sont
   blur()és (un pseudo y hériterait du flou). rotate == pente de la
   trajectoire (tan 12° ≈ 23/110, tan 18° ≈ 31/95). */
.bg-grid::before,
.bg-grid::after {
  content: "";
  position: absolute;
  height: 2px;
  border-radius: 999px;
  opacity: 0;
}
.bg-grid::before {
  width: 170px;
  top: 14vh; left: -180px;
  background: linear-gradient(90deg, transparent, rgba(167, 139, 250, 0.55) 55%, rgba(255, 255, 255, 0.95));
  box-shadow: 0 0 8px rgba(139, 92, 246, 0.45);
  animation: kx-shoot-1 13s linear 4s infinite;
}
.bg-grid::after {
  width: 130px;
  top: 48vh; left: -140px;
  background: linear-gradient(90deg, transparent, rgba(103, 232, 249, 0.5) 55%, rgba(255, 255, 255, 0.9));
  box-shadow: 0 0 8px rgba(6, 182, 212, 0.4);
  animation: kx-shoot-2 21s linear 11s infinite;
}
@keyframes kx-shoot-1 {
  0%, 88% { opacity: 0; transform: translate3d(0, 0, 0) rotate(12deg); }
  89%     { opacity: 0.9; }
  97%     { opacity: 0.9; }
  100%    { opacity: 0; transform: translate3d(110vw, 23vw, 0) rotate(12deg); }
}
@keyframes kx-shoot-2 {
  0%, 90% { opacity: 0; transform: translate3d(0, 0, 0) rotate(18deg); }
  91%     { opacity: 0.85; }
  98%     { opacity: 0.85; }
  100%    { opacity: 0; transform: translate3d(95vw, 31vw, 0) rotate(18deg); }
}
/* Accessibilité : étoiles statiques (pas de scintillement ni filantes)
   si l'utilisateur préfère réduire le mouvement. */
@media (prefers-reduced-motion: reduce) {
  .bg-effects::before,
  .bg-effects::after { animation: none; }
  .bg-grid::before,
  .bg-grid::after { animation: none; opacity: 0; }
}
/* Accueil (index.html) : dans le HERO, la constellation interactive
   #hero-canvas (étoiles qui suivent la souris) reste le SEUL effet —
   pas de ciel étoilé fixed par-dessus (demande sponsor 2026-06-11).
   Les autres pages gardent le ciel étoilé plein écran. */
.bg-effects-no-stars::before,
.bg-effects-no-stars::after,
.bg-effects-no-stars .bg-grid::before,
.bg-effects-no-stars .bg-grid::after { content: none; }
/* … mais SOUS le hero, l'accueil retrouve ses étoiles (2e demande
   sponsor 2026-06-11) : couche ABSOLUE qui défile avec la page (le fond
   fixed couvrirait aussi le hero), démarrant à la hauteur RÉELLE du
   hero (--kx-hero-bottom posée par script.js — fallback 100vh JS off).
   Tuiles répétées (340/480px, premiers entre eux → pas de motif
   visible) = couverture de toute la hauteur de page. z-index:-1 =
   au-dessus du fond propagé du body, sous tout le contenu. */
body.kx-stars-below-hero { position: relative; }
body.kx-stars-below-hero::before,
body.kx-stars-below-hero::after {
  content: "";
  position: absolute;
  z-index: -1;
  pointer-events: none;
  left: 0; right: 0;
  top: var(--kx-hero-bottom, 100vh);
  bottom: 0;
}
body.kx-stars-below-hero::before {
  background-image:
    radial-gradient(1px 1px at 208px 315px, rgba(255,255,255,0.80) 50%, transparent 51%),
    radial-gradient(1px 1px at 123px 18px, rgba(255,255,255,0.76) 50%, transparent 51%),
    radial-gradient(1px 1px at 331px 181px, rgba(255,255,255,0.84) 50%, transparent 51%),
    radial-gradient(1px 1px at 206px 264px, rgba(255,255,255,0.58) 50%, transparent 51%),
    radial-gradient(2px 2px at 161px 290px, rgba(255,255,255,0.50) 50%, transparent 51%),
    radial-gradient(1px 1px at 31px 255px, rgba(255,255,255,0.54) 50%, transparent 51%),
    radial-gradient(2px 2px at 61px 334px, rgba(255,255,255,0.46) 50%, transparent 51%);
  background-size: 340px 340px;
  animation: kx-star-twinkle 4.5s ease-in-out infinite alternate;
}
body.kx-stars-below-hero::after {
  background-image:
    radial-gradient(1px 1px at 219px 52px, rgba(255,255,255,0.50) 50%, transparent 51%),
    radial-gradient(1px 1px at 371px 41px, rgba(255,255,255,0.59) 50%, transparent 51%),
    radial-gradient(1px 1px at 128px 283px, rgba(255,255,255,0.76) 50%, transparent 51%),
    radial-gradient(1px 1px at 246px 342px, rgba(255,255,255,0.42) 50%, transparent 51%),
    radial-gradient(1px 1px at 420px 300px, rgba(255,255,255,0.34) 50%, transparent 51%),
    radial-gradient(1px 1px at 233px 86px, rgba(255,255,255,0.80) 50%, transparent 51%),
    radial-gradient(2px 2px at 122px 442px, rgba(167,139,250,0.7) 50%, transparent 51%),
    radial-gradient(1px 1px at 282px 237px, rgba(167,139,250,0.6) 50%, transparent 51%),
    radial-gradient(2px 2px at 84px 208px, rgba(103,232,249,0.6) 50%, transparent 51%);
  background-size: 480px 480px;
  opacity: .7;
  animation: kx-star-twinkle 6s ease-in-out infinite alternate-reverse;
}
@media (prefers-reduced-motion: reduce) {
  body.kx-stars-below-hero::before,
  body.kx-stars-below-hero::after { animation: none; }
}
.bg-orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(120px);
  pointer-events: none;
}
.bg-orb-1 {
  width: 800px; height: 800px;
  background: radial-gradient(circle, rgba(88, 101, 242, 0.22), transparent 70%);
  top: -280px; left: -180px;
  animation: orb-drift 28s infinite alternate ease-in-out;
}
.bg-orb-2 {
  width: 650px; height: 650px;
  /* Violet → cyan : même halo bicolore que le hero de presentation.html */
  background: radial-gradient(circle, rgba(139, 92, 246, 0.20), rgba(6, 182, 212, 0.07) 55%, transparent 75%);
  bottom: -150px; right: -100px;
  animation: orb-drift 22s infinite alternate-reverse ease-in-out;
}
/* translate seul (scale retiré) : le scale re-rasterisait le blur 120px à
   chaque frame — mesuré 12,5→~21 FPS en rendu logiciel (audit perf 06-12).
   La dérive ±3-6 % d'échelle était imperceptible sous blur(120px). */
@keyframes orb-drift {
  0%   { transform: translate(0, 0); }
  33%  { transform: translate(40px, -60px); }
  66%  { transform: translate(-30px, 40px); }
  100% { transform: translate(50px, 30px); }
}

/* ═══════════════════════════════════════
   LAYOUT
═══════════════════════════════════════ */
.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 28px;
  position: relative;
  z-index: 1;
}
/* ═══════════════════════════════════════
   NAVBAR — Glass + dot indicator
═══════════════════════════════════════ */
.navbar {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 1000;
  padding: 18px 28px;
  background: rgba(5, 2, 15, 0.55);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid rgba(120, 140, 255, 0.06);
  /* will-change hint pour GPU compositing — évite repaints sur scroll.
     transitions limitées à 0.25s pour feel plus snappy (avant 0.3s flash). */
  transition: background 0.25s ease, border-color 0.25s ease, padding 0.25s ease, box-shadow 0.25s ease;
  will-change: background, padding;
}
.navbar.scrolled {
  background: rgba(5, 2, 15, 0.85);
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
  border-color: rgba(120, 140, 255, 0.14);
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.35);
  padding: 12px 28px;
}
.nav-inner {
  max-width: 1200px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  /* gap 32→24 : récupère ~16px pour que la nav FR complète (6 liens +
     "Tableau de bord" allongé) tienne sans chevaucher le bouton CTA jusqu'au
     breakpoint hamburger (1100px). Voir aussi padding .nav-link réduit. */
  gap: 24px;
  min-height: 44px;
}
/* Logo : icône + wordmark "Kalvyx" (sans le KVX en doublon) */
.logo {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}
.logo-name {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.05rem;
  color: var(--text);
  letter-spacing: -0.01em;
  line-height: 1;
}
/* Liens nav : dot lumineux animé sous le lien actif/hover */
.nav-links {
  display: flex;
  align-items: center;
  gap: 4px;
  position: relative;
  flex: 1;
}
/* .nav-link = nouvelle classe (index.html) ; .nav-links > a = compatibilité autres pages */
.nav-link,
.nav-links a {
  /* padding-x 16→13 : ~48px récupérés sur 6 liens, évite le chevauchement
     nav/CTA entre 1100 et 1320px (bug nav responsive, "Tableau de bord"). */
  padding: 8px 13px;
  position: relative;
  font-size: 0.9rem;
  font-weight: 500;
  color: var(--text-muted);
  transition: color 0.25s ease;
  text-decoration: none;
  border-radius: 0;
  background: transparent !important;
}
.nav-link:hover,
.nav-links a:hover { color: var(--purple-light); background: transparent; }
.nav-link.active,
.nav-links a.active { color: var(--text); background: transparent; }
/* .logo-kvx GLOBAL — masqué partout (doublon avec .logo-name "Kalvyx").
   Avant : seul dashboard cachait ce span via dashboard-enhance.css ; sur
   accueil/tarifs/features/docs/etc le footer rendait "KVXKalvyx" doublon. */
.logo .logo-kvx,
.logo-kvx { display: none; }
/* Indicateur (dot) qui glisse entre les liens */
.nav-indicator {
  position: absolute;
  bottom: -2px;
  left: 0;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--gradient);
  box-shadow: 0 0 10px rgba(88, 101, 242, 0.7), 0 0 20px rgba(139, 92, 246, 0.45);
  transform: translateX(0);
  transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), width 0.3s ease, opacity 0.3s ease;
  opacity: 0;
  pointer-events: none;
  will-change: transform;
}
.nav-indicator.visible { opacity: 1; }
.nav-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-left: auto;
  /* Tout le groupe d'actions (Rejoindre + CTA + FR/EN) collé au bord droit de la navbar
     (demande user). Navbar = position:fixed → ancrage. right:28px = padding-right de la navbar ;
     centré verticalement via top/transform. */
  position: absolute;
  right: 28px;
  top: 50%;
  transform: translateY(-50%);
}
/* CTA navbar : icône Discord à gauche */
.nav-cta { padding: 8px 16px; font-size: 0.85rem; min-height: 38px; }
.nav-cta .discord-icon { flex-shrink: 0; }
/* Switch de langue FR|EN (injecté dans la nav par initI18n — présent sur toutes les pages) */
.nav-lang {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 3px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--bg-card);
  margin-left: 10px;   /* petit écart avec le CTA (le groupe entier est collé à droite via .nav-actions) */
}
.nav-lang-opt {
  border: none;
  background: transparent;
  color: var(--text-dim);
  font-family: inherit;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  padding: 6px 10px;
  min-height: 24px;            /* WCAG 2.5.8 : cible tactile ≥ 24px */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 7px;
  cursor: pointer;
  line-height: 1;
  transition: color 160ms ease, background 160ms ease;
}
.nav-lang-opt:hover { color: var(--text); }
/* WCAG 2.2 AA : #fff sur --purple-light #8B5CF6 = 4.23:1 (< 4.5). Fond assombri
   à #7548cf (white = 5.86:1) — violet de marque quasi inchangé. Ciblé ici pour
   ne PAS dégrader les usages "fond clair + texte foncé" du token --purple-light. */
.nav-lang-opt.active { background: #7548cf; color: #fff; }
/* Switch langue de la BARRE mobile — toujours visible, à gauche du hamburger
   (une v1 dans le tiroir passait sous le pli des petits écrans). Masqué en
   desktop : l'instance de .nav-actions prend le relais ≥ 1255px. */
.nav-lang-bar { display: none; }
/* Au doigt : cible ≥ 34px de haut dans la barre mobile (24px = trop juste). */
.nav-lang-bar .nav-lang-opt { min-height: 34px; padding: 8px 14px; }
.btn-primary {
  padding: 9px 20px;
  border-radius: var(--radius-sm);
  /* WCAG 2.2 AA : stop clair du --gradient (#8B5CF6) donnait #fff = 4.23:1 (< 4.5).
     Dégradé local avec stop clair assombri à #7548cf (#fff = 5.86:1 ; le stop
     blurple #5865F2 = 4.61:1). Local pour ne pas toucher les 10 autres --gradient. */
  background: linear-gradient(135deg, #5865F2, #7548cf);
  color: #fff;
  font-weight: 600;
  font-size: 0.875rem;
  border: none;
  transition: var(--transition);
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
  min-height: 44px;
  position: relative;
  overflow: hidden;
}
.btn-primary::after {
  content: '';
  position: absolute;
  top: 0; left: -80%;
  width: 55%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.22), transparent);
  animation: btn-shine 3.5s infinite 1s;
  pointer-events: none;
}
@keyframes btn-shine {
  0%      { left: -80%; }
  35%, 100% { left: 130%; }
}
.btn-primary:hover {
  opacity: 0.9;
  transform: translateY(-2px);
  box-shadow: var(--glow-purple), 0 8px 32px rgba(139,92,246,0.25);
}
.btn-secondary {
  padding: 9px 20px;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text);
  font-weight: 600;
  font-size: 0.875rem;
  border: 1px solid var(--border);
  transition: var(--transition);
  display: inline-flex;
  align-items: center;
  gap: 6px;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
  min-height: 44px;
}
.btn-secondary:hover {
  border-color: var(--purple);
  color: var(--purple-light);
  background: rgba(139,92,246,0.06);
  transform: translateY(-2px);
  box-shadow: var(--glow-purple);
}
.btn-large {
  padding: 14px 28px;
  font-size: 1rem;
  border-radius: 12px;
}

/* hamburger */
.hamburger {
  display: none;
  flex-direction: column;
  gap: 5px;
  background: none;
  border: none;
  padding: 8px;
  margin-left: auto;
  z-index: 1001;
}
.hamburger span {
  display: block;
  width: 22px; height: 2px;
  background: var(--text);
  border-radius: 2px;
  transition: var(--transition);
}
.hamburger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.hamburger.open span:nth-child(2) { opacity: 0; }
.hamburger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* mobile menu */
.mobile-menu {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(5, 2, 15, 0.97);
  backdrop-filter: blur(16px);
  z-index: 999;
  padding: 100px 32px 40px;
  flex-direction: column;
  gap: 8px;
  border-bottom: none;
  overflow-y: auto; /* petits écrans : le contenu du tiroir doit pouvoir défiler */
}
.mobile-menu.open { display: flex; }
.mobile-menu a {
  font-family: var(--font-display);
  font-size: 2rem;
  font-weight: 800;
  color: var(--text-muted);
  padding: 16px 0;
  border-bottom: 1px solid var(--border);
  transition: var(--transition);
}
.mobile-menu a:hover { color: var(--purple-light); padding-left: 8px; }
.mobile-menu .btn-primary {
  margin-top: 24px;
  text-align: center;
  font-size: 1.1rem;
  padding: 16px;
  border-radius: var(--radius);
  justify-content: center;
}

/* ═══════════════════════════════════════
   TYPOGRAPHY
═══════════════════════════════════════ */
.gradient-text {
  background: var(--gradient-text);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}
.section-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--cyan);
  margin-bottom: 14px;
}
.section-label::before {
  content: '';
  display: block;
  width: 16px; height: 2px;
  background: var(--cyan);
  border-radius: 2px;
}
.section-title {
  font-family: var(--font-display);
  font-size: clamp(2rem, 4vw, 2.8rem);
  font-weight: 800;
  line-height: 1.1;
  letter-spacing: -0.02em;
  margin-bottom: 14px;
  color: var(--text);
}
.section-subtitle {
  font-size: 1rem;
  color: var(--text-muted);
  line-height: 1.7;
  max-width: 560px;
}

/* ═══════════════════════════════════════
   BADGE
═══════════════════════════════════════ */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 16px;
  border-radius: 100px;
  border: 1px solid rgba(139, 92, 246, 0.35);
  background: rgba(139, 92, 246, 0.10);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--purple-light);
  margin-bottom: 28px;
}
@keyframes pulse-dot {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.5; transform: scale(0.8); }
}

/* ═══════════════════════════════════════
   CARDS
═══════════════════════════════════════ */
.card {
  background: var(--bg-card);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 28px;
  transition: var(--transition);
  position: relative;
  overflow: hidden;
}
.card::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: var(--radius);
  background: linear-gradient(135deg, rgba(139,92,246,0.08), transparent 60%);
  opacity: 0;
  transition: var(--transition);
}
.card:hover {
  background: var(--bg-card-hover);
  border-color: rgba(139, 92, 246, 0.4);
  transform: translateY(-4px);
  box-shadow: 0 24px 64px rgba(0,0,0,0.5), var(--glow-purple);
}
.card:hover::after { opacity: 1; }

.card-title {
  font-family: var(--font-display);
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 8px;
}
.card-desc {
  font-size: 0.875rem;
  color: var(--text-muted);
  line-height: 1.6;
}


/* ═══════════════════════════════════════
   GRIDS
═══════════════════════════════════════ */
.grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }

/* ═══════════════════════════════════════
   SCROLL REVEAL
═══════════════════════════════════════ */
.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.65s ease, transform 0.65s ease;
}
.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}
.reveal-delay-1 { transition-delay: 0.1s; }
.reveal-delay-2 { transition-delay: 0.2s; }
.reveal-delay-3 { transition-delay: 0.3s; }
.reveal-delay-4 { transition-delay: 0.4s; }

/* Cascade de reveal automatique pour le hero (sans IntersectionObserver) */
.hero .reveal {
  animation: hero-reveal 0.8s cubic-bezier(0.22, 0.61, 0.36, 1) both;
}
.hero .reveal.reveal-delay-1 { animation-delay: 0.15s; }
.hero .reveal.reveal-delay-2 { animation-delay: 0.3s; }
.hero .reveal.reveal-delay-3 { animation-delay: 0.45s; }
.hero .reveal.reveal-delay-4 { animation-delay: 0.6s; }
@keyframes hero-reveal {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ═══════════════════════════════════════
   SECTIONS
═══════════════════════════════════════ */
section { padding: 80px 0; position: relative; z-index: 1; }

/* ═══════════════════════════════════════
   FOOTER
═══════════════════════════════════════ */
footer {
  border-top: 1px solid var(--border);
  padding: 64px 0 40px;
  position: relative;
  z-index: 1;
}
.footer-inner {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr 1fr;
  gap: 48px;
  margin-bottom: 48px;
}
.footer-brand .logo { margin-bottom: 14px; }
.footer-tagline {
  font-size: 0.875rem;
  color: var(--text-muted);
  line-height: 1.7;
  max-width: 260px;
  margin-bottom: 24px;
}
.footer-social {
  display: flex;
  gap: 10px;
}
.footer-social a {
  width: 36px; height: 36px;
  border-radius: 8px;
  border: 1px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.9rem;
  color: var(--text-muted);
  transition: var(--transition);
}
.footer-social a:hover {
  border-color: var(--purple);
  color: var(--purple-light);
  background: rgba(139, 92, 246,0.1);
}
/* SVG du footer-social : taille uniforme (avant les SVG avaient width="14"
   sur Twitter, 16 sur Discord/GitHub → tailles inconsistantes) */
.footer-social a svg,
.footer-social svg {
  width: 16px;
  height: 16px;
}
.footer-col h3,
.footer-col h4 {
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-dim);
  margin-bottom: 18px;
}
.footer-col a {
  display: block;
  font-size: 0.875rem;
  color: var(--text-muted);
  padding: 4px 0; /* cible tactile ~29px (22px nu = trop petit au doigt) */
  margin-bottom: 6px;
  transition: var(--transition);
}
.footer-col a:hover { color: var(--purple-light); transform: translateX(3px); }
.footer-bottom {
  padding-top: 32px;
  border-top: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  font-size: 0.8rem;
  color: var(--text-dim);
  text-align: center;
}
.footer-bottom span { display: flex; align-items: center; gap: 6px; }
.footer-made { color: var(--text-muted); }
.footer-made strong { color: var(--purple-light); }

/* Icônes Lucide inline (emojis déco unifiés en icônes trait fin). Couleur via currentColor
   ou style inline ; taille relative au texte. Remplace les anciens caractères emoji. */
.kvx-ico { display: inline-block; width: 1.05em; height: 1.05em; vertical-align: -0.16em; flex-shrink: 0; }
.footer-made-icon { display: inline-block; width: 1em; height: 1em; vertical-align: -0.14em; color: #ec4899; }
.footer-admin .kvx-ico { width: 0.95em; height: 0.95em; }

/* Lien « Admin » du footer — discret par défaut, se révèle au survol.
   Console privée : présent partout mais volontairement effacé. */
.footer-admin {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-top: 6px;
  padding: 3px 10px;
  font-size: 0.66rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  line-height: 1;
  color: rgba(160, 152, 196, 0.72);  /* a11y : contraste ≥4.5:1 au repos (était 0.30+opacity → 1.19:1) */
  text-decoration: none;
  border: 1px solid rgba(255, 255, 255, 0.045);
  border-radius: 999px;
  background: transparent;
  opacity: 1;
  transition: opacity .25s ease, color .25s ease, border-color .25s ease, background .25s ease;
  -webkit-tap-highlight-color: transparent;
}
.footer-admin:hover,
.footer-admin:focus-visible {
  opacity: 1;
  color: rgba(201, 196, 224, 0.9);
  border-color: rgba(139, 92, 246, 0.30);
  background: rgba(139, 92, 246, 0.07);
}
.footer-admin:focus-visible {
  outline: 2px solid rgba(139, 92, 246, 0.5);
  outline-offset: 2px;
}
@media (prefers-reduced-motion: reduce) {
  .footer-admin { transition: none; }
}

/* Barre de liens légaux — façon HMS : liens centrés séparés par un filet */
.footer-legal {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 4px 0;
}
.footer-legal a {
  padding: 6px 16px;  /* a11y : cible tactile ≥24px (WCAG 2.5.8) — était 2px → ~22px */
  color: var(--text-muted);
  font-size: 0.82rem;
  line-height: 1.4;
  transition: var(--transition);
}
.footer-legal a:not(:last-child) {
  border-right: 1px solid var(--border);
}
.footer-legal a:hover { color: var(--purple-light); }

/* ═══════════════════════════════════════
   NAV EXTRAS
═══════════════════════════════════════ */
/* Logo image : 32px LOCKED partout avec !important pour battre toute version
   stale en cache. min/max width pour empêcher tout flex/auto sizing. */
.logo-img,
.navbar .logo-img,
.logo .logo-img {
  width: 32px !important;
  height: 32px !important;
  min-width: 32px !important;
  min-height: 32px !important;
  max-width: 32px !important;
  max-height: 32px !important;
  border-radius: 50% !important;
  object-fit: cover !important;
  aspect-ratio: 1 / 1 !important;
  flex-shrink: 0 !important;
}
.btn-ghost {
  padding: 9px 18px;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--text-muted);
  font-weight: 500;
  font-size: 0.875rem;
  border: none;
  transition: var(--transition);
  white-space: nowrap;
}
.btn-ghost:hover { color: var(--text); background: rgba(255,255,255,0.05); }

/* ═══════════════════════════════════════
   .hero-actions — utilisé dans le CTA final (rétro-compat)
═══════════════════════════════════════ */
.hero-actions {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
  flex-wrap: wrap;
  margin-bottom: 64px;
}

/* ═══════════════════════════════════════
   INDEX PAGE — HERO (split 40/60 + canvas constellation + Discord mockup)
═══════════════════════════════════════ */
.hero {
  position: relative;
  min-height: 100vh;
  padding: 120px 28px 80px;  /* espace réservé en bas pour que la wave (64px) ne mange pas le mockup */
  z-index: 1;
  overflow: hidden;
  /* Backdrop subtil derrière le canvas pour la profondeur */
  background:
    radial-gradient(ellipse at 25% 25%, rgba(88, 101, 242, 0.10) 0%, transparent 55%),
    radial-gradient(ellipse at 75% 75%, rgba(139, 92, 246, 0.08) 0%, transparent 55%);
}
/* Canvas neuronal — couvre TOUTE la zone hero (entre les orbes et le contenu) */
.hero-canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  pointer-events: none;
  display: block;
  opacity: 0.85;
  transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
  will-change: transform;
}
/* Vignette douce pour focus central — bord léger, pas de fade en bas (la wave fait la transition) */
.hero::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(ellipse 90% 70% at 50% 50%, transparent 60%, rgba(5, 2, 15, 0.18) 100%);
  z-index: 1;
}
.hero-grid {
  position: relative;
  z-index: 2;
  max-width: 1280px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 40fr 60fr;
  gap: 64px;
  align-items: center;
  min-height: calc(100vh - 200px);
}

/* COL GAUCHE : copy */
.hero-copy {
  display: flex;
  flex-direction: column;
  gap: 28px;
}
.hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 14px;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 999px;
  font-size: 0.81rem;
  color: var(--text-muted);
  width: fit-content;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}
.hero-badge-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--purple);
  box-shadow: 0 0 0 0 rgba(88, 101, 242, 0.6);
  animation: hero-badge-pulse 2s ease-in-out infinite;
}
@keyframes hero-badge-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(88, 101, 242, 0.5); opacity: 1; }
  50%      { box-shadow: 0 0 0 6px rgba(88, 101, 242, 0); opacity: 0.85; }
}
.hero-title {
  font-family: var(--font-display);
  font-size: clamp(2.5rem, 5.5vw, 4.2rem);
  font-weight: 800;
  line-height: 1.05;
  letter-spacing: -0.02em;
  color: var(--text);
  margin: 0;
}
.hero-subtitle {
  font-size: 1.05rem;
  color: var(--text-muted);
  line-height: 1.6;
  max-width: 460px;
  margin: 0;
}
.hero-cta { margin-top: 4px; }
.hero-cta-btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

/* COL DROITE : Discord mockup 3D float */
.hero-mockup-stage {
  perspective: 1500px;
}
.hero-mockup {
  position: relative;
  width: 100%;
  max-width: 620px;
  margin: 0 auto;
  background: #14141d;
  border: 1px solid rgba(255, 255, 255, 0.06);
  border-radius: 14px;
  overflow: hidden;
  box-shadow:
    0 30px 80px rgba(0, 0, 0, 0.55),
    0 0 0 1px rgba(255, 255, 255, 0.03) inset,
    0 0 60px rgba(88, 101, 242, 0.10);
  /* On utilise --rx/--ry comme variables pour permettre la responsivité du tilt sans réécrire les keyframes */
  --tilt-y: -8deg;
  --tilt-x: 2deg;
  transform: rotateY(var(--tilt-y)) rotateX(var(--tilt-x));
  transform-style: preserve-3d;
  animation: hero-mockup-float 6s ease-in-out infinite;
  will-change: transform;
}
@keyframes hero-mockup-float {
  0%, 100% { transform: rotateY(var(--tilt-y)) rotateX(var(--tilt-x)) translateY(-4px); }
  50%      { transform: rotateY(var(--tilt-y)) rotateX(var(--tilt-x)) translateY(4px); }
}
.hero-chat-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px 18px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.06);
  background: rgba(255, 255, 255, 0.015);
}
.hero-chat-hash {
  color: var(--text-muted);
  font-size: 1.1rem;
  font-weight: 600;
}
.hero-chat-name {
  color: var(--text);
  font-weight: 600;
  font-size: 0.9375rem;
}
.hero-chat-divider {
  width: 1px;
  height: 16px;
  background: rgba(255, 255, 255, 0.08);
  margin: 0 4px;
}
.hero-chat-topic {
  color: var(--text-muted);
  font-size: 0.8125rem;
}
.hero-chat-body {
  height: 420px;
  overflow: hidden;
  padding: 16px 18px;
  display: flex;
  flex-direction: column;
  gap: 18px;
  scroll-behavior: smooth;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.08) transparent;
}
.hero-chat-body::-webkit-scrollbar { width: 6px; }
.hero-chat-body::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.08); border-radius: 3px; }
.hero-msg {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  animation: hero-msg-in 0.35s cubic-bezier(0.22, 0.61, 0.36, 1);
}
@keyframes hero-msg-in {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}
.hero-msg-avatar {
  flex-shrink: 0;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 0.95rem;
  color: #fff;
  user-select: none;
}
/* Avatars users — variantes colorées */
.hero-msg-avatar.u1 { background: linear-gradient(135deg, #f59e0b, #ef4444); }
.hero-msg-avatar.u2 { background: linear-gradient(135deg, #10b981, #06b6d4); }
.hero-msg-avatar.u3 { background: linear-gradient(135deg, #ec4899, #f43f5e); }
.hero-msg-avatar.u4 { background: linear-gradient(135deg, #6366f1, #06b6d4); }
/* Avatar bot Kalvyx — gradient blurple → violet, "K" blanc */
.hero-msg-avatar.bot {
  background: #05020f center / cover no-repeat url("/Kalvyx_Image/KVX-LOGO.webp"); /* 1,4 Ko vs 55,7 Ko jpg */
  box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06), 0 4px 12px rgba(88, 101, 242, 0.35);
  position: relative;
}
.hero-msg-avatar.bot::after {
  content: "";
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.05rem;
  letter-spacing: -0.04em;
  color: #fff;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
}
.hero-msg-body { flex: 1 1 auto; min-width: 0; }
.hero-msg-meta {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 4px;
}
.hero-msg-author {
  font-weight: 600;
  font-size: 0.9375rem;
  color: var(--text);
}
.hero-msg-author.bot-name { color: #b8c1ff; }
.hero-msg-bot-tag {
  display: inline-block;
  background: #5865f2;
  color: #fff;
  font-size: 0.625rem;
  font-weight: 700;
  padding: 2px 5px;
  border-radius: 4px;
  margin-left: 4px;
  transform: translateY(-1px);
  letter-spacing: 0.02em;
}
.hero-msg-time {
  font-size: 0.75rem;
  color: var(--text-muted);
}
.hero-msg-text {
  font-size: 0.9375rem;
  color: #d6d8e0;
  line-height: 1.45;
  word-wrap: break-word;
}
.hero-msg.bot .hero-msg-text {
  background: rgba(88, 101, 242, 0.08);
  border: 1px solid rgba(88, 101, 242, 0.18);
  border-radius: 10px;
  padding: 10px 14px;
  display: inline-block;
  max-width: 100%;
  box-shadow: 0 0 24px rgba(88, 101, 242, 0.08);
}
.hero-typing {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 12px 16px;
  background: rgba(88, 101, 242, 0.08);
  border: 1px solid rgba(88, 101, 242, 0.18);
  border-radius: 10px;
}
.hero-typing span {
  width: 6px;
  height: 6px;
  background: #b8c1ff;
  border-radius: 50%;
  animation: hero-typing-bounce 1.2s ease-in-out infinite;
}
.hero-typing span:nth-child(2) { animation-delay: 0.15s; }
.hero-typing span:nth-child(3) { animation-delay: 0.3s; }
@keyframes hero-typing-bounce {
  0%, 80%, 100% { transform: translateY(0); opacity: 0.5; }
  40%           { transform: translateY(-4px); opacity: 1; }
}
.hero-caret {
  display: inline-block;
  width: 2px;
  height: 1em;
  background: #b8c1ff;
  margin-left: 2px;
  vertical-align: text-bottom;
  animation: hero-caret-blink 1s steps(2) infinite;
}
@keyframes hero-caret-blink {
  50% { opacity: 0; }
}
.hero-chat-input {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 14px;
  border-top: 1px solid rgba(255, 255, 255, 0.06);
  background: rgba(255, 255, 255, 0.015);
}
.hero-chat-input-pill {
  flex: 1;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.06);
  border-radius: 8px;
  padding: 10px 14px;
  color: var(--text-muted);
  font-size: 0.875rem;
}

/* ═══════════════════════════════════════
   CATEGORIES SECTION
═══════════════════════════════════════ */
.categories-section { padding: 80px 0; }
.section-header { margin-bottom: 56px; }
.section-header.text-center { text-align: center; }
.section-header .section-subtitle { margin: 0 auto; }

.categories-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.cat-card {
  display: flex;
  align-items: flex-start;
  gap: 18px;
  padding: 28px 24px;
  border-radius: var(--radius);
  border: 1px solid var(--border);
  background: var(--bg-card);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  transition: var(--transition);
  text-decoration: none;
  color: inherit;
  position: relative;
  overflow: hidden;
}
.cat-card::before {
  content: '';
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: var(--transition);
  border-radius: var(--radius);
}
.cat-ia::before   { background: linear-gradient(135deg, rgba(139,92,246,0.10), transparent 60%); }
.cat-fun::before  { background: linear-gradient(135deg, rgba(245,192,106,0.08), transparent 60%); }
.cat-support::before { background: linear-gradient(135deg, rgba(99,102,241,0.10), transparent 60%); }
.cat-utils::before { background: linear-gradient(135deg, rgba(96,165,250,0.08), transparent 60%); }
.cat-moderation::before { background: linear-gradient(135deg, rgba(239,68,68,0.09), transparent 60%); }
.cat-securite::before   { background: linear-gradient(135deg, rgba(245,158,11,0.09), transparent 60%); }
.cat-communaute::before { background: linear-gradient(135deg, rgba(34,197,94,0.09), transparent 60%); }
.cat-premium::before    { background: linear-gradient(135deg, rgba(254,231,92,0.09), transparent 60%); }
.cat-administration::before { background: linear-gradient(135deg, rgba(148,163,184,0.10), transparent 60%); }
.cat-card:hover { transform: translateY(-4px); box-shadow: 0 20px 56px rgba(0,0,0,0.4); }
.cat-card:hover::before { opacity: 1; }
.cat-ia:hover     { border-color: rgba(139,92,246,0.45); box-shadow: 0 20px 56px rgba(0,0,0,0.4), 0 0 30px rgba(139,92,246,0.15); }
.cat-fun:hover    { border-color: rgba(245,192,106,0.4); }
.cat-support:hover { border-color: rgba(99,102,241,0.45); }
.cat-utils:hover  { border-color: rgba(96,165,250,0.4); }
.cat-moderation:hover { border-color: rgba(239,68,68,0.4); }
.cat-securite:hover   { border-color: rgba(245,158,11,0.4); }
.cat-communaute:hover { border-color: rgba(34,197,94,0.4); }
.cat-premium:hover    { border-color: rgba(254,231,92,0.4); }
.cat-administration:hover { border-color: rgba(148,163,184,0.4); }

/* Badge d'icône coloré par catégorie (style « pastille » : fond teinté + bordure + glow,
   icône en stroke currentColor). Couleur par défaut violette, surchargée par .cat-<thème>. */
.cat-icon {
  flex-shrink: 0;
  width: 50px;
  height: 50px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 14px;
  background: rgba(139, 92, 246, 0.10);
  border: 1px solid rgba(139, 92, 246, 0.22);
  color: #a78bfa;
  box-shadow: 0 6px 18px -8px rgba(139, 92, 246, 0.45);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.cat-icon svg { width: 26px; height: 26px; }
.cat-card:hover .cat-icon { transform: translateY(-2px) scale(1.05); }

/* Une couleur par catégorie (réutilise les accents définis plus haut) */
.cat-ia             .cat-icon { background: rgba(139, 92, 246, 0.12); border-color: rgba(139, 92, 246, 0.32); color: #a78bfa; box-shadow: 0 6px 18px -8px rgba(139, 92, 246, 0.50); }
.cat-moderation     .cat-icon { background: rgba(239, 68, 68, 0.12);  border-color: rgba(239, 68, 68, 0.32);  color: #f87171; box-shadow: 0 6px 18px -8px rgba(239, 68, 68, 0.45); }
.cat-securite       .cat-icon { background: rgba(245, 158, 11, 0.12); border-color: rgba(245, 158, 11, 0.32); color: #fbbf24; box-shadow: 0 6px 18px -8px rgba(245, 158, 11, 0.45); }
.cat-communaute     .cat-icon { background: rgba(34, 197, 94, 0.12);  border-color: rgba(34, 197, 94, 0.32);  color: #4ade80; box-shadow: 0 6px 18px -8px rgba(34, 197, 94, 0.45); }
.cat-fun            .cat-icon { background: rgba(245, 192, 106, 0.12);border-color: rgba(245, 192, 106, 0.34);color: #f5c06a; box-shadow: 0 6px 18px -8px rgba(245, 192, 106, 0.45); }
.cat-utils          .cat-icon { background: rgba(96, 165, 250, 0.12); border-color: rgba(96, 165, 250, 0.32); color: #60a5fa; box-shadow: 0 6px 18px -8px rgba(96, 165, 250, 0.45); }
.cat-support        .cat-icon { background: rgba(99, 102, 241, 0.12); border-color: rgba(99, 102, 241, 0.32); color: #818cf8; box-shadow: 0 6px 18px -8px rgba(99, 102, 241, 0.45); }
.cat-premium        .cat-icon { background: rgba(254, 231, 92, 0.12); border-color: rgba(254, 231, 92, 0.34); color: #fde047; box-shadow: 0 6px 18px -8px rgba(254, 231, 92, 0.45); }
.cat-administration .cat-icon { background: rgba(148, 163, 184, 0.12);border-color: rgba(148, 163, 184, 0.32);color: #cbd5e1; box-shadow: 0 6px 18px -8px rgba(148, 163, 184, 0.40); }

/* ── Icônes colorées sur les AUTRES pages (même esprit que les pastilles d'accueil) ──
   Les conteneurs gardent leur fond ; on ne colore que l'icône (stroke=currentColor). */

/* Tarifs : l'icône de chaque offre prend sa couleur */
.tarif-icon-free       { color: #c4bce0; }
.tarif-icon-allie      { color: #60a5fa; }
.tarif-icon-compagnon  { color: #a78bfa; }
.tarif-icon-pro-server { color: #fcd34d; }

/* Fonctionnalités : titres de section + onglets de filtre, colorés par catégorie
   ([data-lucide] matche l'icône avant ET après le rendu Lucide) */
#cat-ia .category-title [data-lucide],             .filter-tab[data-filter="ia"]:not(.active) [data-lucide]             { color: #a78bfa; }
#cat-moderation .category-title [data-lucide],     .filter-tab[data-filter="moderation"]:not(.active) [data-lucide]     { color: #f87171; }
#cat-securite .category-title [data-lucide],       .filter-tab[data-filter="securite"]:not(.active) [data-lucide]       { color: #fbbf24; }
#cat-communaute .category-title [data-lucide],     .filter-tab[data-filter="communaute"]:not(.active) [data-lucide]     { color: #4ade80; }
#cat-fun .category-title [data-lucide],            .filter-tab[data-filter="fun"]:not(.active) [data-lucide]            { color: #f5c06a; }
#cat-utils .category-title [data-lucide],          .filter-tab[data-filter="utils"]:not(.active) [data-lucide]          { color: #60a5fa; }
#cat-support .category-title [data-lucide],        .filter-tab[data-filter="support"]:not(.active) [data-lucide]        { color: #818cf8; }
#cat-premium .category-title [data-lucide],        .filter-tab[data-filter="premium"]:not(.active) [data-lucide]        { color: #fde047; }
#cat-administration .category-title [data-lucide], .filter-tab[data-filter="administration"]:not(.active) [data-lucide] { color: #cbd5e1; }

/* Docs : une couleur par rubrique — appliquée à la fois à la sidebar ET au titre de section
   assorti (.wiki-h1). L'item de sidebar est légèrement atténué, vif au survol / actif. */
.wiki-nav a [data-lucide] { opacity: 0.8; transition: opacity 0.2s ease; }
.wiki-nav a.active [data-lucide], .wiki-nav a:hover [data-lucide] { opacity: 1; }
/* F123 — .wiki-ul (utilisé sur mentions-legales) n'avait aucune règle : avec le reset
   global *{padding:0;margin:0}, les puces se collaient au bord gauche. */
.wiki-ul { padding-left: 1.25rem; margin: 0.5rem 0; list-style: disc; }
.wiki-ul li { margin: 0.3rem 0; }
.wiki-nav a [data-lucide="rocket"],         .wiki-h1 [data-lucide="rocket"]         { color: #a78bfa; } /* Démarrage rapide */
.wiki-nav a [data-lucide="download"],       .wiki-h1 [data-lucide="download"]       { color: #22d3ee; } /* Installation */
.wiki-nav a [data-lucide="keyboard"],       .wiki-h1 [data-lucide="keyboard"]       { color: #60a5fa; } /* Premières commandes */
.wiki-nav a [data-lucide="library"],        .wiki-h1 [data-lucide="library"]        { color: #818cf8; } /* Catégories */
.wiki-nav a [data-lucide="message-circle"], .wiki-h1 [data-lucide="message-circle"] { color: #4ade80; } /* Conversation IA */
.wiki-nav a [data-lucide="gem"],            .wiki-h1 [data-lucide="gem"]            { color: #fde047; } /* Premium */
.wiki-nav a [data-lucide="settings"],       .wiki-h1 [data-lucide="settings"]       { color: #2dd4bf; } /* Utilitaires */
.wiki-nav a [data-lucide="shield"],         .wiki-h1 [data-lucide="shield"]         { color: #fbbf24; } /* Sécurité serveur */
.wiki-nav a [data-lucide="help-circle"],    .wiki-h1 [data-lucide="help-circle"]    { color: #f472b6; } /* FAQ */
.wiki-nav a [data-lucide="wrench"],         .wiki-h1 [data-lucide="wrench"]         { color: #f5c06a; } /* Dépannage */
.wiki-nav a [data-lucide="ticket"],         .wiki-h1 [data-lucide="ticket"]         { color: #f87171; } /* Support */

/* Tarifs — grille des modules Free : une couleur par module (sémantique, scopée à la grille) */
.tarifs-free-module-icon [data-lucide="shield"]       { color: #f87171; } /* Modération */
.tarifs-free-module-icon [data-lucide="ticket"]       { color: #818cf8; } /* Tickets */
.tarifs-free-module-icon [data-lucide="hand"]         { color: #4ade80; } /* Welcome */
.tarifs-free-module-icon [data-lucide="ban"]          { color: #fbbf24; } /* Anti-raid */
.tarifs-free-module-icon [data-lucide="star"]         { color: #fde047; } /* XP */
.tarifs-free-module-icon [data-lucide="list-checks"]  { color: #60a5fa; } /* Logs */
.tarifs-free-module-icon [data-lucide="party-popper"] { color: #f472b6; } /* Giveaway */
.tarifs-free-module-icon [data-lucide="handshake"]    { color: #2dd4bf; } /* Auto-rôle */
.tarifs-free-module-icon [data-lucide="mail"]         { color: #38bdf8; } /* Invite */
.tarifs-free-module-icon [data-lucide="bar-chart"]    { color: #22d3ee; } /* Stats */
.tarifs-free-module-icon [data-lucide="tag"]          { color: #c084fc; } /* Tag/Status */
.tarifs-free-module-icon [data-lucide="bot"]          { color: #a78bfa; } /* IA */
.cat-body { flex: 1; }
.cat-title {
  font-family: var(--font-display);
  font-size: 1rem;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 6px;
}
.cat-desc {
  font-size: 0.82rem;
  color: var(--text-muted);
  line-height: 1.55;
  margin-bottom: 12px;
}
.cat-count {
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--purple-light);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.cat-arrow {
  color: var(--text-dim);
  font-size: 1.1rem;
  margin-top: 2px;
  transition: var(--transition);
}
.cat-card:hover .cat-arrow { color: var(--purple-light); transform: translateX(4px); }

/* ═══════════════════════════════════════
   HIGHLIGHT CARDS
═══════════════════════════════════════ */
.highlights-cta-section { padding: 80px 0; }
.highlights-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  margin-top: 56px;
}
.highlight-card {
  padding: 32px 28px;
  border-radius: var(--radius);
  border: 1px solid var(--border);
  background: var(--bg-card);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  transition: var(--transition);
}
.highlight-card:hover {
  background: var(--bg-card-hover);
  border-color: rgba(139,92,246,0.35);
  transform: translateY(-3px);
  box-shadow: 0 20px 56px rgba(0,0,0,0.35), 0 0 20px rgba(139,92,246,0.1);
}
.highlight-icon-wrap {
  width: 48px; height: 48px;
  border-radius: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto 20px;
}
.icon-purple { background: rgba(139,92,246,0.15); color: var(--purple-light); border: 1px solid rgba(139,92,246,0.25); }
.icon-cyan   { background: rgba(34,211,238,0.15); color: #22d3ee; border: 1px solid rgba(34,211,238,0.30); }
.icon-gold   { background: rgba(245,192,106,0.15); color: #f5c06a; border: 1px solid rgba(245,192,106,0.25); }
.highlight-title {
  font-family: var(--font-display);
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 10px;
}
.highlight-desc {
  font-size: 0.875rem;
  color: var(--text-muted);
  line-height: 1.65;
  margin-bottom: 18px;
}
.highlight-tag {
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--text-dim);
  border: 1px solid var(--border);
  border-radius: 100px;
  padding: 4px 12px;
  display: inline-block;
}

/* ═══════════════════════════════════════
   SHOWCASE SECTION
═══════════════════════════════════════ */
.showcase-section { padding: 80px 0; }
.showcase-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 64px;
  align-items: center;
}
.showcase-text .section-subtitle { max-width: 100%; }
.showcase-features { margin-top: 24px; display: flex; flex-direction: column; gap: 10px; }
.showcase-feat {
  font-size: 0.875rem;
  color: var(--text-muted);
  display: flex;
  align-items: center;
  gap: 10px;
}
.inline-code {
  font-family: 'Courier New', monospace;
  font-size: 0.82em;
  color: var(--cyan);
  background: rgba(109, 207, 176,0.1);
  padding: 2px 6px;
  border-radius: 4px;
  border: 1px solid rgba(109, 207, 176,0.2);
}

/* Discord mockup */
.showcase-card {
  position: relative;
}
.discord-mockup {
  background: #313338;
  border-radius: 16px;
  padding: 20px 16px;
  border: 1px solid rgba(255,255,255,0.06);
  box-shadow: 0 32px 80px rgba(0,0,0,0.6);
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.discord-msg {
  display: flex;
  gap: 14px;
  padding: 6px 8px;
  border-radius: 6px;
  transition: background 0.15s;
}
.discord-msg:hover { background: rgba(255,255,255,0.03); }
.discord-avatar {
  width: 38px; height: 38px;
  border-radius: 50%;
  background: linear-gradient(135deg, #5865f2, #7983f5);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.85rem;
  font-weight: 700;
  color: #fff;
  flex-shrink: 0;
  margin-top: 2px;
}
.bot-av {
  background: transparent;
  border: 2px solid rgba(139, 92, 246,0.3);
  overflow: hidden;
  padding: 0;
}
.bot-av img { width: 100%; height: 100%; object-fit: cover; }
.discord-msg-body { flex: 1; min-width: 0; }
.discord-name {
  font-size: 0.88rem;
  font-weight: 600;
  color: #fff;
  margin-bottom: 3px;
  display: block;
}
.bot-name { color: var(--purple-light); }
.bot-tag {
  font-size: 0.62rem;
  background: #5865f2;
  color: #fff;
  padding: 1px 5px;
  border-radius: 3px;
  font-weight: 600;
  letter-spacing: 0.03em;
  vertical-align: middle;
  margin-left: 4px;
}
.discord-content {
  font-size: 0.9rem;
  color: #dbdee1;
  line-height: 1.5;
}
.discord-cmd {
  color: #00b0f4;
  font-weight: 600;
}
.discord-embed {
  margin-top: 8px;
  background: #2b2d31;
  border-radius: 6px;
  display: flex;
  overflow: hidden;
  max-width: 400px;
}
.embed-bar {
  width: 4px;
  background: var(--gradient);
  flex-shrink: 0;
}
.embed-content { padding: 10px 14px; }
.embed-title {
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--purple-light);
  margin-bottom: 5px;
}
.embed-text {
  font-size: 0.82rem;
  color: #b5bac1;
  line-height: 1.5;
}

/* ═══════════════════════════════════════
   CTA LOGO
═══════════════════════════════════════ */
.cta-logo { margin-bottom: 24px; }
.cta-logo-img {
  width: 180px;
  height: auto;
  display: block;
  margin: 0 auto;
  /* drop-shadow (et non box-shadow) : le halo épouse la forme du logo transparent (fantôme + KVX) */
  filter: drop-shadow(0 0 26px rgba(139, 92, 246, 0.38));
}

/* cta section */
.cta-section {
  text-align: center;
  padding: 80px 28px;
}
.cta-box {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 72px 48px;
  position: relative;
  overflow: hidden;
}
.cta-box::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 60% 50% at 50% 100%, rgba(139,92,246,0.18), transparent),
    radial-gradient(ellipse 40% 30% at 20% 20%, rgba(96,165,250,0.08), transparent);
  pointer-events: none;
}
.cta-box .section-title { margin-bottom: 16px; }
.cta-box .section-subtitle { margin: 0 auto 36px; }
.cta-box .hero-actions { margin-bottom: 0; }

/* ═══════════════════════════════════════
   FEATURES PAGE
═══════════════════════════════════════ */
.features-hero {
  padding: 120px 28px 60px;
  text-align: center;
  position: relative;
  z-index: 1;
}
.search-bar {
  max-width: 480px;
  margin: 36px auto 0;
  position: relative;
}
.search-bar input {
  width: 100%;
  padding: 14px 20px 14px 48px;
  border-radius: 100px;
  border: 1px solid var(--border);
  background: var(--bg-card);
  color: var(--text);
  font-size: 0.9rem;
  outline: none;
  transition: var(--transition);
}
.search-bar input::placeholder { color: var(--text-muted); } /* opacity .7 = contraste 3,28:1 < AA — retirée (5,70:1) */
.search-bar input:focus {
  border-color: var(--purple);
  background: var(--bg-card-hover);
  box-shadow: 0 0 0 3px rgba(139, 92, 246,0.12);
}
.search-icon {
  position: absolute;
  left: 18px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--text-dim);
  font-size: 0.9rem;
  pointer-events: none;
}
.filter-tabs {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
  margin: 32px 0 48px;
}
.filter-tab {
  padding: 8px 18px;
  border-radius: 100px;
  border: 1px solid var(--border);
  background: transparent;
  color: var(--text-muted);
  font-size: 0.85rem;
  font-weight: 500;
  cursor: pointer;
  transition: var(--transition);
  display: flex;
  align-items: center;
  gap: 6px;
}
.filter-tab:hover { border-color: var(--border-hover); color: var(--text); }
.filter-tab.active {
  background: rgba(139, 92, 246,0.15);
  border-color: var(--purple);
  color: var(--purple-light);
}
.commands-section { padding: 0 0 80px; }
.category-section { margin-bottom: 64px; }
.category-title {
  font-family: var(--font-display);
  font-size: 1.4rem;
  font-weight: 800;
  color: var(--text);
  margin-bottom: 24px;
  display: flex;
  align-items: center;
  gap: 12px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--border);
}
.category-count {
  font-size: 0.75rem;
  font-weight: 600;
  padding: 3px 10px;
  border-radius: 100px;
  background: rgba(139, 92, 246,0.12);
  color: var(--purple-light);
  font-family: var(--font-body);
}
.commands-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.command-card {
  padding: 20px 22px;
  cursor: default;
}
.command-card.hidden { display: none; }
.command-name {
  font-family: 'Courier New', monospace;
  font-size: 0.92rem;
  font-weight: 700;
  color: var(--cyan);
  margin-bottom: 6px;
  letter-spacing: -0.01em;
}
.command-desc {
  font-size: 0.82rem;
  color: var(--text-muted);
  line-height: 1.5;
}
.command-badge {
  display: inline-block;
  font-size: 0.68rem;
  font-weight: 600;
  padding: 2px 8px;
  border-radius: 4px;
  margin-top: 10px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.badge-ia      { background: rgba(139,92,246,0.15);  color: var(--purple-light); border-color: rgba(139,92,246,0.25); }
.badge-fun     { background: rgba(250,180,90,0.15);  color: #f5c06a;             border-color: rgba(250,180,90,0.25); }
.badge-utils   { background: rgba(96,165,250,0.15);  color: var(--cyan);         border-color: rgba(96,165,250,0.25); }
.badge-support { background: rgba(99,102,241,0.15);  color: #818cf8;             border-color: rgba(99,102,241,0.25); }
.badge-admin   { background: rgba(251,191,36,0.15);  color: #fbbf24;             border-color: rgba(251,191,36,0.30); }
.badge-owner   { background: rgba(251,146,60,0.15);  color: #fb923c;             border-color: rgba(251,146,60,0.30); }

/* Accessibilité — visually hidden */
.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

/* ═══════════════════════════════════════
   WIKI PAGE
═══════════════════════════════════════ */
.wiki-layout {
  display: grid;
  grid-template-columns: 260px 1fr;
  gap: 48px;
  align-items: start;
  padding: 100px 28px 80px;
  max-width: 1200px;
  margin: 0 auto;
  position: relative;
  z-index: 1;
}
.wiki-sidebar {
  position: sticky;
  top: 100px;
}
.wiki-sidebar-title {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-dim);
  margin-bottom: 14px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--border);
}
.wiki-nav { list-style: none; }
.wiki-nav li { margin-bottom: 2px; }
.wiki-nav a {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  border-radius: var(--radius-sm);
  font-size: 0.875rem;
  color: var(--text-muted);
  transition: var(--transition);
  border-left: 2px solid transparent;
}
.wiki-nav a:hover { color: var(--text); background: var(--bg-card); }
.wiki-nav a.active { color: var(--purple-light); border-left-color: var(--purple); background: rgba(139, 92, 246,0.06); }
.wiki-content section { padding: 0 0 60px; }
.wiki-content section:not(:last-child) { border-bottom: 1px solid var(--border); margin-bottom: 60px; }
.wiki-h1 {
  font-family: var(--font-display);
  font-size: 2rem;
  font-weight: 800;
  color: var(--text);
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.wiki-h2 {
  font-family: var(--font-display);
  font-size: 1.3rem;
  font-weight: 700;
  color: var(--text);
  margin: 28px 0 12px;
}
.wiki-p {
  font-size: 0.92rem;
  color: var(--text-muted);
  line-height: 1.75;
  margin-bottom: 14px;
}
.wiki-code {
  background: rgba(139,92,246,0.07);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  padding: 16px 20px;
  font-family: 'Courier New', monospace;
  font-size: 0.85rem;
  color: var(--cyan);
  margin: 16px 0;
  overflow-x: auto;
  display: block;
  white-space: pre-wrap;
  word-break: break-word;
}
.wiki-step {
  display: flex;
  gap: 16px;
  margin-bottom: 20px;
}
.wiki-step-num {
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--gradient);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.8rem;
  font-weight: 700;
  color: #fff;
  flex-shrink: 0;
  margin-top: 2px;
}
.wiki-step-content .wiki-h2 { margin-top: 0; }
.faq-item {
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  margin-bottom: 10px;
  overflow: hidden;
  transition: var(--transition);
}
.faq-item.open { border-color: rgba(139, 92, 246,0.3); }
.faq-q {
  width: 100%;
  padding: 18px 22px;
  background: var(--bg-card);
  border: none;
  color: var(--text);
  font-size: 0.92rem;
  font-weight: 600;
  text-align: left;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  transition: var(--transition);
  font-family: var(--font-body);
}
.faq-q:hover { background: var(--bg-card-hover); }
.faq-icon { font-size: 0.75rem; color: var(--purple); transition: transform var(--transition); flex-shrink: 0; }
.faq-item.open .faq-icon { transform: rotate(180deg); }
.faq-a {
  padding: 0 22px;
  max-height: 0;
  overflow: hidden;
  visibility: hidden; /* a11y : retire le contenu replié du tab-order ET de l'arbre lecteur d'écran */
  transition: max-height 0.35s ease, padding 0.35s ease, visibility 0s linear 0.35s;
}
/* max-height 1000px (et pas 200) : les réponses longues étaient coupées net sur
   mobile — jusqu'à 53 % du texte pricing invisible (audit a11y 2026-06-12). */
.faq-item.open .faq-a { padding: 4px 22px 18px; max-height: 1000px; visibility: visible; transition: max-height 0.35s ease, padding 0.35s ease, visibility 0s; }
/* Liens dans les réponses FAQ : distinguer autrement que par la couleur (WCAG 1.4.1) */
.faq-a a { color: var(--cyan); text-decoration: underline; text-underline-offset: 2px; }
.faq-a a:hover { text-decoration: none; }
.faq-a p { font-size: 0.875rem; color: var(--text-muted); line-height: 1.7; }

/* ═══════════════════════════════════════
   WAVE DIVIDER
═══════════════════════════════════════ */
.wave-divider {
  position: relative;
  z-index: 1;
  line-height: 0;
  margin-top: -2px;
}
.wave-divider svg {
  display: block;
  width: 100%;
  height: 64px;
}
/* Wave intégrée AU hero : le canvas constellation passe derrière jusqu'à la vague */
.hero-wave {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  margin-top: 0;
  z-index: 2;
  pointer-events: none;
  height: 64px;
  overflow: hidden;
}
/* Couches parallax — 2 SVG côte à côte, on translate pour boucler sans coupure */
.wave-track {
  position: absolute;
  inset: 0;
  display: flex;
  width: 200%;
  will-change: transform;
}
.wave-track svg {
  flex: 0 0 50%;
  width: 50%;
  height: 100%;
  display: block;
}
.wave-track-back  { animation: hero-wave-scroll 18s linear infinite; }
.wave-track-front { animation: hero-wave-scroll 11s linear infinite; }
@keyframes hero-wave-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .wave-track-back, .wave-track-front { animation: none; }
}

/* ═══════════════════════════════════════
   RESPONSIVE
═══════════════════════════════════════ */
/* ── 880px: stack hero (split conservé sur tablette landscape) ── */
@media (max-width: 880px) {
  .hero-grid {
    grid-template-columns: 1fr;
    gap: 48px;
    text-align: center;
  }
  .hero-copy { align-items: center; }
  .hero-subtitle { max-width: 540px; }
  .hero-mockup {
    max-width: 80%;
    --tilt-y: -4deg;
    --tilt-x: 1deg;
  }
  /* Le text-align:center de .hero-grid cascade dans le mockup chat et casse
     l'alignement « vrai Discord ». On ré-ancre à gauche le mockup uniquement —
     la copy du hero (titre/sous-titre/CTA) reste volontairement centrée. */
  .hero-mockup-stage,
  .hero-chat-header,
  .hero-chat-body,
  .hero-msg-meta,
  .hero-msg-text {
    text-align: left;
  }
}

/* ── 1255px: bascule NAV en mode hamburger ──
   Mesuré : la nav FR complète (6 liens dont "Tableau de bord" allongé + Rejoindre
   + CTA "Ajouter à Discord" + FR|EN) ne tient sans chevaucher le bouton qu'à partir
   de ~1255px (même après réduction des paddings/gap de nav). En dessous, on replie
   en menu hamburger. AVANT : ce basculement n'arrivait qu'à 900px → entre 900 et
   ~1255 la nav débordait sur le CTA (bug responsive). Cette media query ne gère QUE
   la nav ; le reste du layout @900 (hero/footer/wiki/grilles) est inchangé plus bas. */
@media (max-width: 1255px) {
  .nav-links { display: none; }
  .nav-actions { display: none; }
  .hamburger { display: flex; }
  /* Le switch reprend le margin-left:auto (pousse le duo à droite) ; le
     hamburger qui le suit colle alors au gap standard de .nav-inner. */
  .nav-lang-bar { display: inline-flex; margin-left: auto; }
  .nav-lang-bar ~ .hamburger { margin-left: 0; }
}

/* ── 900px: tablettes (layout hors-nav) ── */
@media (max-width: 900px) {
  .footer-inner { grid-template-columns: 1fr 1fr; gap: 40px; }
  .wiki-layout { grid-template-columns: minmax(0, 1fr); padding-top: 100px; }
  .wiki-sidebar { position: relative; top: 0; }
  .commands-grid { grid-template-columns: repeat(2, 1fr); }
  .categories-grid { grid-template-columns: repeat(2, 1fr); }
  .highlights-grid { grid-template-columns: repeat(2, 1fr); }
  .showcase-grid { grid-template-columns: 1fr; gap: 40px; }
}

/* ── 768px: tablette portrait ── */
@media (max-width: 768px) {
  .section-title { font-size: clamp(1.8rem, 5vw, 2.4rem); }
  .hero-title { font-size: clamp(2.8rem, 8vw, 4.2rem); } /* plafond aligné sur desktop (jamais > 4.2rem) */
  .highlights-grid { grid-template-columns: 1fr; }
  .wiki-content section { padding: 0 0 40px; }
  .wiki-content section:not(:last-child) { margin-bottom: 40px; }
  .wiki-layout { gap: 32px; padding: 90px 20px 60px; }
  .filter-tabs { gap: 6px; }
  .filter-tab { padding: 7px 14px; font-size: 0.8rem; }
}

/* ── 640px: mobile large ── */
@media (max-width: 640px) {
  .hero-title { font-size: clamp(2rem, 8vw, 2.75rem); }
  .hero-subtitle { font-size: 0.95rem; }
  .section-title { font-size: clamp(1.6rem, 6vw, 2.2rem); }
  .grid-2 { grid-template-columns: 1fr; }
  .commands-grid { grid-template-columns: 1fr; }
  .categories-grid { grid-template-columns: 1fr; }
  .highlights-grid { grid-template-columns: 1fr; }
  .footer-inner { grid-template-columns: 1fr; gap: 32px; }
  .footer-bottom { flex-direction: column; gap: 10px; text-align: center; }
  .cta-box { padding: 48px 24px; }
  section { padding: 60px 0; }
  .discord-mockup { padding: 16px 12px; }
  .hero { padding: 100px 20px 80px; }
  .features-hero { padding: 100px 20px 50px; }
  .btn-large { padding: 12px 22px; font-size: 0.95rem; }
  .container { padding: 0 18px; }
  .hero-actions { gap: 10px; }
  .card { padding: 20px; }
  .highlight-card { padding: 24px 20px; }
  /* Wiki layout : forcer minmax pour éviter l'overflow à 320px */
  .wiki-layout { padding: 90px 16px 60px; grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .wiki-sidebar { width: 100%; }
  .wiki-content { min-width: 0; }
  .wiki-h1 { font-size: 1.5rem; }

  /* Hero mobile : mockup plus compact */
  .hero-mockup {
    max-width: 100%;
    --tilt-y: -2deg;
    --tilt-x: 1deg;
  }
  .hero-chat-body { height: 340px; padding: 12px 14px; gap: 14px; }
  .hero-chat-header { padding: 12px 14px; flex-wrap: wrap; }
  .hero-chat-divider,
  .hero-chat-topic { display: none; }
  .hero-msg-avatar { width: 32px; height: 32px; font-size: 0.85rem; }
  .hero-msg-avatar.bot::after { font-size: 0.95rem; }
  .hero-msg-text { font-size: 0.875rem; }
  .hero-grid { gap: 40px; min-height: auto; }
}

/* ── 400px: mobile petit ── */
@media (max-width: 400px) {
  .hero-title { font-size: 1.85rem; }
  .filter-tabs { flex-direction: column; align-items: stretch; }
  .filter-tab { text-align: center; justify-content: center; }
  .hero-actions { flex-direction: column; align-items: stretch; }
  .hero-actions .btn-primary,
  .hero-actions .btn-secondary { text-align: center; justify-content: center; }
}

/* ── 375px: iPhone SE / small mobile ──
   Garantit lisibilité ≥14px sur toutes les sections + padding compact */
@media (max-width: 375px) {
  body { font-size: 0.95rem; }
  .container { padding: 0 14px; }
  .hero { padding: 96px 16px 64px; }
  .hero-subtitle { font-size: 0.9rem; }
  .section-title { font-size: clamp(1.4rem, 6.5vw, 1.9rem); }
  .card { padding: 16px; }
  .highlight-card { padding: 20px 16px; }
  .cta-box { padding: 36px 18px; }
  .footer-inner { padding: 0 14px; }
  .btn-primary, .btn-secondary { font-size: 0.875rem; padding: 10px 16px; }
  .btn-large { padding: 12px 18px; font-size: 0.92rem; }
  .nav-cta { padding: 8px 12px; font-size: 0.78rem; }
  .wiki-h1 { font-size: 1.35rem; }
  .wiki-h2 { font-size: 1.1rem; }
  .wiki-p { font-size: 0.92rem; }
  .tarifs-table-price { font-size: 0.72rem; }
  /* Evite débordement horizontal du mockup hero */
  .hero-mockup { max-width: 100%; }
  .hero-chat-body { height: 300px; }
}

/* (Le canvas hero utilise maintenant la classe .hero-canvas dans la section hero) */

/* ═══════════════════════════════════════
   REDUCED MOTION — disable everything above
═══════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  /* Reveal-on-scroll : sans animation, forcer la visibilité — sinon .reveal
     reste opacity:0 jusqu'au scroll (symptôme « section vide » sur docs/features). */
  .reveal { opacity: 1 !important; transform: none !important; }
  /* Cible explicite : toutes les animations infinies/lourdes coupées net.
     Avant : pulse-dot + btn-shine continuaient à tourner. */
  .bg-orb-1,
  .bg-orb-2,
  .hero-badge-dot,
  .hero-mockup,
  .btn-primary::after,
  .wave-track-back,
  .wave-track-front,
  .tarifs-hero-badge-dot {
    animation: none !important;
  }
  .hero-canvas { display: none; }
  html { scroll-behavior: auto; }
}

/* ═══════════════════════════════════════
   PRINT — version sobre pour pages légales (CGU/RGPD/Mentions/Confidentialité)
   Cache nav/footer décoratifs/bg-effects, garde le contenu lisible
═══════════════════════════════════════ */
@media print {
  .navbar,
  .mobile-menu,
  .hamburger,
  .bg-effects,
  .hero-canvas,
  .wave-divider,
  .skip-link,
  .footer-social,
  .nav-actions,
  .nav-indicator { display: none !important; }
  html, body {
    background: #fff !important;
    color: #000 !important;
    font-size: 11pt;
  }
  a { color: #000 !important; text-decoration: underline; }
  main { padding-top: 0 !important; }
  footer {
    border-top: 1px solid #000 !important;
    padding: 16px 0 0 !important;
    color: #000 !important;
  }
  .footer-inner { display: block !important; }
  .footer-col,
  .footer-brand { color: #000 !important; }
  .footer-col a,
  .footer-bottom,
  .footer-legal a { color: #000 !important; }
  /* Évite les page-breaks au milieu d'un titre */
  h1, h2, h3, h4 { page-break-after: avoid; break-after: avoid; }
  p, li { page-break-inside: avoid; break-inside: avoid; }
  @page { margin: 1.5cm; }
}

/* ═══════════════════════════════════════
   UTILITY CLASSES
   (purgé : 20 classes u-* orphelines retirées le 2026-05-27)
═══════════════════════════════════════ */
.u-link-purple      { color: var(--purple-light); }

/* Margins */
.u-mb-logo          { margin-bottom: 14px; }
.u-mt-cta           { margin-top: 64px; }
.u-mb-0             { margin-bottom: 0; }
.u-m-auto           { margin: 0 auto; }
.u-m-auto-bottom-md { margin: 0 auto 36px; }
.u-mt-link          { margin-top: 28px; display: inline-flex; }

/* Misc */
.u-filter-count     { opacity: 0.85; font-size: 0.75rem; }
.u-justify-center   { justify-content: center; }

/* Skip link (a11y) — <a href="#main">, fonctionne sans JS — invisible sauf au focus clavier */
.skip-link {
  position: fixed;
  top: 0;
  left: 0;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
  z-index: 1000;
  background: var(--purple);
  color: #fff;
  font-weight: 600;
  font-family: inherit;
  font-size: 0.95rem;
  cursor: pointer;
  border-radius: 0 0 8px 0;
}
.skip-link:focus,
.skip-link:focus-visible {
  width: auto;
  height: auto;
  padding: 8px 16px;
  margin: 0;
  overflow: visible;
  clip: auto;
  clip-path: none;
  white-space: normal;
  outline: 2px solid var(--purple-light);
  outline-offset: 2px;
}

/* ═══════════════════════════════════════
   FOCUS-VISIBLE GLOBAL (WCAG 2.4.7)
   Tous les éléments interactifs ont un outline visible au focus clavier
═══════════════════════════════════════ */
.btn-primary:focus-visible,
.btn-secondary:focus-visible,
.btn-ghost:focus-visible,
.nav-link:focus-visible,
.nav-links a:focus-visible,
.nav-cta:focus-visible,
.hamburger:focus-visible,
.filter-tab:focus-visible,
.cat-card:focus-visible,
.faq-q:focus-visible,
.command-card:focus-visible,
.footer-social a:focus-visible,
.footer-col a:focus-visible,
.wiki-nav a:focus-visible,
.mobile-menu a:focus-visible,
.status-refresh-btn:focus-visible,
button:focus-visible,
a:focus-visible {
  outline: 2px solid var(--purple-light);
  outline-offset: 3px;
  border-radius: 4px;
}
.search-bar input:focus-visible {
  outline: 2px solid var(--purple-light);
  outline-offset: 0;
}

/* ═══════════════════════════════════════
   DISCORD INTERACTIVE DEMO
═══════════════════════════════════════ */
.discord-demo {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
.demo-cmd-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
}
.demo-cmd-btn {
  font-family: 'JetBrains Mono', 'Courier New', monospace;
  font-size: 13px;
  font-weight: 500;
  padding: 6px 14px;
  border-radius: 6px;
  background: rgba(139, 92, 246, 0.10);
  color: var(--text);
  border: 1px solid var(--border, rgba(255,255,255,0.08));
  cursor: pointer;
  transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease, transform 0.18s ease;
}
.demo-cmd-btn:hover {
  background: var(--bg-card-hover, rgba(139,92,246,0.18));
  transform: translateY(-1px);
}
.demo-cmd-btn.active {
  background: var(--purple, #8b5cf6);
  color: #fff;
  border-color: var(--purple, #8b5cf6);
}
.demo-cmd-btn:focus-visible {
  outline: 2px solid var(--purple, #8b5cf6);
  outline-offset: 2px;
}
.discord-input-bar {
  background: #383a40;
  padding: 12px 16px;
  border-radius: 8px;
  font-family: 'JetBrains Mono', 'Courier New', monospace;
  font-size: 13px;
  color: #dbdee1;
  min-height: 40px;
  display: flex;
  align-items: center;
  overflow: hidden;
  white-space: nowrap;
}
.discord-input-text {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.discord-input-cursor {
  display: inline-block;
  margin-left: 1px;
  color: #dbdee1;
  animation: discord-blink 1s steps(2, start) infinite;
}
@keyframes discord-blink {
  to { opacity: 0; }
}
.bot-typing {
  display: inline-flex;
  gap: 4px;
  padding: 6px 0;
}
.bot-typing span {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #b9bbbe;
  display: inline-block;
  animation: bot-dot-bounce 1.2s infinite ease-in-out;
}
.bot-typing span:nth-child(2) { animation-delay: 0.15s; }
.bot-typing span:nth-child(3) { animation-delay: 0.30s; }
@keyframes bot-dot-bounce {
  0%, 60%, 100% { transform: translateY(0); opacity: 0.5; }
  30% { transform: translateY(-4px); opacity: 1; }
}
.embed-text { white-space: pre-line; }
.typing-cursor {
  display: inline-block;
  margin-left: 2px;
  color: var(--purple, #8b5cf6);
  animation: discord-blink 0.8s steps(2, start) infinite;
}
@media (max-width: 640px) {
  .demo-cmd-bar { flex-wrap: wrap; }
  /* Min font-size 14px sur mobile pour lisibilité (WCAG/Lighthouse) + touch target ≥36px */
  .demo-cmd-btn { font-size: 14px; padding: 8px 12px; min-height: 36px; }
  .discord-input-bar { font-size: 14px; padding: 10px 12px; }
}
@media (prefers-reduced-motion: reduce) {
  .discord-input-cursor,
  .typing-cursor,
  .bot-typing span { animation: none; }
}

/* ═══════════════════════════════════════
   DASHBOARD PAGE
═══════════════════════════════════════ */
.dashboard-hero {
  position: relative;
  padding: 120px 0 80px;
  z-index: 1;
}
.dashboard-hero-inner {
  max-width: 980px;
  margin: 0 auto;
}

/* Loading + login + error states */
.dashboard-loading,
.dashboard-error {
  text-align: center;
  padding: 60px 20px;
  max-width: 520px;
  margin: 0 auto;
}
.dashboard-loading p {
  color: var(--text-muted);
  font-size: 0.95rem;
}
.dashboard-tiny {
  margin-top: 14px;
  font-size: 0.78rem;
  color: var(--text-dim);
}

/* Title et subtitle utilisés sur les états loading/login/error (pas le hero connecté) */
.dashboard-title {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: clamp(1.8rem, 3vw, 2.6rem);
  letter-spacing: -0.02em;
  color: var(--text);
  margin-bottom: 8px;
}
.dashboard-subtitle {
  font-size: 1rem;
  color: var(--text-muted);
}

/* Sections */
.dashboard-section {
  margin-bottom: 36px;
}
.dashboard-h2 {
  display: flex;
  align-items: center;
  gap: 0;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.2rem;
  color: var(--text);
  margin-bottom: 16px;
  letter-spacing: -0.01em;
}

/* Quota cards */
.dashboard-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.dashboard-card {
  position: relative;
  overflow: hidden;
  padding: 22px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  transition: border-color 0.3s ease, transform 0.3s ease;
}
.dashboard-card:hover {
  border-color: var(--border-hover);
  transform: translateY(-2px);
}
.dashboard-card-label {
  font-size: 0.78rem;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  font-weight: 600;
  margin-bottom: 8px;
}
.dashboard-card-value {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.6rem;
  color: var(--text);
  line-height: 1.1;
  margin-bottom: 14px;
  letter-spacing: -0.01em;
}
.dashboard-progress {
  width: 100%;
  height: 6px;
  background: rgba(88, 101, 242, 0.1);
  border-radius: 999px;
  overflow: hidden;
  margin-bottom: 8px;
}
.dashboard-progress-fill {
  height: 100%;
  background: var(--gradient);
  border-radius: 999px;
  transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.dashboard-progress-fill[data-full="yes"] {
  background: linear-gradient(135deg, #ED4245, #FEE75C);
}
.dashboard-card-hint {
  font-size: 0.78rem;
  color: var(--text-dim);
}
.dashboard-quota-note {
  text-align: center;
  margin-top: 14px;
}
.dashboard-quota-note strong { color: var(--purple-light); }

/* Profil */
.dashboard-profile {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 22px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}
.dashboard-profile-item {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  padding: 8px 0;
  border-bottom: 1px solid rgba(88, 101, 242, 0.08);
}
.dashboard-profile-item:last-child { border-bottom: none; }
.dashboard-profile-key {
  flex-shrink: 0;
  width: 130px;
  font-size: 0.86rem;
  color: var(--text-muted);
  font-weight: 500;
}
.dashboard-profile-val {
  flex: 1;
  font-size: 0.95rem;
  color: var(--text);
}
.dashboard-color-dot {
  display: inline-block;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 1px solid var(--border);
  vertical-align: middle;
  margin-right: 6px;
}
.dashboard-empty {
  color: var(--text-dim);
  font-size: 0.92rem;
  text-align: center;
  padding: 28px 16px;
  background: var(--bg-card);
  border: 1px dashed var(--border);
  border-radius: var(--radius);
  margin: 0;
}
.dashboard-empty code {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 0.85rem;
  padding: 1px 6px;
  background: rgba(88, 101, 242, 0.1);
  border-radius: 4px;
  color: var(--purple-light);
}

/* Actions */
.dashboard-actions {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  justify-content: center;
  margin-top: 40px;
}

/* ─── HERO USERHEAD — avatar (VIVANT) ─────────────────────────── */
.dashboard-avatar-wrap {
  position: relative;
  width: 96px;
  height: 96px;
  flex-shrink: 0;
}
.dashboard-avatar {
  position: relative;
  z-index: 1;
  width: 96px;
  height: 96px;
  border-radius: 50%;
  border: 3px solid rgba(139, 92, 246, 0.5);
  background: var(--bg-card);
  object-fit: cover;
  box-shadow: 0 0 30px rgba(139, 92, 246, 0.35);
}

.dashboard-userhead-tier {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  padding: 14px 22px;
  border-radius: var(--radius);
  border: 2px solid var(--border);
  background: var(--bg-card);
  white-space: nowrap;
  transition: var(--transition);
}
.dashboard-userhead-tier-emoji {
  font-size: 2rem;
  line-height: 1;
}
.dashboard-userhead-tier-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  text-align: left;
}
.dashboard-userhead-tier-label {
  font-size: 0.72rem;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 600;
}
.dashboard-userhead-tier strong {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.2rem;
  color: var(--text);
  letter-spacing: -0.01em;
}

/* ─── H2 sections ─────────────────────────────────────────────── */
.dashboard-h2-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: 8px;
  margin-right: 10px;
  font-size: 1rem;
  vertical-align: middle;
}

/* ─── Quota cards améliorées (effets visuels) ──────────────── */
.dashboard-card::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 100% 0%, rgba(88, 101, 242, 0.10), transparent 60%);
  opacity: 0;
  transition: opacity 0.3s ease;
  pointer-events: none;
}
.dashboard-card:hover::before { opacity: 1; }
.dashboard-card-icon {
  position: absolute;
  top: 16px;
  right: 16px;
  font-size: 1.5rem;
  opacity: 0.45;
  transition: opacity 0.3s ease, transform 0.3s ease;
}
.dashboard-card:hover .dashboard-card-icon {
  opacity: 0.85;
  transform: scale(1.08);
}
.dashboard-card-ia       .dashboard-card-icon { filter: drop-shadow(0 0 8px rgba(96, 165, 250, 0.6)); }
.dashboard-card-imagine  .dashboard-card-icon { filter: drop-shadow(0 0 8px rgba(139, 92, 246, 0.6)); }
.dashboard-card-analyse  .dashboard-card-icon { filter: drop-shadow(0 0 8px rgba(109, 207, 176, 0.6)); }

/* ─── H2 count badge ──────────────────────────────────────────── */
.dashboard-h2-count {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 10px;
  font-size: 0.78rem;
  color: var(--purple-light);
  background: rgba(139, 92, 246, 0.12);
  border: 1px solid rgba(139, 92, 246, 0.25);
  border-radius: 999px;
  font-weight: 600;
  vertical-align: middle;
}
.dashboard-h2-count:empty { display: none; }

/* ─── Liste générique (rappels, notes) ────────────────────────── */
.dashboard-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 22px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}
.dashboard-list-loading {
  text-align: center;
  color: var(--text-dim);
  font-size: 0.88rem;
  padding: 20px;
}
.dashboard-list-item {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 16px;
  padding: 16px 20px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  transition: var(--transition);
}
.dashboard-list-item:hover {
  border-color: var(--border-hover);
  background: var(--bg-card-hover);
}
.dashboard-list-item-icon {
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, rgba(139, 92, 246, 0.18), rgba(88, 101, 242, 0.10));
  border-radius: 10px;
  font-size: 1.2rem;
  flex-shrink: 0;
}
.dashboard-list-item-body { min-width: 0; }
.dashboard-list-item-title {
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--text);
  margin-bottom: 4px;
  word-break: break-word;
}
.dashboard-list-item-badge {
  display: inline-block;
  padding: 2px 8px;
  margin-right: 8px;
  border-radius: 6px;
  background: rgba(114, 34, 61, 0.18);
  color: var(--accent, #c084fc);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 0.8rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  vertical-align: middle;
}
.dashboard-list-item-content {
  font-size: 0.86rem;
  color: var(--text-muted);
  line-height: 1.5;
  margin-bottom: 6px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  word-break: break-word;
}
.dashboard-list-item-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 0.78rem;
  color: var(--text-dim);
  flex-wrap: wrap;
}
.dashboard-list-item-when {
  color: var(--purple-light);
  font-weight: 600;
}
.dashboard-list-item-sep { opacity: 0.5; }
.dashboard-list-item-date {
  color: var(--text-dim);
  font-size: 0.78rem;
}
.dashboard-list-item-delete {
  width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text-dim);
  font-size: 0.9rem;
  cursor: pointer;
  transition: var(--transition);
  flex-shrink: 0;
}
.dashboard-list-item-delete:hover:not(:disabled) {
  background: rgba(237, 66, 69, 0.12);
  border-color: #ED4245;
  color: #ED4245;
}
.dashboard-list-item-delete:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

/* ─── Stats ──────────────────────────────────────────────────── */
.dashboard-stats {
  display: grid;
  grid-template-columns: 1fr 1.2fr;
  gap: 16px;
}
.dashboard-stat-card {
  padding: 24px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  transition: var(--transition);
}
.dashboard-stat-card:hover {
  border-color: var(--border-hover);
}
.dashboard-stat-card-big {
  background: linear-gradient(135deg, rgba(88, 101, 242, 0.12), rgba(139, 92, 246, 0.06));
  border-color: rgba(139, 92, 246, 0.3);
}
.dashboard-stat-label {
  font-size: 0.78rem;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  font-weight: 600;
  margin-bottom: 12px;
}
.dashboard-stat-value {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 2.6rem;
  background: var(--gradient-text);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  letter-spacing: -0.02em;
  line-height: 1;
  margin-bottom: 8px;
}
.dashboard-stat-hint {
  font-size: 0.82rem;
  color: var(--text-dim);
}
.dashboard-stat-top {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
  counter-reset: cmd-rank;
}
.dashboard-stat-top li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px;
  background: rgba(88, 101, 242, 0.06);
  border-radius: 8px;
  font-size: 0.9rem;
  counter-increment: cmd-rank;
}
.dashboard-stat-top li::before {
  content: counter(cmd-rank);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  background: var(--gradient);
  color: #fff;
  font-size: 0.7rem;
  font-weight: 700;
  border-radius: 50%;
  margin-right: 10px;
  flex-shrink: 0;
}
.dashboard-stat-top-cmd {
  flex: 1;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  color: var(--text);
}
.dashboard-stat-top-count {
  font-weight: 700;
  color: var(--purple-light);
  font-size: 0.95rem;
}
.dashboard-stat-top-empty {
  text-align: center;
  color: var(--text-dim);
  font-size: 0.88rem;
  padding: 12px;
  background: transparent !important;
}
.dashboard-stat-top-empty::before { display: none !important; }

/* ─── Upgrade preview (free only) ────────────────────────────── */
.dashboard-upgrade {
  position: relative;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 32px;
  padding: 32px;
  background: linear-gradient(135deg, rgba(139, 92, 246, 0.10), rgba(88, 101, 242, 0.05));
  border: 1px solid rgba(139, 92, 246, 0.4);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: 0 0 40px rgba(139, 92, 246, 0.15);
}
.dashboard-upgrade-glow {
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 100% 50%, rgba(139, 92, 246, 0.18), transparent 60%);
  pointer-events: none;
}
.dashboard-upgrade > *:not(.dashboard-upgrade-glow) {
  position: relative;
  z-index: 1;
}
.dashboard-upgrade-title {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.4rem;
  color: var(--text);
  margin: 0 0 14px;
  letter-spacing: -0.01em;
}
.dashboard-upgrade-perks {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.dashboard-upgrade-perks li {
  font-size: 0.92rem;
  color: var(--text-muted);
  line-height: 1.5;
}
.dashboard-upgrade-perks li strong {
  color: var(--text);
  font-weight: 600;
}
.dashboard-upgrade-cta {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  text-align: center;
}
.dashboard-upgrade-price {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 2rem;
  background: var(--gradient-text);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  letter-spacing: -0.02em;
  line-height: 1;
}
.dashboard-upgrade-price-cycle {
  display: block;
  margin-top: 4px;
  font-size: 0.82rem;
  color: var(--text-muted);
  -webkit-text-fill-color: var(--text-muted);
  font-weight: 500;
}

/* ─── Bouton Modifier (à côté du H2) ───────────────────────── */
.dashboard-edit-btn {
  margin-left: auto;
  padding: 6px 14px;
  background: var(--bg-card-hover);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text);
  font-size: 0.82rem;
  font-weight: 600;
  cursor: pointer;
  transition: var(--transition);
  font-family: var(--font-body);
}
.dashboard-edit-btn:hover {
  background: rgba(139, 92, 246, 0.15);
  border-color: var(--purple-light);
  color: var(--purple-light);
}
/* ─── Forms (profil, guild settings) ────────────────────────── */
.dashboard-form {
  display: flex;
  flex-direction: column;
  gap: 18px;
  padding: 24px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
}
.dashboard-form-row {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.dashboard-form-label {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--text);
}
.dashboard-form-hint {
  font-size: 0.78rem;
  color: var(--text-dim);
  line-height: 1.5;
}
.dashboard-form-actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  margin-top: 8px;
}
.dashboard-form-status {
  font-size: 0.85rem;
  color: var(--text-muted);
  margin: 0;
  min-height: 1.2em;
}
/* Couleurs OK/erreur définies dans dashboard-enhance.css (--kx-green/--kx-red, !important) —
   source unique pour le dashboard. */

.dashboard-input,
.dashboard-textarea,
.dashboard-select {
  width: 100%;
  padding: 10px 14px;
  background: rgba(5, 2, 15, 0.5);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--text);
  font-family: var(--font-body);
  font-size: 0.92rem;
  transition: border-color 0.2s ease, background 0.2s ease;
}
.dashboard-input:focus,
.dashboard-textarea:focus,
.dashboard-select:focus {
  outline: none;
  border-color: var(--purple-light);
  background: rgba(5, 2, 15, 0.7);
}
.dashboard-input:disabled,
.dashboard-textarea:disabled,
.dashboard-select:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
.dashboard-textarea {
  resize: vertical;
  min-height: 80px;
  font-family: var(--font-body);
  line-height: 1.5;
}
.dashboard-select-multi {
  min-height: 140px;
}

/* Color picker + hex input combo */
.dashboard-form-color-row {
  display: flex;
  gap: 10px;
  align-items: stretch;
}
.dashboard-color-picker {
  width: 56px;
  height: 42px;
  padding: 0;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: transparent;
  cursor: pointer;
}
.dashboard-color-picker::-webkit-color-swatch-wrapper { padding: 4px; border-radius: 8px; }
.dashboard-color-picker::-webkit-color-swatch { border: none; border-radius: 4px; }
.dashboard-input-color {
  flex: 1;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}

/* Toggle switch */
.dashboard-toggle {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 14px;
  cursor: pointer;
  user-select: none;
}
.dashboard-toggle input[type=checkbox] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}
.dashboard-toggle-slider {
  position: relative;
  width: 48px;
  height: 26px;
  background: rgba(141, 132, 176, 0.25);
  border-radius: 999px;
  border: 1px solid var(--border);
  transition: background 0.25s ease, border-color 0.25s ease;
  flex-shrink: 0;
}
.dashboard-toggle-slider::after {
  content: "";
  position: absolute;
  top: 2px;
  left: 2px;
  width: 20px;
  height: 20px;
  background: #fff;
  border-radius: 50%;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
  transition: transform 0.25s ease;
}
.dashboard-toggle input:checked + .dashboard-toggle-slider {
  background: var(--gradient);
  border-color: rgba(139, 92, 246, 0.5);
}
.dashboard-toggle input:checked + .dashboard-toggle-slider::after {
  transform: translateX(22px);
}
.dashboard-toggle input:disabled ~ .dashboard-toggle-slider {
  opacity: 0.4;
  cursor: not-allowed;
}
.dashboard-toggle-label {
  font-size: 0.92rem;
  color: var(--text);
  font-weight: 500;
}

/* ─── Guild cards ─────────────────────────────────────────────── */
.dashboard-guilds {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 12px;
}
.dashboard-guild-card {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 16px 18px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  cursor: pointer;
  text-align: left;
  font-family: var(--font-body);
  color: var(--text);
  transition: var(--transition);
}
.dashboard-guild-card:hover {
  border-color: var(--border-hover);
  background: var(--bg-card-hover);
  transform: translateY(-2px);
}
.dashboard-guild-card.active {
  border-color: var(--purple-light);
  background: rgba(139, 92, 246, 0.10);
  box-shadow: 0 0 24px rgba(139, 92, 246, 0.18);
}
.dashboard-guild-icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: var(--bg-card-hover);
  border: 1px solid var(--border);
  flex-shrink: 0;
  object-fit: cover;
}
.dashboard-guild-icon-large {
  width: 64px;
  height: 64px;
  border-radius: 14px;
}
.dashboard-guild-icon-fallback {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1rem;
  color: var(--purple-light);
  background: linear-gradient(135deg, rgba(139, 92, 246, 0.18), rgba(88, 101, 242, 0.10));
}
.dashboard-guild-card-text { flex: 1; min-width: 0; }
.dashboard-guild-card-name {
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--text);
  margin-bottom: 4px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dashboard-guild-card-meta {
  display: flex;
  gap: 10px;
  align-items: center;
  font-size: 0.78rem;
  color: var(--text-dim);
  flex-wrap: wrap;
}
.dashboard-guild-tier {
  display: inline-block;
  padding: 2px 8px;
  border: 1px solid;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.02em;
}
.dashboard-guild-members { color: var(--text-dim); }
.dashboard-guild-arrow {
  color: var(--text-dim);
  font-size: 1.2rem;
  transition: transform 0.3s ease, color 0.3s ease;
  flex-shrink: 0;
}
.dashboard-guild-card:hover .dashboard-guild-arrow {
  color: var(--purple-light);
  transform: translateX(4px);
}

/* Variant : serveur où le bot N'EST PAS présent (CTA inviter) */
.dashboard-guild-card-invite {
  text-decoration: none;
  border-style: dashed;
  border-color: rgba(141, 132, 176, 0.35);
  opacity: 0.85;
}
.dashboard-guild-card-invite:hover {
  border-color: var(--purple-light);
  border-style: solid;
  opacity: 1;
  background: linear-gradient(135deg, rgba(139, 92, 246, 0.08), rgba(88, 101, 242, 0.04));
}
.dashboard-guild-tier-missing {
  display: inline-block;
  padding: 2px 8px;
  border: 1px solid rgba(237, 66, 69, 0.4);
  background: rgba(237, 66, 69, 0.10);
  color: #ED4245;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.02em;
}
.dashboard-guild-invite-cta {
  display: inline-flex;
  align-items: center;
  padding: 8px 14px;
  background: var(--gradient);
  color: #fff;
  font-size: 0.82rem;
  font-weight: 600;
  border-radius: 999px;
  white-space: nowrap;
  flex-shrink: 0;
  transition: var(--transition);
  box-shadow: 0 4px 12px rgba(88, 101, 242, 0.3);
}
.dashboard-guild-card-invite:hover .dashboard-guild-invite-cta {
  transform: scale(1.05);
  box-shadow: 0 6px 18px rgba(88, 101, 242, 0.5);
}
.dashboard-guild-owner {
  font-size: 0.85rem;
  margin-left: 4px;
}

/* ─── Guild pilot header ────────────────────────────────────── */
.dashboard-guild-header {
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 22px 24px;
  margin-bottom: 18px;
  background: linear-gradient(135deg, rgba(88, 101, 242, 0.10), rgba(139, 92, 246, 0.05));
  border: 1px solid var(--border-hover);
  border-radius: var(--radius);
  flex-wrap: wrap;
}
.dashboard-guild-upgrade-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 22px;
  background: var(--gradient);
  color: #fff;
  font-weight: 700;
  font-size: 0.92rem;
  border-radius: 10px;
  text-decoration: none;
  white-space: nowrap;
  transition: var(--transition);
  box-shadow: 0 6px 20px rgba(139, 92, 246, 0.35);
  flex-shrink: 0;
}
.dashboard-guild-upgrade-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 28px rgba(139, 92, 246, 0.5);
}
.dashboard-guild-upgrade-btn-secondary {
  background: var(--bg-card-hover);
  color: var(--text);
  border: 1px solid var(--border);
  box-shadow: none;
  font-weight: 600;
}
.dashboard-guild-upgrade-btn-secondary:hover {
  background: rgba(88, 101, 242, 0.12);
  border-color: var(--border-hover);
  box-shadow: none;
}

/* ─── Encart cumul info (perso + serveur) ───────────────────── */
.dashboard-cumul-info {
  display: flex;
  gap: 14px;
  padding: 16px 20px;
  margin-bottom: 18px;
  background: linear-gradient(135deg, rgba(96, 165, 250, 0.10), rgba(109, 207, 176, 0.05));
  border: 1px solid rgba(96, 165, 250, 0.3);
  border-radius: var(--radius);
  font-size: 0.88rem;
  color: var(--text-muted);
  line-height: 1.6;
}
.dashboard-cumul-info-emoji {
  font-size: 1.4rem;
  flex-shrink: 0;
  line-height: 1.4;
}
.dashboard-cumul-info strong { color: var(--text); }
.dashboard-cumul-info em {
  font-style: normal;
  color: var(--purple-light);
  font-weight: 600;
}
.dashboard-guild-header-text { flex: 1; min-width: 0; }
.dashboard-guild-header-name {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 1.4rem;
  color: var(--text);
  margin: 0 0 8px;
  letter-spacing: -0.01em;
}
.dashboard-guild-header-meta {
  display: flex;
  gap: 12px;
  align-items: center;
  flex-wrap: wrap;
}

/* ─── Tabs ───────────────────────────────────────────────────── */
.dashboard-tab {
  padding: 12px 18px;
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--text-muted);
  font-family: var(--font-body);
  font-size: 0.88rem;
  font-weight: 600;
  cursor: pointer;
  transition: color 0.2s ease, border-color 0.2s ease;
  white-space: nowrap;
}
.dashboard-tab:hover { color: var(--text); }
.dashboard-tab.active {
  color: var(--purple-light);
  border-bottom-color: var(--purple-light);
}
.dashboard-tab-panel { position: relative; }

/* Badge "Pro" sur les libellés de champs réservés Pro Server */
.dashboard-tab-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-left: 4px;
  padding: 1px 6px;
  font-size: 0.7rem;
  font-weight: 700;
  color: var(--cyan);
  background: rgba(96, 165, 250, 0.15);
  border: 1px solid rgba(96, 165, 250, 0.35);
  border-radius: 8px;
  line-height: 1;
}

/* ─── Tier lock overlay ──────────────────────────────────────── */
.dashboard-tier-lock {
  position: relative;
  z-index: 2;
  margin-bottom: 16px;
  padding: 32px 24px;
  background: linear-gradient(135deg, rgba(139, 92, 246, 0.08), rgba(88, 101, 242, 0.04));
  border: 1px dashed rgba(139, 92, 246, 0.4);
  border-radius: var(--radius);
  text-align: center;
}
.dashboard-tier-lock-content {
  max-width: 420px;
  margin: 0 auto;
}
.dashboard-tier-lock-emoji {
  display: block;
  font-size: 2rem;
  margin-bottom: 10px;
}
.dashboard-tier-lock-title {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.1rem;
  margin: 0 0 8px;
  color: var(--text);
}
.dashboard-tier-lock-title strong {
  background: var(--gradient-text);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.dashboard-tier-lock-desc {
  font-size: 0.92rem;
  color: var(--text-muted);
  line-height: 1.5;
  margin: 0 0 18px;
}

/* ─── Stats history bar chart 7j ─────────────────────────────── */
.dashboard-stat-history {
  grid-column: 1 / -1;
  margin-top: 16px;
}
.dashboard-stat-history-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 18px;
}
.dashboard-stat-legend {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
}
.dashboard-stat-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.78rem;
  color: var(--text-muted);
}
.dashboard-stat-legend-dot {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 3px;
}
.dashboard-stat-bars {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 10px;
  align-items: end;
  min-height: 160px;
}
.dashboard-bar-day {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}
.dashboard-bar-stack {
  width: 100%;
  height: 130px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  gap: 2px;
  background: rgba(88, 101, 242, 0.05);
  border-radius: 6px 6px 0 0;
  padding: 2px;
}
.dashboard-bar {
  width: 100%;
  border-radius: 3px;
  transition: opacity 0.2s ease;
  min-height: 0;
}
.dashboard-bar:hover { opacity: 0.8; }
.dashboard-bar-ia      { background: linear-gradient(180deg, #60a5fa, #3b82f6); }
.dashboard-bar-imagine { background: linear-gradient(180deg, #a78bfa, #8B5CF6); }
.dashboard-bar-analyse { background: linear-gradient(180deg, #6dcfb0, #4ea892); }
.dashboard-bar-label {
  font-size: 0.72rem;
  color: var(--text-dim);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.dashboard-bar-total {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 0.82rem;
  color: var(--text);
}

/* Graphe stats 7 jours — compactage sur très petit mobile */
@media (max-width: 480px) {
  .dashboard-stat-bars { gap: 5px; }
  .dashboard-bar-label { font-size: 0.62rem; letter-spacing: 0.02em; }
  .dashboard-bar-total { font-size: 0.72rem; }
}

/* Responsive dashboard */
@media (max-width: 768px) {
  .dashboard-hero { padding: 100px 0 60px; }
  .dashboard-grid { grid-template-columns: 1fr; }

  .dashboard-avatar-wrap { margin: 0 auto; }
  .dashboard-userhead-tier { justify-self: center; }
  .dashboard-guild-header { padding: 18px 16px; gap: 12px; }
  .dashboard-guild-upgrade-btn { width: 100%; justify-content: center; }
  .dashboard-stats { grid-template-columns: 1fr; }
  .dashboard-upgrade {
    grid-template-columns: 1fr;
    text-align: center;
    padding: 28px 22px;
    gap: 24px;
  }
  .dashboard-upgrade-perks li { text-align: left; }
  .dashboard-list-item {
    grid-template-columns: auto 1fr;
    grid-template-rows: auto auto;
  }
  .dashboard-list-item-delete {
    grid-column: 2;
    grid-row: 2;
    justify-self: end;
  }
}
@media (max-width: 480px) {
  .dashboard-stat-value { font-size: 2rem; }
  .dashboard-upgrade-price { font-size: 1.6rem; }
  .dashboard-list-item { padding: 14px 16px; }
  .dashboard-profile-item { flex-direction: column; gap: 4px; }
  .dashboard-profile-key { width: auto; }
  .dashboard-actions { flex-direction: column; }
  .dashboard-actions .btn-primary,
  .dashboard-actions .btn-secondary { width: 100%; justify-content: center; }
}

/* ═══════════════════════════════════════
   PAGE TARIFS
═══════════════════════════════════════ */

/* — Hero ——————————————————————————————————— */
.tarifs-hero {
  position: relative;
  z-index: 1;
  padding: 140px 0 60px;
  text-align: center;
}
.tarifs-hero-inner {
  max-width: 820px;
  margin: 0 auto;
}
.tarifs-hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 8px 16px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: 999px;
  color: var(--text-muted);
  font-size: 0.85rem;
  margin-bottom: 24px;
  backdrop-filter: blur(10px);
}
.tarifs-hero-badge-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--purple-light);
  box-shadow: 0 0 12px var(--purple-light);
  animation: pulse-dot 2s infinite;
}
.tarifs-hero-title {
  font-family: var(--font-display);
  font-size: clamp(2.4rem, 6vw, 4.2rem);
  font-weight: 800;
  line-height: 1.05;
  letter-spacing: -0.02em;
  margin-bottom: 20px;
}
.tarifs-hero-subtitle {
  font-size: 1.1rem;
  color: var(--text-muted);
  line-height: 1.7;
  max-width: 640px;
  margin: 0 auto;
}

/* — Sections ——————————————————————————————— */
.tarifs-section {
  position: relative;
  z-index: 1;
  padding: 80px 0;
}
.tarifs-section-alt {
  background: linear-gradient(180deg, transparent 0%, rgba(88, 101, 242, 0.03) 50%, transparent 100%);
}
.tarifs-section-head {
  text-align: center;
  margin-bottom: 50px;
}
.tarifs-section-head .section-label {
  margin-bottom: 16px;
}
.tarifs-section-head .section-title {
  margin-bottom: 14px;
}

/* — Section Inclus gratuitement ————————————— */
.tarifs-free-modules-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  margin-bottom: 32px;
}
.tarifs-free-module-item {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 16px 18px;
  background: rgba(88, 101, 242, 0.05);
  border: 1px solid rgba(88, 101, 242, 0.15);
  border-radius: 12px;
  transition: border-color 0.2s;
}
.tarifs-free-module-item:hover { border-color: rgba(88, 101, 242, 0.35); }
.tarifs-free-module-icon {
  font-size: 1.25rem;
  flex-shrink: 0;
  margin-top: 2px;
}
.tarifs-free-module-item > div { display: flex; flex-direction: column; gap: 2px; }
.tarifs-free-module-item strong { font-size: 0.9rem; color: var(--text); font-weight: 600; }
.tarifs-free-module-item span  { font-size: 0.8rem; color: var(--text-muted); line-height: 1.4; }
.tarifs-free-modules-note {
  text-align: center;
  color: var(--text-muted);
  font-size: 0.9rem;
  max-width: 480px;
  margin: 0 auto;
}
.tarifs-free-modules-note strong { color: var(--cyan); }

/* — Grids ——————————————————————————————————— */
.tarifs-grid {
  display: grid;
  gap: 24px;
  align-items: stretch;
}
.tarifs-grid-3 { grid-template-columns: repeat(3, 1fr); }

/* — Cards ——————————————————————————————————— */
.tarif-card {
  position: relative;
  display: flex;
  flex-direction: column;
  padding: 32px 28px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  backdrop-filter: blur(10px);
  transition: var(--transition);
  overflow: hidden;
}
.tarif-card::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 50% 0%, rgba(88, 101, 242, 0.08), transparent 60%);
  opacity: 0;
  transition: opacity var(--transition);
  pointer-events: none;
}
.tarif-card:hover {
  border-color: var(--border-hover);
  transform: translateY(-4px);
  background: var(--bg-card-hover);
}
.tarif-card:hover::before { opacity: 1; }

.tarif-card-featured {
  border-color: rgba(139, 92, 246, 0.55);
  background: linear-gradient(180deg, rgba(139, 92, 246, 0.10), rgba(88, 101, 242, 0.04));
  box-shadow: 0 0 50px rgba(139, 92, 246, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
.tarif-card-featured::before {
  background: radial-gradient(circle at 50% 0%, rgba(139, 92, 246, 0.18), transparent 65%);
  opacity: 1;
}
.tarif-card-featured:hover {
  border-color: rgba(139, 92, 246, 0.8);
  box-shadow: 0 0 60px rgba(139, 92, 246, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.08);
}

.tarif-card-badge {
  position: absolute;
  top: 16px;
  right: 16px;
  padding: 6px 12px;
  background: var(--gradient);
  color: #fff;
  font-size: 0.72rem;
  font-weight: 600;
  border-radius: 999px;
  letter-spacing: 0.02em;
  z-index: 2;
  box-shadow: 0 4px 16px rgba(88, 101, 242, 0.35);
}

/* — Card head ——————————————————————————————— */
.tarif-head {
  position: relative;
  z-index: 1;
  margin-bottom: 24px;
}
.tarif-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  font-size: 1.8rem;
  background: var(--bg-card-hover);
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  margin-bottom: 16px;
}
.tarif-icon-free      { background: rgba(141, 132, 176, 0.10); }
.tarif-icon-allie     { background: linear-gradient(135deg, rgba(96, 165, 250, 0.18), rgba(88, 101, 242, 0.10)); }
.tarif-icon-compagnon { background: linear-gradient(135deg, rgba(139, 92, 246, 0.22), rgba(88, 101, 242, 0.14)); }
.tarif-icon-pro-server { background: linear-gradient(135deg, rgba(255, 215, 0, 0.16), rgba(139, 92, 246, 0.14)); }
.tarif-name {
  font-family: var(--font-display);
  font-size: 1.6rem;
  font-weight: 800;
  margin-bottom: 6px;
  color: var(--text);
}
.tarif-tagline {
  color: var(--text-muted);
  font-size: 0.92rem;
}

/* — Price ——————————————————————————————————— */
.tarif-price {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding-bottom: 24px;
  margin-bottom: 24px;
  border-bottom: 1px solid var(--border);
}
.tarif-price-amount {
  font-family: var(--font-display);
  font-size: 2.4rem;
  font-weight: 800;
  background: var(--gradient-text);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  letter-spacing: -0.02em;
}
.tarif-price-cycle {
  color: var(--text-muted);
  font-size: 0.9rem;
}
/* V5 — devise compacte + prix qui ne casse jamais (carte « Complet ») */
.tarif-price { flex-wrap: wrap; }
.tarif-price-amount { white-space: nowrap; }
.tarif-price-cur {
  font-size: 0.42em;
  font-weight: 700;
  margin-left: 3px;
  letter-spacing: 0;
  color: var(--text-muted);
  -webkit-text-fill-color: var(--text-muted);
}
.tarif-price-break { flex-basis: 100%; height: 0; }

/* — Features list ——————————————————————————— */
.tarif-features {
  position: relative;
  z-index: 1;
  list-style: none;
  margin-bottom: 28px;
  flex-grow: 1;
}
.tarif-features li {
  position: relative;
  padding: 8px 0 8px 28px;
  font-size: 0.92rem;
  color: var(--text);
  line-height: 1.5;
}
.tarif-features li strong { color: var(--text); font-weight: 600; }
.tarif-feat-muted { color: var(--text-dim) !important; }
.tarif-feat-muted strong { color: var(--text-muted); }
.tarif-check,
.tarif-x {
  position: absolute;
  left: 0;
  top: 10px;
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  font-size: 0.7rem;
  font-weight: 700;
}
.tarif-check {
  background: rgba(109, 207, 176, 0.15);
  color: var(--accent-teal);
}
.tarif-x {
  background: rgba(141, 132, 176, 0.10);
  color: var(--text-dim);
  font-size: 0.85rem;
}
/* — CTA ————————————————————————————————————— */
.tarif-cta {
  position: relative;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: 100%;
  padding: 14px 22px;
  background: var(--gradient);
  color: #fff;
  font-weight: 600;
  font-size: 0.95rem;
  border-radius: var(--radius-sm);
  border: 1px solid transparent;
  text-align: center;
  transition: var(--transition);
  cursor: pointer;
}
.tarif-cta:hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 30px rgba(88, 101, 242, 0.4);
}
.tarif-cta-secondary {
  background: var(--bg-card-hover);
  color: var(--text);
  border-color: var(--border);
}
.tarif-cta-secondary:hover {
  background: rgba(88, 101, 242, 0.18);
  border-color: var(--border-hover);
  box-shadow: none;
}
.tarif-cta-featured {
  background: linear-gradient(135deg, #8B5CF6, #5865F2);
  box-shadow: 0 8px 24px rgba(139, 92, 246, 0.3);
}
.tarif-cta-featured:hover {
  box-shadow: 0 14px 40px rgba(139, 92, 246, 0.5);
}
.tarif-cta-hint {
  position: relative;
  z-index: 1;
  margin-top: 12px;
  text-align: center;
  font-size: 0.78rem;
  color: var(--text-dim);
}

/* — Comparatif table ——————————————————————— */
.tarifs-compare-section {
  position: relative;
  z-index: 1;
  padding: 80px 0;
}
/* V6 — chaque comparatif dans sa propre carte */
.tarifs-table-cards {
  display: flex;
  flex-direction: column;
  gap: 24px;
}
.tarifs-table-wrap {
  overflow-x: auto;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  backdrop-filter: blur(10px);
  padding: 22px 20px;
}
.tarifs-table {
  width: 100%;
  border-collapse: collapse;
  min-width: 720px;
}
.tarifs-table thead th {
  padding: 18px 16px;
  text-align: center;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 0.95rem;
  color: var(--text);
  border-bottom: 1px solid var(--border);
}
.tarifs-table thead th:first-child {
  text-align: left;
  color: var(--text-muted);
  font-weight: 600;
  font-size: 0.82rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.tarifs-table-price {
  display: block;
  margin-top: 4px;
  font-size: 0.78rem;
  color: var(--purple-light);
  font-weight: 600;
}
.tarifs-table tbody tr {
  transition: background var(--transition);
}
.tarifs-table tbody tr:hover {
  background: var(--bg-card-hover);
}
.tarifs-table tbody th {
  padding: 14px 16px;
  text-align: left;
  font-weight: 500;
  color: var(--text-muted);
  font-size: 0.88rem;
  border-bottom: 1px solid rgba(88, 101, 242, 0.08);
}
.tarifs-table tbody td {
  padding: 14px 16px;
  text-align: center;
  font-size: 0.9rem;
  color: var(--text);
  border-bottom: 1px solid rgba(88, 101, 242, 0.08);
}
.tarifs-table tbody tr:last-child th,
.tarifs-table tbody tr:last-child td { border-bottom: none; }
.tarifs-table-featured {
  background: rgba(139, 92, 246, 0.06);
  color: var(--purple-light) !important;
  font-weight: 600;
}
.tarifs-table thead th.tarifs-table-featured {
  background: linear-gradient(180deg, rgba(139, 92, 246, 0.15), rgba(139, 92, 246, 0.05));
  border-radius: var(--radius-sm) var(--radius-sm) 0 0;
}

/* — Indicateurs oui / non / boost du comparatif —————— */
/* Oui : pastille teal douce avec ✓ lisible */
.tarifs-table .tt-yes {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: rgba(109, 207, 176, 0.14);
  color: var(--accent-teal);
  font-weight: 700;
  font-size: 0.82rem;
  line-height: 1;
  vertical-align: -2px;
}
/* Sur colonne featured : la pastille passe en violet brand pour ressortir */
.tarifs-table-featured .tt-yes {
  background: rgba(139, 92, 246, 0.16);
  color: var(--purple-light);
}
/* Non : tiret très discret, l'œil va vers les ✓ */
/* WCAG 2.2 AA (1.4.11, élément UI non-textuel ≥ 3:1) : opacity .45 donnait ≈1.97:1
   (quasi invisible). Remontée à .7 → effectif #635d80 sur --bg = 3.33:1.
   Reste nettement plus discret que les ✓ teal/violet (pleine opacité, vifs). */
.tarifs-table .tt-no {
  color: var(--text-muted);
  opacity: 0.7;
  font-size: 0.85rem;
}
/* Boost ×1,2 : petit badge teal/violet */
.tarifs-table .tt-boost {
  display: inline-flex;
  align-items: center;
  padding: 3px 9px;
  border-radius: 999px;
  background: rgba(109, 207, 176, 0.12);
  border: 1px solid rgba(109, 207, 176, 0.35);
  color: var(--accent-teal);
  font-weight: 700;
  font-size: 0.78rem;
  line-height: 1;
  letter-spacing: 0.01em;
}
.tarifs-table .tt-boost.tt-boost-featured {
  background: rgba(139, 92, 246, 0.12);
  border-color: rgba(139, 92, 246, 0.4);
  color: var(--purple-light);
}

/* — FAQ ————————————————————————————————————— */
.tarifs-faq-section {
  position: relative;
  z-index: 1;
  padding: 80px 0;
}
.tarifs-faq {
  max-width: 800px;
  margin: 0 auto;
  display: grid;
  gap: 12px;
}
.tarifs-faq-item {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 4px 24px;
  transition: var(--transition);
  backdrop-filter: blur(10px);
}
.tarifs-faq-item[open] {
  background: var(--bg-card-hover);
  border-color: var(--border-hover);
}
.tarifs-faq-item summary {
  cursor: pointer;
  padding: 18px 0;
  font-family: var(--font-display);
  font-size: 1.02rem;
  font-weight: 700;
  color: var(--text);
  list-style: none;
  position: relative;
  padding-right: 32px;
}
.tarifs-faq-item summary::-webkit-details-marker { display: none; }
.tarifs-faq-item summary::after {
  content: '+';
  position: absolute;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  font-size: 1.4rem;
  color: var(--purple-light);
  font-weight: 400;
  transition: transform var(--transition);
}
.tarifs-faq-item[open] summary::after {
  content: '−';
}
.tarifs-faq-item p {
  padding: 0 0 18px;
  color: var(--text-muted);
  line-height: 1.7;
  font-size: 0.94rem;
}

/* — CTA final ——————————————————————————————— */
.tarifs-cta-section {
  position: relative;
  z-index: 1;
  padding: 80px 0 120px;
}
.tarifs-final-cta {
  position: relative;
  text-align: center;
  padding: 80px 32px;
  background: linear-gradient(180deg, rgba(88, 101, 242, 0.08), rgba(139, 92, 246, 0.05));
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  overflow: hidden;
}
.tarifs-final-cta-glow {
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 50% 0%, rgba(139, 92, 246, 0.25), transparent 60%);
  pointer-events: none;
}
.tarifs-final-cta > *:not(.tarifs-final-cta-glow) { position: relative; z-index: 1; }
.tarifs-final-cta .section-title {
  margin-bottom: 16px;
}

/* — Responsive ————————————————————————————— */
@media (max-width: 1024px) {
  .tarifs-grid-3 { grid-template-columns: repeat(2, 1fr); }
  .tarif-card { padding: 28px 24px; }
  .tarifs-free-modules-grid { grid-template-columns: repeat(2, 1fr); }
  /* Les 3 plans serveur restent sur une ligne (features courtes) ; on retire
     juste le scale du héros pour éviter tout débordement en cellule étroite. */
  .tarifs-grid-server { grid-template-columns: repeat(3, 1fr); gap: 16px; padding-top: 0; }
  .tarif-card-hero { transform: none; }
  .tarif-card-hero:hover { transform: translateY(-4px); }
}
@media (max-width: 768px) {
  .tarifs-hero { padding: 110px 0 40px; }
  .tarifs-section,
  .tarifs-compare-section,
  .tarifs-faq-section { padding: 60px 0; }
  .tarifs-cta-section { padding: 60px 0 80px; }
  .tarifs-grid-3 { grid-template-columns: 1fr; }
  .tarifs-free-modules-grid { grid-template-columns: 1fr; }
  .tarif-card-badge { top: 12px; right: 12px; font-size: 0.68rem; padding: 5px 10px; }
  .tarifs-final-cta { padding: 60px 24px; }
  /* Bandeau Free Serveur → empilé en mobile, CTA pleine largeur */
  .tarif-server-free {
    flex-direction: column;
    align-items: stretch;
    gap: 16px;
  }
  .tarif-server-free-cta { width: 100%; }
  /* Le héros ne doit pas être agrandi en colonne unique (sinon il déborde) */
  .tarifs-grid-server { padding-top: 0; }
  .tarif-card-hero { transform: none; }
  .tarif-card-hero:hover { transform: translateY(-4px); }
}
@media (max-width: 640px) {
  .tarifs-hero-badge { font-size: 0.78rem; padding: 6px 12px; }
  .tarif-card { padding: 24px 20px; }
  .tarif-price-amount { font-size: 2rem; }
  .tarif-name { font-size: 1.4rem; }

  /* ── TAR-1 : comparatifs en cartes empilées sur mobile ──
     Sur ≤640px les colonnes payantes étaient coupées hors-champ dans le
     wrapper overflow-x:auto (valeurs tronquées, aucun indice de scroll).
     On transforme la table en cartes verticales : chaque ligne devient un
     bloc « Fonctionnalité » + une valeur par palier, étiquetée via ::before
     (les libellés de palier sont positionnels — nth-child fixe par table).
     Tablette/PC (>640px) gardent les 4 colonnes intactes. */
  .tarifs-table-wrap {
    overflow-x: visible;        /* plus de scroll horizontal masqué */
    padding: 16px 14px;
  }
  .tarifs-table,
  .tarifs-table thead,
  .tarifs-table tbody,
  .tarifs-table tr,
  .tarifs-table th,
  .tarifs-table td {
    display: block;
    min-width: 0;
    width: auto;
  }
  /* On masque la ligne d'en-têtes de colonnes (les paliers passent en ::before) */
  .tarifs-table thead { position: absolute; left: -9999px; top: -9999px; }

  .tarifs-table tbody tr {
    border: 1px solid var(--border);
    border-radius: var(--radius-md, 12px);
    background: rgba(255, 255, 255, 0.02);
    padding: 6px 14px 10px;
    margin-bottom: 14px;
  }
  .tarifs-table tbody tr:last-child { margin-bottom: 0; }

  /* Intitulé de la ligne = titre de la carte */
  .tarifs-table tbody th[scope="row"] {
    padding: 10px 0 8px;
    font-size: 0.95rem;
    font-weight: 700;
    color: var(--text);
    border-bottom: 1px solid var(--border);
    text-align: left;
  }
  /* Chaque cellule = ligne « Palier ……… valeur » */
  .tarifs-table tbody td {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    text-align: right;
    border-bottom: 1px solid rgba(88, 101, 242, 0.08);
    font-size: 0.9rem;
  }
  .tarifs-table tbody tr td:last-child { border-bottom: none; }
  /* La pastille featured ne doit pas remplir toute la largeur de la carte */
  .tarifs-table tbody td.tarifs-table-featured {
    background: transparent;
    border-radius: 0;
  }
  /* Libellé du palier injecté à gauche de chaque valeur */
  .tarifs-table tbody td::before {
    content: attr(data-tier);
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    text-align: left;
    flex: 0 0 auto;
  }
  /* Libellés positionnels — table perso : Free / Allié / Compagnon */
  .tarifs-table--perso tbody td:nth-of-type(1)::before { content: "Free"; }
  .tarifs-table--perso tbody td:nth-of-type(2)::before { content: "Allié"; }
  .tarifs-table--perso tbody td:nth-of-type(3)::before { content: "Compagnon"; }
  /* Libellés positionnels — table serveur : Free / Essentiel / IA / Complet */
  .tarifs-table--server tbody td:nth-of-type(1)::before { content: "Free"; }
  .tarifs-table--server tbody td:nth-of-type(2)::before { content: "Essentiel"; }
  .tarifs-table--server tbody td:nth-of-type(3)::before { content: "IA"; }
  .tarifs-table--server tbody td:nth-of-type(4)::before { content: "Complet"; }
  /* Featured = palier mis en avant : libellé en violet brand */
  .tarifs-table tbody td.tarifs-table-featured::before { color: var(--purple-light); }
}

/* ═══════════════════════════════════════
   §3.8 — PAGE HERO (branding / equipe / candidature)
═══════════════════════════════════════ */
.page-hero {
  padding: 120px 28px 56px;
  text-align: center;
  position: relative;
  z-index: 1;
}
.page-hero .section-title { font-size: clamp(2.3rem, 5vw, 3.4rem); }
.page-hero .section-subtitle { margin-top: 4px; }

/* ═══════════════════════════════════════
   §3.8 — PAGE BRANDING
═══════════════════════════════════════ */
.brand-page {
  display: flex;
  flex-direction: column;
  gap: 24px;
  padding-bottom: 32px;
}
.brand-section {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 36px;
}
.brand-h2 {
  font-family: var(--font-display);
  font-size: 1.5rem;
  font-weight: 800;
  color: var(--text);
  margin-bottom: 6px;
}
.brand-lead {
  color: var(--text-muted);
  font-size: 0.95rem;
  line-height: 1.7;
  margin-bottom: 24px;
  max-width: 640px;
}
.brand-lead strong { color: var(--text); }
.brand-tag {
  display: inline-block;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-dim);
}
.brand-ok { color: var(--accent-teal); }
.brand-bad { color: #f0708a; }
.brand-logo-grid,
.brand-wordmark-row,
.brand-type-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 18px;
}
.brand-logo-card,
.brand-wordmark-card,
.brand-type-card {
  border-radius: var(--radius);
  border: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
}
.brand-logo-card { padding: 36px 20px 20px; }
.brand-logo-card img { width: 96px; height: 96px; border-radius: 24%; }
.brand-logo-dark { background: #211e32; }
.brand-logo-dark img {
  filter: drop-shadow(0 0 7px rgba(236, 232, 255, 0.30))
          drop-shadow(0 0 18px rgba(139, 92, 246, 0.22));
}
.brand-logo-light { background: #ece8ff; }
.brand-downloads {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 22px;
}
.brand-wordmark-card { padding: 32px 20px; background: var(--bg); }
.brand-wordmark {
  font-family: var(--font-display);
  font-size: 1.7rem;
  font-weight: 800;
  color: var(--text);
}
.brand-wordmark em {
  font-style: normal;
  background: var(--gradient-text);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.brand-wordmark-bad {
  color: var(--text-dim);
  text-decoration: line-through;
  text-decoration-color: #f0708a;
}
.brand-swatches {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 14px;
}
.brand-swatch {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--bg);
  padding: 0;
  overflow: hidden;
  cursor: pointer;
  text-align: left;
  transition: var(--transition);
  font-family: var(--font-body);
}
.brand-swatch:hover { border-color: var(--border-hover); transform: translateY(-3px); }
.brand-swatch:focus-visible { outline: 2px solid var(--purple); outline-offset: 2px; }
.brand-swatch-chip {
  display: block;
  height: 78px;
  background: var(--sw);
  border-bottom: 1px solid var(--border);
}
.brand-swatch-name {
  display: block;
  font-weight: 600;
  color: var(--text);
  font-size: 0.9rem;
  padding: 12px 14px 2px;
}
.brand-swatch-hex {
  display: block;
  font-size: 0.8rem;
  color: var(--text-muted);
  padding: 0 14px 12px;
  font-variant-numeric: tabular-nums;
}
.brand-swatch.copied .brand-swatch-hex { color: var(--accent-teal); }
.brand-swatch.copied .brand-swatch-hex::after { content: " · copié ✓"; }
.brand-type-card { padding: 30px 24px; background: var(--bg); align-items: flex-start; }
.brand-type-sample { display: block; font-size: 2.4rem; color: var(--text); }
.brand-type-display { font-family: var(--font-display); font-weight: 800; }
.brand-type-body { font-family: var(--font-body); font-weight: 600; }
.brand-type-meta { font-size: 0.85rem; color: var(--text-muted); }
.brand-rules { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.brand-rule-col { border: 1px solid var(--border); border-radius: var(--radius); padding: 24px; }
.brand-rule-col h3 { font-family: var(--font-display); font-size: 1.05rem; margin-bottom: 14px; }
.brand-rule-do { background: rgba(109, 207, 176, 0.06); }
.brand-rule-do h3 { color: var(--accent-teal); }
.brand-rule-dont { background: rgba(240, 112, 138, 0.06); }
.brand-rule-dont h3 { color: #f0708a; }
.brand-rule-col ul { list-style: none; display: flex; flex-direction: column; gap: 10px; }
.brand-rule-col li {
  font-size: 0.9rem;
  color: var(--text-muted);
  line-height: 1.6;
  padding-left: 16px;
  position: relative;
}
.brand-rule-col li strong { color: var(--text); }
.brand-rule-col li::before {
  content: "";
  position: absolute;
  left: 0; top: 9px;
  width: 5px; height: 5px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.55;
}

/* Famille de logos — logo complet, mascotte, signature KVX */
.brand-h3 {
  font-family: var(--font-display);
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--text);
  margin: 30px 0 4px;
}
.brand-h2 + .brand-lead + .brand-h3 { margin-top: 18px; }
.brand-sub {
  color: var(--text-muted);
  font-size: 0.9rem;
  line-height: 1.65;
  margin-bottom: 16px;
  max-width: 620px;
}
.brand-logo-card img.brand-img-free {
  width: auto;
  height: auto;
  max-width: 86%;
  max-height: 118px;
  border-radius: 0;
  object-fit: contain;
}
.brand-logo-card img.brand-img-mascot { max-height: 144px; }

/* ═══════════════════════════════════════
   §3.8 — PAGE EQUIPE — utilitaires partagés
   L'organigramme et ses styles propres (.org-*) vivent dans equipe.html.
   equipe.js réutilise team-state-emoji, team-spinner et l'anim team-card-in.
═══════════════════════════════════════ */
.team-state-emoji { font-size: 2rem; display: block; margin-bottom: 10px; }
.team-spinner {
  width: 34px; height: 34px;
  margin: 0 auto 16px;
  border-radius: 50%;
  border: 3px solid var(--border);
  border-top-color: var(--purple);
  animation: team-spin 0.8s linear infinite;
}
@keyframes team-spin { to { transform: rotate(360deg); } }
@keyframes team-card-in { from { opacity: 0; } to { opacity: 1; } }

/* ═══════════════════════════════════════
   §3.8 — PAGE CANDIDATURE
═══════════════════════════════════════ */
.recruit-wrap {
  display: grid;
  grid-template-columns: 300px 1fr;
  gap: 24px;
  align-items: start;
  padding-bottom: 40px;
}
.recruit-aside {
  display: flex;
  flex-direction: column;
  gap: 18px;
  position: sticky;
  top: 96px;
}
.recruit-aside-block {
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--bg-card);
  padding: 22px;
}
.recruit-aside-block h3 {
  font-family: var(--font-display);
  font-size: 0.98rem;
  color: var(--text);
  margin-bottom: 12px;
}
.recruit-aside-block ul,
.recruit-aside-block ol {
  padding-left: 18px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.recruit-aside-block li {
  font-size: 0.85rem;
  color: var(--text-muted);
  line-height: 1.55;
  overflow-wrap: anywhere; /* un mot long (URL…) gonflait l'aside au-delà de 320px */
}
.recruit-wrap > * { min-width: 0; }
.recruit-aside-note {
  font-size: 0.78rem;
  color: var(--text-dim);
  line-height: 1.6;
  padding: 0 4px;
}
.recruit-card {
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--bg-card);
  padding: 32px;
}
.recruit-hidden { display: none; }
.recruit-state { text-align: center; padding: 60px 20px; color: var(--text-muted); }
.recruit-card-icon { font-size: 2rem; margin-bottom: 12px; }
.recruit-success-icon {
  width: 60px; height: 60px;
  margin: 0 auto 16px;
  border-radius: 50%;
  background: rgba(109, 207, 176, 0.14);
  border: 1px solid rgba(109, 207, 176, 0.4);
  color: var(--accent-teal);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.8rem;
}
#recruitLogin, #recruitSuccess { text-align: center; }
#recruitLogin h2, #recruitSuccess h2 {
  font-family: var(--font-display);
  font-size: 1.4rem;
  color: var(--text);
  margin-bottom: 8px;
}
#recruitLogin p, #recruitSuccess p {
  color: var(--text-muted);
  font-size: 0.92rem;
  line-height: 1.65;
  max-width: 430px;
  margin: 0 auto 22px;
}
.recruit-discord-btn { display: inline-flex; align-items: center; gap: 10px; }
@media (max-width: 359px) {
  /* « Se connecter avec Discord » (nowrap du .btn-primary) débordait à 320px */
  .recruit-card { padding: 22px 16px; }
  .recruit-discord-btn { white-space: normal; text-align: center; justify-content: center; width: 100%; }
}
/* .recruit-identity = carte d'identité du candidat (avatar + nom) — fusion
   des 2 anciennes définitions (lignes 4227 + 4338 originales). */
.recruit-identity {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 16px;
  margin-bottom: 24px;
  background: rgba(255, 255, 255, 0.025);
  border: 1px solid var(--border);
  border-radius: 14px;
}
.recruit-identity img {
  width: 48px; height: 48px;
  border-radius: 50%;
  border: 2px solid var(--border);
  object-fit: cover;
}
.recruit-identity-text { display: flex; flex-direction: column; gap: 4px; }
.recruit-identity-name,
.recruit-identity-text strong { display: block; font-weight: 700; color: var(--text); font-size: 1.05rem; }
.recruit-identity-sub,
.recruit-identity-text span { display: block; font-size: 0.88rem; color: var(--text-dim); }
.recruit-field { margin-bottom: 20px; }
.recruit-field label {
  display: block;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 8px;
}
.recruit-req { color: var(--purple-light); }
.recruit-field input,
.recruit-field textarea {
  width: 100%;
  padding: 12px 14px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--border);
  background: var(--bg);
  color: var(--text);
  font-family: var(--font-body);
  font-size: 0.9rem;
  outline: none;
  transition: var(--transition);
}
.recruit-field textarea { resize: vertical; min-height: 58px; line-height: 1.6; }
.recruit-field input:focus,
.recruit-field textarea:focus {
  border-color: var(--purple);
  box-shadow: 0 0 0 3px rgba(88, 101, 242, 0.15);
}
.recruit-hint { display: block; font-size: 0.76rem; color: var(--text-dim); margin-top: 6px; }
.recruit-error {
  background: rgba(240, 112, 138, 0.1);
  border: 1px solid rgba(240, 112, 138, 0.35);
  color: #f5a3b3;
  font-size: 0.85rem;
  border-radius: var(--radius-sm);
  padding: 10px 14px;
  margin-bottom: 16px;
}
.recruit-submit { width: 100%; justify-content: center; text-align: center; }
.recruit-submit[disabled] { opacity: 0.6; cursor: not-allowed; }
.recruit-consent {
  font-size: 0.76rem;
  color: var(--text-dim);
  text-align: center;
  margin-top: 14px;
  line-height: 1.6;
}
.recruit-consent a { color: var(--purple-light); }

@media (max-width: 860px) {
  .recruit-wrap { grid-template-columns: 1fr; }
  .recruit-aside { position: static; }
}
@media (max-width: 640px) {
  .page-hero { padding: 100px 20px 44px; }
  .brand-section { padding: 26px 20px; }
  .brand-rules { grid-template-columns: 1fr; }
  .brand-type-sample { font-size: 2rem; }
  .brand-logo-card img.brand-img-mascot { max-height: 116px; }
  .recruit-card { padding: 24px 20px; }
}


/* ═══════════════════════════════════════════════════════════════════════════
   POST-AUDIT FIX — classes utilisées par tarifs.html / candidature.html
   .recruit-identity* a été fusionné dans la section CANDIDATURE plus haut
   le 2026-05-27 (suppression du doublon de définition).
   ═══════════════════════════════════════════════════════════════════════════ */

/* tarifs.html — section gratuite full-width + carte large pro */
.tarifs-section-free-modules {
  margin-top: 36px;
  padding: 28px;
  background: linear-gradient(180deg, rgba(88, 101, 242, 0.05), rgba(255, 255, 255, 0.015));
  border: 1px solid rgba(255, 255, 255, 0.06);
  border-radius: 18px;
}
/* — Section serveur : bandeau Free compact + héros premium —————————————
   Scopé pour ne PAS impacter les cartes perso (#pour-toi). */

/* Bandeau Free Serveur — secondaire, horizontal, discret */
.tarif-server-free {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  max-width: 820px;
  margin: 0 auto 28px;
  padding: 16px 20px;
  background: linear-gradient(180deg, rgba(88, 101, 242, 0.06), rgba(255, 255, 255, 0.015));
  border: 1px solid var(--border);
  border-radius: 16px;
  transition: border-color var(--transition), background var(--transition);
}
.tarif-server-free:hover {
  border-color: var(--border-hover);
  background: linear-gradient(180deg, rgba(88, 101, 242, 0.09), rgba(255, 255, 255, 0.02));
}
.tarif-server-free-main {
  display: flex;
  align-items: center;
  gap: 16px;
  min-width: 0;
}
.tarif-server-free-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  font-size: 1.35rem;
  color: #c4bce0;
  background: rgba(141, 132, 176, 0.10);
  border: 1px solid var(--border);
  border-radius: 12px;
}
.tarif-server-free-text { min-width: 0; }
.tarif-server-free-head {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 3px;
}
.tarif-server-free-name {
  font-family: var(--font-display);
  font-size: 1.15rem;
  font-weight: 800;
  color: var(--text);
}
.tarif-server-free-price {
  font-family: var(--font-display);
  font-size: 1.15rem;
  font-weight: 800;
  background: var(--gradient-text);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  letter-spacing: -0.02em;
}
.tarif-server-free-cycle {
  font-size: 0.78rem;
  color: var(--text-dim);
}
.tarif-server-free-desc {
  font-size: 0.86rem;
  line-height: 1.45;
  color: var(--text-muted);
}
.tarif-server-free-desc code {
  font-size: 0.82em;
  color: var(--cyan);
  background: rgba(96, 165, 250, 0.10);
  padding: 1px 5px;
  border-radius: 5px;
}
.tarif-server-free-cta {
  flex-shrink: 0;
  width: auto;
  white-space: nowrap;
  padding: 10px 20px;
  font-size: 0.88rem;
}

/* Trois plans serveur : un poil plus de respiration, le héros domine */
.tarifs-grid-server {
  align-items: stretch;
  padding-top: 18px; /* laisse la place au scale du héros */
}

/* Pastilles ✓ un peu plus soignées dans la section serveur */
#pour-serveur .tarif-check {
  background: linear-gradient(135deg, rgba(109, 207, 176, 0.22), rgba(96, 165, 250, 0.14));
  color: var(--accent-teal);
  box-shadow: inset 0 0 0 1px rgba(109, 207, 176, 0.18);
}
#pour-serveur .tarif-features li { padding-top: 9px; padding-bottom: 9px; }

/* Héros « Pack Tout » — mis en avant nettement */
.tarif-card-hero {
  transform: scale(1.04);
  z-index: 2;
  border-color: rgba(139, 92, 246, 0.7);
  box-shadow: 0 0 60px rgba(139, 92, 246, 0.22), 0 24px 60px -20px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.07);
}
.tarif-card-hero::after {
  content: '';
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  padding: 1px;
  background: linear-gradient(135deg, rgba(139, 92, 246, 0.6), rgba(96, 165, 250, 0.3) 50%, rgba(139, 92, 246, 0.55));
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  pointer-events: none;
  opacity: 0.9;
}
.tarif-card-hero:hover {
  transform: scale(1.04) translateY(-4px);
  border-color: rgba(139, 92, 246, 0.9);
  box-shadow: 0 0 75px rgba(139, 92, 246, 0.32), 0 30px 70px -20px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}

/* Badge « Meilleure valeur » plus chic */
.tarif-card-badge-hero {
  background: linear-gradient(135deg, #8B5CF6, #5865F2);
  box-shadow: 0 6px 20px rgba(139, 92, 246, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.25);
  border: 1px solid rgba(255, 255, 255, 0.14);
}

/* Tag d'économie sous le prix du héros (V5 — sa propre ligne, aligné à gauche) */
.tarif-price-save {
  align-self: flex-start;
  margin-left: 0;
  margin-top: 8px;
  padding: 4px 10px;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.01em;
  color: var(--accent-teal);
  background: rgba(109, 207, 176, 0.12);
  border: 1px solid rgba(109, 207, 176, 0.28);
  border-radius: 999px;
  white-space: nowrap;
}

@media (prefers-reduced-motion: reduce) {
  .tarif-card-hero,
  .tarif-card-hero:hover { transition: none; }
}

/* candidature.html — wrapper main */
.recruit-main {
  max-width: 920px;
  margin: 0 auto;
  padding: 32px 24px;
}

/* (Bouton « Partager » retiré — fonctionnalité jugée peu utile, F30.) */

/* ═══════════════════════════════════════════════════════════════════
   PREMIUM (/premium) — accents emoji tasteful (F141)
   Cohérent avec /presentation : emoji sur en-têtes de section + à côté
   du nom de chaque plan (accolé à l'icône). N'altère AUCUNE checklist,
   ni les prix, ni les CTA. Scoped pour ne pas toucher .section-label global.
═══════════════════════════════════════════════════════════════════ */

/* — Accent emoji des en-têtes de section (devant le label cyan) — */
.tarifs-label-emoji {
  font-size: 0.95rem;
  line-height: 1;
  margin-right: 1px;
  filter: saturate(1.12);
  -webkit-user-select: none;
  user-select: none;
}

/* — Emoji à côté du nom de plan (pattern SVG + emoji de /presentation) — */
.tarif-name-emoji {
  display: inline-block;
  font-size: 1.15rem;
  line-height: 1;
  margin-left: 9px;
  vertical-align: 1px;
  filter: saturate(1.12) drop-shadow(0 2px 8px rgba(139, 92, 246, 0.22));
  transition: transform var(--transition);
  -webkit-user-select: none;
  user-select: none;
}
/* Micro-hover : l'emoji répond quand on survole la carte (intention UX :
   feedback de focus sur le plan ciblé) */
.tarif-card:hover .tarif-name-emoji {
  transform: scale(1.14) rotate(-4deg);
}
/* Variante bandeau Free serveur (plus discret, aligné baseline du titre) */
.tarif-server-free-name .tarif-name-emoji {
  font-size: 1rem;
  margin-left: 7px;
  vertical-align: 0;
}
.tarif-server-free:hover .tarif-name-emoji {
  transform: scale(1.12) rotate(-4deg);
}

@media (prefers-reduced-motion: reduce) {
  .tarif-card:hover .tarif-name-emoji,
  .tarif-server-free:hover .tarif-name-emoji { transform: none; }
}

/* ═══════════════════════════════════════
   DOC v2 — refonte façon app de documentation (2026-06-12)
   Sidebar groupée + recherche, mode « une section = une page »,
   breadcrumb, TOC droite, pagination précédent/suivant, callouts,
   figures de captures. S'appuie sur les styles wiki-* historiques.
═══════════════════════════════════════ */
.wiki-layout {
  grid-template-columns: 250px minmax(0, 1fr) 190px;
  max-width: 1340px;
  gap: 40px;
}
/* Recherche sidebar */
.doc-search { position: relative; margin-bottom: 6px; }
.doc-search input {
  width: 100%;
  padding: 9px 12px 9px 34px;
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: 10px;
  color: var(--text);
  font-size: 0.85rem;
  font-family: var(--font-body);
  transition: border-color var(--transition);
}
.doc-search input::placeholder { color: var(--text-dim); }
/* anneau 2px : la seule bordure 1px était un indicateur de focus trop faible */
.doc-search input:focus { outline: none; border-color: var(--purple); box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.45); }
.doc-search svg {
  position: absolute; left: 11px; top: 50%; transform: translateY(-50%);
  width: 15px; height: 15px; color: var(--text-dim); pointer-events: none;
}
/* Groupes de navigation */
.doc-group {
  list-style: none;
  font-size: 0.66rem; font-weight: 800;
  letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--text-dim);
  margin: 18px 0 6px; padding: 0 10px;
}
.wiki-nav li.doc-hidden { display: none; }
/* Mode page : une seule section visible — SCOPÉ .doc-app (docs.html uniquement,
   les pages légales partagent .wiki-content et doivent rester visibles) */
.wiki-content.doc-app > section { display: none; }
.wiki-content.doc-app > section.doc-active { display: block; animation: doc-in 0.3s ease; }
@keyframes doc-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
/* Breadcrumb */
.doc-crumb {
  display: flex; align-items: center; gap: 8px;
  font-size: 0.82rem; color: var(--text-dim); margin-bottom: 20px;
}
/* padding + marge négative = zone tactile ~31px sans bouger la mise en page */
.doc-crumb a { color: var(--text-muted); transition: color var(--transition); padding: 5px 2px; margin: -5px -2px; }
.doc-crumb a:hover { color: var(--purple-light); }
.doc-crumb .sep { opacity: 0.5; }
.doc-crumb .cur { color: var(--text); font-weight: 600; }
/* TOC droite « Sur cette page » */
.doc-toc { position: sticky; top: 100px; font-size: 0.82rem; }
.doc-toc-title {
  font-size: 0.66rem; font-weight: 800; letter-spacing: 0.12em;
  text-transform: uppercase; color: var(--text-dim); margin-bottom: 10px;
}
.doc-toc ul { list-style: none; margin: 0; padding: 0; border-left: 1px solid var(--border); }
.doc-toc a {
  display: block; padding: 5px 0 5px 14px;
  color: var(--text-muted); border-left: 2px solid transparent;
  margin-left: -1px; line-height: 1.4;
  transition: color var(--transition), border-color var(--transition);
}
.doc-toc a:hover { color: var(--text); }
.doc-toc a.active { color: var(--purple-light); border-left-color: var(--purple-light); }
/* Pagination bas de page */
.doc-pager { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 46px; }
.doc-pager a {
  display: flex; flex-direction: column; gap: 4px;
  padding: 16px 18px; border: 1px solid var(--border);
  border-radius: 14px; background: var(--bg-card);
  transition: border-color var(--transition), transform var(--transition);
}
.doc-pager a:hover { border-color: rgba(139, 92, 246, 0.4); transform: translateY(-2px); }
.doc-pager .lbl { font-size: 0.7rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-dim); }
.doc-pager .ttl { font-family: var(--font-display); font-weight: 700; color: var(--text); font-size: 0.95rem; }
.doc-pager a.next { text-align: right; grid-column: 2; }
.doc-pager a.prev { grid-column: 1; }
/* Figures de captures (mockups Discord) */
.doc-fig { margin: 24px 0; }
.doc-fig img {
  display: block; width: 100%; height: auto;
  border-radius: 12px; border: 1px solid var(--border);
  box-shadow: 0 18px 50px -28px rgba(0, 0, 0, 0.85);
}
.doc-fig figcaption { margin-top: 9px; font-size: 0.8rem; color: var(--text-dim); text-align: center; }
/* Responsive : la TOC disparaît, puis la sidebar passe en barre horizontale */
@media (max-width: 1180px) {
  .wiki-layout { grid-template-columns: 250px minmax(0, 1fr); }
  .doc-toc { display: none; }
}
@media (max-width: 920px) {
  .wiki-layout { grid-template-columns: minmax(0, 1fr); gap: 20px; padding-top: 90px; }
  /* Piège grid min-width:auto : sans min-width:0, la rangée de pills .wiki-nav
     (1575px sur la doc) gonfle la colonne au lieu de scroller → débordement
     horizontal de toute la page sur mobile (doc + pages légales). */
  .wiki-sidebar, .wiki-content { min-width: 0; max-width: 100%; }
  .wiki-sidebar { position: relative; top: 0; }
  .wiki-nav { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 10px; -webkit-overflow-scrolling: touch; }
  .wiki-nav li { margin-bottom: 0; flex: none; }
  .wiki-nav a { white-space: nowrap; border: 1px solid var(--border); border-radius: 999px; padding: 8px 14px; }
  .wiki-nav a.active { border-color: rgba(139, 92, 246, 0.5); }
  .doc-group { display: none; }
  .doc-pager a.next { grid-column: auto; }
  .doc-pager { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .wiki-content.doc-app > section.doc-active { animation: none; }
}
/* Galerie de captures (section Catégories de la doc) */
.doc-fig-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: start; }
.doc-fig-grid .doc-fig { margin: 0; }
@media (max-width: 720px) { .doc-fig-grid { grid-template-columns: 1fr; } }

/* ═══════════════════════════════════════════════════════════════
   PAGES LÉGALES — Polish + structure (F346, 2026-06-14)
   En-tête homogène · sommaire ancré · ancres de section ·
   encadrés « points clés » · retour en haut. 100 % additif :
   s'appuie sur les .wiki-* + variables :root, ne casse rien.
═══════════════════════════════════════════════════════════════ */

/* Layout 2 colonnes propre pour les pages légales — neutralise la
   3ᵉ colonne (190px) vide héritée de la grille doc v2 (.wiki-layout
   global ligne ~4847). Scopé : pages légales ET desktop uniquement
   (≥921px) pour ne pas écraser le passage 1 colonne mobile (max-width:920). */
@media (min-width: 921px) {
  .wiki-layout.wiki-layout-legal {
    grid-template-columns: 260px minmax(0, 1fr);
    max-width: 1180px;
  }
}

/* — En-tête de page : badge MAJ + intro -------------------------- */
.wiki-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  margin: -4px 0 18px;
}
.wiki-badge {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 5px 12px;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.02em;
  color: var(--purple-light);
  background: rgba(139, 92, 246, 0.08);
  border: 1px solid rgba(139, 92, 246, 0.28);
  border-radius: 999px;
  white-space: nowrap;
}
.wiki-badge::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--accent-teal);
  box-shadow: 0 0 0 3px rgba(109, 207, 176, 0.18);
  flex-shrink: 0;
}
.wiki-lead {
  font-size: 1rem;
  color: var(--text-muted);
  line-height: 1.7;
  max-width: 68ch;
  margin-bottom: 26px;
}

/* — Sommaire ancré en carte -------------------------------------- */
.wiki-toc {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 20px 22px;
  margin: 0 0 40px;
}
.wiki-toc-title {
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-dim);
  margin-bottom: 14px;
  font-family: var(--font-body);
}
.wiki-toc ol {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 2px 28px;
  counter-reset: toc;
}
.wiki-toc.is-compact ol { grid-template-columns: minmax(0, 1fr); }
.wiki-toc li { counter-increment: toc; }
.wiki-toc a {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 7px 8px;
  border-radius: var(--radius-sm);
  color: var(--text-muted);
  font-size: 0.9rem;
  line-height: 1.45;
  min-width: 0;
  overflow-wrap: anywhere;
  transition: var(--transition);
}
.wiki-toc a::before {
  content: counter(toc, decimal-leading-zero);
  font-family: var(--font-display);
  font-size: 0.72rem;
  font-weight: 700;
  color: var(--purple-light);
  opacity: 0.7;
  flex-shrink: 0;
  min-width: 1.6em;
}
.wiki-toc a:hover { color: var(--text); background: var(--bg-card-hover); }
.wiki-toc a:hover::before { opacity: 1; }

/* — Ancres de section (h2) --------------------------------------- */
.wiki-h2[id] { scroll-margin-top: 90px; }
.wiki-anchor {
  margin-left: 10px;
  font-size: 0.8em;
  font-weight: 600;
  color: var(--purple-light);
  opacity: 0;
  text-decoration: none;
  transition: opacity var(--transition);
}
.wiki-h2:hover .wiki-anchor,
.wiki-anchor:focus-visible { opacity: 0.75; }
.wiki-anchor:hover { opacity: 1; }
.wiki-anchor:focus-visible {
  outline: 2px solid var(--purple);
  outline-offset: 2px;
  border-radius: 4px;
}

/* — Encadré « points clés » -------------------------------------- */
.wiki-callout {
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-left: 3px solid var(--purple-light);
  border-radius: var(--radius-sm);
  padding: 16px 20px;
  margin: 20px 0 24px;
}
.wiki-callout.is-ok { border-left-color: var(--accent-teal); }
.wiki-callout-title {
  font-family: var(--font-display);
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--text);
  margin-bottom: 10px;
}
.wiki-callout-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 7px;
}
.wiki-callout-list li {
  position: relative;
  padding-left: 18px;
  font-size: 0.88rem;
  line-height: 1.6;
  color: var(--text-muted);
}
.wiki-callout-list li::before {
  content: "";
  position: absolute;
  left: 2px;
  top: 0.62em;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--purple-light);
}
.wiki-callout.is-ok .wiki-callout-list li::before { background: var(--accent-teal); }

/* — Retour en haut ----------------------------------------------- */
.wiki-backtop {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 30px;
  padding: 8px 14px;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--text-muted);
  background: var(--bg-card);
  border: 1px solid var(--border);
  border-radius: 999px;
  transition: var(--transition);
}
.wiki-backtop::after { content: " ↑"; }
.wiki-backtop:hover {
  color: var(--text);
  border-color: var(--border-hover);
  transform: translateY(-1px);
}

/* — Responsive --------------------------------------------------- */
/* Sommaire en 1 colonne dès que le layout passe mono-colonne (≤920) :
   évite que les libellés longs débordent leur colonne sur mobile. */
@media (max-width: 920px) {
  .wiki-toc ol { grid-template-columns: minmax(0, 1fr); }
  .wiki-toc a { padding-top: 9px; padding-bottom: 9px; }
}
@media (max-width: 768px) {
  .wiki-lead { font-size: 0.95rem; }
  /* Ancre de section visible et tactile (zone ~24px) sur tactile */
  .wiki-anchor {
    opacity: 0.5;
    padding: 6px 8px;
    margin: -6px 2px -6px 6px;
  }
}
@media (prefers-reduced-motion: reduce) {
  .wiki-backtop:hover { transform: none; }
  .wiki-anchor,
  .wiki-backtop,
  .wiki-toc a { transition: none; }
}
@media print {
  .wiki-backtop,
  .wiki-anchor { display: none !important; }
  .wiki-toc,
  .wiki-callout { background: #fff !important; border-color: #000 !important; }
  .wiki-callout { border-left-color: #000 !important; }
  .wiki-callout-title,
  .wiki-lead,
  .wiki-callout-list li,
  .wiki-toc a { color: #000 !important; }
  .wiki-badge { background: #fff !important; border-color: #000 !important; color: #000 !important; }
  .wiki-badge::before,
  .wiki-callout-list li::before,
  .wiki-toc a::before { background: #000 !important; color: #000 !important; }
}

/* ═══════════════════════════════════════════════════════════════
   QA RESPONSIVE — sweep site (F348, 2026-06-14)
   Correctifs ciblés issus de l'audit 15 pages × 7 largeurs.
   Tous scopés + en max-width (desktop ≥1025 inchangé).
═══════════════════════════════════════════════════════════════ */

/* index — section CTA finale : retire le doublon de padding latéral en mobile */
@media (max-width: 640px) {
  .cta-section { padding-left: 0; padding-right: 0; }
}

/* premium — grille plans serveur : 2 colonnes sur tablette (évite 3 col trop serrées) */
@media (max-width: 920px) and (min-width: 769px) {
  .tarifs-grid-server { grid-template-columns: repeat(2, 1fr); gap: 16px; }
  .tarifs-grid-server .tarif-card-hero { transform: none; }
  .tarifs-grid-server .tarif-card-hero:hover { transform: translateY(-4px); }
}
/* premium — badge des cartes serveur : réduit + dégage le titre sur tablette */
@media (max-width: 1024px) and (min-width: 769px) {
  .tarifs-grid-server .tarif-card-badge { top: 12px; right: 12px; font-size: 0.66rem; padding: 4px 9px; }
  .tarifs-grid-server .tarif-head { padding-top: 28px; }
}
/* premium — table comparative : réduit le min-width sur tablette étroite (moins de scroll masqué) */
@media (min-width: 641px) and (max-width: 768px) {
  .tarifs-table { min-width: 600px; }
  .tarifs-table thead th, .tarifs-table tbody th, .tarifs-table tbody td { padding-left: 10px; padding-right: 10px; }
}

/* equipe — textes libres : anti-débordement tokens longs + pill de rôle qui wrap */
.org-bio { overflow-wrap: anywhere; }
@media (max-width: 560px) {
  .org-role-pill { white-space: normal; text-align: center; max-width: calc(100% - 24px); }
}

/* candidature — carte identité : le nom Discord (injecté JS) ne déborde plus */
.recruit-identity-text { min-width: 0; }
.recruit-identity-name { overflow-wrap: anywhere; }
@media (max-width: 640px) {
  .recruit-main { padding: 24px 0; }
}

/* partenariats — padding latéral aligné sur le reste du site en mobile */
@media (max-width: 480px) {
  .pa-section { padding: 0 18px; }
  .pa-hero { padding: 0 18px; }
}
@media (max-width: 375px) {
  .pa-section { padding: 0 14px; }
  .pa-hero { padding: 0 14px; }
}
