/* ============================================================
   JARVIS : interface orbitale « JARVIS Spatial Intelligence — Orbital Interface V1 » (Claude Code, 18/10/2026, JAR-034)
   Référence : la maquette validée par Alexandre le 18/10/2026 (« la maquette fournie est la référence à reproduire ») :
   observatoire au-dessus des nuages, noyau bleu électrique, violet et rose sur son socle, modules de verre en orbite,
   panneaux translucides lavande, bordures fines lumineuses, menu caché.
   Chargée après spatial.css et spatial360.css, active sous html.rt.sp.orbital (interrupteur « Interface orbitale » des
   Réglages, clé jarvis.themeOrbital). Garde la disposition, les animations et les effets VR du design Spatial.
   RÈGLE DE spatial.css, TOUJOURS VRAIE : jamais d'opacité, de filtre, de masque ni de transformation sur un parent d'un
   élément de verre (backdrop-filter), jamais de filtre animé. L'accueil (.orb-accueil) n'est jamais animé en bloc : chacune
   de ses pièces s'anime elle-même.
   1. Jetons  2. Barre du haut et menu caché  3. Accueil  4. Noyau et socle  5. Modules en orbite  6. Panneaux
   7. Ouvrir, fermer un module  8. Apparitions de l'accueil  9. Pages (modules métier)  10. Téléphone
   11. Mouvement réduit
   ============================================================ */

/* ---------- 1. Jetons : palette de la maquette ---------- */
html.sp.orbital {
  --orb-bleu: #4a8dff; --orb-cyan: #6fdcff; --orb-lavande: #b9aaff; --orb-rose: #ff7ad9; --orb-nuit: #0c1140;
  --orb-e: cubic-bezier(.22, 1, .36, 1); --orb-ressort: cubic-bezier(.2, 1.25, .35, 1);
  /* Attention (validations) : ambre ; erreur : rouge doux ; succès : vert d'eau */
  --acc: 255, 181, 71; --acc-vif: #ffb547; --acc-haut: #ffc56b; --acc-bas: #f09a1f; --acc-clair: #ffd08a; --acc-pale: #ffe2b3;
  --sp-t1: #ffffff; --sp-t2: rgba(244, 244, 255, .82); --sp-t3: rgba(232, 232, 255, .72);
  /* Verre lavande translucide, bord lumineux fin, ombre bleutée : lisible sur un ciel clair grâce au voile bleu nuit. */
  --sp-verre: linear-gradient(160deg, rgba(255, 255, 255, .24) 0%, rgba(205, 198, 255, .13) 46%, rgba(150, 160, 255, .1) 100%), linear-gradient(rgba(24, 28, 84, .34), rgba(24, 28, 84, .34));
  --sp-fx: blur(22px) saturate(165%) brightness(.92);
  --sp-arete: inset 0 1px 0 rgba(255, 255, 255, .6), inset 0 0 0 1px rgba(255, 255, 255, .24), inset 0 -22px 34px -28px rgba(170, 196, 255, .5);
  --sp-ombre: 0 30px 70px -30px rgba(8, 10, 48, .7), 0 0 44px -14px rgba(140, 150, 255, .35);
  --sp-fume: rgba(255, 255, 255, .1); --sp-fume-h: rgba(255, 255, 255, .17); --sp-pastille: rgba(255, 255, 255, .16); --sp-filet: rgba(255, 255, 255, .2);
  --sp-vert: #63e6b0; --sp-rouge: #ff9a9a;
  --topnav-h: 8px;
}
html.rt.sp.orbital body, html.rt.sp.orbital body #env { background: #141a52 !important; }
html.rt.sp.orbital #app { --font-ui: var(--sp-ui); }
html.rt.sp.orbital #app .rail__nav .navpill { display: none !important; }
html.rt.sp.orbital #app :is(.btn--primary, .vbtn--primary, .command__send) { background: linear-gradient(135deg, #6aa8ff, #8b7bff) !important; color: #fff !important; box-shadow: 0 6px 20px -6px rgba(110, 140, 255, .8), inset 0 1px 0 rgba(255, 255, 255, .45) !important; }
html.rt.sp.orbital #app .command__send:hover { background: linear-gradient(135deg, #7db4ff, #9a8cff) !important; }

/* ---------- 2. Barre du haut et menu caché ---------- */
html.rt.sp.orbital #app .sysbar { text-shadow: 0 1px 10px rgba(10, 12, 50, .6); }
html.rt.sp.orbital #app .sysbar__brand .mono, html.rt.sp.orbital #app #sysOnline { font-family: var(--sp-ui) !important; letter-spacing: .18em; }
html.rt.sp.orbital #app #sysClock { font: 500 20px/1 var(--sp-ui) !important; letter-spacing: .02em; color: #fff; }
html.rt.sp.orbital #app .sysbar .iconbtn { width: 44px; height: 44px; border-radius: 50%; background: var(--sp-verre) !important; -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete) !important; border: 0 !important; color: #fff !important; font-size: 19px; }
html.rt.sp.orbital #app .sysbar .iconbtn:hover { box-shadow: var(--sp-arete), 0 0 18px rgba(130, 170, 255, .55) !important; }
html.rt.sp.orbital #app .orb-menu-btn[aria-expanded="true"] { background: rgba(255, 255, 255, .34) !important; }
.orb-menu-btn, .orb-voile, .orb-fermer, .orb-barre, .orb-radial, .orb-fantome { display: none; }
html.rt.sp.orbital #app .orb-menu-btn { display: grid; place-items: center; }

/* Le menu existant (#rail) devient un panneau caché : fermé, il n'occupe rien et n'est pas atteignable au clavier. */
html.rt.sp.orbital #app .rail {
  position: fixed !important; inset: 0 !important; z-index: 70 !important; width: auto !important; height: auto !important; max-width: none !important;
  display: grid !important; place-items: center; align-content: center; gap: 18px !important; padding: 24px !important;
  background: none !important; visibility: hidden; pointer-events: none; transition: visibility 0s linear .32s;
}
html.rt.sp.orbital.orb-menu #app .rail { visibility: visible; pointer-events: auto; transition: none; }
html.rt.sp.orbital #app .rail__top { display: none !important; }
html.rt.sp.orbital #app .rail__nav {
  position: relative; display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: start !important; gap: 22px !important;
  width: min(940px, calc(100vw - 48px)); max-width: none !important; height: auto !important; max-height: calc(100vh - 170px); overflow: auto !important;
  padding: 26px !important; border-radius: 34px !important; background: var(--sp-verre) !important; -webkit-backdrop-filter: var(--sp-fx) !important; backdrop-filter: var(--sp-fx) !important; box-shadow: var(--sp-arete), var(--sp-ombre) !important;
  opacity: 0; scale: .94; translate: 0 18px; transition: opacity .2s ease, scale .32s var(--orb-e), translate .32s var(--orb-e);
}
html.rt.sp.orbital.orb-menu #app .rail__nav { opacity: 1; scale: 1; translate: 0 0; }
html.rt.sp.orbital #app .railgroup { display: grid !important; align-content: start; gap: 8px; margin: 0 !important; padding: 0 !important; border: 0 !important; }
html.rt.sp.orbital #app .railgroup__label { display: block !important; margin: 0 0 4px 6px !important; font: 500 12px/1.3 var(--sp-ui) !important; letter-spacing: .14em !important; text-transform: uppercase; color: var(--sp-t3) !important; }
html.rt.sp.orbital #app #rail .rail__nav .rail__item {
  display: flex !important; align-items: center; justify-content: flex-start !important; gap: 12px !important; width: 100%; height: 52px !important; min-height: 52px !important; padding: 0 16px !important;
  border-radius: 18px !important; background: var(--sp-fume) !important; color: #fff !important; font: 500 15.5px/1.2 var(--sp-ui) !important; text-align: left;
  opacity: 0; translate: 0 10px; transition: background .16s, box-shadow .16s, opacity .22s ease, translate .32s var(--orb-e);
}
html.rt.sp.orbital #app .rail__nav .rail__item > i { display: grid !important; place-items: center; width: 32px; height: 32px; border-radius: 10px; font-size: 18px; color: var(--orb-cyan); background: rgba(255, 255, 255, .1); }
html.rt.sp.orbital #app #rail .rail__nav .rail__item:hover, html.rt.sp.orbital #app #rail .rail__nav .rail__item:focus-visible { background: var(--sp-fume-h) !important; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .35), 0 0 22px -6px rgba(120, 170, 255, .7) !important; }
html.rt.sp.orbital #app #rail .rail__nav .rail__item.is-active { background: rgba(255, 255, 255, .24) !important; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .5) !important; }
html.rt.sp.orbital #app .rail__nav .rail__count { margin-left: auto; }
/* Même force que la règle fermée (#rail), sinon les entrées restent invisibles une fois le menu ouvert (18/10/2026). */
html.rt.sp.orbital.orb-menu #app #rail .rail__nav .rail__item { opacity: 1; translate: 0 0; }
/* Apparition progressive des sections, l'une après l'autre */
html.rt.sp.orbital.orb-menu #app #rail .railgroup:nth-child(1) .rail__item { transition-delay: 0s, 0s, calc(40ms + var(--i, 0) * 28ms), calc(40ms + var(--i, 0) * 28ms); }
html.rt.sp.orbital.orb-menu #app #rail .railgroup:nth-child(2) .rail__item { transition-delay: 0s, 0s, calc(120ms + var(--i, 0) * 28ms), calc(120ms + var(--i, 0) * 28ms); }
html.rt.sp.orbital.orb-menu #app #rail .railgroup:nth-child(3) .rail__item { transition-delay: 0s, 0s, calc(170ms + var(--i, 0) * 28ms), calc(170ms + var(--i, 0) * 28ms); }
html.rt.sp.orbital #app .railgroup .rail__item:nth-of-type(2) { --i: 1; } html.rt.sp.orbital #app .railgroup .rail__item:nth-of-type(3) { --i: 2; }
html.rt.sp.orbital #app .railgroup .rail__item:nth-of-type(4) { --i: 3; } html.rt.sp.orbital #app .railgroup .rail__item:nth-of-type(5) { --i: 4; }
html.rt.sp.orbital #app .railgroup .rail__item:nth-of-type(6) { --i: 5; }
html.rt.sp.orbital #app .rail__bottom {
  position: static !important; transform: none !important; display: flex !important; align-items: center; gap: 12px; padding: 8px 10px 8px 8px !important;
  border-radius: 999px; background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete);
  opacity: 0; translate: 0 12px; transition: opacity .2s ease .1s, translate .32s var(--orb-e) .1s;
}
html.rt.sp.orbital.orb-menu #app .rail__bottom { opacity: 1; translate: 0 0; }
html.rt.sp.orbital #app .rail__bottom .rail__profile { display: flex !important; align-items: center; gap: 10px; }
html.rt.sp.orbital #app .rail__bottom .rail__profile .rail__label { position: static !important; width: auto !important; height: auto !important; clip-path: none !important; display: grid !important; color: #fff; font: 500 14px/1.25 var(--sp-ui); }
html.rt.sp.orbital #app .rail__bottom .rail__profile small { color: var(--sp-t3); font-size: 12px; }
html.rt.sp.orbital #app .rail__avatar { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%; background: linear-gradient(135deg, var(--orb-bleu), var(--orb-rose)); color: #fff; font-weight: 600; }
html.rt.sp.orbital #app #logout { display: inline-flex !important; align-items: center; gap: 8px; height: 40px; padding: 0 14px !important; border-radius: 999px !important; background: var(--sp-fume) !important; color: #fff !important; }
html.rt.sp.orbital #app #logout .rail__label { position: static !important; width: auto !important; height: auto !important; clip-path: none !important; }
html.rt.sp.orbital #app .orb-voile { display: block; position: fixed; inset: 0; z-index: 65; background: rgba(10, 12, 48, .42); -webkit-backdrop-filter: blur(12px) saturate(120%); backdrop-filter: blur(12px) saturate(120%); opacity: 0; visibility: hidden; transition: opacity .28s ease, visibility 0s linear .28s; }
html.rt.sp.orbital.orb-menu #app .orb-voile { opacity: 1; visibility: visible; transition: opacity .28s ease; }
@media (max-width: 1099px) { html.rt.sp.orbital #app .rail__nav { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Ordinateur étroit : les colonnes se resserrent pour laisser l'orbite tenir autour du noyau */
@media (min-width: 760px) and (max-width: 1239px) {
  html.rt.sp.orbital #app :is(.orb-salut, .orb-gauche) { left: 24px; }
  html.rt.sp.orbital #app .orb-gauche { width: min(250px, 22vw); }
  html.rt.sp.orbital #app .orb-projets { width: min(260px, 22vw); right: 16px; }
  html.rt.sp.orbital #app .orb-proj__ico { width: 38px; height: 38px; border-radius: 12px; font-size: 13px; }
  html.rt.sp.orbital #app .orb-proj { grid-template-columns: 38px minmax(0, 1fr); }
}

/* ---------- 3. Accueil : salutation, carte des missions, scène, panneau Projets ---------- */
html.rt.sp.orbital #app #stage:is([data-page="jarvis"], [data-page="home"]) #view { max-width: none !important; width: 100% !important; margin: 0 !important; padding: 0 !important; perspective: none !important; }
html.rt.sp.orbital #app .orb-accueil {
  --noyau: clamp(180px, min(18vw, 32vh), 340px);
  position: relative; width: 100%; height: calc(100vh - var(--sysbar-h) - var(--topnav-h) - 22px); height: calc(100dvh - var(--sysbar-h) - var(--topnav-h) - 22px);
  min-height: 560px; color: #fff;
}
html.rt.sp.orbital #app .orb-salut { position: absolute; left: clamp(20px, 5.5vw, 110px); top: 0; margin: 0; max-width: 34vw; }
html.rt.sp.orbital #app .orb-salut__t { margin: 0; font: 600 clamp(24px, 2.1vw, 34px)/1.15 var(--sp-ui); letter-spacing: -.01em; color: #fff; text-shadow: 0 2px 18px rgba(10, 12, 60, .55); }
html.rt.sp.orbital #app .orb-salut__main { display: inline-block; transform-origin: 70% 80%; }
html.rt.sp.orbital #app :is(.orb-salut__d, .orb-salut__q) { margin: 6px 0 0; font: 400 15px/1.4 var(--sp-ui); color: var(--sp-t2); text-shadow: 0 1px 12px rgba(10, 12, 60, .6); }
html.rt.sp.orbital #app .orb-salut__q { margin-top: 2px; }
html.rt.sp.orbital #app .orb-gauche { position: absolute; left: clamp(20px, 5.5vw, 110px); top: calc(clamp(24px, 2.1vw, 34px) * 1.15 + 74px); width: min(300px, 22vw); display: grid; gap: 12px; }
html.rt.sp.orbital #app .orb-carte {
  display: grid; gap: 4px; width: 100%; padding: 14px 18px 14px 20px; text-align: left; cursor: pointer; color: #fff;
  border: 0; border-radius: 22px; background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre);
  transition: box-shadow .2s, scale .2s var(--orb-e);
}
html.rt.sp.orbital #app .orb-carte:hover { scale: 1.02; box-shadow: var(--sp-arete), var(--sp-ombre), 0 0 30px -6px rgba(120, 170, 255, .6); }
html.rt.sp.orbital #app .orb-carte__lab { font: 500 15px/1.3 var(--sp-ui); color: var(--sp-t2); }
html.rt.sp.orbital #app .orb-carte__ligne { display: flex; align-items: center; gap: 14px; }
html.rt.sp.orbital #app .orb-carte__n { font: 600 40px/1 var(--sp-ui); letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
html.rt.sp.orbital #app .orb-carte__s { font: 400 14px/1.3 var(--sp-ui); color: var(--sp-t2); }
html.rt.sp.orbital #app .orb-carte__s.is-gate { color: var(--acc-clair); }
html.rt.sp.orbital #app .orb-carte__fl { margin-left: auto; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; background: rgba(255, 255, 255, .16); font-size: 16px; }
html.rt.sp.orbital #app .orb-holos { display: grid; gap: 8px; }
html.rt.sp.orbital #app .orb-holo {
  display: flex; align-items: center; gap: 10px; width: fit-content; max-width: 100%; padding: 8px 14px 8px 12px; cursor: pointer; text-align: left;
  border: 0; border-radius: 999px; color: var(--sp-t1); font: 400 13.5px/1.25 var(--sp-ui);
  background: linear-gradient(90deg, rgba(120, 170, 255, .22), rgba(255, 255, 255, .06)); box-shadow: inset 0 0 0 1px rgba(160, 200, 255, .32), 0 0 18px -8px rgba(110, 180, 255, .8);
}
html.rt.sp.orbital #app .orb-holo > i { width: 8px; height: 8px; border-radius: 50%; background: var(--orb-cyan); box-shadow: 0 0 10px var(--orb-cyan); flex: none; }
html.rt.sp.orbital #app .orb-holo b { font-weight: 600; font-variant-numeric: tabular-nums; }
html.rt.sp.orbital #app .orb-holo--gate { background: linear-gradient(90deg, rgba(255, 181, 71, .26), rgba(255, 255, 255, .06)); box-shadow: inset 0 0 0 1px rgba(255, 196, 110, .45), 0 0 18px -8px rgba(255, 181, 71, .9); }
html.rt.sp.orbital #app .orb-holo--gate > i { border-radius: 2px; transform: rotate(45deg); background: var(--acc-vif); box-shadow: 0 0 10px var(--acc-vif); }
html.rt.sp.orbital #app .orb-holo:hover { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .5), 0 0 22px -6px rgba(140, 190, 255, .9); }
/* Résumé de connexion (mails, missions, à faire) : mêmes chiffres que la voix de JARVIS (JAR-054), en verre. */
html.rt.sp.orbital #app .orb-gauche .vh-brief { position: static !important; transform: none !important; width: 100% !important; margin: 0 !important; padding: 6px !important; display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; border-radius: 20px; }
html.rt.sp.orbital #app .orb-gauche .vh-brief__it { display: grid !important; justify-items: start; gap: 2px; min-width: 0; padding: 8px 10px !important; border-radius: 14px; background: none !important; box-shadow: none !important; text-align: left; }
html.rt.sp.orbital #app .orb-gauche .vh-brief__it .mx-num { font: 600 22px/1 var(--sp-ui) !important; color: #fff !important; }
html.rt.sp.orbital #app .orb-gauche :is(.vh-brief__lab, .vh-brief__sous) { font: 400 11.5px/1.25 var(--sp-ui) !important; letter-spacing: 0 !important; text-transform: none !important; color: var(--sp-t2) !important; white-space: normal; }
html.rt.sp.orbital #app .orb-gauche .vh-brief__it.is-dit .mx-num { color: var(--orb-cyan) !important; text-shadow: 0 0 12px rgba(111, 220, 255, .8); }

html.rt.sp.orbital #app .orb-centre { position: absolute; inset: 0; pointer-events: none; }
html.rt.sp.orbital #app .orb-centre > * { pointer-events: auto; }
html.rt.sp.orbital #app .orb-scene { position: absolute; left: 50%; top: 41%; width: min(64vw, calc(var(--noyau) * 3.1)); height: calc(var(--noyau) * 1.9); transform: translate(-50%, -50%); pointer-events: none; }
html.rt.sp.orbital #app .orb-scene > * { pointer-events: auto; }
html.rt.sp.orbital #app .orb-etat { position: absolute; left: 50%; top: calc(41% + var(--noyau) * 0.98); transform: translateX(-50%); display: grid; justify-items: center; gap: 2px; width: min(560px, 46vw); text-align: center; pointer-events: none; }
html.rt.sp.orbital #app .orb-etat b { font: 600 15px/1.3 var(--sp-ui); letter-spacing: .02em; color: #fff; text-shadow: 0 1px 14px rgba(10, 12, 60, .8); }
html.rt.sp.orbital #app .orb-etat span { font: 400 13.5px/1.35 var(--sp-ui); color: var(--sp-t2); text-shadow: 0 1px 12px rgba(10, 12, 60, .9); }
html.rt.sp.orbital #app .orb-accueil--gate .orb-etat b { color: var(--acc-clair); }
html.rt.sp.orbital #app .orb-recentrer {
  position: absolute; right: clamp(20px, 2.4vw, 40px); bottom: 104px; display: inline-flex; align-items: center; gap: 8px; height: 44px; padding: 0 16px; cursor: pointer;
  border: 0; border-radius: 999px; color: #fff; font: 500 14px/1 var(--sp-ui); background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre);
}
html.rt.sp.orbital #app .orb-recentrer[hidden] { display: none; }
html.rt.sp.orbital.orb-glisse, html.rt.sp.orbital.orb-glisse * { cursor: grabbing !important; user-select: none; }
html.rt.sp.orbital #app #stage:is([data-page="jarvis"], [data-page="home"]) .orb-accueil { cursor: grab; }
html.rt.sp.orbital #app .orb-accueil :is(button, a) { cursor: pointer; }

/* ---------- 4. Noyau et socle ---------- */
html.rt.sp.orbital #app .orb-noyau {
  position: absolute; left: 50%; top: 50%; z-index: 4; width: var(--noyau); height: var(--noyau); margin: calc(var(--noyau) / -2) 0 0 calc(var(--noyau) / -2); padding: 0;
  border: 0; border-radius: 50%; background: none; color: #fff; cursor: pointer; display: grid; place-items: center; outline-offset: 10px;
  transition: scale .35s var(--orb-e);
}
html.rt.sp.orbital #app .orb-noyau:hover { scale: 1.035; }
html.rt.sp.orbital #app .orb-noyau:focus-visible { outline: 2px solid #fff; }
.orb-noyau__toile { position: absolute; inset: -21%; width: 142%; height: 142%; pointer-events: none; }
.orb-noyau__sphere { display: none; }
.orb-noyau.is-secours .orb-noyau__toile { display: none; }
.orb-noyau.is-secours .orb-noyau__sphere {
  display: block; position: absolute; inset: 0; border-radius: 50%;
  background: radial-gradient(circle at 50% 46%, #ffffff 0, #cfe0ff 9%, rgba(120, 150, 255, .9) 26%, rgba(140, 92, 255, .78) 50%, rgba(255, 111, 216, .55) 72%, rgba(80, 60, 200, .18) 100%);
  box-shadow: 0 0 60px rgba(110, 140, 255, .65), 0 0 140px rgba(190, 110, 255, .4), inset 0 0 40px rgba(255, 255, 255, .45);
}
.orb-noyau[data-etat="gate"].is-secours .orb-noyau__sphere { background: radial-gradient(circle at 50% 46%, #fff, #ffe2b0 12%, rgba(255, 181, 71, .9) 34%, rgba(255, 138, 61, .65) 64%, rgba(160, 80, 20, .2)); box-shadow: 0 0 70px rgba(255, 170, 70, .6); }
.orb-noyau[data-etat="anomalie"].is-secours .orb-noyau__sphere { background: radial-gradient(circle at 50% 46%, #fff, #ffc0c0 12%, rgba(255, 90, 90, .9) 34%, rgba(214, 58, 106, .65) 64%, rgba(120, 20, 40, .2)); box-shadow: 0 0 70px rgba(255, 90, 90, .6); }
html.rt.sp.orbital #app .orb-noyau__nom { position: relative; z-index: 2; font: 600 calc(var(--noyau) * .092)/1 var(--sp-ui); letter-spacing: .32em; margin-right: -.32em; color: #fff; text-shadow: 0 0 3px rgba(20, 24, 90, .9), 0 0 18px rgba(170, 200, 255, .95); align-self: end; margin-bottom: 2px; }
html.rt.sp.orbital #app .orb-noyau__sous { position: relative; z-index: 2; font: 500 calc(var(--noyau) * .036)/1 var(--sp-ui); letter-spacing: .26em; margin-right: -.26em; text-transform: uppercase; color: rgba(235, 240, 255, .92); text-shadow: 0 0 12px rgba(150, 180, 255, .9); align-self: start; margin-top: 10px; }
html.rt.sp.orbital #app .orb-noyau { grid-template-rows: 1fr 1fr; }
/* Anneaux holographiques : ellipses inclinées qui tournent lentement */
.orb-anneau { position: absolute; left: 50%; top: 50%; border-radius: 50%; pointer-events: none; }
html.rt.sp.orbital #app .orb-anneau--1 { width: 168%; height: 168%; margin: -84% 0 0 -84%; border: 2px solid rgba(190, 220, 255, .8); box-shadow: 0 0 18px rgba(120, 180, 255, .7), inset 0 0 18px rgba(120, 180, 255, .45); transform: perspective(900px) rotateX(76deg) rotateZ(0deg); animation: orb-anneau 38s linear infinite; }
html.rt.sp.orbital #app .orb-anneau--2 { width: 134%; height: 134%; margin: -67% 0 0 -67%; border: 1.5px dashed rgba(230, 200, 255, .75); box-shadow: 0 0 12px rgba(200, 160, 255, .5); transform: perspective(900px) rotateX(70deg) rotateY(-14deg) rotateZ(0deg); animation: orb-anneau-2 54s linear infinite reverse; }
html.rt.sp.orbital #app .orb-anneau--3 { width: 196%; height: 196%; margin: -98% 0 0 -98%; border: 1.5px solid rgba(255, 150, 225, .5); box-shadow: 0 0 22px rgba(255, 120, 220, .4); transform: perspective(900px) rotateX(80deg) rotateY(8deg) rotateZ(0deg); animation: orb-anneau-3 70s linear infinite; }
@keyframes orb-anneau { to { transform: perspective(900px) rotateX(76deg) rotateZ(360deg); } }
@keyframes orb-anneau-2 { to { transform: perspective(900px) rotateX(70deg) rotateY(-14deg) rotateZ(360deg); } }
@keyframes orb-anneau-3 { to { transform: perspective(900px) rotateX(80deg) rotateY(8deg) rotateZ(360deg); } }
html.rt.sp.orbital #app .orb-noyau[data-etat="gate"] .orb-anneau { border-color: rgba(255, 196, 110, .6); box-shadow: 0 0 16px rgba(255, 170, 70, .45); }
html.rt.sp.orbital #app .orb-noyau[data-etat="anomalie"] .orb-anneau { border-color: rgba(255, 130, 130, .6); box-shadow: 0 0 16px rgba(255, 90, 90, .45); }
html.rt.sp.orbital #app .orb-noyau:is([data-etat="analyse"], [data-etat="exec"]) .orb-anneau { animation-duration: 12s; }
/* Socle : plateau circulaire en perspective, liserés lumineux et faisceau vers le noyau */
html.rt.sp.orbital #app .orb-socle { position: absolute; left: 50%; top: calc(50% + var(--noyau) * .5); width: calc(var(--noyau) * 2.3); height: calc(var(--noyau) * .62); transform: translate(-50%, -38%); pointer-events: none; z-index: 1; }
.orb-socle > i { position: absolute; left: 50%; border-radius: 50%; translate: -50% 0; }
html.rt.sp.orbital #app .orb-socle__a { top: 30%; width: 100%; height: 70%; background: radial-gradient(closest-side, rgba(150, 175, 255, .5), rgba(90, 100, 220, .22) 62%, rgba(40, 40, 140, 0) 100%); box-shadow: inset 0 0 0 1.5px rgba(200, 220, 255, .55), 0 0 40px rgba(110, 140, 255, .35); }
html.rt.sp.orbital #app .orb-socle__b { top: 24%; width: 72%; height: 50%; background: radial-gradient(closest-side, rgba(220, 230, 255, .55), rgba(140, 150, 255, .25) 70%, transparent); box-shadow: inset 0 0 0 1px rgba(230, 240, 255, .7), 0 0 26px rgba(160, 180, 255, .55); }
html.rt.sp.orbital #app .orb-socle__c { top: 20%; width: 42%; height: 30%; background: radial-gradient(closest-side, #fff, rgba(190, 210, 255, .7) 40%, rgba(130, 140, 255, 0) 100%); filter: blur(2px); }
html.rt.sp.orbital #app .orb-socle__faisceau { top: -120%; width: 26%; height: 150%; border-radius: 40% 40% 50% 50%; background: linear-gradient(180deg, rgba(160, 190, 255, 0), rgba(160, 190, 255, .16) 60%, rgba(220, 230, 255, .4)); filter: blur(10px); }
html.rt.sp.orbital #app .orb-accueil--gate .orb-socle__a { background: radial-gradient(closest-side, rgba(255, 196, 110, .45), rgba(200, 120, 60, .2) 62%, transparent); }

/* ---------- 5. Modules en orbite (position posée par orbital.js : transform) ---------- */
html.rt.sp.orbital #app .orb-module {
  --survol: 1; --f: 0px;
  position: absolute; left: 50%; top: 50%; width: calc(var(--noyau, 300px) * .4); height: calc(var(--noyau, 300px) * .37); min-width: 100px; min-height: 92px; max-width: 132px; max-height: 120px;
  display: grid; place-items: center; align-content: center; gap: 8px; padding: 10px 8px; border: 0; border-radius: 24px; color: #fff; cursor: pointer;
  background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre);
  transform: translate(-50%, -50%); translate: 0 var(--f); scale: var(--survol);
  opacity: calc(.55 + .45 * (var(--prof, 1) + 1) / 2);
  transition: scale .3s var(--orb-e), box-shadow .25s, opacity .3s;
  animation: orb-flotte 6.5s ease-in-out infinite alternate; animation-delay: calc(var(--a, 0) * -55ms);
}
@keyframes orb-flotte { from { --f: -5px; translate: 0 -5px; } to { --f: 5px; translate: 0 5px; } }
html.rt.sp.orbital #app .orb-module:hover, html.rt.sp.orbital #app .orb-module:focus-visible { --survol: 1.1; opacity: 1; animation-play-state: paused; box-shadow: var(--sp-arete), var(--sp-ombre), 0 0 34px -4px rgba(130, 180, 255, .85), inset 0 0 0 1.5px rgba(255, 255, 255, .6); outline: none; }
html.rt.sp.orbital #app .orb-module.is-derriere { --survol: .92; }
html.rt.sp.orbital #app .orb-module__ico { display: grid; place-items: center; font-size: calc(var(--noyau, 300px) * .1); line-height: 1; color: #fff; filter: drop-shadow(0 0 8px rgba(120, 190, 255, .95)); }
html.rt.sp.orbital #app .orb-module__ico i { background: linear-gradient(160deg, #ffffff, #9fd6ff 55%, #8f8bff); -webkit-background-clip: text; background-clip: text; color: transparent; }
html.rt.sp.orbital #app .orb-module__nom { font: 500 15px/1.15 var(--sp-ui); text-shadow: 0 1px 10px rgba(10, 12, 60, .7); white-space: nowrap; }
html.rt.sp.orbital.orb-glisse #app .orb-module { transition: none; }

/* ---------- 6. Panneau Projets (accueil) et lignes de projet ---------- */
html.rt.sp.orbital #app .orb-projets {
  position: absolute; right: clamp(16px, 2.4vw, 40px); top: 12px; width: min(340px, 23vw); max-height: calc(100% - 150px); overflow: auto; overscroll-behavior: contain; scrollbar-width: thin;
  padding: 18px 14px 14px; border-radius: 28px; background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre);
}
html.rt.sp.orbital #app .orb-projets__tete { display: flex; align-items: center; justify-content: space-between; padding: 0 6px 10px; }
html.rt.sp.orbital #app .orb-projets__tete h2 { margin: 0; font: 600 19px/1.2 var(--sp-ui); color: #fff; }
html.rt.sp.orbital #app .orb-lien { display: inline-flex; align-items: center; gap: 4px; border: 0; background: none; padding: 6px; color: var(--sp-t2); font: 400 13px/1 var(--sp-ui); cursor: pointer; }
html.rt.sp.orbital #app .orb-lien:hover { color: #fff; }
html.rt.sp.orbital #app .orb-projets__liste { display: grid; gap: 8px; }
html.rt.sp.orbital #app .orb-proj {
  display: grid; grid-template-columns: 46px minmax(0, 1fr); grid-template-rows: auto auto; column-gap: 12px; row-gap: 6px; align-items: center;
  width: 100%; padding: 10px 12px 10px 10px; border: 0; border-radius: 18px; text-align: left; color: #fff; background: var(--sp-fume); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .08);
  transition: background .16s, box-shadow .16s;
}
html.rt.sp.orbital #app button.orb-proj { cursor: pointer; }
html.rt.sp.orbital #app button.orb-proj:hover, html.rt.sp.orbital #app .orb-proj.is-sel { background: var(--sp-fume-h); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .34), 0 0 20px -8px rgba(120, 170, 255, .8); }
html.rt.sp.orbital #app .orb-proj__ico { grid-row: 1 / span 2; display: grid; place-items: center; width: 46px; height: 46px; border-radius: 14px; font: 600 15px/1 var(--sp-ui); color: #fff;
  background: linear-gradient(140deg, hsl(var(--h) 90% 68%), hsl(calc(var(--h) + 50) 80% 52%)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .5), 0 4px 14px -6px hsl(var(--h) 80% 50%); text-shadow: 0 1px 4px rgba(0, 0, 0, .3); }
html.rt.sp.orbital #app .orb-proj__txt { display: grid; min-width: 0; }
html.rt.sp.orbital #app .orb-proj__nom { font: 500 15.5px/1.25 var(--sp-ui); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html.rt.sp.orbital #app .orb-proj__sous { font: 400 12.5px/1.3 var(--sp-ui); color: var(--sp-t3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html.rt.sp.orbital #app .orb-proj__av { display: flex; align-items: center; gap: 10px; min-width: 0; }
html.rt.sp.orbital #app .orb-barre { position: relative; display: block; flex: 1; height: 5px; border-radius: 5px; background: rgba(255, 255, 255, .16); overflow: hidden; }
html.rt.sp.orbital #app .orb-barre > i { position: absolute; inset: 0 auto 0 0; border-radius: inherit; background: linear-gradient(90deg, var(--orb-bleu), var(--orb-cyan)); box-shadow: 0 0 10px rgba(111, 220, 255, .8); }
html.rt.sp.orbital #app .orb-proj__val { font: 500 12.5px/1 var(--sp-ui); font-variant-numeric: tabular-nums; color: var(--sp-t2); }
html.rt.sp.orbital #app .orb-proj__etat { display: inline-flex; align-items: center; gap: 6px; font: 400 12.5px/1.2 var(--sp-ui); color: var(--sp-t3); }
html.rt.sp.orbital #app .orb-proj__etat::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
html.rt.sp.orbital #app .orb-proj__etat--primary { color: var(--orb-cyan); }
html.rt.sp.orbital #app .orb-proj__etat--warning { color: var(--acc-clair); }
html.rt.sp.orbital #app .orb-proj__etat--danger { color: var(--sp-rouge); }
html.rt.sp.orbital #app .orb-proj__etat--success { color: var(--sp-vert); }
html.rt.sp.orbital #app .orb-vide { margin: 6px; color: var(--sp-t3); font-size: 14px; }

/* ---------- 7. Ouvrir, fermer un module ---------- */
html.rt.sp.orbital #app .orb-fantome {
  display: grid; place-items: center; align-content: center; gap: 12px; position: fixed; z-index: 45; pointer-events: none; color: #fff;
  border-radius: 24px; background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre), 0 0 60px -10px rgba(130, 170, 255, .6);
}
html.rt.sp.orbital #app .orb-fantome.is-vol { border-radius: 36px; }
html.rt.sp.orbital #app .orb-fantome.is-fond { opacity: 0; transition: opacity .3s ease !important; }
html.rt.sp.orbital #app .orb-fantome.is-atterrit { border-radius: 24px; }
html.rt.sp.orbital #app .orb-fantome__ico { font-size: 40px; filter: drop-shadow(0 0 10px rgba(120, 190, 255, .9)); }
html.rt.sp.orbital #app .orb-fantome__nom { font: 600 22px/1.2 var(--sp-ui); }
html.rt.sp.orbital #app .orb-module.is-choisi, html.rt.sp.orbital #app .orb-module.is-attendu { visibility: hidden; }
/* Les autres modules deviennent secondaires, le noyau se retire un peu pendant l'ouverture */
html.rt.sp.orbital.orb-ouvre #app .orb-module:not(.is-choisi) { opacity: .2 !important; --survol: .82; transition: opacity .25s, scale .3s var(--orb-e); }
html.rt.sp.orbital.orb-ouvre #app .orb-noyau { scale: .86; }
/* Pendant l'ouverture, la page arrive sous le fantôme : pas de pivot latéral, elle se pose sur place. */
html.rt.sp.orbital.orb-ouvre #app #stage.sp-out .orb-accueil :is(.orb-salut, .orb-gauche, .orb-projets) { animation: orb-efface .22s ease-in both !important; }
html.rt.sp.orbital #app .orb-fermer {
  display: inline-flex; align-items: center; gap: 8px; position: fixed; z-index: 41; left: clamp(16px, 2vw, 28px); top: calc(var(--sysbar-h) + 10px); height: 42px; padding: 0 16px 0 12px; cursor: pointer;
  border: 0; border-radius: 999px; color: #fff; font: 500 14px/1 var(--sp-ui); background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre);
}
html.rt.sp.orbital #app .orb-fermer[hidden] { display: none; }
html.rt.sp.orbital #app .orb-fermer i { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 50%; background: rgba(255, 255, 255, .18); font-size: 14px; }
html.rt.sp.orbital #app .orb-fermer:hover { box-shadow: var(--sp-arete), var(--sp-ombre), 0 0 24px -4px rgba(130, 180, 255, .8); }

/* ---------- 8. Apparitions de l'accueil (chaque pièce s'anime elle-même) ---------- */
@media (min-width: 760px) {
  html.rt.sp.orbital #app #stage:is(.sp-in, .sp-co-in) .orb-noyau { animation: orb-noyau-in .9s var(--orb-ressort) both; animation-delay: 80ms; }
  html.rt.sp.orbital #app #stage:is(.sp-in, .sp-co-in) .orb-socle { animation: orb-monte .7s var(--orb-e) both; }
  html.rt.sp.orbital #app #stage:is(.sp-in, .sp-co-in) .orb-module { animation: orb-module-in .7s var(--orb-ressort) both, orb-flotte 6.5s ease-in-out .9s infinite alternate; animation-delay: calc(260ms + var(--k, 0) * 55ms), calc(var(--a, 0) * -55ms); }
  html.rt.sp.orbital #app #stage:is(.sp-in, .sp-co-in) :is(.orb-salut, .orb-gauche) { animation: orb-gauche-in .6s var(--orb-e) both; animation-delay: 160ms; }
  html.rt.sp.orbital #app #stage:is(.sp-in, .sp-co-in) .orb-projets { animation: orb-droite-in .6s var(--orb-e) both; animation-delay: 220ms; }
  html.rt.sp.orbital #app #stage:is(.sp-in, .sp-co-in) .orb-etat { animation: orb-efface .4s ease-out reverse both; animation-delay: 520ms; }
  html.rt.sp.orbital #app #stage.sp-out .orb-module { animation: orb-module-out .26s ease-in both !important; }
  html.rt.sp.orbital #app #stage.sp-out .orb-noyau { animation: orb-noyau-out .27s ease-in both !important; }
  html.rt.sp.orbital #app #stage.sp-out :is(.orb-salut, .orb-gauche, .orb-projets, .orb-etat, .orb-socle) { animation: orb-efface .2s ease-in both !important; }
}
html.rt.sp.orbital #app .orb-module:nth-child(2) { --k: 1; } html.rt.sp.orbital #app .orb-module:nth-child(3) { --k: 2; }
html.rt.sp.orbital #app .orb-module:nth-child(4) { --k: 3; } html.rt.sp.orbital #app .orb-module:nth-child(5) { --k: 4; }
html.rt.sp.orbital #app .orb-module:nth-child(6) { --k: 5; }
@keyframes orb-noyau-in { from { opacity: 0; scale: .4; } 60% { opacity: 1; } }
@keyframes orb-noyau-out { to { opacity: 0; scale: .7; } }
@keyframes orb-monte { from { opacity: 0; translate: 0 30px; } }
@keyframes orb-module-in { from { opacity: 0; scale: .25; } 50% { opacity: 1; } }
@keyframes orb-module-out { to { opacity: 0; scale: .3; } }
@keyframes orb-gauche-in { from { opacity: 0; translate: -40px 0; } }
@keyframes orb-droite-in { from { opacity: 0; translate: 40px 0; } }
@keyframes orb-efface { to { opacity: 0; } }

/* ---------- 9. Pages (modules métier) : même disposition en arc, nouvelle matière ---------- */
html.rt.sp.orbital #app :is(.vhead__title, .cv-titre) { text-shadow: 0 1px 16px rgba(10, 12, 60, .55); }
html.rt.sp.orbital #app .vhead__kicker { color: var(--orb-cyan) !important; }
html.rt.sp.orbital #app .vstat dd { color: #fff !important; }
html.rt.sp.orbital #app #view :is(.panel, .row, .pnode, .agentcard, .mem, .tool, .approval, .activity-row, .notice, .empty, .vm-row, .chips--tuile, .mcard, .well-card) { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .1) !important; }
html.rt.sp.orbital #app .badge--primary { color: var(--orb-cyan) !important; }
html.rt.sp.orbital #app :is(.progress__bar, .vm-prog i, .mx-prog i) { background: linear-gradient(90deg, var(--orb-bleu), var(--orb-cyan)) !important; }
html.rt.sp.orbital #app .sp-pager, html.rt.sp.orbital #app .sp-orn { box-shadow: var(--sp-arete), var(--sp-ombre); }
/* Projets : la liste au centre, la fiche du projet dans la fenêtre de droite (même logique que Missions). */
@media (min-width: 1100px) {
  html.rt.sp.orbital #app #stage[data-page="projects"] #view > .vm { display: contents; }
  html.rt.sp.orbital #app #stage[data-page="projects"] #view > .vm > .vm-sheet { grid-column: 2 / 4 !important; min-width: 0; margin: 52px calc(26px - var(--sp-barre, 0px)) 40px 26px !important; padding: 0 !important; background: none !important; box-shadow: none !important; }
  html.rt.sp.orbital #app #stage:not([data-page="jarvis"]):not([data-page="home"]):not([data-page="chat"])[data-page="projects"]:has(.vm-insp)::after { width: calc(1.8 * var(--sp-U)); }
  html.rt.sp.orbital #app #stage:not([data-page="jarvis"]):not([data-page="home"]):not([data-page="chat"])[data-page="projects"] #view:has(.vm-insp) {
    grid-template-columns: var(--sp-U) minmax(0, 1fr); width: calc(2.8 * var(--sp-U) + var(--sp-G)); margin: 0 auto 0 calc((100% - (var(--sp-A) - 2 * var(--sp-P))) / 2) !important;
  }
  html.rt.sp.orbital #app #stage[data-page="projects"] #view:has(.vm-insp) > .vm > .vm-sheet { grid-column: 2 !important; margin-right: calc(20px - var(--sp-barre, 0px)) !important; }
  html.rt.sp.orbital #app #stage:not([data-page="jarvis"]):not([data-page="home"]):not([data-page="chat"])[data-page="projects"] #view > .vm > .vm-insp {
    position: fixed !important; left: calc(50% + (var(--sp-A) - 2 * var(--sp-P)) / 2 - var(--sp-U)) !important; top: calc(var(--topnav-h) + 48px) !important; width: var(--sp-U) !important; margin: 0 !important; z-index: 5;
    border-radius: 34px; background: var(--sp-verre) !important; -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre) !important; border: 0 !important;
    transform: perspective(1500px) rotateY(-20deg) !important; transform-origin: 0 50%; transition: transform .24s var(--sp-e);
  }
  html.rt.sp.orbital #app #stage[data-page="projects"] #view > .vm > .vm-insp:hover { transform: perspective(1500px) rotateY(-11deg) !important; }
  html.rt.sp.orbital #app #stage[data-page="projects"] .vm-insp__core { max-height: calc(100vh - var(--sysbar-h) - var(--topnav-h) - 160px); overflow: auto; overscroll-behavior: contain; padding: 20px; background: none !important; box-shadow: none !important; }
}
html.rt.sp.orbital #app .orb-projets__liste--page { gap: 10px; margin-bottom: 8px; }
html.rt.sp.orbital #app .orb-projets__liste--page .orb-proj { padding: 12px 16px 12px 12px; }
html.rt.sp.orbital #app .orb-fiche__tete { display: flex; align-items: flex-start; gap: 8px; }
html.rt.sp.orbital #app .orb-fiche__tete .orb-proj { flex: 1; background: none; box-shadow: none; padding: 0; }
html.rt.sp.orbital #app .orb-fiche__focus { margin: 12px 0 0; color: var(--sp-t2); font-size: 14.5px; line-height: 1.45; }
html.rt.sp.orbital #app .orb-fiche__sec { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--sp-filet); }
html.rt.sp.orbital #app .orb-fiche__titre { margin: 0 0 10px; font: 500 12px/1.3 var(--sp-ui); letter-spacing: .12em; text-transform: uppercase; color: var(--orb-cyan); }
html.rt.sp.orbital #app .orb-fiche__mission { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 10px; width: 100%; margin-bottom: 10px; padding: 10px 12px; border: 0; border-radius: 14px; background: var(--sp-fume); color: #fff; text-align: left; cursor: pointer; font: 500 14px/1.3 var(--sp-ui); }
html.rt.sp.orbital #app .orb-fiche__mission:hover { background: var(--sp-fume-h); }
html.rt.sp.orbital #app .orb-fiche__liste { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
html.rt.sp.orbital #app .orb-fiche__liste button { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-rows: auto auto; gap: 4px 8px; width: 100%; padding: 9px 12px; border: 0; border-radius: 12px; background: var(--sp-fume); color: #fff; text-align: left; cursor: pointer; font: 400 13.5px/1.3 var(--sp-ui); }
html.rt.sp.orbital #app .orb-fiche__liste button:hover { background: var(--sp-fume-h); }
html.rt.sp.orbital #app .orb-fiche__liste time { grid-column: 1 / -1; color: var(--sp-t3); font-size: 12px; }
html.rt.sp.orbital #app .orb-fiche__agents { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; }
html.rt.sp.orbital #app .orb-fiche__fermer { flex: none; }

/* ---------- 10. Téléphone : accueil épuré, barre du bas, menu orbital ---------- */
@media (max-width: 759px) {
  html.sp.orbital { --topnav-h: 0px; }
  html.rt.sp.orbital #app .mobilebar { display: none !important; }
  html.rt.sp.orbital #app .sysbar { background: transparent !important; }
  html.rt.sp.orbital #app .rail__nav { grid-template-columns: minmax(0, 1fr); width: calc(100vw - 32px); max-height: calc(100dvh - 190px); padding: 18px !important; gap: 16px !important; }
  html.rt.sp.orbital #app .rail { align-content: end; padding: 16px 16px calc(92px + env(safe-area-inset-bottom)) !important; }
  html.rt.sp.orbital #app .orb-menu-btn { display: none; }
  /* Barre du bas : Accueil, Projets, JARVIS (menu orbital), Missions, Plus */
  html.rt.sp.orbital #app .orb-barre {
    display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); align-items: center; position: fixed; z-index: 72; left: 10px; right: 10px; bottom: calc(8px + env(safe-area-inset-bottom));
    height: 66px; padding: 0 6px; border-radius: 26px; background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre);
  }
  html.rt.sp.orbital #app .orb-barre__b { display: grid; justify-items: center; gap: 3px; min-height: 52px; padding: 4px 0; border: 0; background: none; color: var(--sp-t2); font: 500 10.5px/1 var(--sp-ui); }
  html.rt.sp.orbital #app .orb-barre__b i { font-size: 22px; }
  html.rt.sp.orbital #app .orb-barre__b.is-on { color: #fff; }
  html.rt.sp.orbital #app .orb-barre__b.is-on i { color: var(--orb-cyan); filter: drop-shadow(0 0 6px rgba(111, 220, 255, .9)); }
  html.rt.sp.orbital #app .orb-barre__jarvis { justify-self: center; width: 60px; height: 60px; margin-top: -26px; padding: 0; border: 0; border-radius: 50%; background: radial-gradient(circle at 50% 45%, #fff 0, #cfe0ff 12%, #6c8dff 38%, #9a63ff 62%, #ff6fd8 92%); box-shadow: 0 0 24px rgba(130, 140, 255, .9), 0 0 0 4px rgba(255, 255, 255, .18); }
  html.rt.sp.orbital #app .orb-barre__jarvis[aria-expanded="true"] { box-shadow: 0 0 34px rgba(150, 160, 255, 1), 0 0 0 4px rgba(255, 255, 255, .45); }
  /* La commande passe au-dessus de la barre */
  html.rt.sp.orbital #app .command-dock { bottom: calc(84px + env(safe-area-inset-bottom)) !important; }
  html.rt.sp.orbital body #app #stage { padding-bottom: calc(170px + env(safe-area-inset-bottom)) !important; }
  html.rt.sp.orbital #app .sp-pager, html.rt.sp.orbital #app .sp-orn { display: none !important; }
  html.rt.sp.orbital #app .orb-fermer { top: auto; bottom: calc(150px + env(safe-area-inset-bottom)); left: 50%; translate: -50% 0; }
  html.rt.sp.orbital #app .orb-fermer { display: none; }
  /* Accueil : salutation, noyau, état, quelques informations prioritaires ; modules et projets passent par la barre */
  html.rt.sp.orbital #app .orb-accueil { --noyau: min(62vw, 260px); height: auto; min-height: 0; display: flex; flex-direction: column; align-items: stretch; gap: 14px; padding: 6px 16px 0; }
  html.rt.sp.orbital #app :is(.orb-salut, .orb-gauche, .orb-centre, .orb-projets) { position: relative; inset: auto; left: auto; right: auto; top: auto; width: auto; max-width: none; }
  html.rt.sp.orbital #app .orb-salut { text-align: center; }
  html.rt.sp.orbital #app .orb-centre { order: 1; height: calc(var(--noyau) * 1.7); pointer-events: auto; }
  html.rt.sp.orbital #app .orb-scene { top: 46%; width: 100%; height: 100%; }
  html.rt.sp.orbital #app .orb-etat { top: auto; bottom: -6px; width: 100%; }
  html.rt.sp.orbital #app .orb-orbite, html.rt.sp.orbital #app .orb-recentrer { display: none !important; }
  html.rt.sp.orbital #app .orb-gauche { order: 2; margin-top: 10px; }
  html.rt.sp.orbital #app .orb-projets { order: 3; max-height: none; }
  html.rt.sp.orbital #app .orb-holos { display: flex; flex-wrap: wrap; gap: 8px; }
  /* Menu orbital : le noyau se réduit, les modules émergent autour de lui */
  html.rt.sp.orbital #app .orb-radial { display: block; position: fixed; inset: 0; z-index: 71; }
  html.rt.sp.orbital #app .orb-radial[hidden] { display: none; }
  html.rt.sp.orbital #app .orb-radial__fond { position: absolute; inset: 0; background: rgba(10, 12, 48, .5); -webkit-backdrop-filter: blur(14px) saturate(130%); backdrop-filter: blur(14px) saturate(130%); opacity: 0; transition: opacity .28s ease; }
  html.rt.sp.orbital #app .orb-radial.is-ouvert .orb-radial__fond { opacity: 1; }
  html.rt.sp.orbital #app .orb-radial__scene { --r: min(36vw, 150px); --noyau: 120px; position: absolute; left: 50%; top: 44%; width: 0; height: 0; }
  html.rt.sp.orbital #app .orb-noyau--mini { --noyau: 120px; scale: 1.35; opacity: 0; transition: scale .4s var(--orb-e), opacity .25s ease; }
  html.rt.sp.orbital #app .orb-noyau--mini .orb-noyau__nom { align-self: center; margin: 0; }
  html.rt.sp.orbital #app .orb-radial.is-ouvert .orb-noyau--mini { scale: 1; opacity: 1; }
  html.rt.sp.orbital #app .orb-module--radial { --noyau: 220px; width: 96px; height: 88px; min-width: 0; min-height: 0; animation: none !important;
    transform: translate(-50%, -50%) translate(0, 0) scale(.2); opacity: 0; transition: transform .46s var(--orb-ressort), opacity .25s ease; transition-delay: calc(var(--i) * 40ms); }
  html.rt.sp.orbital #app .orb-radial.is-ouvert .orb-module--radial { transform: translate(-50%, -50%) translate(calc(var(--x) * var(--r)), calc(var(--y) * var(--r))) scale(1); opacity: 1; }
  html.rt.sp.orbital #app .orb-radial.is-sort .orb-module--radial { transition-delay: 0s; }
  html.rt.sp.orbital #app .orb-radial.is-choix .orb-module--radial:not(.is-choisi) { opacity: 0; transform: translate(-50%, -50%) translate(0, 0) scale(.3); }
  html.rt.sp.orbital #app .orb-radial.is-choix .orb-module--radial.is-choisi { transform: translate(-50%, -50%) translate(0, 0) scale(1.8); opacity: 0; transition-duration: .3s; }
  html.rt.sp.orbital #app .orb-module--radial .orb-module__ico { font-size: 26px; }
  html.rt.sp.orbital #app .orb-module--radial .orb-module__nom { font-size: 13px; }
  html.rt.sp.orbital #app .orb-radial__fermer { position: absolute; left: 50%; bottom: calc(100px + env(safe-area-inset-bottom)); translate: -50% 0; width: 56px; height: 56px; border: 0; border-radius: 50%; color: #fff; font-size: 22px; background: var(--sp-verre); -webkit-backdrop-filter: var(--sp-fx); backdrop-filter: var(--sp-fx); box-shadow: var(--sp-arete), var(--sp-ombre); opacity: 0; transition: opacity .25s ease .1s; }
  html.rt.sp.orbital #app .orb-radial.is-ouvert .orb-radial__fermer { opacity: 1; }
}

/* ---------- 11. Mouvement réduit, « Animations » coupé ---------- */
@media (prefers-reduced-motion: reduce) {
  html.rt.sp.orbital #app :is(.orb-module, .orb-anneau, .orb-noyau, .orb-socle, .orb-salut, .orb-gauche, .orb-projets, .orb-etat) { animation: none !important; }
  html.rt.sp.orbital #app :is(.rail__nav, .rail__item, .rail__bottom, .orb-voile, .orb-module--radial, .orb-noyau--mini, .orb-radial__fond) { transition: none !important; }
}
html.no-motion.sp.orbital #app :is(.orb-module, .orb-anneau, .orb-noyau, .orb-socle, .orb-salut, .orb-gauche, .orb-projets, .orb-etat) { animation: none !important; }
html.no-motion.sp.orbital #app :is(.rail__nav, .rail__item, .rail__bottom, .orb-voile, .orb-module--radial, .orb-noyau--mini, .orb-radial__fond) { transition: none !important; }

/* Petit réacteur de la barre de commande (spatial.js) : aux couleurs du noyau orbital */
html.rt.sp.orbital #app .command .sp-mini { color: var(--orb-cyan); }
html.rt.sp.orbital #app .command .sp-mini[data-etat="gate"] { color: var(--acc-vif); }
html.rt.sp.orbital #app .command .sp-mini[data-etat="anomalie"] { color: var(--sp-rouge); }
