/* ============================================================
   JARVIS : réveil cinématique (Claude Code).
   Version choisie par Alexandre le 25/09/2026 : elle remplace la mise en scène
   de l'écran de démarrage de la PR 67. Le vrai démarrage reste la source de vérité :
   app.js met à jour capsules, pourcentage et journal ; assets/reveil.js orchestre.
   Composition par défaut = état final statique : sans JavaScript ou en mouvement
   réduit, l'écran reste lisible.
   ============================================================ */

.loader.rv {
  --rs: min(38vh, 320px);
  background:
    radial-gradient(ellipse 55% 50% at 50% 46%, rgba(12, 38, 52, .5), rgba(3, 4, 5, .96) 72%),
    #030405;
}

/* ---------- Lecture lo-fi du démarrage ---------- */
.rv__lofi { position: absolute; inset: 0; z-index: 3; pointer-events: none; font-family: var(--font-mono); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: rgba(223, 245, 255, .72); }
.rv__block { position: absolute; display: flex; flex-direction: column; gap: 4px; max-width: min(440px, 44vw); }
.rv__block--tl { left: 28px; top: 24px; }
.rv__block--tr { right: 28px; top: 24px; align-items: flex-end; text-align: right; }
.rv__block--bl { left: 28px; bottom: 28px; }
.rv__code { display: grid; gap: 4px; margin: 0; font: inherit; white-space: pre-wrap; }
.rv__code .loader__code-line { display: block; }
.rv__bar { display: block; width: 180px; height: 2px; overflow: hidden; background: rgba(223, 245, 255, .14); }
.rv__bar i { display: block; height: 100%; background: rgba(223, 245, 255, .85); transform-origin: left; }
.rv__reticle { position: absolute; left: 50%; top: 50%; width: 22px; height: 22px; margin: -11px 0 0 -11px; border: 1px solid rgba(223, 245, 255, .7); border-radius: 50%; opacity: 0; }
.rv__reticle::after { content: ""; position: absolute; inset: 8px; border-radius: 50%; background: rgba(223, 245, 255, .8); }

/* ---------- Globe et message d'accueil ---------- */
.rv__globe { position: absolute; left: 50%; top: 42%; z-index: 2; width: calc(var(--rs) * 1.3); height: calc(var(--rs) * 1.3); transform: translate(-50%, -50%); opacity: 0; pointer-events: none; }
.rv__welcome { position: absolute; left: 0; right: 0; top: calc(42% + var(--rs) * .72); z-index: 4; margin: 0; padding: 0 16px; font-family: var(--font-ui); font-size: clamp(20px, 2.6vw, 32px); font-weight: 300; letter-spacing: .02em; text-align: center; text-wrap: balance; color: #f2f4f6; opacity: 0; }

/* ---------- Caméra 3D : le « rig » porte la grille, le réacteur et les capsules ---------- */
.rv__cam { position: absolute; left: 50%; top: 50%; z-index: 3; width: var(--rs); height: var(--rs); margin: calc(var(--rs) / -2) 0 0 calc(var(--rs) / -2); perspective: 1100px; }
.rv__rig { position: absolute; inset: 0; transform-style: preserve-3d; transform: translateX(max(-150px, -10vw)) scale(.82); }
.rv__floor { position: absolute; left: 50%; top: 50%; width: 1400px; height: 1400px; margin: -700px 0 0 -700px; transform: translateY(calc(var(--rs) * .56)) rotateX(90deg); background: linear-gradient(rgba(127, 211, 255, .16) 1px, transparent 1px), linear-gradient(90deg, rgba(127, 211, 255, .16) 1px, transparent 1px); background-size: 56px 56px; -webkit-mask: radial-gradient(circle, #000 18%, transparent 58%); mask: radial-gradient(circle, #000 18%, transparent 58%); opacity: 0; pointer-events: none; animation: rvFloor 6s linear infinite; }
@keyframes rvFloor { to { background-position: 0 56px, 0 0; } }

.rv__reactor { --p: 0; position: absolute; inset: 0; transform-style: preserve-3d; }
.rv__reactor > i, .rv__reactor > span { position: absolute; border-radius: 50%; }
.rv__ring--outer { inset: 0; border: 1.5px solid rgba(223, 245, 255, .55); box-shadow: 0 0 22px rgba(127, 211, 255, .25), inset 0 0 22px rgba(127, 211, 255, .10); }
.rv__ring--seg { inset: 6%; background: repeating-conic-gradient(from -90deg, rgba(223, 245, 255, .75) 0 6deg, transparent 6deg 12deg); -webkit-mask: radial-gradient(circle, transparent 60%, #000 61%, #000 66%, transparent 67%); mask: radial-gradient(circle, transparent 60%, #000 61%, #000 66%, transparent 67%); }
.rv__ring--mid { inset: 18%; background: repeating-conic-gradient(rgba(127, 211, 255, .5) 0 1deg, transparent 1deg 10deg); -webkit-mask: radial-gradient(circle, transparent 69%, #000 70%, #000 72%, transparent 73%); mask: radial-gradient(circle, transparent 69%, #000 70%, #000 72%, transparent 73%); animation: rvSpin 14s linear infinite; }
.rv__ring--arc { inset: 22%; background: conic-gradient(from -90deg, #ff8a2c calc(var(--p) * 1turn), rgba(255, 138, 44, .10) 0); -webkit-mask: radial-gradient(circle, transparent 57%, #000 58%, #000 70%, transparent 71%); mask: radial-gradient(circle, transparent 57%, #000 58%, #000 70%, transparent 71%); filter: drop-shadow(0 0 14px rgba(255, 138, 44, .75)); }
.loader--error .rv__ring--arc { background: conic-gradient(from -90deg, #ff5c6c calc(var(--p) * 1turn), rgba(255, 92, 108, .1) 0); filter: drop-shadow(0 0 14px rgba(255, 92, 108, .7)); }
.rv__ring--hex { inset: 30%; background: radial-gradient(circle at 50% 50%, rgba(127, 211, 255, .18) 1.4px, transparent 1.6px) 0 0 / 10px 9px, radial-gradient(circle, rgba(8, 30, 40, .9), rgba(2, 10, 16, .95)); border: 1px solid rgba(223, 245, 255, .4); box-shadow: inset 0 0 30px rgba(127, 211, 255, .15); }
.rv__glow { inset: 24%; background: radial-gradient(circle, rgba(223, 245, 255, .95) 0, rgba(127, 211, 255, .55) 26%, rgba(22, 140, 255, .12) 55%, transparent 70%); filter: blur(2px); opacity: .55; }
.rv__core { position: absolute; inset: 30%; display: grid; place-content: center; justify-items: center; gap: 2px; text-align: center; }
.rv__core small { font-family: var(--font-mono); font-size: 10px; letter-spacing: .24em; text-transform: uppercase; color: rgba(223, 245, 255, .8); }
.rv__core b { font-family: var(--font-mono); font-size: clamp(34px, 7vh, 60px); font-weight: 500; line-height: 1; color: #fff7ea; text-shadow: 0 0 18px rgba(255, 150, 60, .7), 0 0 40px rgba(255, 120, 40, .35); font-variant-numeric: tabular-nums; }
.rv__core b::after { content: "%"; margin-left: 2px; font-size: .4em; color: rgba(255, 220, 190, .8); }
.loader--ok .rv__core b::after { content: none; }
.rv__orbit { position: absolute; inset: -12%; transform: rotateX(72deg); transform-style: preserve-3d; pointer-events: none; }
.rv__orbit i { position: absolute; inset: 0; border: 3px solid #ff8a2c; border-left-color: transparent; border-bottom-color: rgba(255, 138, 44, .35); border-radius: 50%; box-shadow: 0 0 18px rgba(255, 138, 44, .6); }
.rv__cone { left: 10%; right: 10%; top: 60%; height: 90%; border-radius: 0 !important; transform-origin: 50% 0; background: conic-gradient(from 150deg at 50% 0, transparent 0, rgba(127, 211, 255, .10) 15deg, rgba(223, 245, 255, .18) 30deg, rgba(127, 211, 255, .10) 45deg, transparent 60deg); filter: blur(6px); mix-blend-mode: screen; opacity: .55; }
@keyframes rvSpin { to { transform: rotate(360deg); } }

/* Capsules d'étapes : hors caméra pour rester lisibles (contenu fourni par le vrai démarrage, classes .slot de loader.css) */
.rv__slots-wrap { position: absolute; left: calc(50% + var(--rs) * .35); top: 50%; z-index: 4; perspective: 900px; transform: translateY(-50%) perspective(1000px) rotateY(-18deg); transform-origin: left center; }
.rv__slots { display: grid; gap: 12px; margin: 0; padding: 0; list-style: none; }
.rv__slots .slot { min-width: 250px; }

/* ============================================================
   Plans ajoutés le 25/09 : connexion plus longue, d'après le « HUD UI Pack 300 »
   (bureau holographique incliné) et la « HUD Scanning Animation » (scan d'identité).
   Masqués par défaut ; reveil.js les injecte et les anime.
   ============================================================ */
.rvd, .rvs { visibility: hidden; opacity: 0; pointer-events: none; }

/* ---------- Bureau holographique ---------- */
.rvd { position: absolute; inset: 0; z-index: 2; overflow: hidden; background: radial-gradient(ellipse 80% 70% at 50% 45%, rgba(8, 30, 48, .92), rgba(2, 6, 10, .98) 75%); }
.rvd__cam { position: absolute; inset: 0; perspective: 1400px; perspective-origin: 50% 35%; transform: scale(var(--rvd-s, 1)); }
.rvd__plane {
  position: absolute; left: 50%; top: 50%; width: 1600px; height: 900px; margin: -450px 0 0 -800px;
  transform-style: preserve-3d; transform: rotateX(52deg) rotateZ(-14deg);
  background:
    linear-gradient(rgba(127, 211, 255, .07) 1px, transparent 1px) 0 0 / 40px 40px,
    linear-gradient(90deg, rgba(127, 211, 255, .07) 1px, transparent 1px) 0 0 / 40px 40px,
    linear-gradient(160deg, rgba(10, 40, 64, .85), rgba(4, 14, 24, .9));
  border: 1px solid rgba(160, 220, 255, .35);
  box-shadow: 0 0 60px rgba(40, 140, 255, .25), inset 0 0 120px rgba(40, 140, 255, .12);
}
.rvd__p { position: absolute; color: rgba(210, 238, 255, .86); font-family: var(--font-mono); text-transform: uppercase; letter-spacing: .14em; filter: drop-shadow(0 0 6px rgba(80, 170, 255, .7)); }
.rvd__ringsvg, .rvd__gauges svg { overflow: visible; }
.rvd__ringsvg *, .rvd__gauges svg * { transform-box: view-box; transform-origin: 0 0; }
.rvd__l { fill: none; stroke: rgba(190, 232, 255, .7); stroke-width: 1.2; }
.rvd__l--faint { opacity: .35; }
.rvd__l--dash { stroke-dasharray: 2 5; }
.rvd__ring { left: 110px; top: 170px; width: 560px; height: 560px; }
.rvd__ringsvg { width: 100%; height: 100%; }
.rvd__ticks line { stroke: rgba(190, 232, 255, .6); stroke-width: 1.2; }
.rvd__spinA path { fill: none; stroke: #dff4ff; stroke-width: 12; opacity: .9; }
.rvd__spinB path { fill: none; stroke: #8fd8ff; stroke-width: 4; }
.rvd__band { fill: none; stroke: rgba(143, 216, 255, .55); stroke-width: 16; stroke-dasharray: 1 2.6; }
.rvd__spinA { animation: scSpin 16s linear infinite; }
.rvd__spinB { animation: scSpin 9s linear infinite reverse; }
.rvd__ringtxt { position: absolute; inset: 36%; display: grid; place-content: center; justify-items: center; gap: 4px; text-align: center; }
.rvd__ringtxt small { font-size: 13px; letter-spacing: .2em; }
.rvd__ringtxt b { font-size: 64px; font-weight: 500; line-height: 1; color: #fff; text-shadow: 0 0 18px rgba(127, 211, 255, .9); font-variant-numeric: tabular-nums; }
.rvd__ringtxt b::after { content: "%"; margin-left: 2px; font-size: .4em; }
.rvd__cap { position: absolute; left: 0; top: -34px; font-size: 16px; }
.rvd__tag { left: 760px; top: 70px; width: 720px; height: 74px; display: flex; align-items: center; gap: 24px; padding: 0 22px; border: 2px solid rgba(190, 232, 255, .75); }
.rvd__tag b { font-size: 44px; font-weight: 600; letter-spacing: .3em; color: #eaf8ff; }
.rvd__haz { flex: 1; height: 26px; background: repeating-linear-gradient(-45deg, rgba(190, 232, 255, .85) 0 10px, transparent 10px 20px); }
.rvd__chart { left: 760px; top: 420px; width: 720px; height: 240px; border: 1px solid rgba(190, 232, 255, .4); background: linear-gradient(rgba(127, 211, 255, .12) 1px, transparent 1px) 0 0 / 100% 40px, linear-gradient(90deg, rgba(127, 211, 255, .12) 1px, transparent 1px) 0 0 / 60px 100%; }
.rvd__chart svg { width: 100%; height: 100%; }
.rvd__chart polyline { fill: none; stroke: #dff4ff; stroke-width: 2.5; stroke-dasharray: 1; }
.rvd__gauges { left: 110px; top: 770px; width: 560px; height: 110px; display: flex; justify-content: space-between; }
.rvd__gauges svg { width: 110px; height: 110px; }
.rvd__garc { fill: none; stroke: #dff4ff; stroke-width: 6; stroke-dasharray: 1; }
.rvd__gin { fill: none; stroke: #8fd8ff; stroke-width: 3; }
.rvd__gspin { animation: scSpin 3s linear infinite; }
.rvd__bars { left: 760px; top: 710px; width: 720px; display: grid; gap: 12px; }
.rvd__bars i { display: block; width: calc(var(--w) * 100%); height: 10px; background: linear-gradient(90deg, #dff4ff, rgba(143, 216, 255, .3)); transform-origin: left; box-shadow: 0 0 10px rgba(127, 211, 255, .6); }
.rvd__corner { position: absolute; width: 60px; height: 60px; border: 3px solid rgba(223, 245, 255, .8); }
.rvd__corner--a { left: -2px; top: -2px; border-right: 0; border-bottom: 0; }
.rvd__corner--b { right: -2px; bottom: -2px; border-left: 0; border-top: 0; }
/* Profondeur de champ : le haut (loin) et le bas (près) du plan sont flous, comme dans le pack. */
.rvd__dof { position: absolute; inset: 0; pointer-events: none; -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); -webkit-mask: linear-gradient(180deg, #000 0, transparent 36%, transparent 72%, #000 100%); mask: linear-gradient(180deg, #000 0, transparent 36%, transparent 72%, #000 100%); }

/* ---------- Scan d'identité ---------- */
.rvs { --sz: min(58vh, 500px); position: absolute; inset: 0; z-index: 3; background: radial-gradient(circle at 50% 48%, rgba(46, 30, 4, .4), transparent 62%); }
.rvs__stage { position: absolute; left: 50%; top: 48%; width: var(--sz); height: var(--sz); margin: calc(var(--sz) / -2) 0 0 calc(var(--sz) / -2); }
.rvs__call { position: absolute; width: 0; height: 0; }
.rvs__call--a { left: -2.3%; top: 46.3%; }
.rvs__call--b { left: 82.7%; top: 22.5%; }
.rvs__call--c { left: 17.3%; top: 77.5%; }
.rvs__link { position: absolute; left: 0; top: 0; overflow: visible; }
.rvs__link polyline { fill: none; stroke: rgba(255, 217, 140, .8); stroke-width: 1.4; stroke-dasharray: 1; }
.rvs__call--a .rvs__link polyline { stroke: rgba(255, 90, 90, .85); }
.rvs__lab { position: absolute; display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; font-family: var(--font-mono); font-size: 12px; letter-spacing: .18em; text-transform: uppercase; color: #ffe3a6; text-shadow: 0 0 10px rgba(244, 181, 69, .6); }
.rvs__lab .ph { font-size: 22px; color: #ffd98c; filter: drop-shadow(0 0 8px rgba(244, 181, 69, .9)); }
.rvs__lab b { font-weight: 600; color: #fff3d6; }
.rvs__call--a .rvs__lab { right: 216px; top: -60px; color: #ffc2c2; }
.rvs__call--a .rvs__lab .ph { color: #ff6b6b; filter: drop-shadow(0 0 8px rgba(255, 75, 75, .9)); }
.rvs__call--b .rvs__lab { left: 216px; top: -60px; }
.rvs__call--c .rvs__lab { right: 216px; top: 34px; }
.rvs__print { position: absolute; right: max(24px, 5vw); top: 56%; width: 200px; height: 250px; margin-top: -125px; display: grid; place-items: center; align-content: center; gap: 8px; overflow: hidden; border: 1px solid rgba(255, 217, 140, .4); background: rgba(20, 14, 4, .5); font-family: var(--font-mono); text-transform: uppercase; }
.rvs__print > .ph { font-size: 110px; color: #ffd98c; filter: drop-shadow(0 0 12px rgba(244, 181, 69, .8)); }
.rvs__scanline { position: absolute; left: 0; right: 0; top: 0; height: 3px; background: linear-gradient(90deg, transparent, #fff3d6, transparent); box-shadow: 0 0 14px #f4b545; animation: rvsScan 1.6s ease-in-out infinite alternate; }
@keyframes rvsScan { from { transform: translateY(20px); } to { transform: translateY(228px); } }
.rvs__print small { font-size: 11px; letter-spacing: .3em; color: rgba(255, 217, 140, .7); }
.rvs__print b { font-size: 14px; font-weight: 500; letter-spacing: .2em; color: #fff3d6; }
.rvs__result { position: absolute; left: 0; right: 0; top: calc(48% + var(--sz) / 2 + 26px); margin: 0; font-family: var(--font-mono); font-size: 15px; letter-spacing: .28em; text-align: center; text-transform: uppercase; color: #fff3d6; text-shadow: 0 0 14px rgba(244, 181, 69, .8); }

/* ============================================================
   Séquence en huit temps (26/09) : titre du temps en cours, frise, mire, voyants,
   liaison, compteurs réels du registre, bandeau « en ligne ».
   ============================================================ */
.rvp, .rvb, .rvl, .rv__beat, .rv__seq, .rv__online { visibility: hidden; opacity: 0; pointer-events: none; }
.rv__beat { position: absolute; left: 0; right: 0; top: 22px; z-index: 5; margin: 0; font-family: var(--font-mono); font-size: 11px; letter-spacing: .28em; text-align: center; text-transform: uppercase; color: rgba(223, 245, 255, .6); }
.rv__beat b { font-weight: 500; color: #f2fbff; }
.rv__seq { position: absolute; left: 50%; bottom: 30px; z-index: 5; display: flex; gap: 6px; margin: 0; padding: 0; list-style: none; transform: translateX(-50%); }
.rv__seq li { width: 34px; height: 3px; border-radius: 2px; background: rgba(223, 245, 255, .16); transition: background-color .3s ease, box-shadow .3s ease; }
.rv__seq li.is-done { background: rgba(127, 211, 255, .6); }
.rv__seq li.is-on { background: #ff8a2c; box-shadow: 0 0 10px rgba(255, 138, 44, .8); }
.rv__online { position: absolute; left: 0; right: 0; top: calc(50% - var(--rs) * .62); z-index: 5; margin: 0; font-family: var(--font-mono); font-size: 13px; letter-spacing: .36em; text-align: center; text-transform: uppercase; color: #ffd8b0; text-shadow: 0 0 14px rgba(255, 138, 44, .8); }

/* 1. Mise sous tension : ligne cathodique puis mire d'alignement */
.rvp { position: absolute; inset: 0; z-index: 3; display: grid; place-items: center; }
.rvp__line { position: absolute; left: 10%; right: 10%; top: 50%; height: 2px; margin-top: -1px; background: #eafaff; box-shadow: 0 0 18px #7fd3ff, 0 0 40px rgba(127, 211, 255, .6); transform-origin: center; }
.rvp__pattern { position: relative; width: min(60vmin, 520px); aspect-ratio: 1; }
.rvp__ring { position: absolute; border: 1px solid rgba(223, 245, 255, .45); border-radius: 50%; }
.rvp__ring--a { inset: 0; } .rvp__ring--b { inset: 22%; border-style: dashed; } .rvp__ring--c { inset: 44%; border-color: rgba(255, 138, 44, .8); }
.rvp__cross { position: absolute; background: rgba(223, 245, 255, .8); box-shadow: 0 0 8px rgba(127, 211, 255, .8); }
.rvp__cross--h { left: -6%; right: -6%; top: 50%; height: 1px; } .rvp__cross--v { top: -6%; bottom: -6%; left: 50%; width: 1px; }
.rvp__scale { position: absolute; display: flex; justify-content: space-between; }
.rvp__scale--x { left: 0; right: 0; bottom: -18px; height: 8px; } .rvp__scale--y { top: 0; bottom: 0; left: -18px; width: 8px; flex-direction: column; }
.rvp__scale i { display: block; background: rgba(223, 245, 255, .55); }
.rvp__scale--x i { width: 1px; height: 100%; } .rvp__scale--y i { width: 100%; height: 1px; }
.rvp__read { position: absolute; left: 0; right: 0; bottom: -58px; margin: 0; font-family: var(--font-mono); font-size: 12px; letter-spacing: .2em; text-align: center; text-transform: uppercase; color: rgba(223, 245, 255, .75); }
.rvp__read b { font-weight: 500; color: #fff; }

/* 2. Test des voyants : lampes allumées d'un coup, puis vrai résultat de chaque contrôle */
.rvb { position: absolute; inset: 0; z-index: 3; display: grid; place-content: center; justify-items: center; gap: 22px; padding: 0 16px; }
.rvb__grid { display: grid; grid-template-columns: repeat(4, minmax(150px, 1fr)); gap: 12px; }
.rvb__lamp { display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto auto; column-gap: 12px; align-items: center; padding: 12px 16px; border: 1px solid rgba(223, 245, 255, .16); border-radius: 12px; background: rgba(6, 16, 24, .6); font-family: var(--font-mono); text-transform: uppercase; }
.rvb__lamp i { grid-row: 1 / 3; width: 12px; height: 12px; border-radius: 50%; background: rgba(223, 245, 255, .15); }
.rvb__lamp span { font-size: 12px; letter-spacing: .14em; color: #eaf8ff; }
.rvb__lamp b { font-size: 10px; font-weight: 500; letter-spacing: .2em; color: rgba(223, 245, 255, .35); visibility: hidden; }
.rvb__lamp.is-test { border-color: rgba(255, 196, 107, .8); box-shadow: 0 0 18px rgba(255, 170, 60, .35); }
.rvb__lamp.is-test i { background: #ffc46b; box-shadow: 0 0 12px #ffb040; }
.rvb__lamp.is-ok i { background: #8fdcaa; box-shadow: 0 0 10px rgba(143, 220, 170, .8); }
.rvb__lamp.is-ok b { visibility: visible; color: #8fdcaa; }
.rvb__lamp.is-ko { border-color: rgba(255, 92, 108, .7); }
.rvb__lamp.is-ko i { background: #ff5c6c; box-shadow: 0 0 12px #ff5c6c; }
.rvb__lamp.is-ko b { visibility: visible; color: #ff8a96; }
.rvb__sum { margin: 0; font-family: var(--font-mono); font-size: 13px; letter-spacing: .3em; text-transform: uppercase; color: #f2fbff; }

/* 5. Liaison réseau : étiquette à l'extrémité de l'arc du globe */
.rvl { position: absolute; left: calc(50% + var(--rs) * .66); top: calc(42% - var(--rs) * .66); z-index: 4; display: grid; gap: 2px; font-family: var(--font-mono); text-transform: uppercase; }
.rvl__k { margin: 0; font-size: 11px; letter-spacing: .3em; color: rgba(255, 200, 150, .85); }
.rvl__v { margin: 0; font-size: 15px; letter-spacing: .16em; color: #f2fbff; }
.rvl__ms { margin: 0; font-size: 12px; letter-spacing: .2em; color: rgba(223, 245, 255, .7); }
.rvl__ms b { font-size: 28px; font-weight: 500; letter-spacing: 0; color: #ffb36b; text-shadow: 0 0 14px rgba(255, 138, 44, .7); }

/* 7. Compteurs réels du registre sur le bureau holographique */
.rvd__stats { left: 760px; top: 180px; width: 720px; display: grid; grid-template-columns: 1fr 1fr; gap: 18px 28px; }
.rvd__stat { display: grid; gap: 4px; padding: 14px 18px; border-left: 3px solid rgba(223, 245, 255, .8); background: rgba(8, 30, 48, .45); }
.rvd__stat b { font-size: 64px; font-weight: 500; line-height: 1; color: #fff; text-shadow: 0 0 18px rgba(127, 211, 255, .9); font-variant-numeric: tabular-nums; }
.rvd__stat span { font-size: 15px; letter-spacing: .16em; }

/* ---------- Commandes et crochets ---------- */
.rv__actions { position: absolute; right: 24px; bottom: 24px; z-index: 5; display: flex; gap: 8px; }
.rv__btn { display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding: 0 14px; border: 1px solid rgba(124, 215, 240, .18); border-radius: 999px; background: rgba(7, 18, 26, .72); color: rgba(223, 245, 255, .8); font-size: 10px; letter-spacing: .12em; text-transform: uppercase; cursor: pointer; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
.rv__btn:hover, .rv__btn[aria-pressed="true"] { color: #f2fbff; border-color: rgba(127, 211, 255, .4); background: rgba(13, 38, 50, .9); }
.rv__br { position: absolute; z-index: 5; width: 28px; height: 28px; border: 2px solid #ff8a2c; opacity: .35; filter: drop-shadow(0 0 6px rgba(255, 138, 44, .6)); }
.rv__br--tl { left: 16px; top: 16px; border-right: 0; border-bottom: 0; }
.rv__br--tr { right: 16px; top: 16px; border-left: 0; border-bottom: 0; }
.rv__br--bl { left: 16px; bottom: 16px; border-right: 0; border-top: 0; }
.rv__br--br { right: 16px; bottom: 16px; border-left: 0; border-top: 0; }

/* ---------- Téléphone ---------- */
@media (max-width: 760px) {
  .loader.rv { --rs: min(56vw, 240px); }
  .rv__cam { top: 34%; }
  .rv__globe { top: 30%; }
  .rv__welcome { top: calc(30% + var(--rs) * .78); }
  .rv__rig { transform: scale(.82); }
  .rv__slots-wrap { left: 50%; top: calc(34% + var(--rs) * .5 + 24px); transform: translateX(-50%); }
  .rv__slots .slot { min-width: min(78vw, 300px); }
  .rv__block--tl { left: 16px; top: 16px; max-width: calc(100vw - 32px); font-size: 10px; }
  .rv__block--tr, .rv__block--bl { display: none; }
  .rv__actions { top: 16px; right: 16px; bottom: auto; }
  .rvd { --rvd-s: .55; }
  .rvd__dof { display: none; }
  .rvs { --sz: min(80vw, 340px); }
  .rvs__stage, .rvs__title, .rvs__result { top: 40%; }
  .rvs__title { top: calc(40% - var(--sz) / 2 - 48px); }
  .rvs__result { top: calc(40% + var(--sz) / 2 + 22px); font-size: 13px; }
  .rvs__call, .rvs__print { display: none; }
  .rvb__grid { grid-template-columns: 1fr 1fr; gap: 8px; }
  .rvb__lamp { padding: 10px 12px; }
  /* Le journal de démarrage occupe le haut de l'écran : titre du temps et globe passent en dessous. */
  .rv__beat { top: 140px; font-size: 10px; letter-spacing: .2em; }
  .rv__globe { top: 44%; }
  .rvl { left: 16px; right: 16px; top: calc(44% + var(--rs) * .75); text-align: center; justify-items: center; }
  .rv__seq li { width: 22px; }
  .rv__online { top: calc(30% + var(--rs) * .78 + 48px); }
}

/* ---------- Mouvement réduit ---------- */
@media (prefers-reduced-motion: reduce) {
  .rv__ring--mid, .rv__floor { animation: none !important; }
}
html.no-motion .rv__ring--mid, html.no-motion .rv__floor { animation: none !important; }

/* ---------- Entrée des panneaux de l'accueil ----------
   Chaque panneau pivote depuis son côté et scintille avant de se stabiliser.
   Les délais échelonnés de cinematic.css restent ceux d'origine. */
body.hud-boot .hp { animation: reveilPanelIn 1100ms cubic-bezier(.16, 1, .3, 1) both, hpFloat 9s ease-in-out 2.9s infinite; }
body.hud-boot .cin-col--left .hp { --hp-rot: 26deg; }
body.hud-boot .cin-col--right .hp { --hp-rot: -26deg; }
@keyframes reveilPanelIn {
  0% { opacity: 0; translate: var(--hp-from, 0) 16px; transform: perspective(900px) rotateY(var(--hp-rot, 0deg)) translateZ(-140px); }
  22% { opacity: 1; }
  30% { opacity: .3; }
  44% { opacity: .95; }
  56% { opacity: .55; }
  100% { opacity: 1; translate: 0 0; }
}

