/* =====================================================================
   BASE — Fondations communes à TOUTES les pages
   ---------------------------------------------------------------------
   Ce fichier ne dessine aucune section : il pose le socle.
     1. Les @font-face (polices locales)
     2. Les variables de design (:root) — couleurs, typo, découpes
     3. Le reset et les styles des éléments HTML nus (html, body, a, h1…)
     4. La règle d'accessibilité "prefers-reduced-motion"

   ORDRE DE CHARGEMENT (important, la cascade en dépend) :
     base.css -> layout.css -> components.css -> <page>.css
   Chaque page HTML charge ces 4 niveaux dans cet ordre.

   Si tu changes une couleur ou une police, c'est ICI et nulle part
   ailleurs : tout le reste du site lit les variables de :root.
   ===================================================================== */

/* =====================================================================
   PORTFOLIO ANZIZ DAHALANI — DIRECTION ARTISTIQUE "HEIST"
   Inspiration libre : UI de jeu japonais type "voleurs fantômes"
   (aucun logo, personnage ou asset du jeu n'est utilisé — uniquement
   une grammaire visuelle originale : palette, formes, typographie).
   ---------------------------------------------------------------------
   DECISIONS DE STYLE PRINCIPALES
   ---------------------------------------------------------------------
   1. PALETTE — Noir profond dominant (--bg), blanc cassé pour le texte
      (--text-primary) et un ECARLATE signature (--red) employé EN APLATS
      (blocs pleins, bandes, fond de nav active, pastilles) et non comme
      simple filet décoratif. Aucun dégradé doux : uniquement des aplats
      francs, des dégradés à ARRETS NETS (hard stops) et des trames
      demi-teintes (halftone) — voir --halftone.

   2. FORMES — Angles vifs : --radius-lg / --radius-md sont forcés à 0 pour
      supprimer d'un coup tout arrondi "corporate" hérité. Bordures
      épaisses (3px), découpes diagonales en clip-path (coins coupés,
      parallélogrammes), bandes "déchirées" entre les sections.

   3. COLLAGE — Superposition d'éléments légèrement pivotés (-4deg à +2deg)
      et décalés, avec des OMBRES PORTEES DURES (offset, flou = 0) pour
      l'effet papier découpé / scrapbook.

   4. TYPOGRAPHIE — Barlow Condensed 700/900 (condensée, très grasse) pour
      les titres, boutons, menus et éléments visuels forts : capitales,
      interligne serré (0.92), inclinés et soulignés d'un aplat rouge.
      Atkinson Hyperlegible 400/700 pour le texte courant, les paragraphes
      et les formulaires — police dessinée pour la lisibilité, elle garde
      les contenus longs confortables malgré le graphisme chargé.
      Effet de contour (-webkit-text-stroke) et ombre dure (sans flou) sur
      les titres majeurs. Détail des @font-face en tête de fichier.

   5. MOUVEMENT — Transitions courtes (.12s à .2s) sur des courbes SECHES
      (--ease-snap / --ease-hard, pas d'ease-in-out mou), balayage diagonal
      "flash" au survol des boutons et des cartes, et apparition des
      sections au scroll (translation + rotation qui se redresse).

   6. CONTRASTE / LISIBILITE — Règle appliquée partout :
      - texte courant = blanc cassé sur noir (~17:1)
      - sur un APLAT ROUGE on n'utilise QUE du blanc cassé (~4.6:1, AA)
        ou du noir en gros caractères gras (>=24px, ~4.2:1, AA large)
      - jamais de petit texte noir sur rouge
      Les zones de texte long (paragraphes, formulaire) restent sur fond
      noir ou blanc plein, jamais sur une trame.

   7. CLIP-PATH vs OMBRE — Un clip-path rogne aussi les ombres portées.
      Chaque bloc choisit donc SOIT une découpe diagonale, SOIT une ombre
      dure décalée, jamais les deux (voir .project-card vs .card).
   ===================================================================== */

/* =====================================================================
   POLICES LOCALES (WOFF2, auto-hébergées dans /fonts)
   ---------------------------------------------------------------------
   Aucune requête vers Google Fonts : les fichiers sont servis depuis le
   projet (sous-ensemble « latin », qui couvre l'intégralité des
   caractères français : accents, ligature œ, guillemets, tiret cadratin).
   font-display:swap → le texte reste lisible avec la police de repli
   pendant le chargement, jamais de texte invisible (pas de FOIT).

   HIERARCHIE
   - Atkinson Hyperlegible 400/700 : texte courant, paragraphes,
     formulaires. Police conçue pour la lisibilité (formes de lettres
     différenciées), repli Arial.
   - Barlow Condensed 700/900 : titres, boutons, menus et éléments
     visuels forts. Condensée et très grasse, repli Impact.
   ===================================================================== */

@font-face{
  font-family:'Atkinson Hyperlegible';
  src:url('../fonts/atkinson-hyperlegible-400.woff2') format('woff2');
  font-weight:400;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:'Atkinson Hyperlegible';
  src:url('../fonts/atkinson-hyperlegible-700.woff2') format('woff2');
  font-weight:700;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:'Barlow Condensed';
  src:url('../fonts/barlow-condensed-700.woff2') format('woff2');
  font-weight:700;
  font-style:normal;
  font-display:swap;
}
@font-face{
  font-family:'Barlow Condensed';
  src:url('../fonts/barlow-condensed-900.woff2') format('woff2');
  font-weight:900;
  font-style:normal;
  font-display:swap;
}

:root{
  /* — Palette — */
  --bg:#080808;              /* noir profond dominant */
  --bg-mid:#101010;          /* aplat légèrement relevé (cartes projets) */
  --surface-alt:#141414;
  --ink:#050505;             /* noir d'impression (texte sur aplats clairs) */
  --border:#f2ede3;          /* les bordures sont désormais blanc cassé */
  --red:#da1d26;             /* écarlate signature */
  --red-deep:#a8121a;
  --red-soft:rgba(218,29,38,.16);
  --red-softer:rgba(218,29,38,.07);
  --red-border:rgba(218,29,38,.55);
  --green:#25e07a;

  /* — Texte (valeurs pensées pour un fond noir) — */
  --text-primary:#f7f4ec;    /* blanc cassé */
  --text-secondary:#ded8cc;
  --text-muted:#aaa496;
  --text-faint:#8b8375;

  /* — Angles vifs : plus aucun arrondi global — */
  --radius-lg:0px;
  --radius-md:0px;

  /* — Typographie — */
  /* Titres / boutons / menus — condensée grasse, repli Impact */
  --font-head:'Barlow Condensed', Impact, sans-serif;
  /* Texte courant / paragraphes / formulaires — repli Arial */
  --font-body:'Atkinson Hyperlegible', Arial, sans-serif;
  --sidebar-w:276px;

  /* — Courbes d'animation sèches (pas d'ease-in-out mou) — */
  --ease-snap:cubic-bezier(.2,.9,.15,1);
  --ease-hard:cubic-bezier(.85,0,.15,1);

  /* — Trame demi-teintes (halftone) réutilisable — */
  --halftone:radial-gradient(circle at center, rgba(247,244,236,.18) 1.1px, transparent 1.2px);
  --halftone-size:9px 9px;

  /* — Découpes réutilisables — */
  --cut-corners:polygon(0 0, calc(100% - 26px) 0, 100% 26px, 100% 100%, 26px 100%, 0 calc(100% - 26px));
  --cut-slant:polygon(16px 0, 100% 0, calc(100% - 16px) 100%, 0 100%);
}

*{box-sizing:border-box;margin:0;padding:0;}

html{
  scroll-behavior:smooth;
  background:var(--bg);
  /* clip (et non hidden) : contient les débordements des éléments
     pivotés sans casser le position:sticky de la sidebar */
  overflow-x:clip;
}

body{
  background-color:var(--bg);
  /* trame halftone fixe sur toute la page : texture d'impression */
  background-image:var(--halftone);
  background-size:var(--halftone-size);
  background-attachment:fixed;
  color:var(--text-secondary);
  font-family:var(--font-body);
  line-height:1.6;
  overflow-x:clip;
  -webkit-font-smoothing:antialiased;
}

a{color:inherit;text-decoration:none;}
ul{list-style:none;}
img{max-width:100%;display:block;}

/* Tous les titres passent en condensée grasse, capitales, serrées */
h1,h2,h3{
  font-family:var(--font-head);
  font-weight:900;              /* graisse maximale de Barlow Condensed */
  color:var(--text-primary);
  text-transform:uppercase;     /* titres toujours en capitales */
  letter-spacing:.01em;
  line-height:.92;              /* interligne serré demandé */
}

.icon{width:20px;height:20px;flex-shrink:0;}
.icon svg{width:100%;height:100%;}

/* =====================================================================
   ACCESSIBILITE — Lien d'évitement
   Premier élément focusable de chaque page. Invisible tant qu'il n'a pas
   le focus ; au Tab il descend en haut à gauche et permet de sauter les
   6 liens de la sidebar pour atteindre directement le contenu.
   Pas de display:none ni de visibility:hidden : ces deux propriétés le
   rendraient non focusable, donc inutile.
   ===================================================================== */
.skip-link{
  position:absolute;
  top:-100px;left:14px;z-index:200;
  background:var(--red);
  color:var(--text-primary);          /* 4.6:1 — AA */
  border:3px solid var(--border);
  padding:13px 22px;
  font-family:var(--font-head);font-weight:700;
  font-size:16px;letter-spacing:.08em;text-transform:uppercase;
  transition:top .13s var(--ease-snap);
}
.skip-link:focus{top:14px;outline:none;box-shadow:6px 6px 0 var(--ink);}

/* =====================================================================
   ACCESSIBILITE — Focus clavier visible
   :focus-visible ne se déclenche qu'à la navigation clavier : la souris
   ne déclenche donc aucun contour. Le contour est doublé (rouge + blanc
   cassé) pour rester visible aussi bien sur le fond noir que sur les
   aplats rouges des boutons.
   ===================================================================== */
a:focus-visible,
button:focus-visible,
.btn:focus-visible,
.link-btn:focus-visible,
.connect-item:focus-visible,
.nav-link:focus-visible{
  outline:3px solid var(--text-primary);
  outline-offset:3px;
  box-shadow:0 0 0 6px var(--red);
}

/* =====================================================================
   ACCESSIBILITE — Mouvement réduit
   Si l'utilisateur a demandé "moins d'animations" dans son système, on
   coupe toutes les transitions et on affiche les sections sans
   apparition progressive (rien ne reste piégé en opacity:0).
   ===================================================================== */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto;}
  *, *::before, *::after{
    animation-duration:.001ms !important;
    transition-duration:.001ms !important;
  }
  .js-reveal .section,
  .js-reveal footer{opacity:1;transform:none;}
}
