/* ==========================================================================
   Base commune a tout le site : fond sombre, typo unique, header, footer.
   Les accents de section (violet / dore / orange) sont definis ici en
   variables, et appliques page par page. Voir brief section 4.
   ========================================================================== */

:root {
  /* Base neutre */
  --bg:            #0b0b0d;
  --bg-raised:     #131317;
  --fg:            #f2f2f4;
  --fg-muted:      #9a9aa4;
  --border:        #26262e;

  /* Accents de section */
  --accent-shop:   #4a6cf7;  /* bleu nuit electrique */
  --accent-brands: #d8c48a;  /* dore */
  --accent-presta: #f59e0b;  /* orange / ambre */

  /* Rythme */
  --gap:           1.25rem;
  --page-max:      68rem;
  --radius:        14px;

  /* Typo unique sur tout le site : Inter pour le texte, Space Grotesk en
     display. Une seule display qui couvre les deux extremes du site — sa
     graisse 300 sert la sobriete de Brands, sa 700 l'energie du Shop.
     Les deux sont chargees en variable (plage de graisses), donc les
     graisses intermediaires comme 650 restent exactes. */
  --font: "Inter", "Segoe UI", system-ui, -apple-system, Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-display: "Space Grotesk", "Inter", "Segoe UI", system-ui, Arial, sans-serif;

  /* Echelle typographique commune. Chaque page pioche dedans plutot que
     d'inventer ses tailles : le caractere vient de la graisse et de
     l'espacement des lettres, pas d'une taille differente a chaque fois. */
  --text-hero:    clamp(2.5rem, 7.5vw, 4.25rem);   /* titre d'accueil */
  --text-h1:      clamp(2.25rem, 6.5vw, 3.75rem);  /* heros de section */
  --text-h2:      clamp(1.6rem, 3.5vw, 2.25rem);   /* appels a l'action */
  --text-h3:      1.1rem;                          /* titres de carte */
  --text-lead:    clamp(1.05rem, 1rem + 0.4vw, 1.2rem);
  --text-body:    clamp(1rem, 0.96rem + 0.2vw, 1.0625rem);
  --text-small:   0.95rem;
  --text-caption: 0.85rem;
  --text-label:   0.75rem;                         /* etiquettes uppercase */

  /* Espacement des lettres des etiquettes uppercase, unifie. */
  --track-label:  0.16em;
}

/* L'identite suit le visiteur : chaque page de section pose son accent sur
   <body>, et toute la page en herite via var(--accent). Brief section 4. */
body               { --accent: var(--fg); }
body.theme-shop    { --accent: var(--accent-shop); }
body.theme-brands  { --accent: var(--accent-brands); }
body.theme-presta  { --accent: var(--accent-presta); }

*, *::before, *::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  /* Les halos decoratifs debordent volontairement du cadre ; on coupe ce
     qui depasse plutot que de creer un defilement lateral. */
  overflow-x: clip;
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--fg);
  font-family: var(--font);
  font-size: var(--text-body);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

/* Grain film tres leger sur tout le site : une texture de bruit SVG generee
   en ligne, posee au-dessus de la page a 4%. Rappelle la matiere video sans
   jamais gener la lecture. Purement decoratif. */
body::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 2000;
  pointer-events: none;
  opacity: 0.04;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E");
}

/* Les titres parlent en display ; le texte courant reste en Inter. */
h1, h2, h3 {
  line-height: 1.15;
  margin: 0;
  text-wrap: balance;
  font-family: var(--font-display);
}

p { margin: 0; text-wrap: pretty; }
ul { margin: 0; padding: 0; list-style: none; }

a { color: inherit; }

::selection {
  background: color-mix(in srgb, var(--accent, var(--fg)) 30%, transparent);
  color: var(--fg);
}

/* Le focus suit l'identite de la section : bleu sur le Shop, dore sur
   Brands, ambre sur Prestations, blanc sur les pages neutres. */
:focus-visible {
  outline: 2px solid var(--accent, var(--fg));
  outline-offset: 3px;
  border-radius: 4px;
}

/* Lisible par les lecteurs d'ecran, invisible a l'oeil. Pour les libelles
   de champs dont l'intitule est deja porte par le contexte visuel. */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.skip-link {
  position: absolute;
  left: -9999px;
  top: 0;
  padding: 0.75rem 1rem;
  background: var(--fg);
  color: var(--bg);
  z-index: 10;
}
.skip-link:focus { left: 0; }

/* ---------- Header ---------- */

.site-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--gap);
  max-width: var(--page-max);
  margin-inline: auto;
  padding: 1.5rem clamp(1.25rem, 5vw, 2.5rem);
}

.site-header__logo {
  font-family: var(--font-display);
  font-weight: 700;
  letter-spacing: 0.16em;
  font-size: 0.9rem;
  text-decoration: none;
}

.site-nav ul {
  display: flex;
  flex-wrap: wrap;
  gap: clamp(0.75rem, 2.5vw, 1.5rem);
  font-size: 0.9rem;
}

/* Le soulignement de la page courante sert de repere ; au survol, le meme
   trait apparait en gris pour dire "cliquable" sans crier. */
.site-nav a {
  text-decoration: none;
  color: var(--fg-muted);
  text-underline-offset: 6px;
  text-decoration-thickness: 2px;
  transition: color 0.15s ease;
}
.site-nav a:hover {
  color: var(--fg);
  text-decoration: underline;
  text-decoration-color: var(--border);
}

.site-nav a[aria-current="page"] {
  color: var(--fg);
  text-decoration: underline;
  text-decoration-color: var(--accent);
  text-underline-offset: 6px;
  text-decoration-thickness: 2px;
}

.site-nav__soon {
  color: #55555f;
  cursor: default;
}
.site-nav__soon small {
  font-size: 0.65em;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-left: 0.3em;
}

/* ---------- Footer ---------- */

.site-footer {
  position: relative;
  max-width: var(--page-max);
  margin: 6rem auto 0;
  padding: 2rem clamp(1.25rem, 5vw, 2.5rem) 3rem;
  color: var(--fg-muted);
  font-size: 0.9rem;
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem var(--gap);
  justify-content: space-between;
}

/* Filet du footer : un degrade qui s'efface vers la droite plutot qu'un
   trait plein — la meme ecriture que les filets d'accent des sections. */
.site-footer::before {
  content: "";
  position: absolute;
  inset: 0 clamp(1.25rem, 5vw, 2.5rem) auto;
  height: 1px;
  background: linear-gradient(90deg, var(--border) 0%, color-mix(in srgb, var(--border) 35%, transparent) 100%);
}

.site-footer a {
  color: var(--fg);
  text-underline-offset: 4px;
  text-decoration-color: color-mix(in srgb, var(--fg) 35%, transparent);
  transition: text-decoration-color 0.15s ease;
}
.site-footer a:hover { text-decoration-color: var(--accent, var(--fg)); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}
