/*!
 * Fontes : SIL Open Font License, Version 1.1 (https://openfontlicense.org)
 * Bodoni Moda — Copyright 2020 The Bodoni Moda Project Authors (https://github.com/indestructible-type/Bodoni) — SIL Open Font License 1.1 — fonts/costruzioni/BodoniModa-OFL.txt
 * Instrument Sans — Copyright 2022 The Instrument Sans Project Authors (https://github.com/Instrument/instrument-sans) — SIL Open Font License 1.1 — fonts/costruzioni/InstrumentSans-OFL.txt
 * IBM Plex Mono — Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" — SIL Open Font License 1.1 — fonts/costruzioni/IBMPlexMono-OFL.txt
 */

/* ============ 1. Fontes de la maison (OFL) ============ */
@font-face {
  font-family: "CV Bodoni Moda";
  src: url("fonts/costruzioni/BodoniModa-roman-latin.woff2") format("woff2");
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  ascent-override: 112.50%;
  descent-override: 40.00%;
  line-gap-override: 0%;
}
@font-face {
  font-family: "CV Bodoni Moda";
  src: url("fonts/costruzioni/BodoniModa-roman-latin-ext.woff2") format("woff2");
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
  ascent-override: 112.50%;
  descent-override: 40.00%;
  line-gap-override: 0%;
}
@font-face {
  font-family: "CV Bodoni Moda";
  src: url("fonts/costruzioni/BodoniModa-italic-latin.woff2") format("woff2");
  font-style: italic;
  font-weight: 400 900;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  ascent-override: 112.50%;
  descent-override: 40.00%;
  line-gap-override: 0%;
}
@font-face {
  font-family: "CV Bodoni Moda";
  src: url("fonts/costruzioni/BodoniModa-italic-latin-ext.woff2") format("woff2");
  font-style: italic;
  font-weight: 400 900;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
  ascent-override: 112.50%;
  descent-override: 40.00%;
  line-gap-override: 0%;
}
@font-face {
  font-family: "CV Instrument Sans";
  src: url("fonts/costruzioni/InstrumentSans-roman-latin.woff2") format("woff2");
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  ascent-override: 97.00%;
  descent-override: 25.00%;
  line-gap-override: 0%;
}
@font-face {
  font-family: "CV Instrument Sans";
  src: url("fonts/costruzioni/InstrumentSans-italic-latin.woff2") format("woff2");
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  ascent-override: 97.00%;
  descent-override: 25.00%;
  line-gap-override: 0%;
}
@font-face {
  font-family: "CV Plex Mono";
  src: url("fonts/costruzioni/IBMPlexMono-400-latin.woff2") format("woff2");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  ascent-override: 102.50%;
  descent-override: 27.50%;
  line-gap-override: 0%;
}
@font-face {
  font-family: "CV Plex Mono";
  src: url("fonts/costruzioni/IBMPlexMono-500-latin.woff2") format("woff2");
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  ascent-override: 102.50%;
  descent-override: 27.50%;
  line-gap-override: 0%;
}

/* ============ 2. Espaces typographiques absentes des sous-ensembles latin (U+2009, U+200A, U+202F) ============
   Mesuré : aucune des fontes retenues ne contient U+202F (espace fine insécable FR). Cette face locale ne sert QUE
   ces trois points de code ; elle évite qu'une police système arbitraire les dessine. */
@font-face {
  font-family: "CV Espaces";
  src: local("Times New Roman"), local("TimesNewRomanPSMT"), local("Liberation Serif"), local("Roboto"), local("Noto Serif");
  unicode-range: U+2009, U+200A, U+202F;
  font-display: block;
}

/* ============ 3. Replis métriques (anti-CLS) — size-adjust mesuré sur les textes réels, overrides = métriques de la fonte web ============ */
@font-face { /* macOS, iOS, Windows ; Linux via Liberation Serif (métriquement compatible) — rôles : display-1, display-2, menu-salon */
  font-family: "CV Repli display";
  src: local("Times New Roman"), local("TimesNewRomanPSMT"), local("Liberation Serif"), local("LiberationSerif");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 111.69%;
  ascent-override: 100.73%;
  descent-override: 35.81%;
  line-gap-override: 0%;
}
@font-face { /* Android — rôles : display-1, display-2, menu-salon */
  font-family: "CV Repli display A";
  src: local("Noto Serif"), local("NotoSerif");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 95.33%;
  ascent-override: 118.01%;
  descent-override: 41.96%;
  line-gap-override: 0%;
}
@font-face { /* macOS, iOS, Windows ; Linux via Liberation Serif (métriquement compatible) — rôles : titre-3, titre-4 */
  font-family: "CV Repli display 2";
  src: local("Times New Roman"), local("TimesNewRomanPSMT"), local("Liberation Serif"), local("LiberationSerif");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 114.08%;
  ascent-override: 98.62%;
  descent-override: 35.06%;
  line-gap-override: 0%;
}
@font-face { /* Android — rôles : titre-3, titre-4, chiffre-display */
  font-family: "CV Repli display A 2";
  src: local("Noto Serif"), local("NotoSerif");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 97.49%;
  ascent-override: 115.4%;
  descent-override: 41.03%;
  line-gap-override: 0%;
}
@font-face { /* macOS, iOS, Windows ; Linux — rôles : chapo, citation */
  font-family: "CV Repli display italique";
  src: local("Times New Roman Italic"), local("TimesNewRomanPS-ItalicMT"), local("Liberation Serif Italic"), local("LiberationSerif-Italic");
  font-style: italic;
  font-weight: 100 900;
  size-adjust: 106.85%;
  ascent-override: 105.29%;
  descent-override: 37.44%;
  line-gap-override: 0%;
}
@font-face { /* Android — rôles : chapo, citation */
  font-family: "CV Repli display italique A";
  src: local("Noto Serif Italic"), local("NotoSerif-Italic");
  font-style: italic;
  font-weight: 100 900;
  size-adjust: 93.70%;
  ascent-override: 120.06%;
  descent-override: 42.69%;
  line-gap-override: 0%;
}
@font-face { /* macOS, iOS, Windows ; Linux via Liberation Serif (métriquement compatible) — rôles : chiffre-display */
  font-family: "CV Repli display 3";
  src: local("Times New Roman"), local("TimesNewRomanPSMT"), local("Liberation Serif"), local("LiberationSerif");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 108.38%;
  ascent-override: 103.8%;
  descent-override: 36.91%;
  line-gap-override: 0%;
}
@font-face { /* macOS, iOS, Windows ; Linux via Liberation Sans — rôles : texte, texte-petit, texte-legal, champ, message */
  font-family: "CV Repli texte";
  src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("LiberationSans");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 101.62%;
  ascent-override: 95.45%;
  descent-override: 24.6%;
  line-gap-override: 0%;
}
@font-face { /* Android — rôles : texte, texte-petit, texte-legal, champ, message, chiffre-donnee */
  font-family: "CV Repli texte A";
  src: local("Roboto"), local("Roboto-Regular");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 102.55%;
  ascent-override: 94.59%;
  descent-override: 24.38%;
  line-gap-override: 0%;
}
@font-face { /* macOS, iOS, Windows — rôles : legende */
  font-family: "CV Repli texte italique";
  src: local("Arial Italic"), local("Arial-ItalicMT"), local("Liberation Sans Italic");
  font-style: italic;
  font-weight: 100 900;
  size-adjust: 101.25%;
  ascent-override: 95.8%;
  descent-override: 24.69%;
  line-gap-override: 0%;
}
@font-face { /* Android — rôles : legende */
  font-family: "CV Repli texte italique A";
  src: local("Roboto"), local("Roboto-Regular");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 102.17%;
  ascent-override: 94.94%;
  descent-override: 24.47%;
  line-gap-override: 0%;
}
@font-face { /* macOS, iOS, Windows ; Linux via Liberation Sans — rôles : surtitre, nav, bouton, label */
  font-family: "CV Repli texte 2";
  src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("LiberationSans");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 98.16%;
  ascent-override: 98.82%;
  descent-override: 25.47%;
  line-gap-override: 0%;
}
@font-face { /* Android — rôles : surtitre, nav, bouton, label */
  font-family: "CV Repli texte A 2";
  src: local("Roboto"), local("Roboto-Regular");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 104.98%;
  ascent-override: 92.4%;
  descent-override: 23.81%;
  line-gap-override: 0%;
}
@font-face { /* macOS, iOS, Windows ; Linux via Liberation Sans — rôles : chiffre-donnee */
  font-family: "CV Repli texte 3";
  src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("LiberationSans");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 104.42%;
  ascent-override: 92.89%;
  descent-override: 23.94%;
  line-gap-override: 0%;
}
@font-face { /* macOS, Windows ; Linux via Liberation Mono — rôles : annotation */
  font-family: "CV Repli technique";
  src: local("Courier New"), local("CourierNewPSMT"), local("Liberation Mono"), local("LiberationMono");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 99.98%;
  ascent-override: 102.52%;
  descent-override: 27.51%;
  line-gap-override: 0%;
}
@font-face { /* Android — rôles : annotation */
  font-family: "CV Repli technique A";
  src: local("Droid Sans Mono"), local("DroidSansMono"), local("Roboto Mono");
  font-style: normal;
  font-weight: 100 900;
  size-adjust: 99.98%;
  ascent-override: 102.52%;
  descent-override: 27.51%;
  line-gap-override: 0%;
}

/* ============ 4. Jetons ============ */
:root {
  --cv-famille-display: "CV Bodoni Moda", "CV Espaces", "CV Repli display", "CV Repli display A", serif;
  --cv-famille-texte: "CV Instrument Sans", "CV Espaces", "CV Repli texte", "CV Repli texte A", sans-serif;
  --cv-famille-technique: "CV Plex Mono", "CV Espaces", "CV Repli technique", "CV Repli technique A", monospace;
  --cv-c-papier: #F2EEE6; /* calcaire ivoire */
  --cv-c-encre: #15171A; /* encre obsidienne */
  --cv-c-encre-2: #4A4D52; /* pierre grise */
  --cv-c-accent: #6B2330; /* bordeaux minéral */
  --cv-c-sombre: #101214; /* obsidienne */
  --cv-c-sur-sombre: #ECE7DE; /* ivoire */
  --cv-c-sur-sombre-2: #B3ADA4; /* argent patiné clair */
  --cv-c-filet: #8C9096; /* argent patiné (filets seulement, jamais texte) */
  --cv-mesure-texte: 66ch;
  --cv-mesure-chapo: 34em;
  --cv-mesure-titre: 18em;
  --cv-taille-min: 0.75rem; /* plancher absolu : 12 px */
  /* display-1 — h1 d’ouverture, héros — 320:38px · 390:44px · 768:64px · 1440:104px · 1920:120px */
  --cv-ff-display-1: "CV Bodoni Moda", "CV Espaces", "CV Repli display", "CV Repli display A", serif;
  --cv-fs-display-1: clamp(2.375rem, 0.6607rem + 8.5714vw, 2.75rem);
  --cv-fw-display-1: 400;
  --cv-fst-display-1: normal;
  --cv-lh-display-1: 1.04;
  --cv-ls-display-1: -0.008em;
  --cv-tt-display-1: none;
  --cv-ffs-display-1: normal;
  /* display-2 — h2 de section, titres de chapitre — 320:31px · 390:34px · 768:46px · 1440:68px · 1920:76px */
  --cv-ff-display-2: "CV Bodoni Moda", "CV Espaces", "CV Repli display", "CV Repli display A", serif;
  --cv-fs-display-2: clamp(1.9375rem, 1.0804rem + 4.2857vw, 2.125rem);
  --cv-fw-display-2: 400;
  --cv-fst-display-2: normal;
  --cv-lh-display-2: 1.08;
  --cv-ls-display-2: -0.005em;
  --cv-tt-display-2: none;
  --cv-ffs-display-2: normal;
  /* titre-3 — h3, titres de cartes projet — 320:24px · 390:26px · 768:30px · 1440:38px · 1920:42px */
  --cv-ff-titre-3: "CV Bodoni Moda", "CV Espaces", "CV Repli display 2", "CV Repli display A 2", serif;
  --cv-fs-titre-3: clamp(1.5rem, 0.9286rem + 2.8571vw, 1.625rem);
  --cv-fw-titre-3: 500;
  --cv-fst-titre-3: normal;
  --cv-lh-titre-3: 1.16;
  --cv-ls-titre-3: 0;
  --cv-tt-titre-3: none;
  --cv-ffs-titre-3: normal;
  /* titre-4 — h4–h6, intertitres — 320:20px · 390:21px · 768:22px · 1440:26px · 1920:28px */
  --cv-ff-titre-4: "CV Bodoni Moda", "CV Espaces", "CV Repli display 2", "CV Repli display A 2", serif;
  --cv-fs-titre-4: clamp(1.25rem, 0.9643rem + 1.4286vw, 1.3125rem);
  --cv-fw-titre-4: 500;
  --cv-fst-titre-4: normal;
  --cv-lh-titre-4: 1.25;
  --cv-ls-titre-4: 0;
  --cv-tt-titre-4: none;
  --cv-ffs-titre-4: normal;
  /* chapo — chapô, accroche sous h1 — 320:20px · 390:21px · 768:22px · 1440:27px · 1920:30px */
  --cv-ff-chapo: "CV Bodoni Moda", "CV Espaces", "CV Repli display italique", "CV Repli display italique A", serif;
  --cv-fs-chapo: clamp(1.25rem, 0.9643rem + 1.4286vw, 1.3125rem);
  --cv-fw-chapo: 450;
  --cv-fst-chapo: italic;
  --cv-lh-chapo: 1.42;
  --cv-ls-chapo: 0;
  --cv-tt-chapo: none;
  --cv-ffs-chapo: normal;
  /* citation — blockquote, exergue, parole d’artisan — 320:24px · 390:26px · 768:30px · 1440:40px · 1920:46px */
  --cv-ff-citation: "CV Bodoni Moda", "CV Espaces", "CV Repli display italique", "CV Repli display italique A", serif;
  --cv-fs-citation: clamp(1.5rem, 0.9286rem + 2.8571vw, 1.625rem);
  --cv-fw-citation: 450;
  --cv-fst-citation: italic;
  --cv-lh-citation: 1.22;
  --cv-ls-citation: 0;
  --cv-tt-citation: none;
  --cv-ffs-citation: normal;
  /* chiffre-display — années, chiffres clés (1948, 62 reliefs) — 320:44px · 390:52px · 768:64px · 1440:88px · 1920:104px */
  --cv-ff-chiffre-display: "CV Bodoni Moda", "CV Espaces", "CV Repli display 3", "CV Repli display A 2", serif;
  --cv-fs-chiffre-display: clamp(2.75rem, 0.4643rem + 11.4286vw, 3.25rem);
  --cv-fw-chiffre-display: 400;
  --cv-fst-chiffre-display: normal;
  --cv-lh-chiffre-display: 1;
  --cv-ls-chiffre-display: -0.01em;
  --cv-tt-chiffre-display: none;
  --cv-ffs-chiffre-display: "lnum" 1, "pnum" 1;
  /* menu-salon — menu-salon « trois parcours » (grands liens) — 320:32px · 390:36px · 768:48px · 1440:60px · 1920:68px */
  --cv-ff-menu-salon: "CV Bodoni Moda", "CV Espaces", "CV Repli display", "CV Repli display A", serif;
  --cv-fs-menu-salon: clamp(2rem, 0.8571rem + 5.7143vw, 2.25rem);
  --cv-fw-menu-salon: 400;
  --cv-fst-menu-salon: normal;
  --cv-lh-menu-salon: 1.08;
  --cv-ls-menu-salon: -0.004em;
  --cv-tt-menu-salon: none;
  --cv-ffs-menu-salon: normal;
  /* texte — paragraphes courants — 320:17px · 390:17px · 768:17px · 1440:18px · 1920:19px */
  --cv-ff-texte: "CV Instrument Sans", "CV Espaces", "CV Repli texte", "CV Repli texte A", sans-serif;
  --cv-fs-texte: 1.0625rem;
  --cv-fw-texte: 400;
  --cv-fst-texte: normal;
  --cv-lh-texte: 1.62;
  --cv-ls-texte: 0;
  --cv-tt-texte: none;
  --cv-ffs-texte: normal;
  /* texte-petit — notes, footer, consentement, contenus secondaires — 320:15px · 390:15px · 768:15px · 1440:15px · 1920:16px */
  --cv-ff-texte-petit: "CV Instrument Sans", "CV Espaces", "CV Repli texte", "CV Repli texte A", sans-serif;
  --cv-fs-texte-petit: 0.9375rem;
  --cv-fw-texte-petit: 400;
  --cv-fst-texte-petit: normal;
  --cv-lh-texte-petit: 1.6;
  --cv-ls-texte-petit: 0.002em;
  --cv-tt-texte-petit: none;
  --cv-ffs-texte-petit: normal;
  /* texte-legal — mentions légales, confidentialité — 320:16px · 390:16px · 768:16px · 1440:16.5px · 1920:17px */
  --cv-ff-texte-legal: "CV Instrument Sans", "CV Espaces", "CV Repli texte", "CV Repli texte A", sans-serif;
  --cv-fs-texte-legal: 1rem;
  --cv-fw-texte-legal: 400;
  --cv-fst-texte-legal: normal;
  --cv-lh-texte-legal: 1.7;
  --cv-ls-texte-legal: 0;
  --cv-tt-texte-legal: none;
  --cv-ffs-texte-legal: normal;
  /* legende — figcaption, crédits photo — 320:13px · 390:13px · 768:13px · 1440:14px · 1920:14px */
  --cv-ff-legende: "CV Instrument Sans", "CV Espaces", "CV Repli texte italique", "CV Repli texte italique A", sans-serif;
  --cv-fs-legende: 0.8125rem;
  --cv-fw-legende: 400;
  --cv-fst-legende: italic;
  --cv-lh-legende: 1.5;
  --cv-ls-legende: 0.005em;
  --cv-tt-legende: none;
  --cv-ffs-legende: normal;
  /* surtitre — surtitres, catégories, étiquettes — 320:12px · 390:12px · 768:12px · 1440:12.5px · 1920:13px */
  --cv-ff-surtitre: "CV Instrument Sans", "CV Espaces", "CV Repli texte 2", "CV Repli texte A 2", sans-serif;
  --cv-fs-surtitre: 0.75rem;
  --cv-fw-surtitre: 600;
  --cv-fst-surtitre: normal;
  --cv-lh-surtitre: 1.3;
  --cv-ls-surtitre: 0.16em;
  --cv-tt-surtitre: uppercase;
  --cv-ffs-surtitre: normal;
  /* nav — barre de navigation, sélecteur de langue, fil d’Ariane — 320:13px · 390:13px · 768:13px · 1440:13.5px · 1920:14px */
  --cv-ff-nav: "CV Instrument Sans", "CV Espaces", "CV Repli texte 2", "CV Repli texte A 2", sans-serif;
  --cv-fs-nav: 0.8125rem;
  --cv-fw-nav: 500;
  --cv-fst-nav: normal;
  --cv-lh-nav: 1.2;
  --cv-ls-nav: 0.12em;
  --cv-tt-nav: uppercase;
  --cv-ffs-nav: normal;
  /* bouton — CTA, boutons (hauteur min. 44 px) — 320:13px · 390:13px · 768:13px · 1440:13.5px · 1920:14px */
  --cv-ff-bouton: "CV Instrument Sans", "CV Espaces", "CV Repli texte 2", "CV Repli texte A 2", sans-serif;
  --cv-fs-bouton: 0.8125rem;
  --cv-fw-bouton: 600;
  --cv-fst-bouton: normal;
  --cv-lh-bouton: 1.1;
  --cv-ls-bouton: 0.14em;
  --cv-tt-bouton: uppercase;
  --cv-ffs-bouton: normal;
  /* champ — input, select, textarea, placeholder (≥ 16 px : pas de zoom iOS) — 320:17px · 390:17px · 768:17px · 1440:17px · 1920:17px */
  --cv-ff-champ: "CV Instrument Sans", "CV Espaces", "CV Repli texte", "CV Repli texte A", sans-serif;
  --cv-fs-champ: 1.0625rem;
  --cv-fw-champ: 400;
  --cv-fst-champ: normal;
  --cv-lh-champ: 1.4;
  --cv-ls-champ: 0;
  --cv-tt-champ: none;
  --cv-ffs-champ: normal;
  /* label — label de champ, légende de fieldset — 320:12px · 390:12px · 768:12px · 1440:12.5px · 1920:13px */
  --cv-ff-label: "CV Instrument Sans", "CV Espaces", "CV Repli texte 2", "CV Repli texte A 2", sans-serif;
  --cv-fs-label: 0.75rem;
  --cv-fw-label: 600;
  --cv-fst-label: normal;
  --cv-lh-label: 1.3;
  --cv-ls-label: 0.12em;
  --cv-tt-label: uppercase;
  --cv-ffs-label: normal;
  /* message — erreur, succès, aide de champ, bulles d’assistant — 320:15px · 390:15px · 768:15px · 1440:15px · 1920:16px */
  --cv-ff-message: "CV Instrument Sans", "CV Espaces", "CV Repli texte", "CV Repli texte A", sans-serif;
  --cv-fs-message: 0.9375rem;
  --cv-fw-message: 500;
  --cv-fst-message: normal;
  --cv-lh-message: 1.5;
  --cv-ls-message: 0;
  --cv-tt-message: none;
  --cv-ffs-message: normal;
  /* chiffre-donnee — prix, surfaces, tableaux, compteurs — 320:15px · 390:15px · 768:16px · 1440:16px · 1920:17px */
  --cv-ff-chiffre-donnee: "CV Instrument Sans", "CV Espaces", "CV Repli texte 3", "CV Repli texte A", sans-serif;
  --cv-fs-chiffre-donnee: 0.9375rem;
  --cv-fw-chiffre-donnee: 500;
  --cv-fst-chiffre-donnee: normal;
  --cv-lh-chiffre-donnee: 1.4;
  --cv-ls-chiffre-donnee: 0;
  --cv-tt-chiffre-donnee: none;
  --cv-ffs-chiffre-donnee: "tnum" 1, "lnum" 1;
  /* annotation — cotes, coordonnées, numéros de chantier, horodatage, météo — 320:12px · 390:12px · 768:12.5px · 1440:13px · 1920:13.5px */
  --cv-ff-annotation: "CV Plex Mono", "CV Espaces", "CV Repli technique", "CV Repli technique A", monospace;
  --cv-fs-annotation: 0.75rem;
  --cv-fw-annotation: 400;
  --cv-fst-annotation: normal;
  --cv-lh-annotation: 1.45;
  --cv-ls-annotation: 0.02em;
  --cv-tt-annotation: none;
  --cv-ffs-annotation: normal;
}
@media (min-width: 390px) { /* tranche 390→768 px */
  :root {
    --cv-fs-display-1: clamp(2.75rem, 1.4603rem + 5.291vw, 4rem);
    --cv-fs-display-2: clamp(2.125rem, 1.3512rem + 3.1746vw, 2.875rem);
    --cv-fs-titre-3: clamp(1.625rem, 1.3671rem + 1.0582vw, 1.875rem);
    --cv-fs-titre-4: clamp(1.3125rem, 1.248rem + 0.2646vw, 1.375rem);
    --cv-fs-chapo: clamp(1.3125rem, 1.248rem + 0.2646vw, 1.375rem);
    --cv-fs-citation: clamp(1.625rem, 1.3671rem + 1.0582vw, 1.875rem);
    --cv-fs-chiffre-display: clamp(3.25rem, 2.4762rem + 3.1746vw, 4rem);
    --cv-fs-menu-salon: clamp(2.25rem, 1.4762rem + 3.1746vw, 3rem);
    --cv-fs-texte: 1.0625rem;
    --cv-fs-texte-petit: 0.9375rem;
    --cv-fs-texte-legal: 1rem;
    --cv-fs-legende: 0.8125rem;
    --cv-fs-surtitre: 0.75rem;
    --cv-fs-nav: 0.8125rem;
    --cv-fs-bouton: 0.8125rem;
    --cv-fs-champ: 1.0625rem;
    --cv-fs-label: 0.75rem;
    --cv-fs-message: 0.9375rem;
    --cv-fs-chiffre-donnee: clamp(0.9375rem, 0.873rem + 0.2646vw, 1rem);
    --cv-fs-annotation: clamp(0.75rem, 0.7178rem + 0.1323vw, 0.7813rem);
  }
}
@media (min-width: 768px) { /* tranche 768→1440 px */
  :root {
    --cv-fs-display-1: clamp(4rem, 1.1429rem + 5.9524vw, 6.5rem);
    --cv-lh-display-1: 0.98;
    --cv-ls-display-1: -0.022em;
    --cv-fs-display-2: clamp(2.875rem, 1.3036rem + 3.2738vw, 4.25rem);
    --cv-lh-display-2: 1.03;
    --cv-ls-display-2: -0.015em;
    --cv-fs-titre-3: clamp(1.875rem, 1.3036rem + 1.1905vw, 2.375rem);
    --cv-lh-titre-3: 1.14;
    --cv-ls-titre-3: -0.006em;
    --cv-fs-titre-4: clamp(1.375rem, 1.0893rem + 0.5952vw, 1.625rem);
    --cv-lh-titre-4: 1.22;
    --cv-ls-titre-4: 0;
    --cv-fs-chapo: clamp(1.375rem, 1.0179rem + 0.744vw, 1.6875rem);
    --cv-lh-chapo: 1.4;
    --cv-ls-chapo: 0;
    --cv-fs-citation: clamp(1.875rem, 1.1607rem + 1.4881vw, 2.5rem);
    --cv-lh-citation: 1.18;
    --cv-ls-citation: -0.006em;
    --cv-fs-chiffre-display: clamp(4rem, 2.2857rem + 3.5714vw, 5.5rem);
    --cv-lh-chiffre-display: 0.96;
    --cv-ls-chiffre-display: -0.02em;
    --cv-fs-menu-salon: clamp(3rem, 2.1429rem + 1.7857vw, 3.75rem);
    --cv-lh-menu-salon: 1.06;
    --cv-ls-menu-salon: -0.012em;
    --cv-fs-texte: clamp(1.0625rem, 0.9911rem + 0.1488vw, 1.125rem);
    --cv-lh-texte: 1.66;
    --cv-ls-texte: 0;
    --cv-fs-texte-petit: 0.9375rem;
    --cv-lh-texte-petit: 1.6;
    --cv-ls-texte-petit: 0.002em;
    --cv-fs-texte-legal: clamp(1rem, 0.9643rem + 0.0744vw, 1.0313rem);
    --cv-lh-texte-legal: 1.72;
    --cv-ls-texte-legal: 0;
    --cv-fs-legende: clamp(0.8125rem, 0.7411rem + 0.1488vw, 0.875rem);
    --cv-lh-legende: 1.5;
    --cv-ls-legende: 0.005em;
    --cv-fs-surtitre: clamp(0.75rem, 0.7143rem + 0.0744vw, 0.7813rem);
    --cv-lh-surtitre: 1.3;
    --cv-ls-surtitre: 0.18em;
    --cv-fs-nav: clamp(0.8125rem, 0.7768rem + 0.0744vw, 0.8438rem);
    --cv-lh-nav: 1.2;
    --cv-ls-nav: 0.12em;
    --cv-fs-bouton: clamp(0.8125rem, 0.7768rem + 0.0744vw, 0.8438rem);
    --cv-lh-bouton: 1.1;
    --cv-ls-bouton: 0.14em;
    --cv-fs-champ: 1.0625rem;
    --cv-lh-champ: 1.4;
    --cv-ls-champ: 0;
    --cv-fs-label: clamp(0.75rem, 0.7143rem + 0.0744vw, 0.7813rem);
    --cv-lh-label: 1.3;
    --cv-ls-label: 0.12em;
    --cv-fs-message: 0.9375rem;
    --cv-lh-message: 1.5;
    --cv-ls-message: 0;
    --cv-fs-chiffre-donnee: 1rem;
    --cv-lh-chiffre-donnee: 1.4;
    --cv-ls-chiffre-donnee: 0;
    --cv-fs-annotation: clamp(0.7813rem, 0.7455rem + 0.0744vw, 0.8125rem);
    --cv-lh-annotation: 1.45;
    --cv-ls-annotation: 0.02em;
  }
}
@media (min-width: 1440px) { /* tranche 1440→1920 px */
  :root {
    --cv-fs-display-1: clamp(6.5rem, 3.5rem + 3.3333vw, 7.5rem);
    --cv-fs-display-2: clamp(4.25rem, 2.75rem + 1.6667vw, 4.75rem);
    --cv-fs-titre-3: clamp(2.375rem, 1.625rem + 0.8333vw, 2.625rem);
    --cv-fs-titre-4: clamp(1.625rem, 1.25rem + 0.4167vw, 1.75rem);
    --cv-fs-chapo: clamp(1.6875rem, 1.125rem + 0.625vw, 1.875rem);
    --cv-fs-citation: clamp(2.5rem, 1.375rem + 1.25vw, 2.875rem);
    --cv-fs-chiffre-display: clamp(5.5rem, 2.5rem + 3.3333vw, 6.5rem);
    --cv-fs-menu-salon: clamp(3.75rem, 2.25rem + 1.6667vw, 4.25rem);
    --cv-fs-texte: clamp(1.125rem, 0.9375rem + 0.2083vw, 1.1875rem);
    --cv-fs-texte-petit: clamp(0.9375rem, 0.75rem + 0.2083vw, 1rem);
    --cv-fs-texte-legal: clamp(1.0313rem, 0.9375rem + 0.1042vw, 1.0625rem);
    --cv-fs-legende: 0.875rem;
    --cv-fs-surtitre: clamp(0.7813rem, 0.6875rem + 0.1042vw, 0.8125rem);
    --cv-fs-nav: clamp(0.8438rem, 0.75rem + 0.1042vw, 0.875rem);
    --cv-fs-bouton: clamp(0.8438rem, 0.75rem + 0.1042vw, 0.875rem);
    --cv-fs-champ: 1.0625rem;
    --cv-fs-label: clamp(0.7813rem, 0.6875rem + 0.1042vw, 0.8125rem);
    --cv-fs-message: clamp(0.9375rem, 0.75rem + 0.2083vw, 1rem);
    --cv-fs-chiffre-donnee: clamp(1rem, 0.8125rem + 0.2083vw, 1.0625rem);
    --cv-fs-annotation: clamp(0.8125rem, 0.7188rem + 0.1042vw, 0.8438rem);
  }
}
@media (min-width: 1920px) { /* plafond ≥ 1920 px */
  :root {
    --cv-fs-display-1: 7.5rem;
    --cv-fs-display-2: 4.75rem;
    --cv-fs-titre-3: 2.625rem;
    --cv-fs-titre-4: 1.75rem;
    --cv-fs-chapo: 1.875rem;
    --cv-fs-citation: 2.875rem;
    --cv-fs-chiffre-display: 6.5rem;
    --cv-fs-menu-salon: 4.25rem;
    --cv-fs-texte: 1.1875rem;
    --cv-fs-texte-petit: 1rem;
    --cv-fs-texte-legal: 1.0625rem;
    --cv-fs-legende: 0.875rem;
    --cv-fs-surtitre: 0.8125rem;
    --cv-fs-nav: 0.875rem;
    --cv-fs-bouton: 0.875rem;
    --cv-fs-champ: 1.0625rem;
    --cv-fs-label: 0.8125rem;
    --cv-fs-message: 1rem;
    --cv-fs-chiffre-donnee: 1.0625rem;
    --cv-fs-annotation: 0.8438rem;
  }
}

/* ============ 5. Couche de base : TOUS les contextes possédés reçoivent un jeton ============ */
@layer cv-typo-base, cv-typo-utilitaires;
@layer cv-typo-base {
  html { font-family: var(--cv-ff-texte); font-size: 100%; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; font-synthesis: none; font-optical-sizing: auto; font-kerning: normal; font-variant-ligatures: common-ligatures; text-rendering: optimizeLegibility; }
  body { font-family: var(--cv-ff-texte); font-size: var(--cv-fs-texte); font-weight: var(--cv-fw-texte); font-style: var(--cv-fst-texte); line-height: var(--cv-lh-texte); letter-spacing: var(--cv-ls-texte); text-transform: var(--cv-tt-texte); font-feature-settings: var(--cv-ffs-texte); color: var(--cv-c-encre); }
  :lang(fr) { quotes: "«\202F" "\202F»" "“" "”"; }
  :lang(it) { quotes: "«" "»" "“" "”"; }
  :lang(en) { quotes: "“" "”" "‘" "’"; }
  h1 { font-family: var(--cv-ff-display-1); font-size: var(--cv-fs-display-1); font-weight: var(--cv-fw-display-1); font-style: var(--cv-fst-display-1); line-height: var(--cv-lh-display-1); letter-spacing: var(--cv-ls-display-1); text-transform: var(--cv-tt-display-1); font-feature-settings: var(--cv-ffs-display-1); text-wrap: balance; hyphens: manual; overflow-wrap: break-word; }
  h2 { font-family: var(--cv-ff-display-2); font-size: var(--cv-fs-display-2); font-weight: var(--cv-fw-display-2); font-style: var(--cv-fst-display-2); line-height: var(--cv-lh-display-2); letter-spacing: var(--cv-ls-display-2); text-transform: var(--cv-tt-display-2); font-feature-settings: var(--cv-ffs-display-2); text-wrap: balance; hyphens: manual; overflow-wrap: break-word; }
  h3 { font-family: var(--cv-ff-titre-3); font-size: var(--cv-fs-titre-3); font-weight: var(--cv-fw-titre-3); font-style: var(--cv-fst-titre-3); line-height: var(--cv-lh-titre-3); letter-spacing: var(--cv-ls-titre-3); text-transform: var(--cv-tt-titre-3); font-feature-settings: var(--cv-ffs-titre-3); text-wrap: balance; overflow-wrap: break-word; }
  h4, h5, h6 { font-family: var(--cv-ff-titre-4); font-size: var(--cv-fs-titre-4); font-weight: var(--cv-fw-titre-4); font-style: var(--cv-fst-titre-4); line-height: var(--cv-lh-titre-4); letter-spacing: var(--cv-ls-titre-4); text-transform: var(--cv-tt-titre-4); font-feature-settings: var(--cv-ffs-titre-4); text-wrap: balance; overflow-wrap: break-word; }
  p, li, dd, dt { text-wrap: pretty; overflow-wrap: break-word; }
  :is(p, li, dd):is(:lang(fr), :lang(it), :lang(en)) { hyphens: auto; -webkit-hyphens: auto; hyphenate-limit-chars: 10 4 4; }
  small, .cv-note { font-family: var(--cv-ff-texte-petit); font-size: var(--cv-fs-texte-petit); font-weight: var(--cv-fw-texte-petit); font-style: var(--cv-fst-texte-petit); line-height: var(--cv-lh-texte-petit); letter-spacing: var(--cv-ls-texte-petit); text-transform: var(--cv-tt-texte-petit); font-feature-settings: var(--cv-ffs-texte-petit); }
  b, strong { font-weight: 650; }
  :is(nav, button, label, figcaption, small, [role="button"]) em { font-style: italic; }
  blockquote, q { font-family: var(--cv-ff-citation); font-size: var(--cv-fs-citation); font-weight: var(--cv-fw-citation); font-style: var(--cv-fst-citation); line-height: var(--cv-lh-citation); letter-spacing: var(--cv-ls-citation); text-transform: var(--cv-tt-citation); font-feature-settings: var(--cv-ffs-citation); }
  blockquote p { max-width: none; }
  figcaption, caption, .cv-credit { font-family: var(--cv-ff-legende); font-size: var(--cv-fs-legende); font-weight: var(--cv-fw-legende); font-style: var(--cv-fst-legende); line-height: var(--cv-lh-legende); letter-spacing: var(--cv-ls-legende); text-transform: var(--cv-tt-legende); font-feature-settings: var(--cv-ffs-legende); }
  :is(nav, [role="navigation"]) :is(a, button) { font-family: var(--cv-ff-nav); font-size: var(--cv-fs-nav); font-weight: var(--cv-fw-nav); font-style: var(--cv-fst-nav); line-height: var(--cv-lh-nav); letter-spacing: var(--cv-ls-nav); text-transform: var(--cv-tt-nav); font-feature-settings: var(--cv-ffs-nav); text-decoration: none; }
  a { text-decoration-thickness: 1px; text-underline-offset: 0.2em; text-decoration-skip-ink: auto; }
  button, [type="button"], [type="submit"], [type="reset"], [role="button"] { font-family: var(--cv-ff-bouton); font-size: var(--cv-fs-bouton); font-weight: var(--cv-fw-bouton); font-style: var(--cv-fst-bouton); line-height: var(--cv-lh-bouton); letter-spacing: var(--cv-ls-bouton); text-transform: var(--cv-tt-bouton); font-feature-settings: var(--cv-ffs-bouton); }
  label, legend { font-family: var(--cv-ff-label); font-size: var(--cv-fs-label); font-weight: var(--cv-fw-label); font-style: var(--cv-fst-label); line-height: var(--cv-lh-label); letter-spacing: var(--cv-ls-label); text-transform: var(--cv-tt-label); font-feature-settings: var(--cv-ffs-label); }
  input, select, textarea, option { font-family: var(--cv-ff-champ); font-size: var(--cv-fs-champ); font-weight: var(--cv-fw-champ); font-style: var(--cv-fst-champ); line-height: var(--cv-lh-champ); letter-spacing: var(--cv-ls-champ); text-transform: var(--cv-tt-champ); font-feature-settings: var(--cv-ffs-champ); color: var(--cv-c-encre); }
  ::placeholder { font: inherit; letter-spacing: inherit; color: var(--cv-c-encre-2); opacity: 1; }
  [role="alert"], .cv-erreur, .cv-succes, [role="status"] { font-family: var(--cv-ff-message); font-size: var(--cv-fs-message); font-weight: var(--cv-fw-message); font-style: var(--cv-fst-message); line-height: var(--cv-lh-message); letter-spacing: var(--cv-ls-message); text-transform: var(--cv-tt-message); font-feature-settings: var(--cv-ffs-message); }
  table { font-variant-numeric: tabular-nums lining-nums; }
  th { font-family: var(--cv-ff-label); font-size: var(--cv-fs-label); font-weight: var(--cv-fw-label); font-style: var(--cv-fst-label); line-height: var(--cv-lh-label); letter-spacing: var(--cv-ls-label); text-transform: var(--cv-tt-label); font-feature-settings: var(--cv-ffs-label); text-align: start; }
  td { font-family: var(--cv-ff-texte-petit); font-size: var(--cv-fs-texte-petit); font-weight: var(--cv-fw-texte-petit); font-style: var(--cv-fst-texte-petit); line-height: var(--cv-lh-texte-petit); letter-spacing: var(--cv-ls-texte-petit); text-transform: var(--cv-tt-texte-petit); font-feature-settings: var(--cv-ffs-texte-petit); font-variant-numeric: tabular-nums lining-nums; }
  dialog, [role="dialog"] { font-family: var(--cv-ff-texte); font-size: var(--cv-fs-texte); font-weight: var(--cv-fw-texte); font-style: var(--cv-fst-texte); line-height: var(--cv-lh-texte); letter-spacing: var(--cv-ls-texte); text-transform: var(--cv-tt-texte); font-feature-settings: var(--cv-ffs-texte); }
  dialog :is(h1, h2), [role="dialog"] :is(h1, h2) { font-family: var(--cv-ff-titre-3); font-size: var(--cv-fs-titre-3); font-weight: var(--cv-fw-titre-3); font-style: var(--cv-fst-titre-3); line-height: var(--cv-lh-titre-3); letter-spacing: var(--cv-ls-titre-3); text-transform: var(--cv-tt-titre-3); font-feature-settings: var(--cv-ffs-titre-3); }
  footer { font-family: var(--cv-ff-texte-petit); font-size: var(--cv-fs-texte-petit); font-weight: var(--cv-fw-texte-petit); font-style: var(--cv-fst-texte-petit); line-height: var(--cv-lh-texte-petit); letter-spacing: var(--cv-ls-texte-petit); text-transform: var(--cv-tt-texte-petit); font-feature-settings: var(--cv-ffs-texte-petit); }
  footer :is(h2, h3, h4) { font-family: var(--cv-ff-surtitre); font-size: var(--cv-fs-surtitre); font-weight: var(--cv-fw-surtitre); font-style: var(--cv-fst-surtitre); line-height: var(--cv-lh-surtitre); letter-spacing: var(--cv-ls-surtitre); text-transform: var(--cv-tt-surtitre); font-feature-settings: var(--cv-ffs-surtitre); }
  code, kbd, samp, time[data-cv-technique] { font-family: var(--cv-ff-annotation); font-size: var(--cv-fs-annotation); font-weight: var(--cv-fw-annotation); font-style: var(--cv-fst-annotation); line-height: var(--cv-lh-annotation); letter-spacing: var(--cv-ls-annotation); text-transform: var(--cv-tt-annotation); font-feature-settings: var(--cv-ffs-annotation); }
  abbr[title] { text-decoration: underline dotted 1px; text-underline-offset: 0.18em; }
  sup, sub { font-size: 0.68em; line-height: 0; }
  ::selection { background: var(--cv-c-encre); color: var(--cv-c-papier); }
  :focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }
  :disabled, [aria-disabled="true"] { opacity: 1; color: var(--cv-c-encre-2); cursor: not-allowed; }
  video::cue { font-family: var(--cv-ff-texte); font-size: 1.05em; line-height: 1.35; color: #fff; background: rgb(0 0 0 / 0.72); }
}

/* ============ 6. Utilitaires (opt-in par classe) ============ */
@layer cv-typo-utilitaires {
  .cv-t-display-1 { font-family: var(--cv-ff-display-1); font-size: var(--cv-fs-display-1); font-weight: var(--cv-fw-display-1); font-style: var(--cv-fst-display-1); line-height: var(--cv-lh-display-1); letter-spacing: var(--cv-ls-display-1); text-transform: var(--cv-tt-display-1); font-feature-settings: var(--cv-ffs-display-1); text-wrap: balance; hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-display-2 { font-family: var(--cv-ff-display-2); font-size: var(--cv-fs-display-2); font-weight: var(--cv-fw-display-2); font-style: var(--cv-fst-display-2); line-height: var(--cv-lh-display-2); letter-spacing: var(--cv-ls-display-2); text-transform: var(--cv-tt-display-2); font-feature-settings: var(--cv-ffs-display-2); text-wrap: balance; hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-titre-3 { font-family: var(--cv-ff-titre-3); font-size: var(--cv-fs-titre-3); font-weight: var(--cv-fw-titre-3); font-style: var(--cv-fst-titre-3); line-height: var(--cv-lh-titre-3); letter-spacing: var(--cv-ls-titre-3); text-transform: var(--cv-tt-titre-3); font-feature-settings: var(--cv-ffs-titre-3); text-wrap: balance; hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-titre-4 { font-family: var(--cv-ff-titre-4); font-size: var(--cv-fs-titre-4); font-weight: var(--cv-fw-titre-4); font-style: var(--cv-fst-titre-4); line-height: var(--cv-lh-titre-4); letter-spacing: var(--cv-ls-titre-4); text-transform: var(--cv-tt-titre-4); font-feature-settings: var(--cv-ffs-titre-4); text-wrap: balance; hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-chapo { font-family: var(--cv-ff-chapo); font-size: var(--cv-fs-chapo); font-weight: var(--cv-fw-chapo); font-style: var(--cv-fst-chapo); line-height: var(--cv-lh-chapo); letter-spacing: var(--cv-ls-chapo); text-transform: var(--cv-tt-chapo); font-feature-settings: var(--cv-ffs-chapo); text-wrap: pretty; hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-citation { font-family: var(--cv-ff-citation); font-size: var(--cv-fs-citation); font-weight: var(--cv-fw-citation); font-style: var(--cv-fst-citation); line-height: var(--cv-lh-citation); letter-spacing: var(--cv-ls-citation); text-transform: var(--cv-tt-citation); font-feature-settings: var(--cv-ffs-citation); text-wrap: balance; hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-chiffre-display { font-family: var(--cv-ff-chiffre-display); font-size: var(--cv-fs-chiffre-display); font-weight: var(--cv-fw-chiffre-display); font-style: var(--cv-fst-chiffre-display); line-height: var(--cv-lh-chiffre-display); letter-spacing: var(--cv-ls-chiffre-display); text-transform: var(--cv-tt-chiffre-display); font-feature-settings: var(--cv-ffs-chiffre-display); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-menu-salon { font-family: var(--cv-ff-menu-salon); font-size: var(--cv-fs-menu-salon); font-weight: var(--cv-fw-menu-salon); font-style: var(--cv-fst-menu-salon); line-height: var(--cv-lh-menu-salon); letter-spacing: var(--cv-ls-menu-salon); text-transform: var(--cv-tt-menu-salon); font-feature-settings: var(--cv-ffs-menu-salon); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-texte { font-family: var(--cv-ff-texte); font-size: var(--cv-fs-texte); font-weight: var(--cv-fw-texte); font-style: var(--cv-fst-texte); line-height: var(--cv-lh-texte); letter-spacing: var(--cv-ls-texte); text-transform: var(--cv-tt-texte); font-feature-settings: var(--cv-ffs-texte); text-wrap: pretty; hyphens: auto; -webkit-hyphens: auto; hyphenate-limit-chars: 10 4 4; }
  .cv-t-texte-petit { font-family: var(--cv-ff-texte-petit); font-size: var(--cv-fs-texte-petit); font-weight: var(--cv-fw-texte-petit); font-style: var(--cv-fst-texte-petit); line-height: var(--cv-lh-texte-petit); letter-spacing: var(--cv-ls-texte-petit); text-transform: var(--cv-tt-texte-petit); font-feature-settings: var(--cv-ffs-texte-petit); text-wrap: pretty; hyphens: auto; -webkit-hyphens: auto; hyphenate-limit-chars: 10 4 4; }
  .cv-t-texte-legal { font-family: var(--cv-ff-texte-legal); font-size: var(--cv-fs-texte-legal); font-weight: var(--cv-fw-texte-legal); font-style: var(--cv-fst-texte-legal); line-height: var(--cv-lh-texte-legal); letter-spacing: var(--cv-ls-texte-legal); text-transform: var(--cv-tt-texte-legal); font-feature-settings: var(--cv-ffs-texte-legal); text-wrap: pretty; hyphens: auto; -webkit-hyphens: auto; hyphenate-limit-chars: 10 4 4; }
  .cv-t-legende { font-family: var(--cv-ff-legende); font-size: var(--cv-fs-legende); font-weight: var(--cv-fw-legende); font-style: var(--cv-fst-legende); line-height: var(--cv-lh-legende); letter-spacing: var(--cv-ls-legende); text-transform: var(--cv-tt-legende); font-feature-settings: var(--cv-ffs-legende); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-surtitre { font-family: var(--cv-ff-surtitre); font-size: var(--cv-fs-surtitre); font-weight: var(--cv-fw-surtitre); font-style: var(--cv-fst-surtitre); line-height: var(--cv-lh-surtitre); letter-spacing: var(--cv-ls-surtitre); text-transform: var(--cv-tt-surtitre); font-feature-settings: var(--cv-ffs-surtitre); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-nav { font-family: var(--cv-ff-nav); font-size: var(--cv-fs-nav); font-weight: var(--cv-fw-nav); font-style: var(--cv-fst-nav); line-height: var(--cv-lh-nav); letter-spacing: var(--cv-ls-nav); text-transform: var(--cv-tt-nav); font-feature-settings: var(--cv-ffs-nav); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-bouton { font-family: var(--cv-ff-bouton); font-size: var(--cv-fs-bouton); font-weight: var(--cv-fw-bouton); font-style: var(--cv-fst-bouton); line-height: var(--cv-lh-bouton); letter-spacing: var(--cv-ls-bouton); text-transform: var(--cv-tt-bouton); font-feature-settings: var(--cv-ffs-bouton); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-champ { font-family: var(--cv-ff-champ); font-size: var(--cv-fs-champ); font-weight: var(--cv-fw-champ); font-style: var(--cv-fst-champ); line-height: var(--cv-lh-champ); letter-spacing: var(--cv-ls-champ); text-transform: var(--cv-tt-champ); font-feature-settings: var(--cv-ffs-champ); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-label { font-family: var(--cv-ff-label); font-size: var(--cv-fs-label); font-weight: var(--cv-fw-label); font-style: var(--cv-fst-label); line-height: var(--cv-lh-label); letter-spacing: var(--cv-ls-label); text-transform: var(--cv-tt-label); font-feature-settings: var(--cv-ffs-label); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-message { font-family: var(--cv-ff-message); font-size: var(--cv-fs-message); font-weight: var(--cv-fw-message); font-style: var(--cv-fst-message); line-height: var(--cv-lh-message); letter-spacing: var(--cv-ls-message); text-transform: var(--cv-tt-message); font-feature-settings: var(--cv-ffs-message); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-chiffre-donnee { font-family: var(--cv-ff-chiffre-donnee); font-size: var(--cv-fs-chiffre-donnee); font-weight: var(--cv-fw-chiffre-donnee); font-style: var(--cv-fst-chiffre-donnee); line-height: var(--cv-lh-chiffre-donnee); letter-spacing: var(--cv-ls-chiffre-donnee); text-transform: var(--cv-tt-chiffre-donnee); font-feature-settings: var(--cv-ffs-chiffre-donnee); hyphens: manual; -webkit-hyphens: manual; }
  .cv-t-annotation { font-family: var(--cv-ff-annotation); font-size: var(--cv-fs-annotation); font-weight: var(--cv-fw-annotation); font-style: var(--cv-fst-annotation); line-height: var(--cv-lh-annotation); letter-spacing: var(--cv-ls-annotation); text-transform: var(--cv-tt-annotation); font-feature-settings: var(--cv-ffs-annotation); hyphens: manual; -webkit-hyphens: manual; }
  .cv-chiffres-tab { font-variant-numeric: tabular-nums lining-nums; }
  .cv-chiffres-prop { font-variant-numeric: proportional-nums; }
  .cv-insecable { white-space: nowrap; }
  .cv-exposant { font-size: max(0.68em, 0.75rem); vertical-align: 0.42em; line-height: 0; letter-spacing: 0.02em; } /* « XIXᵉ » : XIX<span class="cv-exposant">e</span> (U+1D49 absent de toutes les fontes) */
  .cv-capitales { text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.86em; } /* pas de petites capitales vraies (smcp absent) : jamais de petites capitales synthétisées */
  .cv-mesure { max-width: var(--cv-mesure-texte); }
  .cv-equilibre { text-wrap: balance; }
  .cv-sur-sombre { color: var(--cv-c-sur-sombre); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
  .cv-sur-sombre :is(small, figcaption, .cv-t-legende, .cv-t-texte-petit, .cv-t-annotation) { color: var(--cv-c-sur-sombre-2); }
}
