/* ==========================================================================
   e-FORT — site marketing · v3
   Fond de marque en couches. Maquettes produit en HTML plutot qu'en capture.
   Une seule animation : la trace.
   ========================================================================== */

:root{
  --ink:#06080D;
  --ink-2:#080B12;
  --panel:#0D1320;
  --panel-2:#111827;
  --panel-hi:#151E30;
  --line:rgba(255,255,255,.075);
  --line-hi:rgba(255,255,255,.16);
  --text:#EEF2F8;
  --dim:#98A5B8;
  --dim-2:#6B7A90;

  --power:#3D8AFA;
  --metric:#00C896;
  --target:#7C5CE7;
  --live:#00B4FF;
  --warn:#E8B44A;
  --alert:#FF6B7F;

  --grad:linear-gradient(100deg,#4E9BFF 0%,#5FE0D8 52%,#00C896 100%);
  --grad-ai:linear-gradient(100deg,#8B6BFF 0%,#6B8CFF 55%,#4E9BFF 100%);

  --display:"Archivo",system-ui,sans-serif;
  --body:"Inter",system-ui,sans-serif;
  --mono:"JetBrains Mono",ui-monospace,monospace;

  --wrap:1180px;
  --r:14px;
  --r-lg:20px;
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--ink);color:var(--text);
  font-family:var(--body);font-size:17px;line-height:1.7;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer}
:focus-visible{outline:2px solid var(--power);outline-offset:3px;border-radius:4px}

/* --------------------------------------------------------------------------
   LE FOND DE MARQUE — trois couches fixes, rien ne bouge
   -------------------------------------------------------------------------- */
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(1100px 780px at 82% -6%,  rgba(61,138,250,.20), transparent 62%),
    radial-gradient(900px 700px at 8% 24%,    rgba(124,92,231,.14), transparent 60%),
    radial-gradient(1000px 800px at 60% 108%, rgba(0,200,150,.11),  transparent 62%),
    radial-gradient(700px 600px at 100% 62%,  rgba(0,180,255,.09),  transparent 60%);
}
body::after{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background-image:
    linear-gradient(rgba(255,255,255,.028) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.028) 1px, transparent 1px);
  background-size:64px 64px;
  mask-image:radial-gradient(closest-side at 50% 32%, #000 0%, transparent 82%);
  -webkit-mask-image:radial-gradient(closest-side at 50% 32%, #000 0%, transparent 82%);
  opacity:.5;
}

/* --- Typographie -------------------------------------------------------- */
.h1,.h2,.h3{font-family:var(--display);font-weight:700;line-height:1.02;letter-spacing:-.02em;margin:0}
.h1{font-size:clamp(44px,6.6vw,92px);font-variation-settings:"wdth" 108}
.h2{font-size:clamp(32px,4.4vw,58px);font-variation-settings:"wdth" 106}
.h3{font-size:clamp(21px,2.1vw,27px);font-variation-settings:"wdth" 100;line-height:1.18}

.beat{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;display:inline-block}
.beat--ai{background:var(--grad-ai);-webkit-background-clip:text;background-clip:text;color:transparent;display:inline-block}

.kicker{font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.19em;text-transform:uppercase;color:var(--dim-2);margin:0 0 20px}
.kicker--power{color:var(--power)}
.kicker--metric{color:var(--metric)}
.kicker--target{color:var(--target)}
.kicker--live{color:var(--live)}

.lede{font-size:clamp(17px,1.5vw,21px);color:var(--dim);max-width:60ch;margin:24px 0 0;line-height:1.65}
.small{font-size:14px;color:var(--dim-2);line-height:1.6}
.num{font-family:var(--mono);font-weight:500;font-feature-settings:"tnum";letter-spacing:-.02em}

/* --- Structure ---------------------------------------------------------- */
.wrap{width:min(var(--wrap),calc(100% - 48px));margin-inline:auto;position:relative;z-index:1}
section{padding:clamp(88px,11vw,158px) 0;position:relative;z-index:1}
.sec-head{max-width:820px;margin-bottom:clamp(44px,5.5vw,72px)}
.center{text-align:center}
.center .lede,.center .sec-head{margin-inline:auto}

/* --- La trace ----------------------------------------------------------- */
#trace{position:absolute;top:0;left:0;width:100%;height:100%;z-index:0;pointer-events:none;overflow:visible}
#trace path{
  fill:none;stroke:url(#traceGrad);stroke-width:1.2;vector-effect:non-scaling-stroke;
  stroke-linecap:round;opacity:.34;filter:drop-shadow(0 0 9px rgba(61,138,250,.34));
}
@media (prefers-reduced-motion:reduce){#trace path{stroke-dasharray:none!important;stroke-dashoffset:0!important}}

/* --- En-tete ------------------------------------------------------------ */
.hdr{position:fixed;top:0;left:0;right:0;z-index:80;transition:background .3s,border-color .3s}
.hdr--solid{background:rgba(6,8,13,.82);backdrop-filter:blur(18px);border-bottom:1px solid var(--line)}
.hdr__in{display:flex;align-items:center;gap:34px;height:70px}
.hdr__logo img{height:26px;width:auto}
.nav{display:flex;gap:28px;margin-left:auto;align-items:center}
.nav a{font-size:14.5px;color:var(--dim);transition:color .16s}
.nav a:hover,.nav a[aria-current="page"]{color:var(--text)}
.hdr__act{display:flex;gap:12px;align-items:center}
.lang{display:flex;border:1px solid var(--line-hi);border-radius:100px;overflow:hidden;background:rgba(255,255,255,.03)}
.lang button{background:none;border:0;color:var(--dim-2);font-family:var(--mono);font-size:11.5px;font-weight:600;letter-spacing:.08em;padding:6px 12px;border-radius:100px}
.lang button[aria-pressed="true"]{background:#fff;color:#06080D}
.burger{display:none;background:none;border:0;color:var(--text);padding:6px}

/* --- Boutons ------------------------------------------------------------ */
.btn{
  display:inline-flex;align-items:center;gap:9px;justify-content:center;
  padding:14px 26px;border-radius:10px;font-size:15.5px;font-weight:600;
  border:1px solid transparent;transition:transform .15s,background .18s,border-color .18s,box-shadow .18s;
  /* Un <button> hérite du fond et de la police du systeme, un <a> non. Sans
     ces quatre lignes, le meme .btn--ghost est transparent en lien et gris
     clair en bouton — c est ce qui rendait le bandeau cookies blanc sur iOS. */
  background:transparent;color:var(--text);font-family:inherit;cursor:pointer;
  -webkit-appearance:none;appearance:none;
}
.btn:hover{transform:translateY(-1px)}
.btn--pri{background:var(--power);color:#04070D;box-shadow:0 8px 26px -10px rgba(61,138,250,.8)}
.btn--pri:hover{background:#5EA1FF}
.btn--ghost{border-color:var(--line-hi);color:var(--text);backdrop-filter:blur(6px)}
.btn--ghost:hover{border-color:var(--power);background:rgba(61,138,250,.1)}
.btn--sm{padding:9px 18px;font-size:14px}
.btn--full{width:100%}
.btn[disabled]{opacity:.42;cursor:not-allowed;transform:none}
.btns{display:flex;gap:14px;flex-wrap:wrap;margin-top:38px}
.center .btns{justify-content:center}

.more{display:inline-flex;align-items:center;gap:8px;margin-top:26px;font-size:15px;font-weight:600;color:var(--power)}
.more svg{transition:transform .18s}
.more:hover svg{transform:translateX(4px)}

/* --- Scene photographique ---------------------------------------------- */
.stage{position:relative;min-height:min(94vh,880px);display:flex;align-items:flex-end;padding:0 0 clamp(64px,8vw,110px);overflow:hidden}
.stage__bg{position:absolute;inset:0;z-index:0;background:linear-gradient(160deg,#0A1424,#06080D 60%)}
.stage__bg img{width:100%;height:100%;object-fit:cover;object-position:center 32%}
.stage__bg::after{
  content:"";position:absolute;inset:0;
  background:
    linear-gradient(180deg,rgba(6,8,13,.66) 0%,rgba(6,8,13,.24) 32%,rgba(6,8,13,.88) 78%,var(--ink) 100%),
    linear-gradient(90deg,rgba(6,8,13,.82) 0%,rgba(6,8,13,.2) 62%,transparent 100%);
}
.stage .wrap{z-index:2}
.stage__credit{position:absolute;right:24px;bottom:16px;z-index:2;font-family:var(--mono);font-size:11px;color:rgba(255,255,255,.4);letter-spacing:.05em}

/* --- Bandeau photo ------------------------------------------------------ */
.band{position:relative;overflow:hidden;padding:clamp(96px,12vw,168px) 0}
.band__bg{position:absolute;inset:0;z-index:0;background:linear-gradient(160deg,#0A1424,#06080D 60%)}
.band__bg img{width:100%;height:100%;object-fit:cover}
.band__bg::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,var(--ink) 0%,rgba(6,8,13,.76) 26%,rgba(6,8,13,.76) 74%,var(--ink) 100%)}
.band .wrap{z-index:2}

/* --- Rangee alternee ---------------------------------------------------- */
.show{display:grid;grid-template-columns:1.02fr .98fr;gap:clamp(40px,5vw,72px);align-items:center}
.show + .show{margin-top:clamp(80px,9vw,132px)}
.show--flip .show__media{order:2}
.show__media{position:relative}
.show__media img{width:100%;border-radius:var(--r);border:1px solid var(--line);box-shadow:0 30px 70px -30px rgba(0,0,0,.9)}
.show__tag{display:inline-flex;align-items:center;gap:9px;margin-bottom:20px;font-family:var(--mono);font-size:11.5px;font-weight:600;letter-spacing:.11em;text-transform:uppercase}
.show__tag i{width:8px;height:8px;border-radius:2px;display:block}
.show p.lede{margin-top:20px}
.show__note{margin-top:24px;padding-left:16px;border-left:2px solid var(--line-hi);font-size:15px;color:var(--dim-2);line-height:1.6}
.show__note b{color:var(--dim);font-weight:600}

/* --------------------------------------------------------------------------
   MAQUETTES PRODUIT — le produit simule en HTML, pas en capture
   -------------------------------------------------------------------------- */
.mock{
  background:linear-gradient(180deg,rgba(20,28,46,.92),rgba(11,16,27,.94));
  border:1px solid var(--line-hi);border-radius:var(--r-lg);
  padding:22px;box-shadow:0 34px 90px -34px rgba(0,0,0,.95),inset 0 1px 0 rgba(255,255,255,.05);
  position:relative;overflow:hidden;
}
.mock::before{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(600px 240px at 80% -10%,rgba(124,92,231,.14),transparent 70%)}
.mock > *{position:relative;z-index:1}

.mock__hd{display:flex;align-items:center;gap:13px;padding-bottom:18px;border-bottom:1px solid var(--line);margin-bottom:18px}
.mock__av{width:38px;height:38px;border-radius:11px;flex:none;display:grid;place-items:center;background:var(--grad-ai);color:#fff;font-family:var(--mono);font-size:12px;font-weight:600}
.mock__t{font-weight:600;font-size:15.5px;line-height:1.2;margin:0}
.mock__s{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim-2);margin:3px 0 0}
.mock__live{margin-left:auto;display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--live)}
.mock__live::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 0 4px rgba(0,180,255,.16)}

.bubble{background:rgba(255,255,255,.035);border:1px solid var(--line);border-radius:12px;padding:17px 19px;font-size:15px;line-height:1.62;color:var(--dim)}
.bubble + .bubble{margin-top:12px}
.bubble--me{background:rgba(255,255,255,.02);color:var(--dim-2)}
.bubble__who{font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--dim-2);margin:0 0 8px}
.bubble b{color:var(--text);font-weight:600}
.tok{font-family:var(--mono);font-size:14px;font-weight:500;padding:1px 2px}
.tok--metric{color:var(--metric)}
.tok--power{color:var(--power)}
.tok--target{color:var(--target)}
.tok--alert{color:var(--alert)}
.tok--warn{color:var(--warn)}

.chips{display:flex;flex-wrap:wrap;gap:9px;margin-top:16px}
.chip{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim-2);border:1px solid var(--line);border-radius:7px;padding:6px 11px}
.chip--act{color:var(--target);border-color:rgba(124,92,231,.45)}

.mtbl{width:100%;border-collapse:collapse;font-size:14.5px}
.mtbl th{font-family:var(--mono);font-size:10.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--dim-2);font-weight:600;text-align:left;padding:9px 12px;background:rgba(255,255,255,.03)}
.mtbl td{padding:11px 12px;border-bottom:1px solid var(--line);color:var(--dim)}
.mtbl tr:last-child td{border-bottom:0}
.mtbl .d{font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--target)}
.mtbl .s{color:var(--text);font-weight:500}
.mtbl .t{font-family:var(--mono);font-size:13px;color:var(--power);text-align:right}
.mtbl tr.hl td{background:rgba(124,92,231,.09)}

.bars{display:grid;gap:14px}
.bar{display:grid;grid-template-columns:82px 1fr 46px;gap:14px;align-items:center}
.bar__n{font-family:var(--mono);font-size:12.5px;color:var(--dim)}
.bar__track{height:9px;border-radius:100px;background:rgba(255,255,255,.07);overflow:hidden;display:block}
.bar__fill{height:100%;border-radius:100px;display:block}
.bar__v{font-family:var(--mono);font-size:13px;font-weight:600;text-align:right}
.alertline{margin-top:18px;border:1px solid rgba(232,180,74,.4);background:rgba(232,180,74,.07);border-radius:10px;padding:12px 15px;font-family:var(--mono);font-size:12.5px;color:var(--warn)}

.abcd{display:grid;grid-template-columns:repeat(4,1fr);gap:11px}
.abcd div{border:1px solid var(--line);border-radius:11px;padding:15px 10px;text-align:center;background:rgba(255,255,255,.02)}
.abcd .l{font-family:var(--display);font-weight:700;font-size:29px;line-height:1;margin:0}
.abcd .c{font-family:var(--mono);font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--dim-2);margin:8px 0 0}

.elev{border:1px solid var(--line);border-radius:12px;padding:16px;background:rgba(255,255,255,.02)}
.elev svg{width:100%;height:96px;display:block}
.elev__segs{display:flex;gap:5px;margin-top:12px}
.elev__segs span{height:7px;border-radius:100px;flex:1}
.elev__ax{display:flex;justify-content:space-between;font-family:var(--mono);font-size:10.5px;color:var(--dim-2);margin-top:9px}

/* --- Cartes ------------------------------------------------------------- */
.grid{display:grid;gap:20px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}

.card{
  background:linear-gradient(180deg,rgba(17,24,39,.72),rgba(11,16,27,.72));
  border:1px solid var(--line);border-radius:var(--r);padding:30px;
  transition:border-color .2s,transform .2s,box-shadow .2s;display:flex;flex-direction:column;
}
.card:hover{border-color:var(--line-hi);transform:translateY(-2px);box-shadow:0 24px 50px -30px rgba(0,0,0,.9)}
.card__n{font-family:var(--mono);font-size:12px;color:var(--target);letter-spacing:.08em;margin:0 0 14px}
.card__t{font-family:var(--display);font-variation-settings:"wdth" 100;font-weight:700;font-size:20px;line-height:1.2;margin:0 0 10px}
.card__b{font-size:15px;color:var(--dim);margin:0;line-height:1.62}
.card .more{margin-top:auto;padding-top:20px}

/* --- Bande de portraits ------------------------------------------------- */
.strip{display:grid;grid-template-columns:repeat(8,1fr);gap:10px;margin-top:44px}
.strip figure{margin:0;position:relative;border-radius:11px;overflow:hidden;border:1px solid var(--line);background:var(--panel)}
.strip img{width:100%;aspect-ratio:3/4;object-fit:cover;object-position:center top;filter:grayscale(.4) contrast(1.04);transition:filter .3s,transform .5s}
.strip figure:hover img{filter:grayscale(0);transform:scale(1.04)}
.strip figcaption{position:absolute;left:0;right:0;bottom:0;padding:24px 8px 9px;background:linear-gradient(180deg,transparent,rgba(6,8,13,.95));font-size:11.5px;font-weight:600;text-align:center}

/* --- Appareils ---------------------------------------------------------- */
.devs{display:flex;align-items:flex-end;justify-content:center;gap:clamp(20px,4vw,56px);flex-wrap:wrap;margin-top:12px}
.devs figure{margin:0;text-align:center}
.devs img{filter:drop-shadow(0 24px 48px rgba(0,0,0,.85));margin-inline:auto}
.devs figcaption{margin-top:14px;font-size:13px;color:var(--dim-2)}

/* --- Tarifs ------------------------------------------------------------- */
.plans{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;align-items:stretch}
.plan{
  background:linear-gradient(180deg,rgba(17,24,39,.75),rgba(11,16,27,.75));
  border:1px solid var(--line);border-radius:var(--r);padding:28px;
  display:flex;flex-direction:column;position:relative;
}
.plan--flag{border-color:rgba(0,200,150,.45);background:linear-gradient(180deg,rgba(0,200,150,.07),rgba(11,16,27,.8));box-shadow:0 0 0 1px rgba(0,200,150,.1),0 26px 60px -34px rgba(0,200,150,.5)}
.plan__inc{display:inline-block;font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--power);border:1px solid rgba(61,138,250,.4);border-radius:6px;padding:5px 9px;margin-bottom:16px}
.plan__inc--metric{color:var(--metric);border-color:rgba(0,200,150,.4)}
.plan__pop{position:absolute;top:-11px;left:50%;transform:translateX(-50%);font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;background:var(--metric);color:#04140E;border-radius:100px;padding:5px 13px;font-weight:600;white-space:nowrap}
.plan__n{font-family:var(--display);font-variation-settings:"wdth" 100;font-weight:700;font-size:18px;margin:0 0 12px}
.plan__p{font-family:var(--mono);font-size:33px;font-weight:600;line-height:1;margin:0}
.plan__u{font-size:13px;color:var(--dim-2);margin:7px 0 16px}
.plan__d{font-size:14.5px;color:var(--dim);margin:0 0 20px}
.plan .btn{margin-top:auto}
.plan--full{padding:32px}
.plan--full .ticks{margin-top:20px}
.plan--full .ticks li{font-size:14px;margin-bottom:11px;padding-left:25px}

/* --- Niveaux de service ------------------------------------------------- */
.tiers3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;align-items:stretch}
.tier{background:linear-gradient(180deg,rgba(17,24,39,.75),rgba(11,16,27,.75));border:1px solid var(--line);border-radius:var(--r-lg);padding:32px;display:flex;flex-direction:column;position:relative}
.tier--reco{border-color:rgba(232,180,74,.45);box-shadow:0 0 0 1px rgba(232,180,74,.1),0 26px 60px -34px rgba(232,180,74,.4)}
.tier__badge{position:absolute;top:22px;right:22px;font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;background:var(--warn);color:#1A1204;border-radius:100px;padding:5px 12px;font-weight:600}
.tier__n{font-family:var(--display);font-variation-settings:"wdth" 102;font-weight:700;font-size:27px;margin:0}
.tier__k{font-family:var(--mono);font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--dim-2);margin:8px 0 22px}
.tier__d{font-size:15px;color:var(--dim);margin:0 0 24px;line-height:1.6}
.tier .btn{margin-top:auto}

/* --- Listes cochees ----------------------------------------------------- */
.ticks{list-style:none;margin:0 0 26px;padding:0}
.ticks li{position:relative;padding-left:28px;margin-bottom:13px;font-size:15px;color:var(--dim);line-height:1.55}
.ticks li::before{content:"";position:absolute;left:2px;top:7px;width:11px;height:7px;border-left:2px solid var(--metric);border-bottom:2px solid var(--metric);transform:rotate(-45deg)}
.ticks--power li::before{border-color:var(--power)}
.ticks--target li::before{border-color:var(--target)}
.ticks--live li::before{border-color:var(--live)}
.ticks--warn li::before{border-color:var(--warn)}
.ticks--alert li::before{border-color:var(--alert)}
.ticks--muted li::before{border-color:var(--dim-2)}
.ticks b{color:var(--text);font-weight:600}
.ticks li:last-child{margin-bottom:0}

/* --- Quiz --------------------------------------------------------------- */
.quiz{background:linear-gradient(180deg,rgba(17,24,39,.7),rgba(11,16,27,.72));border:1px solid var(--line);border-radius:var(--r-lg);padding:clamp(28px,4vw,52px);max-width:940px;margin-inline:auto}
.quiz__bar{height:3px;border-radius:100px;background:rgba(255,255,255,.08);overflow:hidden}
.quiz__bar i{display:block;height:100%;background:var(--grad);border-radius:100px;transition:width .35s ease}
.quiz__dots{display:flex;gap:8px;justify-content:center;margin:18px 0 32px}
.quiz__dots span{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.18)}
.quiz__dots span.on{background:var(--power)}
.quiz__step{font-family:var(--mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim-2);text-align:center;margin:0 0 14px}
.quiz__q{font-family:var(--display);font-variation-settings:"wdth" 102;font-weight:700;font-size:clamp(24px,2.8vw,34px);text-align:center;margin:0 0 32px;line-height:1.15}
.quiz__opts{display:flex;flex-wrap:wrap;gap:14px;justify-content:center}
.opt{
  background:rgba(255,255,255,.025);border:1px solid var(--line);border-radius:12px;
  color:var(--text);transition:border-color .18s,background .18s,transform .18s;
  flex:1 1 200px;max-width:264px;min-height:152px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;
  padding:26px 18px;position:relative;text-align:center;
}
.opt:hover{border-color:var(--power);background:rgba(61,138,250,.08);transform:translateY(-2px)}
.quiz__opts--text .opt{min-height:0;padding:24px 18px}
.opt__ico{width:56px;height:56px;object-fit:contain;opacity:.88;transition:opacity .18s,transform .25s,filter .18s}
.opt:hover .opt__ico{opacity:1;transform:translateY(-2px) scale(1.04);filter:drop-shadow(0 6px 16px rgba(61,138,250,.45))}
.opt__l{font-size:16px;font-weight:600;line-height:1.25}
.opt em{display:block;font-style:normal;font-size:13px;color:var(--dim-2);margin-top:5px;font-weight:400}
.opt__soon{position:absolute;top:12px;right:12px;font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim-2);border:1px solid var(--line);border-radius:5px;padding:3px 7px}
.quiz__res .plan{max-width:440px;margin:0 auto;text-align:left}
.quiz__again{margin-top:26px;background:none;border:0;color:var(--dim-2);font-size:14px;text-decoration:underline;text-underline-offset:4px}
.quiz__again:hover{color:var(--text)}

/* --- Partenaire --------------------------------------------------------- */
.partner{background:linear-gradient(180deg,rgba(17,24,39,.72),rgba(11,16,27,.72));border:1px solid rgba(0,200,150,.28);border-radius:var(--r-lg);padding:clamp(28px,3.6vw,44px);display:grid;grid-template-columns:190px 1fr;gap:clamp(28px,4vw,52px);align-items:center}
.partner__logo{text-align:center}
.partner__logo img{width:100%;max-width:150px;margin-inline:auto;border-radius:10px}
.partner__tag{display:inline-block;margin-top:16px;font-family:var(--mono);font-size:10px;letter-spacing:.11em;text-transform:uppercase;color:var(--metric);border:1px solid rgba(0,200,150,.4);border-radius:7px;padding:6px 11px}
.layers{display:grid;gap:14px;margin:22px 0 0}
.layer{display:grid;grid-template-columns:112px 1fr;gap:20px;align-items:baseline}
.layer dt{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--metric)}
.layer dd{margin:0;font-size:15px;color:var(--dim);line-height:1.55}

/* --- Encadre, chiffres, registre --------------------------------------- */
.pull{border:1px solid var(--line-hi);border-radius:var(--r);padding:30px 34px;font-size:17px;line-height:1.62;color:var(--dim);background:rgba(255,255,255,.02)}
.pull b{color:var(--text);font-weight:600}

.figures{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.figure{border-left:2px solid var(--line-hi);padding-left:20px}
.figure__v{font-family:var(--mono);font-size:clamp(26px,2.7vw,34px);font-weight:600;line-height:1;margin:0 0 10px}
.figure__l{font-size:14px;color:var(--dim);line-height:1.5;margin:0}

.split{display:grid;grid-template-columns:1.12fr 1fr;gap:20px;align-items:stretch}
.ledger,.answer{background:linear-gradient(180deg,rgba(17,24,39,.72),rgba(11,16,27,.72));border:1px solid var(--line);border-radius:var(--r);padding:32px}
.answer{border-color:rgba(0,200,150,.4);display:flex;flex-direction:column;justify-content:center}
.ledger__h,.answer__h{font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.15em;text-transform:uppercase;color:var(--dim-2);margin:0 0 22px}
.answer__h{color:var(--metric)}
.row{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:baseline;padding:14px 0;border-bottom:1px solid var(--line)}
.row:last-of-type{border-bottom:0}
.row__n{font-weight:600;font-size:15.5px;line-height:1.35}
.row__d{font-size:13px;color:var(--dim-2);display:block;font-weight:400;margin-top:3px}
.row__v{font-family:var(--mono);font-size:15px;color:var(--dim)}
.total{margin-top:20px;padding-top:18px;border-top:1px solid rgba(255,107,127,.3);color:var(--alert);font-weight:700;font-size:15.5px}
.answer__p{font-family:var(--mono);font-size:clamp(46px,5.6vw,68px);font-weight:600;line-height:1;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;margin:0}
.answer__u{color:var(--dim);font-size:15px;margin:12px 0 0}

/* --- Tableau ------------------------------------------------------------ */
.tbl{width:100%;border-collapse:collapse;font-size:15px}
.tbl th,.tbl td{text-align:left;padding:16px 18px;border-bottom:1px solid var(--line)}
.tbl th{font-family:var(--mono);font-size:11px;letter-spacing:.11em;text-transform:uppercase;color:var(--dim-2);font-weight:600}
.tbl td.n{font-family:var(--mono);font-weight:500}
.tbl tr:last-child td{border-bottom:0}

.avail{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:11.5px;font-weight:600;letter-spacing:.05em;padding:5px 11px;border-radius:7px;border:1px solid var(--line-hi);color:var(--dim-2)}
.avail--now{color:var(--metric);border-color:rgba(0,200,150,.4)}

.obj__q{font-family:var(--display);font-variation-settings:"wdth" 100;font-weight:700;font-size:19px;color:var(--text);margin:0 0 14px;line-height:1.28}
.obj__a{font-size:15px;color:var(--dim);margin:0;line-height:1.62}

/* --------------------------------------------------------------------------
   FORMULAIRE — acces anticipe et contact
   -------------------------------------------------------------------------- */
.form{display:grid;gap:18px}
.field{display:grid;gap:8px}
.field label{font-size:13.5px;font-weight:600;color:var(--dim)}
.field input,.field select,.field textarea{
  width:100%;background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:10px;
  color:var(--text);font:inherit;font-size:15.5px;padding:13px 15px;transition:border-color .18s,background .18s;
}
.field textarea{min-height:150px;resize:vertical;line-height:1.6}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--power);background:rgba(61,138,250,.06)}
.field input::placeholder,.field textarea::placeholder{color:var(--dim-2)}
.field select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--dim) 50%),linear-gradient(135deg,var(--dim) 50%,transparent 50%);background-position:calc(100% - 20px) 21px,calc(100% - 14px) 21px;background-size:6px 6px;background-repeat:no-repeat}
.field--row{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.consent{display:flex;gap:12px;align-items:flex-start;font-size:14px;color:var(--dim-2);line-height:1.55}
.consent input{width:17px;height:17px;flex:none;margin-top:3px;accent-color:var(--power)}
.consent a{color:var(--power);text-decoration:underline;text-underline-offset:3px}
.formnote{font-size:14px;line-height:1.55;margin:0}
.formnote--ok{color:var(--metric)}
.formnote--ko{color:var(--alert)}

.access{
  background:linear-gradient(180deg,rgba(17,24,39,.74),rgba(11,16,27,.76));
  border:1px solid var(--line-hi);border-radius:var(--r-lg);
  padding:clamp(28px,4vw,48px);max-width:640px;margin-inline:auto;text-align:left;
}

/* --------------------------------------------------------------------------
   BANDEAU COOKIES — information, pas consentement.
   e-FORT ne pose que des cookies strictement necessaires (session,
   authentification, securite), dispenses au titre de la directive ePrivacy.
   ATTENTION : le jour ou un outil de mesure d audience est ajoute, ce bandeau
   ne suffit plus — il faut un vrai recueil de consentement, avec refus aussi
   simple que l acceptation et depot des traceurs SEULEMENT apres acceptation.
   -------------------------------------------------------------------------- */
.efort-cookie{
  position:fixed;left:16px;right:16px;bottom:16px;z-index:200;
  display:flex;align-items:center;gap:18px;flex-wrap:wrap;
  background:rgba(10,15,25,.96);backdrop-filter:blur(16px);
  border:1px solid var(--line-hi);border-radius:var(--r);
  padding:16px 20px;box-shadow:0 24px 60px -24px rgba(0,0,0,.95);
  max-width:760px;margin-inline:auto;
}
/* Bat la regle d auteur ci-dessus : sans !important, [hidden] est ignore
   et le bouton « J ai compris » ne ferme jamais le bandeau (§15.449). */
.efort-cookie[hidden]{display:none !important}
.efort-cookie p{margin:0;font-size:14px;color:var(--dim);line-height:1.55;flex:1 1 320px}
.efort-cookie a{color:var(--power);text-decoration:underline;text-underline-offset:3px}

/* --- Pied de page ------------------------------------------------------- */
.ftr{border-top:1px solid var(--line);padding:72px 0 44px;position:relative;z-index:1}
.ftr__grid{display:grid;grid-template-columns:1.7fr repeat(3,1fr);gap:40px}
.ftr h4{font-family:var(--mono);font-size:11px;letter-spacing:.15em;text-transform:uppercase;color:var(--dim-2);margin:0 0 20px}
.ftr ul{list-style:none;margin:0;padding:0}
.ftr li{margin-bottom:12px}
.ftr a{font-size:15px;color:var(--dim)}
.ftr a:hover{color:var(--text)}
.ftr__logo img{height:30px;margin-bottom:20px}
.ftr__legal{display:flex;gap:24px;flex-wrap:wrap;margin-top:52px;padding-top:26px;border-top:1px solid var(--line);font-family:var(--mono);font-size:12.5px;color:var(--dim-2)}
.ftr__legal a{font-family:var(--mono);font-size:12.5px}

/* --- Responsive --------------------------------------------------------- */
@media (max-width:1080px){
  .show,.g4,.plans,.tiers3{grid-template-columns:repeat(2,1fr)}
  .show--flip .show__media{order:0}
  .g3{grid-template-columns:repeat(2,1fr)}
  .strip{grid-template-columns:repeat(4,1fr)}
  .split,.partner{grid-template-columns:1fr}
  .figures{grid-template-columns:repeat(2,1fr)}
  .ftr__grid{grid-template-columns:1fr 1fr}
}
@media (max-width:760px){
  body{font-size:16px}
  .nav{display:none;position:fixed;inset:70px 0 auto;flex-direction:column;gap:0;background:#080B12;border-bottom:1px solid var(--line);padding:8px 24px 22px}
  .nav.open{display:flex}
  .nav a{padding:14px 0;border-bottom:1px solid var(--line);font-size:16.5px}
  .burger{display:block;order:3}
  .hdr__act{order:2;margin-left:auto}
  .hdr{background:rgba(6,8,13,.9);backdrop-filter:blur(14px)}
  .show,.g2,.g3,.g4,.plans,.tiers3,.ftr__grid,.figures,.field--row{grid-template-columns:1fr}
  .abcd{grid-template-columns:repeat(2,1fr)}
  .strip{grid-template-columns:repeat(2,1fr)}
  .stage{min-height:auto;padding-top:130px}
  section{padding:72px 0}
  .layer{grid-template-columns:1fr;gap:4px}
  .bar{grid-template-columns:68px 1fr 42px;gap:10px}
  .opt{flex:1 1 140px;min-height:132px;padding:20px 12px}
  .opt__ico{width:42px;height:42px}
  .efort-cookie{left:12px;right:12px;bottom:12px;padding:14px 16px}
}

/* --------------------------------------------------------------------------
   Hero photographique a texte a droite (page Equipes) — v2
   Photo pleine page, sans couture. Le voile est un vignettage RADIAL centre
   sur la coureuse : le sujet et le logo Decathlon restent clairs, tout ce qui
   s'en eloigne s'assombrit, et le texte se pose sur la zone deja noire de la
   photo. C'est le fonctionnement de temp.e-fort.net, et il tient mieux que le
   mur noir vertical de la premiere version.
   -------------------------------------------------------------------------- */
.stage--right{
  align-items:center;
  min-height:min(100vh,960px);
  padding-top:118px;
  padding-bottom:clamp(64px,8vw,104px);
}
.stage--right .stage__bg{top:0}
/* 6 % du haut : le logo Decathlon Ford reste entier sans couper la photo. */
.stage--right .stage__bg img{object-position:left 6%}
.stage--right .stage__bg::after{
  background:
    radial-gradient(128% 104% at 10% 46%,
      transparent 0%,
      transparent 22%,
      rgba(6,8,13,.42) 44%,
      rgba(6,8,13,.82) 63%,
      rgba(6,8,13,.95) 78%,
      var(--ink) 94%),
    linear-gradient(180deg,
      rgba(6,8,13,.50) 0%,
      transparent 17%,
      transparent 74%,
      rgba(6,8,13,.88) 95%,
      var(--ink) 100%);
}
.stage--right .stage__in{max-width:660px;margin-left:auto}
.stage--right .stage__in .h1{font-size:clamp(38px,4.7vw,68px)}
.stage--right .lede{max-width:none}
.stage--right .hero__badge{margin-top:26px}

@media (max-width:1080px){
  .stage--right{align-items:flex-end;padding-top:150px;min-height:min(92vh,820px)}
  .stage--right .stage__bg img{object-position:left 4%}
  .stage--right .stage__bg::after{
    background:linear-gradient(180deg,
      rgba(6,8,13,.52) 0%,
      rgba(6,8,13,.24) 30%,
      rgba(6,8,13,.90) 70%,
      var(--ink) 100%);
  }
  .stage--right .stage__in{max-width:none;margin-left:0}
}

/* ==========================================================================
   NAVIGATION A MENUS + BARRE DE CHAPITRES
   ========================================================================== */
.nav{display:flex;gap:6px;margin-left:auto;align-items:center}
.nav__item{position:relative}
.nav__btn{
  background:none;border:0;color:var(--dim);font-size:14.5px;font-weight:500;
  display:inline-flex;align-items:center;gap:6px;padding:10px 14px;border-radius:9px;
  transition:color .16s,background .16s;
}
.nav__btn svg{opacity:.6;transition:transform .2s}
.nav__item:hover .nav__btn,.nav__btn[aria-expanded="true"]{color:var(--text);background:rgba(255,255,255,.05)}
.nav__item:hover .nav__btn svg,.nav__btn[aria-expanded="true"] svg{transform:rotate(180deg)}
.nav > a{font-size:14.5px;color:var(--dim);padding:10px 14px;border-radius:9px;transition:color .16s,background .16s}
.nav > a:hover,.nav > a[aria-current="page"]{color:var(--text);background:rgba(255,255,255,.05)}

.menu{
  position:absolute;top:calc(100% + 10px);left:-8px;min-width:330px;
  background:rgba(11,16,27,.97);backdrop-filter:blur(20px);
  border:1px solid var(--line-hi);border-radius:var(--r);padding:10px;
  box-shadow:0 30px 70px -28px rgba(0,0,0,.95);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .18s,transform .18s,visibility .18s;z-index:90;
}
.nav__item:hover .menu,.menu.open{opacity:1;visibility:visible;transform:translateY(0)}
.menu__l{display:block;padding:11px 13px;border-radius:9px;transition:background .16s}
.menu__l:hover{background:rgba(255,255,255,.06)}
.menu__l b{display:block;font-size:14.5px;font-weight:600;color:var(--text);margin-bottom:2px}
.menu__l span{display:block;font-size:13px;color:var(--dim-2);line-height:1.45}
.menu__sep{height:1px;background:var(--line);margin:8px 11px}

/* Barre de chapitres — le fil rouge dans la page */
.chapters{
  position:sticky;top:70px;z-index:70;
  background:rgba(6,8,13,.9);backdrop-filter:blur(16px);
  border-bottom:1px solid var(--line);
}
.chapters .wrap{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none}
.chapters .wrap::-webkit-scrollbar{display:none}
.chapters a{
  flex:none;font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;
  color:var(--dim-2);padding:14px 14px;border-bottom:2px solid transparent;
  transition:color .16s,border-color .16s;white-space:nowrap;
}
.chapters a:hover{color:var(--dim)}
.chapters a.on{color:var(--text);border-bottom-color:var(--power)}
.chapters i{font-style:normal;color:var(--power);margin-right:7px}

/* ==========================================================================
   BLOCS DE CONTENU SUPPLEMENTAIRES
   ========================================================================== */

/* Comment ca marche — trois etapes numerotees */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;counter-reset:s}
.step{
  background:linear-gradient(180deg,rgba(17,24,39,.7),rgba(11,16,27,.7));
  border:1px solid var(--line);border-radius:var(--r);padding:32px;position:relative;
}
.step__n{
  font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.14em;
  color:var(--power);margin:0 0 18px;
}
.step__t{font-family:var(--display);font-variation-settings:"wdth" 100;font-weight:700;font-size:20px;margin:0 0 12px;line-height:1.2}
.step__b{font-size:15px;color:var(--dim);margin:0;line-height:1.62}

/* En-tete de page interieure, avec la promesse en une ligne */
.pagehead{padding:clamp(126px,13vw,168px) 0 clamp(40px,5vw,64px)}
.pagehead .h1{font-size:clamp(38px,5vw,72px)}
.pagehead .lede{margin-top:22px}

/* Ancre de chapitre : compense la hauteur des deux barres collantes */
.ch{scroll-margin-top:132px}
.ch__n{
  font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.16em;
  color:var(--power);margin:0 0 16px;text-transform:uppercase;
}

/* Tableau comparatif repliable */
.cmp{width:100%;border-collapse:collapse;font-size:14.5px}
.cmp th,.cmp td{padding:14px 14px;border-bottom:1px solid var(--line);text-align:left}
.cmp thead th{
  font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--dim-2);font-weight:600;position:sticky;top:132px;background:var(--ink);z-index:2;
}
.cmp tbody th{font-weight:500;color:var(--dim);width:38%}
.cmp td{text-align:center;color:var(--dim-2);font-family:var(--mono);font-size:13px}
.cmp td.yes{color:var(--metric)}
.cmp tr.grp th{
  font-family:var(--mono);font-size:11px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--text);padding-top:30px;border-bottom-color:var(--line-hi);
}
.cmp__wrap{overflow-x:auto}
details.fold{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:rgba(255,255,255,.02)}
details.fold > summary{
  padding:20px 26px;cursor:pointer;font-weight:600;font-size:16px;list-style:none;
  display:flex;align-items:center;justify-content:space-between;
}
details.fold > summary::-webkit-details-marker{display:none}
details.fold > summary::after{content:"+";font-family:var(--mono);font-size:20px;color:var(--power)}
details.fold[open] > summary::after{content:"–"}
details.fold > div{padding:0 26px 26px}

/* Questions frequentes */
.faq{display:grid;gap:12px}
.faq details{border:1px solid var(--line);border-radius:var(--r);background:rgba(255,255,255,.02)}
.faq summary{
  padding:20px 24px;cursor:pointer;font-weight:600;font-size:16px;list-style:none;
  display:flex;align-items:center;justify-content:space-between;gap:20px;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-family:var(--mono);font-size:19px;color:var(--power);flex:none}
.faq details[open] summary::after{content:"–"}
.faq p{margin:0;padding:0 24px 22px;font-size:15px;color:var(--dim);line-height:1.65}

/* Bandeau de renvoi vers les tarifs, en fin de chapitre */
.priceline{
  display:flex;align-items:center;gap:22px;flex-wrap:wrap;
  border:1px solid var(--line-hi);border-radius:var(--r);padding:22px 26px;
  background:rgba(255,255,255,.02);margin-top:36px;
}
.priceline p{margin:0;flex:1 1 320px;font-size:15.5px;color:var(--dim)}
.priceline b{color:var(--text);font-weight:600}
.priceline .num{color:var(--text)}

@media (max-width:1080px){.steps{grid-template-columns:1fr}}
@media (max-width:900px){
  .nav__item,.nav > a{width:100%}
  .menu{position:static;min-width:0;opacity:1;visibility:visible;transform:none;
        background:none;border:0;box-shadow:none;padding:0 0 0 12px;display:none}
  .menu.open{display:block}
  .nav__btn{width:100%;justify-content:space-between;padding:14px 0}
  .chapters{top:0}
}

/* --- Complements ------------------------------------------------------- */
.hdr__signin{font-size:14.5px;color:var(--dim);padding:9px 4px;transition:color .16s}
.hdr__signin:hover{color:var(--text)}

.hero__badge{
  display:inline-flex;align-items:center;gap:10px;
  border:1px solid var(--line-hi);border-radius:100px;
  padding:8px 17px 8px 13px;font-size:13.5px;color:var(--dim);
  background:rgba(255,255,255,.03);backdrop-filter:blur(8px);
}
.hero__badge b{color:var(--text);font-weight:600}
.dot{width:7px;height:7px;border-radius:50%;background:var(--metric);flex:none;box-shadow:0 0 0 4px rgba(0,200,150,.15)}

@media (max-width:900px){
  .hdr__signin{display:none}
}

/* ==========================================================================
   TEINTES PAR PAGE
   Le fond n'est plus uniforme : chaque monde porte sa couleur dominante.
   On sait ou l'on est sans lire le fil d'Ariane.
   ========================================================================== */
body[data-tint="power"]::before{background:
  radial-gradient(1100px 780px at 82% -6%, rgba(61,138,250,.26), transparent 62%),
  radial-gradient(900px 700px at 8% 24%,   rgba(30,80,190,.20), transparent 60%),
  radial-gradient(1000px 800px at 60% 108%,rgba(0,180,255,.13), transparent 62%),
  radial-gradient(760px 620px at 100% 58%, rgba(124,92,231,.10), transparent 60%)}

body[data-tint="metric"]::before{background:
  radial-gradient(1100px 780px at 80% -6%, rgba(0,200,150,.24), transparent 62%),
  radial-gradient(900px 700px at 6% 26%,   rgba(0,140,130,.20), transparent 60%),
  radial-gradient(1000px 800px at 62% 108%,rgba(61,138,250,.14), transparent 62%),
  radial-gradient(700px 600px at 100% 60%, rgba(95,224,216,.10), transparent 60%)}

body[data-tint="target"]::before{background:
  radial-gradient(1100px 780px at 84% -6%, rgba(124,92,231,.28), transparent 62%),
  radial-gradient(900px 700px at 8% 22%,   rgba(70,50,170,.22), transparent 60%),
  radial-gradient(1000px 800px at 58% 108%,rgba(61,138,250,.14), transparent 62%),
  radial-gradient(700px 600px at 100% 62%, rgba(180,120,255,.10), transparent 60%)}

body[data-tint="live"]::before{background:
  radial-gradient(1100px 780px at 82% -6%, rgba(0,180,255,.26), transparent 62%),
  radial-gradient(900px 700px at 6% 24%,   rgba(0,110,175,.20), transparent 60%),
  radial-gradient(1000px 800px at 60% 108%,rgba(0,200,150,.13), transparent 62%),
  radial-gradient(700px 600px at 100% 60%, rgba(61,138,250,.12), transparent 60%)}

body[data-tint="warn"]::before{background:
  radial-gradient(1100px 780px at 82% -6%, rgba(232,180,74,.20), transparent 62%),
  radial-gradient(900px 700px at 8% 26%,   rgba(190,110,50,.16), transparent 60%),
  radial-gradient(1000px 800px at 60% 108%,rgba(61,138,250,.16), transparent 62%),
  radial-gradient(700px 600px at 100% 60%, rgba(0,200,150,.10), transparent 60%)}

/* La teinte irrigue aussi les accents de la page. */
body[data-tint="metric"]{--accent:var(--metric)}
body[data-tint="target"]{--accent:var(--target)}
body[data-tint="live"]{--accent:var(--live)}
body[data-tint="warn"]{--accent:var(--warn)}
body{--accent:var(--power)}
.chapters a.on{border-bottom-color:var(--accent)}
.chapters i{color:var(--accent)}
.ch__n{color:var(--accent)}
.quiz__bar i{background:linear-gradient(90deg,var(--accent),#5FE0D8)}

/* ==========================================================================
   HERO — lisibilite du texte sur la photo
   Le voile doit couvrir le cote du texte, jamais le sujet.
   ========================================================================== */
.stage__in{position:relative}
/* Pas de voile sous le texte : il masquerait la photo. La lisibilite vient du
   cadrage — le texte se pose sur une zone deja sombre, jamais sur le sujet. */
.stage--right .stage__bg::after{
  background:
    linear-gradient(90deg,
      rgba(6,8,13,.06) 0%,
      rgba(6,8,13,.22) 24%,
      rgba(6,8,13,.72) 44%,
      rgba(6,8,13,.93) 60%,
      var(--ink) 82%),
    linear-gradient(180deg,
      rgba(6,8,13,.42) 0%,
      rgba(6,8,13,.10) 18%,
      rgba(6,8,13,.10) 62%,
      rgba(6,8,13,.86) 90%,
      var(--ink) 100%);
}
/* Variante texte a gauche : on assombrit la gauche. */
.stage--left{align-items:center;min-height:min(100vh,960px);padding-top:118px}
.stage--left .stage__bg::after{
  background:
    linear-gradient(270deg,
      rgba(6,8,13,.06) 0%,
      rgba(6,8,13,.22) 24%,
      rgba(6,8,13,.72) 44%,
      rgba(6,8,13,.93) 60%,
      var(--ink) 82%),
    linear-gradient(180deg,
      rgba(6,8,13,.42) 0%,
      rgba(6,8,13,.10) 18%,
      rgba(6,8,13,.10) 62%,
      rgba(6,8,13,.86) 90%,
      var(--ink) 100%);
}
.stage--left .stage__in{max-width:610px;margin-right:auto}

@media (max-width:1080px){
  .stage--right .stage__bg::after,.stage--left .stage__bg::after{
    background:linear-gradient(180deg,rgba(6,8,13,.48) 0%,rgba(6,8,13,.26) 32%,rgba(6,8,13,.92) 72%,var(--ink) 100%)}
  .stage--right .stage__in,.stage--left .stage__in{max-width:none;margin:0}
  .stage--right,.stage--left{align-items:flex-end;padding-top:150px}
  }

/* ==========================================================================
   OUVERTURE DE CHAPITRE — sobre, teintee, sans photo
   Marque la rupture entre deux chapitres sans consommer une image de plus.
   ========================================================================== */
.chapterhead{
  position:relative;overflow:hidden;
  padding:clamp(52px,6vw,84px) 0;
  border-top:1px solid var(--line);
  background:linear-gradient(180deg,rgba(255,255,255,.022),transparent);
}
.chapterhead::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(720px 300px at 12% 50%,var(--ch-glow,rgba(61,138,250,.16)),transparent 72%);
}
.chapterhead .wrap{display:flex;align-items:baseline;gap:clamp(20px,3vw,40px);flex-wrap:wrap}
.chapterhead__n{
  font-family:var(--mono);font-size:clamp(40px,5vw,64px);font-weight:600;line-height:1;
  color:var(--ch-color,var(--power));opacity:.85;flex:none;
}
.chapterhead__t{
  font-family:var(--display);font-variation-settings:"wdth" 104;font-weight:700;
  font-size:clamp(26px,3.4vw,44px);line-height:1.05;margin:0;flex:1 1 320px;
}
.chapterhead__s{font-size:15.5px;color:var(--dim);margin:12px 0 0;max-width:62ch;flex-basis:100%}
.chapterhead__r{height:2px;width:64px;border-radius:2px;background:var(--ch-color,var(--power));margin-top:22px;flex-basis:100%}

/* ==========================================================================
   LES APPAREILS — chapitre a part entiere, pas une rangee de vignettes
   ========================================================================== */
.dev-hero{
  display:grid;grid-template-columns:.9fr 1.1fr;gap:clamp(36px,5vw,72px);align-items:center;
  background:linear-gradient(180deg,rgba(124,92,231,.09),rgba(11,16,27,.7));
  border:1px solid rgba(124,92,231,.32);border-radius:var(--r-lg);
  padding:clamp(32px,4vw,52px);position:relative;overflow:hidden;
}
.dev-hero::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(700px 320px at 22% 40%,rgba(124,92,231,.2),transparent 70%)}
.dev-hero > *{position:relative;z-index:1}
.dev-hero__img{text-align:center}
.dev-hero__img img{width:min(100%,270px);margin-inline:auto;filter:drop-shadow(0 34px 60px rgba(0,0,0,.9))}
.dev-hero__tag{
  display:inline-block;font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--target);border:1px solid rgba(124,92,231,.45);
  border-radius:7px;padding:6px 12px;margin-bottom:18px;
}

.dev-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:22px}
.dev{
  background:linear-gradient(180deg,rgba(17,24,39,.72),rgba(11,16,27,.72));
  border:1px solid var(--line);border-radius:var(--r);padding:28px;
  display:flex;flex-direction:column;transition:border-color .2s,transform .2s;
}
.dev:hover{border-color:var(--line-hi);transform:translateY(-2px)}
.dev__img{height:132px;display:grid;place-items:center;margin-bottom:22px}
.dev__img img{max-height:132px;width:auto;filter:drop-shadow(0 18px 34px rgba(0,0,0,.8))}
.dev__t{font-family:var(--display);font-variation-settings:"wdth" 100;font-weight:700;font-size:19px;margin:0 0 4px}
.dev__k{font-family:var(--mono);font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--dim-2);margin:0 0 14px}
.dev__b{font-size:14.5px;color:var(--dim);margin:0 0 16px;line-height:1.6}
.dev .ticks{margin:auto 0 0}
.dev .ticks li{font-size:13.5px;margin-bottom:9px;padding-left:23px}
.dev .ticks li::before{top:6px;width:9px;height:6px}

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

/* ==========================================================================
   HERO TYPE B — la photo d'abord, le texte dessous
   Reserve aux images dont le sujet occupe le centre du cadre : podiums,
   arrivees, departs en masse. Rien n'est pose sur la photo, donc rien ne
   masque le coureur et la lisibilite du titre est acquise par construction.
   ========================================================================== */
.heroB{padding:70px 0 0}
.heroB__img{
  position:relative;width:100%;
  height:clamp(300px,52vh,560px);
  overflow:hidden;background:linear-gradient(160deg,#0A1424,#06080D 60%);
}
.heroB__img img{width:100%;height:100%;object-fit:cover;display:block}
/* Un simple fondu vers l'encre en bas : la photo reste lisible partout ailleurs. */
.heroB__img::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,
    rgba(6,8,13,.28) 0%, transparent 14%, transparent 62%,
    rgba(6,8,13,.55) 84%, var(--ink) 100%);
}
.heroB__credit{
  position:absolute;right:20px;bottom:14px;z-index:2;
  font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:rgba(255,255,255,.5);
}
.heroB__txt{padding:clamp(36px,4.5vw,60px) 0 clamp(48px,6vw,80px)}
.heroB__txt .lede{max-width:66ch}

/* ==========================================================================
   BANDEAU PHOTO — une image, aucun texte dessus
   Remplace les anciens .band ou le texte se posait sur les coureurs.
   ========================================================================== */
.photostrip{position:relative;width:100%;height:clamp(240px,42vh,440px);overflow:hidden;background:var(--ink)}
.photostrip img{width:100%;height:100%;object-fit:cover;display:block}
.photostrip::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,var(--ink) 0%,transparent 16%,transparent 78%,var(--ink) 100%);
}
.photostrip figcaption{
  position:absolute;left:0;right:0;bottom:14px;z-index:2;text-align:center;
  font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;color:rgba(255,255,255,.55);
}

@media (max-width:760px){
  .heroB{padding-top:70px}
  .heroB__img{height:clamp(230px,38vh,320px)}
  .photostrip{height:clamp(190px,30vh,260px)}
}

/* ==========================================================================
   PORTRAITS — jamais en pleine largeur
   Une image 2:3 dans une bande large et basse ne montre qu'une tranche
   horizontale : tetes coupees, sujet perdu. Les portraits gardent donc leur
   proportion, en rangee contenue.
   ========================================================================== */
.portraits{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:44px}
.portraits figure{margin:0;position:relative;border-radius:var(--r);overflow:hidden;border:1px solid var(--line);background:var(--panel)}
.portraits img{width:100%;aspect-ratio:3/4;object-fit:cover;display:block;transition:transform .5s}
.portraits figure:hover img{transform:scale(1.03)}
.portraits figcaption{
  position:absolute;left:0;right:0;bottom:0;padding:34px 14px 12px;
  background:linear-gradient(180deg,transparent,rgba(6,8,13,.92));
  font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:rgba(255,255,255,.72);text-align:center;
}
@media (max-width:900px){.portraits{grid-template-columns:repeat(2,1fr)}}

/* Un peu plus de hauteur pour le hero type B : moins de recadrage vertical. */
.heroB__img{height:clamp(340px,60vh,640px)}

/* ==========================================================================
   CADRAGE — recentrer sur les coureurs
   Le hero type B montrait 67 % de la hauteur de l'image : un tiers du sujet
   passait a la trappe. On elargit la fenetre pour moins couper.
   ========================================================================== */
.heroB__img{height:clamp(380px,70vh,760px)}

/* Hero type A : la photo remplit toute la largeur, donc object-position
   horizontal n'a aucun effet. Pour degager la zone de texte, on decale
   physiquement l'image et on la surdimensionne juste ce qu'il faut. */
.stage--right .stage__bg img{width:118%;max-width:none;transform:translateX(-13%)}
.stage--left  .stage__bg img{width:118%;max-width:none;transform:translateX(0)}
/* La photo Decathlon a deja son sujet a l'extreme gauche : pas de decalage. */
.stage--right.stage--nopan .stage__bg img{width:100%;transform:none}

@media (max-width:1080px){
  .stage--right .stage__bg img,.stage--left .stage__bg img{width:100%;transform:none}
  .heroB__img{height:clamp(280px,46vh,420px)}
}

/* ==========================================================================
   Le logo du partenaire est en haut a gauche de la photo : les deux barres
   collantes le recouvraient. Le fond demarre donc sous elles.
   ========================================================================== */
.stage--nopan .stage__bg{top:120px}

/* ==========================================================================
   CARTES — enrichissement graphique
   Une carte n'est plus une boite a texte : filet d'accent en haut, index en
   chasse fixe, lueur au survol. Sans toucher au HTML, via les compteurs CSS.
   ========================================================================== */
.grid{counter-reset:card}
.grid > .card{counter-increment:card;position:relative;padding-top:34px;overflow:hidden}
.grid > .card::before{
  content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,var(--accent),transparent 78%);
  opacity:.65;transition:opacity .2s;
}
.grid > .card::after{
  content:counter(card,decimal-leading-zero);
  position:absolute;top:16px;right:20px;
  font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.08em;
  color:var(--accent);opacity:.42;transition:opacity .2s;
}
.grid > .card:hover::before{opacity:1}
.grid > .card:hover::after{opacity:.85}
/* Le titre respire sous le filet. */
.grid > .card .card__t{margin-top:2px}
/* Pas de numerotation la ou elle n'a pas de sens. */
.grid > .card.card--plain::before,.grid > .card.card--plain::after{content:none}
.tiers3 .tier,.plans .plan{position:relative}
.tiers3 .tier::before{
  content:"";position:absolute;top:0;left:0;right:0;height:2px;border-radius:var(--r-lg) var(--r-lg) 0 0;
  background:linear-gradient(90deg,var(--tier-accent,var(--accent)),transparent 80%);opacity:.7;
}

/* ==========================================================================
   ECHELLE DES OFFRES — montrer le delta, pas seulement le contenu
   Un badge « inclut le precedent » ne donne envie de rien. Ce qui donne envie,
   c'est de voir ce que le palier ajoute.
   ========================================================================== */
.plan__gain{
  font-family:var(--mono);font-size:10.5px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--dim-2);margin:0 0 12px;
  padding-top:18px;border-top:1px solid var(--line);
}
.plan--flag .plan__gain{color:var(--metric)}
.gains{list-style:none;margin:0 0 22px;padding:0}
.gains li{
  position:relative;padding-left:24px;margin-bottom:11px;
  font-size:14px;color:var(--dim);line-height:1.5;
}
.gains li::before{
  content:"+";position:absolute;left:0;top:-1px;
  font-family:var(--mono);font-size:15px;font-weight:600;color:var(--accent);
}
.plan--flag .gains li::before{color:var(--metric)}
.gains b{color:var(--text);font-weight:600}
/* Le socle n'ajoute rien : ses puces sont neutres. */
.gains--base li::before{content:"\00b7";color:var(--dim-2);font-size:19px;top:-4px}

/* Le symbole monetaire ne doit pas peser autant que le nombre. */
.plan__p{letter-spacing:-.03em}
.plan__cur{font-size:.62em;margin-left:.12em;opacity:.75}

/* Le filet d'accent suivait le bord droit sans etre rogne par l'arrondi. */
.tiers3 .tier{overflow:hidden}
.tiers3 .tier::before{background:linear-gradient(90deg,var(--tier-accent,var(--accent)),transparent 82%)}

/* ==========================================================================
   Etiquette de public sur les cartes d'offre
   En chasse fixe, grise et sans cadre, elle passait pour un reliquat.
   Devenue une pastille a la couleur de l'offre, elle se lit comme une intention.
   ========================================================================== */
.tier__k{
  display:inline-block;
  font-family:var(--body);font-size:12.5px;font-weight:600;
  letter-spacing:0;text-transform:none;
  color:var(--tier-accent,var(--accent));
  background:color-mix(in srgb,var(--tier-accent,var(--accent)) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--tier-accent,var(--accent)) 34%,transparent);
  border-radius:100px;padding:5px 13px;margin:0 0 16px;
}
@supports not (color: color-mix(in srgb,red 10%,transparent)){
  .tier__k{background:rgba(255,255,255,.05);border-color:var(--line-hi)}
}
.tier__n{margin-bottom:18px}

/* Dans une carte cliquable, l'appel a l'action est un span : il doit reagir
   au survol de la carte, pas au sien. */
.card span.more{color:var(--accent);pointer-events:none}
.card:hover span.more svg{transform:translateX(4px)}

/* ==========================================================================
   OPACITE DES SURFACES
   La trace passe derriere le contenu, mais les panneaux etaient translucides :
   elle se voyait au travers et donnait l'impression de passer devant.
   On glisse l'encre sous chaque voile — l'aspect ne change pas, la surface
   devient opaque.
   ========================================================================== */
.card,.plan,.tier,.mock,.quiz,.access,.ledger,.answer,.step,.partner,.pull,
details.fold,.faq details,.efort-cookie{
  background-color:var(--ink);
  background-clip:padding-box;
}
.card{background-image:linear-gradient(180deg,rgba(17,24,39,.86),rgba(11,16,27,.86))}
.plan,.tier{background-image:linear-gradient(180deg,rgba(17,24,39,.88),rgba(11,16,27,.88))}
.step,.ledger,.answer,.partner,.quiz{background-image:linear-gradient(180deg,rgba(17,24,39,.86),rgba(11,16,27,.88))}
.plan--flag{background-image:linear-gradient(180deg,rgba(0,200,150,.09),rgba(11,16,27,.9))}
.access{background-image:linear-gradient(180deg,rgba(17,24,39,.9),rgba(11,16,27,.92))}
.mock{background-image:linear-gradient(180deg,rgba(20,28,46,.96),rgba(11,16,27,.97))}
.pull,details.fold,.faq details{background-image:linear-gradient(0deg,rgba(255,255,255,.025),rgba(255,255,255,.025))}

/* Les champs de saisie laissaient passer la trace de part en part. */
.field input,.field select,.field textarea{
  background-color:#0A0E16;
  background-image:linear-gradient(0deg,rgba(255,255,255,.03),rgba(255,255,255,.03));
}
.field input:focus,.field select:focus,.field textarea:focus{
  background-image:linear-gradient(0deg,rgba(61,138,250,.08),rgba(61,138,250,.08));
}
.opt{background-color:var(--ink);background-image:linear-gradient(0deg,rgba(255,255,255,.028),rgba(255,255,255,.028))}
.opt:hover{background-image:linear-gradient(0deg,rgba(61,138,250,.1),rgba(61,138,250,.1))}
.bubble{background-color:#0D1524}
.elev,.abcd div,.mtbl th{background-color:#0C1322}

/* ==========================================================================
   HERO TYPE B — le texte revient sur l'image
   La photo est plus haute, son tiers bas se fond dans l'encre, et le bloc de
   texte remonte dessus. La photo reste montree entiere dans sa partie utile,
   le titre se pose sur une zone deja noire : rien ne recouvre un coureur.
   ========================================================================== */
.heroB{padding:0}
.heroB__img{height:clamp(520px,88vh,1000px)}
.heroB__img::after{
  background:linear-gradient(180deg,
    rgba(6,8,13,.34) 0%,
    rgba(6,8,13,.06) 12%,
    rgba(6,8,13,.06) 42%,
    rgba(6,8,13,.42) 60%,
    rgba(6,8,13,.82) 76%,
    rgba(6,8,13,.96) 88%,
    var(--ink) 100%);
}
/* Credit photo au coin superieur droit de l image, sur toutes les pages : a
   mi-hauteur il tombait sur le sujet. */
.heroB__credit{bottom:auto;top:16px;right:24px}
.heroB__txt{
  position:relative;z-index:2;
  margin-top:calc(-1 * clamp(270px,40vh,440px));
  padding:0 0 clamp(56px,7vw,96px);
}
.heroB__txt .lede{max-width:62ch}

@media (max-width:760px){
  .heroB__img{height:clamp(420px,62vh,560px)}
  .heroB__credit{top:16px}
  .heroB__txt{margin-top:calc(-1 * clamp(210px,30vh,280px));padding-bottom:48px}
}

/* ==========================================================================
   BANDEAU DE NAVIGATION
   La photo commence desormais au pixel zero : l'en-tete ne peut plus etre
   entierement transparent au repos. Fond leger permanent, qui se densifie au
   defilement.
   ========================================================================== */
.hdr{
  background:rgba(6,8,13,.42);
  backdrop-filter:blur(10px) saturate(120%);
  border-bottom:1px solid rgba(255,255,255,.06);
}
.hdr--solid{
  background:rgba(6,8,13,.88);
  backdrop-filter:blur(20px) saturate(130%);
  border-bottom-color:var(--line);
}
/* Le halo sous le bandeau adoucit la transition avec une photo claire. */
.hdr::after{
  content:"";position:absolute;left:0;right:0;top:100%;height:64px;pointer-events:none;
  background:linear-gradient(180deg,rgba(6,8,13,.34),transparent);
  opacity:1;transition:opacity .3s;
}
.hdr--solid::after{opacity:0}

/* La barre de chapitres suit la meme logique. */
.chapters{background:rgba(6,8,13,.72);backdrop-filter:blur(14px) saturate(120%)}

/* Le haut de la photo est un peu plus tenu, pour que la navigation tienne
   meme sur un ciel en plein soleil. */
.heroB__img::after{
  background:linear-gradient(180deg,
    rgba(6,8,13,.52) 0%,
    rgba(6,8,13,.16) 14%,
    rgba(6,8,13,.06) 42%,
    rgba(6,8,13,.42) 60%,
    rgba(6,8,13,.82) 76%,
    rgba(6,8,13,.96) 88%,
    var(--ink) 100%);
}

/* La barre de chapitres occupe deja l'espace dans le flux : le decalage du
   fond ajoute en 4.5 pour degager le logo ne fait plus que creuser un vide. */
.stage--nopan .stage__bg{top:0}

/* ==========================================================================
   La barre de chapitres est collante a 70 px, mais sa place dans le flux
   commence a zero : les 70 px de l'en-tete n'etaient reserves nulle part, et
   le contenu suivant remontait dessous. On lui donne sa marge reelle.
   ========================================================================== */
.chapters{margin-top:70px}

/* Attribution sous un chiffre : qui, et quand. */
.figure__s{
  display:block;margin-top:6px;
  font-family:var(--mono);font-size:11.5px;letter-spacing:.04em;color:var(--dim-2);
}

/* Rangee de mesures du matin, dans une maquette. */
.mrow{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}
.mrow div{border:1px solid var(--line);border-radius:10px;padding:12px 13px;background:rgba(255,255,255,.02)}
.mrow .k{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim-2);margin:0 0 7px}
.mrow .v{font-family:var(--mono);font-size:19px;font-weight:600;line-height:1;margin:0}
.mrow .d{font-family:var(--mono);font-size:11px;margin:6px 0 0}
.verdict{display:flex;gap:8px;margin-top:16px}
.verdict span{
  flex:1;text-align:center;font-family:var(--mono);font-size:11px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--dim-2);border:1px solid var(--line);
  border-radius:9px;padding:10px 6px;
}
.verdict span.on{color:var(--warn);border-color:rgba(232,180,74,.5);background:rgba(232,180,74,.08)}

/* ==========================================================================
   Les captures portent la couleur de leur chapitre : le contour et la lueur
   suivent la teinte de l'ouverture, sans qu'on ait a la redire bloc par bloc.
   ========================================================================== */
.ch .show__media img,
.ch .fig img{
  border-color:color-mix(in srgb, var(--ch-accent, var(--accent)) 42%, transparent);
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--ch-accent, var(--accent)) 12%, transparent),
    0 26px 64px -28px color-mix(in srgb, var(--ch-accent, var(--accent)) 34%, transparent),
    0 30px 70px -30px rgba(0,0,0,.9);
  transition:border-color .25s, box-shadow .25s;
}
.ch .show:hover .show__media img{
  border-color:color-mix(in srgb, var(--ch-accent, var(--accent)) 68%, transparent);
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--ch-accent, var(--accent)) 20%, transparent),
    0 30px 74px -26px color-mix(in srgb, var(--ch-accent, var(--accent)) 48%, transparent),
    0 30px 70px -30px rgba(0,0,0,.9);
}
@supports not (color: color-mix(in srgb, red 10%, transparent)){
  .ch .show__media img,.ch .fig img{border-color:var(--line-hi)}
}

/* Toutes les images d'un chapitre, quel que soit le bloc qui les porte. */
.ch figure > img{width:100%;border-radius:var(--r);border:1px solid var(--line);display:block}
.ch .show__media img,
.ch .fig img,
.ch figure > img,
.ch .portraits figure,
.ch .mock{
  border-color:color-mix(in srgb, var(--ch-accent, var(--accent)) 42%, transparent);
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--ch-accent, var(--accent)) 12%, transparent),
    0 26px 64px -28px color-mix(in srgb, var(--ch-accent, var(--accent)) 34%, transparent),
    0 30px 70px -30px rgba(0,0,0,.9);
  transition:border-color .25s, box-shadow .25s;
}
.ch figure:hover > img,
.ch .portraits figure:hover{
  border-color:color-mix(in srgb, var(--ch-accent, var(--accent)) 68%, transparent);
}
/* Les rendus d'appareils sont detoures : un contour n'aurait aucun sens. */
.ch .devs img{border:0;box-shadow:none;filter:drop-shadow(0 24px 48px rgba(0,0,0,.85))}
@supports not (color: color-mix(in srgb, red 10%, transparent)){
  .ch .show__media img,.ch .fig img,.ch figure > img,.ch .portraits figure,.ch .mock{border-color:var(--line-hi)}
}

/* Photo d'ensemble en ouverture du chapitre appareils. */
.dev-all{margin:0 0 28px;text-align:center}
.dev-all img{width:min(100%,1080px);margin-inline:auto;filter:drop-shadow(0 40px 80px rgba(0,0,0,.9))}
.dev-all figcaption{margin-top:18px;font-size:14.5px;color:var(--dim)}
/* Quatre cartes : deux par rangee en dessous de 1400 px, une seule sur mobile. */
.dev-grid{grid-template-columns:repeat(auto-fit,minmax(268px,1fr))}
.dev__img img{max-height:120px}

/* Les deux telephones cote a cote demandent plus de largeur que les autres rendus. */
.dev__img--pair{height:150px}
.dev__img--pair img{max-height:150px}

/* ==========================================================================
   PAGE SCIENCE — l equation a la place de la capture
   Un modele n a pas de capture d ecran. Le panneau qui tient d ordinaire
   l image porte ici la formule, ses parametres et sa source.
   ========================================================================== */
.eqcard{
  background:linear-gradient(180deg,rgba(255,255,255,.030),rgba(255,255,255,.010));
  border:1px solid var(--line);border-radius:var(--r);
  padding:clamp(24px,3vw,38px);
}
.eqcard__k{
  font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.13em;
  text-transform:uppercase;color:var(--dim-2);margin:0 0 22px;
}
.eq{
  font-family:var(--mono);font-size:clamp(13px,1.25vw,16px);line-height:1.75;
  color:var(--dim);margin:0;overflow-x:auto;
}
.eq + .eq{margin-top:8px}
.eq b{color:var(--metric);font-weight:600}
.eqdef{display:grid;grid-template-columns:auto 1fr;gap:11px 20px;margin:26px 0 0}
.eqdef dt{font-family:var(--mono);font-size:13.5px;color:var(--power);white-space:nowrap}
.eqdef dd{margin:0;font-size:14.5px;color:var(--dim-2);line-height:1.5}
.eqcard__src{
  margin:24px 0 0;padding-top:18px;border-top:1px solid var(--line);
  font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;color:var(--dim-2);
}
@media(max-width:560px){.eqdef{grid-template-columns:1fr;gap:4px 0}
  .eqdef dd{margin-bottom:12px}}

/* Les sources : une liste, pas des cartes. Elles se lisent en colonne. */
.srclist{border-top:1px solid var(--line)}
.src{
  display:grid;grid-template-columns:minmax(190px,270px) 1fr;gap:8px 32px;
  padding:22px 0;border-bottom:1px solid var(--line);
}
.src__w{font-family:var(--mono);font-size:13.5px;color:var(--power);line-height:1.5}
.src__d{font-size:15.5px;color:var(--dim);line-height:1.6;margin:0}
@media(max-width:720px){.src{grid-template-columns:1fr;padding:18px 0}}
.eq sup,.eq sub{font-size:.7em;line-height:0}

/* Une carte peut porter une photo d appareil : elle occupe la largeur, sans
   contour, l ombre portee suffit a la detacher du fond. */
.card__img{margin:-4px 0 24px;display:grid;place-items:center}
.card__img img{width:100%;max-width:440px;filter:drop-shadow(0 26px 46px rgba(0,0,0,.88))}

/* Le panneau d equation suit la teinte de son chapitre, comme les captures. */
.ch .eqcard{
  border-color:color-mix(in srgb, var(--ch-accent, var(--accent)) 42%, transparent);
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--ch-accent, var(--accent)) 12%, transparent),
    0 26px 64px -28px color-mix(in srgb, var(--ch-accent, var(--accent)) 34%, transparent),
    0 30px 70px -30px rgba(0,0,0,.9);
  transition:border-color .25s, box-shadow .25s;
}
.ch .show:hover .eqcard{
  border-color:color-mix(in srgb, var(--ch-accent, var(--accent)) 68%, transparent);
  box-shadow:
    0 0 0 1px color-mix(in srgb, var(--ch-accent, var(--accent)) 20%, transparent),
    0 30px 74px -26px color-mix(in srgb, var(--ch-accent, var(--accent)) 48%, transparent),
    0 30px 70px -30px rgba(0,0,0,.9);
}
.ch .eqcard .eqcard__src,
.ch .srclist,.ch .src{
  border-color:color-mix(in srgb, var(--ch-accent, var(--accent)) 26%, transparent);
}
@supports not (color: color-mix(in srgb, red 10%, transparent)){
  .ch .eqcard{border-color:var(--line-hi)}
}

/* Ce que le rang rapporte : rappel sous le formulaire de preinscription,
   filet a gauche comme dans l application. */
.rank{margin-top:28px;padding:22px 24px;border-left:3px solid var(--power);
  background:linear-gradient(90deg,rgba(61,138,250,.07),transparent);border-radius:0 var(--r) var(--r) 0}
.rank__t{font-family:var(--display);font-variation-settings:"wdth" 100;font-weight:700;font-size:17px;margin:0 0 14px}
.rank ul{list-style:none;margin:0;padding:0}
.rank li{position:relative;padding-left:18px;margin-bottom:10px;font-size:14.5px;color:var(--dim);line-height:1.55}
.rank li::before{content:"";position:absolute;left:0;top:9px;width:6px;height:6px;border-radius:50%;background:var(--power)}
.rank li b{color:var(--text)}
.rank__n{margin:14px 0 0;font-size:13px;color:var(--dim-2)}

/* ==========================================================================
   MOBILE — passe dediee
   Les regles responsive existantes datent d avant la navigation a menus, le
   selecteur de langue et le bouton d acces anticipe : sur un telephone, la
   barre d en-tete se retrouvait a l etroit et les titres restaient calibres
   pour un ecran large. Ce bloc est place en fin de feuille : il passe apres
   tout le reste, et rien n a besoin de !important.
   ========================================================================== */
@media (max-width:760px){

  /* Aucun bloc ne doit pouvoir faire defiler la page lateralement. Le fond
     pleine largeur du hero s appuie sur `vw`, une unite qui inclut la barre de
     defilement : quelques pixels de trop suffisent a decaler toute la page. */
  html,body{overflow-x:hidden;max-width:100%}

  /* --- En-tete : trois elements, pas cinq -------------------------------- */
  .hdr__in{gap:10px;height:60px}
  .hdr__logo img{height:22px}
  .hdr__act{gap:8px;order:2;margin-left:auto}
  .lang button{padding:5px 10px;font-size:10.5px;letter-spacing:.06em}
  .hdr__act .btn--sm{padding:8px 13px;font-size:13px;white-space:nowrap}
  .burger{display:block;order:3;padding:4px}

  /* CORRECTIF : `.nav{display:flex}` est redeclare ligne 529, APRES la regle
     responsive qui le masque et hors media query. A specificite egale, la
     derniere gagne : le tiroir etait affiche en permanence par-dessus la page
     sur tous les telephones. On le referme ici, en fin de feuille. */
  .nav{display:none}
  .nav.open{display:flex}

  /* Tiroir plein ecran, en voile translucide.

     L en-tete porte un `backdrop-filter` : il devient donc le bloc de
     reference des enfants en `position:fixed`, et un `bottom:0` s y arrete au
     bas de l en-tete au lieu du bas de l ecran. D ou une hauteur explicite en
     unites de viewport, seule mesure qui echappe a ce piege. `dvh` suit la
     barre d adresse mobile ; `vh` reste en repli. */
  .nav{
    position:fixed;top:60px;left:0;right:0;
    height:calc(100vh - 60px);height:calc(100dvh - 60px);
    flex-direction:column;gap:0;justify-content:flex-start;
    background:rgba(8,11,18,.93);
    -webkit-backdrop-filter:blur(26px) saturate(140%);
    backdrop-filter:blur(26px) saturate(140%);
    border-bottom:0;padding:14px 24px 40px;
    overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:70;
  }
  .nav > a,.nav__item{flex:none}
  .nav > a,.nav__btn{font-size:16.5px}
  .nav__btn{color:var(--text)}
  .menu__l{padding:9px 0}
  .menu__l b{font-size:15px}
  .menu__l span{font-size:13px}

  /* --- Titres : le clamp gardait un plancher calibre pour le bureau ------ */
  .h1{font-size:clamp(31px,8.6vw,46px);line-height:1.04}
  .h2{font-size:clamp(24px,6.4vw,34px);line-height:1.1}
  .h3{font-size:clamp(19px,5vw,23px)}
  .lede{font-size:16.5px;line-height:1.6}
  .kicker{font-size:11px;margin-bottom:14px}

  .chapterhead{padding:40px 0}
  .chapterhead__n{font-size:30px}
  .chapterhead__t{font-size:24px;flex:1 1 100%}
  .chapterhead__s{font-size:14.5px;margin-top:8px}
  .chapterhead__r{margin-top:16px}
  .chapters a{font-size:12.5px;padding:12px 10px}

  /* --- Heros : bandeau photo, titre pose sur son bas ---------------------- */
  /* Meme geometrie que `heroB` : la photo occupe un bandeau, la derniere ligne
     du titre se pose sur son bas.

     Methode en flux, sans position absolue. Le bloc de titre fait exactement la
     hauteur du bandeau et aligne son contenu en bas : le titre touche donc le
     bas de la photo quel que soit son nombre de lignes, et le bloc de texte
     suit naturellement juste apres. Une premiere version ancrait le titre par
     `top` et `translateY(-100%)` — il disparaissait de l ecran. */
  .stage,.stage--right{
    position:relative;display:block;min-height:0;padding:0;overflow-x:clip;
  }
  /* Hauteur du bandeau : exactement celle de `heroB` sur les autres pages,
     `clamp(230px,38vh,320px)`. Mes 62 dvh valaient environ 520 px — deux cents
     de trop, et c est ce qui repoussait tous les textes vers le bas. */
  .stage{--stage-band:clamp(230px,38vh,320px)}
  .stage__bg{inset:0 0 auto;height:var(--stage-band)}
  .stage .wrap{position:relative;z-index:2}
  .stage__head{
    display:flex;flex-direction:column;justify-content:flex-end;
    min-height:var(--stage-band);padding-bottom:20px;
  }
  .stage__tail{
    background:var(--ink);
    margin-inline:calc(50% - 50vw);padding-inline:calc(50vw - 50%);
    padding-top:28px;padding-bottom:44px;
  }
  .stage__tail .lede{margin:0}
  .stage__tail .btns{margin-top:24px}
  /* Credits photo en haut a droite : en bas, ils tombaient au milieu du
     visuel des que le titre passait par-dessus. */
  /* Coin superieur droit de la photo : le bandeau commence au bord haut de la
     section, donc 12 px suffisent. Les 74 px precedents le decrochaient. */
  .stage__credit{right:12px;bottom:auto;top:12px;font-size:9.5px}

  /* Page Produit : titre de trois lignes, descendu d une ligne pour respirer.
     Le selecteur exclut Equipes, qui porte `stage--nopan` et un titre de deux
     lignes — la meme descente y collerait le texte au bord du bandeau. */
  .stage--right:not(.stage--nopan) .stage__head{padding-bottom:0;margin-bottom:-15px}
  .heroB__credit{right:14px;bottom:auto;top:14px;font-size:9.5px}

  /* Page IA : titre descendu de deux lignes. Le tirage vers le haut de
     `.heroB__txt` est commun aux huit pages, mais leurs titres n ont pas le
     meme nombre de lignes — celui-ci en compte trois et remontait trop. */
  .heroB--low .heroB__txt{margin-top:calc(-1 * clamp(210px,30vh,280px) + 72px)}

  /* --- Boutons : pleine largeur plutot que coupes ------------------------ */
  .btns{gap:10px;margin-top:28px}
  .btns .btn{width:100%;justify-content:center}
  .btns.center{justify-content:stretch}

  /* --- Pied de page : les trois colonnes de liens restent cote a cote ----- */
  /* La regle de la ligne 468 mettait tout en une colonne, bloc de marque
     compris : le pied de page occupait alors trois ecrans de defilement pour
     douze liens. La marque garde la largeur entiere, les trois listes se
     partagent la ligne suivante. */
  .ftr__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px 18px}
  .ftr__grid > :first-child{grid-column:1 / -1;margin-bottom:6px}
  .ftr h4{font-size:10px;letter-spacing:.12em;margin:0 0 14px}
  .ftr li{margin-bottom:10px}
  .ftr a{font-size:13.5px}
  .ftr__logo img{height:26px;margin-bottom:14px}

  /* --- Roster : deux par ligne ------------------------------------------- */
  .strip{grid-template-columns:repeat(2,1fr);gap:10px}
  .strip figcaption{font-size:12px;padding:22px 8px 10px}
  .portraits{grid-template-columns:repeat(2,1fr)}

  /* --- Blocs show : le texte avant la capture ---------------------------- */
  /* Sur 390 px de large, une capture de l application arrive avant qu on
     sache ce qu on regarde. Le titre et le texte passent devant, l image
     illustre ensuite. Vaut aussi pour les blocs `--flip`, qui inversaient
     l ordre pour le bureau. */
  .show{display:flex;flex-direction:column;gap:26px}
  .show__media,.show--flip .show__media{order:2}
  .show > div:not(.show__media){order:1}

  /* --- Blocs denses ------------------------------------------------------ */
  section{padding:60px 0}
  .sec-head{margin-bottom:32px}
  .show + .show{margin-top:56px}
  .show__note{font-size:14px;margin-top:18px}
  .card,.dev,.plan{padding:22px}
  .access{padding:22px}
  .eqcard{padding:20px}
  .eq{font-size:12.5px;line-height:1.7}
  .eqdef dt{font-size:12.5px}
  .eqdef dd{font-size:13.5px}
  .rank{padding:18px 16px}
  .ticks li{font-size:14.5px;padding-left:24px}
  details.fold > summary{padding:18px 20px;font-size:15px}
  details.fold > div{padding:0 20px 20px}
  .cmp{font-size:13px}
  .cmp th,.cmp td{padding:11px 9px}
  .ftr__legal{gap:14px;margin-top:36px}
}

@media (max-width:430px){
  /* Sur les ecrans les plus etroits, les gouttieres de 24 px coutent trop. */
  .wrap{width:calc(100% - 32px)}
  .hdr__in{gap:8px}
  .hdr__logo img{height:20px}
  .lang button{padding:5px 8px;font-size:10px}
  .hdr__act .btn--sm{padding:7px 11px;font-size:12.5px}
  .nav{padding:6px 16px 18px}
  .h1{font-size:clamp(28px,8.4vw,34px)}
  /* Deux coureurs par ligne, jamais un. Un portrait pleine largeur occupe un
     ecran entier pour un seul nom : le roster perd son effet de nombre, qui
     est tout son propos. */
  .abcd,.figures{grid-template-columns:1fr}
  .card,.dev,.plan,.access,.eqcard{padding:18px}
}

/* Carte de noms dans la bande roster : meme cadre, meme proportion, mais des
   coequipieres sans portrait individuel plutot qu une photo. */
.strip__names{
  aspect-ratio:3/4;display:flex;flex-direction:column;justify-content:center;
  gap:2px;padding:14px 10px 34px;
  background:
    radial-gradient(120% 80% at 50% 0%, rgba(61,138,250,.14), transparent 62%),
    linear-gradient(180deg, rgba(255,255,255,.04), rgba(255,255,255,.012));
}
.strip__names ul{list-style:none;margin:0;padding:0}
.strip__names li{margin:0 0 11px;text-align:center;line-height:1.25}
.strip__names li:last-child{margin-bottom:0}
.strip__names b{display:block;font-size:12px;font-weight:650;color:var(--text)}
.strip__names span{
  display:block;font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;
  color:var(--dim-2);margin-top:2px;
}
@media (max-width:760px){
  .strip__names{padding:12px 8px 30px}
  .strip__names b{font-size:12.5px}
  .strip__names li{margin-bottom:13px}
}
