/* ============================================================
   IMPALA — « Le bond »
   Prose en serif, preuves en mono. Une seule ligne outremer
   tient la page : trajectoire dans le hero, colonne vertébrale
   ensuite, ramification vers chaque participation.
   ============================================================ */

:root{
  /* Palette — bone froid, noir-vert, outremer.
     Volontairement ni crème chaud ni terracotta. */
  --paper:     #E8E9E3;
  --paper-2:   #DFE1D9;
  --ink:       #0F1714;
  --slate:     #5A645E;
  --ultra:     #1B2FC7;
  --sand:      #C0B196;

  --rule:      color-mix(in srgb, var(--ink) 14%, transparent);
  --rule-soft: color-mix(in srgb, var(--ink) 8%, transparent);

  --serif: "Newsreader", Georgia, "Times New Roman", serif;
  --sans:  "Instrument Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --mono:  "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;

  /* Le rail : abscisse de la colonne vertébrale, et retrait du contenu. */
  --spine-x: 4.5vw;
  --pad-l:   calc(var(--spine-x) + 4.5vw);
  --pad-r:   6vw;
  --measure: 78rem;

  --progress: 0;
  --ease: cubic-bezier(.22,.61,.36,1);
}

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

html{
  -webkit-text-size-adjust:100%;
  scroll-behavior:smooth;
  scroll-padding-top:6rem;
}

body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:clamp(1rem,.94rem + .28vw,1.125rem);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}

h1,h2,h3{ margin:0; font-weight:400; }
p{ margin:0; }
a{ color:inherit; }

::selection{ background:var(--ultra); color:var(--paper); }

:focus-visible{
  outline:2px solid var(--ultra);
  outline-offset:4px;
  border-radius:1px;
}

.skip{
  position:absolute; left:-9999px; top:0; z-index:99;
  background:var(--ink); color:var(--paper);
  padding:.75rem 1.25rem; font-family:var(--mono); font-size:.75rem;
}
.skip:focus{ left:1rem; top:1rem; }


/* ─────────────── La colonne vertébrale ─────────────── */

.spine{
  position:fixed; z-index:2;
  left:var(--spine-x); top:0; bottom:0;
  width:1px;
  background:var(--rule);
  pointer-events:none;
}
.spine__run{
  display:block; position:absolute; inset:0 auto auto 0;
  width:100%;
  height:calc(var(--progress) * 100%);
  background:var(--ultra);
}


/* ─────────────── Bandeau de tête ─────────────── */

.masthead{
  position:fixed; z-index:10; inset:0 0 auto 0;
  display:flex; align-items:center; gap:2rem;
  padding:1.5rem var(--pad-r) 1.5rem var(--pad-l);
  font-family:var(--mono);
  font-size:.7rem; letter-spacing:.1em; text-transform:uppercase;
}
/* Transparent au-dessus du hero, opaque dès qu’on défile : sinon le titre
   de section passe sous le bandeau et les deux se superposent. */
.masthead::before{
  content:""; position:absolute; inset:0; z-index:-1;
  background:var(--paper);
  border-bottom:1px solid var(--rule-soft);
  opacity:0;
  transition:opacity .35s var(--ease);
}
.masthead.is-stuck::before{ opacity:1; }
.masthead__mark{
  font-family:var(--serif); font-size:1.05rem; font-weight:400;
  letter-spacing:.34em; text-transform:none; text-decoration:none;
  margin-right:auto;
}
/* « SAS » est la forme juridique, pas la marque : présent mais en retrait. */
.masthead__mark span{ color:var(--slate); font-size:.72em; letter-spacing:.22em; }
.masthead__nav{ display:flex; gap:clamp(1rem,2.2vw,1.75rem); }
.masthead__nav a,
.masthead__contact{
  color:var(--slate); text-decoration:none;
  transition:color .3s var(--ease);
}
.masthead__nav a:hover,
.masthead__contact:hover{ color:var(--ultra); }
.masthead__contact{ color:var(--ink); }

@media (max-width:680px){
  .masthead__nav{ display:none; }
}


/* ─────────────── Éléments partagés ─────────────── */

.eyebrow,
.label{
  font-family:var(--mono);
  font-size:.7rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--slate);
}

.label{
  display:flex; align-items:center; gap:.9rem;
  margin-bottom:clamp(2.5rem,5vw,4rem);
  color:var(--ultra);
}
.label::before{
  content:""; width:1.75rem; height:1px; background:currentColor;
}

em{ font-style:italic; }


/* ─────────────── Hero ─────────────── */

.hero{
  position:relative;
  display:flex; flex-direction:column; justify-content:center;
  min-height:100svh;
  padding:9rem var(--pad-r) 3rem var(--pad-l);
}

.leap{
  position:absolute; z-index:0;
  left:0; right:0; bottom:16%;
  width:100%; height:min(62vh,30rem);
  color:var(--ultra);
  opacity:.5;
  pointer-events:none;
}
.leap__path{
  stroke-dasharray:var(--len,2000);
  stroke-dashoffset:var(--len,2000);
  animation:draw 2.4s var(--ease) .35s forwards;
}
.leap__node{ opacity:0; animation:pop .8s var(--ease) 2.2s forwards; }

@keyframes draw{ to{ stroke-dashoffset:0; } }
@keyframes pop{ to{ opacity:1; } }

.hero > *:not(.leap){ position:relative; z-index:1; }

.hero .eyebrow{
  margin-bottom:clamp(1.75rem,3vw,2.5rem);
  animation:rise 1s var(--ease) .1s both;
}

.hero__line{
  font-family:var(--serif);
  font-weight:200;
  font-size:clamp(3rem,8.6vw,8.5rem);
  line-height:.98;
  letter-spacing:-.025em;
  max-width:16ch;
  animation:rise 1.1s var(--ease) .25s both;
}
.hero__line em{ color:var(--ultra); }

.hero__sub{
  margin-top:clamp(1.75rem,3vw,2.5rem);
  max-width:34ch;
  font-size:clamp(1rem,.9rem + .4vw,1.25rem);
  line-height:1.45;
  color:var(--slate);
  animation:rise 1.1s var(--ease) .45s both;
}

.ticker{
  display:flex; flex-wrap:wrap; gap:clamp(1.75rem,5vw,4.5rem);
  margin:clamp(3.5rem,8vw,6rem) 0 0;
  padding-top:1.5rem;
  border-top:1px solid var(--rule);
  animation:rise 1.1s var(--ease) .65s both;
}
.ticker div{ display:flex; flex-direction:column-reverse; gap:.35rem; }
.ticker dt{
  font-family:var(--mono); font-size:.68rem;
  letter-spacing:.12em; text-transform:uppercase; color:var(--slate);
}
.ticker dd{
  margin:0;
  font-family:var(--mono); font-size:clamp(1.1rem,1.6vw,1.4rem);
  font-weight:500; font-variant-numeric:tabular-nums;
}

@keyframes rise{
  from{ opacity:0; transform:translateY(1.25rem); }
  to  { opacity:1; transform:none; }
}


/* ─────────────── Bandes ─────────────── */

.band{
  position:relative;
  padding:clamp(6rem,13vw,12rem) var(--pad-r) clamp(6rem,13vw,12rem) var(--pad-l);
  max-width:var(--measure);
}

.band__lead{
  font-family:var(--serif);
  font-weight:200;
  font-size:clamp(1.9rem,4.2vw,3.6rem);
  line-height:1.1;
  letter-spacing:-.018em;
  max-width:20ch;
  margin-bottom:clamp(3.5rem,7vw,6rem);
}
.band__lead em{ color:var(--ultra); }


/* ─────────────── Thèse ─────────────── */

/* Trois colonnes ou une seule : jamais deux, qui laisseraient un orphelin. */
.tenets{
  display:grid;
  grid-template-columns:1fr;
  gap:clamp(2.5rem,4vw,3.5rem);
}
@media (min-width:820px){
  .tenets{ grid-template-columns:repeat(3,1fr); }
}
.tenet h3{
  font-family:var(--serif);
  font-size:clamp(1.25rem,1.9vw,1.6rem);
  font-weight:300;
  line-height:1.2;
  letter-spacing:-.01em;
  padding-bottom:1rem;
  margin-bottom:1rem;
  border-bottom:1px solid var(--rule);
}
.tenet p{ color:var(--slate); font-size:.98rem; line-height:1.6; }

/* ─────────────── Valeurs cardinales ─────────────── */

.values{
  margin-top:clamp(3.5rem,7vw,6rem);
  padding-top:clamp(1.75rem,3vw,2.5rem);
  border-top:1px solid var(--rule);
}
.values__k{
  font-family:var(--mono); font-size:.68rem;
  letter-spacing:.13em; text-transform:uppercase; color:var(--slate);
  margin-bottom:1.5rem;
}
.values__list{
  list-style:none; margin:0; padding:0;
  display:grid; gap:clamp(1.25rem,2.5vw,2rem);
}
@media (min-width:820px){ .values__list{ grid-template-columns:repeat(3,1fr); } }
.values__list li{ display:flex; flex-direction:column; gap:.35rem; }
.values__list b{
  font-family:var(--serif); font-weight:300;
  font-size:clamp(1.15rem,1.8vw,1.45rem); letter-spacing:-.01em;
}
.values__list span{ font-size:.92rem; color:var(--slate); line-height:1.5; }


/* ─────────────── Le nom ─────────────── */

.band--name{ max-width:none; background:var(--paper-2); border-block:1px solid var(--rule-soft); }

.quote{ margin:0; max-width:var(--measure); }
.quote blockquote{ margin:0; }
.quote blockquote p{
  font-family:var(--serif); font-weight:200;
  font-size:clamp(1.35rem,2.6vw,2.15rem);
  line-height:1.24; letter-spacing:-.014em;
  max-width:34ch;
}
.quote blockquote em{ font-style:italic; color:var(--ultra); }
.quote figcaption{
  display:flex; flex-direction:column; gap:.3rem;
  margin-top:clamp(1.75rem,3vw,2.5rem);
  padding-left:clamp(1.25rem,2.5vw,2rem);
  border-left:2px solid var(--ultra);
}
.quote__who{ font-family:var(--serif); font-size:1.1rem; }
.quote__what{
  font-family:var(--mono); font-size:.66rem;
  letter-spacing:.11em; text-transform:uppercase; color:var(--slate);
}
.quote__after{
  margin-top:clamp(2.5rem,5vw,4rem);
  max-width:46ch; color:var(--slate); line-height:1.6;
}


/* ─────────────── Chiffres ─────────────── */

.band--figures{
  max-width:none;
  background:var(--paper-2);
  border-block:1px solid var(--rule-soft);
}

/* Quatre chiffres : 1 · 2 · 4 colonnes. Trois laisserait un orphelin. */
.figures{
  display:grid;
  grid-template-columns:1fr;
  gap:clamp(2.5rem,4vw,3rem);
  max-width:var(--measure);
}
@media (min-width:520px){ .figures{ grid-template-columns:repeat(2,1fr); } }
@media (min-width:1040px){ .figures{ grid-template-columns:repeat(4,1fr); } }
.figure{
  display:flex; flex-direction:column; gap:.85rem;
  padding-top:1.25rem;
  border-top:1px solid var(--rule);
}
.figure__n{
  font-family:var(--mono);
  font-size:clamp(2.2rem,5vw,3.6rem);
  font-weight:400;
  letter-spacing:-.045em;
  line-height:1;
  font-variant-numeric:tabular-nums;
  color:var(--ultra);
}
.figure__k{
  font-size:.88rem; line-height:1.45; color:var(--slate); max-width:22ch;
}


/* ─────────────── Portefeuille ─────────────── */

.folio{ max-width:64rem; }

/* Vingt-deux lignes à plat seraient illisibles : elles sont groupées par
   secteur, ce qui est aussi la taxonomie du client. */
.sector{ margin-bottom:clamp(3rem,6vw,5rem); }
.sector:last-child{ margin-bottom:0; }
.sector__h{
  font-family:var(--mono); font-size:.68rem;
  letter-spacing:.13em; text-transform:uppercase; color:var(--ultra);
  margin-bottom:.5rem;
}
.sector__list{ list-style:none; margin:0; padding:0; }

.folio__row{
  position:relative;
  display:grid;
  grid-template-columns:minmax(0,15rem) minmax(0,1fr);
  column-gap:clamp(1.5rem,4vw,3.5rem);
  align-items:baseline;
  padding:clamp(1.15rem,2.1vw,1.7rem) 0;
  border-top:1px solid var(--rule);
  transition:padding-left .5s var(--ease);
}
.sector__list li:last-child{ border-bottom:1px solid var(--rule); }

/* La ramification : un trait qui sort de la colonne vers la ligne survolée. */
.folio__branch{
  position:absolute; left:calc(-1 * var(--pad-l) + var(--spine-x));
  top:-1px; width:calc(var(--pad-l) - var(--spine-x));
  height:1px; background:var(--ultra);
  transform:scaleX(0); transform-origin:left;
  transition:transform .55s var(--ease);
}
.folio__row:hover .folio__branch,
.folio__row:focus-within .folio__branch{ transform:scaleX(1); }

.folio__name{
  grid-column:1;
  margin:0;
  font-family:var(--serif);
  font-size:clamp(1.2rem,2.3vw,1.7rem);
  font-weight:300;
  line-height:1.1;
  letter-spacing:-.015em;
  transition:color .35s var(--ease);
}
.folio__note{
  grid-column:2;
  color:var(--slate); font-size:.95rem; line-height:1.55; max-width:52ch;
  transition:color .35s var(--ease);
}

.folio__row:hover{ padding-left:clamp(.75rem,1.5vw,1.5rem); }
.folio__row:hover .folio__name{ color:var(--ultra); }
.folio__row:hover .folio__note{ color:var(--ink); }

@media (max-width:760px){
  .folio__row{ grid-template-columns:1fr; row-gap:.5rem; }
  .folio__name,.folio__note{ grid-column:1; }
}


/* ─────────────── Histoires ─────────────── */

.tales{
  display:grid; grid-template-columns:1fr;
  gap:clamp(3rem,5vw,4rem);
}
@media (min-width:900px){ .tales{ grid-template-columns:repeat(3,1fr); } }

.tale__tag{
  font-family:var(--mono); font-size:.64rem;
  letter-spacing:.13em; text-transform:uppercase; color:var(--ultra);
  padding-bottom:.85rem; margin-bottom:1.1rem;
  border-bottom:1px solid var(--rule);
}
.tale__h{
  font-family:var(--serif); font-weight:300;
  font-size:clamp(1.4rem,2.4vw,1.9rem);
  letter-spacing:-.015em; line-height:1.1;
  margin-bottom:.9rem;
}
.tale__body{ color:var(--slate); font-size:.95rem; line-height:1.6; }
.tale__stat{
  margin-top:1.1rem; padding-top:1.1rem;
  border-top:1px solid var(--rule-soft);
  font-size:.9rem; line-height:1.55; color:var(--slate);
}
/* Le mono est réservé aux chiffres : en mettre des mots y ressemblerait à du
   code. Les mots appuyés restent dans la fonte de labeur. */
.tale__stat b{ color:var(--ink); font-weight:500; }
.tale__stat .num{
  font-family:var(--mono); font-weight:500;
  font-variant-numeric:tabular-nums;
}


/* ─────────────── Gouvernance ─────────────── */

.gov{
  display:grid;
  grid-template-columns:1fr;
  gap:clamp(2.5rem,4vw,4rem);
}
@media (min-width:760px){ .gov{ grid-template-columns:repeat(3,1fr); } }
.gov__h{
  font-family:var(--mono); font-size:.68rem;
  letter-spacing:.13em; text-transform:uppercase; color:var(--ultra);
  padding-bottom:.9rem; margin-bottom:1.25rem;
  border-bottom:1px solid var(--rule);
}
.gov__note{
  margin:-.4rem 0 1.25rem; font-size:.85rem; color:var(--slate); line-height:1.45;
}
.roster{ list-style:none; margin:0; padding:0; display:grid; gap:.9rem; }
.roster li{ display:flex; flex-direction:column; gap:.15rem; }
.roster b{
  font-family:var(--serif); font-weight:400; font-size:1.05rem; letter-spacing:-.005em;
}
.roster span{
  font-family:var(--mono); font-size:.64rem;
  letter-spacing:.11em; text-transform:uppercase; color:var(--slate);
}
.roster--lead b{ font-size:clamp(1.3rem,2vw,1.7rem); font-weight:300; }


/* ─────────────── Contact ─────────────── */

.band--contact{ padding-bottom:clamp(4rem,8vw,7rem); }

.contact__lead{
  font-family:var(--serif); font-weight:200;
  font-size:clamp(2rem,5.2vw,4.4rem);
  line-height:1.05; letter-spacing:-.022em;
  max-width:17ch;
}
.contact__lead em{ color:var(--ultra); }

.contact__mail{
  display:inline-block;
  margin-top:clamp(2.5rem,5vw,4rem);
  font-family:var(--mono);
  font-size:clamp(1rem,2.4vw,1.9rem);
  letter-spacing:-.02em;
  text-decoration:none;
  padding-bottom:.35rem;
  background:linear-gradient(var(--ultra),var(--ultra)) no-repeat left bottom / 100% 1px;
  transition:background-size .5s var(--ease),color .35s var(--ease);
}
.contact__mail:hover{
  color:var(--ultra);
  background-size:100% 2px;
}

.contact__meta{
  display:flex; flex-wrap:wrap; gap:clamp(2rem,5vw,4.5rem);
  margin-top:clamp(3rem,6vw,5rem);
  padding-top:1.5rem;
  border-top:1px solid var(--rule);
  font-family:var(--mono); font-size:.75rem; font-style:normal;
  line-height:1.9; color:var(--slate);
}
.contact__meta a{ text-decoration:none; }
.contact__meta a:hover{ color:var(--ultra); }


/* ─────────────── Pied ─────────────── */

.foot{
  display:flex; flex-wrap:wrap; gap:1rem 2.5rem;
  padding:1.75rem var(--pad-r) 1.75rem var(--pad-l);
  border-top:1px solid var(--rule);
  font-family:var(--mono); font-size:.66rem;
  letter-spacing:.1em; text-transform:uppercase; color:var(--slate);
}
.foot a{ text-decoration:none; }
.foot a:hover{ color:var(--ultra); }


/* ─────────────── Apparition au défilement ─────────────── */

.reveal{
  opacity:0; transform:translateY(1.5rem);
  transition:opacity .9s var(--ease),transform .9s var(--ease);
}
.reveal.is-in{ opacity:1; transform:none; }

.tenet:nth-child(2),.figure:nth-child(2){ transition-delay:.08s; }
.tenet:nth-child(3),.figure:nth-child(3){ transition-delay:.16s; }
.figure:nth-child(4){ transition-delay:.24s; }


/* ─────────────── Petits écrans ─────────────── */

@media (max-width:700px){
  :root{
    --spine-x:1.25rem;
    --pad-l:2.75rem;
    --pad-r:1.5rem;
  }
  /* Remontée pour que la courbe ne traverse pas la ligne de chiffres. */
  .leap{ opacity:.3; bottom:27%; height:min(38vh,16rem); }
}


/* ─────────────── Mouvement réduit ─────────────── */

@media (prefers-reduced-motion:reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
  .reveal{ opacity:1; transform:none; }
  .leap__path{ stroke-dashoffset:0; }
  .leap__node{ opacity:1; }
}
