/* ============================================================
   TERMINAL SOVEREIGN — ANALYSE GÉNÉTIQUE
   Nuit bleutée, panneaux biseautés, accent #FF8A1F.
   Tout est en rem : 1rem ≈ 16px sur un écran 1920×1080.
   ============================================================ */

:root{
  --acc:#FF8A1F; --acc-rgb:255,138,31; --acc-hi:#ffb066; --acc-lo:#b85a08;
  --bad:#ff3b3b; --bad-rgb:255,59,59;
  --bg:#05070c; --panel:#0a0f19; --panel-2:#0d1421;
  --steel:rgba(150,172,210,.14); --steel-2:rgba(150,172,210,.28);
  --txt:#ece7dc; --mut:#7c8798; --mut-2:#4c5566;
  --f-head:'Oswald','Arial Narrow','Impact',sans-serif;
  --f-mono:'JetBrains Mono','Consolas','Courier New',monospace;
  --S:40rem;
}

*{box-sizing:border-box;margin:0;padding:0}
html{font-size:clamp(9px, calc(min(100vw, 177.78vh) / 120), 24px);background:var(--bg)}
html.embedded,body.embedded{background:transparent}
body{
  min-height:100vh;overflow:hidden;color:var(--txt);
  font-family:var(--f-mono);font-size:.8rem;line-height:1.35;background:var(--bg);
  display:flex;align-items:center;justify-content:center;
  -webkit-user-select:none;user-select:none;
}
img{display:block;-webkit-user-drag:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
button:disabled{cursor:not-allowed}
em,i{font-style:normal}
::selection{background:rgba(var(--acc-rgb),.35)}

.backdrop{
  position:fixed;inset:0;z-index:0;
  background:
    radial-gradient(80% 60% at 50% 38%,rgba(28,42,84,.36),transparent 70%),
    radial-gradient(60% 50% at 85% 100%,rgba(var(--acc-rgb),.06),transparent 70%),
    linear-gradient(rgba(120,150,210,.03) 1px,transparent 1px) 0 0/3rem 3rem,
    linear-gradient(90deg,rgba(120,150,210,.03) 1px,transparent 1px) 0 0/3rem 3rem,
    var(--bg);
}
body.embedded .backdrop{background:rgba(3,5,10,.6)}

/* ============================================================
   FENÊTRE + COUCHES « CINÉMA »
   ============================================================ */
.window{
  position:relative;z-index:1;width:90vw;height:90vh;
  display:flex;flex-direction:column;overflow:hidden;
  background:linear-gradient(180deg,#090e18,#05080f);
  border:1px solid rgba(var(--acc-rgb),.32);
  box-shadow:0 0 0 1px #000,0 0 3.2rem rgba(var(--acc-rgb),.09),inset 0 0 6rem rgba(var(--acc-rgb),.03);
}
.window.hidden{display:none}
.window::after{
  content:"";position:absolute;inset:0;z-index:66;pointer-events:none;
  background:repeating-linear-gradient(180deg,rgba(255,255,255,.022) 0 1px,transparent 1px 3px);
}
.grain{
  position:absolute;inset:-50%;z-index:70;pointer-events:none;opacity:.075;
  background-image:var(--grain,none);background-size:16rem 16rem;
  animation:grain .45s steps(5) infinite;
}
@keyframes grain{
  0%{transform:translate(0,0)}20%{transform:translate(-3%,2%)}40%{transform:translate(2%,-3%)}
  60%{transform:translate(-2%,-1%)}80%{transform:translate(3%,3%)}100%{transform:translate(0,0)}
}
.vignette{position:absolute;inset:0;z-index:69;pointer-events:none;background:radial-gradient(125% 95% at 50% 45%,transparent 58%,rgba(0,0,0,.5) 100%)}
.sweep{
  position:absolute;left:0;right:0;top:-24%;height:22%;z-index:68;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(var(--acc-rgb),.04) 55%,rgba(var(--acc-rgb),.08) 92%,transparent);
  animation:sweep 9s linear infinite;
}
@keyframes sweep{to{transform:translateY(560%)}}
.corner{position:absolute;width:1.6rem;height:1.6rem;z-index:67;pointer-events:none;border:0 solid var(--acc)}
.corner.tl{left:-1px;top:-1px;border-width:2px 0 0 2px}.corner.tr{right:-1px;top:-1px;border-width:2px 2px 0 0}
.corner.bl{left:-1px;bottom:-1px;border-width:0 0 2px 2px}.corner.br{right:-1px;bottom:-1px;border-width:0 2px 2px 0}

/* mise sous tension des panneaux après l'authentification */
.window.booting .pw{opacity:0}
.window.powering .pw{animation:powerIn 1s calc(var(--d) * .16s) both}
@keyframes powerIn{
  0%{opacity:0;filter:brightness(2.6) saturate(0)}9%{opacity:1}13%{opacity:.12}21%{opacity:1}
  29%{opacity:.45}38%{opacity:1;filter:brightness(1.5)}100%{opacity:1;filter:none}
}
/* secousse (erreur, tampon) et aberration chromatique (glitch) */
.window.shake .main,.window.shake .topbar{animation:winShake .38s}
@keyframes winShake{15%{transform:translate(-.35rem,.1rem)}35%{transform:translate(.3rem,-.15rem)}55%{transform:translate(-.2rem,.12rem)}75%{transform:translate(.12rem,0)}100%{transform:none}}
.window.glitching .stage{animation:chroma .32s steps(3)}
@keyframes chroma{
  0%{filter:drop-shadow(4px 0 rgba(255,0,70,.55)) drop-shadow(-4px 0 rgba(0,220,255,.45));transform:translateX(-.3rem)}
  50%{filter:drop-shadow(-3px 0 rgba(255,0,70,.5)) drop-shadow(3px 0 rgba(0,220,255,.4));transform:translateX(.25rem)}
  100%{filter:none;transform:none}
}

@keyframes blink{50%{opacity:.25}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes float{50%{transform:translateY(-.2rem)}}
@keyframes ping{0%{transform:scale(1);opacity:.9}100%{transform:scale(1.7);opacity:0}}

/* ============================================================
   EN-TÊTE
   ============================================================ */
.topbar{
  display:flex;align-items:center;gap:1.6rem;padding:.85rem 1.2rem .8rem 1.3rem;
  border-bottom:1px solid var(--steel);position:relative;z-index:2;
  background:linear-gradient(180deg,rgba(var(--acc-rgb),.05),transparent);
}
.sov-mark{height:3.3rem;width:auto;flex:none;filter:drop-shadow(0 0 .7rem rgba(var(--acc-rgb),.4))}
.tb-title{flex:1;min-width:0;overflow:hidden}
.eyebrow{display:flex;align-items:center;gap:.6rem;font-size:.64rem;letter-spacing:.34em;color:var(--acc);white-space:nowrap}
.eyebrow em{color:var(--mut-2);letter-spacing:.24em;font-size:.56rem}
.eyebrow .dot{width:.5rem;height:.5rem;background:var(--acc);box-shadow:0 0 .7rem var(--acc);animation:blink 1.6s steps(2) infinite}
.tb-title h1{font:700 2.55rem/1.02 var(--f-head);letter-spacing:.07em;color:var(--txt);text-shadow:0 0 1.4rem rgba(var(--acc-rgb),.28);white-space:nowrap}
.tb-title .ru{font-size:.56rem;letter-spacing:.32em;color:var(--mut-2);margin-top:.15rem;white-space:nowrap}
.tb-status{display:flex}
.kv{display:flex;flex-direction:column;gap:.2rem;padding:.1rem 1.1rem;border-left:1px solid var(--steel);min-width:8.5rem}
.kv span{font-size:.54rem;letter-spacing:.3em;color:var(--mut-2)}
.kv b{font-size:.86rem;font-weight:500;letter-spacing:.1em;color:var(--txt);white-space:nowrap}
.state{display:flex;align-items:center;gap:.5rem}
.state i{width:.5rem;height:.5rem;border-radius:50%;background:var(--mut-2);flex:none}
.state em{color:var(--mut)}
.state em small{font-size:.58em;letter-spacing:.08em;color:var(--mut-2);margin-left:.35rem;font-weight:400}
.state.on i{background:var(--acc);box-shadow:0 0 .8rem var(--acc);animation:blink 1.1s steps(2) infinite}
.state.on em,.state.ok em{color:var(--acc)}
.state.ok i{background:var(--acc);box-shadow:0 0 .8rem var(--acc)}
.state.on em small,.state.ok em small{color:rgba(var(--acc-rgb),.6)}
.sov-word{height:1.35rem;width:auto;flex:none;opacity:.85}
.tb-tools{display:flex;align-items:center;gap:.5rem;flex:none}
.icon-btn,.guide-btn,.close-btn{
  height:2.9rem;flex:none;position:relative;transition:.2s;
  border:1px solid var(--steel-2);background:rgba(255,255,255,.02);
  clip-path:polygon(.55rem 0,100% 0,100% calc(100% - .55rem),calc(100% - .55rem) 100%,0 100%,0 .55rem);
}
.icon-btn{width:2.9rem;display:grid;place-items:center}
.icon-btn svg{width:1.4rem;height:1.4rem;fill:none;stroke:var(--acc);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.icon-btn .spk{fill:rgba(var(--acc-rgb),.25)}
.icon-btn .mute{display:none;stroke:var(--bad)}
.icon-btn.muted .wave{display:none}
.icon-btn.muted .mute{display:block}
.guide-btn{padding:0 1.1rem;font:500 .7rem var(--f-mono);letter-spacing:.3em;color:var(--acc)}
.guide-btn.active{background:var(--acc);color:#1a0e00}
.close-btn{width:2.9rem}
.close-btn img{width:66%;height:66%;margin:17%;object-fit:contain;transition:.25s}
.icon-btn:hover,.guide-btn:hover,.close-btn:hover{background:rgba(var(--acc-rgb),.16);border-color:var(--acc)}
.close-btn:hover img{transform:rotate(90deg);filter:drop-shadow(0 0 .5rem var(--acc))}

/* ============================================================
   CORPS ET PANNEAUX
   ============================================================ */
.main{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 21rem;gap:.8rem;padding:.8rem;position:relative;z-index:2}
.panel{
  --cut:.95rem;--cut-in:calc(var(--cut) - .42px);
  position:relative;isolation:isolate;min-height:0;min-width:0;background:var(--steel-2);
  clip-path:polygon(var(--cut) 0,calc(100% - var(--cut)) 0,100% var(--cut),100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,var(--cut) 100%,0 calc(100% - var(--cut)),0 var(--cut));
}
.panel::before{
  content:"";position:absolute;inset:1px;z-index:-1;
  background:linear-gradient(180deg,var(--panel-2),var(--panel) 40%,#080c14);
  clip-path:polygon(var(--cut-in) 0,calc(100% - var(--cut-in)) 0,100% var(--cut-in),100% calc(100% - var(--cut-in)),calc(100% - var(--cut-in)) 100%,var(--cut-in) 100%,0 calc(100% - var(--cut-in)),0 var(--cut-in));
}
.p-body{height:100%;display:flex;flex-direction:column;min-height:0;padding:1rem 1rem 1.1rem;overflow:hidden}
.sec{
  display:flex;align-items:center;gap:.55rem;flex:none;margin:.1rem 0 .65rem;
  font:500 .6rem var(--f-mono);letter-spacing:.3em;color:var(--mut);
}
.sec::before{content:"";width:.42rem;height:.42rem;background:var(--acc);box-shadow:0 0 .6rem var(--acc)}
.sec::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--steel-2),transparent)}
.sec i{order:3;font-size:.5rem;letter-spacing:.2em;color:var(--mut-2)}

/* ============================================================
   ZONE CENTRALE
   ============================================================ */
.stage-panel .p-body{padding:.85rem 1rem 1rem}
.stage-hud{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex:none;margin-bottom:.65rem;font-size:.6rem;letter-spacing:.26em;color:var(--mut)}
.hud-mode{display:flex;align-items:center;gap:.6rem;min-width:0}
.hud-mode i{width:.45rem;height:.45rem;flex:none;border:1px solid var(--acc);transform:rotate(45deg);background:rgba(var(--acc-rgb),.35)}
.hud-mode b{font-weight:500;color:var(--acc);white-space:nowrap}
.hud-mode em{color:var(--mut-2);font-size:.5rem;letter-spacing:.2em;white-space:nowrap}
.pips{display:flex;gap:.3rem;flex:none}
.pips i{width:2.3rem;height:.32rem;background:rgba(150,172,210,.14);transform:skewX(-30deg);transition:.4s}
.pips i.done{background:var(--acc-lo)}
.pips i.cur{background:var(--acc);box-shadow:0 0 .7rem var(--acc);animation:blink 1.2s steps(2) infinite}
.hud-counter{min-width:12rem;text-align:right;color:var(--txt);white-space:nowrap}
.hud-counter b{font:600 1.1rem var(--f-head);color:var(--acc);letter-spacing:.1em;margin-left:.35rem}
.hud-counter.bump{animation:bump .4s}
@keyframes bump{40%{transform:scale(1.12);text-shadow:0 0 1rem var(--acc)}}

.stage{position:relative;flex:1;min-height:0;overflow:hidden;border:1px solid var(--steel);background:radial-gradient(70% 70% at 50% 50%,#0a1019,#060910 70%,#04060b)}
.grid-bg{
  position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(rgba(var(--acc-rgb),.04) 1px,transparent 1px) 0 0/2.2rem 2.2rem,linear-gradient(90deg,rgba(var(--acc-rgb),.04) 1px,transparent 1px) 0 0/2.2rem 2.2rem;
  -webkit-mask-image:radial-gradient(75% 75% at 50% 50%,#000 20%,transparent 100%);mask-image:radial-gradient(75% 75% at 50% 50%,#000 20%,transparent 100%);
}
.view{position:absolute;inset:0;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .45s,visibility .45s}
.view.on{opacity:1;visibility:visible;pointer-events:auto;animation:viewIn .8s ease-out}
@keyframes viewIn{0%{opacity:0;filter:brightness(2.2) blur(.2rem)}15%{opacity:1}22%{opacity:.35}32%{opacity:1}100%{filter:none}}

/* ---------- scope ---------- */
.scope{position:absolute;left:50%;top:50%;width:var(--S);height:var(--S);margin:calc(var(--S) / -2) 0 0 calc(var(--S) / -2)}
.ring{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}
.ring-a{animation:spin 80s linear infinite;filter:drop-shadow(0 0 1rem rgba(var(--acc-rgb),.32))}
.ring-b{opacity:.25;animation:spinb 120s linear infinite}
@keyframes spinb{from{transform:scale(1.07) rotate(0)}to{transform:scale(1.07) rotate(-360deg)}}
.ticks{position:absolute;inset:11%;border-radius:50%;pointer-events:none;border:1px dashed rgba(var(--acc-rgb),.26);animation:spin 170s linear infinite}
.scope-inner{
  position:absolute;inset:14.5%;border-radius:50%;overflow:hidden;
  background:radial-gradient(circle at 50% 45%,#10141c,#06080d 80%);
  box-shadow:0 0 0 1px rgba(var(--acc-rgb),.45),0 0 2.4rem rgba(var(--acc-rgb),.2),inset 0 0 3rem rgba(0,0,0,.9);
}
.scope.mic .scope-inner{box-shadow:0 0 0 1px rgba(var(--acc-rgb),.85),0 0 3rem rgba(var(--acc-rgb),.32),inset 0 0 3rem rgba(0,0,0,.9)}
.scope.use-cursor,.scope.use-cursor *{cursor:none}
.zoom-stack{position:absolute;inset:0;will-change:filter}
.layer{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:contain;transform-origin:50% 50%;will-change:transform,opacity;pointer-events:none}
.layer.dish{width:97%;height:97%;left:1.5%;top:1.5%;filter:brightness(.6) saturate(1.1)}
.layer.cells,.layer.helix{opacity:0}
.layer.helix img{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;transition:opacity .35s}
.helix .h-broken{opacity:0}
.helix.revealed .h-intact{opacity:0}
.helix.revealed .h-broken{opacity:1}
.breaks .brk{position:absolute;width:11%;height:11%;margin:-5.5% 0 0 -5.5%;opacity:0;transform:scale(1.8);pointer-events:none;
  transition:opacity .4s calc(var(--i) * .14s + .3s),transform .45s calc(var(--i) * .14s + .3s) cubic-bezier(.2,1.4,.4,1)}
.helix.revealed .brk{opacity:1;transform:none}
.brk::before,.brk::after{
  content:"";position:absolute;inset:0;border:2px solid var(--acc);
  -webkit-mask:linear-gradient(#000 0 0) top left/30% 30% no-repeat,linear-gradient(#000 0 0) top right/30% 30% no-repeat,linear-gradient(#000 0 0) bottom left/30% 30% no-repeat,linear-gradient(#000 0 0) bottom right/30% 30% no-repeat;
  mask:linear-gradient(#000 0 0) top left/30% 30% no-repeat,linear-gradient(#000 0 0) top right/30% 30% no-repeat,linear-gradient(#000 0 0) bottom left/30% 30% no-repeat,linear-gradient(#000 0 0) bottom right/30% 30% no-repeat;
}
.brk::after{animation:ping 1.8s ease-out infinite}
.residues .res{position:absolute;width:15%;height:15%;margin:-7.5% 0 0 -7.5%;opacity:0;pointer-events:none;transform:scale(.4);transition:opacity .5s .5s,transform .6s .5s cubic-bezier(.2,1.4,.4,1)}
.helix.revealed .res{opacity:1;transform:none;pointer-events:auto;cursor:help}
.res .halo{position:absolute;inset:-20%;border-radius:50%;background:radial-gradient(circle,rgba(255,150,40,.55),rgba(255,110,10,.14) 55%,transparent 70%);animation:halo 2.2s ease-in-out infinite}
.res .dot{position:absolute;width:.34rem;height:.34rem;border-radius:50%;background:#ffb347;box-shadow:0 0 .5rem 1px #ff8a1f,0 0 1.1rem #ff6a00;animation:jit 2.4s ease-in-out infinite}
.res .hz{position:absolute;left:50%;top:-52%;width:62%;margin-left:-31%;filter:drop-shadow(0 0 .5rem var(--acc));animation:float 1.8s ease-in-out infinite}
@keyframes halo{50%{transform:scale(1.25);opacity:.65}}
@keyframes jit{25%{transform:translate(.15rem,-.1rem)}50%{transform:translate(-.12rem,.14rem)}75%{transform:translate(.1rem,.1rem)}}

.particles{position:absolute;inset:0}
.particle{position:absolute;left:0;top:0;will-change:transform}
.particle::before{content:"";position:absolute;inset:-22%;border-radius:50%;pointer-events:none;background:radial-gradient(circle,rgba(6,3,0,.82) 48%,rgba(6,3,0,.35) 66%,rgba(6,3,0,0) 76%)}
.particle img{position:relative;width:100%;height:100%;object-fit:contain;pointer-events:none;
  filter:drop-shadow(0 0 2px #fff3d6) drop-shadow(0 0 .55rem rgba(255,190,90,.95)) drop-shadow(0 0 1.1rem rgba(var(--acc-rgb),.6))}
.particle::after{
  content:"";position:absolute;inset:-18%;border-radius:50%;pointer-events:none;opacity:0;transition:opacity .15s;
  background:conic-gradient(var(--acc-hi) calc(var(--c,0) * 360deg),rgba(var(--acc-rgb),.16) 0);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));
  mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));
}
.particle.near::after{opacity:1}
.particle.near img{filter:drop-shadow(0 0 3px #fff) drop-shadow(0 0 1rem #ffcf8a) drop-shadow(0 0 1.6rem var(--acc))}

.reticle{position:absolute;inset:8%;pointer-events:none;opacity:0;transition:opacity .4s}
.reticle img{width:100%;height:100%;object-fit:contain;opacity:.6;animation:retic 4s ease-in-out infinite}
.scope.mic .reticle{opacity:1}
@keyframes retic{50%{transform:scale(1.04);opacity:.4}}
.aperture{position:absolute;inset:0;border-radius:50%;pointer-events:none;opacity:.55;transition:opacity .6s;
  background:radial-gradient(circle,transparent 52%,rgba(0,0,0,.35) 66%,rgba(0,0,0,.92) 74%)}
.scope.mic .aperture{opacity:1}
.scan-line{position:absolute;left:0;right:0;height:22%;top:-25%;pointer-events:none;background:linear-gradient(180deg,transparent,rgba(var(--acc-rgb),.12),transparent);animation:scan 5.5s linear infinite}
@keyframes scan{to{top:105%}}
.iris{position:absolute;inset:0;border-radius:50%;pointer-events:none}
.iris.on{animation:iris .8s cubic-bezier(.6,0,.3,1)}
@keyframes iris{0%{box-shadow:inset 0 0 0 0 #000}45%{box-shadow:inset 0 0 0 calc(var(--S) * .4) #000}60%{box-shadow:inset 0 0 0 calc(var(--S) * .4) #000}100%{box-shadow:inset 0 0 0 0 #000}}
.glitch-flash{position:absolute;inset:0;pointer-events:none;opacity:0;background:rgba(255,200,130,.5);mix-blend-mode:screen}
.glitch-flash.on{animation:gflash .75s steps(1)}
@keyframes gflash{0%{opacity:.9}10%{opacity:0}20%{opacity:.7;transform:translateX(-4%)}30%{opacity:0}40%{opacity:.5;transform:translateX(3%)}55%{opacity:0}65%{opacity:.35}100%{opacity:0}}
.scope.glitch .scope-inner{animation:jolt .75s steps(1)}
@keyframes jolt{15%{transform:translate(-.5rem,.1rem)}30%{transform:translate(.4rem,-.15rem)}45%{transform:translate(-.2rem,0)}60%{transform:translate(.15rem,.1rem)}100%{transform:none}}
.scale-bar{position:absolute;left:50%;bottom:17.5%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:.2rem;pointer-events:none;opacity:0;transition:opacity .4s}
.scale-bar i{width:4.5rem;height:.4rem;border:1px solid var(--acc-hi);border-top:0}
.scale-bar span{font-size:.56rem;letter-spacing:.2em;color:var(--acc-hi);text-shadow:0 0 .4rem #000}
.scope.mic .scale-bar{opacity:.9}

/* ---------- réservoir ---------- */
.reservoir{position:absolute;right:2.2rem;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center;gap:.6rem;z-index:3;transition:opacity .5s,transform .6s}
.r-body{display:flex;align-items:flex-end;gap:.7rem}
.r-tube{position:relative;height:12.5rem}
.r-tube img{height:100%;width:auto}
.r-empty{filter:grayscale(1) brightness(.32) contrast(1.2)}
.r-full{position:absolute;left:0;top:0;clip-path:inset(calc((1 - var(--fill,0)) * 86% + 12%) 0 0 0);filter:brightness(1.15) drop-shadow(0 0 .9rem rgba(var(--acc-rgb),.75));transition:clip-path .7s cubic-bezier(.2,.8,.2,1)}
.r-gauge{display:flex;flex-direction:column-reverse;gap:.22rem;height:11.4rem;padding-bottom:.55rem}
.r-gauge i{width:.8rem;flex:1;background:rgba(150,172,210,.1);border:1px solid rgba(150,172,210,.14);transition:.35s}
.r-gauge i.on{background:var(--acc);border-color:var(--acc-hi);box-shadow:0 0 .7rem rgba(var(--acc-rgb),.8)}
.r-count{font:600 1.35rem var(--f-head);letter-spacing:.12em;color:var(--mut)}
.r-count b{color:var(--acc);font-weight:600}
.reservoir.pulse .r-tube{animation:tubePulse .5s}
@keyframes tubePulse{30%{transform:scale(1.06);filter:brightness(1.7)}}
.reservoir.dim{opacity:.16;transform:translateY(-50%) translateX(2rem)}
.reservoir.gone{opacity:0;pointer-events:none;transform:translateY(-50%) translateX(3rem)}

/* ---------- microscope : barre de zoom ---------- */
.mic-panel{
  --cut:.6rem;position:absolute;left:1.3rem;bottom:1.2rem;width:17rem;z-index:4;padding:.85rem 1rem .8rem;
  background:rgba(6,9,15,.9);border:1px solid var(--steel-2);
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  opacity:0;visibility:hidden;transform:translateY(.8rem);transition:.45s;
}
.mic-panel.show{opacity:1;visibility:visible;transform:none}
.mic-panel.locked{pointer-events:none}
.mic-panel.locked .zoom-bar{opacity:.4}
.mag-read{display:flex;align-items:baseline;gap:.2rem;line-height:1}
.mag-read i{font:500 1.2rem var(--f-head);color:var(--acc-lo)}
.mag-read b{font:700 2.6rem var(--f-head);color:var(--acc);letter-spacing:.03em;text-shadow:0 0 1.1rem rgba(var(--acc-rgb),.45);font-variant-numeric:tabular-nums;min-width:3.2ch}
.mag-read em{margin-left:auto;font-size:.56rem;letter-spacing:.2em;color:var(--mut-2)}
.mag-read em.ok{color:var(--acc)}
.zoom-bar{position:relative;margin-top:.8rem;height:2rem}
.zoom-target{position:absolute;left:calc(.75rem + (100% - 1.5rem) * .801);top:.15rem;bottom:.15rem;width:2px;margin-left:-1px;background:var(--acc-hi);box-shadow:0 0 .6rem var(--acc);pointer-events:none}
.zoom-target::before{content:"▼";position:absolute;top:-.7rem;left:50%;transform:translateX(-50%);font-size:.5rem;color:var(--acc)}
#zoomRange{-webkit-appearance:none;appearance:none;position:relative;z-index:1;width:100%;height:2rem;background:transparent;cursor:pointer;touch-action:none}
#zoomRange:disabled{cursor:not-allowed}
#zoomRange::-webkit-slider-runnable-track{height:.4rem;background:linear-gradient(90deg,var(--acc) var(--p,0%),rgba(150,172,210,.2) var(--p,0%));box-shadow:0 0 .6rem rgba(var(--acc-rgb),.25)}
#zoomRange::-webkit-slider-thumb{
  -webkit-appearance:none;width:1.5rem;height:1.9rem;margin-top:-.75rem;background:var(--txt);border:0;
  clip-path:polygon(0 .35rem,.35rem 0,100% 0,100% calc(100% - .35rem),calc(100% - .35rem) 100%,0 100%);
  box-shadow:0 0 1rem var(--acc);
}
#zoomRange::-moz-range-track{height:.4rem;background:rgba(150,172,210,.2)}
#zoomRange::-moz-range-progress{height:.4rem;background:var(--acc)}
#zoomRange::-moz-range-thumb{width:1.5rem;height:1.9rem;border:0;border-radius:0;background:var(--txt);box-shadow:0 0 1rem var(--acc)}
.zoom-lab{display:flex;justify-content:space-between;align-items:flex-start;margin-top:.2rem;font-size:.5rem;letter-spacing:.2em;color:var(--mut-2)}
.zoom-lab span:nth-child(2){color:var(--mut);text-align:center}
.zoom-lab em{display:block;font-size:.42rem;letter-spacing:.14em;color:var(--mut-2)}

/* ============================================================
   RECONNEXION
   ============================================================ */
.view-repair{display:flex;flex-direction:column;padding:1rem 1.6rem 1.1rem}
.board{position:relative;flex:1;min-height:0}
.board-bg{position:absolute;left:50%;top:50%;height:112%;width:auto;transform:translate(-50%,-50%);opacity:.38;pointer-events:none;filter:drop-shadow(0 0 1.5rem rgba(var(--acc-rgb),.3))}
.col{position:absolute;top:0;bottom:0;display:flex;flex-direction:column;justify-content:space-around;padding:.3rem 0;z-index:2}
.col-ends{left:0;width:42%;align-items:flex-start}
.col-sockets{right:0;width:42%;align-items:flex-end}
.col-sockets.shuffling .sock{animation:shuffleIn .45s ease-out}
@keyframes shuffleIn{0%{opacity:0;transform:translateX(1.2rem)}100%{opacity:1;transform:none}}
.end,.sock{display:flex;align-items:center;gap:.75rem;height:4rem}
.e-meta{display:flex;flex-direction:column;gap:.15rem;min-width:5.4rem;font-size:.54rem;letter-spacing:.2em;color:var(--mut)}
.e-meta b{font:500 .95rem var(--f-head);letter-spacing:.14em;color:var(--txt)}
.e-meta b em{display:block;font:400 .44rem var(--f-mono);letter-spacing:.16em;color:var(--mut-2)}
.sock .e-meta{align-items:flex-end;text-align:right}
.hz-row{display:flex;align-items:center;gap:.35rem;color:var(--acc);min-height:1.1rem}
.hz{width:1.15rem;height:1.15rem;object-fit:contain;filter:drop-shadow(0 0 .45rem var(--acc));animation:float 2s ease-in-out infinite;cursor:help}
.chip{
  --cut:.5rem;--cut-in:calc(var(--cut) - .42px);
  position:relative;isolation:isolate;flex:none;width:6.4rem;height:3.5rem;display:flex;align-items:center;justify-content:center;gap:.6rem;
  background:var(--steel-2);clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));transition:background .2s,transform .15s;
}
.chip::before{content:"";position:absolute;inset:1px;z-index:-1;background:linear-gradient(180deg,#0f1623,#09101a);
  clip-path:polygon(var(--cut-in) 0,100% 0,100% calc(100% - var(--cut-in)),calc(100% - var(--cut-in)) 100%,0 100%,0 var(--cut-in));transition:.2s}
.chip svg{width:1.5rem;height:1.5rem;fill:rgba(var(--acc-rgb),.18);stroke:var(--acc);stroke-width:1.6;stroke-linejoin:round;filter:drop-shadow(0 0 .35rem rgba(var(--acc-rgb),.7))}
.chip .base{font:700 1.95rem var(--f-head);line-height:1;color:var(--txt)}
.sock .chip{clip-path:polygon(0 0,calc(100% - var(--cut)) 0,100% var(--cut),100% 100%,var(--cut) 100%,0 calc(100% - var(--cut)))}
.sock .chip::before{clip-path:polygon(0 0,calc(100% - var(--cut-in)) 0,100% var(--cut-in),100% 100%,var(--cut-in) 100%,0 calc(100% - var(--cut-in)))}
.port{position:relative;flex:none;width:1.5rem;height:1.5rem;border-radius:50%;border:2px solid var(--acc);background:#0a0f18;box-shadow:0 0 .9rem rgba(var(--acc-rgb),.55);transition:.2s}
.port::after{content:"";position:absolute;inset:.32rem;border-radius:50%;background:var(--acc);transition:.2s}
.sock .port{border-color:var(--steel-2);box-shadow:none}
.sock .port::after{background:var(--steel-2)}
.end:not(.linked){cursor:grab;touch-action:none}
.end:not(.linked):hover .chip{background:var(--acc)}
.end:not(.linked):hover .chip::before{background:linear-gradient(180deg,#1b130d,#0e121b)}
.end:not(.linked):hover .port{transform:scale(1.2)}
.end.dragging{cursor:grabbing}
.end.dragging .chip{background:var(--acc);transform:scale(1.04)}
.end.dragging .port::after{background:#fff}
.sock.target .chip{background:var(--acc)}
.sock.target .port{border-color:var(--acc);box-shadow:0 0 1.2rem var(--acc);transform:scale(1.25)}
.sock.target .port::after{background:var(--acc)}
.end.linked .chip,.sock.linked .chip{background:var(--acc)}
.end.linked .chip::before,.sock.linked .chip::before{background:linear-gradient(180deg,rgba(var(--acc-rgb),.38),rgba(var(--acc-rgb),.12))}
.end.linked .chip svg,.sock.linked .chip svg{fill:var(--acc);stroke:var(--acc-hi)}
.sock.linked .port{border-color:var(--acc);box-shadow:0 0 1.1rem var(--acc)}
.sock.linked .port::after{background:var(--acc)}
.end.linked .e-meta b,.sock.linked .e-meta b{color:var(--acc-hi)}
.end.err .chip,.sock.err .chip{background:var(--bad)}
.end.err .chip::before,.sock.err .chip::before{background:linear-gradient(180deg,rgba(var(--bad-rgb),.35),rgba(var(--bad-rgb),.1))}
.end.err .port,.sock.err .port{border-color:var(--bad);box-shadow:0 0 1rem var(--bad)}
.end.err,.sock.err{animation:shake .35s}
.end.pop .chip,.sock.pop .chip{animation:chipPop .55s}
@keyframes shake{20%{transform:translateX(-.35rem)}60%{transform:translateX(.35rem)}}
@keyframes chipPop{30%{transform:scale(1.16);filter:drop-shadow(0 0 1.4rem var(--acc)) brightness(1.5)}}
.wires{position:absolute;inset:0;width:100%;height:100%;z-index:3;pointer-events:none;overflow:visible}
.wire{fill:none;stroke-linecap:round}
.wire.live{stroke:var(--acc-hi);stroke-width:3;stroke-dasharray:.7rem .4rem;filter:drop-shadow(0 0 .45rem var(--acc));animation:flow .6s linear infinite}
.wire.ok{stroke:var(--acc);stroke-width:3.5;filter:drop-shadow(0 0 .6rem var(--acc))}
.wire.core{stroke:#fff3de;stroke-width:1.2;opacity:.9}
.wire.bad{stroke:var(--bad);filter:drop-shadow(0 0 .6rem var(--bad))}
.wires .orb{fill:#fff;filter:drop-shadow(0 0 .5rem var(--acc))}
.wires text{font:700 .78rem var(--f-mono);fill:var(--acc-hi);letter-spacing:.12em;text-anchor:middle;paint-order:stroke;stroke:#05070c;stroke-width:4px}
.wires .rung{fill:#0a0f18;stroke:var(--acc);stroke-width:1.2}
.wire-flow{stroke-dasharray:.9rem .7rem;animation:flow 1.1s linear infinite}
@keyframes flow{to{stroke-dashoffset:-1.6rem}}
.spark{position:absolute;width:.35rem;height:.35rem;border-radius:50%;background:#ffd9a8;box-shadow:0 0 .6rem var(--acc),0 0 1.2rem var(--acc);pointer-events:none;z-index:6}
.board-done{position:absolute;left:50%;bottom:5.2rem;transform:translate(-50%,1rem);text-align:center;z-index:5;opacity:0;pointer-events:none;
  padding:.55rem 1.8rem;background:rgba(7,10,17,.92);border:1px solid var(--acc);box-shadow:0 0 2rem rgba(var(--acc-rgb),.35);transition:.6s}
.board-done b{display:block;font:600 1.2rem var(--f-head);letter-spacing:.22em;color:var(--acc)}
.board-done em{font-size:.5rem;letter-spacing:.22em;color:var(--mut)}
.board-done.on{opacity:1;transform:translate(-50%,0)}
.launch-wrap{position:absolute;left:50%;bottom:.8rem;width:22rem;z-index:6;transform:translate(-50%,1rem);opacity:0;visibility:hidden;pointer-events:none;transition:.5s}
.launch-wrap.show{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%,0)}
.launch-wrap .cta{width:100%;height:3.4rem;animation:pulse 1.6s ease-in-out infinite}

/* ============================================================
   BOUTONS
   ============================================================ */
.cta{
  --cut:.7rem;--cut-in:calc(var(--cut) - .42px);
  position:relative;isolation:isolate;overflow:hidden;display:flex;align-items:center;justify-content:center;gap:.7rem;
  height:3.2rem;padding:0 1rem;font:600 1.02rem var(--f-head);letter-spacing:.14em;color:#1a0e00;background:var(--acc);
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  transition:filter .2s,transform .15s;
}
.cta span{display:flex;flex-direction:column;align-items:center;line-height:1.05}
.cta span em{font:500 .46rem var(--f-mono);letter-spacing:.24em;opacity:.65;margin-top:.15rem}
.cta img{width:1.8rem;height:1.8rem;object-fit:contain;flex:none;filter:brightness(0) opacity(.75)}
.cta::after{content:"";position:absolute;top:0;bottom:0;width:40%;left:-60%;z-index:1;background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-20deg)}
.cta:not(:disabled):hover{filter:brightness(1.12) drop-shadow(0 0 .7rem rgba(var(--acc-rgb),.6))}
.cta:not(:disabled):hover::after{animation:shine .7s}
.cta:not(:disabled):active{transform:translateY(1px) scale(.99)}
.cta.ghost{color:var(--acc)}
.cta.ghost::before{content:"";position:absolute;inset:1px;z-index:-1;background:#0a0f19;transition:background .2s;
  clip-path:polygon(var(--cut-in) 0,100% 0,100% calc(100% - var(--cut-in)),calc(100% - var(--cut-in)) 100%,0 100%,0 var(--cut-in))}
.cta.ghost:hover::before{background:#1a1109}
@keyframes shine{to{left:130%}}
@keyframes pulse{50%{filter:drop-shadow(0 0 1rem rgba(var(--acc-rgb),.75)) brightness(1.1)}}

/* ============================================================
   SÉQUENÇAGE
   ============================================================ */
.view-seq{display:grid;grid-template-columns:30% minmax(0,1fr) 31%;background:radial-gradient(60% 70% at 40% 50%,rgba(var(--acc-rgb),.07),transparent 70%)}
.seq-helix{width:100%;height:100%;display:block}
.seq-mid{display:flex;flex-direction:column;justify-content:center;gap:.9rem;padding:2rem 1.6rem;min-width:0}
.seq-pct{display:flex;align-items:baseline;gap:.4rem;line-height:.9}
.seq-pct b{font:700 7.2rem var(--f-head);color:var(--txt);text-shadow:0 0 2.4rem rgba(var(--acc-rgb),.5);font-variant-numeric:tabular-nums}
.seq-pct span{font:500 2.2rem var(--f-head);color:var(--acc)}
.seq-msg b{display:block;font:500 1.4rem var(--f-head);letter-spacing:.14em;text-transform:uppercase;color:var(--acc);min-height:1.9rem}
.seq-msg em{font-size:.6rem;letter-spacing:.26em;color:var(--mut)}
.seq-bar{height:.5rem;background:rgba(150,172,210,.12);border:1px solid var(--steel);position:relative;overflow:hidden}
.seq-bar i{position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,var(--acc-lo),var(--acc),var(--acc-hi));box-shadow:0 0 1.2rem var(--acc)}
.seq-bar::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 .6rem,rgba(0,0,0,.55) .6rem .7rem)}
.seq-list{list-style:none;display:flex;flex-direction:column;gap:.32rem;margin-top:.3rem}
.seq-list li{display:flex;align-items:center;gap:.7rem;font-size:.64rem;letter-spacing:.14em;color:var(--mut-2);transition:.3s}
.seq-list li::before{content:"";width:.55rem;height:.55rem;border:1px solid var(--mut-2);flex:none;transition:.3s}
.seq-list li.cur{color:var(--txt)}
.seq-list li.cur::before{border-color:var(--acc);background:rgba(var(--acc-rgb),.4);animation:blink .9s steps(2) infinite}
.seq-list li.done{color:var(--acc-hi)}
.seq-list li.done::before{border-color:var(--acc);background:var(--acc);box-shadow:0 0 .6rem var(--acc)}
.seq-side{display:flex;flex-direction:column;gap:.8rem;padding:1.6rem 1.4rem 1.4rem 0;min-height:0;min-width:0}
.cand{display:flex;gap:.9rem;padding:.75rem;border:1px solid var(--steel-2);background:rgba(4,6,10,.7);transition:border-color .3s,box-shadow .3s}
.cand-photo{position:relative;width:6.4rem;height:7.2rem;flex:none;overflow:hidden;border:1px solid var(--steel);background:radial-gradient(circle at 50% 40%,rgba(var(--acc-rgb),.14),transparent 65%),#06080d}
.cand-photo img{position:absolute;left:6%;bottom:0;width:88%;filter:grayscale(1) brightness(.6) contrast(1.3)}
.cand-scan{position:absolute;left:0;right:0;height:2px;top:0;background:var(--acc-hi);box-shadow:0 0 .8rem var(--acc);animation:candScan 1.1s linear infinite}
@keyframes candScan{to{top:100%}}
.cand-info{display:flex;flex-direction:column;justify-content:center;gap:.25rem;min-width:0;flex:1}
.cand-info span{font-size:.54rem;letter-spacing:.24em;color:var(--mut)}
.cand-info span em{margin-left:.5rem;color:var(--mut-2)}
.cand-info b{font:600 1.6rem var(--f-head);letter-spacing:.12em;color:var(--txt);font-variant-numeric:tabular-nums}
.cand-info strong{font:500 1.05rem var(--f-head);color:var(--mut);letter-spacing:.08em;font-variant-numeric:tabular-nums}
.cand-bar{display:block;height:.3rem;background:rgba(150,172,210,.14);overflow:hidden}
.cand-bar u{display:block;height:100%;width:0;background:var(--mut)}
.cand.locked{border-color:var(--acc);box-shadow:0 0 1.6rem rgba(var(--acc-rgb),.35),inset 0 0 1.4rem rgba(var(--acc-rgb),.12);animation:lockFlash .6s steps(2) 2}
.cand.locked .cand-photo img{filter:sepia(1) saturate(4) hue-rotate(-12deg) brightness(.95) drop-shadow(0 0 .8rem var(--acc))}
.cand.locked .cand-scan{display:none}
.cand.locked strong{color:var(--acc)}
.cand.locked .cand-bar u{background:var(--acc);box-shadow:0 0 .6rem var(--acc)}
@keyframes lockFlash{50%{background:rgba(var(--acc-rgb),.18)}}
.base-stream{flex:1;min-height:0;width:100%;display:block;border:1px solid var(--steel);background:rgba(0,0,0,.25)}

/* ============================================================
   DOSSIER — révélation cinématique
   ============================================================ */
.view-dossier{display:flex;flex-direction:column;padding:1.1rem 1.5rem 1.1rem;gap:.8rem;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(var(--acc-rgb),.5) transparent}
.dos-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;font-size:.58rem;letter-spacing:.26em;color:var(--mut);flex:none}
.dos-tag{display:flex;align-items:center;gap:.6rem;color:var(--acc)}
.dos-tag i{width:.5rem;height:.5rem;background:var(--acc);box-shadow:0 0 .8rem var(--acc);animation:blink 1.5s steps(2) infinite}
.dos-tag em{margin-left:.8rem;color:var(--mut-2)}
.dos-tag em b{color:var(--txt);font-weight:500}
.dos-grid{display:grid;grid-template-columns:14rem minmax(0,1fr);gap:1.6rem}
.dos-portrait{position:relative;align-self:start;height:17.5rem;display:flex;align-items:flex-end;justify-content:center;overflow:hidden;
  border:1px solid var(--steel-2);background:radial-gradient(circle at 50% 38%,rgba(var(--acc-rgb),.16),transparent 65%),#080b12}
.dos-portrait .fp{position:absolute;left:50%;top:50%;height:90%;width:auto;transform:translate(-50%,-50%);opacity:.13}
.dos-portrait .sil{position:relative;width:88%;filter:drop-shadow(0 0 1.2rem rgba(var(--acc-rgb),.5))}
.p-scan{position:absolute;left:0;right:0;height:2px;top:0;opacity:0;background:var(--acc-hi);box-shadow:0 0 1rem var(--acc);pointer-events:none;z-index:2}
.dos-portrait .match{position:absolute;left:0;right:0;bottom:0;padding:.35rem;text-align:center;font:600 .95rem var(--f-head);letter-spacing:.2em;background:rgba(var(--acc-rgb),.92);color:#1a0e00}
.pc{position:absolute;width:1rem;height:1rem;border:0 solid var(--acc)}
.pc.tl{left:.3rem;top:.3rem;border-width:2px 0 0 2px}.pc.tr{right:.3rem;top:.3rem;border-width:2px 2px 0 0}
.pc.bl{left:.3rem;bottom:2rem;border-width:0 0 2px 2px}.pc.br{right:.3rem;bottom:2rem;border-width:0 2px 2px 0}
.stamp{
  position:absolute;left:50%;top:44%;z-index:3;padding:.3rem 1rem .25rem;text-align:center;pointer-events:none;
  border:.22rem solid rgba(var(--bad-rgb),.85);color:rgba(var(--bad-rgb),.92);
  transform:translate(-50%,-50%) rotate(-14deg);opacity:0;
  -webkit-mask-image:radial-gradient(circle at 30% 40%,#000 60%,rgba(0,0,0,.6) 61%,#000 72%);
  mask-image:radial-gradient(circle at 30% 40%,#000 60%,rgba(0,0,0,.6) 61%,#000 72%);
  box-shadow:0 0 1.2rem rgba(var(--bad-rgb),.35),inset 0 0 .8rem rgba(var(--bad-rgb),.25);
  background:rgba(20,4,4,.35);
}
.stamp b{display:block;font:700 2rem var(--f-head);letter-spacing:.18em;line-height:1}
.stamp em{display:block;font:600 .7rem var(--f-mono);letter-spacing:.4em}
.stamp.on{animation:stamp .42s cubic-bezier(.2,1.5,.35,1) forwards}
@keyframes stamp{0%{opacity:0;transform:translate(-50%,-50%) rotate(-24deg) scale(2.8)}60%{opacity:1}100%{opacity:1;transform:translate(-50%,-50%) rotate(-14deg) scale(1)}}
.dos-main{min-width:0;display:flex;flex-direction:column}
.dos-name{display:flex;align-items:flex-end;gap:1.2rem;flex-wrap:wrap;min-height:4rem}
.dos-name h3{font:700 4rem var(--f-head);line-height:.95;letter-spacing:.04em;text-transform:uppercase;color:var(--txt);text-shadow:0 0 1.6rem rgba(var(--acc-rgb),.3)}
.dos-name h3.typing::after{content:"▌";color:var(--acc);animation:blink .5s steps(2) infinite;margin-left:.1rem}
.dos-id{font:600 1.5rem var(--f-head);letter-spacing:.14em;color:var(--acc);padding:.15rem .7rem;border:1px solid var(--acc);margin-bottom:.35rem;opacity:0}
.dos-id.on{opacity:1;animation:lockFlash .5s steps(2) 2}
.dos-ru-name{font-size:.66rem;letter-spacing:.22em;color:var(--mut);margin:.35rem 0 .8rem;min-height:1rem}
.dos-ru-name b{color:var(--acc);font-weight:500}
.dos-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.12fr);gap:1.5rem}
.dos-fields{display:flex;flex-direction:column}
.dos-fields .row{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;padding:.4rem 0;border-bottom:1px solid var(--steel);opacity:0;transform:translateX(-.5rem);transition:opacity .25s,transform .25s}
.dos-fields .row:first-child{border-top:1px solid var(--steel)}
.dos-fields .row.on{opacity:1;transform:none}
.dos-fields dt{font-size:.56rem;letter-spacing:.22em;color:var(--mut);text-transform:uppercase}
.dos-fields dt em{display:block;font-size:.44rem;letter-spacing:.14em;color:var(--mut-2);margin-top:.08rem}
.dos-fields dd{font:500 .98rem var(--f-head);letter-spacing:.08em;color:var(--txt);text-align:right}
.dos-fields dd small{display:block;font:400 .5rem var(--f-mono);letter-spacing:.12em;color:var(--mut-2);margin-top:.05rem}
.dos-fields dd.acc{color:var(--acc)}
.aff-logo{display:inline-block;height:1.05rem;width:auto;vertical-align:-.15rem;margin-right:.5rem}
.tox{position:relative;align-self:start;padding:.85rem 1rem .7rem;opacity:0;
  background:linear-gradient(180deg,rgba(var(--acc-rgb),.08),rgba(var(--acc-rgb),.02));box-shadow:0 0 1.6rem rgba(var(--acc-rgb),.14)}
.tox.show{opacity:1;transition:opacity .3s}
.tox-frame{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}
.tox-frame rect{fill:none;stroke:var(--acc);stroke-width:1.2;vector-effect:non-scaling-stroke;stroke-dasharray:100;stroke-dashoffset:100}
.tox.show .tox-frame rect{animation:drawRect 1s cubic-bezier(.6,0,.3,1) forwards}
@keyframes drawRect{to{stroke-dashoffset:0}}
.tox header{display:flex;align-items:center;gap:.8rem;padding-bottom:.55rem;border-bottom:1px solid rgba(var(--acc-rgb),.35);margin-bottom:.3rem}
.tox header img{width:2.3rem;height:2rem;object-fit:contain;filter:drop-shadow(0 0 .6rem var(--acc));animation:float 2s ease-in-out infinite}
.tox header b{display:block;font:600 1.2rem var(--f-head);letter-spacing:.14em;color:var(--acc)}
.tox header em{font-size:.48rem;letter-spacing:.24em;color:var(--mut)}
.tox ul{list-style:none}
.tox li{padding:.38rem 0;border-bottom:1px dashed rgba(var(--acc-rgb),.22);opacity:0;transform:translateX(-.6rem);font:.7rem/1.4 var(--f-mono);color:#d9d3c7}
.tox li.show{opacity:1;transform:none;transition:.5s}
.tox li span{display:block;font-size:.5rem;letter-spacing:.2em;color:var(--acc);margin-bottom:.1rem}
.tox li span em{color:rgba(var(--acc-rgb),.55);margin-left:.4rem}
.tox li strong{font-weight:500;color:var(--txt)}
.tox li small{display:block;font-size:.56rem;color:var(--mut-2);margin-top:.15rem;line-height:1.35}
.tox li.est strong{color:var(--acc-hi)}
.dos-extra{margin-top:1rem;display:flex;flex-direction:column;gap:.7rem}
.dx-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.6rem}
.dx-card{padding:.55rem .75rem;border:1px solid var(--steel-2);background:rgba(150,172,210,.04);opacity:0;transition:opacity .4s}
.dx-card.on{opacity:1}
.dx-card>span{display:block;font-size:.48rem;letter-spacing:.2em;color:var(--mut)}
.dx-card>span em{display:block;color:var(--mut-2);font-size:.42rem;letter-spacing:.14em}
.dx-card b{display:block;font:500 .95rem var(--f-head);letter-spacing:.06em;margin-top:.25rem;color:var(--txt)}
.dx-card small{display:block;font-size:.48rem;color:var(--mut-2);letter-spacing:.08em}
.dx-str{padding:.6rem .75rem;border:1px solid var(--steel-2);background:rgba(150,172,210,.03)}
.dx-title{display:block;font-size:.5rem;letter-spacing:.22em;color:var(--mut);margin-bottom:.5rem}
.dx-title em{margin-left:.7rem;color:var(--mut-2);font-size:.44rem}
.dx-chips{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:.4rem}
.dx-chips span{padding:.3rem .2rem;text-align:center;font:600 1rem var(--f-head);color:var(--mut-2);border:1px solid var(--steel);transition:.3s}
.dx-chips span.on{color:var(--acc-hi);border-color:rgba(var(--acc-rgb),.35);background:rgba(var(--acc-rgb),.06)}
.dx-chips span em{display:block;font:400 .42rem var(--f-mono);letter-spacing:.1em;color:var(--mut);margin-bottom:.1rem}
.dx-chips span i{color:var(--mut-2);margin:0 .12rem}
.dos-actions{display:flex;gap:.8rem;flex:none;justify-content:flex-end;opacity:0;transform:translateY(.5rem);transition:.5s}
.dos-actions.on{opacity:1;transform:none}
.dos-actions .cta{width:15rem;height:2.9rem}
.dos-portrait .sil,.dos-portrait .fp{clip-path:inset(0 0 100% 0)}
.view-dossier.play .dos-portrait .sil,.view-dossier.play .dos-portrait .fp{animation:silIn 1.1s .25s cubic-bezier(.4,0,.2,1) forwards}
.view-dossier.play .p-scan{animation:pScan 1.1s .25s cubic-bezier(.4,0,.2,1)}
@keyframes silIn{to{clip-path:inset(0 0 0 0)}}
@keyframes pScan{0%{top:0;opacity:1}95%{opacity:1}100%{top:100%;opacity:0}}
.dos-portrait .match{transform:translateY(100%)}
.view-dossier.play .dos-portrait .match{transform:none;transition:transform .4s 1.3s}
/* rendu instantané (dossier restauré) */
.view-dossier.instant .dos-portrait .sil,.view-dossier.instant .dos-portrait .fp{clip-path:none;animation:none}
.view-dossier.instant .dos-portrait .match{transform:none;transition:none}
.view-dossier.instant .stamp{opacity:1;animation:none}
.view-dossier.instant .tox-frame rect{stroke-dashoffset:0;animation:none}

/* ============================================================
   EFFETS / CURSEUR / TOAST
   ============================================================ */
.fx-svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:7;overflow:visible}
.tractor{fill:none;stroke:rgba(255,190,110,.55);stroke-width:5;stroke-linecap:round;filter:drop-shadow(0 0 .5rem var(--acc));opacity:0}
.tractor.core{stroke:#fff2dc;stroke-width:1.4;stroke-dasharray:.35rem .5rem;animation:flow .25s linear infinite}
.beam{fill:none;stroke:var(--acc-hi);stroke-width:2.5;stroke-linecap:round;stroke-dasharray:.8rem .5rem;opacity:0;filter:drop-shadow(0 0 .5rem var(--acc))}
.beam.go{animation:beam .5s ease-out}
@keyframes beam{0%{opacity:1;stroke-dashoffset:0}100%{opacity:0;stroke-dashoffset:-3rem}}
.fx{position:absolute;inset:0;pointer-events:none;z-index:8;overflow:hidden}
.fx .fxp{position:absolute;left:0;top:0;will-change:transform,opacity}
.fx .fxp img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 0 .6rem var(--acc))}
.tool-cursor{position:absolute;left:0;top:0;width:3.6rem;z-index:9;pointer-events:none;opacity:0;transition:opacity .15s;will-change:transform}
.tool-cursor.on{opacity:1}
.tool-cursor img{width:100%;height:auto;filter:drop-shadow(0 0 .6rem var(--acc))}
.tool-cursor.suck img{filter:drop-shadow(0 0 .4rem #fff) drop-shadow(0 0 1rem var(--acc))}
.toast{position:absolute;left:50%;bottom:1.1rem;transform:translate(-50%,.8rem);z-index:12;max-width:80%;padding:.5rem 1.2rem;
  font-size:.64rem;letter-spacing:.2em;text-align:center;color:var(--txt);background:rgba(8,11,18,.94);border:1px solid var(--acc);opacity:0;pointer-events:none;transition:.3s}
.toast.on{opacity:1;transform:translate(-50%,0)}
.toast.bad{border-color:var(--bad);box-shadow:0 0 1.4rem rgba(var(--bad-rgb),.35);color:#ffd3d3}
.reset-overlay{position:absolute;inset:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.4rem;background:rgba(4,6,10,.94);opacity:0;pointer-events:none;transition:opacity .3s}
.reset-overlay b{font:600 2rem var(--f-head);letter-spacing:.3em;color:var(--acc)}
.reset-overlay em{font-size:.6rem;letter-spacing:.3em;color:var(--mut)}
.reset-overlay.on{opacity:1;pointer-events:auto}
.reset-overlay.on b{animation:blink .35s steps(2) infinite}

/* ============================================================
   PANNEAU LATÉRAL
   ============================================================ */
.metrics{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;margin-bottom:1.1rem;flex:none}
.metric{position:relative;padding:.5rem .7rem .55rem;background:rgba(150,172,210,.04);border:1px solid var(--steel);display:flex;flex-direction:column;gap:.12rem;transition:.3s}
.metric>span{font-size:.5rem;letter-spacing:.22em;color:var(--mut)}
.metric>span i{display:block;font-size:.42rem;letter-spacing:.14em;color:var(--mut-2);margin-top:.05rem}
.metric b{font:600 1.4rem var(--f-head);letter-spacing:.06em;color:var(--txt);line-height:1.1}
.metric b small{font-size:.8rem;color:var(--mut);font-weight:500}
.metric b.txt{font-size:.86rem;letter-spacing:.12em;display:flex;align-items:center;flex-wrap:wrap;gap:.1rem .5rem}
.metric b.txt img{width:1.2rem;height:1.05rem;object-fit:contain;opacity:.45;filter:grayscale(1)}
.metric b.txt small{flex-basis:100%;font:400 .44rem var(--f-mono);letter-spacing:.14em;color:var(--mut-2)}
.metric.wide{grid-column:1/-1}
.mbar{display:block;height:3px;background:rgba(150,172,210,.14);margin-top:.28rem;overflow:hidden}
.mbar u{display:block;height:100%;width:0;background:var(--acc);box-shadow:0 0 .6rem var(--acc);transition:width .5s}
.metric.hot{border-color:rgba(var(--acc-rgb),.55);background:rgba(var(--acc-rgb),.07)}
.metric.hot b{color:var(--acc)}
.metric.hot b img{opacity:1;filter:drop-shadow(0 0 .4rem var(--acc))}
.metric.alert{border-color:rgba(var(--acc-rgb),.7);box-shadow:inset 0 0 1.2rem rgba(var(--acc-rgb),.12)}
.metric.alert b{color:var(--acc)}
.metric.alert b img{filter:drop-shadow(0 0 .4rem var(--acc));opacity:1;animation:blink 1.2s steps(2) infinite}
.metric.locked b{color:var(--mut-2)}
.metric.bump{animation:bump .4s}
.progress{margin-bottom:1.1rem;flex:none}
.pg-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.35rem}
.pg-top b{font:700 2rem var(--f-head);color:var(--txt);letter-spacing:.04em;line-height:1}
.pg-top b small{font-size:.9rem;color:var(--acc);margin-left:.15rem}
.pg-top span{font-size:.54rem;letter-spacing:.24em;color:var(--mut)}
.pg-bar{height:.5rem;background:rgba(150,172,210,.12);border:1px solid var(--steel);position:relative;overflow:hidden}
.pg-bar i{position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,var(--acc-lo),var(--acc));box-shadow:0 0 1rem var(--acc)}
.pg-bar::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 calc(20% - 1px),rgba(5,7,12,.9) calc(20% - 1px) 20%)}
.log{flex:1;min-height:0;overflow-y:auto;padding-right:.4rem;display:flex;flex-direction:column;gap:.3rem;scrollbar-width:thin;scrollbar-color:rgba(var(--acc-rgb),.5) transparent}
.log::-webkit-scrollbar{width:4px}
.log::-webkit-scrollbar-thumb{background:rgba(var(--acc-rgb),.5)}
.log .ln{display:grid;grid-template-columns:3.8rem 1fr;gap:.45rem;font-size:.6rem;line-height:1.38;color:#a3abb9;padding-left:.45rem;border-left:2px solid var(--steel-2);animation:lnIn .4s ease-out}
.log .ln time{color:var(--mut-2)}
.log .ln.ok{border-left-color:var(--acc);color:var(--txt)}
.log .ln.warn{border-left-color:var(--acc);color:var(--acc-hi);background:linear-gradient(90deg,rgba(var(--acc-rgb),.11),transparent)}
.log .ln.err{border-left-color:var(--bad);color:#ffb3b3;background:linear-gradient(90deg,rgba(var(--bad-rgb),.11),transparent)}
.log .ln .ru{display:block;font-size:.5rem;letter-spacing:.08em;color:var(--mut-2)}
@keyframes lnIn{from{opacity:0;transform:translateX(.6rem)}to{opacity:1;transform:none}}

/* ============================================================
   DÉMARRAGE / AUTHENTIFICATION
   ============================================================ */
.boot{position:absolute;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:radial-gradient(70% 70% at 50% 45%,#0b1220,#030407 75%);transition:opacity .7s}
.boot.out{opacity:0;pointer-events:none}
.boot.gone{display:none}
.boot-log{position:absolute;left:2.2rem;top:1.8rem;font:.66rem/1.75 var(--f-mono);color:#6f7a8c;white-space:pre;pointer-events:none}
.boot-log .ok{color:var(--acc)}
.boot-log .cur::after{content:"▌";color:var(--acc);animation:blink .5s steps(2) infinite}
.boot-auth{display:flex;flex-direction:column;align-items:center;gap:1.2rem;opacity:0;transform:scale(.96);transition:opacity .6s,transform .6s}
.boot-auth.on{opacity:1;transform:none}
.ba-mark{height:4.2rem;filter:drop-shadow(0 0 1.2rem rgba(var(--acc-rgb),.45))}
.ba-word{height:1.5rem;opacity:.9;margin-bottom:.6rem}
.ba-pad{position:relative;width:11rem;height:11rem;cursor:pointer;touch-action:none;outline:none;border-radius:50%}
.ba-pad::before{content:"";position:absolute;inset:-6%;border-radius:50%;border:1px solid rgba(var(--acc-rgb),.5);animation:ping 2.2s ease-out infinite}
.ba-pad.scanning::before,.ba-pad.done::before{display:none}
.ba-ring{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg);overflow:visible}
.ba-ring circle{fill:none}
.ba-ring .trk{stroke:rgba(150,172,210,.14);stroke-width:3}
.ba-ring .tks{stroke:rgba(var(--acc-rgb),.3);stroke-width:2;stroke-dasharray:1.2 4.9}
.ba-ring .fill{stroke:var(--acc);stroke-width:4;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:100;filter:drop-shadow(0 0 4px var(--acc))}
.ba-pad.denied .fill{stroke:var(--bad)}
.ba-fp{position:absolute;inset:17%;width:66%;height:66%;object-fit:contain;filter:grayscale(.9) brightness(.45);transition:filter .12s}
.ba-pad:hover .ba-fp{filter:grayscale(.6) brightness(.65)}
.ba-scan{position:absolute;left:20%;right:20%;top:20%;height:2px;background:var(--acc-hi);box-shadow:0 0 1rem var(--acc),0 0 2rem var(--acc);opacity:0}
.ba-pad.scanning .ba-scan{opacity:1;animation:fpScan .55s ease-in-out infinite alternate}
@keyframes fpScan{from{top:20%}to{top:80%}}
.ba-cap{text-align:center}
.ba-cap b{display:block;font:500 .95rem var(--f-head);letter-spacing:.34em;color:var(--txt)}
.ba-cap em{font-size:.52rem;letter-spacing:.3em;color:var(--mut-2)}
.ba-hint{font-size:.6rem;letter-spacing:.34em;color:var(--acc);opacity:0;transition:opacity .3s;text-align:center}
.ba-hint em{display:block;font-size:.48rem;letter-spacing:.24em;color:rgba(var(--acc-rgb),.6)}
.ba-hint.on{opacity:1;animation:blink 1s steps(2) 3}
.boot-granted{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;opacity:0;pointer-events:none;
  padding:1rem 3rem;border:1px solid var(--acc);background:rgba(4,6,10,.92);box-shadow:0 0 3rem rgba(var(--acc-rgb),.4)}
.boot-granted b{display:block;font:700 2.6rem var(--f-head);letter-spacing:.3em;color:var(--acc);text-shadow:0 0 1.6rem rgba(var(--acc-rgb),.7)}
.boot-granted em{font-size:.7rem;letter-spacing:.4em;color:var(--acc-hi)}
.boot-granted.on{animation:granted 1s steps(1,end) forwards}
@keyframes granted{0%{opacity:1}8%{opacity:0}16%{opacity:1}24%{opacity:.3}32%{opacity:1}100%{opacity:1}}

/* ============================================================
   GUIDE
   ============================================================ */
.guide{position:absolute;inset:0;z-index:30;display:grid;grid-template-columns:18rem minmax(0,1fr);
  background:radial-gradient(80% 50% at 60% 0,rgba(30,44,86,.35),transparent 70%),linear-gradient(180deg,#090e18,#060911);
  opacity:0;visibility:hidden;transform:translateY(.8rem);pointer-events:none;transition:opacity .35s,transform .35s,visibility .35s}
.guide.on{opacity:1;visibility:visible;transform:none;pointer-events:auto}
.g-nav{display:flex;flex-direction:column;gap:1.3rem;padding:1.6rem 1.4rem;border-right:1px solid var(--steel);overflow-y:auto;scrollbar-width:none}
.g-brand{display:flex;align-items:center;gap:.9rem}
.g-brand img{height:3.1rem;filter:drop-shadow(0 0 .6rem rgba(var(--acc-rgb),.5))}
.g-brand b{display:block;font:700 1.9rem var(--f-head);letter-spacing:.12em;line-height:1}
.g-brand em{font-size:.56rem;letter-spacing:.24em;color:var(--mut)}
#gToc{display:flex;flex-direction:column}
#gToc a{color:var(--mut);text-decoration:none;font-size:.74rem;letter-spacing:.06em;padding:.5rem .75rem;border-left:2px solid var(--steel);transition:.2s}
#gToc a:hover{color:var(--txt);border-color:var(--acc)}
#gToc a.on{color:var(--acc);border-color:var(--acc);background:linear-gradient(90deg,rgba(var(--acc-rgb),.14),transparent)}
.g-back{margin-top:auto;height:3rem;font:600 1.02rem var(--f-head);letter-spacing:.16em;color:#1a0e00;background:var(--acc);
  clip-path:polygon(.7rem 0,100% 0,100% calc(100% - .7rem),calc(100% - .7rem) 100%,0 100%,0 .7rem);transition:.2s}
.g-back:hover{filter:brightness(1.12) drop-shadow(0 0 .7rem rgba(var(--acc-rgb),.6))}
.g-doc{overflow-y:auto;padding:2rem 3.2rem 4rem;scrollbar-width:thin;scrollbar-color:rgba(var(--acc-rgb),.5) transparent;user-select:text;-webkit-user-select:text}
.g-doc>*{max-width:60rem}
.g-hero{padding-bottom:1.4rem;border-bottom:1px solid var(--steel)}
.g-eyebrow{display:flex;align-items:center;gap:.6rem;font-size:.64rem;letter-spacing:.32em;color:var(--acc)}
.g-eyebrow i{width:.5rem;height:.5rem;background:var(--acc);box-shadow:0 0 .6rem var(--acc)}
.g-hero h1{font:700 3.6rem/1.05 var(--f-head);letter-spacing:.06em;margin:.3rem 0;text-shadow:0 0 1.4rem rgba(var(--acc-rgb),.3)}
.g-hero .ru{font-size:.62rem;letter-spacing:.28em;color:var(--mut-2)}
.guide section{padding:1.8rem 0 .3rem}
.guide h2{display:flex;align-items:baseline;gap:.85rem;font:600 1.9rem var(--f-head);letter-spacing:.1em;text-transform:uppercase;margin-bottom:.9rem}
.guide h2 span{font:500 .7rem var(--f-mono);letter-spacing:.2em;color:var(--acc);border:1px solid rgba(var(--acc-rgb),.5);padding:.12rem .5rem}
.guide p{margin:0 0 .7rem;color:#c9c4ba;font-size:.82rem;line-height:1.65}
.guide kbd{font:inherit;font-size:.85em;color:var(--acc);border:1px solid var(--acc);padding:.02rem .35rem}
.guide b{font-weight:600;color:#fff}
.guide .steps{list-style:none;counter-reset:s;display:flex;flex-direction:column;gap:.55rem;margin:.6rem 0 .9rem}
.guide .steps li{counter-increment:s;position:relative;padding-left:2.5rem;color:#c9c4ba;font-size:.82rem;line-height:1.6}
.guide .steps li::before{content:counter(s);position:absolute;left:0;top:0;width:1.65rem;height:1.65rem;display:grid;place-items:center;
  font:600 .74rem var(--f-mono);color:var(--acc);border:1px solid var(--acc);clip-path:polygon(.4rem 0,100% 0,100% calc(100% - .4rem),calc(100% - .4rem) 100%,0 100%,0 .4rem)}
.guide .rules{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.75rem;margin-top:.8rem}
.guide .rules>div{padding:.85rem 1rem;border:1px solid var(--steel-2);background:rgba(150,172,210,.04)}
.guide .rules p{margin:.4rem 0 0}
.guide .pair{font:600 1.6rem var(--f-head) !important;letter-spacing:.1em;color:var(--txt) !important}
.guide .pair span{color:var(--acc);margin:0 .25rem}
.guide .sym{display:flex;gap:.6rem}
.guide .sym svg{width:1.6rem;height:1.6rem;fill:rgba(var(--acc-rgb),.2);stroke:var(--acc);stroke-width:1.6;stroke-linejoin:round}
.guide table{width:100%;border-collapse:collapse;margin:.6rem 0 .9rem}
.guide th,.guide td{text-align:left;vertical-align:top;padding:.5rem .75rem;border-bottom:1px solid var(--steel);font-size:.76rem}
.guide tr:first-child th,.guide tr:first-child td{border-top:1px solid var(--steel)}
.guide th{width:45%;font-weight:500;color:var(--txt)}
.guide td{color:var(--acc-hi)}
.guide footer{margin-top:2.8rem;padding-top:1rem;border-top:1px solid var(--steel);font-size:.56rem;letter-spacing:.24em;color:var(--mut-2)}

/* ============================================================
   INFOBULLE / ÉCRAN FERMÉ
   ============================================================ */
.tip{position:fixed;z-index:100;left:0;top:0;max-width:20rem;padding:.5rem .8rem;pointer-events:none;font-size:.64rem;letter-spacing:.06em;line-height:1.4;color:var(--txt);
  background:rgba(7,10,17,.96);border:1px solid var(--acc);box-shadow:0 0 1.2rem rgba(var(--acc-rgb),.28);opacity:0;transform:translateY(.3rem);transition:opacity .15s,transform .15s}
.tip.on{opacity:1;transform:none}
.tip small{display:block;margin-top:.2rem;font-size:.54rem;letter-spacing:.16em;color:var(--acc)}
.closed{position:fixed;inset:0;z-index:200;display:none;align-items:center;justify-content:center;background:radial-gradient(60% 60% at 50% 45%,rgba(var(--acc-rgb),.07),transparent 70%),var(--bg)}
.closed.on{display:flex}
body.embedded .closed{display:none !important}
.closed-box{display:flex;flex-direction:column;align-items:center;gap:.8rem;text-align:center}
.closed-box img{height:7rem;opacity:.85;filter:drop-shadow(0 0 1.4rem rgba(var(--acc-rgb),.5))}
.closed-box b{font:700 2.3rem var(--f-head);letter-spacing:.24em}
.closed-box em{font-size:.6rem;letter-spacing:.3em;color:var(--mut);margin-bottom:.8rem}
.closed-box .cta{width:16rem}

@media (prefers-reduced-motion:reduce){
  .ring,.ticks,.sweep,.scan-line,.grain{animation:none}
}

/* petits écrans : le titre reste lisible */
@media (max-width:1100px){.sov-word{display:none}.kv{min-width:0;padding:.1rem .7rem}.tb-title h1{font-size:2.1rem}}
