/* ============================================================================
   tokens.css — design system de la page « FundingPips, de A à Z »

   ANCRAGE : la teinte de base (265°) est celle du navy officiel FundingPips
   (#00225a, relevé sur leur CSS rendu le 2026-08-07). Les surfaces sont
   dérivées par balayage de luminosité sur CETTE teinte — la page est donc
   parente de leur identité sans en être une imitation.

   TOUTES les valeurs de contraste ci-dessous ont été MESURÉES au navigateur
   (canvas + formule WCAG 2) avant d'être écrites ici. Aucune n'est estimée.
   Après toute modification de couleur : re-mesurer, ne pas supposer.
   ============================================================================ */

/* ---- polices auto-hébergées, licence SIL OFL embarquée dans assets/fonts/ ----
   Jamais de CDN : un lien qui pourrit casse la page, et fait fuiter le lecteur. */
@font-face {
  font-family: 'Anton';
  src: url('../assets/fonts/anton-latin-400.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212;
}
@font-face {
  font-family: 'InterVar';
  src: url('../assets/fonts/inter-var-latin.woff2') format('woff2-variations');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212;
}
/* Repli métrique : réduit le décalage de mise en page pendant le swap. */
@font-face {
  font-family: 'InterFallback';
  src: local('Segoe UI'), local('Helvetica Neue'), local('Arial');
  size-adjust: 107%;
  ascent-override: 90%;
  descent-override: 22%;
  line-gap-override: 0%;
}

:root {
  color-scheme: dark;

  /* ---- surfaces : rampe par balayage de L sur la teinte 265 de la marque ---- */
  --bg:          #020821;   /* oklch(0.145 0.055 265) */
  --bg-elev:     #07112b;   /* oklch(0.185 0.055 265) */
  --surface:     #111d38;   /* oklch(0.235 0.055 265) */
  --surface-2:   #1d2945;   /* oklch(0.285 0.055 265) */
  --surface-3:   #2a3755;   /* oklch(0.340 0.055 265) */
  --brand-navy:  #00225a;   /* LEUR navy officiel, verbatim */
  --surface-glass:      rgba(17, 29, 56, 0.62);
  /* 0.62 et non 0.42 : mesuré le 2026-08-07 sur les pixels réellement rendus, le
     film à 42 % laissait l'aura remonter jusqu'à #012679 sous la barre collante, et
     `--text-faint` n'y tenait que 4,27:1 — sous le seuil AA de 4,5. Ni axe (qui
     déclare « indécidable » sur un dégradé) ni le calcul de couches ne l'avaient vu :
     seule la lecture des pixels le montre. */
  --surface-glass-film: rgba(2, 8, 33, 0.62);
  --elevation-overlay:  rgba(255, 255, 255, 0.04);

  /* ---- texte — contrastes mesurés sur --bg ---- */
  --text:        #eef4fb;   /* 17.91:1 */
  --text-muted:  #9cacc3;   /*  8.59:1 */
  /* Remonté de #8292aa à #8898b0 le 2026-08-07. L'ancienne valeur tenait 4,74:1 sur
     `--surface-2`, donc conforme mais avec 0,24 de marge seulement — assez peu pour
     qu'un audit échantillonnant un état transitoire de révélation la voie échouer.
     La nouvelle valeur tient 5,12:1 sur ce même fond, le pire des trois. */
  --text-faint:  #8898b0;   /*  6.76:1 sur --bg · 5.82 sur --surface · 5.12 sur --surface-2 */
  --text-strong: #ffffff;   /* réservé aux titres */

  /* ---- accents ---- */
  --accent:       #3ea3ff;  /*  7.45:1 sur --bg */
  --accent-cyan:  #16daff;  /* 11.81:1 sur --bg — la signature lumineuse */
  --accent-tint:        rgba(62, 163, 255, 0.12);
  --accent-tint-strong: rgba(62, 163, 255, 0.22);

  /* ---- bouton principal : le BLANC tient 5.76 / 5.75 / 5.80 sur tout le dégradé.
     Mesuré aux deux bouts ET au milieu — un dégradé se vérifie sur son étendue,
     pas sur une seule extrémité. NE PAS éclaircir sans re-mesurer. ---- */
  --cta-from: #1c5ddc;
  --cta-to:   #0063c8;

  /* ---- sémantique ---- */
  --success: #4fc678;   /* 9.14:1 */
  --danger:  #fc6568;   /* 6.80:1 */
  --warning: #f0b13f;   /* 10.45:1 */
  --focus:   #4fc4ff;   /* 10.08:1 sur --bg — l'anneau se pose EN DEHORS du bouton
                           (outline-offset), c'est le fond qui fait référence. */

  /* ---- LA SIGNATURE DE CETTE PAGE : les quatre niveaux de fiabilité.
     Aucune page de prop firm n'affiche ça. C'est le vrai sujet du document. ---- */
  --lvl-officiel:   #4fc4ff;
  --lvl-recoupe:    #4fc678;
  --lvl-temoignage: #f0b13f;
  --lvl-contredit:  #fc6568;
  --lvl-officiel-bg:   rgba(79, 196, 255, 0.10);
  --lvl-recoupe-bg:    rgba(79, 198, 120, 0.10);
  --lvl-temoignage-bg: rgba(240, 177, 63, 0.10);
  --lvl-contredit-bg:  rgba(252, 101, 104, 0.10);

  /* ---- lignes ---- */
  --border:         rgba(255, 255, 255, 0.10);
  --border-strong:  rgba(255, 255, 255, 0.18);
  --border-control: #6f7f99;   /* bordure de CONTRÔLE : doit rester ≥ 3:1, ne pas
                                  la remplacer par --border sur un input */
  --grid-line:      rgba(255, 255, 255, 0.05);

  /* ---- typographie ---- */
  --font-display: 'Anton', 'Haettenschweiler', 'Arial Narrow Bold', sans-serif;
  --font-body: 'InterVar', 'InterFallback', system-ui, -apple-system, 'Segoe UI', sans-serif;

  --fs-hero:  clamp(2.75rem, 1.7rem + 5.2vw, 6rem);
  --fs-h2:    clamp(2rem, 1.35rem + 3.2vw, 3.5rem);
  --fs-h3:    clamp(1.35rem, 1.1rem + 1.2vw, 2rem);
  --fs-h4:    clamp(1.05rem, 0.98rem + 0.4vw, 1.25rem);
  --fs-lead:  clamp(1.0625rem, 1rem + 0.5vw, 1.3125rem);
  --fs-body:  clamp(1rem, 0.97rem + 0.16vw, 1.0938rem);
  --fs-small: 0.875rem;
  --fs-micro: 0.78rem;
  --measure: 68ch;

  /* ---- espacement — échelle COMPLÈTE (un trou fait collapser les gap à 0) ---- */
  --space-1: 0.25rem;  --space-2: 0.5rem;   --space-3: 0.75rem;
  --space-4: 1rem;     --space-5: 1.5rem;   --space-6: 2rem;
  --space-7: 3rem;     --space-8: 4rem;     --space-9: 6rem;   --space-10: 8rem;

  /* ---- rayons VARIÉS et intentionnels (un rayon uniforme partout = signal
     de page générée). Chaque valeur a un usage assigné. ---- */
  --radius-chip:  6px;    /* marqueurs de fiabilité */
  --radius-sm:    10px;   /* champs, petits boutons */
  --radius:       16px;   /* cartes de règle */
  --radius-lg:    24px;   /* panneaux d'outil */
  --radius-pill:  999px;

  --container: 1180px;
  --container-wide: 1420px;
  --nav-h: 66px;

  /* Grain procédural : casse le « banding » des dégradés sombres, qui est le
     défaut visuel n°1 d'un fond sombre dégradé. Généré en SVG dans la page —
     aucun fichier image, aucune requête réseau. */
  --grain-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.55'/%3E%3C/svg%3E");

  /* ---- ombres DIFFÉRENCIÉES par niveau d'élévation (une seule ombre globale
     aplatit la page et signe la génération automatique) ---- */
  --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.45);
  --shadow-2: 0 10px 28px rgba(0, 0, 0, 0.48);
  --shadow-3: 0 28px 70px rgba(0, 0, 0, 0.55);
  --glow-cta:       0 0 0 1px rgba(120, 180, 255, 0.28), 0 8px 26px rgba(28, 93, 220, 0.42);
  --glow-cta-hover: 0 0 0 1px rgba(150, 200, 255, 0.42), 0 12px 34px rgba(28, 93, 220, 0.55);

  /* ---- courbes ---- */
  --ease-out-expo:  cubic-bezier(0.16, 1, 0.30, 1);   /* sans dépassement : sur les chiffres */
  --ease-out-cubic: cubic-bezier(0.33, 1, 0.68, 1);
  --t-fast: 0.14s;  --t: 0.24s;  --t-slow: 0.55s;
}

/* ---- oklch : même couleur sRGB (contraste identique), + accès au gamut P3
   sur les écrans capables. Baseline Widely depuis mai 2023. ---- */
@supports (color: oklch(0 0 0)) {
  :root {
    --bg:         oklch(0.145 0.055 265);
    --bg-elev:    oklch(0.185 0.055 265);
    --surface:    oklch(0.235 0.055 265);
    --surface-2:  oklch(0.285 0.055 265);
    --surface-3:  oklch(0.340 0.055 265);
    --text:       oklch(0.965 0.012 250);
    --text-muted: oklch(0.740 0.038 258);
    --text-faint: oklch(0.675 0.040 258);   /* == #8898b0, vérifié identique au repli hex */
    --accent:      oklch(0.700 0.165 250);
    --accent-cyan: oklch(0.820 0.145 218);
    --cta-from:    oklch(0.520 0.205 262);
    --cta-to:      oklch(0.500 0.190 248);
    --success: oklch(0.740 0.155 152);
    --danger:  oklch(0.700 0.185 22);
    --warning: oklch(0.800 0.145 78);
    --focus:   oklch(0.780 0.135 235);
    --lvl-officiel:   oklch(0.780 0.135 235);
    --lvl-recoupe:    oklch(0.740 0.155 152);
    --lvl-temoignage: oklch(0.800 0.145 78);
    --lvl-contredit:  oklch(0.700 0.185 22);
    --border:        oklch(1 0 0 / 0.10);
    --border-strong: oklch(1 0 0 / 0.18);
    --grid-line:     oklch(1 0 0 / 0.05);
    --elevation-overlay: oklch(1 0 0 / 0.04);
  }
}

html { font-optical-sizing: auto; -webkit-text-size-adjust: 100%; }

/* Les blocs de préférence système (contraste, transparence, mouvement,
   couleurs forcées) ne vivent PAS ici : ils sont tous dans `preferences.css`,
   chargé en dernier. Une media query n'ajoute aucune spécificité — placée trop
   tôt dans la cascade, elle est écrasée en silence. */
