/* ============================================================
   CHEST v2 — couche commune
   Chargée en DERNIER sur chaque page de l'app (après la feuille propre
   à la page) et sur le shell app.html. Ne touche ni la connexion ni le
   Welcome : chaque règle est limitée aux pages (body[data-page]) ou au
   shell (.chest-shell).
   Même logique que BERICH v2 : pas de cases, de la profondeur, des
   filets estompés, du mouvement court et net.
   ============================================================ */

:root{
  --v2-ease: cubic-bezier(.23,1,.32,1);
  --v2-ease-io: cubic-bezier(.77,0,.175,1);
  --v2-line: rgba(255,255,255,.085);
  --v2-rule: linear-gradient(90deg, transparent, var(--v2-line) 14%, var(--v2-line) 86%, transparent);
  --v2-rule-brand: linear-gradient(90deg, transparent, rgba(252,18,131,.38) 30%, rgba(249,164,94,.32) 70%, transparent);
  /* Teintes de profondeur, changées par page plus bas */
  --v2-d1: rgba(252,18,131,.13);
  --v2-d2: rgba(249,164,94,.07);
  --v2-d3: rgba(140,70,255,.06);
}

/* ---------- 1. Profondeur : plans de lumière posés en haut de la page ----------
   Un seul pseudo-élément, sous tout le contenu (z-index:-1 → au-dessus du fond
   du canevas, sous les blocs). Il défile AVEC la page (retour utilisateur : pas
   de lueur fixe à l'écran) — comme la lueur derrière un titre. */
body.chest-root[data-page]{ position:relative; }
body.chest-root[data-page]:not([data-page="berich"]):not([data-page="calendar"])::before{
  content:''; position:absolute; left:0; right:0; top:0; height:min(1500px,170vh); z-index:-1; pointer-events:none;
  background:
    radial-gradient(ellipse 52% 42% at 18% -6%, var(--v2-d1), transparent 70%),
    radial-gradient(ellipse 38% 46% at 104% 38%, var(--v2-d2), transparent 72%),
    radial-gradient(ellipse 44% 40% at -8% 96%, var(--v2-d3), transparent 72%);
}
body.chest-root[data-page]:not([data-page="berich"])::after{
  content:''; position:fixed; inset:0; z-index:-1; pointer-events:none;
  mix-blend-mode:overlay; opacity:.05;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size:180px 180px;
}
/* Chaque espace a sa propre lumière, toujours dans la palette CHEST */
body[data-page="dashboard"]  { --v2-d1: rgba(252,18,131,.15); --v2-d2: rgba(249,164,94,.08); --v2-d3: rgba(51,230,166,.04); }
body[data-page="backtesting"]{ --v2-d1: rgba(249,120,60,.13);  --v2-d2: rgba(252,18,131,.08); --v2-d3: rgba(140,70,255,.05); }
body[data-page="journal"]    { --v2-d1: rgba(200,60,255,.11);  --v2-d2: rgba(252,18,131,.08); --v2-d3: rgba(249,164,94,.05); }
body[data-page="strategies"] { --v2-d1: rgba(77,141,255,.11);  --v2-d2: rgba(252,18,131,.07); --v2-d3: rgba(140,70,255,.05); }
body[data-page="calendar"]   { --v2-d1: rgba(232,179,57,.10);  --v2-d2: rgba(252,18,131,.08); --v2-d3: rgba(249,164,94,.05); }
body[data-page="school"]     { --v2-d1: rgba(252,18,131,.12);  --v2-d2: rgba(140,70,255,.07); --v2-d3: rgba(249,164,94,.05); }
body[data-page="account"],
body[data-page="admin-members"]{ --v2-d1: rgba(255,255,255,.05); --v2-d2: rgba(252,18,131,.06); --v2-d3: rgba(249,164,94,.04); }

/* Les surfaces pleine page laissent voir la profondeur */
body[data-page] .chest-page{ background:rgba(8,8,10,.38); }

/* ---------- 2. Filets estompés au lieu de traits pleins ---------- */
body[data-page] .chest-section + .chest-section{
  border-top:1px solid transparent; border-image:var(--v2-rule) 1;
}
body[data-page] hr{ height:1px; border:0; background:var(--v2-rule); }

/* ---------- 3. Cartes : moins de cases, plus de matière ----------
   La carte générique perd son contour franc : un fond qui s'éteint vers le bas
   et un reflet en haut suffisent à la détacher du fond. */
body[data-page] .card{
  border-color:rgba(255,255,255,.07) !important;
  background:linear-gradient(180deg, rgba(255,255,255,.035), rgba(255,255,255,.008) 70%) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.07), 0 24px 60px -30px rgba(0,0,0,.7) !important;
}
body[data-page] .chest-glass{
  border-color:rgba(255,255,255,.1);
  box-shadow:0 30px 70px -28px rgba(0,0,0,.75), inset 1px 1px 0 rgba(255,255,255,.16), inset 0 0 40px rgba(255,255,255,.025);
}
body[data-page] .chest-glass--mini{ border-color:rgba(255,255,255,.09); }

/* ---------- 4. Menu latéral : l'entrée active est éclairée, pas encadrée ---------- */
.chest-shell .chest-sidebar{ background:rgba(7,7,9,.9); }
.chest-shell .chest-sidebar::after{
  background:linear-gradient(180deg, transparent, rgba(255,255,255,.1) 12%, rgba(255,255,255,.1) 88%, transparent) !important;
}
.chest-shell .chest-sidebar::before{
  content:''; position:absolute; left:0; right:0; top:0; height:220px; pointer-events:none;
  background:radial-gradient(ellipse 90% 70% at 20% 0%, rgba(252,18,131,.09), transparent 75%);
}
.chest-shell .chest-nav__item{
  position:relative; isolation:isolate;
  transition:color .18s var(--v2-ease), background-color .18s var(--v2-ease), transform .16s var(--v2-ease);
}
.chest-shell .chest-nav__item:active{ transform:scale(.98); }
.chest-shell .chest-nav__item.is-active{
  background:linear-gradient(90deg, rgba(252,18,131,.16), rgba(249,164,94,.05) 60%, transparent) !important;
  box-shadow:none !important;
}
.chest-shell .chest-nav__item::before{
  content:''; position:absolute; left:-12px; top:50%; width:3px; height:18px; border-radius:0 3px 3px 0;
  background:var(--chest-grad); box-shadow:0 0 14px rgba(252,18,131,.8);
  transform:translateY(-50%) scaleY(0); opacity:0;
  transition:transform .26s var(--v2-ease), opacity .2s var(--v2-ease);
}
.chest-shell .chest-nav__item.is-active::before{ transform:translateY(-50%) scaleY(1); opacity:1; }
.chest-shell.is-collapsed .chest-nav__item::before{ left:-11px; }
.chest-shell .chest-nav__item.is-active .chest-nav__ic{ filter:drop-shadow(0 0 6px rgba(252,18,131,.55)); }
.chest-shell .chest-nav__item.is-active .chest-nav__mark{ display:none; }
@media (hover:hover) and (pointer:fine){
  .chest-shell .chest-nav__item:not(.is-active):hover{ background:rgba(255,255,255,.04); }
  .chest-shell .chest-nav__item:not(.is-active):hover .chest-nav__ic{ background:rgba(255,255,255,.32); }
}

/* Barre du haut : filet estompé, logo qui respire au survol */
.chest-shell .chest-topbar{ border-bottom:1px solid transparent; border-image:var(--v2-rule) 1; }
.chest-shell .chest-topbar .brand img{ transition:filter .3s var(--v2-ease), transform .3s var(--v2-ease); }
@media (hover:hover) and (pointer:fine){
  .chest-shell .chest-topbar .brand:hover img{ filter:drop-shadow(0 0 14px rgba(252,18,131,.8)); transform:rotate(-6deg); }
}

/* ---------- 5. Retour d'appui : tout ce qui se presse répond ---------- */
:is(body[data-page], .chest-shell) :is(.chest-btn, .chest-btn-2, .btn-primary, .btn-secondary, .btn-ghost, .btn,
  .icon-btn, .chest-topbar__btn, .chest-sidebar__logout, .pill-group button, .chest-seg > *, .tabbar button, .tabs button){
  transition-property:transform, background, background-color, color, box-shadow, border-color, opacity;
  transition-duration:.16s; transition-timing-function:var(--v2-ease);
}
:is(body[data-page], .chest-shell) :is(.chest-btn, .chest-btn-2, .btn-primary, .btn-secondary, .btn-ghost, .btn,
  .icon-btn, .chest-topbar__btn, .chest-sidebar__logout, .pill-group button, .chest-seg > *, .tabbar button, .tabs button):active{
  transform:scale(.97) !important;
}
/* Le soulèvement au survol n'existe qu'avec une vraie souris */
@media not ((hover:hover) and (pointer:fine)){
  body[data-page] .chest-btn:hover, body[data-page] .btn-primary:hover{ transform:none; }
}
/* Bouton principal : un reflet en haut, comme une pièce de verre teintée */
body[data-page] :is(.chest-btn, .btn-primary){
  box-shadow:0 10px 30px rgba(252,18,131,.28), inset 0 1px 0 rgba(255,255,255,.28) !important;
}
@media (hover:hover) and (pointer:fine){
  body[data-page] :is(.chest-btn, .btn-primary):hover{
    box-shadow:0 16px 44px rgba(252,18,131,.42), inset 0 1px 0 rgba(255,255,255,.32) !important;
  }
}
body[data-page] :is(.chest-btn, .btn-primary):disabled{ opacity:.45; box-shadow:none !important; transform:none !important; cursor:not-allowed; }

/* ---------- 6. Bascules : l'option active brille au lieu d'être un bloc blanc ---------- */
body[data-page] :is(.chest-seg, .pill-group, .tabbar, .tabs){
  border-color:rgba(255,255,255,.09) !important;
  background:rgba(255,255,255,.025) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04);
}

/* ---------- 7. Champs ---------- */
body[data-page] :is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]), select, textarea){
  transition:border-color .18s var(--v2-ease), box-shadow .18s var(--v2-ease), background-color .18s var(--v2-ease);
}
body[data-page] :is(input, select, textarea)::placeholder{ color:var(--chest-ink-3); }

/* ---------- 8. Tableaux : la ligne survolée s'éclaire depuis la gauche ---------- */
body[data-page] tbody tr:hover{
  background:linear-gradient(90deg, rgba(252,18,131,.06), rgba(255,255,255,.025) 40%, transparent) !important;
}
body[data-page] thead th{ border-bottom:1px solid transparent !important; border-image:var(--v2-rule) 1 !important; }

/* ---------- 9. Détails du navigateur ---------- */
body[data-page] ::selection{ background:rgba(252,18,131,.38); color:#fff; }
body[data-page]{ scrollbar-color:rgba(255,255,255,.14) transparent; scrollbar-width:thin; }
body[data-page] ::-webkit-scrollbar{ width:10px; height:10px; }
body[data-page] ::-webkit-scrollbar-track{ background:transparent; }
body[data-page] ::-webkit-scrollbar-thumb{ background:rgba(255,255,255,.12); border-radius:10px; border:3px solid transparent; background-clip:padding-box; }
body[data-page] ::-webkit-scrollbar-thumb:hover{ background:rgba(255,255,255,.22); background-clip:padding-box; }
:is(body[data-page], .chest-shell) :is(a, button, [role="button"], summary):focus-visible{
  outline:2px solid rgba(249,164,94,.85); outline-offset:3px;
}

/* ---------- 10. Mouvement (js/v2.js) ----------
   Blocs qui apparaissent (cascade au chargement, puis au défilement), lumière
   qui suit le pointeur, fond qui dérive. Sans JS, tout reste visible. */
html.v2-js body[data-page] .v2-r{
  opacity:0; transform:translateY(18px);
  transition:opacity .7s var(--v2-ease), transform .8s var(--v2-ease);
}
html.v2-js body[data-page] .v2-r.v2-r--fade{ transform:none; }
html.v2-js body[data-page] .v2-r.is-in{ opacity:1; transform:none; }

/* Le fond dérive très lentement : la lumière n'est jamais figée */
body.chest-root[data-page]:not([data-page="berich"])::before{
  animation:v2Drift 38s ease-in-out infinite alternate;
}
@keyframes v2Drift{
  0%  { transform:translate3d(0,0,0) scale(1); }
  50% { transform:translate3d(3%,2%,0) scale(1.06); }
  100%{ transform:translate3d(-2%,4%,0) scale(1.02); }
}

/* ---------- 11. Titres de section numérotés : le numéro prend la couleur ---------- */
body[data-page] .chest-step{ color:var(--chest-ink-3); }

@media (prefers-reduced-motion:reduce){
  body.chest-root[data-page]::before{ animation:none !important; }
  .chest-shell .chest-nav__item::before{ transition:none; }
  :is(body[data-page], .chest-shell) *:active{ transform:none !important; }
}

/* ---------- 12. Cartes des hubs (Backtesting, Journal) ----------
   Une matière plutôt qu'une case : reflet en haut, fond qui s'éteint, la
   courbe déborde jusqu'aux bords, chiffres alignés en colonnes. */
body[data-page] .bt-grid{ gap:18px; }
body[data-page] .bt-card{
  border:1px solid rgba(255,255,255,.075) !important; border-radius:20px !important; overflow:hidden;
  background:
    linear-gradient(180deg, rgba(255,255,255,.045), rgba(255,255,255,.012) 50%, rgba(255,255,255,.004)) !important;
  backdrop-filter:none !important; -webkit-backdrop-filter:none !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.09), 0 34px 60px -38px rgba(0,0,0,.85) !important;
  transition:transform .28s var(--v2-ease), border-color .28s var(--v2-ease), box-shadow .28s var(--v2-ease);
}
body[data-page] .bt-card::after{
  content:''; position:absolute; left:12%; right:12%; top:0; height:1px; pointer-events:none;
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.4), transparent);
}
@media (hover:hover) and (pointer:fine){ body[data-page] .bt-card:hover{ transform:translateY(-3px); } }
body[data-page] .bt-card:active{ transform:scale(.985); }
body[data-page] .bt-card__spark{ margin-top:18px; }
body[data-page] .bt-card__meta{
  display:grid !important; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); gap:10px !important;
  border-top:1px solid transparent !important; border-image:var(--v2-rule) 1 !important;
  padding:14px 20px 18px !important;
}
body[data-page] .bt-card__meta > span{ display:flex; flex-direction:column; gap:3px; font-size:10px; letter-spacing:.08em; text-transform:uppercase; color:var(--chest-ink-3); white-space:nowrap; }
body[data-page] .bt-card__meta b{ font-size:14px; letter-spacing:-.01em; text-transform:none; font-weight:700; }
body[data-page] .bt-card__menu-btn{ border-color:transparent !important; background:rgba(255,255,255,.04) !important; }
body[data-page] .bt-card__add{
  border:1px dashed rgba(255,255,255,.13) !important; border-radius:20px !important;
  background:radial-gradient(ellipse 70% 60% at 50% 40%, rgba(252,18,131,.06), transparent 70%) !important;
  transition:border-color .25s var(--v2-ease), transform .25s var(--v2-ease) !important;
}
body[data-page] .bt-card__add-icon{ transition:transform .3s var(--v2-ease), background .3s, border-color .3s, color .3s; }
@media (hover:hover) and (pointer:fine){
  body[data-page] .bt-card__add:hover .bt-card__add-icon{ transform:rotate(90deg); background:var(--chest-grad); border-color:transparent; color:#fff; box-shadow:0 8px 26px rgba(252,18,131,.4); }
}
body[data-page] .bt-card__add:active{ transform:scale(.985); }

/* ---------- 13. Graphiques sans cadre ----------
   Une courbe n'a pas besoin d'une boîte : elle se pose directement sur la page. */
body[data-page] .chest-glass.chest-glass--chart{
  border-color:transparent !important; background:none !important; box-shadow:none !important;
  backdrop-filter:none !important; -webkit-backdrop-filter:none !important; padding-left:0 !important; padding-right:0 !important;
}
body[data-page] .chest-glass.chest-glass--chart::before,
body[data-page] .chest-glass.chest-glass--chart::after{ display:none !important; }

/* ---------- 14. Guides et assistants : une frise d'étapes, pas une pile de cartes ----------
   Guide VPS (.vg-step) et assistant d'ajout de backtest (.wz-card) : le numéro
   lumineux à gauche, un fil dégradé qui relie les étapes, le contenu à droite. */
body[data-page] :is(.vg-step.card, .card.wz-card){
  position:relative; border:0 !important; border-radius:0 !important; background:none !important; box-shadow:none !important;
  padding:2px 0 42px 54px !important; margin:0 !important;
}
body[data-page] :is(.vg-step.card, .card.wz-card)::before{
  content:''; position:absolute; left:15px; top:38px; bottom:6px; width:1px; pointer-events:none;
  background:linear-gradient(180deg, rgba(252,18,131,.55), rgba(249,164,94,.2) 70%, rgba(249,164,94,.04));
}
body[data-page] :is(.vg-step.card, .card.wz-card):not(:has(~ :is(.vg-step, .wz-card)))::before{ display:none; }
body[data-page] .vg-step__head{ margin-left:-54px; gap:24px; }
body[data-page] .wz-card h2{ margin-left:-54px; gap:24px; }
body[data-page] :is(.vg-step__num, .wz-card h2 .step){
  width:30px; height:30px; flex-shrink:0; background:var(--chest-grad) !important; color:#fff;
  box-shadow:0 0 0 5px rgba(252,18,131,.1), 0 8px 22px rgba(252,18,131,.38);
}
body[data-page] :is(.vg-step__title, .wz-card h2){ font-size:17px; letter-spacing:-.02em; }
/* Les encarts internes (offre, ligne de VPS) perdent leur fond plein */
body[data-page] :is(.vg-plan, .vg-vps-row){
  background:linear-gradient(180deg, rgba(255,255,255,.04), rgba(255,255,255,.012)) !important;
  border-color:rgba(255,255,255,.08) !important; border-radius:14px !important;
}
@media (max-width:640px){
  body[data-page] :is(.vg-step.card, .card.wz-card){ padding-left:44px !important; }
  body[data-page] :is(.vg-step__head, .wz-card h2){ margin-left:-44px; gap:14px; }
}

/* ---------- 15. Briques partagées des héros v2 ----------
   Ligne de chiffres séparés par des filets verticaux estompés, en-tête de section. */
body[data-page] .dv2-facts{ margin:28px 0 0; display:flex; justify-content:center; flex-wrap:wrap; row-gap:16px; }
body[data-page] .dv2-facts > div{ padding:0 28px; border-left:1px solid transparent; border-image:linear-gradient(180deg, transparent, rgba(255,255,255,.13), transparent) 1; }
body[data-page] .dv2-facts > div:first-child{ border-left:0; }
body[data-page] .dv2-facts dt{ font-size:10px; font-weight:600; letter-spacing:.16em; text-transform:uppercase; color:var(--chest-ink-3); }
body[data-page] .dv2-facts dd{ margin:7px 0 0; font-size:18px; font-weight:700; letter-spacing:-.015em; font-variant-numeric:tabular-nums; }
body[data-page] .dv2-facts dd.pos{ color:var(--chest-green); text-shadow:0 0 16px rgba(51,230,166,.3); }
body[data-page] .dv2-facts dd.neg{ color:var(--chest-red); text-shadow:0 0 16px rgba(255,77,94,.28); }
body[data-page] .dv2-head{ display:flex; align-items:baseline; justify-content:space-between; gap:8px 16px; flex-wrap:wrap; margin-bottom:20px; }
body[data-page] .dv2-head__hint{ font-size:11.5px; color:var(--chest-ink-3); }
@media (max-width:640px){
  body[data-page] .dv2-facts{ display:grid; grid-template-columns:1fr 1fr; }
  body[data-page] .dv2-facts > div{ padding:0 10px; }
  body[data-page] .dv2-facts > div:nth-child(odd){ border-left:0; }
}

/* ---------- 16. Menu : une lumière qui glisse (js/v2-shell.js) ---------- */
.chest-shell .chest-nav{ position:relative; }
.chest-shell .chest-nav .v2-nav-ind{
  position:absolute; left:12px; right:12px; top:0; z-index:0; pointer-events:none; border-radius:12px; opacity:0;
  background:linear-gradient(90deg, rgba(252,18,131,.18), rgba(249,164,94,.06) 60%, transparent);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.04);
  transition:transform .48s cubic-bezier(.32,.72,0,1), height .3s var(--v2-ease), opacity .3s;
}
.chest-shell.is-collapsed .chest-nav .v2-nav-ind{ left:11px; right:11px; }
.chest-shell .chest-nav .v2-nav-ind::before{
  content:''; position:absolute; left:-12px; top:50%; width:3px; height:18px; margin-top:-9px; border-radius:0 3px 3px 0;
  background:var(--chest-grad); box-shadow:0 0 14px rgba(252,18,131,.85);
}
.chest-shell.is-collapsed .chest-nav .v2-nav-ind::before{ left:-11px; }
.chest-shell .chest-nav.has-ind .chest-nav__item{ z-index:1; }
.chest-shell .chest-nav.has-ind .chest-nav__item.is-active{ background:transparent !important; }
.chest-shell .chest-nav.has-ind .chest-nav__item::before{ display:none; }
@media (prefers-reduced-motion:reduce){ .chest-shell .chest-nav .v2-nav-ind{ transition:none; } }

/* ---------- 17. Pied de page : logo, une phrase, rien d'autre ---------- */
body[data-page] .site-footer.v2-foot{ position:relative; border-top:0 !important; margin-top:clamp(40px,8vh,80px); }
body[data-page] .site-footer.v2-foot::before{ content:''; position:absolute; left:8%; right:8%; top:0; height:1px; background:var(--v2-rule); }
body[data-page] .v2-foot__inner{ max-width:720px; margin:0 auto; padding:40px 24px 46px; text-align:center; display:flex; flex-direction:column; align-items:center; gap:10px; }
body[data-page] .v2-foot__brand{ display:inline-flex; align-items:center; gap:10px; text-decoration:none; color:var(--chest-ink); font-size:16px; font-weight:700; letter-spacing:-.02em; }
body[data-page] .v2-foot__brand img{ width:26px; height:26px; filter:drop-shadow(0 0 10px rgba(252,18,131,.55)); }
body[data-page] .v2-foot__txt{ margin:0; font-size:12.5px; color:var(--chest-ink-2); }
body[data-page] .v2-foot__warn{ margin:6px 0 0; max-width:560px; font-size:11.5px; line-height:1.6; color:var(--chest-ink-3); }
body[data-page] .v2-foot__copy{ margin:4px 0 0; font-size:11px; color:var(--chest-ink-3); letter-spacing:.04em; }

/* ---------- 17. Pied de page : logo, une phrase, rien d'autre ---------- */
body[data-page] .site-footer.v2-foot{ position:relative; z-index:1; border-top:0 !important; margin-top:clamp(40px,8vh,80px); }
body[data-page] .site-footer.v2-foot::before{ content:''; position:absolute; left:8%; right:8%; top:0; height:1px; background:var(--v2-rule); }
body[data-page] .v2-foot__inner{ max-width:720px; margin:0 auto; padding:40px 24px 46px; text-align:center; display:flex; flex-direction:column; align-items:center; gap:10px; }
body[data-page] .v2-foot__brand{ display:inline-flex; align-items:center; gap:10px; text-decoration:none; color:var(--chest-ink); font-size:16px; font-weight:700; letter-spacing:-.02em; }
body[data-page] .v2-foot__brand img{ width:26px; height:26px; filter:drop-shadow(0 0 10px rgba(252,18,131,.55)); }
body[data-page] .v2-foot__txt{ margin:0; font-size:12.5px; color:var(--chest-ink-2); }
body[data-page] .v2-foot__warn{ margin:6px 0 0; max-width:560px; font-size:11.5px; line-height:1.6; color:var(--chest-ink-3); }
body[data-page] .v2-foot__copy{ margin:4px 0 0; font-size:11px; color:var(--chest-ink-3); letter-spacing:.04em; }

/* ---------- 18. Une seule barre de défilement ----------
   `html, body{overflow-x:hidden}` (chest-da.css) fait du body une zone de défilement potentielle ; dès que la
   lueur de fond (::before, agrandie par sa dérive) dépassait le bas d'une page courte — Journal, Backtesting,
   School sur un écran haut —, le body affichait SA barre en plus de celle de la page. `clip` coupe ce qui dépasse
   sans jamais créer de zone de défilement : seule la page défile (les fenêtres fixes et le sticky ne sont pas touchés). */
body.chest-root[data-page]{ overflow-x:clip; overflow-y:clip; }
