/* Navigation des études de cas : en-tête compact + ancres latérales. Composant commun à tous les projets du portfolio.
   Thème clair ou sombre lu sur la section sous l'élément (attribut data-cs-theme). */
.cs-head,.cs-rail{--cs-ink:#121314;--cs-muted:#6a6c71;--cs-bg:rgba(244,244,242,.78);--cs-line:rgba(18,19,20,.12);--cs-solid:#f4f4f2;--cs-ease:cubic-bezier(.23,1,.32,1)}
.cs-head[data-theme=dark],.cs-rail[data-theme=dark]{--cs-ink:#ebebe8;--cs-muted:#8d9096;--cs-bg:rgba(22,23,25,.72);--cs-line:rgba(235,235,232,.14);--cs-solid:#161719}

.cs-head{position:fixed;z-index:60;left:var(--gutter,20px);top:calc(12px + env(safe-area-inset-top,0px));max-width:calc(100vw - 2 * var(--gutter,20px));
  display:flex;align-items:center;height:40px;padding:0 6px 0 4px;border-radius:999px;font-family:var(--sans,system-ui);font-size:13px;line-height:1;letter-spacing:-.005em;
  color:var(--cs-ink);background:var(--cs-bg);box-shadow:0 0 0 1px var(--cs-line) inset;-webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4);
  transform:translateY(calc(-100% - 20px));opacity:0;visibility:hidden;
  transition:transform .5s var(--cs-ease),opacity .3s ease,visibility 0s linear .5s,color .3s ease,background-color .3s ease,box-shadow .3s ease}
.cs-on .cs-head{transform:none;opacity:1;visibility:visible;transition:transform .5s var(--cs-ease),opacity .3s ease,visibility 0s,color .3s ease,background-color .3s ease,box-shadow .3s ease}
.cs-head a,.cs-head button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;height:32px;border-radius:999px}
.cs-back{gap:6px;padding:0 12px 0 10px;color:var(--cs-muted)!important;transition:color .2s ease,background-color .2s ease}
.cs-back svg{width:14px;height:14px;transition:transform .3s var(--cs-ease)}
.cs-name{font-weight:600;padding:0 10px 0 12px;border-left:1px solid var(--cs-line);height:16px;display:inline-flex;align-items:center;white-space:nowrap}
.cs-sec{gap:8px;padding:0 10px 0 4px;white-space:nowrap;min-width:0}
.cs-sec .cs-idx{font-family:var(--mono,ui-monospace);font-size:11px;color:var(--cs-muted);font-variant-numeric:tabular-nums}
.cs-sec .cs-lab{display:inline-block;overflow:hidden;text-overflow:ellipsis}
.cs-sec .cs-lab>span{display:inline-block}
.cs-sec svg{width:12px;height:12px;color:var(--cs-muted);transition:transform .25s var(--cs-ease)}
.cs-sec[aria-expanded=true] svg{transform:rotate(180deg)}
.cs-head :focus-visible{outline:2px solid currentColor;outline-offset:1px}
@media (hover:hover) and (pointer:fine){
  .cs-back:hover{color:var(--cs-ink)!important;background:var(--cs-line)}
  .cs-back:hover svg{transform:translateX(-2px)}
  .cs-sec:hover{background:var(--cs-line)}
}
.cs-menu{position:absolute;left:0;top:calc(100% + 8px);min-width:220px;max-height:calc(100svh - 90px);overflow-y:auto;overscroll-behavior:contain;list-style:none;margin:0;padding:6px;border-radius:14px;
  background:var(--cs-solid);box-shadow:0 0 0 1px var(--cs-line) inset,0 18px 40px -18px rgba(0,0,0,.35);-webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4);
  transform-origin:24px 0;transition:opacity .18s ease,transform .2s var(--cs-ease)}
.cs-menu[hidden]{display:block;opacity:0;transform:scale(.97) translateY(-4px);pointer-events:none;visibility:hidden}
.cs-menu a{display:flex!important;justify-content:space-between;gap:16px;width:100%;height:40px!important;padding:0 12px;border-radius:9px!important}
.cs-menu a span{font-family:var(--mono,ui-monospace);font-size:11px;color:var(--cs-muted)}
.cs-menu a[aria-current=true]{background:var(--cs-line)}

/* Ancres latérales (grands écrans) · V2 : repères numérotés, section active nommée un instant, version déployée au survol ou au clavier */
.cs-rail{position:fixed;z-index:59;right:max(10px,env(safe-area-inset-right,0px));top:50%;transform:translate(8px,-50%);opacity:0;visibility:hidden;
  transition:opacity .4s ease,transform .5s var(--cs-ease),visibility 0s linear .5s}
.cs-on .cs-rail{opacity:1;visibility:visible;transform:translate(0,-50%);transition:opacity .4s ease,transform .5s var(--cs-ease),visibility 0s}
.cs-rail ol{position:relative;list-style:none;margin:0;padding:8px 14px 8px 0;display:flex;flex-direction:column;align-items:flex-end;border-radius:14px;
  background:transparent;box-shadow:0 0 0 1px transparent inset;transition:background-color .3s ease,box-shadow .3s ease,padding .45s var(--cs-ease)}
.cs-rail.open ol{padding-left:18px;background:var(--cs-bg);box-shadow:0 0 0 1px var(--cs-line) inset,0 18px 40px -20px rgba(0,0,0,.4);-webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4)}
.cs-rail a{position:relative;display:flex;align-items:center;justify-content:flex-end;gap:10px;min-width:44px;height:30px;color:var(--cs-ink);text-decoration:none;font-family:var(--sans,system-ui)}
.cs-rl{display:block;max-width:0;overflow:hidden;white-space:nowrap;font-size:13px;line-height:1.2;letter-spacing:-.005em;opacity:0;transition:max-width .45s var(--cs-ease),opacity .25s ease}
.cs-rn{width:2.2ch;text-align:right;font-family:var(--mono,ui-monospace);font-size:11px;color:var(--cs-muted);font-variant-numeric:tabular-nums;opacity:0;transition:opacity .25s ease}
.cs-tick{display:block;width:12px;height:1.5px;border-radius:1px;background:currentColor;opacity:.42;transition:width .45s var(--cs-ease),opacity .3s ease}
.cs-rail a[aria-current=true] .cs-tick{width:24px;opacity:1}
.cs-rail a[aria-current=true] .cs-rn{opacity:1;color:var(--cs-ink)}
/* intitulé de la section qui vient de commencer, sur sa pastille */
.cs-rail:not(.open) a.flash .cs-rl{max-width:260px;opacity:1;padding:6px 10px;border-radius:999px;background:var(--cs-bg);box-shadow:0 0 0 1px var(--cs-line) inset;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
/* version déployée : tous les intitulés et numéros */
.cs-rail.open .cs-rl{max-width:260px;opacity:.72}
.cs-rail.open .cs-rn{opacity:1}
.cs-rail.open a[aria-current=true] .cs-rl{opacity:1;font-weight:500}
.cs-rail.open a:hover .cs-rl,.cs-rail.open a:focus-visible .cs-rl{opacity:1}
.cs-rail.open a:hover .cs-tick{opacity:1;width:18px}
.cs-rail a:focus-visible{outline:2px solid var(--cs-ink);outline-offset:2px;border-radius:6px}
/* avancement dans la page, le long des repères */
.cs-track{position:absolute;right:14px;top:23px;bottom:23px;width:1.5px;background:var(--cs-line);pointer-events:none;opacity:0;transition:opacity .3s ease}
.cs-track i{display:block;width:100%;height:100%;background:currentColor;color:var(--cs-ink);transform-origin:50% 0;transform:scaleY(0)}
.cs-rail.open .cs-track{opacity:0}
.cs-rail:not(.open) .cs-track{opacity:.9}

@media (min-width:1024px){.cs-sec{pointer-events:none}.cs-sec svg{display:none}}
@media (max-width:1023.98px){.cs-rail{display:none}}
/* écrans tactiles : cibles de 44 px */
@media (pointer:coarse){.cs-head{height:48px;padding:0 4px}.cs-head a,.cs-head button{height:44px}.cs-menu a{height:44px!important}}
@media (max-width:520px){.cs-back span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.cs-back{padding:0 8px;min-width:44px;justify-content:center}.cs-sec .cs-idx{display:none}}
@media (prefers-reduced-transparency:reduce){.cs-head,.cs-menu,.cs-rl,.cs-rail.open ol{-webkit-backdrop-filter:none;backdrop-filter:none}
  .cs-head,.cs-rail{--cs-bg:#f4f4f2}.cs-head[data-theme=dark],.cs-rail[data-theme=dark]{--cs-bg:#161719}}
@media (prefers-reduced-motion:reduce){.cs-head,.cs-on .cs-head,.cs-rail,.cs-on .cs-rail{transform:none;transition:opacity .2s ease,visibility 0s}.cs-on .cs-rail{transform:translateY(-50%)}.cs-rail{transform:translateY(-50%)}.cs-tick,.cs-rl,.cs-rn,.cs-menu,.cs-rail ol{transition:none}}
