/* ============================================================================
   TOURAK 2027 — SYSTEME DE DESIGN
   Fichier : /assets/css/tk-2027.css   (tourak-digital.com — FR, LTR)
   Charge EN DERNIER. Additif : ne supprime aucune ancienne feuille.
   Rollback = retirer la ligne <link> qui pointe ici.

   Namespace neuf : --t27-*  (aucune collision avec les 69 tokens existants)
   Remap des anciens tokens : section (C), scope html:not(.t27-legacy):root
   Desactiver le remap sans toucher au fichier : <html class="t27-legacy">

   SOMMAIRE
   (A) Primitives      : couleurs OKLCH, typo, espace, rayon, ombre, motion
   (B) Semantique      : tokens de surface/texte/bordure, clair + sombre
   (C) Remap legacy    : critical.css / style.css / tk-unified.css / premium-2026.css
   (D) Reset minimal   : non destructif
   (E) Typographie     : echelle appliquee
   (F) Dark mode       : prefers-color-scheme + [data-theme] (le toggle gagne)
   (G) Motion          : durees, easings, prefers-reduced-motion total
   (H) Surcharges      : uniquement les selecteurs en !important qui resistent
   (I) Utilitaires     : conteneur, pile, bento, boutons, marqueurs
   ========================================================================== */


/* ==========================================================================
   (A) PRIMITIVES
   Toutes les couleurs sont en OKLCH. Les hex equivalents sont dans le bloc
   @supports de repli (fin de section A) pour les navigateurs sans OKLCH.
   ========================================================================== */

html:not(.t27-legacy):root {

  /* --- Indigo electrique : accent principal. Echelle 50 -> 950, hue 274 ---
     600 = la signature Tourak (contraste blanc 6,4:1, AA valide). */
  --t27-indigo-50:  oklch(0.972 0.014 274);   --t27-indigo-100: oklch(0.944 0.030 274);
  --t27-indigo-200: oklch(0.892 0.062 274);   --t27-indigo-300: oklch(0.812 0.110 274);
  --t27-indigo-400: oklch(0.702 0.176 274);   --t27-indigo-500: oklch(0.600 0.240 274);
  --t27-indigo-600: oklch(0.508 0.276 274);   --t27-indigo-700: oklch(0.442 0.240 273);
  --t27-indigo-800: oklch(0.378 0.196 272);   --t27-indigo-900: oklch(0.312 0.150 272);
  --t27-indigo-950: oklch(0.212 0.096 272);

  /* --- Ambre sable : accent secondaire (pont France <-> Maroc).
     Plafond d'usage : moins de 10 % de la surface. JAMAIS sur du texte long.
     700 = seule teinte autorisee pour du texte sur fond clair (5,5:1). --- */
  --t27-amber-50:  oklch(0.978 0.016 78);   --t27-amber-100: oklch(0.950 0.036 78);
  --t27-amber-200: oklch(0.900 0.070 76);   --t27-amber-300: oklch(0.845 0.106 73);
  --t27-amber-400: oklch(0.790 0.130 70);   --t27-amber-500: oklch(0.730 0.140 66);
  --t27-amber-600: oklch(0.648 0.136 60);   --t27-amber-700: oklch(0.548 0.120 56);
  --t27-amber-800: oklch(0.452 0.098 54);   --t27-amber-900: oklch(0.372 0.078 52);

  /* --- Sable : neutres CLAIRS, teintes chauds. Aucun gris pur. hue 80 --- */
  --t27-sand-25:  oklch(0.992 0.003 85);    --t27-sand-50:  oklch(0.980 0.005 84);
  --t27-sand-100: oklch(0.962 0.007 82);    --t27-sand-200: oklch(0.930 0.009 80);
  --t27-sand-300: oklch(0.880 0.011 78);    --t27-sand-400: oklch(0.775 0.013 76);

  /* --- Encre : neutres SOMBRES, bleu-noir. Aucun gris pur. hue 266 --- */
  --t27-ink-400:  oklch(0.640 0.024 268);   --t27-ink-500:  oklch(0.548 0.026 268);
  --t27-ink-600:  oklch(0.448 0.030 267);   --t27-ink-700:  oklch(0.352 0.032 266);
  --t27-ink-800:  oklch(0.258 0.032 265);   --t27-ink-900:  oklch(0.186 0.030 265);
  --t27-ink-950:  oklch(0.132 0.028 265);   --t27-ink-1000: oklch(0.098 0.024 265);

  /* --- Etats --- */
  --t27-success: oklch(0.620 0.150 152);  --t27-warning: oklch(0.700 0.150 74);
  --t27-danger:  oklch(0.570 0.215 27);

  /* --- Familles typographiques (2 + 1 editoriale) --- */
  --t27-font-display: 'Bricolage Grotesque', 'Space Grotesk', system-ui, sans-serif;
  --t27-font-text: 'Instrument Sans', 'Inter', system-ui, -apple-system, sans-serif;
  --t27-font-editorial: 'Instrument Serif', Georgia, serif; /* 1 mot par section max */
  --t27-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;

  /* --- Echelle typographique fluide. Une seule progression, ratio ~1,22 --- */
  --t27-text-2xs:  clamp(0.6875rem, 0.67rem + 0.09vw, 0.75rem);
  --t27-text-xs:   clamp(0.75rem,   0.72rem + 0.15vw, 0.8125rem);
  --t27-text-sm:   clamp(0.875rem,  0.85rem + 0.12vw, 0.9375rem);
  --t27-text-base: clamp(1rem,      0.96rem + 0.20vw, 1.0625rem);
  --t27-text-lg:   clamp(1.125rem,  1.06rem + 0.32vw, 1.25rem);
  --t27-text-xl:   clamp(1.375rem,  1.25rem + 0.60vw, 1.625rem);
  --t27-text-2xl:  clamp(1.75rem,   1.50rem + 1.20vw, 2.25rem);
  --t27-text-3xl:  clamp(2.25rem,   1.80rem + 2.20vw, 3.25rem);
  --t27-text-4xl:  clamp(2.75rem,   2.00rem + 3.60vw, 4.50rem);
  --t27-text-5xl:  clamp(3.25rem,   2.10rem + 5.60vw, 6.50rem);

  /* --- Graisses, interlignes, interlettrages --- */
  --t27-weight-regular: 400;  --t27-weight-medium: 500;  --t27-weight-semibold: 600;
  --t27-weight-bold: 700;     --t27-weight-black: 800;
  --t27-leading-tight: 1.04;
  --t27-leading-snug: 1.18;
  --t27-leading-normal: 1.45;
  --t27-leading-relaxed: 1.68;
  --t27-tracking-tight: -0.032em;  /* titres 3xl et plus */
  --t27-tracking-snug: -0.016em;   /* titres xl / 2xl */
  --t27-tracking-normal: 0em;
  --t27-tracking-wide: 0.08em;     /* sur-titres, kickers en majuscules */
  --t27-measure: 68ch;             /* longueur de ligne maximale du texte long */

  /* --- Espacement : UNE progression, base 4 px. Rien hors de cette liste --- */
  --t27-space-1: 0.25rem;  /* 4 */    --t27-space-2: 0.5rem;   /* 8 */
  --t27-space-3: 0.75rem;  /* 12 */   --t27-space-4: 1rem;     /* 16 */
  --t27-space-5: 1.5rem;   /* 24 */   --t27-space-6: 2rem;     /* 32 */
  --t27-space-7: 3rem;     /* 48 */   --t27-space-8: 4rem;     /* 64 */
  --t27-space-9: 6rem;     /* 96 */   --t27-space-10: 8rem;    /* 128 */
  --t27-section: clamp(4rem, 8vw, 8rem);       /* padding vertical de section */
  --t27-gutter: clamp(1.25rem, 4vw, 2.5rem);   /* gouttiere laterale */
  --t27-container: 1240px;
  --t27-container-narrow: 780px;

  /* --- Rayons --- */
  --t27-radius-xs: 6px;   --t27-radius-sm: 10px;  --t27-radius-md: 14px;
  --t27-radius-lg: 20px;  --t27-radius-xl: 28px;  --t27-radius-2xl: 40px;
  --t27-radius-full: 999px;

  /* --- Bordures --- */
  --t27-border-width: 1px;
  --t27-border-width-thick: 2px;

  /* --- Motion : durees et easings (section G pour l'usage) --- */
  --t27-dur-1: 120ms;  --t27-dur-2: 200ms;  --t27-dur-3: 320ms;
  --t27-dur-4: 520ms;  --t27-dur-5: 800ms;
  --t27-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --t27-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
  --t27-ease-spring: cubic-bezier(0.34, 1.4, 0.64, 1);

  /* --- Profondeurs --- */
  --t27-z-base: 1;      --t27-z-sticky: 100;   --t27-z-header: 1000;
  --t27-z-overlay: 5000; --t27-z-modal: 9000;
}

/* Repli pour les navigateurs sans OKLCH (Chrome < 111, Safari < 15.4).
   Sans ce bloc, chaque var() en oklch serait invalide et la couleur sauterait. */
@supports not (color: oklch(0.5 0.1 270)) {
  html:not(.t27-legacy):root {
    --t27-indigo-50:#f2f1fe; --t27-indigo-100:#e6e4fd; --t27-indigo-200:#d0ccfc;
    --t27-indigo-300:#b0a8fa; --t27-indigo-400:#8b7bf7; --t27-indigo-500:#6b53f8;
    --t27-indigo-600:#4441f1; --t27-indigo-700:#3a34d1; --t27-indigo-800:#2f2caa;
    --t27-indigo-900:#272485; --t27-indigo-950:#191653;
    --t27-amber-50:#fdf6ea; --t27-amber-100:#faead2; --t27-amber-200:#f3d7a8;
    --t27-amber-300:#ecc078; --t27-amber-400:#e0a851; --t27-amber-500:#cf8f39;
    --t27-amber-600:#b1742c; --t27-amber-700:#8f5b22; --t27-amber-800:#6f461c;
    --t27-amber-900:#553516;
    --t27-sand-25:#fefdfb; --t27-sand-50:#fbfaf6; --t27-sand-100:#f6f3ed;
    --t27-sand-200:#eae6dd; --t27-sand-300:#dad5ca; --t27-sand-400:#bab4a7;
    --t27-ink-400:#8d8b9e; --t27-ink-500:#737186; --t27-ink-600:#5a586e;
    --t27-ink-700:#434258; --t27-ink-800:#2c2b3e; --t27-ink-900:#1c1b2b;
    --t27-ink-950:#121121; --t27-ink-1000:#0c0b18;
    --t27-success:#16a34a; --t27-warning:#d97706; --t27-danger:#dc2626;
  }
}


/* ==========================================================================
   (B) TOKENS SEMANTIQUES — THEME CLAIR (valeur par defaut)
   C'est ce que les 20 agents front doivent consommer, pas les primitives.
   ========================================================================== */

html:not(.t27-legacy):root {
  --t27-bg: var(--t27-sand-50);          --t27-bg-subtle: var(--t27-sand-100);
  --t27-bg-alt: var(--t27-sand-200);     --t27-surface: var(--t27-sand-25);
  --t27-surface-raised: #ffffff;         --t27-surface-inset: var(--t27-sand-100);
  --t27-text: var(--t27-ink-900);        --t27-text-muted: var(--t27-ink-600);
  --t27-text-subtle: var(--t27-ink-500); --t27-text-invert: var(--t27-sand-50);
  --t27-border: var(--t27-sand-300);     --t27-border-strong: var(--t27-sand-400);
  --t27-border-accent: var(--t27-indigo-200);
  --t27-accent: var(--t27-indigo-600);   --t27-accent-hover: var(--t27-indigo-700);
  --t27-accent-soft: var(--t27-indigo-50);
  --t27-accent-text: var(--t27-indigo-700);  /* accent lisible sur fond clair */
  --t27-on-accent: #ffffff;
  --t27-accent-2: var(--t27-amber-500);  --t27-accent-2-soft: var(--t27-amber-100);
  --t27-accent-2-text: var(--t27-amber-700); /* seule teinte ambre pour du texte */
  --t27-on-accent-2: var(--t27-ink-950);

  /* Ombres TEINTEES de l'accent. Jamais de noir pur. */
  --t27-shadow-tint: 30 26 120;   /* indigo-950 en RGB, pour les rgba() */
  --t27-shadow-xs: 0 1px 2px rgba(var(--t27-shadow-tint) / 0.06);
  --t27-shadow-sm: 0 2px 6px rgba(var(--t27-shadow-tint) / 0.07);
  --t27-shadow-md: 0 6px 18px rgba(var(--t27-shadow-tint) / 0.09), 0 1px 3px rgba(var(--t27-shadow-tint) / 0.05);
  --t27-shadow-lg: 0 16px 42px rgba(var(--t27-shadow-tint) / 0.11), 0 2px 8px rgba(var(--t27-shadow-tint) / 0.06);
  --t27-shadow-xl: 0 32px 80px rgba(var(--t27-shadow-tint) / 0.14), 0 4px 14px rgba(var(--t27-shadow-tint) / 0.07);
  --t27-shadow-accent: 0 12px 32px rgba(68 65 241 / 0.22);

  /* Anneau de focus : visible dans les deux themes, 3:1 minimum. */
  --t27-focus-ring: var(--t27-indigo-600);
  --t27-focus-halo: #ffffff;
}

/* Repli rgba() pour les navigateurs sans syntaxe espace/slash. */
@supports not (color: rgb(0 0 0 / 0.5)) {
  html:not(.t27-legacy):root {
    --t27-shadow-xs: 0 1px 2px rgba(30,26,120,0.06);
    --t27-shadow-sm: 0 2px 6px rgba(30,26,120,0.07);
    --t27-shadow-md: 0 6px 18px rgba(30,26,120,0.09);
    --t27-shadow-lg: 0 16px 42px rgba(30,26,120,0.11);
    --t27-shadow-xl: 0 32px 80px rgba(30,26,120,0.14);
    --t27-shadow-accent: 0 12px 32px rgba(68,65,241,0.22);
  }
}


/* ==========================================================================
   (F) DARK MODE — declare avant (C) pour que le remap legacy lise les bonnes
   valeurs. Le toggle manuel [data-theme] gagne DANS LES DEUX SENS :
   - systeme sombre + toggle "light"  -> clair  (le :not([data-theme="light"]))
   - systeme clair  + toggle "dark"   -> sombre (le bloc [data-theme="dark"])
   Rappel : header.php:152 pose data-theme depuis localStorage 'tourak-theme'.
   ========================================================================== */

@media (prefers-color-scheme: dark) {
  html:not(.t27-legacy):root:not([data-theme="light"]) {
    --t27-bg: var(--t27-ink-1000);          --t27-bg-subtle: var(--t27-ink-950);
    --t27-bg-alt: var(--t27-ink-900);       --t27-surface: var(--t27-ink-950);
    --t27-surface-raised: var(--t27-ink-900); --t27-surface-inset: var(--t27-ink-1000);
    --t27-text: var(--t27-sand-100);        --t27-text-muted: var(--t27-sand-400);
    --t27-text-subtle: var(--t27-ink-400);  --t27-text-invert: var(--t27-ink-950);
    --t27-border: var(--t27-ink-800);       --t27-border-strong: var(--t27-ink-700);
    --t27-border-accent: var(--t27-indigo-800);
    --t27-accent: var(--t27-indigo-500);    --t27-accent-hover: var(--t27-indigo-400);
    --t27-accent-soft: var(--t27-indigo-950);
    --t27-accent-text: var(--t27-indigo-400);  --t27-on-accent: #ffffff;
    --t27-accent-2: var(--t27-amber-400);   --t27-accent-2-soft: var(--t27-amber-900);
    --t27-accent-2-text: var(--t27-amber-400); --t27-on-accent-2: var(--t27-ink-1000);
    --t27-shadow-tint: 8 6 34;   /* encre indigo, jamais du noir pur */
    --t27-shadow-accent: 0 12px 32px rgba(107 83 248 / 0.30);
    --t27-focus-ring: var(--t27-indigo-400); --t27-focus-halo: var(--t27-ink-1000);
    color-scheme: dark;
  }
}

html:not(.t27-legacy):root[data-theme="dark"] {
  --t27-bg: var(--t27-ink-1000);          --t27-bg-subtle: var(--t27-ink-950);
  --t27-bg-alt: var(--t27-ink-900);       --t27-surface: var(--t27-ink-950);
  --t27-surface-raised: var(--t27-ink-900); --t27-surface-inset: var(--t27-ink-1000);
  --t27-text: var(--t27-sand-100);        --t27-text-muted: var(--t27-sand-400);
  --t27-text-subtle: var(--t27-ink-400);  --t27-text-invert: var(--t27-ink-950);
  --t27-border: var(--t27-ink-800);       --t27-border-strong: var(--t27-ink-700);
  --t27-border-accent: var(--t27-indigo-800);
  --t27-accent: var(--t27-indigo-500);    --t27-accent-hover: var(--t27-indigo-400);
  --t27-accent-soft: var(--t27-indigo-950);
  --t27-accent-text: var(--t27-indigo-400);  --t27-on-accent: #ffffff;
  --t27-accent-2: var(--t27-amber-400);   --t27-accent-2-soft: var(--t27-amber-900);
  --t27-accent-2-text: var(--t27-amber-400); --t27-on-accent-2: var(--t27-ink-1000);
  --t27-shadow-tint: 8 6 34;   /* encre indigo, jamais du noir pur */
  --t27-shadow-accent: 0 12px 32px rgba(107 83 248 / 0.30);
  --t27-focus-ring: var(--t27-indigo-400); --t27-focus-halo: var(--t27-ink-1000);
  color-scheme: dark;
}

/* Le toggle "clair" gagne sur un systeme en sombre sans qu'aucune valeur ne soit
   redeclaree : le bloc @media ci-dessus s'exclut lui-meme via
   :root:not([data-theme="light"]). Seul color-scheme doit etre repose. */
html:not(.t27-legacy):root[data-theme="light"] { color-scheme: light; }


/* ==========================================================================
   (C) REMAP DES TOKENS LEGACY
   Levier principal : l'ancien CSS (critical.css, style.css, tk-unified.css,
   premium-2026.css, et le <style> inline de index.php) consomme deja ces noms.
   En les repointant ici, des centaines de pages heritent du design 2027 sans
   qu'on touche a une seule ligne de leur markup.
   Scope volontairement explicite (html:not(.t27-legacy):root = 0,2,1) : il bat
   le :root de style.css (0,1,0) ET le [data-theme="light"] de style.css (0,1,0)
   sans jamais poser un :root global anonyme.
   ========================================================================== */

html:not(.t27-legacy):root {
  /* --- critical.css + style.css (les deux se partagent ces noms) --- */
  --primary: var(--t27-accent);         --primary-dark: var(--t27-indigo-700);
  --primary-light: var(--t27-indigo-400);
  --secondary: var(--t27-indigo-500);   /* etait #0ea5e9 / #8b5cf6 */
  --accent: var(--t27-indigo-500);      /* etait #22d3ee / #ec4899 : cyan et rose retires */
  --accent-pink: var(--t27-indigo-400); /* le rose generique disparait */
  --bg-dark: var(--t27-bg);             --bg-primary: var(--t27-bg);
  --bg-secondary: var(--t27-bg-subtle); --bg-tertiary: var(--t27-bg-alt);
  --bg-card: var(--t27-surface);        --text-primary: var(--t27-text);
  --text-secondary: var(--t27-text-muted); --text-muted: var(--t27-text-subtle);
  --border-color: var(--t27-border);    --border-glow: var(--t27-border-accent);

  /* Le gradient indigo -> violet -> rose (defaut n°1 de l'audit) est remplace
     par un degrade indigo monochrome, beaucoup plus tenu. */
  --gradient:         linear-gradient(135deg, var(--t27-indigo-600), var(--t27-indigo-500));
  --gradient-primary: linear-gradient(135deg, var(--t27-indigo-700) 0%, var(--t27-indigo-500) 100%);
  --gradient-dark:    linear-gradient(160deg, var(--t27-bg) 0%, var(--t27-bg-subtle) 100%);
  --gradient-glow:    linear-gradient(135deg, var(--t27-accent-soft) 0%, transparent 70%);
  --gradient-card:    linear-gradient(145deg, var(--t27-surface-raised) 0%, var(--t27-surface) 100%);

  --shadow: var(--t27-shadow-md);       --shadow-sm: var(--t27-shadow-sm);
  --shadow-md: var(--t27-shadow-md);    --shadow-lg: var(--t27-shadow-lg);
  --shadow-xl: var(--t27-shadow-xl);    --shadow-glow: var(--t27-shadow-accent);
  --shadow-glow-pink: var(--t27-shadow-accent);

  --radius: var(--t27-radius-md);       --radius-sm: var(--t27-radius-sm);
  --radius-md: var(--t27-radius-md);    --radius-lg: var(--t27-radius-lg);
  --radius-xl: var(--t27-radius-xl);    --radius-full: var(--t27-radius-full);

  --font-primary: var(--t27-font-text); --font-display: var(--t27-font-display);
  --transition-fast: var(--t27-dur-1) var(--t27-ease-out);
  --transition-normal: var(--t27-dur-2) var(--t27-ease-out);
  --transition-slow: var(--t27-dur-4) var(--t27-ease-out);
  --section-padding: var(--t27-section) 0;
  --container-padding: 0 var(--t27-gutter);

  /* --- tk-unified.css (namespace --tk-*) --- */
  --tk-primary: var(--t27-accent);      --tk-secondary: var(--t27-indigo-500);
  --tk-accent: var(--t27-indigo-400);   /* etait le rose #ec4899 */
  --tk-accent-2: var(--t27-accent-2);   --tk-success: var(--t27-success);
  --tk-text: var(--t27-text);           --tk-text-muted: var(--t27-text-muted);
  --tk-text-light: var(--t27-text-subtle); --tk-bg-card: var(--t27-surface-raised);
  --tk-bg-soft: var(--t27-bg);          --tk-bg-section: var(--t27-surface);
  --tk-bg-section-alt: var(--t27-bg-subtle); --tk-border: var(--t27-border);
  --tk-shadow: var(--t27-shadow-md);    --tk-radius: var(--t27-radius-lg);
  --tk-ease: var(--t27-ease-out);

  /* --- premium-2026.css (les 22 pages "premium" + la home) --- */
  --bg: var(--t27-bg);                  --surface: var(--t27-surface);
  --surface2: var(--t27-surface-raised); --border: var(--t27-border);
  --border2: var(--t27-border-strong);  --text: var(--t27-text);
  --muted: var(--t27-text-muted);       --accent-h: var(--t27-accent-hover);
  --accent-bg: var(--t27-accent-soft);  --accent-bg2: var(--t27-accent-soft);
  --max-w: var(--t27-container);        --trans: var(--t27-dur-2) var(--t27-ease-out);

  /* --- futuristic.css (--fx-*) et --glass-* des <style> inline des headers --- */
  --fx-v: var(--t27-indigo-500);        --fx-c: var(--t27-indigo-400);
  --fx-p: var(--t27-amber-400);         --fx-ink: var(--t27-bg);
  --fx-card: var(--t27-surface);        --fx-line: var(--t27-border);
  --fx-holo: linear-gradient(100deg, var(--t27-indigo-400), var(--t27-indigo-600) 55%, var(--t27-amber-400));
  --glass-bg: var(--t27-surface);       --glass-border: var(--t27-border);
}


/* ==========================================================================
   (D) RESET MODERNE MINIMAL — non destructif
   On ne remet PAS a zero les marges/paddings (deja fait par critical.css et
   style.css) : on ajoute seulement ce qui manque et ne casse rien.
   ========================================================================== */

/* color-scheme n'est PAS pose globalement : il est declare par theme en (F),
   sinon un OS en sombre repeint les scrollbars et les champs d'une page claire. */
html:not(.t27-legacy) {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  tab-size: 4;
}

html:not(.t27-legacy) body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-synthesis-weight: none;
}

/* Media remplacees : jamais de debordement horizontal en 390 px. */
html:not(.t27-legacy) img,
html:not(.t27-legacy) svg,
html:not(.t27-legacy) video,
html:not(.t27-legacy) canvas,
html:not(.t27-legacy) iframe {
  max-width: 100%;
}

/* Coupure de mots : evite qu'un long slug ou une URL pousse la page. */
html:not(.t27-legacy) p,
html:not(.t27-legacy) li,
html:not(.t27-legacy) h1,
html:not(.t27-legacy) h2,
html:not(.t27-legacy) h3,
html:not(.t27-legacy) h4 {
  overflow-wrap: break-word;
}

/* Champs de formulaire : heritent de la typo, cible tactile de 44 px. */
html:not(.t27-legacy) input,
html:not(.t27-legacy) select,
html:not(.t27-legacy) textarea,
html:not(.t27-legacy) button {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
/* Cible tactile 44 px : limitee aux formulaires. Un min-height global sur
   <button> deplacerait le hamburger et les boutons d'icone de la navbar. */
html:not(.t27-legacy) form button,
html:not(.t27-legacy) input[type="submit"] {
  min-block-size: 44px;
}

/* Focus visible : anneau accent + halo, lisible sur clair ET sur sombre.
   Ne remplace pas le focus-visible pose en inline dans les headers, il le
   surclasse simplement (meme intention, couleurs 2027). */
html:not(.t27-legacy) :focus-visible {
  outline: 3px solid var(--t27-focus-ring);
  outline-offset: 2px;
  box-shadow: 0 0 0 5px var(--t27-focus-halo);
  border-radius: var(--t27-radius-xs);
}

/* Ancrages : compense le header sticky lors d'un saut vers #section. */
html:not(.t27-legacy) [id] { scroll-margin-block-start: var(--t27-space-9); }

/* Selection de texte teintee accent. */
html:not(.t27-legacy) ::selection {
  background: var(--t27-accent);
  color: var(--t27-on-accent);
}


/* ==========================================================================
   (E) PRIMITIVES TYPOGRAPHIQUES
   Corrige le defaut n°6 de l'audit : h3 etait quasi egal au corps de texte.
   Ici, chaque niveau est separe d'au moins un cran de l'echelle.
   ========================================================================== */

html:not(.t27-legacy) body {
  font-family: var(--t27-font-text);
  font-size: var(--t27-text-base);
  line-height: var(--t27-leading-normal);
  letter-spacing: var(--t27-tracking-normal);
}

html:not(.t27-legacy) h1, html:not(.t27-legacy) .t27-h1,
html:not(.t27-legacy) h2, html:not(.t27-legacy) .t27-h2,
html:not(.t27-legacy) h3, html:not(.t27-legacy) .t27-h3,
html:not(.t27-legacy) h4, html:not(.t27-legacy) .t27-h4 {
  font-family: var(--t27-font-display);
  font-weight: var(--t27-weight-bold);
  text-wrap: balance;
}

html:not(.t27-legacy) h1, html:not(.t27-legacy) .t27-h1 {
  font-size: var(--t27-text-4xl);
  line-height: var(--t27-leading-tight);
  letter-spacing: var(--t27-tracking-tight);
  font-weight: var(--t27-weight-black);
}
html:not(.t27-legacy) h2, html:not(.t27-legacy) .t27-h2 {
  font-size: var(--t27-text-3xl);
  line-height: var(--t27-leading-tight);
  letter-spacing: var(--t27-tracking-tight);
}
html:not(.t27-legacy) h3, html:not(.t27-legacy) .t27-h3 {
  font-size: var(--t27-text-2xl);
  line-height: var(--t27-leading-snug);
  letter-spacing: var(--t27-tracking-snug);
}
html:not(.t27-legacy) h4, html:not(.t27-legacy) .t27-h4 {
  font-size: var(--t27-text-xl);
  line-height: var(--t27-leading-snug);
  letter-spacing: var(--t27-tracking-snug);
}

/* Chapeau de section : le seul texte long autorise au-dessus du corps. */
.t27-lead {
  font-size: var(--t27-text-lg);
  line-height: var(--t27-leading-relaxed);
  color: var(--t27-text-muted);
  max-width: var(--t27-measure);
}

/* Sur-titre / kicker. Majuscules, interlettrage large, accent en pastille. */
.t27-kicker {
  display: inline-flex; align-items: center; gap: var(--t27-space-2);
  font-family: var(--t27-font-text); font-size: var(--t27-text-xs);
  font-weight: var(--t27-weight-semibold);
  letter-spacing: var(--t27-tracking-wide);
  text-transform: uppercase; color: var(--t27-accent-text);
}
.t27-kicker::before {
  content: ""; inline-size: 22px; block-size: 2px;
  background: var(--t27-accent-2); border-radius: var(--t27-radius-full);
}

/* Accent editorial : 1 mot par section, jamais plus. */
.t27-editorial {
  font-family: var(--t27-font-editorial);
  font-style: italic;
  font-weight: var(--t27-weight-regular);
  letter-spacing: 0;
}

/* Marqueur ambre : surlignage discret sous un mot cle du titre. */
.t27-mark {
  background-image: linear-gradient(transparent 62%, var(--t27-accent-2-soft) 62%);
  padding-inline: 0.08em;
}

.t27-measure { max-width: var(--t27-measure); }
.t27-mono { font-family: var(--t27-font-mono); font-variant-numeric: tabular-nums; }
.t27-nums { font-variant-numeric: tabular-nums; }


/* ==========================================================================
   (G) MOTION
   Micro-interaction par defaut sur tout element cliquable, et neutralisation
   TOTALE sous prefers-reduced-motion.
   ========================================================================== */

.t27-interactive {
  transition: transform var(--t27-dur-2) var(--t27-ease-out),
    box-shadow var(--t27-dur-2) var(--t27-ease-out),
    background-color var(--t27-dur-2) var(--t27-ease-out),
    border-color var(--t27-dur-2) var(--t27-ease-out),
    color var(--t27-dur-1) var(--t27-ease-out);
}
.t27-interactive:hover { transform: translateY(-2px); }
.t27-interactive:active { transform: translateY(0) scale(0.985); }

@keyframes t27-rise { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
@keyframes t27-fade { from { opacity: 0; } to { opacity: 1; } }
.t27-rise { animation: t27-rise var(--t27-dur-5) var(--t27-ease-out) both; }
.t27-fade { animation: t27-fade var(--t27-dur-4) var(--t27-ease-out) both; }

@media (prefers-reduced-motion: reduce) {
  html:not(.t27-legacy) *,
  html:not(.t27-legacy) *::before,
  html:not(.t27-legacy) *::after {
    animation-duration: 1ms !important;
    animation-delay: 0ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 1ms !important;
    transition-delay: 0ms !important;
    scroll-behavior: auto !important;
  }
  html:not(.t27-legacy) { scroll-behavior: auto !important; }

  /* Le contenu anime par AOS doit rester VISIBLE, pas fige a opacity:0. */
  html:not(.t27-legacy) [data-aos] {
    opacity: 1 !important;
    transform: none !important;
  }

  /* Bandeaux defilants : les figer a -50% coupe la moitie du contenu.
     On coupe l'animation ET le transform (defaut releve sur .secteurs-track). */
  html:not(.t27-legacy) .secteurs-track,
  html:not(.t27-legacy) .marquee-track,
  html:not(.t27-legacy) .trust-logos-track,
  html:not(.t27-legacy) [data-marquee] {
    animation: none !important;
    transform: none !important;
  }

  html:not(.t27-legacy) .t27-interactive:hover,
  html:not(.t27-legacy) .t27-interactive:active { transform: none !important; }
}


/* ==========================================================================
   (H) SURCHARGES CIBLEES
   Chaque bloc porte le selecteur d'origine qu'il doit battre et le fichier ou
   il vit. On n'ecrit !important QUE la ou l'ancien CSS en pose deja un :
   sans cela la regle serait invisible (417 !important recenses).
   ========================================================================== */

/* [H1] Origine : tk-unified.css:27  [data-theme="light"] body {color;background !important}
   Le corps de page etait force en #1a1a2e sur #f8f9fc (gris bleutes froids). */
html:not(.t27-legacy)[data-theme="light"] body {
  color: var(--t27-text) !important;
  background: var(--t27-bg) !important;
  font-family: var(--t27-font-text) !important;
}
html:not(.t27-legacy)[data-theme="dark"] body {
  color: var(--t27-text) !important;
  background: var(--t27-bg) !important;
  font-family: var(--t27-font-text) !important;
}

/* [H2] Origine : style.css .hero-title / .section-title / .page-title (!important)
   Reprend la hierarchie typographique ecrasee. */
html:not(.t27-legacy) .hero-title,
html:not(.t27-legacy) .page-title,
html:not(.t27-legacy) h1.hero-title {
  font-family: var(--t27-font-display) !important;
  font-size: var(--t27-text-4xl) !important;
  line-height: var(--t27-leading-tight) !important;
  letter-spacing: var(--t27-tracking-tight) !important;
  font-weight: var(--t27-weight-black) !important;
}
html:not(.t27-legacy) .section-title {
  font-family: var(--t27-font-display) !important;
  font-size: var(--t27-text-3xl) !important;
  line-height: var(--t27-leading-tight) !important;
  letter-spacing: var(--t27-tracking-tight) !important;
}
html:not(.t27-legacy) .hero-description,
html:not(.t27-legacy) .section-subtitle {
  font-size: var(--t27-text-lg) !important;
  line-height: var(--t27-leading-relaxed) !important;
  color: var(--t27-text-muted) !important;
  max-width: var(--t27-measure);
}

/* [H3] Origine : style.css .btn / .btn-primary + [data-theme="light"] .btn-primary
   (mega-selecteur en !important) et index.php:277 .btn-primary{background:var(--accent)}
   Corrige le contraste AA echoue a 4,47:1 -> 6,4:1 sur l'indigo 600. */
html:not(.t27-legacy) .btn,
html:not(.t27-legacy) .btn-primary,
html:not(.t27-legacy) .cta-buttons .btn {
  font-family: var(--t27-font-text) !important;
  font-weight: var(--t27-weight-semibold) !important;
  border-radius: var(--t27-radius-full) !important;
  letter-spacing: 0 !important;
  transition: transform var(--t27-dur-2) var(--t27-ease-out),
              box-shadow var(--t27-dur-2) var(--t27-ease-out),
              background-color var(--t27-dur-2) var(--t27-ease-out) !important;
}
html:not(.t27-legacy) .btn-primary,
html:not(.t27-legacy)[data-theme="light"] .btn-primary,
html:not(.t27-legacy)[data-theme="dark"] .btn-primary {
  background: var(--t27-indigo-600) !important;
  color: #ffffff !important;
  border-color: var(--t27-indigo-600) !important;
}
html:not(.t27-legacy) .btn-primary:hover,
html:not(.t27-legacy)[data-theme="light"] .btn-primary:hover {
  background: var(--t27-indigo-700) !important;
  color: #ffffff !important;
  box-shadow: var(--t27-shadow-accent) !important;
  transform: translateY(-2px);
}
/* Etats manquants releves par l'audit : 0 :active et 0 :disabled sur 280 regles. */
html:not(.t27-legacy) .btn:active,
html:not(.t27-legacy) .btn-primary:active { transform: translateY(0) scale(0.985) !important; }
html:not(.t27-legacy) .btn:disabled,
html:not(.t27-legacy) .btn[aria-disabled="true"],
html:not(.t27-legacy) button:disabled,
html:not(.t27-legacy) input:disabled,
html:not(.t27-legacy) textarea:disabled,
html:not(.t27-legacy) select:disabled {
  opacity: 0.5 !important;
  cursor: not-allowed !important;
  box-shadow: none !important;
  transform: none !important;
  filter: saturate(0.4);
}

/* [H4] Origine : index.php:506 .btn-white{color:var(--accent)} — contraste 4,47:1.
   L'accent texte sur blanc passe a l'indigo 700 (7,9:1). */
html:not(.t27-legacy) .btn-white,
html:not(.t27-legacy) .btn-secondary {
  color: var(--t27-indigo-700) !important; /* fige : accent-text passe en indigo-400 en sombre, or le fond du bouton est #fff en dur (contraste 2.82:1) */
  border-color: var(--t27-border-accent) !important;
}

/* [H5] Origine : style.css .nav-link / .nav-link:hover / .nav-link.active
   et critical.css [data-theme="light"] .nav-link (tous !important). */
html:not(.t27-legacy) .nav-link,
html:not(.t27-legacy) .nav-links a {
  font-family: var(--t27-font-text) !important;
  font-size: var(--t27-text-sm) !important;
  font-weight: var(--t27-weight-medium) !important;
  color: var(--t27-text-muted) !important;
  transition: color var(--t27-dur-1) var(--t27-ease-out) !important;
}
html:not(.t27-legacy) .nav-link:hover,
html:not(.t27-legacy) .nav-link.active,
html:not(.t27-legacy) .nav-links a:hover {
  color: var(--t27-text) !important;
}

/* [H6] Origine : style.css .service-card / .pricing-card / .faq-item (!important).
   Cartes : surface teintee, bordure 1 px, ombre accent, micro-interaction. */
html:not(.t27-legacy) .service-card,
html:not(.t27-legacy) .pricing-card,
html:not(.t27-legacy) .portfolio-item,
html:not(.t27-legacy) .blog-card,
html:not(.t27-legacy) .testimonial-card,
html:not(.t27-legacy) .faq-item {
  background: var(--t27-surface) !important;
  border: var(--t27-border-width) solid var(--t27-border) !important;
  border-radius: var(--t27-radius-lg) !important;
  box-shadow: var(--t27-shadow-sm) !important;
  transition: transform var(--t27-dur-2) var(--t27-ease-out),
              box-shadow var(--t27-dur-2) var(--t27-ease-out),
              border-color var(--t27-dur-2) var(--t27-ease-out) !important;
}
html:not(.t27-legacy) .service-card:hover,
html:not(.t27-legacy) .pricing-card:hover,
html:not(.t27-legacy) .portfolio-item:hover,
html:not(.t27-legacy) .blog-card:hover {
  box-shadow: var(--t27-shadow-lg) !important;
  border-color: var(--t27-border-accent) !important;
  transform: translateY(-3px);
}
/* Le titre de carte doit se detacher du corps (defaut n°6). */
html:not(.t27-legacy) .service-title,
html:not(.t27-legacy) .blog-card-title,
html:not(.t27-legacy) .faq-item h3 {
  font-family: var(--t27-font-display) !important;
  font-size: var(--t27-text-xl) !important;
  line-height: var(--t27-leading-snug) !important;
  letter-spacing: var(--t27-tracking-snug) !important;
}
html:not(.t27-legacy) .service-desc,
html:not(.t27-legacy) .faq-item p {
  font-size: var(--t27-text-base) !important;
  line-height: var(--t27-leading-relaxed) !important;
  color: var(--t27-text-muted) !important;
}

/* [H7] Origine : tk-unified.css [data-theme="light"] .price-card / .faq-question /
   .faq-answer / .feature-item / .related-service-card (tous !important). */
html:not(.t27-legacy)[data-theme="light"] .price-card,
html:not(.t27-legacy)[data-theme="light"] .feature-item,
html:not(.t27-legacy)[data-theme="light"] .related-service-card,
html:not(.t27-legacy)[data-theme="light"] .type-card {
  background: var(--t27-surface-raised) !important;
  border-color: var(--t27-border) !important;
  border-radius: var(--t27-radius-lg) !important;
  box-shadow: var(--t27-shadow-sm) !important;
}
html:not(.t27-legacy)[data-theme="light"] .faq-question,
html:not(.t27-legacy)[data-theme="light"] .faq-answer,
html:not(.t27-legacy)[data-theme="light"] .faq-answer p {
  color: var(--t27-text) !important;
}

/* [H8] Origine : style.css .container (!important). On aligne la largeur et la
   gouttiere sur l'echelle 2027 sans toucher aux breakpoints existants. */
html:not(.t27-legacy) .container {
  max-width: var(--t27-container) !important;
  padding-inline: var(--t27-gutter) !important;
  margin-inline: auto !important;
}

/* [H9] Origine : style.css .footer / .footer-grid / .footer-bottom (!important)
   + footer.php:3-18 <style> inline .footer-grid-mega (6 !important).
   On ne touche PAS a la grille .footer-grid-mega (elle est en 100% !important
   dans le HTML) : uniquement les couleurs et la typo, sinon la grille casse. */
html:not(.t27-legacy) .footer {
  background: var(--t27-bg-subtle) !important;
  border-top: var(--t27-border-width) solid var(--t27-border) !important;
  color: var(--t27-text-muted) !important;
}
html:not(.t27-legacy) .footer h3,
html:not(.t27-legacy) .footer h4,
html:not(.t27-legacy)[data-theme="light"] .footer h3,
html:not(.t27-legacy)[data-theme="light"] .footer h4 {
  font-family: var(--t27-font-display) !important;
  font-size: var(--t27-text-sm) !important;
  letter-spacing: var(--t27-tracking-wide) !important;
  text-transform: uppercase !important;
  color: var(--t27-text) !important;
}

/* [H10] Origine : mobile-fix.css (media max-768, 22 !important) : h1 et body y
   sont forces a des tailles fixes. On y remet l'echelle fluide, sinon le
   comportement mobile diverge du desktop sans explication. */
@media screen and (max-width: 768px) {
  html:not(.t27-legacy) body { font-size: var(--t27-text-base) !important; }
  html:not(.t27-legacy) h1,
  html:not(.t27-legacy) .hero h1 {
    font-size: var(--t27-text-3xl) !important;
    line-height: var(--t27-leading-tight) !important;
  }
  html:not(.t27-legacy) .hero p { font-size: var(--t27-text-base) !important; }
}

/* [H11] Origine : responsive-fix.css .theme-toggle / .scroll-to-top /
   .whatsapp-float (2 a 4 !important chacun). On ne deplace rien : on aligne
   seulement le rayon, l'ombre et la cible tactile. */
html:not(.t27-legacy) .theme-toggle,
html:not(.t27-legacy) .scroll-to-top,
html:not(.t27-legacy) .whatsapp-float {
  border-radius: var(--t27-radius-full) !important;
  box-shadow: var(--t27-shadow-md) !important;
  min-inline-size: 44px;
  min-block-size: 44px;
}

/* [H12] Origine : blob.css .blob-1..4 (largeurs fixes 600/500/400 px).
   On borne la largeur pour supprimer le debordement en 390 px sans retirer
   les blobs (regle : ne rien supprimer). */
html:not(.t27-legacy) .blob-1,
html:not(.t27-legacy) .blob-2,
html:not(.t27-legacy) .blob-3,
html:not(.t27-legacy) .blob-4 {
  max-inline-size: 92vw !important;
  pointer-events: none;
}


/* ==========================================================================
   (I) UTILITAIRES DE BASE
   Nommes t27-* pour ne jamais entrer en collision avec l'existant.
   Toutes les proprietes sont logiques (inline/block) : le meme fichier sert
   de reference au jumeau RTL de tourakdigital.ma.
   ========================================================================== */

/* --- Conteneurs --- */
.t27-container { inline-size: 100%; max-inline-size: var(--t27-container); margin-inline: auto; padding-inline: var(--t27-gutter); }
.t27-container-narrow { inline-size: 100%; max-inline-size: var(--t27-container-narrow); margin-inline: auto; padding-inline: var(--t27-gutter); }
.t27-section { padding-block: var(--t27-section); }
.t27-section-alt { padding-block: var(--t27-section); background: var(--t27-bg-subtle); }

/* --- Pile verticale : un seul rythme d'espacement, pas de marges au hasard --- */
.t27-stack, .t27-stack-sm, .t27-stack-lg, .t27-stack-xl { display: flex; flex-direction: column; gap: var(--t27-space-4); }
.t27-stack-sm { gap: var(--t27-space-2); }
.t27-stack-lg { gap: var(--t27-space-6); }
.t27-stack-xl { gap: var(--t27-space-8); }

/* --- Rangee --- */
.t27-row, .t27-row-between { display: flex; flex-wrap: wrap; align-items: center; gap: var(--t27-space-3); }
.t27-row-between { justify-content: space-between; gap: var(--t27-space-4); }

/* --- Grille BENTO asymetrique ---
   Interdiction du spec : 3 cartes identiques alignees. Cette grille impose des
   tailles differentes. Les modificateurs se posent sur les enfants.
   12 colonnes en desktop, 6 en tablette, 1 en mobile. */
.t27-bento {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: var(--t27-space-5);
  align-items: stretch;
}
.t27-bento > * { min-inline-size: 0; }
.t27-cell-3 { grid-column: span 3; }   .t27-cell-4 { grid-column: span 4; }
.t27-cell-5 { grid-column: span 5; }   .t27-cell-6 { grid-column: span 6; }
.t27-cell-7 { grid-column: span 7; }   .t27-cell-8 { grid-column: span 8; }
.t27-cell-9 { grid-column: span 9; }   .t27-cell-12 { grid-column: span 12; }
.t27-cell-tall { grid-row: span 2; }

@media (max-width: 991px) {
  .t27-bento { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: var(--t27-space-4); }
  .t27-cell-3, .t27-cell-4 { grid-column: span 3; }
  .t27-cell-5, .t27-cell-6, .t27-cell-7, .t27-cell-8, .t27-cell-9, .t27-cell-12 { grid-column: span 6; }
  .t27-cell-tall { grid-row: span 1; }
}
@media (max-width: 640px) {
  .t27-bento { grid-template-columns: 1fr; gap: var(--t27-space-4); }
  .t27-cell-3, .t27-cell-4, .t27-cell-5, .t27-cell-6,
  .t27-cell-7, .t27-cell-8, .t27-cell-9, .t27-cell-12 { grid-column: span 1; }
}

/* --- Grille auto : pour les listes ou le nombre d'items varie --- */
.t27-grid-auto { display: grid; gap: var(--t27-space-5);
  grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr)); }

/* --- Carte 2027 --- */
.t27-card {
  background: var(--t27-surface); padding: var(--t27-space-6);
  border: var(--t27-border-width) solid var(--t27-border);
  border-radius: var(--t27-radius-lg); box-shadow: var(--t27-shadow-sm);
  transition: transform var(--t27-dur-2) var(--t27-ease-out),
              box-shadow var(--t27-dur-2) var(--t27-ease-out),
              border-color var(--t27-dur-2) var(--t27-ease-out);
}
.t27-card:hover { box-shadow: var(--t27-shadow-lg); border-color: var(--t27-border-accent); transform: translateY(-3px); }
.t27-card-flat { box-shadow: none; background: var(--t27-bg-subtle); }
.t27-card-accent { background: var(--t27-accent-soft); border-color: var(--t27-border-accent); }

/* --- Boutons 2027 (nouveaux composants ; les .btn existants sont en H3) --- */
.t27-btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: var(--t27-space-2); min-block-size: 48px; cursor: pointer;
  padding-inline: var(--t27-space-5); padding-block: var(--t27-space-3);
  border-radius: var(--t27-radius-full);
  border: var(--t27-border-width) solid transparent;
  font-family: var(--t27-font-text); font-size: var(--t27-text-sm);
  font-weight: var(--t27-weight-semibold); text-decoration: none;
  transition: transform var(--t27-dur-2) var(--t27-ease-out),
              box-shadow var(--t27-dur-2) var(--t27-ease-out),
              background-color var(--t27-dur-2) var(--t27-ease-out),
              border-color var(--t27-dur-2) var(--t27-ease-out);
}
.t27-btn-primary { background: var(--t27-indigo-600); color: #fff; }
.t27-btn-primary:hover { background: var(--t27-indigo-700); box-shadow: var(--t27-shadow-accent); transform: translateY(-2px); }
.t27-btn-primary:active { transform: translateY(0) scale(0.985); }
.t27-btn-ghost { background: transparent; color: var(--t27-text); border-color: var(--t27-border-strong); }
.t27-btn-ghost:hover { border-color: var(--t27-accent); color: var(--t27-accent-text); }
.t27-btn-ghost:active { transform: scale(0.985); }
.t27-btn[disabled], .t27-btn[aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; }

/* --- Pastille / badge. L'ambre reste cantonne ici et aux marqueurs. --- */
.t27-badge {
  display: inline-flex; align-items: center; gap: var(--t27-space-2);
  padding-inline: var(--t27-space-3); padding-block: var(--t27-space-1);
  border-radius: var(--t27-radius-full);
  font-size: var(--t27-text-xs); font-weight: var(--t27-weight-semibold);
  background: var(--t27-accent-soft); color: var(--t27-accent-text);
  border: var(--t27-border-width) solid var(--t27-border-accent);
}
.t27-badge-amber { background: var(--t27-accent-2-soft); color: var(--t27-accent-2-text); border-color: var(--t27-accent-2); }

/* --- Filet de separation teinte --- */
.t27-rule { block-size: 1px; background: var(--t27-border); border: 0; margin-block: var(--t27-space-7); }

/* --- Lien texte --- */
.t27-link {
  color: var(--t27-accent-text); text-decoration: underline;
  text-decoration-thickness: 1px; text-underline-offset: 0.22em;
  transition: text-decoration-color var(--t27-dur-1) var(--t27-ease-out);
}
.t27-link:hover { text-decoration-thickness: 2px; }

/* --- Accessibilite : contenu reserve aux lecteurs d'ecran --- */
.t27-sr-only { position: absolute; inline-size: 1px; block-size: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }

/* --- Zone de scroll horizontal maitrisee (tableaux, bandeaux) --- */
.t27-scroll-x { overflow-x: auto; overscroll-behavior-inline: contain; -webkit-overflow-scrolling: touch; }

/* ============================ FIN tk-2027.css ============================= */
