/* TENON — styles du site. Dépend de tokens.css.
   Sommaire : 1. Base  2. Utilitaires  3. Boutons  4. En-tête  5. Hero  6. Notre terrain
              7. Sourcing desk  8. Sections de la page  9. Adaptation aux écrans
              10. Préférences d'accessibilité */

/* ---------- 1. Base ---------- */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--header-h) + 40px);
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--ink);
  color: var(--paper);
  font-family: var(--font-sans);
  font-size: var(--fs-body);
  font-weight: 400;
  line-height: 1.6;
  font-optical-sizing: auto;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

p {
  text-wrap: pretty;
}

/* Grain photographique très léger sur toute la page. */
body::after {
  content: '';
  position: fixed;
  inset: 0;
  z-index: 60;
  pointer-events: none;
  opacity: 0.05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

h1,
h2,
h3,
p {
  margin: 0;
}

a {
  color: inherit;
  text-decoration: none;
}

button,
input,
select,
textarea {
  font: inherit;
  color: inherit;
}

button {
  cursor: pointer;
}

img,
svg,
canvas,
video {
  display: block;
  max-width: 100%;
}

:focus-visible {
  outline: 2px solid var(--blue-on-dark);
  outline-offset: 4px;
  border-radius: 4px;
}

.skip-link {
  position: fixed;
  top: -100px;
  left: var(--gutter);
  z-index: 100;
  padding: 12px 18px;
  border-radius: var(--pill);
  background: var(--paper);
  color: var(--ink);
  font-size: var(--fs-small);
}

.skip-link:focus {
  top: 12px;
}

/* ---------- 2. Utilitaires ---------- */

.container {
  width: min(var(--container), 100% - 2 * var(--gutter));
  margin-inline: auto;
}

.display,
.h2 {
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: -0.03em;
  line-height: 0.96;
  text-wrap: balance;
}

.display {
  font-size: var(--fs-display);
  letter-spacing: -0.035em; /* plus le corps est grand, plus on resserre */
}

.h2 {
  font-size: var(--fs-h2);
}

.h3 {
  font-size: var(--fs-h3);
  font-weight: 500;
  letter-spacing: -0.015em;
  line-height: 1.15;
}

.muted {
  color: var(--mist);
}

.accent {
  color: var(--blue-on-dark);
}

.label {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  font-weight: 400;
  letter-spacing: 0.08em;
  line-height: 1.4;
  text-transform: uppercase;
  color: var(--mist);
}

.dot {
  flex: none;
  width: 6px;
  height: 6px;
  border-radius: 1px;
  background: var(--blue);
}

.icon {
  flex: none;
  width: 20px;
  height: 20px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.icon-sprite {
  position: absolute;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.section {
  padding-block: var(--section-y);
}

.section--dark {
  background: var(--graphite);
  color: var(--paper);
}

.section--light {
  background: var(--paper);
  color: var(--ink);
}

.section--light .muted,
.section--light .label {
  color: #5c646a;
}

.section--light .accent {
  color: var(--blue-on-light);
}

.section--light :focus-visible {
  outline-color: var(--blue-on-light);
}

.section--light .link-arrow {
  border-color: var(--line-light-strong);
}

.section--light .link-arrow:hover {
  border-color: var(--ink);
}

.section__head {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  justify-content: space-between;
  gap: 32px 48px;
  margin-bottom: clamp(40px, 5vw, 72px);
}

.section__head .label {
  margin-bottom: 24px;
}

/* Apparition au défilement (activée par motion.js) */
.reveal {
  transition: opacity 0.8s var(--ease), transform 0.8s var(--ease);
  transition-delay: var(--reveal-delay, 0s);
}

.reveal.is-waiting {
  opacity: 0;
  transform: translateY(28px);
}

/* Entrée au chargement : les lignes du titre montent derrière un masque, le reste suit. */
.line {
  display: block;
  margin-block: -0.1em;
  padding-block: 0.1em;
  overflow: hidden;
}

.line > span {
  display: block;
  animation: line-in 0.9s var(--ease) both;
  animation-delay: calc(0.08s + var(--i, 0) * 0.06s);
}

.rise {
  animation: rise-in 0.7s var(--ease) both;
  animation-delay: calc(0.08s + var(--i, 0) * 0.06s);
}

@keyframes line-in {
  from {
    transform: translateY(110%);
  }
}

@keyframes rise-in {
  from {
    opacity: 0;
    transform: translateY(18px);
  }
}

/* ---------- 3. Boutons ---------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  min-height: 3.25rem;
  padding: 6px 8px 6px 24px;
  border: 1px solid transparent;
  border-radius: var(--pill);
  font-size: var(--fs-small);
  font-weight: 500;
  line-height: 1.2;
  white-space: nowrap;
  transition: background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s var(--ease), transform 0.1s ease-out;
}

/* Le retour visuel part dès que le doigt ou la souris appuie, pas au relâchement. */
.btn:active {
  transform: scale(0.97);
}

.btn__icon {
  display: grid;
  place-items: center;
  width: 2.375rem;
  height: 2.375rem;
  border-radius: 50%;
  transition: transform 0.4s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease);
}

.btn__icon .icon {
  width: 18px;
  height: 18px;
}

.btn:hover .btn__icon {
  transform: rotate(45deg);
}

.btn--light {
  background: var(--paper);
  color: var(--ink);
}

.btn--light .btn__icon {
  background: var(--ink);
  color: var(--paper);
}

.btn--light:hover {
  background: var(--white);
}

.btn--light:hover .btn__icon {
  background: var(--blue);
}

.btn--ghost {
  border-color: var(--line-dark-strong);
  background: rgba(197, 202, 206, 0.06);
  color: var(--paper);
  -webkit-backdrop-filter: blur(14px);
  backdrop-filter: blur(14px);
}

.btn--ghost .btn__icon {
  background: rgba(197, 202, 206, 0.12);
}

.btn--ghost:hover {
  border-color: var(--silver);
  background: rgba(197, 202, 206, 0.12);
}

.btn--dark {
  background: var(--ink);
  color: var(--paper);
}

.btn--dark .btn__icon {
  background: var(--paper);
  color: var(--ink);
}

.btn--dark:hover .btn__icon {
  background: var(--blue);
  color: var(--white);
}

.btn--sm {
  min-height: 2.5rem;
  padding: 4px 18px;
  font-size: 0.875rem;
}

.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding-block: 6px;
  border-bottom: 1px solid var(--line-dark-strong);
  font-size: var(--fs-small);
  font-weight: 500;
  transition: border-color 0.3s var(--ease), color 0.3s var(--ease);
}

.link-arrow .icon {
  width: 16px;
  height: 16px;
  transition: transform 0.3s var(--ease);
}

.link-arrow:hover {
  border-color: var(--paper);
}

.link-arrow:active {
  opacity: 0.6;
}

.link-arrow:hover .icon {
  transform: translate(2px, -2px);
}

/* ---------- 4. En-tête ---------- */

.site-header {
  position: fixed;
  top: 16px;
  left: 0;
  right: 0;
  z-index: 50;
  pointer-events: none;
}

.site-header__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  width: min(var(--container), 100% - 2 * var(--gutter));
  height: var(--header-h);
  margin-inline: auto;
  padding: 0 10px 0 22px;
  border: 1px solid var(--line-dark);
  border-radius: var(--pill);
  background: rgba(20, 23, 26, 0.55);
  /* Arête claire en haut : la lumière accroche le bord de la matière. */
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.09), 0 12px 40px rgba(0, 0, 0, 0.28);
  -webkit-backdrop-filter: blur(24px) saturate(160%);
  backdrop-filter: blur(24px) saturate(160%);
  pointer-events: auto;
  transition: background 0.4s var(--ease), border-color 0.4s var(--ease);
  animation: header-in 0.9s var(--ease) both;
}

@keyframes header-in {
  from {
    opacity: 0;
    transform: translateY(-16px);
  }
}

.site-header.is-scrolled .site-header__bar {
  background: rgba(14, 16, 18, 0.9);
  border-color: var(--line-dark-strong);
}

.brand {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  color: var(--paper);
}

/* Zone de toucher agrandie à 44 px sans grossir le logo. */
.brand::after,
#motion-toggle::after {
  content: '';
  position: absolute;
  inset: -10px -6px;
}

#motion-toggle {
  position: relative;
}

.brand__mark {
  flex: none;
  width: 26px;
  height: 26px;
  fill: currentColor;
}

.brand__name {
  font-size: 1.0625rem;
  font-weight: 600;
  letter-spacing: 0.06em;
}

.site-nav {
  display: flex;
  gap: clamp(18px, 2.4vw, 36px);
  font-size: 0.9375rem;
  font-weight: 500;
  letter-spacing: 0.005em;
  color: var(--paper);
}

.site-nav a {
  position: relative;
  padding-block: 8px;
  transition: color 0.3s var(--ease);
}

.site-nav a::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 2px;
  height: 1px;
  background: var(--paper);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.4s var(--ease);
}

.site-nav a:hover,
.site-nav a[aria-current] {
  color: var(--white);
}

.site-nav a:hover::after,
.site-nav a[aria-current]::after {
  transform: scaleX(1);
}

.site-header__tools {
  display: flex;
  align-items: center;
  gap: 14px;
}

.lang-switch {
  position: relative;
  display: flex;
  gap: 2px;
}

.lang-switch button {
  position: relative;
  min-width: 36px;
  min-height: 32px;
  padding: 0 8px;
  border: 0;
  border-radius: var(--pill);
  background: none;
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.06em;
  color: var(--silver);
  transition: background 0.3s var(--ease), color 0.3s var(--ease), transform 0.1s ease-out;
}

/* Zone de toucher agrandie à 44 px sans grossir le bouton. */
.lang-switch button::after {
  content: '';
  position: absolute;
  inset: -6px -1px;
}

.lang-switch button:active {
  transform: scale(0.94);
}

/* Pastille glissante posée par motion.js : la sélection se déplace au lieu de sauter. */
.seg-thumb {
  position: absolute;
  top: 0;
  left: 0;
  border-radius: var(--pill);
  pointer-events: none;
  will-change: transform;
}

.lang-switch .seg-thumb {
  background: #3a4047; /* plein et assez clair pour rester lisible quand l'en-tête passe sur une section claire */
}

.filters .seg-thumb {
  background: var(--ink);
}

/* Avec la pastille, le bouton choisi n'a plus de fond propre : c'est elle qui le porte. */
.lang-switch.has-thumb button[aria-pressed='true'],
.filters.has-thumb .chip[aria-pressed='true'] {
  border-color: transparent;
  background: transparent;
}

.lang-switch button:hover {
  color: var(--paper);
}

.lang-switch button[aria-pressed='true'] {
  background: rgba(197, 202, 206, 0.14);
  color: var(--white);
}

.menu-toggle {
  display: none;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--line-dark-strong);
  border-radius: 50%;
  background: none;
  color: var(--paper);
  transition: transform 0.1s ease-out, background 0.3s var(--ease);
}

.menu-toggle:active {
  transform: scale(0.94);
}

.menu-toggle[aria-expanded='true'] {
  background: rgba(197, 202, 206, 0.14);
}

.menu-toggle .icon--close,
.menu-toggle[aria-expanded='true'] .icon--menu {
  display: none;
}

.menu-toggle[aria-expanded='true'] .icon--close {
  display: block;
}

.mobile-nav {
  display: none;
}

/* ---------- 5. Hero ---------- */

/* Par défaut (sans JS, mobile, effets réduits) : hero statique.
   motion.js ajoute .is-pinned pour la version épinglée pilotée au défilement. */

.hero {
  position: relative;
  background: var(--ink);
}

.hero__stage {
  position: relative;
  display: flex;
  flex-direction: column;
  min-height: 100svh;
  overflow: hidden;
  isolation: isolate;
}

.hero__media {
  position: absolute;
  inset: 0;
  z-index: -1;
}

/* Halo discret derrière la figure, pour la détacher du fond sans l'éclairer. */
.hero__media::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 42% 54% at 70% 50%, rgba(197, 202, 206, 0.075), rgba(197, 202, 206, 0) 70%);
}

/* La figure est dessinée par hero-figure.js : un serveur au trait qui s'ouvre au défilement
   et que l'on peut faire pivoter en le faisant glisser. */
.hero__figure {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  animation: figure-in 1.6s var(--ease) backwards;
}

@keyframes figure-in {
  from {
    opacity: 0;
  }
}

.hero__callouts {
  margin: 0;
  padding: 0;
  list-style: none;
}

.hero__callouts li,
.hero__drag-hint {
  position: absolute;
  top: 0;
  left: 0;
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.08em;
  line-height: 1;
  text-transform: uppercase;
  white-space: nowrap;
  opacity: 0;
  will-change: transform, opacity;
}

.hero__callouts li {
  color: var(--silver);
}

.hero__drag-hint {
  margin: 0;
  color: var(--mist);
  transition: opacity 0.4s var(--ease);
}

.hero__media.was-dragged .hero__drag-hint {
  opacity: 0 !important;
}

/* Le glissement horizontal fait pivoter la figure ; le défilement vertical reste au navigateur. */
.hero__stage {
  touch-action: pan-y pinch-zoom;
}

.hero__stage.can-grab {
  cursor: grab;
}

.hero__stage.is-dragging {
  cursor: grabbing;
  -webkit-user-select: none;
  user-select: none;
}

.hero__meta {
  display: flex;
  justify-content: space-between;
  gap: 24px;
  padding-top: calc(var(--header-h) + 48px);
}

.hero__intro {
  margin-top: auto;
  padding-block: 56px clamp(28px, 4vh, 48px);
}

.hero__intro > * {
  max-width: 900px;
}

.hero__kicker {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 28px;
  font-size: var(--fs-small);
  color: var(--silver);
}

.hero__kicker::before {
  content: '';
  width: 32px;
  height: 1px;
  background: var(--blue);
}

.hero__lead {
  max-width: 30em;
  margin-top: 28px;
  font-size: var(--fs-lead);
  line-height: 1.55;
  letter-spacing: -0.005em;
  color: var(--silver);
}

.hero__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-top: 36px;
}

.hero__chapters {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-block: 0;
  padding: 28px 0;
  list-style: none;
  border-top: 1px solid var(--line-dark);
}

.chapter .label {
  margin-bottom: 12px;
}

.chapter__title {
  font-size: var(--fs-h3);
  font-weight: 500;
  letter-spacing: -0.015em;
  line-height: 1.15;
}

.chapter__text {
  margin-top: 8px;
  font-size: var(--fs-small);
  color: var(--mist);
}

.chapter .link-arrow {
  margin-top: 16px;
}

.hero__rail,
.hero__foot {
  display: none;
}

/* Version épinglée */

.hero.is-pinned {
  height: 380vh;
}

.hero.is-pinned .hero__stage {
  position: sticky;
  top: 0;
  height: 100svh;
  min-height: 0;
}

/* Épinglé, tout doit tenir dans la hauteur de l'écran : les espacements verticaux se resserrent
   sur les écrans peu hauts (ordinateurs portables) et retrouvent leur valeur dès 900 px environ. */
.hero.is-pinned .hero__meta {
  padding-top: calc(var(--header-h) + clamp(16px, 5.4vh, 48px));
}

.hero.is-pinned .hero__intro {
  padding-block: clamp(8px, 3vh, 56px) clamp(98px, 11.6vh, 104px);
  will-change: opacity, transform;
}

.hero.is-pinned .hero__kicker {
  margin-bottom: clamp(12px, 3.1vh, 28px);
}

.hero.is-pinned .hero__lead {
  margin-top: clamp(12px, 3.1vh, 28px);
}

.hero.is-pinned .hero__actions {
  margin-top: clamp(16px, 4vh, 36px);
}

.hero.is-pinned .hero__chapters {
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  display: block;
  padding: 0;
  border: 0;
  pointer-events: none;
}

.hero.is-pinned .chapter {
  position: absolute;
  left: 0;
  top: 0;
  width: min(560px, 46vw);
  opacity: 0;
  transform: translateY(-50%);
  will-change: opacity, transform;
}

.hero.is-pinned .chapter.is-active {
  pointer-events: auto;
}

.hero.is-pinned .chapter .label {
  margin-bottom: 24px;
}

.hero.is-pinned .chapter__title {
  font-size: var(--fs-h2);
  text-transform: uppercase;
  letter-spacing: -0.03em;
  line-height: 0.96;
}

.hero.is-pinned .chapter__text {
  margin-top: 24px;
  font-size: var(--fs-lead);
  color: var(--silver);
}

.hero.is-pinned .chapter .link-arrow {
  margin-top: 32px;
}

.hero.is-pinned .hero__rail {
  position: absolute;
  left: 50%;
  bottom: 30px;
  z-index: 1;
  display: flex;
  gap: 20px;
  margin: 0;
  padding: 0;
  list-style: none;
  transform: translateX(-50%);
}

.hero__rail li {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.08em;
  color: var(--mist);
  transition: color 0.4s var(--ease);
}

.hero__rail li::after {
  content: '';
  width: 18px;
  height: 1px;
  background: currentColor;
  transition: width 0.4s var(--ease), background 0.4s var(--ease);
}

.hero__rail li.is-active {
  color: var(--white);
}

.hero__rail li.is-active::after {
  width: 44px;
  background: var(--blue);
}

.hero.is-pinned .hero__foot {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding-block: 20px;
  border-top: 1px solid var(--line-dark);
  font-size: var(--fs-small);
  color: var(--silver);
}

.scroll-hint {
  display: inline-flex;
  align-items: center;
  gap: 12px;
}

.scroll-hint__circle {
  display: grid;
  place-items: center;
  width: 36px;
  height: 36px;
  border: 1px solid var(--line-dark-strong);
  border-radius: 50%;
}

.scroll-hint__circle .icon {
  width: 16px;
  height: 16px;
  animation: nudge 2.4s var(--ease) infinite;
}

.hero__sell span {
  margin-left: 8px;
  border-bottom: 1px solid var(--line-dark-strong);
  color: var(--white);
  transition: border-color 0.3s var(--ease);
}

.hero__sell:hover span {
  border-color: var(--white);
}

@keyframes nudge {
  0%,
  60%,
  100% {
    transform: translateY(0);
  }
  30% {
    transform: translateY(4px);
  }
}

/* ---------- 6. Notre terrain ---------- */

.terrain__grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 16px;
}

.card {
  position: relative;
  display: flex;
  flex-direction: column;
  grid-column: span 2;
  min-height: 264px;
  padding: 28px;
  border: 1px solid var(--line-dark);
  border-radius: var(--radius);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.012));
  transition: transform 0.5s var(--ease), border-color 0.4s var(--ease), background 0.4s var(--ease);
}

.card:hover {
  border-color: var(--line-dark-strong);
}

/* Le soulèvement n'existe que pour un pointeur qui survole ; au doigt, il resterait collé. */
@media (hover: hover) {
  .card:hover {
    transform: translateY(-4px);
  }
}

.card:active {
  transform: scale(0.985);
  transition-duration: 0.1s;
}

/* Reflet qui suit le pointeur (position fournie par motion.js). */
.card::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: radial-gradient(380px circle at var(--mx, 50%) var(--my, 0%), rgba(197, 202, 206, 0.11), rgba(197, 202, 206, 0) 62%);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.5s var(--ease);
}

.card:hover::before {
  opacity: 1;
}

.card > * {
  position: relative;
}

.card__top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
}

.card__icon {
  display: grid;
  place-items: center;
  width: 52px;
  height: 52px;
  border: 1px solid var(--line-dark-strong);
  border-radius: var(--radius-sm);
  color: var(--silver);
  transition: background 0.4s var(--ease), color 0.4s var(--ease), border-color 0.4s var(--ease);
}

.card__icon .icon {
  width: 24px;
  height: 24px;
}

.card:hover .card__icon {
  border-color: var(--paper);
  background: var(--paper);
  color: var(--ink);
}

.card__body {
  margin-top: auto;
  padding-top: 48px;
}

.card__text {
  margin-top: 6px;
  font-size: var(--fs-small);
  color: var(--mist);
}

.card__arrow {
  position: absolute;
  right: 24px;
  bottom: 24px;
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border: 1px solid var(--line-dark);
  border-radius: 50%;
  color: var(--silver);
  transition: transform 0.4s var(--ease), background 0.4s var(--ease), color 0.4s var(--ease), border-color 0.4s var(--ease);
}

.card__arrow .icon {
  width: 16px;
  height: 16px;
}

.card:hover .card__arrow {
  border-color: var(--blue);
  background: var(--blue);
  color: var(--white);
  transform: rotate(45deg);
}

.card--wide {
  grid-column: span 4;
}

.card__flow {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 28px 0 0;
  padding: 0 56px 0 0;
  list-style: none;
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--silver);
}

.card__flow li {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.card__flow li span {
  padding: 8px 14px;
  border: 1px solid var(--line-dark-strong);
  border-radius: var(--pill);
}

.card__flow li:last-child span {
  border-color: var(--blue);
  color: var(--blue-on-dark);
}

.card__flow .icon {
  width: 14px;
  height: 14px;
  color: var(--mist);
}

/* --- Catalogue des composants (version hardware) --- */
/* Sans app.js, les familles se lisent l'une sous l'autre ; avec lui, une seule à la fois,
   choisie dans la liste de gauche. */

.catalog__layout {
  display: grid;
  gap: 16px;
}

.catalog__nav {
  display: none;
}

.catalog__panels {
  display: grid;
  gap: 16px;
  min-width: 0;
}

.catalog__layout.is-ready {
  grid-template-columns: minmax(280px, 0.34fr) 1fr;
  align-items: start;
}

.is-ready .catalog__nav {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 8px;
  border: 1px solid var(--line-dark);
  border-radius: var(--radius);
  background: rgba(255, 255, 255, 0.02);
}

.catalog__nav button {
  position: relative;
  display: grid;
  grid-template-columns: 1.75rem 1.5rem 1fr auto;
  align-items: center;
  gap: 12px;
  min-height: 3.75rem;
  padding: 0 18px;
  border: 0;
  border-radius: var(--radius-sm);
  background: none;
  font-size: 1.0625rem;
  font-weight: 500;
  letter-spacing: -0.005em;
  text-align: left;
  color: var(--silver);
  transition: color 0.25s var(--ease) 0.05s, transform 0.1s ease-out;
}

.catalog__nav button:hover {
  color: var(--white);
}

.catalog__nav button:active {
  transform: scale(0.985);
}

.catalog__nav button[aria-pressed='true'] {
  background: var(--paper);
  color: var(--ink);
}

.catalog__nav button[aria-pressed='true'] .label,
.catalog__nav button[aria-pressed='true'] .catalog__count,
.catalog__nav button[aria-pressed='true'] .catalog__abbr {
  color: #5c646a;
}

/* Le sigle suit le nom de la famille : « Mémoire RAM », « Processeurs CPU ». */
.catalog__abbr {
  margin-left: 6px;
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  font-weight: 400;
  letter-spacing: 0.08em;
  color: var(--mist);
  transition: color 0.25s var(--ease) 0.05s;
}

.catalog__nav.has-thumb button[aria-pressed='true'] {
  background: transparent;
}

.catalog__nav .seg-thumb {
  border-radius: var(--radius-sm);
  background: var(--paper);
}

.catalog__count {
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  color: var(--mist);
  transition: color 0.25s var(--ease) 0.05s;
}

/* Les familles occupent la même case : la hauteur ne change pas quand on passe de l'une à l'autre. */
.is-ready .catalog__panels {
  gap: 0;
}

.is-ready .family {
  grid-area: 1 / 1;
  transition: opacity 0.2s var(--ease), visibility 0s linear 0.2s;
}

.is-ready .family:not(.is-active) {
  visibility: hidden;
  opacity: 0;
}

.is-ready .family.is-active {
  transition-delay: 0s;
}

.family {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--line-dark);
  border-radius: var(--radius);
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.012));
  overflow: hidden;
}

.family__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  padding: clamp(24px, 3vw, 40px);
}

.family__head > div {
  min-width: 0;
}

.family__title {
  margin-top: 16px;
  font-size: clamp(1.75rem, 2.6vw, 2.5rem);
  font-weight: 500;
  letter-spacing: -0.025em;
  line-height: 1.05;
  /* Les mots composés allemands peuvent dépasser la largeur d'un téléphone. */
  overflow-wrap: anywhere;
  -webkit-hyphens: auto;
  hyphens: auto;
}

.family__text {
  max-width: 30em;
  margin-top: 12px;
  color: var(--mist);
}

/* Dessins au trait, dans la veine de la figure du hero : argent, un seul détail en bleu. */
.family__art {
  flex: none;
  width: clamp(150px, 17vw, 240px);
  fill: none;
  stroke: var(--silver);
  stroke-width: 1.25;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.art-accent {
  stroke: var(--blue-on-dark);
}

/* Les lignes se partagent la hauteur disponible : une famille de deux types ne laisse pas de vide. */
.types {
  display: flex;
  flex: 1;
  flex-direction: column;
  margin: 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--line-dark);
}

.types li {
  display: flex;
  flex: 1 1 auto;
  max-height: 8.5rem;
}

.type {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto 2.75rem;
  align-items: center;
  gap: 10px 24px;
  width: 100%;
  padding: 16px clamp(24px, 3vw, 40px);
  border: 0;
  border-bottom: 1px solid var(--line-dark);
  background: none;
  text-align: left;
  transition: background 0.3s var(--ease);
}

.type:hover {
  background: rgba(197, 202, 206, 0.05);
}

.type:active {
  background: rgba(197, 202, 206, 0.1);
  transition-duration: 0.1s;
}

.type:focus-visible {
  outline-offset: -3px;
}

.type__name {
  display: block;
  font-size: 1.25rem;
  font-weight: 500;
  letter-spacing: -0.01em;
}

.type__text {
  display: block;
  margin-top: 2px;
  font-size: var(--fs-small);
  color: var(--mist);
}

.type__tags {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 6px;
}

.type__tags span {
  padding: 5px 10px;
  border: 1px solid var(--line-dark-strong);
  border-radius: var(--pill);
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.06em;
  white-space: nowrap;
  color: var(--silver);
}

.type__arrow {
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--line-dark);
  border-radius: 50%;
  color: var(--silver);
  transition: transform 0.4s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s var(--ease);
}

.type__arrow .icon {
  width: 16px;
  height: 16px;
}

.type:hover .type__arrow,
.type:focus-visible .type__arrow {
  border-color: var(--blue);
  background: var(--blue);
  color: var(--white);
  transform: rotate(45deg);
}

.family__foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px 24px;
  margin-top: auto;
  padding: 18px clamp(24px, 3vw, 40px);
}

.family__brands {
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.06em;
  color: var(--silver);
}

/* La famille choisie arrive ligne après ligne. */
.family.is-entering .family__head,
.family.is-entering .types li,
.family.is-entering .family__foot {
  animation: rise-in 0.45s var(--ease) both;
  animation-delay: calc(var(--i, 0) * 0.035s);
}

@media (max-width: 1080px) {
  .catalog__layout.is-ready {
    grid-template-columns: minmax(0, 1fr);
  }

  /* La rangée des familles et ses flèches partagent la première ligne. */
  .is-ready .catalog__nav,
  .catalog__layout .scroll-nav--overlay {
    grid-row: 1;
    grid-column: 1;
  }

  .catalog__layout .scroll-nav--overlay {
    z-index: 2;
  }

  .is-ready .catalog__panels {
    grid-row: 2;
  }

  /* La liste des familles devient une rangée qui défile à l'horizontale. */
  .is-ready .catalog__nav {
    flex-direction: row;
    gap: 8px;
    margin-inline: calc(-1 * var(--gutter));
    padding: 0 var(--gutter);
    border: 0;
    border-radius: 0;
    background: none;
    overflow-x: auto;
    scrollbar-width: none;
  }

  .catalog__nav::-webkit-scrollbar {
    display: none;
  }

  .catalog__nav button {
    flex: none;
    display: inline-flex;
    gap: 10px;
    min-height: 2.75rem;
    padding: 0 18px 0 14px;
    border: 1px solid var(--line-dark-strong);
    border-radius: var(--pill);
    font-size: var(--fs-small);
    white-space: nowrap;
  }

  .catalog__nav button .label,
  .catalog__count {
    display: none;
  }

  .catalog__nav button[aria-pressed='true'] {
    border-color: var(--paper);
  }

  .catalog__nav.has-thumb button[aria-pressed='true'] {
    border-color: transparent;
  }

  .catalog__nav .seg-thumb {
    border-radius: var(--pill);
  }

  /* Sur une colonne, chaque famille prend sa propre hauteur. */
  .is-ready .family:not(.is-active) {
    display: none;
  }

  .types li {
    flex: none;
    max-height: none;
  }
}

@media (max-width: 760px) {
  .family__head {
    flex-direction: column-reverse;
    align-items: flex-start;
    gap: 20px;
  }

  .family__art {
    width: 132px;
  }

  .family__title {
    font-size: 1.625rem;
  }

  .type {
    grid-template-columns: minmax(0, 1fr) 2.75rem;
  }

  .type__tags {
    grid-row: 2;
    justify-content: flex-start;
  }

  .type__arrow {
    grid-column: 2;
    grid-row: 1 / 3;
  }
}

/* --- Flèches des rangées qui défilent (posées par app.js) --- */

.scroll-nav {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 20px;
}

.scroll-nav[hidden] {
  display: none;
}

.scroll-nav__count {
  margin-right: auto;
}

.scroll-nav__btn {
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--line-dark-strong);
  border-radius: 50%;
  background: var(--graphite);
  color: var(--paper);
  transition: background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s var(--ease), opacity 0.3s var(--ease), transform 0.1s ease-out;
}

.scroll-nav__btn .icon {
  width: 16px;
  height: 16px;
}

.scroll-nav__btn[data-dir='-1'] .icon {
  transform: rotate(180deg);
}

@media (hover: hover) {
  .scroll-nav__btn:hover {
    border-color: var(--paper);
    background: var(--paper);
    color: var(--ink);
  }
}

.scroll-nav__btn:active {
  transform: scale(0.92);
}

/* En bout de course, la flèche s'efface : il n'y a plus rien de ce côté. */
.scroll-nav__btn:disabled {
  opacity: 0.3;
  pointer-events: none;
}

/* Posées sur les bords de la rangée : un halo de la couleur du fond détache la flèche de ce
   qui défile dessous. */
.scroll-nav--overlay {
  justify-content: space-between;
  align-self: center;
  margin: 0;
  pointer-events: none;
}

.scroll-nav--overlay .scroll-nav__btn {
  pointer-events: auto;
  box-shadow: 0 0 14px 12px var(--graphite);
}

.scroll-nav--overlay .scroll-nav__btn:disabled {
  visibility: hidden;
}

/* --- Bandeau des constructeurs --- */
/* Sans motion.js, ou quand les effets sont réduits, les noms tiennent sur quelques lignes fixes. */

.brands {
  margin-top: clamp(56px, 7vw, 104px);
}

.brands .section__note {
  display: block;
}

.marquee {
  --gap: clamp(16px, 2.6vw, 48px);
  display: flex;
  margin-block: 24px 0;
  padding-block: clamp(24px, 3vw, 40px);
  border-block: 1px solid var(--line-dark);
  overflow: hidden;
}

.marquee__track {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 20px var(--gap);
  margin: 0;
  padding: 0 var(--gutter);
  list-style: none;
}

.marquee__track li {
  display: flex;
  align-items: center;
  gap: 14px;
  font-size: clamp(1.375rem, 2.2vw, 2rem);
  font-weight: 500;
  letter-spacing: -0.02em;
  min-height: 2.25em;
  padding: 0 0.7em;
  border-radius: var(--radius-sm);
  white-space: nowrap;
  color: var(--mist);
  transition: color 0.3s var(--ease), background 0.3s var(--ease);
}

/* Logos en une seule teinte, celle du texte. `--h` (hauteur) et `--r` (largeur / hauteur) sont
   donnés logo par logo dans la page, pour qu'ils aient le même poids à l'œil. */
.brand-logo {
  flex: none;
  width: calc(var(--h, 1em) * var(--r, 1));
  height: var(--h, 1em);
  fill: currentColor;
  transition: fill 0.3s var(--ease);
}

/* Au survol, la marque s'allume : son logo prend sa couleur (`--brand`) sur une pastille claire,
   pour que les teintes sombres (bleu Samsung, violet Western Digital) restent lisibles. */
@media (hover: hover) {
  .marquee__track li:hover {
    background: var(--paper);
    color: var(--ink);
  }

  .marquee__track li:hover .brand-logo {
    fill: var(--brand, currentColor);
  }
}

.marquee.is-running {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
  cursor: grab;
  touch-action: pan-y; /* le défilement vertical de la page reste au navigateur */
  -webkit-user-select: none;
  user-select: none;
}

.marquee.is-dragging {
  cursor: grabbing;
}

.marquee.is-running .marquee__track {
  flex: none;
  flex-wrap: nowrap;
  padding: 0 calc(var(--gap) / 2);
  will-change: transform;
}

/* --- Frises (cycle de remarketing, méthode) : les étapes s'éclairent au défilement --- */
/* `has-progress` est posé par motion.js, dans la version hardware. */

.has-progress > li::before,
.has-progress > li strong,
.has-progress > li .h3,
.has-progress > li {
  transition: background 0.5s var(--ease), color 0.5s var(--ease), border-color 0.5s var(--ease);
}

.lifecycle.has-progress li:not(.is-reached)::before {
  background: #4a5157;
}

.lifecycle.has-progress li:not(.is-reached) strong {
  color: var(--mist);
}

.lifecycle.has-progress li.is-reached::before {
  background: var(--blue-on-dark);
}

.steps.has-progress .step:not(.is-reached) {
  border-top-color: var(--line-light);
}

.steps.has-progress .step:not(.is-reached)::before {
  background: #b4b8b4;
}

.steps.has-progress .step:not(.is-reached) .h3 {
  color: #5c646a;
}

.steps.has-progress .step.is-reached {
  border-top-color: var(--ink);
}

.steps.has-progress .step.is-reached::before {
  background: var(--blue-on-light);
}

/* ---------- 7. Sourcing desk ---------- */

.section__intro {
  max-width: 30em;
}

.section__intro p {
  font-size: var(--fs-lead);
  line-height: 1.55;
}

.section__intro .btn {
  margin-top: 28px;
}

.desk {
  padding: 8px clamp(16px, 2.4vw, 36px) 24px;
  border: 1px solid var(--line-light);
  border-radius: var(--radius);
  background: var(--white);
  box-shadow: 0 30px 80px rgba(10, 11, 12, 0.06);
}

.desk__bar {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 8px 24px;
  padding-block: 20px;
}

.filters {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 20px;
}

.chip {
  position: relative;
  min-height: 2.75rem;
  padding: 0 18px;
  border: 1px solid var(--line-light-strong);
  border-radius: var(--pill);
  background: none;
  font-size: 0.875rem;
  font-weight: 500;
  transition: background 0.3s var(--ease), color 0.25s var(--ease) 0.05s, border-color 0.3s var(--ease), transform 0.1s ease-out;
}

.chip:active {
  transform: scale(0.96);
}

.chip:hover {
  border-color: var(--ink);
}

.chip[aria-pressed='true'] {
  border-color: var(--ink);
  background: var(--ink);
  color: var(--paper);
}

.desk table {
  width: 100%;
  border-collapse: collapse;
  text-align: left;
}

.desk th {
  padding: 14px 12px;
  border-top: 1px solid var(--line-light);
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #5c646a;
}

.desk td {
  padding: 22px 12px;
  border-top: 1px solid var(--line-light);
  font-size: var(--fs-small);
}

.desk td:first-child {
  font-size: 1.25rem;
  font-weight: 500;
  letter-spacing: -0.01em;
}

.desk td small {
  display: block;
  margin-top: 4px;
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #5c646a;
}

.desk tbody tr {
  transition: background 0.3s var(--ease);
}

.desk tbody tr:hover {
  background: rgba(10, 11, 12, 0.035);
}

.desk tr[hidden] {
  display: none;
}

.status {
  display: inline-block;
  padding: 6px 12px;
  border: 1px solid var(--line-light-strong);
  border-radius: var(--pill);
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #5c646a;
}

.row-action {
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  margin-left: auto;
  border: 1px solid var(--line-light-strong);
  border-radius: 50%;
  background: none;
  transition: transform 0.4s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s var(--ease);
}

.row-action .icon {
  width: 16px;
  height: 16px;
}

.desk tr:hover .row-action,
.row-action:hover {
  border-color: var(--ink);
  background: var(--ink);
  color: var(--paper);
  transform: rotate(45deg);
}

.row-action:active {
  transform: rotate(45deg) scale(0.92);
  transition-duration: 0.1s;
}

.desk__foot {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 8px 24px;
  padding-top: 20px;
  border-top: 1px solid var(--line-light);
  font-size: 0.875rem;
  color: #5c646a;
}

/* ---------- 8. Sections de la page ---------- */
/* Chaque bloc porte ses propres règles d'adaptation aux écrans, à la suite. */

.section__aside,
.section__note {
  font-size: 0.875rem;
  color: var(--mist);
}

.section__intro .section__aside {
  margin-top: 16px;
  font-size: 0.875rem;
  line-height: 1.6;
}

.section__note {
  max-width: 62em;
  margin-top: 28px;
}

.h2--small {
  font-size: clamp(1.75rem, 3.2vw, 3rem);
}

/* --- Cas d'usage --- */

.usages__grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}

.card--static {
  grid-column: auto;
  min-height: 340px;
}

.card--static:hover,
.card--static:active {
  transform: none;
}

.card--static .card__top .label {
  color: var(--silver);
}

.card__brands {
  margin-top: 28px;
  padding-top: 18px;
  border-top: 1px solid var(--line-dark);
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.06em;
  color: var(--silver);
}

@media (max-width: 1080px) {
  .usages__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Sur mobile, les cas d'usage défilent à l'horizontale : l'inertie et la butée élastique
   sont celles du système. */
@media (max-width: 760px) {
  .usages__grid {
    display: flex;
    gap: 12px;
    margin-inline: calc(-1 * var(--gutter));
    padding-inline: var(--gutter);
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scroll-padding-inline: var(--gutter);
    scrollbar-width: none;
  }

  .usages__grid::-webkit-scrollbar {
    display: none;
  }

  .usages__grid > * {
    flex: 0 0 84%;
    min-height: 300px;
    scroll-snap-align: start;
  }
}

/* --- Deux entrées : chercher, proposer --- */

.split {
  display: grid;
  grid-template-columns: 1fr 1fr;
}

.split__side {
  display: flex;
  flex-direction: column;
  min-height: clamp(380px, 46vw, 560px);
  padding: clamp(48px, 7vw, 96px) var(--gutter);
  transition: background 0.5s var(--ease);
}

.split__side--dark {
  padding-left: max(var(--gutter), (100vw - var(--container)) / 2);
  background: var(--steel);
  color: var(--paper);
}

.split__side--light {
  padding-right: max(var(--gutter), (100vw - var(--container)) / 2);
  background: var(--silver);
  color: var(--ink);
}

.split__side--dark .label {
  color: var(--silver);
}

.split__side--light .label {
  color: #3d4347;
}

.split__side .h2 {
  margin-top: clamp(40px, 6vw, 88px);
  font-size: clamp(2.125rem, 4.2vw, 4rem);
}

.split__side p {
  margin-top: 24px;
  opacity: 0.78;
}

.split__link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-top: auto;
  padding-top: 24px;
  border-top: 1px solid currentColor;
  font-weight: 500;
}

.split__side .btn__icon {
  border: 1px solid currentColor;
}

.split__side--dark:hover {
  background: #323840;
}

.split__side--light:hover {
  background: var(--paper);
}

.split__side:hover .btn__icon {
  transform: rotate(45deg);
}

.split__side:active .split__link {
  opacity: 0.6;
}

@media (max-width: 760px) {
  .split {
    grid-template-columns: 1fr;
  }

  .split__side {
    min-height: 320px;
  }

  .split__link {
    margin-top: 40px;
  }
}

/* --- Remarketing --- */

.lifecycle {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  margin: 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--line-dark-strong);
}

.lifecycle li {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 22px 12px 0 0;
}

.lifecycle li::before {
  content: '';
  position: absolute;
  top: -4px;
  left: 0;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--silver);
}

.lifecycle li:last-child::before {
  background: var(--blue);
}

.lifecycle strong {
  font-size: var(--fs-small);
  font-weight: 500;
}

.passport {
  display: grid;
  grid-template-columns: 1.15fr 1fr;
  margin-top: clamp(48px, 6vw, 88px);
  border: 1px solid var(--line-dark);
  border-radius: var(--radius);
  overflow: hidden;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.01));
}

.passport__visual {
  position: relative;
  display: grid;
  place-items: center;
  min-height: 440px;
  padding: 72px 32px;
  border-right: 1px solid var(--line-dark);
}

.passport__tag,
.passport__steps {
  position: absolute;
  left: 28px;
}

.passport__tag {
  top: 28px;
}

.passport__steps {
  bottom: 28px;
}

/* Le SSD est dessiné au trait, dans le même esprit que la figure du hero. */
.passport__drive {
  width: min(220px, 60%);
  height: auto;
  fill: none;
  stroke: var(--silver);
  stroke-width: 1.5;
  stroke-linecap: round;
  transform: rotate(-9deg);
  transition: transform 0.8s var(--ease);
}

.passport__visual:hover .passport__drive {
  transform: rotate(-4deg) translateY(-6px);
}

.passport__plate {
  fill: rgba(197, 202, 206, 0.06);
}

.passport__led {
  fill: var(--blue);
  stroke: none;
}

.passport__record {
  padding: clamp(24px, 3vw, 40px);
}

.record {
  margin: 20px 0 0;
}

.record > div {
  display: flex;
  justify-content: space-between;
  gap: 20px;
  padding: 16px 0;
  border-bottom: 1px solid var(--line-dark);
}

.record dt {
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--mist);
}

.record dd {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0;
  font-family: var(--font-mono);
  font-size: 0.875rem;
  text-align: right;
}

.health {
  width: 64px;
  height: 4px;
  border-radius: 2px;
  background: var(--steel);
}

.health i {
  display: block;
  width: 98%;
  height: 100%;
  border-radius: inherit;
  background: var(--blue);
}

.asset-copy {
  display: grid;
  grid-template-columns: 1.15fr 1fr;
  gap: clamp(28px, 5vw, 72px);
  margin-top: clamp(48px, 6vw, 88px);
}

.asset-copy p {
  color: var(--silver);
}

/* Sept étapes ne tiennent pas sur une ligne de tablette : deux rangées. */
@media (max-width: 1080px) {
  .lifecycle {
    grid-template-columns: repeat(4, 1fr);
    gap: 0 20px;
    border-top: 0;
  }

  .lifecycle li {
    padding: 18px 0 24px;
    border-top: 1px solid var(--line-dark-strong);
  }
}

@media (max-width: 760px) {
  .lifecycle {
    grid-template-columns: repeat(2, 1fr);
    gap: 0 20px;
    border-top: 0;
  }

  .lifecycle li {
    padding: 16px 0;
    border-top: 1px solid var(--line-dark);
  }

  .passport,
  .asset-copy {
    grid-template-columns: 1fr;
  }

  .passport__visual {
    min-height: 360px;
    border-right: 0;
    border-bottom: 1px solid var(--line-dark);
  }
}

/* --- Volet dépliant (documentation, FAQ) --- */

.disclosure {
  border-bottom: 1px solid var(--line-dark);
}

.disclosure summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  padding: 22px 0;
  list-style: none;
  font-size: 1.125rem;
  font-weight: 500;
  line-height: 1.3;
  cursor: pointer;
}

.disclosure summary::-webkit-details-marker {
  display: none;
}

.disclosure__icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 2.25rem;
  height: 2.25rem;
  border: 1px solid var(--line-dark-strong);
  border-radius: 50%;
  transition: transform 0.4s var(--ease), background 0.3s var(--ease), color 0.3s var(--ease), border-color 0.3s var(--ease);
}

.disclosure__icon .icon {
  width: 16px;
  height: 16px;
}

.disclosure summary:active .disclosure__icon {
  transform: scale(0.92);
}

.disclosure[open] .disclosure__icon {
  border-color: var(--paper);
  background: var(--paper);
  color: var(--ink);
  transform: rotate(45deg);
}

.disclosure > p {
  max-width: 62ch;
  padding: 0 56px 26px 0;
  color: var(--silver);
  animation: rise-in 0.5s var(--ease) both;
}

.asset-copy .disclosure {
  margin-top: 20px;
}

.section--light .disclosure {
  border-color: var(--line-light);
}

.section--light .disclosure__icon {
  border-color: var(--line-light-strong);
}

.section--light .disclosure[open] .disclosure__icon {
  border-color: var(--ink);
  background: var(--ink);
  color: var(--paper);
}

.section--light .disclosure > p {
  color: #454b50;
}

/* --- Automation --- */

.automations {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

.auto-card {
  display: flex;
  flex-direction: column;
  min-height: 400px;
  padding: 28px;
  border: 1px solid var(--line-light);
  border-radius: var(--radius);
  background: var(--white);
  transition: transform 0.5s var(--ease), box-shadow 0.5s var(--ease);
}

@media (hover: hover) {
  .auto-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 30px 70px rgba(10, 11, 12, 0.08);
  }
}

.auto-card__art {
  display: grid;
  place-items: center;
  height: 168px;
  margin: 20px 0 28px;
  border-radius: var(--radius-sm);
  background: var(--paper);
}

.auto-card__art svg {
  width: 150px;
  height: auto;
  fill: none;
  stroke: var(--ink);
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.auto-card__flow {
  margin-top: auto;
  padding-top: 20px;
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.04em;
  line-height: 1.9;
  color: #5c646a;
}

@media (max-width: 900px) {
  .automations {
    grid-template-columns: 1fr;
  }

  .auto-card {
    min-height: 0;
  }
}

/* --- Manifeste --- */

.manifesto {
  padding-block: clamp(96px, 14vw, 220px);
  background: var(--ink);
}

/* Les lignes s'éclairent une à une à mesure que la section entre dans l'écran (motion.js). */
.manifesto__title {
  margin: clamp(40px, 6vw, 88px) 0 0;
  font-size: clamp(3rem, 10.6vw, 10.5rem);
  font-weight: 500;
  letter-spacing: -0.04em;
  line-height: 0.92;
  text-transform: uppercase;
}

.manifesto__title > span {
  display: block;
  opacity: var(--lit, 1);
}

.manifesto__foot {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: end;
  gap: clamp(28px, 8vw, 140px);
  margin-top: clamp(48px, 7vw, 104px);
}

.manifesto__foot p {
  color: var(--silver);
}

@media (max-width: 760px) {
  .manifesto__foot {
    grid-template-columns: 1fr;
  }
}

/* --- Méthode --- */

.tabs {
  position: relative;
  display: inline-flex;
  gap: 4px;
  padding: 4px;
  border: 1px solid var(--line-light-strong);
  border-radius: var(--pill);
}

.tabs button {
  position: relative;
  min-height: 2.75rem;
  padding: 0 22px;
  border: 0;
  border-radius: var(--pill);
  background: none;
  font-size: var(--fs-small);
  font-weight: 500;
  transition: color 0.25s var(--ease) 0.05s, background 0.3s var(--ease), transform 0.1s ease-out;
}

.tabs button:active {
  transform: scale(0.96);
}

.tabs button[aria-pressed='true'] {
  background: var(--ink);
  color: var(--paper);
}

.tabs.has-thumb button[aria-pressed='true'] {
  background: transparent;
}

.tabs .seg-thumb {
  background: var(--ink);
}

.steps {
  display: grid;
  grid-template-columns: repeat(var(--steps, 5), 1fr);
  gap: 24px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.step {
  position: relative;
  padding-top: 24px;
  border-top: 1px solid var(--line-light-strong);
  animation: rise-in 0.5s var(--ease) both;
  animation-delay: calc(var(--i, 0) * 0.05s);
}

.step::before {
  content: '';
  position: absolute;
  top: -4px;
  left: 0;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ink);
}

.step .h3 {
  margin: 28px 0 10px;
}

.step p {
  font-size: var(--fs-small);
  color: #454b50;
}

@media (max-width: 1080px) {
  .steps {
    grid-template-columns: repeat(3, 1fr);
    gap: 40px 24px;
  }
}

@media (max-width: 760px) {
  .steps {
    grid-template-columns: 1fr;
    gap: 0;
  }

  .step {
    display: grid;
    grid-template-columns: 44px 1fr;
    gap: 4px 0;
    padding: 20px 0;
  }

  .step .h3 {
    margin: 0;
  }

  .step p {
    grid-column: 2;
  }
}

/* --- Ancrage suisse --- */

.swiss {
  position: relative;
  overflow: hidden;
  isolation: isolate;
}

/* Courbes de niveau, à peine visibles, sur la droite. */
.swiss::before {
  content: '';
  position: absolute;
  top: -20%;
  right: -12%;
  z-index: -1;
  width: min(900px, 70vw);
  aspect-ratio: 1;
  border-radius: 46%;
  background: repeating-radial-gradient(ellipse at 58% 46%, transparent 0 17px, rgba(197, 202, 206, 0.09) 18px 19px);
  -webkit-mask-image: radial-gradient(closest-side, #000 30%, transparent);
  mask-image: radial-gradient(closest-side, #000 30%, transparent);
  transform: rotate(-24deg) skewX(12deg);
}

.swiss .h2 {
  margin-top: clamp(32px, 5vw, 72px);
}

.swiss__text {
  margin-top: 28px;
  font-size: var(--fs-lead);
  color: var(--silver);
}

.tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: clamp(48px, 7vw, 96px) 0 0;
  padding: 0;
  list-style: none;
}

.tags li {
  padding: 9px 16px;
  border: 1px solid var(--line-dark-strong);
  border-radius: var(--pill);
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--silver);
}

/* --- FAQ --- */

.faq {
  display: grid;
  grid-template-columns: 1fr 1.6fr;
  gap: clamp(32px, 6vw, 96px);
}

.faq .label {
  margin-bottom: 24px;
}

.faq__list {
  border-top: 1px solid var(--line-light-strong);
}

@media (max-width: 900px) {
  .faq {
    grid-template-columns: 1fr;
  }

  .disclosure > p {
    padding-right: 0;
  }
}

/* --- Contact --- */

.contact {
  background: var(--ink);
}

.contact .h2 {
  margin-top: 24px;
}

.contact__grid {
  display: grid;
  grid-template-columns: 1fr 1.25fr;
  gap: clamp(32px, 6vw, 96px);
  margin-top: clamp(40px, 5vw, 72px);
}

.paths {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.paths button {
  position: relative;
  display: flex;
  align-items: center;
  gap: 18px;
  min-height: 4.25rem;
  padding: 0 22px;
  border: 1px solid var(--line-dark);
  border-radius: var(--radius-sm);
  background: none;
  font-size: var(--fs-body);
  font-weight: 500;
  text-align: left;
  color: var(--silver);
  transition: color 0.25s var(--ease) 0.05s, background 0.3s var(--ease), border-color 0.3s var(--ease), transform 0.1s ease-out;
}

.paths button .icon {
  margin-left: auto;
  width: 18px;
  height: 18px;
}

.paths button:hover {
  border-color: var(--line-dark-strong);
  color: var(--white);
}

.paths button:active {
  transform: scale(0.985);
}

.paths button[aria-pressed='true'] {
  border-color: var(--paper);
  background: var(--paper);
  color: var(--ink);
}

.paths button[aria-pressed='true'] .label {
  color: #5c646a;
}

.paths.has-thumb button[aria-pressed='true'] {
  border-color: transparent;
  background: transparent;
}

.paths .seg-thumb {
  border-radius: var(--radius-sm);
  background: var(--paper);
}

.contact__note {
  margin-top: 32px;
  color: var(--mist);
}

.contact__email {
  margin-top: 24px;
  font-size: var(--fs-lead);
}

.form {
  padding: clamp(20px, 3vw, 40px);
  border: 1px solid var(--line-dark-strong);
  border-radius: var(--radius);
  background: var(--graphite);
}

.form__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 28px;
  padding-bottom: 20px;
  border-bottom: 1px solid var(--line-dark);
}

.form__context {
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--blue-on-dark);
}

.fields {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 20px 16px;
  margin-bottom: 20px;
}

.field {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0; /* un champ ne doit jamais élargir la page */
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--silver);
}

.field--wide {
  grid-column: 1 / -1;
}

.field input,
.field textarea,
.field select {
  width: 100%;
  min-width: 0;
  min-height: 3rem;
  padding: 12px 14px;
  border: 1px solid var(--line-dark-strong);
  border-radius: var(--radius-sm);
  background: rgba(255, 255, 255, 0.03);
  font-size: 1rem;
  font-weight: 400;
  color: var(--paper);
  color-scheme: dark;
  transition: border-color 0.25s var(--ease), box-shadow 0.25s var(--ease), background 0.25s var(--ease);
}

.field textarea {
  min-height: 6rem;
  resize: vertical;
}

.field input::placeholder,
.field textarea::placeholder {
  color: var(--mist);
}

.field input:focus,
.field textarea:focus,
.field select:focus {
  outline: 0;
  border-color: var(--blue-on-dark);
  background: rgba(255, 255, 255, 0.05);
  box-shadow: 0 0 0 3px rgba(47, 107, 255, 0.28);
}

.field input[type='file'] {
  padding: 9px 10px;
  font-size: 0.875rem;
  color: var(--mist);
}

.field input::file-selector-button {
  margin-right: 12px;
  padding: 7px 14px;
  border: 1px solid var(--line-dark-strong);
  border-radius: var(--pill);
  background: none;
  font: inherit;
  color: var(--paper);
  cursor: pointer;
}

/* Erreur : seule couleur hors palette, réservée à ce signal. */
.field [aria-invalid='true'] {
  border-color: var(--danger);
}

.field__error {
  font-size: 0.8125rem;
  font-weight: 400;
  color: var(--danger);
}

.privacy-note {
  margin: 24px 0;
  font-size: 0.875rem;
  line-height: 1.6;
  color: var(--mist);
}

.privacy-note button {
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  color: var(--paper);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.form__submit {
  width: 100%;
}

.form__status {
  margin-top: 16px;
  font-size: var(--fs-small);
  line-height: 1.55;
  color: var(--silver);
}

.form__status:empty {
  display: none;
}

.form__status[data-kind='success'] {
  padding: 14px 16px;
  border: 1px solid rgba(47, 107, 255, 0.5);
  border-radius: var(--radius-sm);
  background: rgba(47, 107, 255, 0.1);
  color: var(--paper);
}

.form__status[data-kind='error'] {
  color: var(--danger);
}

.send-options {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-top: 14px;
  animation: rise-in 0.5s var(--ease) both;
}

.send-options[hidden] {
  display: none;
}

.send-options .btn {
  white-space: normal;
}

@media (max-width: 900px) {
  .contact__grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 560px) {
  .fields,
  .send-options {
    grid-template-columns: minmax(0, 1fr);
  }

  .form {
    margin-inline: calc(-1 * var(--gutter) + 8px);
  }
}

/* --- Pied de page --- */

.site-footer {
  padding: clamp(56px, 7vw, 96px) 0 28px;
  border-top: 1px solid var(--line-dark);
  background: var(--ink);
}

.footer__top {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  gap: 40px;
}

.brand--large .brand__mark {
  width: 40px;
  height: 40px;
}

.brand--large .brand__name {
  font-size: 1.75rem;
}

.footer__baseline {
  margin-top: 24px;
  font-size: var(--fs-small);
  color: var(--mist);
}

.footer__col {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 14px;
  font-size: var(--fs-small);
}

.footer__col .label {
  margin-bottom: 6px;
}

.footer__col a,
.footer__col button,
.footer__bottom a,
.footer__bottom button {
  padding: 0;
  border: 0;
  background: none;
  color: var(--silver);
  transition: color 0.3s var(--ease);
}

.footer__col a:hover,
.footer__col button:hover,
.footer__bottom a:hover,
.footer__bottom button:hover {
  color: var(--white);
}

.footer__bottom {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 16px 32px;
  margin-top: clamp(48px, 6vw, 80px);
  padding-top: 24px;
  border-top: 1px solid var(--line-dark);
  font-family: var(--font-mono);
  font-size: var(--fs-label);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--mist);
}

.footer__bottom button,
.footer__bottom a {
  font: inherit;
  letter-spacing: inherit;
  text-transform: inherit;
}

.footer__top-link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.footer__top-link .icon {
  width: 14px;
  height: 14px;
}

@media (max-width: 760px) {
  .footer__top {
    grid-template-columns: 1fr 1fr;
  }

  .footer__top > :first-child {
    grid-column: 1 / -1;
  }
}

/* --- Fenêtre d'information : elle se pose sur la page assombrie --- */

dialog {
  width: min(640px, 100% - 32px);
  max-height: min(80vh, 720px);
  padding: clamp(28px, 4vw, 48px);
  border: 1px solid var(--line-dark-strong);
  border-radius: var(--radius);
  background: var(--graphite);
  color: var(--paper);
  box-shadow: 0 40px 120px rgba(0, 0, 0, 0.6);
}

dialog[open] {
  animation: dialog-in 0.35s var(--ease);
}

dialog::backdrop {
  background: rgba(5, 6, 7, 0.66);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  animation: backdrop-in 0.35s var(--ease);
}

@keyframes dialog-in {
  from {
    opacity: 0;
    transform: translateY(12px) scale(0.97);
  }
}

@keyframes backdrop-in {
  from {
    opacity: 0;
  }
}

dialog h2 {
  margin-bottom: 20px;
  font-size: clamp(1.5rem, 2.4vw, 2rem);
  font-weight: 500;
  letter-spacing: -0.02em;
  line-height: 1.1;
}

dialog p {
  margin-top: 14px;
  font-size: var(--fs-small);
  color: var(--silver);
}

.dialog__close {
  position: absolute;
  top: 14px;
  right: 14px;
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid var(--line-dark-strong);
  border-radius: 50%;
  background: none;
  color: var(--paper);
  transition: background 0.3s var(--ease), transform 0.1s ease-out;
}

.dialog__close:hover {
  background: rgba(197, 202, 206, 0.12);
}

.dialog__close:active {
  transform: scale(0.94);
}

/* Le libellé « Qté » des fiches mobiles du tableau suit la langue de la page. */
html[lang='en'] {
  --quantity-label: 'Qty ';
}

html[lang='de'] {
  --quantity-label: 'Menge ';
}

/* Les titres allemands sont plus longs : on les resserre pour qu'ils tiennent. */
html[lang='de'] .display {
  font-size: clamp(2.5rem, min(6vw, 10.5vh), 6.25rem);
}

html[lang='de'] .manifesto__title {
  font-size: clamp(2.75rem, 9.6vw, 9.5rem);
}

@media (max-width: 760px) {
  html[lang='de'] .display {
    font-size: clamp(1.9rem, 9.2vw, 3.75rem);
  }

  html[lang='de'] .h2 {
    font-size: clamp(1.75rem, 8vw, 2.75rem);
    hyphens: auto;
  }
}

/* ---------- 9. Adaptation aux écrans (en-tête, hero, terrain, tableau) ---------- */

@media (max-width: 1080px) {
  .site-nav {
    display: none;
  }

  .menu-toggle {
    display: grid;
  }

  /* Le panneau se matérialise depuis le bouton qui l'ouvre (flou, échelle et opacité ensemble)
     et repart par le même chemin. Pas de voile : il ne bloque pas la page derrière lui. */
  .mobile-nav {
    position: fixed;
    top: calc(16px + var(--header-h) + 8px);
    left: var(--gutter);
    right: var(--gutter);
    z-index: 49;
    display: flex;
    flex-direction: column;
    padding: 12px 24px;
    border: 1px solid var(--line-dark-strong);
    border-radius: var(--radius);
    background: rgba(14, 16, 18, 0.86);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.09), 0 28px 70px rgba(0, 0, 0, 0.5);
    -webkit-backdrop-filter: blur(0) saturate(100%);
    backdrop-filter: blur(0) saturate(100%);
    opacity: 0;
    visibility: hidden;
    transform: translateY(-10px) scale(0.95);
    transform-origin: calc(100% - 30px) 0;
    transition:
      opacity 0.26s var(--ease),
      transform 0.34s var(--ease),
      backdrop-filter 0.34s var(--ease),
      -webkit-backdrop-filter 0.34s var(--ease),
      visibility 0s linear 0.34s;
  }

  .mobile-nav.is-open {
    -webkit-backdrop-filter: blur(28px) saturate(160%);
    backdrop-filter: blur(28px) saturate(160%);
    opacity: 1;
    visibility: visible;
    transform: none;
    transition-delay: 0s;
  }

  .mobile-nav a:active {
    opacity: 0.6;
  }

  .mobile-nav a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-block: 16px;
    border-bottom: 1px solid var(--line-dark);
    font-size: 1.125rem;
  }

  .mobile-nav a:last-child {
    border-bottom: 0;
  }

  .hero.is-pinned .hero__rail {
    display: none;
  }

  .terrain__grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .card,
  .card--wide {
    grid-column: span 1;
  }

  .card--wide {
    grid-column: 1 / -1;
  }
}

@media (max-width: 760px) {
  .display {
    font-size: clamp(2rem, 9.4vw, 4rem);
  }

  .site-header {
    top: 10px;
  }

  .site-header__bar {
    padding: 0 8px 0 18px;
  }

  .site-header__tools .btn {
    display: none;
  }

  .hero__media {
    position: relative;
    height: 44svh;
    min-height: 300px;
    z-index: 0;
  }

  .hero__media::before {
    background: radial-gradient(ellipse 70% 60% at 50% 56%, rgba(197, 202, 206, 0.075), rgba(197, 202, 206, 0) 70%);
  }

  /* Trop petits pour être lus à cette taille. */
  .hero__callouts,
  .hero__drag-hint {
    display: none;
  }

  /* Sur mobile, les libellés du haut passeraient sur l'objet : on les retire. */
  .hero__meta {
    display: none;
  }

  .hero__intro {
    margin-top: 0;
    padding-block: 0 40px;
    position: relative;
    z-index: 1;
  }

  .hero__actions .btn {
    flex: 1 1 100%;
  }

  .hero__chapters {
    grid-template-columns: 1fr;
    gap: 0;
    padding: 0;
  }

  .chapter {
    padding-block: 24px;
    border-bottom: 1px solid var(--line-dark);
  }

  .chapter:last-child {
    border-bottom: 0;
  }

  .terrain__grid {
    grid-template-columns: 1fr;
  }

  .card {
    min-height: 0;
  }

  .card__body {
    padding-top: 36px;
  }

  .card__flow {
    padding-right: 0;
    padding-bottom: 56px;
  }

  /* Le tableau devient une liste de fiches. */
  .desk table,
  .desk tbody {
    display: block;
  }

  .desk thead {
    display: none;
  }

  .desk tbody tr {
    display: grid;
    grid-template-columns: 1fr 1fr 40px;
    align-items: center;
    gap: 10px 8px;
    padding-block: 18px;
    border-top: 1px solid var(--line-light);
  }

  .desk td {
    padding: 0;
    border: 0;
  }

  .desk td:first-child {
    grid-column: 1 / 3;
  }

  .desk td:nth-child(2) {
    display: none;
  }

  .desk td:nth-child(3)::before {
    content: var(--quantity-label, 'Qté ');
    color: #5c646a;
  }

  .desk td:nth-child(5) {
    grid-column: 1 / 3;
  }

  .desk td:nth-child(6) {
    grid-column: 3;
    grid-row: 1 / 4;
  }
}

/* Entre le téléphone et la tablette, les deux boutons du hero tiennent côte à côte. */
@media (min-width: 520px) and (max-width: 760px) {
  .hero__actions .btn {
    flex: 1 1 0;
  }
}

/* Très petits téléphones (320 à 400 px) : rien ne doit dépasser de l'écran. */
@media (max-width: 400px) {
  .btn {
    white-space: normal;
    text-align: left;
  }

  .site-header__bar {
    padding-left: 14px;
  }

  .brand {
    gap: 8px;
  }

  .brand__mark {
    width: 22px;
    height: 22px;
  }

  .brand__name {
    font-size: 1rem;
  }

  .lang-switch button {
    min-width: 32px;
    padding: 0 6px;
  }

  .site-header__tools {
    gap: 8px;
  }
}

/* ---------- 10. Préférences d'accessibilité ---------- */

/* Moins de mouvement ne veut pas dire aucun retour : glissements, échelles et ressorts disparaissent,
   les fondus courts d'opacité et de couleur restent. motion.js désépingle aussi le hero. */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation: none !important;
    transition-property: opacity, color, background-color, border-color !important;
    transition-duration: 0.2s !important;
    transition-delay: 0s !important;
  }

  .reveal.is-waiting,
  .mobile-nav {
    transform: none;
  }

  .btn:active,
  .btn:hover .btn__icon,
  .card:hover,
  .card:active,
  .card:hover .card__arrow,
  .chip:active,
  .lang-switch button:active,
  .menu-toggle:active,
  .catalog__nav button:active,
  .scroll-nav__btn:active,
  .type:hover .type__arrow,
  .type:focus-visible .type__arrow {
    transform: none;
  }
}

.reduce-effects *,
.reduce-effects *::before,
.reduce-effects *::after {
  animation: none !important;
  transition-property: opacity, color, background-color, border-color !important;
  transition-duration: 0.2s !important;
  transition-delay: 0s !important;
}

.reduce-effects .reveal.is-waiting,
.reduce-effects .mobile-nav {
  transform: none;
}

/* Moins de transparence : les surfaces en verre deviennent pleines, sans flou. */
@media (prefers-reduced-transparency: reduce) {
  .site-header__bar,
  .site-header.is-scrolled .site-header__bar,
  .mobile-nav,
  .mobile-nav.is-open {
    background: var(--graphite);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }

  .btn--ghost {
    background: var(--steel);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }

  body::after {
    display: none;
  }
}

/* Plus de contraste : fonds pleins, bords nets, textes secondaires éclaircis. */
@media (prefers-contrast: more) {
  :root {
    --mist: #b4bbc0;
    --line-dark: rgba(197, 202, 206, 0.4);
    --line-dark-strong: rgba(197, 202, 206, 0.7);
    --line-light: rgba(10, 11, 12, 0.4);
    --line-light-strong: rgba(10, 11, 12, 0.7);
  }

  .site-header__bar,
  .mobile-nav.is-open {
    background: var(--ink);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
  }

  .section--light .muted,
  .section--light .label,
  .desk th,
  .desk td small,
  .status,
  .desk__foot {
    color: #33383c;
  }

  body::after {
    display: none;
  }
}
