/* =====================================================================
   Blog — liste /blog/ (src/blog.njk) et modèle d'article
   (layouts/article.njk). Voir docs/blog.md.
   Famille « page violette » (AGENTS.md §13) : fonds blancs, texte sombre,
   --nc-violet-page pour les grandes zones et les accents, texte blanc sur
   violet (contraste ≈ 8:1). Uniquement les jetons de tokens.css et les
   composants partagés (.nc-heading, .btn, .link-underline, fil d'Ariane).
   ===================================================================== */

.nc-blog {
  --blog-violet: var(--nc-violet-page);
  /* Hauteur du header collant (layout.css, .nc-header) : décalage des ancres
     et position du sommaire collant. */
  --blog-header: clamp(56px, 4.6vw, 88px);
  --blog-flow: clamp(13px, 1.1vw, 24px);
  /* Zone de lecture des articles (ordinateur) : conteneur centré de 1100 px
     au plus, sommaire de 220 à 250 px, espace de 48 à 64 px, colonne du
     corps de 700 px au plus (titres, images, tableaux). Les paragraphes et
     listes sont limités à --blog-measure, proportionnelle au corps de texte
     (16 → 20 px), pour rester à 65–75 caractères par ligne : à taille de
     texte égale, 700 px de texte donneraient environ 84 caractères. */
  --blog-zone: 1100px;
  --blog-column: 700px;
  --blog-measure: calc(var(--nc-text-body) * 33);
  background: var(--nc-blanc);
  color: var(--nc-noir);
}

/* Sommaire collant des articles : depuis le 14/10/2026, .nc-shell et body
   utilisent overflow-x: clip sur tout le site (base.css, layout.css) et
   l'en-tête colle partout ; le sommaire se cale sous lui (--blog-header). */

/* Fil d'Ariane intégré à l'en-tête (variante "hero", AGENTS.md §5). */
.nc-blog .nc-breadcrumbs--hero {
  padding: 0;
}

/* ===================== Liste /blog/ ===================== */
.nc-blog-intro {
  display: flex;
  flex-direction: column;
  gap: var(--blog-flow);
  padding: clamp(26px, 2.8vw, 68px) var(--nc-pad-inline) var(--nc-pad-section-md);
}

.nc-blog-intro__title {
  font-size: clamp(2rem, 4.2vw, 5.5rem);
  max-width: 20ch;
  text-wrap: balance;
}

.nc-blog-intro__title em {
  color: var(--blog-violet);
}

.nc-blog-intro__text {
  font: 400 var(--nc-text-lead) var(--nc-police-texte);
  line-height: 1.45;
  max-width: 44rem;
  hyphens: none;
}

.nc-blog-empty {
  padding: 0 var(--nc-pad-inline) var(--nc-pad-section-lg);
  font: 600 var(--nc-text-body) var(--nc-police-texte);
  line-height: 1.6;
}

/* --- Article mis en avant (page 1) : image | panneau violet --- */
.nc-blog-une {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  border-top: var(--nc-bordure);
  border-bottom: var(--nc-bordure);
}

/* Images d'articles au format 16:9 (obligatoire, docs/blog.md) : affichées
   entières dans la liste. */
.nc-blog-une__media {
  position: relative;
  display: block;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: var(--nc-gris-200);
}

.nc-blog-une__media img,
.nc-blog-card__media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .6s cubic-bezier(.2, .7, .2, 1);
}

.nc-blog-une__body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: var(--blog-flow);
  padding: clamp(28px, 3.6vw, 88px) var(--nc-pad-inline);
  background: var(--blog-violet);
  color: var(--nc-blanc);
}

.nc-blog-une__title {
  font-size: clamp(1.75rem, 3vw, 3.75rem);
  max-width: 22ch;
  text-wrap: balance;
}

/* --- Survol des liens du Blog (principe repris de koul.io/blog) : trait
   fin sous le texte au repos ; au survol et au focus, une bande en
   parallélogramme (inclinaison de 12°) s'étire de gauche à droite derrière
   toute la hauteur du texte, 1 px de plus en haut et en bas (padding-block),
   le texte passe en blanc en fin de déploiement. Dégradés d'arrière-plan sur l'élément
   en ligne, en mode continu (slice) : sur un titre de plusieurs lignes, la
   bande parcourt les lignes l'une après l'autre, sans décaler le texte ;
   léger débordement latéral (--lien-marge) compensé par une marge négative. Fond blanc : trait et bande
   violet foncé --nc-violet-page, texte blanc au survol (≈ 8:1). Encadré
   « À retenir » (fond violet) : trait blanc, bande noire. Titre de l'article
   mis en avant (fond violet) : pas de trait, bande noire, texte blanc. --- */
.nc-blog-une__title a,
.nc-blog-card__title a,
.nc-blog-prose a,
.nc-blog-related__list a > span,
.nc-blog-lien {
  --lien-trait: var(--blog-violet);
  --lien-bande: var(--blog-violet);
  --lien-texte-survol: var(--nc-blanc);
  --lien-marge: .25em;
  padding: 1px var(--lien-marge);
  margin: 0 calc(var(--lien-marge) * -1);
  text-decoration: none;
  background-image:
    linear-gradient(102deg,
      transparent var(--lien-marge),
      var(--lien-bande) var(--lien-marge),
      var(--lien-bande) calc(100% - var(--lien-marge)),
      transparent calc(100% - var(--lien-marge))),
    linear-gradient(var(--lien-trait), var(--lien-trait));
  background-size: 0% 100%, calc(100% - 2 * var(--lien-marge)) 3px;
  background-position: 0 0, var(--lien-marge) 100%;
  background-repeat: no-repeat;
  -webkit-box-decoration-break: slice;
  box-decoration-break: slice;
}

@media (prefers-reduced-motion: no-preference) {
  .nc-blog-une__title a,
  .nc-blog-card__title a,
  .nc-blog-prose a,
  .nc-blog-related__list a > span,
  .nc-blog-lien {
    transition: background-size .38s cubic-bezier(.22, 1, .36, 1), color .1s;
  }

  /* Au survol, le texte ne passe au blanc qu'en fin de déploiement de la
     bande (sinon blanc sur blanc) ; il redevient noir immédiatement. */
  .nc-blog-card__title a:hover,
  .nc-blog-card__title a:focus-visible,
  .nc-blog-prose a:hover,
  .nc-blog-prose a:focus-visible,
  .nc-blog-related__list a:hover > span,
  .nc-blog-related__list a:focus-visible > span,
  a:hover > .nc-blog-lien,
  a:focus-visible > .nc-blog-lien {
    transition: background-size .38s cubic-bezier(.22, 1, .36, 1), color .12s .24s;
  }
}

.nc-blog-une__title a:hover,
.nc-blog-une__title a:focus-visible,
.nc-blog-card__title a:hover,
.nc-blog-card__title a:focus-visible,
.nc-blog-prose a:hover,
.nc-blog-prose a:focus-visible,
.nc-blog-related__list a:hover > span,
.nc-blog-related__list a:focus-visible > span,
a:hover > .nc-blog-lien,
a:focus-visible > .nc-blog-lien {
  background-size: 100% 100%, calc(100% - 2 * var(--lien-marge)) 3px;
  color: var(--lien-texte-survol);
}

.nc-blog-card__title a:focus-visible,
.nc-blog-prose a:focus-visible,
.nc-blog-related__list a:focus-visible,
.nc-blog-related__all:focus-visible {
  outline: 3px solid var(--blog-violet);
  outline-offset: 3px;
}

/* Titre de l'article mis en avant (fond violet) : aucun trait au repos ;
   au survol, bande noire en diagonale, texte toujours blanc (demande de
   Christian du 02/10/2026). */
.nc-blog-une__title a,
.nc-blog-une__title a:hover,
.nc-blog-une__title a:focus-visible {
  --lien-trait: transparent;
  --lien-bande: var(--nc-noir);
  --lien-texte-survol: var(--nc-blanc);
  color: var(--nc-blanc);
}

.nc-blog-une__title a:focus-visible {
  outline: 3px solid var(--nc-blanc);
  outline-offset: 3px;
}

.nc-blog-une__excerpt {
  font: 400 var(--nc-text-body) var(--nc-police-texte);
  line-height: 1.6;
  max-width: 36rem;
  color: var(--nc-blanc);
}

@media (min-width: 900px) {
  .nc-blog-une {
    grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
  }
  /* Colonne image ≈ 53,5 % de la largeur : 30vw de hauteur ≈ 16:9 ; si le
     panneau de texte est plus haut, l'image remplit la hauteur (léger
     recadrage). */
  .nc-blog-une__media {
    aspect-ratio: auto;
    min-height: 30vw;
  }
}

/* --- Grille éditoriale --- */
.nc-blog-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(36px, 3.4vw, 72px) clamp(20px, 2.4vw, 48px);
  padding: var(--nc-pad-section-lg) var(--nc-pad-inline);
}

@media (min-width: 640px) {
  .nc-blog-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 1024px) {
  .nc-blog-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

.nc-blog-list .nc-blog-intro + .nc-blog-grid {
  border-top: var(--nc-bordure);
}

.nc-blog-card {
  display: flex;
  flex-direction: column;
  gap: 12px;
  min-width: 0;
}

.nc-blog-card__media {
  position: relative;
  display: block;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  margin-bottom: 6px;
  background: var(--nc-gris-200);
}

/* Filet très léger autour des vignettes (demande de Christian du 02/10/2026) :
   une image à fond blanc ne se confond plus avec la page. Dessiné par-dessus
   l'image, sans changer sa taille ni son format, immobile pendant le zoom. */
.nc-blog-card__media::after {
  content: "";
  position: absolute;
  inset: 0;
  box-shadow: inset 0 0 0 1px var(--nc-gris-250);
  pointer-events: none;
}

.nc-blog-card__title {
  font: 700 clamp(1.25rem, 1.55vw, 1.875rem) var(--nc-police-texte);
  line-height: 1.2;
  letter-spacing: -.02em;
  text-wrap: balance;
}

.nc-blog-card__title a {
  color: var(--nc-noir);
}

.nc-blog-card__excerpt {
  font: 400 var(--nc-text-body) var(--nc-police-texte);
  line-height: 1.55;
  color: var(--nc-gris-600);
}

@media (hover: hover) and (prefers-reduced-motion: no-preference) {
  .nc-blog-une:hover .nc-blog-une__media img,
  .nc-blog-card:hover .nc-blog-card__media img {
    transform: scale(1.03);
  }
}

/* --- Pagination (même principe que celle des réalisations) --- */
.nc-blog-pagination {
  padding: 0 var(--nc-pad-inline) var(--nc-pad-section-lg);
}

.nc-blog-pagination__list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.nc-blog-pagination__link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-width: 44px;
  min-height: 44px;
  padding: 0 12px;
  border: var(--nc-bordure);
  background: var(--nc-blanc);
  color: var(--nc-noir);
  font: 700 var(--nc-text-cta) var(--nc-police-texte);
  transition: background-color var(--nc-transition-rapide), color var(--nc-transition-rapide);
}

.nc-blog-pagination__link:hover,
.nc-blog-pagination__link:focus-visible {
  background: var(--nc-noir);
  color: var(--nc-blanc);
}

.nc-blog-pagination__link[aria-current="page"] {
  background: var(--blog-violet);
  border-color: var(--blog-violet);
  color: var(--nc-blanc);
}

/* ===================== Article ===================== */

/* --- En-tête violet : hauteur déterminée par le contenu --- */
.nc-blog-head {
  background: var(--blog-violet);
  color: var(--nc-blanc);
}

.nc-blog-head__inner {
  display: flex;
  flex-direction: column;
  gap: var(--blog-flow);
  padding: clamp(24px, 2.6vw, 60px) var(--nc-pad-inline) clamp(32px, 3.6vw, 84px);
}

.nc-blog-head .nc-breadcrumbs,
.nc-blog-head .nc-breadcrumbs a,
.nc-blog-head .nc-breadcrumbs [aria-current="page"] {
  color: var(--nc-blanc);
}

.nc-blog-head .nc-breadcrumbs a {
  text-decoration: underline;
  text-decoration-color: rgba(255, 255, 255, .5);
  text-underline-offset: 3px;
}

.nc-blog-head .nc-breadcrumbs a:hover,
.nc-blog-head .nc-breadcrumbs a:focus-visible {
  color: var(--nc-blanc);
  text-decoration-color: var(--nc-blanc);
}

/* Mot composé avec trait d'union, jamais coupé en fin de ligne dans le titre
   (filtre sansCoupureTraitUnion). */
.nc-insecable {
  white-space: nowrap;
}

.nc-blog-head__title {
  /* Réduit le 02/10/2026 (demande de Christian) : 28 px sur mobile, ≈ 44 px
     à 1366 px, ≈ 61 px à 1920 px (auparavant clamp(2rem, 4.4vw, 5.25rem)). */
  font-size: clamp(1.75rem, 3.2vw, 4rem);
  max-width: 22ch;
  text-wrap: balance;
  color: var(--nc-blanc);
}

.nc-blog-head__intro {
  /* Chapeau des articles : 90 % du corps d'accroche (demande de Christian du
     02/10/2026) — 16,2 px sur mobile, ≈ 25 px à 1366 px, 27 px à 1920 px. */
  font: 400 calc(var(--nc-text-lead) * .9) var(--nc-police-texte);
  line-height: 1.45;
  max-width: 46rem;
  color: var(--nc-blanc);
  hyphens: none;
}

/* Ordinateur : zone de texte de l'en-tête élargie, pour qu'un titre ou un
   chapeau long n'occupe pas une colonne étroite et un en-tête trop haut
   (demande de Christian du 02/10/2026). Largeur du chapeau proportionnelle à
   son corps (32 × --nc-text-lead) : ≈ 70 caractères par ligne à toutes les
   largeurs d'ordinateur ; mobile et tablette inchangés. */
@media (min-width: 1100px) {
  .nc-blog-head__title {
    max-width: 40ch;
  }

  .nc-blog-head__intro {
    max-width: calc(var(--nc-text-lead) * .9 * 32);
  }
}

.nc-blog-head__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 0;
  font: 400 var(--nc-text-meta) var(--nc-police-mono);
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--nc-blanc);
}

.nc-blog-head__meta span + span::before {
  content: "·";
  content: "·" / "";
  margin: 0 .9em;
}

/* Petit écran : informations empilées, sans séparateur en début de ligne. */
@media (max-width: 639px) {
  .nc-blog-head__meta {
    flex-direction: column;
  }
  .nc-blog-head__meta span + span::before {
    content: none;
  }
}

/* --- Image d'ouverture (16:9) : jamais étirée ; filet sous l'image en
   paliers nets, 70 % violet puis cyan, magenta et jaune à parts égales
   (demande de Christian du 02/10/2026). --- */
.nc-blog-cover {
  /* Grille d'une colonne à la largeur de l'image, centrée : la légende
     facultative (image_legende) s'aligne sur le bord gauche de l'image. */
  display: grid;
  grid-template-columns: minmax(0, max-content);
  justify-content: center;
  margin: 0;
  padding: var(--nc-pad-section-md) var(--nc-pad-inline) 0;
}

.nc-blog-cover__legende {
  margin-top: 10px;
  font: 400 var(--nc-text-secondary) var(--nc-police-texte);
  line-height: 1.5;
  color: var(--nc-gris-600);
}

.nc-blog-cover__frame {
  display: inline-block;
  max-width: 100%;
  vertical-align: top;
}

.nc-blog-cover img {
  display: block;
  width: auto;
  max-width: 100%;
  height: auto;
  max-height: min(80vh, 900px);
}

.nc-blog-cover__bar {
  display: block;
  height: clamp(6px, .5vw, 11px);
  background: linear-gradient(90deg,
    var(--nc-violet-page) 0% 70%,
    var(--nc-cyan) 70% 80%,
    var(--nc-magenta) 80% 90%,
    var(--nc-jaune) 90% 100%);
}

/* --- Sommaire + corps --- */
.nc-blog-article__layout {
  display: grid;
  grid-template-columns: minmax(0, var(--blog-column));
  justify-content: center;
  max-width: calc(var(--blog-zone) + 2 * var(--nc-pad-inline));
  margin: 0 auto;
  padding: var(--nc-pad-section-md) var(--nc-pad-inline) var(--nc-pad-section-lg);
}

.nc-blog-article__main {
  min-width: 0;
}

.nc-blog-aside,
.nc-blog-toc--desktop {
  display: none;
}

.nc-blog-toc__title {
  font: 400 var(--nc-text-meta) var(--nc-police-mono);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--nc-gris-600);
  margin-bottom: 14px;
}

.nc-blog-toc__list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.nc-blog-toc__list a {
  display: block;
  padding: 9px 0 9px 16px;
  border-left: 3px solid var(--nc-gris-250);
  font: 500 1rem var(--nc-police-texte);
  line-height: 1.35;
  color: var(--nc-noir);
  transition: color var(--nc-transition-rapide), border-color var(--nc-transition-rapide);
}

.nc-blog-toc__list a:hover,
.nc-blog-toc__list a:focus-visible {
  color: var(--blog-violet);
}

.nc-blog-toc__list a:focus-visible {
  outline: 3px solid var(--blog-violet);
  outline-offset: 2px;
}

/* Section en cours de lecture (blog-sommaire.js). */
.nc-blog-toc__list a[aria-current="location"] {
  border-left-color: var(--blog-violet);
  color: var(--blog-violet);
  font-weight: 700;
}

/* Mobile et tablette : sommaire repliable dans le flux, avant le corps. */
.nc-blog-toc--mobile {
  margin-bottom: clamp(28px, 3vw, 44px);
  border: var(--nc-bordure);
}

.nc-blog-toc__summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 52px;
  padding: 12px 16px;
  font: 700 1rem var(--nc-police-texte);
  cursor: pointer;
  list-style: none;
}

.nc-blog-toc__summary::-webkit-details-marker {
  display: none;
}

.nc-blog-toc__summary::after {
  content: "+";
  content: "+" / "";
  font: 400 1.5rem/1 var(--nc-police-mono);
  color: var(--blog-violet);
}

.nc-blog-toc--mobile[open] > .nc-blog-toc__summary {
  border-bottom: 1px solid var(--nc-gris-300);
}

.nc-blog-toc--mobile[open] > .nc-blog-toc__summary::after {
  content: "−";
  content: "−" / "";
}

.nc-blog-toc__summary:focus-visible {
  outline: 3px solid var(--blog-violet);
  outline-offset: 2px;
}

.nc-blog-toc--mobile .nc-blog-toc__list {
  padding: 10px 16px 14px;
}

@media (min-width: 1100px) {
  .nc-blog-article__layout--sommaire {
    grid-template-columns: minmax(220px, 250px) minmax(0, var(--blog-column));
    column-gap: clamp(48px, 4.5vw, 64px);
  }

  /* Sommaire + CTA court collants sous le header, limités à la zone de
     lecture (même ligne de grille que le corps). Le CTA court garde sa
     hauteur : si la hauteur d'écran manque, seul le sommaire défile en
     interne, le bouton reste visible (03/10/2026). */
  .nc-blog-aside {
    display: flex;
    flex-direction: column;
    gap: clamp(28px, 2.4vw, 40px);
    position: sticky;
    top: calc(var(--blog-header) + 24px);
    align-self: start;
    max-height: calc(100vh - var(--blog-header) - 48px);
  }

  .nc-blog-toc--desktop {
    display: block;
    flex: 0 1 auto;
    min-height: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    padding-right: 6px;
  }

  .nc-blog-aside > .nc-blog-cta-court {
    flex: none;
  }

  /* Hauteur d'écran limitée : le texte du CTA court s'efface (titre et
     bouton restent) pour laisser la place au sommaire, prioritaire. */
  @media (max-height: 860px) {
    .nc-blog-aside .nc-blog-cta-court__text {
      display: none;
    }
  }

  /* Une seule version du CTA court : celle de la colonne. */
  .nc-blog-article__layout--sommaire .nc-blog-cta-court--flux {
    display: none;
  }

  .nc-blog-toc--mobile {
    display: none;
  }
}

/* --- CTA court complémentaire, pendant la lecture (03/10/2026) ---
   Sobre, pour laisser la priorité au sommaire : filet violet en tête,
   titre court, texte court, bouton violet (noir au survol). Variante
   « colonne » sous le sommaire (ordinateur), variante « flux » encadrée dans
   le corps après la première section (mobile et tablette). Sélecteurs
   doublés pour primer sur les styles des paragraphes et des liens du corps
   (.nc-blog-prose p / a). */
.nc-blog-cta-court {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
  border-top: 3px solid var(--blog-violet);
  padding-top: 16px;
}

.nc-blog-cta-court .nc-blog-cta-court__title {
  font: 400 clamp(1.125rem, 1.3vw, 1.375rem) var(--nc-police-titre);
  line-height: 1.1;
  letter-spacing: -.02em;
  text-transform: uppercase;
  color: var(--nc-noir);
  text-wrap: balance;
}

.nc-blog-cta-court .nc-blog-cta-court__text {
  font: 400 var(--nc-text-body) var(--nc-police-texte);
  line-height: 1.5;
  color: var(--nc-noir);
  text-align: left;
  hyphens: none;
  -webkit-hyphens: none;
}

.nc-blog-cta-court .nc-blog-cta-court__btn {
  margin: 6px 0 0;
  padding: 11px 16px;
  font: 700 1rem var(--nc-police-texte);
  line-height: 1.3;
  background: var(--blog-violet);
  color: var(--nc-blanc);
  text-decoration: none;
  transition: background-color var(--nc-transition-rapide), color var(--nc-transition-rapide);
}

.nc-blog-cta-court .nc-blog-cta-court__btn:hover,
.nc-blog-cta-court .nc-blog-cta-court__btn:focus-visible {
  background: var(--nc-noir);
  color: var(--nc-blanc);
  transition: background-color var(--nc-transition-rapide), color var(--nc-transition-rapide);
}

.nc-blog-cta-court .nc-blog-cta-court__btn:focus-visible {
  outline: 3px solid var(--blog-violet);
  outline-offset: 3px;
}

.nc-blog-prose > .nc-blog-cta-court--flux {
  margin-top: clamp(28px, 3vw, 44px);
  padding: 18px 20px 20px;
  border: 1px solid var(--nc-gris-300);
  border-top: 4px solid var(--blog-violet);
}

/* --- Corps de l'article : lecture sur fond blanc --- */
.nc-blog-prose {
  counter-reset: blog-h2;
}

.nc-blog-prose > * {
  margin: 0;
}

.nc-blog-prose > * + * {
  margin-top: clamp(16px, 1.25vw, 24px);
}

.nc-blog-prose p,
.nc-blog-prose li,
.nc-blog-prose blockquote {
  font: 400 var(--nc-text-body) var(--nc-police-texte);
  line-height: 1.6;
  color: var(--nc-noir);
  hyphens: none;
  -webkit-hyphens: none;
  word-break: normal;
}

/* Blog : paragraphes alignés à gauche, sans justification (exception à la
   règle générale, décidée par Christian le 02/10/2026 — AGENTS.md §5). */
.nc-blog-prose p {
  text-align: left;
}

/* Textes de lecture limités à 65–75 caractères par ligne ; titres, images,
   tableaux et encadrés gardent toute la colonne du corps. */
.nc-blog-prose > p,
.nc-blog-prose > ul,
.nc-blog-prose > ol,
.nc-blog-prose > blockquote {
  max-width: var(--blog-measure);
}

/* Titres : le décalage des ancres sous l'en-tête collant est donné pour
   tout le site par scroll-padding-top (base.css) ; 8 px d'air en plus ici. */
.nc-blog-prose h2,
.nc-blog-prose h3 {
  scroll-margin-top: 8px;
  text-wrap: balance;
}

.nc-blog-prose h2 {
  margin-top: clamp(40px, 4.2vw, 76px);
  font: 400 clamp(1.5rem, 2.1vw, 2.5rem) var(--nc-police-titre);
  line-height: 1.04;
  letter-spacing: -.035em;
  text-transform: uppercase;
  counter-increment: blog-h2;
}

.nc-blog-prose > h2:first-child {
  margin-top: 0;
}

/* Numérotation automatique des H2 (01., 02.…) en violet, décorative. */
.nc-blog-prose h2::before {
  content: counter(blog-h2, decimal-leading-zero) ". ";
  content: counter(blog-h2, decimal-leading-zero) ". " / "";
  color: var(--blog-violet);
}

.nc-blog-prose h3 {
  margin-top: clamp(28px, 2.6vw, 44px);
  font: 700 clamp(1.125rem, 1.35vw, 1.5rem) var(--nc-police-texte);
  line-height: 1.3;
  letter-spacing: -.01em;
}

.nc-blog-prose h2 + *,
.nc-blog-prose h3 + * {
  margin-top: clamp(12px, 1vw, 18px);
}

.nc-blog-prose ul,
.nc-blog-prose ol {
  padding-left: 1.4em;
}

.nc-blog-prose ul {
  list-style: square;
}

.nc-blog-prose li + li {
  margin-top: .45em;
}

.nc-blog-prose li::marker {
  color: var(--blog-violet);
  font-weight: 700;
}

.nc-blog-prose a {
  color: var(--nc-noir);
  font-weight: 600;
}

.nc-blog-prose strong {
  font-weight: 700;
}

.nc-blog-prose blockquote {
  padding-left: 20px;
  border-left: 4px solid var(--blog-violet);
}

.nc-blog-prose hr {
  border: 0;
  border-top: var(--nc-bordure);
}

.nc-blog-prose code {
  font-family: var(--nc-police-mono);
  font-size: .9em;
  padding: .1em .3em;
  background: var(--nc-gris-200);
}

/* Images : ratio naturel, jamais agrandies ni étirées. */
.nc-blog-prose img {
  display: block;
  width: auto;
  max-width: 100%;
  height: auto;
}

.nc-blog-figure {
  margin: clamp(28px, 3vw, 48px) 0 !important;
}

.nc-blog-figure figcaption {
  margin-top: 10px;
  font: 400 var(--nc-text-secondary) var(--nc-police-texte);
  line-height: 1.5;
  color: var(--nc-gris-600);
}

/* Tableaux : défilement horizontal dans leur propre conteneur. */
.nc-blog-table {
  max-width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.nc-blog-table:focus-visible {
  outline: 3px solid var(--blog-violet);
  outline-offset: 2px;
}

/* Tableaux (02/10/2026, DA du Blog) : en-tête violet à texte blanc, première
   colonne en semi-gras (entrée de ligne), marges intérieures, filets gris
   clair entre les lignes et filet noir épais de fermeture. */
.nc-blog-table table {
  width: 100%;
  border-collapse: collapse;
  font: 400 var(--nc-text-body) var(--nc-police-texte);
  line-height: 1.45;
  border-bottom: 2px solid var(--nc-noir);
}

.nc-blog-table th,
.nc-blog-table td {
  padding: clamp(10px, .9vw, 16px) clamp(12px, 1.1vw, 18px);
  text-align: left;
  vertical-align: top;
}

.nc-blog-table thead th {
  background: var(--blog-violet);
  color: var(--nc-blanc);
  font-weight: 700;
}

.nc-blog-table tbody td {
  border-bottom: 1px solid var(--nc-gris-300);
}

.nc-blog-table tbody tr:last-child td {
  border-bottom: 0;
}

.nc-blog-table tbody td:first-child {
  font-weight: 600;
}

/* Encadré « À retenir » (uniquement s'il est écrit dans l'article). */
.nc-blog-retenir {
  padding: clamp(20px, 2vw, 34px) clamp(20px, 2.2vw, 38px);
  background: var(--blog-violet);
  color: var(--nc-blanc);
}

.nc-blog-retenir > * + * {
  margin-top: 12px;
}

.nc-blog-prose .nc-blog-retenir p,
.nc-blog-prose .nc-blog-retenir li {
  color: var(--nc-blanc);
}

.nc-blog-prose .nc-blog-retenir li::marker {
  color: var(--nc-blanc);
}

.nc-blog-prose .nc-blog-retenir .nc-blog-retenir__label {
  font: 400 var(--nc-text-meta) var(--nc-police-mono);
  letter-spacing: .14em;
  text-transform: uppercase;
  text-align: left;
}

.nc-blog-prose .nc-blog-retenir a,
.nc-blog-prose .nc-blog-retenir a:hover,
.nc-blog-prose .nc-blog-retenir a:focus-visible {
  --lien-trait: var(--nc-blanc);
  --lien-bande: var(--nc-noir);
  --lien-texte-survol: var(--nc-blanc);
  color: var(--nc-blanc);
  outline-color: var(--nc-blanc);
}

/* --- Appel à l'action de fin d'article --- */
.nc-blog-cta {
  background: var(--blog-violet);
  color: var(--nc-blanc);
}

.nc-blog-cta__inner {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--blog-flow);
  padding: var(--nc-pad-section-lg) var(--nc-pad-inline);
}

.nc-blog-cta__title {
  font-size: clamp(1.75rem, 3.2vw, 4rem);
  max-width: 24ch;
  text-wrap: balance;
  color: var(--nc-blanc);
}

.nc-blog-cta__text {
  font: 400 var(--nc-text-body) var(--nc-police-texte);
  line-height: 1.6;
  max-width: var(--blog-measure);
  color: var(--nc-blanc);
  hyphens: none;
}

.nc-blog-cta__btn {
  margin-top: 6px;
  background: var(--nc-blanc);
  color: var(--nc-noir);
}

.nc-blog-cta__btn:hover,
.nc-blog-cta__btn:focus-visible {
  background: var(--nc-noir);
  color: var(--nc-blanc);
}

.nc-blog-cta__btn:focus-visible {
  outline: 3px solid var(--nc-blanc);
  outline-offset: 3px;
}

/* --- Derniers articles --- */
.nc-blog-related {
  border-top: var(--nc-bordure);
}

.nc-blog-related__inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 18px clamp(32px, 4vw, 96px);
  padding: var(--nc-pad-section-md) var(--nc-pad-inline) var(--nc-pad-section-lg);
}

.nc-blog-related__title {
  font: 400 clamp(1.375rem, 2vw, 2.25rem) var(--nc-police-titre);
  line-height: 1;
  letter-spacing: -.035em;
  text-transform: uppercase;
}

.nc-blog-related__list {
  margin: 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--nc-gris-300);
}

.nc-blog-related__list li {
  border-bottom: 1px solid var(--nc-gris-300);
}

.nc-blog-related__list a {
  display: block;
  padding: 14px 0;
  font: 700 var(--nc-text-body) var(--nc-police-texte);
  line-height: 1.35;
  color: var(--nc-noir);
}

.nc-blog-related__list a:hover,
.nc-blog-related__list a:focus-visible {
  color: var(--nc-noir);
}

.nc-blog-related__list a:hover > span,
.nc-blog-related__list a:focus-visible > span {
  color: var(--lien-texte-survol);
}

/* « Tous les articles » : même survol que les autres liens (trait et bande
   sur le texte, .nc-blog-lien), sans le trait du composant .link-underline. */
.nc-blog-related__all {
  --hover-color: var(--nc-noir);
  margin-top: 6px;
  border-bottom: 0;
  padding-bottom: 0;
}

@media (min-width: 900px) {
  .nc-blog-related__inner {
    grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
    align-items: start;
  }
  .nc-blog-related__title {
    grid-row: span 2;
  }
  .nc-blog-related__list,
  .nc-blog-related__all {
    grid-column: 2;
  }
}

/* Défilement doux vers les titres, seulement sans réduction des animations. */
@media (prefers-reduced-motion: no-preference) {
  html:has(.nc-blog-article) {
    scroll-behavior: smooth;
  }
}

@media (prefers-reduced-motion: reduce) {
  .nc-blog-une__media img,
  .nc-blog-card__media img {
    transition: none;
  }
}
