/* ==========================================================================
   SAMBAC STUDIO — système visuel (univers Atelier Zāhira, rouge uniquement)
   ========================================================================== */
@font-face{font-family:'Barlow Condensed';font-weight:500;font-display:swap;src:url('/vendor/fonts/barlow-condensed-500.woff2') format('woff2')}
@font-face{font-family:'Barlow Condensed';font-weight:600;font-display:swap;src:url('/vendor/fonts/barlow-condensed-600.woff2') format('woff2')}
@font-face{font-family:'Barlow Condensed';font-weight:700;font-display:swap;src:url('/vendor/fonts/barlow-condensed-700.woff2') format('woff2')}
@font-face{font-family:'DM Mono';font-weight:400;font-display:swap;src:url('/vendor/fonts/dm-mono-400.woff2') format('woff2')}
@font-face{font-family:'DM Mono';font-weight:500;font-display:swap;src:url('/vendor/fonts/dm-mono-500.woff2') format('woff2')}
@font-face{font-family:'Space Grotesk';font-weight:400;font-display:swap;src:url('/vendor/fonts/space-grotesk-400.woff2') format('woff2')}
@font-face{font-family:'Space Grotesk';font-weight:500;font-display:swap;src:url('/vendor/fonts/space-grotesk-500.woff2') format('woff2')}
@font-face{font-family:'Space Grotesk';font-weight:600;font-display:swap;src:url('/vendor/fonts/space-grotesk-600.woff2') format('woff2')}

@property --ang{syntax:'<angle>';initial-value:0deg;inherits:false}

:root{
  --bg:#060607;--bg2:#0a0a0c;--panel:#0d0d10;--panel2:#121216;--line:rgba(255,255,255,.08);--line2:rgba(255,255,255,.14);
  --text:#ece8e2;--dim:rgba(236,232,226,.6);--faint:rgba(236,232,226,.52);
  --red:#ff2a2a;--hot:#ff4a2e;--crimson:#d0101f;--blood:#8e0a16;--sand:#e9c4a6;
  --grad:linear-gradient(100deg,#ff2a2a,#ff4a2e 30%,#d0101f 62%,#8e0a16);
  --grad-loop:linear-gradient(100deg,#ff2a2a,#ff4a2e,#d0101f,#8e0a16,#ff4a2e,#ff2a2a);
  --display:"Barlow Condensed",Arial,sans-serif;--mono:"DM Mono",Consolas,monospace;--type:"Space Grotesk",system-ui,sans-serif;
  --ease:cubic-bezier(.16,1,.3,1);--r:12px;
  --hud:rgba(255,74,46,.8);
  --corners:linear-gradient(var(--hud),var(--hud)) top left/10px 1px no-repeat,linear-gradient(var(--hud),var(--hud)) top left/1px 10px no-repeat,
    linear-gradient(var(--hud),var(--hud)) top right/10px 1px no-repeat,linear-gradient(var(--hud),var(--hud)) top right/1px 10px no-repeat,
    linear-gradient(var(--hud),var(--hud)) bottom left/10px 1px no-repeat,linear-gradient(var(--hud),var(--hud)) bottom left/1px 10px no-repeat,
    linear-gradient(var(--hud),var(--hud)) bottom right/10px 1px no-repeat,linear-gradient(var(--hud),var(--hud)) bottom right/1px 10px no-repeat;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%;margin:0}
body{
  background:radial-gradient(circle at 88% -8%,rgba(150,12,22,.38),transparent 34%),radial-gradient(circle at -6% 70%,rgba(80,6,12,.38),transparent 32%),var(--bg);
  color:var(--text);font:14px/1.5 var(--type);overflow:hidden;-webkit-font-smoothing:antialiased;
  display:grid;grid-template-columns:76px minmax(0,1fr);grid-template-rows:38px minmax(0,1fr) 26px;
}
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.45;
  background-image:radial-gradient(rgba(255,120,100,.12) 1px,transparent 1.2px);background-size:28px 28px;
  -webkit-mask-image:radial-gradient(ellipse at 60% 30%,#000 5%,transparent 65%);mask-image:radial-gradient(ellipse at 60% 30%,#000 5%,transparent 65%)}
body::after{content:"";position:fixed;inset:-50%;z-index:9999;pointer-events:none;opacity:.045;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
::selection{background:rgba(255,42,42,.55);color:#fff}
::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:rgba(255,42,42,.28);border-radius:9px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:rgba(255,42,42,.5);background-clip:padding-box;border:2px solid transparent}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
button:disabled{cursor:not-allowed;opacity:.45}
:focus-visible{outline:2px solid var(--hot);outline-offset:2px}
.ic{fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
.flex{flex:1}
.kicker{font:500 10px/1 var(--mono);letter-spacing:.18em;color:var(--hot);text-transform:uppercase;text-shadow:0 0 12px rgba(255,74,46,.35)}
.muted{color:var(--faint);font:11px var(--mono)}
kbd{font:500 9.5px/1 var(--mono);letter-spacing:.06em;padding:3px 6px;border:1px solid var(--line2);border-radius:5px;color:var(--dim);background:rgba(255,255,255,.03)}

/* ---------- Démarrage ---------- */
#boot{position:fixed;inset:0;z-index:10000;display:grid;place-items:center;background:radial-gradient(circle at 50% 45%,rgba(60,4,8,.95),#040404 70%);transition:opacity .6s,filter .6s}
body.booted #boot{opacity:0;filter:blur(6px);pointer-events:none}
.boot-box{width:min(440px,86vw);font:500 11px/2 var(--mono);letter-spacing:.14em;color:var(--dim);text-transform:uppercase}
.boot-box img{width:64px;height:64px;object-fit:contain;filter:drop-shadow(0 0 18px rgba(255,42,42,.5));animation:float 4s ease-in-out infinite}
.boot-box strong{display:block;margin:10px 0 14px;font:700 40px/1 var(--display);letter-spacing:.1em;color:#fff}
.boot-box strong em{font-style:normal;color:var(--red);text-shadow:0 0 18px rgba(255,42,42,.7)}
.boot-box p{margin:0;opacity:0;animation:fadein .3s ease forwards;animation-delay:var(--d)}
.boot-box b{color:var(--hot);font-weight:500}
.boot-bar{margin-top:16px;height:2px;background:rgba(255,255,255,.08);overflow:hidden}
.boot-bar i{display:block;height:100%;width:0;background:var(--grad);box-shadow:0 0 12px var(--hot);animation:load 1.3s cubic-bezier(.6,0,.2,1) .1s forwards}

/* ---------- Barre de titre ---------- */
#titlebar{grid-column:1/-1;position:relative;z-index:20;display:flex;align-items:center;gap:14px;padding:0 160px 0 16px;-webkit-app-region:drag;
  background:linear-gradient(90deg,rgba(26,4,7,.92),rgba(8,8,9,.92) 45%);border-bottom:1px solid rgba(255,74,46,.16);backdrop-filter:blur(20px)}
html[data-platform=darwin] #titlebar{padding-left:84px;padding-right:16px}
#titlebar::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg,transparent,var(--red),var(--crimson),transparent);background-size:200% 100%;animation:flow 6s linear infinite;opacity:.7}
.tb-brand{display:flex;align-items:center;gap:7px;font:700 14px/1 var(--display);letter-spacing:.2em}
.tb-brand span:last-child{color:var(--faint);font-weight:500}
.tb-dot{width:7px;height:7px;border-radius:50%;background:var(--red);box-shadow:0 0 10px var(--red);animation:ping 2s infinite}
.tb-sep{width:1px;height:14px;background:var(--line2)}
.tb-view{font:500 10px var(--mono);letter-spacing:.18em;color:var(--dim)}
.tb-palette{-webkit-app-region:no-drag;margin:0 auto;display:flex;align-items:center;gap:9px;width:min(440px,36vw);height:26px;padding:0 10px;border:1px solid var(--line2);border-radius:8px;background:rgba(255,255,255,.035);color:var(--faint);font-size:12px;transition:border-color .3s,box-shadow .3s}
.tb-palette span{flex:1;text-align:left}
.tb-palette:hover{border-color:rgba(255,74,46,.55);box-shadow:0 0 18px rgba(255,42,42,.18);color:var(--dim)}
.tb-chips{display:flex;gap:6px;-webkit-app-region:no-drag}
.chip{font:500 9px/1 var(--mono);letter-spacing:.14em;padding:5px 8px;border-radius:999px;border:1px solid rgba(255,74,46,.35);color:var(--hot);background:rgba(255,42,42,.07)}
.chip.alt{color:var(--sand);border-color:rgba(233,196,166,.35);background:rgba(233,196,166,.06)}
.chip.off{color:var(--faint);border-color:var(--line2);background:transparent}
.chip.voice{color:var(--faint);border-color:var(--line2);background:transparent}
.chip.voice.on{color:#fff;border-color:rgba(255,74,46,.6);background:rgba(255,42,42,.15);box-shadow:0 0 14px rgba(255,42,42,.25)}

/* ---------- Rail ---------- */
#rail{grid-row:2;position:relative;z-index:10;display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 0;border-right:1px solid var(--line);background:rgba(6,6,7,.6);backdrop-filter:blur(18px)}
.rail-btn{position:relative;width:58px;height:54px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:1px solid transparent;border-radius:12px;background:transparent;color:var(--faint);font:500 8px/1 var(--mono);letter-spacing:.1em;transition:color .25s,background .25s,border-color .25s}
.rail-btn:hover{color:var(--text);background:rgba(255,255,255,.04)}
.rail-btn.on{color:#fff;background:linear-gradient(135deg,rgba(255,42,42,.18),rgba(255,255,255,.02));border-color:rgba(255,74,46,.35);box-shadow:0 0 22px rgba(255,42,42,.15)}
.rail-btn.on::before{content:"";position:absolute;left:-9px;top:14px;bottom:14px;width:2px;border-radius:2px;background:var(--red);box-shadow:0 0 10px var(--red)}
.rail-btn.on .ic{color:var(--hot);filter:drop-shadow(0 0 6px rgba(255,74,46,.7))}
.rail-spacer{flex:1}
.rail-orb{width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,74,46,.35);background:radial-gradient(circle at 35% 30%,rgba(255,74,46,.35),rgba(60,4,8,.8));display:grid;place-items:center;margin-bottom:6px;transition:box-shadow .3s,transform .3s var(--ease)}
.rail-orb span{width:12px;height:12px;border-radius:50%;background:var(--red);box-shadow:0 0 12px var(--red)}
.rail-orb:hover{transform:scale(1.06);box-shadow:0 0 24px rgba(255,42,42,.4)}
.rail-orb.on span{animation:ping 1.6s infinite}
.rail-orb.live{box-shadow:0 0 0 2px rgba(255,74,46,.4),0 0 34px rgba(255,42,42,.6);animation:breathe 1s ease-in-out infinite}

/* ---------- Vues ---------- */
#views{grid-row:2;grid-column:2;position:relative;z-index:1;min-width:0;min-height:0}
.view{position:absolute;inset:0;display:none;min-height:0}
.view.on{display:flex;animation:viewin .45s var(--ease)}

/* ---------- Barre d'état ---------- */
#statusbar{grid-column:1/-1;position:relative;z-index:20;display:flex;align-items:center;gap:2px;padding:0 10px;border-top:1px solid var(--line);background:rgba(5,5,6,.92);font:500 9.5px/1 var(--mono);letter-spacing:.1em;color:var(--faint)}
.sb-item{padding:4px 8px;white-space:nowrap;border-radius:4px}
.sb-flex{flex:1}
#sb-workspace{color:var(--text)}
#sb-engine{display:inline-flex;align-items:center;gap:6px}
#sb-engine i{width:6px;height:6px;border-radius:50%;background:#5a0a10}
#sb-engine.ok{color:var(--dim)}#sb-engine.ok i{background:var(--red);box-shadow:0 0 8px var(--red)}
#sb-lock.warn{color:var(--hot)}
#sb-clock{color:var(--dim)}

/* ---------- Composants communs ---------- */
.hud{position:relative}
.hud::after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:var(--corners);opacity:.55}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:32px;padding:0 14px;border-radius:9px;border:1px solid var(--line2);background:rgba(255,255,255,.04);color:var(--text);font:500 11px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;white-space:nowrap;transition:transform .25s var(--ease),box-shadow .3s,border-color .3s,background .3s}
.btn:hover:not(:disabled){border-color:rgba(255,74,46,.6);box-shadow:0 0 18px rgba(255,42,42,.25)}
.btn.primary{border:0;color:#fff;background:var(--grad-loop);background-size:250% 100%;animation:flow 6s linear infinite;box-shadow:0 6px 20px rgba(255,42,42,.28),inset 0 1px rgba(255,255,255,.2)}
.btn.primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 10px 30px rgba(255,42,42,.45)}
.btn.danger{border-color:rgba(255,42,42,.7);color:#ffb3a8;background:rgba(255,42,42,.12)}
.btn.ghost{background:transparent}
.btn.mini{height:26px;padding:0 10px;font-size:9.5px;border-radius:7px}
.icon-btn{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--dim);transition:color .2s,background .2s,border-color .2s}
.icon-btn:hover{color:#fff;background:rgba(255,255,255,.06);border-color:var(--line2)}
.field{width:100%;height:34px;padding:0 11px;border:1px solid var(--line2);border-radius:9px;background:rgba(0,0,0,.35);color:var(--text);outline:none;transition:border-color .25s,box-shadow .25s}
textarea.field{height:auto;padding:9px 11px;resize:vertical}
.field.small{height:30px;font-size:12.5px}
.field:focus{border-color:rgba(255,74,46,.75);box-shadow:0 0 0 3px rgba(255,42,42,.13)}
.select{height:32px;padding:0 10px;border:1px solid var(--line2);border-radius:9px;background:#0b0b0d;color:var(--text);outline:none;font-size:12.5px}
.select.mini{height:26px;font:500 10px var(--mono);letter-spacing:.06em;max-width:190px}
.select:focus{border-color:rgba(255,74,46,.7)}
.link{border:0;background:none;color:var(--hot);font:500 10px var(--mono);letter-spacing:.06em;text-decoration:underline;text-underline-offset:3px;padding:0 4px}
.side-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 12px 8px}
.side-tools{display:flex;gap:2px}
.side-empty{padding:18px 12px;color:var(--faint);font-size:12px;display:grid;gap:10px;justify-items:start}
.toggle{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:999px;border:1px solid var(--line2);background:transparent;color:var(--faint);font:500 9.5px/1 var(--mono);letter-spacing:.12em;transition:all .25s}
.toggle.on{color:#fff;border-color:rgba(255,74,46,.65);background:rgba(255,42,42,.14);box-shadow:0 0 16px rgba(255,42,42,.22)}
.toggle.on .ic{color:var(--hot)}
.chip-btn{height:24px;padding:0 9px;border-radius:999px;border:1px solid rgba(255,74,46,.3);background:rgba(255,42,42,.06);color:#ffb3a3;font:500 9.5px var(--mono);letter-spacing:.06em}
.chip-btn:hover{background:rgba(255,42,42,.16);color:#fff}
.tabs-scroll{display:flex;gap:2px;overflow-x:auto;min-width:0;flex:1;scrollbar-width:none}
.tabs-scroll::-webkit-scrollbar{display:none}
.tab{display:inline-flex;align-items:center;gap:7px;height:30px;padding:0 8px 0 11px;border:1px solid transparent;border-bottom:0;border-radius:8px 8px 0 0;background:transparent;color:var(--faint);font-size:12px;white-space:nowrap;position:relative}
.tab:hover{color:var(--text);background:rgba(255,255,255,.03)}
.tab.on{color:#fff;background:var(--bg2);border-color:var(--line)}
.tab.on::before{content:"";position:absolute;left:8px;right:8px;top:0;height:1px;background:var(--grad);box-shadow:0 0 8px var(--hot)}
.tab-x{font-style:normal;width:16px;height:16px;display:grid;place-items:center;border-radius:4px;color:var(--faint);font-size:14px}
.tab-x:hover{background:rgba(255,42,42,.25);color:#fff}
.tab.dirty .tab-x{font-size:0}.tab.dirty .tab-x::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--hot)}
.tab.dirty .tab-x:hover{font-size:14px}.tab.dirty .tab-x:hover::before{display:none}
.tab-lang{font:500 8px var(--mono);color:var(--hot);letter-spacing:.06em}
.tab.dead{opacity:.5}

/* Toasts */
#toasts{position:fixed;right:18px;bottom:38px;z-index:9000;display:grid;gap:8px;justify-items:end}
.toast{display:flex;align-items:center;gap:10px;max-width:440px;padding:11px 14px;border-radius:10px;border:1px solid rgba(255,74,46,.35);background:rgba(12,10,11,.96);box-shadow:0 14px 40px rgba(0,0,0,.5),0 0 22px rgba(255,42,42,.12);font-size:12.5px;transform:translateX(20px);opacity:0;transition:all .35s var(--ease)}
.toast.in{transform:none;opacity:1}
.toast i{width:6px;height:6px;border-radius:50%;background:var(--red);box-shadow:0 0 8px var(--red);flex:none}
.toast.error{border-color:rgba(255,42,42,.7)}.toast.warn i{background:var(--sand);box-shadow:0 0 8px var(--sand)}

/* Modale */
.modal-overlay{position:fixed;inset:0;z-index:8000;display:grid;place-items:center;background:rgba(0,0,0,.55);backdrop-filter:blur(6px);opacity:0;transition:opacity .25s}
.modal-overlay.in{opacity:1}
.modal{width:min(480px,90vw);padding:24px;border-radius:16px;border:1px solid var(--line2);background:radial-gradient(120% 70% at 100% 0%,rgba(255,42,42,.12),transparent 55%),rgba(12,12,14,.98);box-shadow:0 30px 90px rgba(0,0,0,.6);transform:translateY(10px) scale(.98);transition:transform .35s var(--ease)}
.modal-overlay.in .modal{transform:none}
.modal-kicker{font:500 9.5px var(--mono);letter-spacing:.18em;color:var(--hot);margin-bottom:10px}
.modal h3{margin:0 0 8px;font:700 26px/1.05 var(--display);text-transform:uppercase;letter-spacing:.02em}
.modal p{margin:0 0 14px;color:var(--dim);font-size:13px}
.modal .field{margin:6px 0 16px}
.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:6px}
.onboard{width:min(620px,92vw)}
.onboard-steps{display:grid;gap:8px;margin:6px 0 16px}
.ob-step{display:flex;align-items:center;gap:12px;padding:12px;border-radius:12px;border:1px solid var(--line2);background:rgba(255,255,255,.03);text-align:left;transition:border-color .25s,background .25s}
.ob-step:hover{border-color:rgba(255,74,46,.55);background:rgba(255,42,42,.07)}
.ob-step b{display:block;font:500 10px var(--mono);letter-spacing:.14em;color:var(--hot)}
.ob-step span{font-size:12.5px;color:var(--dim)}
.ob-n{width:28px;height:28px;flex:none;border-radius:50%;display:grid;place-items:center;border:1px solid rgba(255,74,46,.5);font:500 12px var(--mono);color:var(--hot)}
.ob-step.ok .ob-n{background:var(--red);color:#fff;border-color:var(--red);box-shadow:0 0 12px rgba(255,42,42,.5)}

/* Menu contextuel */
.ctx-menu{position:fixed;z-index:8500;min-width:230px;padding:5px;border-radius:10px;border:1px solid rgba(255,74,46,.3);background:rgba(12,12,14,.98);box-shadow:0 20px 50px rgba(0,0,0,.6)}
.ctx-menu button{display:block;width:100%;text-align:left;padding:7px 10px;border:0;border-radius:6px;background:transparent;font-size:12.5px;color:var(--text)}
.ctx-menu button:hover{background:rgba(255,42,42,.16)}

/* Palette */
.palette{position:fixed;inset:0;z-index:7000;display:flex;justify-content:center;align-items:flex-start;padding-top:12vh;background:rgba(0,0,0,.35);backdrop-filter:blur(3px);opacity:0;transition:opacity .15s}
.palette.in{opacity:1}
.palette-box{width:min(640px,90vw);border-radius:14px;border:1px solid rgba(255,74,46,.35);background:rgba(11,11,13,.98);box-shadow:0 30px 90px rgba(0,0,0,.65),0 0 40px rgba(255,42,42,.12);overflow:hidden}
#palette-input{width:100%;height:50px;padding:0 18px;border:0;border-bottom:1px solid var(--line);background:transparent;outline:none;font-size:15px}
#palette-list{max-height:52vh;overflow:auto;padding:6px}
.p-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 12px;border-radius:8px;font-size:13px;cursor:pointer}
.p-item.on,.p-item:hover{background:linear-gradient(90deg,rgba(255,42,42,.18),transparent)}
.p-item.on{box-shadow:inset 2px 0 0 var(--red)}
.p-empty{padding:16px;color:var(--faint)}

/* Voix */
.voice-hud{position:fixed;left:50%;bottom:60px;z-index:7500;transform:translate(-50%,20px);opacity:0;display:flex;align-items:center;gap:16px;min-width:340px;max-width:70vw;padding:14px 22px 14px 16px;border-radius:999px;border:1px solid rgba(255,74,46,.5);background:rgba(12,6,8,.95);box-shadow:0 20px 60px rgba(0,0,0,.6),0 0 50px rgba(255,42,42,.25);transition:all .35s var(--ease)}
.voice-hud.in{transform:translate(-50%,0);opacity:1}
.vh-orb{position:relative;width:38px;height:38px;flex:none}
.vh-orb span{position:absolute;inset:0;border-radius:50%;border:1px solid var(--red);animation:ripple 1.8s infinite}
.vh-orb span:nth-child(2){animation-delay:.6s}.vh-orb span:nth-child(3){animation-delay:1.2s;background:radial-gradient(circle,var(--red) 0 30%,transparent 32%)}
.vh-state{font:500 10px var(--mono);letter-spacing:.18em;color:var(--hot);white-space:nowrap}
.vh-text{font-size:14px;color:#fff;min-height:1.4em}

/* ==================== ASSISTANT ==================== */
#view-assistant{display:none}
#view-assistant.on{display:grid;grid-template-columns:260px minmax(0,1fr)}
.conv-side{display:flex;flex-direction:column;gap:6px;min-height:0;border-right:1px solid var(--line);background:rgba(8,8,10,.55);padding-bottom:8px}
.conv-side>.field{margin:0 12px;width:auto}
.conv-list{flex:1;overflow:auto;padding:4px 8px}
.conv-item{display:block;width:100%;text-align:left;padding:9px 10px;margin-bottom:2px;border:1px solid transparent;border-radius:9px;background:transparent;transition:background .2s,border-color .2s}
.conv-item:hover{background:rgba(255,255,255,.035)}
.conv-item.on{background:linear-gradient(90deg,rgba(255,42,42,.13),transparent);border-color:rgba(255,74,46,.25)}
.ci-title{display:block;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ci-meta{display:block;font:500 8.5px var(--mono);letter-spacing:.1em;color:var(--faint);margin-top:3px}
.chat{display:flex;flex-direction:column;min-width:0;min-height:0}
.chat-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 22px 10px;border-bottom:1px solid var(--line)}
.chat-title{font:600 15px var(--type);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chat-tools{display:flex;align-items:center;gap:6px}
.perm{height:24px;padding:0 10px;border-radius:999px;border:1px solid rgba(255,74,46,.45);background:rgba(255,42,42,.08);color:var(--hot);font:500 9px var(--mono);letter-spacing:.14em}
.perm[data-level=autonome]{background:rgba(255,42,42,.25);color:#fff;box-shadow:0 0 16px rgba(255,42,42,.35)}
.perm[data-level=lecture]{color:var(--sand);border-color:rgba(233,196,166,.4);background:transparent}
.chat-log{flex:1;overflow:auto;padding:26px max(22px,calc((100% - 860px)/2)) 40px;scroll-behavior:smooth}
.chat-empty{min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px;padding:20px}
.orbit{position:relative;width:150px;height:150px;display:grid;place-items:center;margin-bottom:8px;border-radius:50%;border:1px solid rgba(255,255,255,.1);box-shadow:0 0 60px rgba(255,42,42,.2),0 0 0 1px rgba(255,74,46,.15);animation:float 7s ease-in-out infinite}
.orbit::before{content:"";position:absolute;inset:-14px;border-radius:50%;background:repeating-conic-gradient(rgba(255,74,46,.7) 0 1deg,transparent 1deg 6deg);-webkit-mask:radial-gradient(closest-side,transparent calc(100% - 6px),#000 calc(100% - 5px),#000 calc(100% - 1px),transparent 100%);mask:radial-gradient(closest-side,transparent calc(100% - 6px),#000 calc(100% - 5px),#000 calc(100% - 1px),transparent 100%);animation:spin 40s linear infinite}
.orbit img{width:88px;height:88px;object-fit:contain;filter:drop-shadow(0 0 16px rgba(255,42,42,.45))}
.orbit i{position:absolute;width:8px;height:8px;border-radius:50%;background:#fff;box-shadow:0 0 10px #fff,0 0 18px var(--hot);top:50%;left:50%;margin:-4px;animation:orbit 6s linear infinite}
.orbit i:nth-of-type(2){animation-duration:9s;animation-direction:reverse}.orbit i:nth-of-type(3){animation-duration:13s}
.empty-title{font:700 34px/1 var(--display);letter-spacing:.04em}
.empty-sub{color:var(--dim);max-width:460px}
.suggest{display:grid;grid-template-columns:repeat(2,minmax(0,260px));gap:10px;margin-top:14px}
.suggest-card{position:relative;text-align:left;padding:14px;border-radius:12px;border:1px solid var(--line2);background:linear-gradient(135deg,rgba(255,255,255,.045),rgba(255,255,255,.01));transition:all .3s var(--ease)}
.suggest-card:hover{border-color:rgba(255,74,46,.55);transform:translateY(-2px);background:linear-gradient(135deg,rgba(255,42,42,.12),rgba(255,255,255,.01));box-shadow:0 10px 30px rgba(255,42,42,.12)}
.suggest-card b{display:block;font:600 13px var(--type);margin-bottom:4px}
.suggest-card span{font-size:12px;color:var(--faint)}
.suggest-card em{position:absolute;top:12px;right:12px;font:500 8px var(--mono);letter-spacing:.14em;color:var(--hot);font-style:normal}
.msg{margin:0 0 22px;animation:msgin .45s var(--ease) both}
.msg-tag{display:flex;align-items:center;gap:10px;margin-bottom:8px;font:500 9.5px var(--mono);letter-spacing:.16em;color:var(--faint)}
.msg-tag::before{content:"";width:16px;height:1px;background:currentColor}
.msg.ai .msg-tag span{color:var(--hot);text-shadow:0 0 10px rgba(255,74,46,.4)}
.msg-tag em{font-style:normal;color:var(--faint);letter-spacing:.06em}
.mini-act{border:0;background:none;color:var(--faint);font:500 9px var(--mono);letter-spacing:.1em;padding:0}
.mini-act:hover{color:var(--hot)}
.msg.user .msg-body{white-space:pre-wrap;padding:12px 16px;border-radius:12px;border:1px solid var(--line);background:rgba(255,255,255,.035);color:rgba(236,232,226,.85)}
.msg.ai .msg-body{position:relative;padding:14px 18px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:linear-gradient(135deg,rgba(255,255,255,.06),rgba(255,255,255,.015));box-shadow:inset 1px 0 0 rgba(255,74,46,.4)}
.msg.ai .msg-body::after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:var(--corners);opacity:.4}
.msg.streaming .msg-body{border-color:rgba(255,74,46,.3)}
.caret{display:inline-block;width:.55em;height:1.05em;vertical-align:-.15em;margin-left:2px;background:var(--red);box-shadow:0 0 8px var(--red);animation:blink 1s steps(2,start) infinite}
.thinking-dots{display:inline-flex;gap:5px}.thinking-dots i{width:6px;height:6px;border-radius:50%;background:var(--hot);animation:dots 1.2s infinite}
.thinking-dots i:nth-child(2){animation-delay:.15s}.thinking-dots i:nth-child(3){animation-delay:.3s}
.steps{display:grid;gap:6px;margin-bottom:8px}
.steps:empty{display:none}
.step{border:1px solid var(--line);border-radius:9px;background:rgba(0,0,0,.25);overflow:hidden}
.step-head{display:flex;align-items:center;gap:9px;padding:7px 10px;cursor:pointer;font-size:12px}
.step-head b{font:500 9px var(--mono);letter-spacing:.14em;color:var(--hot);flex:none}
.step-head code{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--dim);font:12px var(--mono)}
.step-dot{width:7px;height:7px;border-radius:50%;background:var(--faint);flex:none}
.step.running .step-dot{background:var(--red);box-shadow:0 0 8px var(--red);animation:ping 1.2s infinite}
.step.ok .step-dot{background:var(--sand)}.step.ko .step-dot{background:var(--red)}
.step-state{font:500 8.5px var(--mono);letter-spacing:.14em;color:var(--faint)}
.step.ko .step-state{color:var(--hot)}
.step-out{display:none;margin:0;max-height:260px;overflow:auto;padding:8px 12px;border-top:1px solid var(--line);font:11.5px/1.5 var(--mono);color:var(--dim);white-space:pre-wrap;background:repeating-linear-gradient(rgba(255,42,42,.02) 0 2px,transparent 2px 4px)}
.step.open .step-out,.step.running .step-out:not(:empty){display:block}
.approval{margin:8px;padding:12px;border-radius:10px;border:1px solid rgba(255,74,46,.6);background:rgba(255,42,42,.08);box-shadow:0 0 30px rgba(255,42,42,.15);animation:pulseborder 1.6s ease-in-out infinite}
.ap-title{display:flex;align-items:center;gap:7px;font:500 10px var(--mono);letter-spacing:.14em;color:#fff;margin-bottom:8px}
.ap-cmd{display:block;padding:8px 10px;border-radius:7px;background:rgba(0,0,0,.45);font:12.5px var(--mono);color:#ffd0c4;white-space:pre-wrap;word-break:break-word}
.ap-preview{max-height:180px;overflow:auto;margin:8px 0 0;padding:8px 10px;border-radius:7px;background:rgba(0,0,0,.35);font:11px/1.5 var(--mono);color:var(--dim);white-space:pre-wrap}
.ap-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}
.brain-used{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font:500 9.5px var(--mono);letter-spacing:.08em;color:var(--faint)}
.wikilink{color:var(--hot);cursor:pointer;text-decoration:none;border-bottom:1px dashed rgba(255,74,46,.5)}
.wikilink:hover{color:#fff;border-bottom-color:#fff}
details.think{border:1px dashed var(--line2);border-radius:9px;padding:6px 10px}
details.think summary{font:500 9px var(--mono);letter-spacing:.14em;color:var(--faint);cursor:pointer}
details.think pre{white-space:pre-wrap;font:11.5px/1.5 var(--mono);color:var(--faint);max-height:240px;overflow:auto}
.composer{margin:0 max(22px,calc((100% - 860px)/2)) 18px;border-radius:16px;border:1px solid var(--line2);background:linear-gradient(115deg,rgba(255,255,255,.07),rgba(255,255,255,.02) 45%,rgba(0,0,0,.2)),rgba(10,10,12,.85);backdrop-filter:blur(24px);box-shadow:0 20px 60px rgba(0,0,0,.45);transition:border-color .3s,box-shadow .3s}
.composer:focus-within{border-color:rgba(255,74,46,.5);box-shadow:0 20px 60px rgba(0,0,0,.45),0 0 40px rgba(255,42,42,.14)}
body.live .composer{border-color:rgba(255,74,46,.6)}
.agent-mode .composer{box-shadow:0 20px 60px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,74,46,.5)}
.composer textarea{display:block;width:100%;max-height:220px;min-height:46px;padding:14px 16px 6px;border:0;background:transparent;outline:none;resize:none;font-size:14.5px;line-height:1.5}
.composer textarea::placeholder{color:var(--faint)}
.composer-bar{display:flex;align-items:center;gap:6px;padding:6px 8px 8px 12px}
.send{width:36px;height:36px;border-radius:11px;border:0;display:grid;place-items:center;color:#fff;background:var(--grad-loop);background-size:250% 100%;animation:flow 6s linear infinite;box-shadow:0 6px 18px rgba(255,42,42,.35);transition:transform .25s var(--ease)}
.send:hover{transform:scale(1.06)}
.send.stop{background:#2a0a0e;border:1px solid var(--red);animation:none;box-shadow:0 0 18px rgba(255,42,42,.4)}
.send.small{width:32px;height:32px;border-radius:9px}

/* Markdown */
.md{line-height:1.65;font-size:14.2px;overflow-wrap:anywhere}
.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}
.md h1,.md h2,.md h3{font-family:var(--display);text-transform:uppercase;letter-spacing:.02em;margin:1.1em 0 .45em;line-height:1.1}
.md h1{font-size:28px}.md h2{font-size:22px}.md h3{font-size:18px;color:#ffd0c4}
.md p{margin:.55em 0}.md ul,.md ol{padding-left:1.4em}.md li{margin:.2em 0}.md li::marker{color:var(--hot)}
.md a{color:var(--hot)}
.md blockquote{margin:.8em 0;padding:.4em 1em;border-left:2px solid var(--red);background:rgba(255,42,42,.05);color:var(--dim)}
.md code{font:12.8px var(--mono);padding:1px 5px;border-radius:5px;background:rgba(255,255,255,.07);color:#ffd0c4}
.md pre{position:relative;margin:.8em 0;border-radius:10px;border:1px solid var(--line2);background:#070708;overflow:hidden}
.md pre code{display:block;padding:12px 14px;overflow:auto;background:none;color:#ece8e2;font-size:12.5px;line-height:1.55}
.code-bar{display:flex;align-items:center;gap:10px;padding:5px 10px;border-bottom:1px solid var(--line);background:rgba(255,42,42,.05)}
.code-lang{flex:1;font:500 9px var(--mono);letter-spacing:.16em;color:var(--hot)}
.code-act{border:0;background:none;color:var(--faint);font:500 9px var(--mono);letter-spacing:.12em;padding:2px 4px}
.code-act:hover{color:#fff}
.code-act.apply{color:var(--hot)}
.md table{border-collapse:collapse;margin:.8em 0;font-size:13px}
.md th,.md td{border:1px solid var(--line2);padding:6px 10px}.md th{background:rgba(255,42,42,.08);font:500 10px var(--mono);letter-spacing:.1em;text-transform:uppercase}
.md hr{border:0;height:1px;background:linear-gradient(90deg,transparent,var(--red),transparent);margin:1.4em 0}
.md img{max-width:100%;border-radius:8px}

/* ==================== ÉDITEUR ==================== */
#view-code.on{display:flex}
.code-view{display:flex;width:100%;min-width:0;min-height:0}
.code-act-bar{display:flex;flex-direction:column;align-items:center;gap:4px;width:44px;padding:8px 0;border-right:1px solid var(--line);background:rgba(5,5,6,.6)}
.code-act-bar .act{width:34px;height:34px;display:grid;place-items:center;border:0;border-radius:9px;background:transparent;color:var(--faint);position:relative}
.code-act-bar .act:hover{color:#fff}
.code-act-bar .act.on{color:var(--hot);background:rgba(255,42,42,.1)}
.code-act-bar .act.on::before{content:"";position:absolute;left:-5px;top:8px;bottom:8px;width:2px;background:var(--red);box-shadow:0 0 8px var(--red)}
.code-side{width:270px;flex:none;border-right:1px solid var(--line);background:rgba(8,8,10,.6);min-height:0;position:relative}
.side-panel{position:absolute;inset:0;display:none;flex-direction:column;min-height:0}
.side-panel.on{display:flex}
.tree{flex:1;overflow:auto;padding:2px 4px 20px;font-size:12.8px;outline:none}
.tree-row{display:flex;align-items:center;gap:6px;height:25px;padding-right:8px;border-radius:6px;color:var(--dim);cursor:pointer;white-space:nowrap}
.tree-row:hover{background:rgba(255,255,255,.04);color:var(--text)}
.tree-row.on{background:linear-gradient(90deg,rgba(255,42,42,.16),transparent);color:#fff;box-shadow:inset 1px 0 0 var(--red)}
.tree-row .tw{width:10px;font-size:9px;color:var(--faint)}
.tree-row[data-type=dir] .ic{color:var(--hot)}
.tree-row .tn{flex:1;overflow:hidden;text-overflow:ellipsis}
.tree-row .tg{font:500 9px var(--mono);color:var(--hot)}
.tree-row.git-new .tn{color:var(--sand)}.tree-row.git-mod .tn{color:#ff9c8a}
.code-main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}
.editor-tabs{display:flex;align-items:flex-end;gap:8px;padding:6px 8px 0;border-bottom:1px solid var(--line);background:rgba(5,5,6,.5)}
.editor-actions{display:flex;align-items:center;gap:4px;padding-bottom:4px}
.crumbs{display:flex;align-items:center;gap:6px;height:24px;padding:0 14px;font:500 10.5px var(--mono);letter-spacing:.04em;color:var(--faint);background:var(--bg2);border-bottom:1px solid var(--line)}
.crumbs i{font-style:normal;color:var(--hot)}.crumbs .last{color:var(--text)}
.editor-stack{position:relative;flex:1;min-height:0;background:#08080a}
.monaco-host{position:absolute;inset:0}
.editor-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center;padding:30px;background:radial-gradient(circle at 50% 40%,rgba(255,42,42,.08),transparent 50%)}
.editor-empty[hidden]{display:none}
.ee-mark{width:76px;height:76px;border-radius:18px;display:grid;place-items:center;color:var(--hot);border:1px solid rgba(255,74,46,.35);background:rgba(255,42,42,.06);box-shadow:0 0 40px rgba(255,42,42,.18)}
.editor-empty b{font:700 30px var(--display);letter-spacing:.08em}
.editor-empty p{max-width:440px;color:var(--dim);margin:0}
.ee-actions{display:flex;gap:8px;margin:6px 0 14px}
.ee-keys{display:grid;grid-template-columns:repeat(3,auto);gap:8px 22px;font-size:12px;color:var(--faint)}
.ee-keys div{display:flex;gap:8px;align-items:center}
.save-flash{position:absolute;right:20px;top:14px;z-index:5;padding:6px 10px;border-radius:7px;border:1px solid rgba(255,74,46,.5);background:rgba(12,6,8,.92);font:500 9.5px var(--mono);letter-spacing:.16em;color:var(--hot);animation:flash 1.1s ease forwards}
.bottom-panel{height:260px;flex:none;display:flex;flex-direction:column;border-top:1px solid rgba(255,74,46,.25);background:#060607;resize:vertical;overflow:hidden;min-height:120px}
.bottom-panel[hidden]{display:none}
.bp-tabs{display:flex;align-items:center;gap:4px;padding:4px 10px;border-bottom:1px solid var(--line)}
.bp-tab{height:24px;padding:0 10px;border:0;border-radius:6px;background:transparent;color:var(--faint);font:500 9.5px var(--mono);letter-spacing:.14em}
.bp-tab.on{color:#fff;background:rgba(255,42,42,.14)}
.bp-tab em{font-style:normal;color:var(--hot)}
.bp-body{flex:1;min-height:0;display:none;overflow:auto}
.bp-body.on{display:block}
.bp-term{padding:6px 0 0 10px;overflow:hidden}
.problem{display:flex;gap:10px;align-items:baseline;padding:5px 12px;font-size:12.5px;cursor:pointer;border-bottom:1px solid rgba(255,255,255,.03)}
.problem:hover{background:rgba(255,255,255,.03)}
.problem b{font:500 9px var(--mono);letter-spacing:.1em;color:var(--hot);flex:none}
.problem.warn b{color:var(--sand)}
.problem em{margin-left:auto;font:11px var(--mono);color:var(--faint);font-style:normal;white-space:nowrap}
.ai-panel{width:360px;flex:none;display:flex;flex-direction:column;border-left:1px solid rgba(255,74,46,.2);background:rgba(8,6,7,.85);min-height:0}
.ai-panel[hidden]{display:none}
.ai-quick{display:flex;flex-wrap:wrap;gap:5px;padding:0 12px 10px;border-bottom:1px solid var(--line)}
.ai-log{flex:1;overflow:auto;padding:12px;display:flex;flex-direction:column;gap:10px}
.ai-hint{color:var(--faint);font-size:12.5px}
.ai-q{align-self:flex-end;max-width:92%;padding:8px 11px;border-radius:10px;background:rgba(255,255,255,.05);font-size:12.5px}
.ai-q em{display:block;font:500 9px var(--mono);color:var(--faint);font-style:normal;margin-top:3px}
.ai-a{font-size:13px}
.ai-a pre code{font-size:11.5px}
.ai-compose{display:flex;gap:8px;align-items:flex-end;padding:10px;border-top:1px solid var(--line)}
.ai-compose textarea{flex:1;resize:none;border:1px solid var(--line2);border-radius:10px;background:rgba(0,0,0,.35);padding:8px 10px;outline:none;font-size:13px}
.ai-compose textarea:focus{border-color:rgba(255,74,46,.6)}
.search-box{display:grid;gap:6px;padding:0 12px 10px;border-bottom:1px solid var(--line)}
.search-line{display:flex;gap:4px}
.opt{flex:none;width:28px;height:30px;border:1px solid var(--line2);border-radius:7px;background:transparent;color:var(--faint);font:500 11px var(--mono)}
.opt.on{color:#fff;border-color:rgba(255,74,46,.6);background:rgba(255,42,42,.16)}
.search-results{flex:1;overflow:auto;padding:6px 6px 20px}
.sr-count{padding:4px 8px 8px;font:500 9.5px var(--mono);letter-spacing:.08em;color:var(--faint)}
.sr-path{display:flex;align-items:center;gap:6px;padding:4px 6px;font-size:12.5px;cursor:pointer;color:var(--text)}
.sr-path em{margin-left:auto;font:500 9.5px var(--mono);color:var(--hot);font-style:normal}
.sr-file.closed .sr-line{display:none}
.sr-line{display:flex;gap:8px;padding:3px 6px 3px 26px;font:11.5px var(--mono);color:var(--dim);cursor:pointer;white-space:nowrap;overflow:hidden}
.sr-line:hover{background:rgba(255,255,255,.04)}
.sr-line .ln{color:var(--faint);min-width:26px;text-align:right}
.sr-line mark{background:rgba(255,42,42,.35);color:#fff;border-radius:2px}
.commit-box{display:grid;gap:6px;padding:0 12px 10px;border-bottom:1px solid var(--line)}
.commit-actions{display:flex;justify-content:flex-end;gap:6px}
.git-body{flex:1;overflow:auto;padding:4px 6px 20px}
.git-group{display:flex;align-items:center;justify-content:space-between;padding:10px 8px 4px;font:500 9px var(--mono);letter-spacing:.16em;color:var(--faint)}
.git-row{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:6px;font-size:12.5px;cursor:pointer}
.git-row:hover{background:rgba(255,255,255,.04)}
.gs{font:500 10px var(--mono);width:12px;color:#ff9c8a}.gs.new{color:var(--sand)}
.gp{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dim)}
.ga{display:none;gap:2px}.git-row:hover .ga{display:flex}
.ga button{width:20px;height:20px;border:0;border-radius:5px;background:rgba(255,255,255,.06);color:var(--text);font-size:12px;line-height:1}
.ga button:hover{background:rgba(255,42,42,.3)}
.git-log{display:flex;gap:8px;align-items:baseline;padding:4px 8px;font-size:12px;color:var(--dim)}
.git-log code{font:10.5px var(--mono);color:var(--hot)}
.git-log span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.git-log em{font:9.5px var(--mono);color:var(--faint);font-style:normal;white-space:nowrap}

/* ==================== TERMINAL ==================== */
#view-terminal.on{display:flex}
.term-view{display:flex;flex-direction:column;width:100%;min-height:0}
.term-tabs{display:flex;align-items:flex-end;gap:6px;padding:6px 10px 0;border-bottom:1px solid var(--line);background:rgba(5,5,6,.5)}
.term-tabs .tabs-scroll{flex:0 1 auto}
.term-hint{padding-bottom:8px;font:500 9px var(--mono);letter-spacing:.1em;color:var(--faint)}
.term-body{position:relative;flex:1;min-height:0;background:linear-gradient(180deg,rgba(8,8,10,.95),rgba(6,6,7,.98))}
.term-body::after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(rgba(255,42,42,.018) 0 2px,transparent 2px 4px)}
.term-host{position:absolute;inset:0;padding:10px 0 4px 14px;display:none}
.term-host.on{display:block}
.xterm .xterm-viewport{background:transparent!important}

/* ==================== CERVEAU ==================== */
#view-brain.on{display:flex}
.brain-view{display:grid;grid-template-columns:270px minmax(0,1fr) 260px;width:100%;min-height:0}
.brain-side{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line);background:rgba(8,8,10,.6)}
.brain-side>.field{margin:0 12px;width:auto}
.tag-cloud{display:flex;flex-wrap:wrap;gap:4px;padding:8px 12px}
.tag{display:inline-flex;gap:4px;align-items:center;height:21px;padding:0 7px;border-radius:999px;border:1px solid rgba(255,74,46,.25);background:rgba(255,42,42,.06);color:#ffb3a3;font:500 9.5px var(--mono)}
button.tag:hover,.tag.on{background:rgba(255,42,42,.2);color:#fff}
.tag em{font-style:normal;color:var(--faint)}
.note-list{flex:1;overflow:auto;padding:4px 8px 20px}
.note-count{padding:8px 6px 6px;font:500 9px var(--mono);letter-spacing:.16em;color:var(--faint)}
.note-item{display:block;width:100%;text-align:left;padding:8px 10px;border:1px solid transparent;border-radius:9px;background:transparent}
.note-item:hover{background:rgba(255,255,255,.035)}
.note-item.on{background:linear-gradient(90deg,rgba(255,42,42,.14),transparent);border-color:rgba(255,74,46,.25)}
.note-item b{display:block;font-weight:500;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.note-item span{display:block;font:10px var(--mono);color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.brain-main{position:relative;min-width:0;min-height:0}
.note-pane{position:absolute;inset:0;overflow:auto;padding:28px max(28px,calc((100% - 780px)/2)) 60px}
.note-pane[hidden]{display:none}
.note-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px}
.note-head h1{margin:6px 0 0;font:700 38px/1 var(--display);text-transform:uppercase;letter-spacing:.01em}
.note-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.note-tags{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:16px}
.note-body{font-size:15px}
.note-editor{width:100%;min-height:calc(100vh - 260px);padding:16px;border-radius:12px;border:1px solid rgba(255,74,46,.3);background:rgba(0,0,0,.35);color:var(--text);font:13.5px/1.7 var(--mono);outline:none;resize:vertical}
.editor-hint{margin-bottom:10px;font:11px var(--mono);color:var(--faint)}
.brain-links{border-left:1px solid var(--line);background:rgba(8,8,10,.5);overflow:auto;padding:16px 12px;display:flex;flex-direction:column;gap:4px}
.brain-links .kicker{margin:10px 0 6px}
.link-item{display:flex;align-items:center;gap:7px;width:100%;text-align:left;padding:6px 8px;border:0;border-radius:7px;background:transparent;font-size:12.5px;color:var(--dim)}
.link-item:hover{background:rgba(255,42,42,.1);color:#fff}
.link-item .ic{color:var(--hot)}
.link-item.missing{opacity:.6}.link-item em{margin-left:auto;font:9px var(--mono);font-style:normal;color:var(--hot)}
.graph-wrap{position:absolute;inset:0;background:radial-gradient(circle at 50% 50%,rgba(255,42,42,.07),transparent 60%)}
.graph-wrap[hidden]{display:none}
.graph-canvas{position:absolute;inset:0;width:100%;height:100%;cursor:grab}
.graph-legend{position:absolute;left:16px;bottom:14px;display:flex;gap:16px;flex-wrap:wrap;font:500 9.5px var(--mono);letter-spacing:.08em;color:var(--faint)}
.graph-legend span{display:inline-flex;align-items:center;gap:6px}
.graph-legend i{width:8px;height:8px;border-radius:50%}
.graph-legend .l1{background:#d9b8ae}.graph-legend .l2{background:var(--red);box-shadow:0 0 6px var(--red)}.graph-legend .l3{background:var(--hot)}
.graph-close{position:absolute;top:14px;right:16px}
.brain-connect,.brain-home{max-width:620px;margin:6vh auto 0}
.brain-connect{text-align:center;display:flex;flex-direction:column;align-items:center;gap:12px}
.bc-icon{width:90px;height:90px;border-radius:50%;display:grid;place-items:center;color:var(--hot);border:1px solid rgba(255,74,46,.35);background:rgba(255,42,42,.06);box-shadow:0 0 50px rgba(255,42,42,.2);animation:float 6s ease-in-out infinite}
.brain-connect h2{margin:6px 0 0;font:700 32px var(--display);letter-spacing:.04em}
.brain-connect p{color:var(--dim);margin:0}
.bc-list{text-align:left;color:var(--dim);font-size:13px;line-height:1.9}
.bc-list li::marker{color:var(--hot)}
.brain-home h1{margin:8px 0 16px;font:700 46px/1 var(--display);text-transform:uppercase}
.bh-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}
.bh-stats div{padding:14px;border-radius:12px;border:1px solid var(--line2);background:rgba(255,255,255,.03)}
.bh-stats b{display:block;font:700 32px var(--display);color:#fff}
.bh-stats span{font:500 9px var(--mono);letter-spacing:.16em;color:var(--hot)}
.bh-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:24px}
.bh-recent{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-top:10px}
.bh-card{text-align:left;padding:12px;border-radius:10px;border:1px solid var(--line);background:rgba(255,255,255,.025);transition:all .25s}
.bh-card:hover{border-color:rgba(255,74,46,.5);background:rgba(255,42,42,.08)}
.bh-card b{display:block;font-weight:500;font-size:13px}
.bh-card span,.bh-card em{font:10px var(--mono);color:var(--faint);font-style:normal;margin-right:8px}

/* ==================== PAGES (modèles, réglages) ==================== */
#view-models.on,#view-settings.on{display:block;overflow:auto}
.page{max-width:1060px;margin:0 auto;padding:30px 32px 60px}
.page-head{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:20px}
.page-head h1{margin:6px 0 0;font:700 46px/1 var(--display);text-transform:uppercase;letter-spacing:.01em}
.page>.kicker{margin:26px 0 12px}
.engine-card{display:flex;align-items:center;gap:16px;padding:18px 20px;border-radius:14px;border:1px solid var(--line2);background:radial-gradient(120% 80% at 100% 0%,rgba(255,42,42,.12),transparent 55%),rgba(255,255,255,.02)}
.ec-dot{width:14px;height:14px;border-radius:50%;background:#3a0a0e;flex:none}
.ec-dot.on{background:var(--red);box-shadow:0 0 14px var(--red);animation:ping 2s infinite}
.ec-main{flex:1}.ec-main b{display:block;font-size:15px;margin-bottom:2px}.ec-main span{color:var(--dim);font-size:13px}
.ec-meta{display:grid;gap:4px;text-align:right}.ec-meta em{font:500 10px var(--mono);font-style:normal;color:var(--hot);letter-spacing:.06em}
.ec-actions{display:flex;gap:8px}
.model-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.model-card{position:relative;display:flex;flex-direction:column;gap:6px;padding:16px;border-radius:14px;border:1px solid var(--line2);background:linear-gradient(135deg,rgba(255,255,255,.045),rgba(255,255,255,.01));transition:border-color .3s,box-shadow .3s,transform .35s var(--ease)}
.model-card:hover{border-color:rgba(255,74,46,.45);transform:translateY(-2px);box-shadow:0 12px 30px rgba(255,42,42,.1)}
.model-card::after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:var(--corners);opacity:0;transition:opacity .3s}
.model-card:hover::after,.model-card.rec::after{opacity:.6}
.model-card.inst{border-color:rgba(255,74,46,.3)}
.mc-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.mc-head b{font:500 14px var(--mono)}
.mc-head em{font:500 8px var(--mono);letter-spacing:.14em;font-style:normal;padding:3px 7px;border-radius:999px;color:#fff;background:var(--grad);box-shadow:0 0 12px rgba(255,42,42,.4)}
.mc-family{font:500 9px var(--mono);letter-spacing:.14em;color:var(--hot)}
.model-card p{margin:0;color:var(--dim);font-size:12.5px}
.mc-meta{display:flex;gap:12px;font:500 10px var(--mono);color:var(--faint)}
.mc-meta span{display:inline-flex;align-items:center;gap:5px}
.mc-progress{position:relative;height:20px;border-radius:6px;background:rgba(255,255,255,.05);overflow:hidden}
.mc-progress i{position:absolute;left:0;top:0;bottom:0;background:var(--grad);box-shadow:0 0 12px var(--hot);transition:width .4s}
.mc-progress span{position:relative;display:block;padding:0 8px;font:500 9.5px/20px var(--mono);color:#fff}
.mc-actions{display:flex;gap:6px;align-items:center;margin-top:auto;padding-top:6px}
.custom-pull{display:flex;gap:8px;margin-top:14px}
.settings{display:grid;gap:14px}
.set-section{padding:6px 20px 12px;border-radius:14px;border:1px solid var(--line2);background:rgba(255,255,255,.02)}
.set-title{display:flex;align-items:center;gap:9px;padding:12px 0 8px;font:500 10.5px var(--mono);letter-spacing:.18em;color:var(--hot)}
.set-row{display:flex;align-items:center;gap:20px;padding:12px 0;border-top:1px solid var(--line)}
.set-label{flex:1;min-width:0}.set-label b{display:block;font-weight:500;font-size:13.5px}.set-label span{display:block;color:var(--faint);font-size:12px;margin-top:2px;overflow-wrap:anywhere}
.set-control{flex:none;max-width:52%;display:flex;justify-content:flex-end}
.set-control .field{width:320px}
.set-intro,.set-note{color:var(--dim);font-size:12.5px;margin:4px 0 10px}
.row-actions{display:flex;align-items:center;gap:8px}
.switch{width:42px;height:24px;border-radius:999px;border:1px solid var(--line2);background:rgba(255,255,255,.06);position:relative;transition:all .25s}
.switch i{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#8a8480;transition:all .3s var(--ease)}
.switch.on{background:rgba(255,42,42,.35);border-color:rgba(255,74,46,.7);box-shadow:0 0 14px rgba(255,42,42,.3)}
.switch.on i{left:21px;background:#fff;box-shadow:0 0 8px var(--red)}
.ok-badge,.warn-badge{font:500 9.5px var(--mono);letter-spacing:.14em;padding:5px 9px;border-radius:999px;color:var(--hot);border:1px solid rgba(255,74,46,.45);background:rgba(255,42,42,.08)}
.warn-badge{color:var(--sand);border-color:rgba(233,196,166,.4)}
.login-form{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:center;padding:4px 0 12px}
.login-form .form-error{grid-column:1/-1;color:#ff8a7a;font-size:12px}
.login-form .link{grid-column:1/-1;justify-self:start}
input[type=range]{accent-color:var(--red);width:220px}

/* ---------- Animations ---------- */
@keyframes flow{to{background-position:300% 0}}
@keyframes ping{0%{box-shadow:0 0 0 0 rgba(255,42,42,.6)}80%,100%{box-shadow:0 0 0 8px rgba(255,42,42,0)}}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes orbit{from{transform:rotate(0) translateX(84px)}to{transform:rotate(360deg) translateX(84px)}}
@keyframes fadein{to{opacity:1}}
@keyframes load{to{width:100%}}
@keyframes viewin{from{opacity:0;transform:translateY(6px);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
@keyframes msgin{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes blink{50%{opacity:0}}
@keyframes dots{0%,80%,100%{opacity:.25;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}
@keyframes ripple{0%{transform:scale(.5);opacity:1}100%{transform:scale(1.6);opacity:0}}
@keyframes breathe{50%{transform:scale(1.08)}}
@keyframes pulseborder{50%{border-color:rgba(255,74,46,.25);box-shadow:0 0 12px rgba(255,42,42,.08)}}
@keyframes flash{0%{opacity:0;transform:translateY(-4px)}15%,70%{opacity:1;transform:none}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}

/* ==================== BOTS & ÉQUIPE ==================== */
.bot-av{display:inline-grid;place-items:center;width:34px;height:34px;flex:none;border-radius:10px;font:600 12px/1 var(--mono);letter-spacing:.04em;color:#fff;
  background:linear-gradient(135deg,#ff2a2a,#8e0a16);box-shadow:0 0 14px rgba(255,42,42,.3),inset 0 1px rgba(255,255,255,.25)}
.bot-av.g-development{background:linear-gradient(135deg,#ff6a3d,#b3121f)}
.bot-av.g-business{background:linear-gradient(135deg,#d0101f,#4a050b)}
.bot-av.sm{width:26px;height:26px;border-radius:8px;font-size:10px}
.bot-av.xs{width:18px;height:18px;border-radius:5px;font-size:8px}
.toggle.bot-pick{max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chip-btn.on{background:rgba(255,42,42,.25);color:#fff;border-color:rgba(255,74,46,.7)}
.bot-gallery{width:min(980px,94vw);max-height:88vh;display:flex;flex-direction:column}
.bot-gallery>.field{margin:10px 0 8px}
.bot-mode{display:flex;gap:6px}
.bot-groups{flex:1;overflow:auto;margin:0 -6px;padding:0 6px 6px}
.bot-group>.kicker{margin:14px 0 8px}
.bot-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px}
.bot-card{position:relative;text-align:left;padding:12px;border-radius:12px;border:1px solid var(--line2);background:linear-gradient(135deg,rgba(255,255,255,.045),rgba(255,255,255,.01));transition:all .25s var(--ease)}
.bot-card:hover{border-color:rgba(255,74,46,.55);transform:translateY(-2px);box-shadow:0 10px 26px rgba(255,42,42,.14)}
.bot-card.on{border-color:var(--red);background:linear-gradient(135deg,rgba(255,42,42,.2),rgba(255,255,255,.02));box-shadow:0 0 0 1px rgba(255,42,42,.4),0 0 26px rgba(255,42,42,.25)}
.bot-card.on::after{content:"✓";position:absolute;top:10px;right:12px;color:var(--hot);font:600 13px var(--mono)}
.bc-top{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.bc-top b{display:block;font:700 18px/1 var(--display);letter-spacing:.04em;text-transform:uppercase}
.bc-top>div>span{font:500 9px var(--mono);letter-spacing:.12em;color:var(--hot);text-transform:uppercase}
.bc-persona{margin:0 0 4px;font-size:12px;color:var(--text)}
.bc-focus{margin:0;font-size:11px;color:var(--faint)}
.team-mode .composer{border-color:rgba(255,74,46,.45)}
.team-status{font:500 10px var(--mono);letter-spacing:.12em;color:var(--hot);padding:2px 0 4px;animation:blink 1.4s steps(2,start) infinite}
.team-panel{border:1px solid rgba(255,74,46,.25);border-radius:12px;background:rgba(255,42,42,.035);padding:10px;display:grid;gap:6px}
.tp-head{display:flex;align-items:center;justify-content:space-between;padding:0 2px 4px}
.tp-avatars{display:flex;gap:4px}
.tm-card{border:1px solid var(--line);border-radius:10px;background:rgba(0,0,0,.25);overflow:hidden;transition:border-color .3s,box-shadow .3s}
.tm-card.active{border-color:rgba(255,74,46,.6);box-shadow:0 0 20px rgba(255,42,42,.18)}
.tm-head{display:grid;grid-template-columns:auto 150px 1fr auto;align-items:center;gap:10px;padding:8px 10px;cursor:pointer}
.tm-id b{display:block;font:700 15px/1 var(--display);letter-spacing:.04em;text-transform:uppercase}
.tm-id span{font:500 8.5px var(--mono);letter-spacing:.1em;color:var(--hot);text-transform:uppercase}
.tm-mission{margin:0;font-size:12px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tm-state{font:500 8.5px var(--mono);letter-spacing:.14em;color:var(--faint)}
.tm-card.active .tm-state{color:var(--hot)}.tm-card.done .tm-state{color:var(--sand)}
.tm-body{display:none;padding:4px 14px 12px;border-top:1px solid var(--line);font-size:13px;max-height:420px;overflow:auto}
.tm-card.open .tm-body,.tm-card.active .tm-body{display:block}

/* ==================== LANGAGES ==================== */
.lang-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;margin:4px 0 12px}
.lang-card{padding:10px 12px;border-radius:10px;border:1px solid var(--line);background:rgba(255,255,255,.02);opacity:.6}
.lang-card.ok{opacity:1;border-color:rgba(255,74,46,.3);background:linear-gradient(135deg,rgba(255,42,42,.07),rgba(255,255,255,.01))}
.lc-top{display:flex;justify-content:space-between;align-items:center;gap:6px}
.lc-top b{font-weight:500;font-size:13px}
.lc-src{font:500 8px var(--mono);letter-spacing:.12em;color:var(--hot)}
.lang-card:not(.ok) .lc-src{color:var(--faint)}
.lc-ver{display:block;margin-top:4px;font:10.5px var(--mono);color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ==================== MULTITÂCHE (écran partagé) ==================== */
.tb-split{display:flex;align-items:center;gap:4px;-webkit-app-region:no-drag}
.tb-btn{height:26px;display:flex;align-items:center;gap:7px;padding:0 10px;border:1px solid var(--line2);border-radius:8px;background:rgba(255,255,255,.03);color:var(--faint);font:500 9px var(--mono);letter-spacing:.14em;transition:color .25s,border-color .25s,background .25s,box-shadow .25s}
.tb-btn.icon{width:28px;padding:0;justify-content:center}
.tb-btn:hover{color:var(--text);border-color:rgba(255,74,46,.5)}
.tb-btn.on{color:#fff;border-color:rgba(255,74,46,.6);background:rgba(255,42,42,.14);box-shadow:0 0 16px rgba(255,42,42,.25)}
.tb-btn.on .ic{color:var(--hot)}
.chip.su-chip{cursor:pointer;-webkit-app-region:no-drag;color:#fff;border-color:rgba(255,74,46,.6);background:rgba(255,42,42,.15);animation:pulse-chip 2s ease-in-out infinite}
.chip.su-chip.err{animation:none;color:#ffb3a8;background:rgba(255,42,42,.25)}
@keyframes pulse-chip{50%{box-shadow:0 0 16px rgba(255,42,42,.45)}}
.split-divider{display:none}
#views.split .split-divider{display:block;position:absolute;z-index:5;top:0;bottom:0;left:var(--split);width:7px;margin-left:-1px;cursor:col-resize;
  background:linear-gradient(90deg,transparent 3px,rgba(255,74,46,.35) 3px 4px,transparent 4px)}
#views.split .split-divider::after{content:"";position:absolute;left:1px;top:50%;width:5px;height:42px;margin-top:-21px;border-radius:3px;background:rgba(255,74,46,.55);box-shadow:0 0 12px rgba(255,42,42,.6);transition:height .25s,margin .25s}
#views.split .split-divider:hover::after,#views.dragging .split-divider::after{height:80px;margin-top:-40px;background:var(--red)}
#views.split-v .split-divider{left:0;right:0;width:auto;top:var(--split);bottom:auto;height:7px;margin:-1px 0 0;cursor:row-resize;
  background:linear-gradient(180deg,transparent 3px,rgba(255,74,46,.35) 3px 4px,transparent 4px)}
#views.split-v .split-divider::after{left:50%;top:1px;width:42px;height:5px;margin:0 0 0 -21px}
#views.split-v .split-divider:hover::after,#views.split-v.dragging .split-divider::after{width:80px;height:5px;margin:0 0 0 -40px}
#views.split .view.pane-a{right:calc(100% - var(--split))}
#views.split .view.pane-b{left:calc(var(--split) + 6px)}
#views.split-v .view.pane-a{right:0;bottom:calc(100% - var(--split))}
#views.split-v .view.pane-b{left:0;top:calc(var(--split) + 6px)}
#views.split .view{animation:none;overflow:hidden}
#views.split .view::after{content:"";position:absolute;inset:0;pointer-events:none;border:1px solid transparent;border-radius:2px;transition:border-color .3s,box-shadow .3s;z-index:30}
#views.split .view.pane-focus::after{border-color:rgba(255,74,46,.35);box-shadow:inset 0 0 0 1px rgba(255,42,42,.08),inset 0 2px 0 rgba(255,42,42,.55)}
#views.dragging{cursor:col-resize;user-select:none}
#views.split-v.dragging{cursor:row-resize}
#views.dragging .view{pointer-events:none}
.rail-btn.on2{color:var(--text);border-color:rgba(255,74,46,.22);background:rgba(255,42,42,.06)}
.rail-btn.on2::before{content:"";position:absolute;left:-9px;top:18px;bottom:18px;width:2px;border-radius:2px;background:rgba(255,74,46,.5)}
/* Volets étroits */
#view-assistant.on.narrow{grid-template-columns:210px minmax(0,1fr)}
#view-assistant.on.tight{grid-template-columns:minmax(0,1fr)}
#view-assistant.tight .conv-side{display:none}
.view.narrow .brain-view{grid-template-columns:220px minmax(0,1fr)}
.view.narrow .brain-links{display:none}
.view.tight .brain-view{grid-template-columns:minmax(0,1fr)}
.view.tight .brain-side{display:none}
.view.narrow .code-side{width:210px}
.view.tight .code-side{display:none}
.view.narrow .page{padding:22px 20px 40px}
.view.narrow .suggest{grid-template-columns:minmax(0,1fr)}

/* ==================== PRÉPARATION AUTOMATIQUE ==================== */
.setup{width:min(600px,92vw)}
.su-list{display:grid;gap:8px;margin:6px 0 14px}
.su-step{display:flex;gap:12px;align-items:flex-start;padding:11px 12px;border-radius:12px;border:1px solid var(--line2);background:rgba(255,255,255,.025);transition:border-color .3s,background .3s}
.su-step.run{border-color:rgba(255,74,46,.5);background:rgba(255,42,42,.06)}
.su-step.err{border-color:rgba(255,42,42,.8);background:rgba(255,42,42,.12)}
.su-dot{flex:none;width:20px;height:20px;margin-top:1px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--line2);font:600 11px var(--mono);color:#fff}
.su-step.ok .su-dot{background:var(--red);border-color:var(--red);box-shadow:0 0 10px rgba(255,42,42,.5)}
.su-step.run .su-dot{border-color:var(--hot);border-top-color:transparent;animation:spin 1s linear infinite}
.su-step.err .su-dot{background:var(--blood);border-color:var(--red)}
.su-main{flex:1;min-width:0;display:grid;gap:6px}
.su-top{display:flex;justify-content:space-between;gap:10px}
.su-top b{font:500 12.5px var(--type)}
.su-top em{font:500 9px var(--mono);letter-spacing:.14em;color:var(--hot);font-style:normal;white-space:nowrap}
.su-step.wait .su-top em{color:var(--faint)}
.su-bar{position:relative;height:5px;border-radius:3px;background:rgba(255,255,255,.06);overflow:hidden}
.su-bar i{position:absolute;left:0;top:0;bottom:0;background:var(--grad);box-shadow:0 0 10px var(--hot);transition:width .35s}
.su-detail{font:500 9.5px var(--mono);letter-spacing:.06em;color:var(--faint)}
.engine-auto{display:flex;gap:8px;flex-wrap:wrap}

/* ==================== LABO ÉLECTRONIQUE ==================== */
#view-lab.on{display:flex}
.lab{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:100%;min-width:0;min-height:0}
.lab-bar{display:flex;align-items:center;gap:6px;padding:8px 12px;border-bottom:1px solid var(--line);background:rgba(8,8,10,.6);flex-wrap:wrap;min-width:0}
.lab-title{display:flex;align-items:center;gap:8px;margin-right:6px;min-width:0}
.lab-title .ic{color:var(--hot)}
.lab-title b{font:600 13px var(--type);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}
.lab-dirty{font:500 9px var(--mono);letter-spacing:.08em;color:var(--hot);font-style:normal}
.lab-ai{border-color:rgba(255,74,46,.5)!important;color:#ffb3a3!important}
.lab-sketch{display:flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:8px;border:1px solid var(--line2);background:rgba(255,255,255,.03);color:var(--text);font:500 11px var(--mono);max-width:220px}
.lab-sketch span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lab-sketch.none{color:var(--hot);border-color:rgba(255,74,46,.5)}
.lab-sketch:hover{border-color:rgba(255,74,46,.6)}
.lab-chip{font:500 8.5px var(--mono);letter-spacing:.12em;padding:4px 8px;border-radius:999px;border:1px solid var(--line2);color:var(--faint)}
.lab-chip.ok{color:#9be8b3;border-color:rgba(46,232,106,.35)}
.lab-status{font:500 10px var(--mono);letter-spacing:.08em;color:var(--hot);min-width:90px;text-align:right}
.lab-run{min-width:118px}
.lab-run.stop{background:#2a0b0e!important;animation:none!important;border:1px solid var(--red)!important;box-shadow:0 0 18px rgba(255,42,42,.35)!important}
.lab-body{display:grid;grid-template-columns:190px minmax(0,1fr) 250px;min-height:0;min-width:0}
.lab-palette{overflow:auto;border-right:1px solid var(--line);background:rgba(8,8,10,.55);padding-bottom:12px}
.lab-palette .lp-head,.lab-props .lp-head{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 6px}
.lp-group{padding:2px 8px 6px}
.lp-cat{font:500 8.5px var(--mono);letter-spacing:.16em;color:var(--faint);padding:8px 4px 4px}
.lp-item{display:flex;align-items:center;gap:8px;width:100%;padding:5px 6px;border:1px solid transparent;border-radius:8px;background:transparent;color:var(--text);font-size:12px;text-align:left;cursor:grab}
.lp-item:hover{background:rgba(255,42,42,.07);border-color:rgba(255,74,46,.25)}
.lp-thumb{flex:none;width:36px;height:30px;display:grid;place-items:center;border-radius:6px;background:rgba(255,255,255,.03)}
.lp-svg{width:34px;height:28px;overflow:visible}
.lp-svg .pl,.lp-svg .val,.lp-svg text{display:none}
.lp-help{display:grid;gap:4px;margin:10px 12px 0;padding:10px;border-radius:10px;border:1px dashed var(--line2);font-size:11px;color:var(--faint)}
.lp-help b{font:500 8.5px var(--mono);letter-spacing:.16em;color:var(--hot)}
.lab-stage{position:relative;min-width:0;min-height:0;overflow:hidden;background:radial-gradient(circle at 50% 40%,rgba(80,10,16,.18),transparent 60%),#070708}
.lab-stage.placing{cursor:copy}
.lab-svg{position:absolute;inset:0;width:100%;height:100%;touch-action:none;user-select:none}
.lab-stage.running::after{content:"SIMULATION EN COURS";position:absolute;top:10px;left:50%;transform:translateX(-50%);font:500 9px var(--mono);letter-spacing:.2em;color:#fff;padding:5px 12px;border-radius:999px;background:rgba(255,42,42,.2);border:1px solid rgba(255,74,46,.6);box-shadow:0 0 18px rgba(255,42,42,.35);pointer-events:none;animation:pulse-chip 2s ease-in-out infinite}
.lab-zoom{position:absolute;right:10px;bottom:10px;display:flex;gap:4px;padding:4px;border-radius:10px;background:rgba(10,10,12,.85);border:1px solid var(--line2)}
.lab-zoom .icon-btn{width:28px;height:28px;font:600 15px var(--mono)}
.lab-tip{position:absolute;z-index:4;pointer-events:none;padding:5px 9px;border-radius:7px;background:rgba(12,12,14,.95);border:1px solid rgba(255,74,46,.5);font:500 10.5px var(--mono);color:#fff;white-space:nowrap;box-shadow:0 8px 20px rgba(0,0,0,.5)}
.lab-warn{position:absolute;z-index:3;left:12px;right:60px;bottom:12px;display:grid;gap:4px;pointer-events:none}
.lab-warn div{justify-self:start;padding:6px 10px;border-radius:8px;background:rgba(60,6,10,.92);border:1px solid var(--red);color:#ffd0c8;font-size:12px;box-shadow:0 0 18px rgba(255,42,42,.3)}
/* éléments du circuit */
.lab-svg .pl{font:500 6px var(--mono);fill:rgba(255,255,255,.85);text-anchor:end;dominant-baseline:middle;pointer-events:none}
.lab-svg .chip{font:600 8px var(--mono);fill:#bfbfbf;text-anchor:middle;letter-spacing:.08em;pointer-events:none}
.lab-svg .uno{font:700 26px var(--display);fill:#fff;opacity:.92;letter-spacing:.06em;pointer-events:none}
.lab-svg .uno-s{font:500 7px var(--mono);fill:rgba(255,255,255,.75);letter-spacing:.12em;pointer-events:none}
.lab-svg .val{font:500 8px var(--mono);fill:var(--sand);text-anchor:middle;pointer-events:none}
.lab-svg .bat{font:700 13px var(--display);fill:#fff;text-anchor:middle}
.lab-svg .lcd{font:500 12px var(--mono);fill:#9cff9c;text-anchor:end}
.lab-svg .warn-t{font:600 8px var(--mono);fill:#ff6b5a;text-anchor:middle}
.lab-part{cursor:move}
.lab-part .press,.lab-part .dial{cursor:pointer}
.lab-sel{fill:none;stroke:transparent;stroke-width:1.2;stroke-dasharray:4 3}
.lab-part.sel .lab-sel{stroke:var(--hot);filter:drop-shadow(0 0 4px rgba(255,74,46,.8))}
.lab-part.warn .lab-sel{stroke:#ff3b3b;stroke-dasharray:none;animation:pulse-warn 1s ease-in-out infinite}
@keyframes pulse-warn{50%{stroke-opacity:.2}}
.lab-ghost{opacity:.55;pointer-events:none}
.lab-wire .hit{stroke:transparent;stroke-width:9;fill:none;cursor:pointer}
.lab-wire .shadow{stroke:rgba(0,0,0,.55);stroke-width:4.2;fill:none;stroke-linejoin:round;stroke-linecap:round;pointer-events:none}
.lab-wire .core{stroke-width:2.4;fill:none;stroke-linejoin:round;stroke-linecap:round;pointer-events:none}
.lab-wire.sel .core{stroke-width:3.2;filter:drop-shadow(0 0 4px var(--hot))}
.lab-wire .flow{stroke:rgba(255,255,255,.75);stroke-width:1.1;fill:none;stroke-dasharray:2 9;animation:wireflow .6s linear infinite;pointer-events:none}
@keyframes wireflow{to{stroke-dashoffset:-11}}
.lab-pin{fill:rgba(255,74,46,.12);stroke:rgba(255,74,46,.55);stroke-width:.8;cursor:crosshair;transition:fill .15s}
.lab-pin.used{fill:#c9ced2;stroke:#666}
.lab-pin:hover{fill:var(--red);stroke:#fff;filter:drop-shadow(0 0 4px var(--red))}
.lab-draft-wire{fill:none;stroke-width:2.4;stroke-dasharray:6 4;pointer-events:none;opacity:.9}
/* propriétés */
.lab-props{overflow:auto;border-left:1px solid var(--line);background:rgba(8,8,10,.55);padding:0 12px 14px}
.lab-props .lp-head{padding-left:0;padding-right:0}
.lpr-id{font:500 10px var(--mono);color:var(--faint)}
.lpr-row{display:grid;gap:4px;margin:8px 0}
.lpr-row label{font:500 8.5px var(--mono);letter-spacing:.14em;color:var(--faint);text-transform:uppercase}
.lpr-row>span{font-size:12.5px;color:var(--text);word-break:break-all}
.lpr-range{display:flex;align-items:center;gap:8px}.lpr-range input{flex:1;accent-color:var(--red)}.lpr-range em{font:500 10px var(--mono);color:var(--sand);font-style:normal;min-width:40px;text-align:right}
.lpr-actions{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0}
.lpr-sub{font:500 8.5px var(--mono);letter-spacing:.16em;color:var(--hot);margin:14px 0 6px}
.lpr-pin{display:flex;justify-content:space-between;gap:8px;padding:3px 0;border-bottom:1px solid rgba(255,255,255,.04);font-size:11.5px;color:var(--dim)}
.lpr-pin em{font:500 10px var(--mono);color:var(--sand);font-style:normal}
.lpr-note{margin:6px 0;color:var(--faint);font-size:12px}
.lpr-warn{margin:4px 0;padding:6px 8px;border-radius:7px;background:rgba(255,42,42,.1);border:1px solid rgba(255,42,42,.4);color:#ffc4ba;font-size:12px}
.lpr-colors{display:flex;flex-wrap:wrap;gap:6px}
.lpr-color{width:22px;height:22px;border-radius:50%;border:2px solid rgba(255,255,255,.15)}
.lpr-color.on{border-color:#fff;box-shadow:0 0 10px rgba(255,255,255,.4)}
/* bas : moniteur série, traceur, compilation */
.lab-bottom{display:grid;grid-template-rows:auto 190px;border-top:1px solid var(--line);background:rgba(6,6,7,.85);min-width:0}
.lab-bottom.min{grid-template-rows:auto 0}
.lb-tabs{display:flex;align-items:center;gap:2px;padding:0 8px;height:32px}
.lb-tab{height:32px;padding:0 12px;border:0;background:none;color:var(--faint);font:500 9px var(--mono);letter-spacing:.14em;border-bottom:2px solid transparent}
.lb-tab.on{color:#fff;border-bottom-color:var(--red)}
.lb-body{position:relative;min-height:0;overflow:hidden}
.lb-pane{position:absolute;inset:0;display:none}
.lb-pane.on{display:flex;flex-direction:column}
.lb-serial{flex:1;margin:0;padding:8px 14px;overflow:auto;font:12px/1.45 var(--mono);color:#e9e5df;white-space:pre-wrap}
.lb-send{display:flex;gap:6px;padding:6px 10px;border-top:1px solid var(--line)}
.lb-send .field{flex:1}
.lb-plot{flex:1;width:100%;height:100%}
.lb-build{flex:1;overflow:auto;padding:8px 12px}
.lb-build-head{font:500 10px var(--mono);letter-spacing:.08em;margin-bottom:6px}
.lb-build-head.ok{color:#9be8b3}.lb-build-head.err{color:#ff6b5a}
.lb-diag{display:flex;gap:10px;align-items:baseline;width:100%;padding:5px 8px;border:0;border-radius:6px;background:rgba(255,42,42,.06);color:var(--text);text-align:left;margin-bottom:3px;font-size:12px}
.lb-diag:hover{background:rgba(255,42,42,.14)}
.lb-diag b{font:600 9px var(--mono);color:#ff6b5a}.lb-diag.warning b{color:#ffb48a}
.lb-diag span{flex:1}.lb-diag em{font:500 10px var(--mono);color:var(--faint);font-style:normal}
.lb-out{margin:8px 0 0;font:11px/1.4 var(--mono);color:var(--faint);white-space:pre-wrap}
/* menus */
.lab-menu{position:absolute;z-index:20;top:46px;left:120px;width:min(460px,80%);max-height:70%;overflow:auto;padding:8px;border-radius:14px;border:1px solid var(--line2);background:rgba(12,12,14,.98);box-shadow:0 24px 60px rgba(0,0,0,.6)}
.lm-title{font:500 9px var(--mono);letter-spacing:.18em;color:var(--hot);padding:6px 8px 8px}
.lm-item{display:grid;gap:3px;width:100%;padding:9px 10px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--text);text-align:left}
.lm-item:hover{background:rgba(255,42,42,.08);border-color:rgba(255,74,46,.3)}
.lm-item.off{opacity:.5}
.lm-top{display:flex;justify-content:space-between;gap:10px}
.lm-top b{font:500 13px var(--type)}.lm-top em{font:500 8.5px var(--mono);letter-spacing:.12em;color:var(--hot);font-style:normal;white-space:nowrap}
.lm-item span{font-size:12px;color:var(--faint)}
/* volets étroits */
.view.narrow .lab-body{grid-template-columns:150px minmax(0,1fr)}
.view.narrow .lab-props{display:none}
.view.narrow .lab-chip,.view.narrow .lab-title b{display:none}
.view.tight .lab-body{grid-template-columns:minmax(0,1fr)}
.view.tight .lab-palette{display:none}
.view.narrow .lab-props.has-sel{display:block;position:absolute;right:10px;top:50px;bottom:240px;width:236px;z-index:6;border:1px solid var(--line2);border-radius:12px;background:rgba(10,10,12,.97);box-shadow:0 18px 50px rgba(0,0,0,.6)}
.view.narrow .lab-bar .btn.mini span{display:none}
.view.narrow .lab-bar .btn.mini{padding:0 8px}
.lab-svg .lcdc{font:500 13px var(--mono);text-anchor:middle;pointer-events:none}

.lb-usb-head,.lb-bom-head{display:flex;align-items:center;gap:10px;padding:8px 14px;border-bottom:1px solid var(--line);font-size:12px}
.lb-usb-head b{font:500 10px var(--mono);letter-spacing:.08em;color:#9be8b3}.lb-usb-head b.err{color:#ff6b5a}
.lb-bom{width:100%;border-collapse:collapse;font-size:12px;margin-top:6px}
.lb-bom th{font:500 8.5px var(--mono);letter-spacing:.14em;color:var(--faint);text-align:left;padding:6px 8px;border-bottom:1px solid var(--line2)}
.lb-bom td{padding:6px 8px;border-bottom:1px solid rgba(255,255,255,.05)}
.lb-bom tr:hover td{background:rgba(255,42,42,.05)}
.lab-svg .dial .val{pointer-events:auto;cursor:ns-resize}.lab-svg .dial .val:hover{fill:#fff}

/* ==================== ATELIER 3D ==================== */
#view-cad.on{display:flex}
.cad{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:100%;min-width:0;min-height:0}
.cad-bar{display:flex;align-items:center;gap:6px;padding:8px 12px;border-bottom:1px solid var(--line);background:rgba(8,8,10,.6);flex-wrap:wrap}
.cad-bar .btn.mini.on{color:#fff;border-color:rgba(255,74,46,.6);background:rgba(255,42,42,.14)}
.cad-body{display:grid;grid-template-columns:minmax(260px,38%) minmax(0,1fr) 260px;min-height:0;min-width:0}
.cad.asm .cad-body{grid-template-columns:minmax(0,1fr) 280px}
.cad.asm .cad-editor{display:none}
.cad-editor{position:relative;border-right:1px solid var(--line);min-width:0;min-height:0}
.cad-monaco{position:absolute;inset:0}
.cad-view{position:relative;min-width:0;min-height:0;background:radial-gradient(circle at 50% 35%,rgba(80,10,16,.25),transparent 65%),#070708}
.cad-canvas{position:absolute;inset:0}
.cad-canvas canvas{display:block}
.cad-views{position:absolute;left:10px;top:10px;display:flex;gap:4px;flex-wrap:wrap}
.cad-views .chip-btn.on{background:rgba(255,42,42,.25);color:#fff}
.cad-info{position:absolute;right:10px;bottom:10px;font:500 10px var(--mono);color:var(--faint)}
.cad-params{overflow:auto;border-left:1px solid var(--line);background:rgba(8,8,10,.55);padding:0 12px 14px}
.cad-params .lp-head{display:flex;align-items:center;justify-content:space-between;padding:12px 0 6px}
.cad-num{width:64px}
.cad-apply{margin:8px 0;width:100%}
.cad-stats{display:grid;gap:6px;margin:6px 0}
.cad-stats div{display:flex;justify-content:space-between;gap:10px;font-size:11.5px;color:var(--dim)}
.cad-stats b{font:500 11px var(--mono);color:var(--sand);text-align:right}
.cad-console{max-height:120px;overflow:auto;border-top:1px solid var(--line);background:rgba(6,6,7,.85);padding:6px 10px;display:grid;gap:3px}
.cad-console:empty{display:none}
.cad-err,.cad-warn,.cad-echo{display:flex;gap:10px;align-items:baseline;width:100%;padding:4px 8px;border:0;border-radius:6px;background:rgba(255,255,255,.03);color:var(--text);text-align:left;font-size:12px}
.cad-err{background:rgba(255,42,42,.1)}.cad-err b{color:#ff6b5a}.cad-warn b{color:#ffb48a}.cad-echo b{color:#9be8b3}
.cad-err b,.cad-warn b,.cad-echo b{font:600 9px var(--mono);letter-spacing:.1em}
.cad-err span,.cad-warn span,.cad-echo span{flex:1}.cad-err em,.cad-warn em{font:500 10px var(--mono);color:var(--faint);font-style:normal}
.asm-sim{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-radius:10px;border:1px solid var(--line2);background:rgba(255,255,255,.03)}
.asm-sim b{font:500 9.5px var(--mono);letter-spacing:.1em;color:var(--hot)}
.asm-check{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--dim);padding:3px 0}
.asm-check input{accent-color:var(--red)}
.view.narrow .cad-body{grid-template-columns:minmax(200px,42%) minmax(0,1fr)}
.view.narrow .cad-params{display:none}
.view.narrow .cad.asm .cad-body{grid-template-columns:minmax(0,1fr) 230px}
.view.narrow .cad.asm .cad-params{display:block}
.view.narrow .cad-bar .btn.mini span{display:none}
.lpr-range .field{width:64px;flex:none}.cad-nogl{position:absolute;inset:0;display:grid;place-items:center;padding:40px;text-align:center;color:var(--dim)}
.cad-params{overflow-x:hidden}.cad-params .lpr-range input[type=range]{min-width:0;width:100%}

/* ==================== CALCULS ==================== */
#view-calc.on{display:flex}
.calc-view{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr);width:100%;min-width:0;min-height:0}
.calc-list{overflow:auto;padding:22px max(18px,calc((100% - 980px)/2)) 80px;display:grid;gap:12px;align-content:start}
.calc-cell{position:relative;border:1px solid var(--line2);border-radius:12px;background:rgba(12,12,14,.7);padding:10px 12px 12px}
.calc-cell:focus-within{border-color:rgba(255,74,46,.55);box-shadow:0 0 0 1px rgba(255,42,42,.12),0 10px 30px rgba(0,0,0,.3)}
.calc-cell.text{background:transparent;border-color:transparent}
.calc-cell.text:hover{border-color:var(--line)}
.calc-tools{display:flex;align-items:center;gap:2px;margin-bottom:6px;opacity:.55;transition:opacity .2s}
.calc-cell:hover .calc-tools,.calc-cell:focus-within .calc-tools{opacity:1}
.calc-tools .icon-btn{width:24px;height:22px;font-size:13px}
.calc-kind{flex:1;font:500 8.5px var(--mono);letter-spacing:.18em;color:var(--hot)}
.calc-grid{display:flex;align-items:flex-start;gap:0}.calc-grid>.calc-src{flex:1;min-width:0}.calc-grid>.calc-res{flex:0 0 38%;min-width:160px;align-self:stretch}
.calc-src{width:100%;resize:none;border:0;outline:none;background:transparent;color:var(--text);font:14px/24px var(--type);padding:0;min-height:46px;overflow:hidden}
.calc-src.mono{font:13px/24px var(--mono);white-space:pre;overflow-x:auto}
.calc-res{border-left:1px solid var(--line);padding-left:12px}
.calc-line{height:24px;font:500 13px/24px var(--mono);color:var(--sand);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.calc-line em{font-style:normal;color:var(--faint)}
.calc-line.err{color:#ff7a68;font-size:11.5px}
.calc-md{font-size:14px;line-height:1.6}
.calc-md h1{font:700 30px/1.1 var(--display);text-transform:uppercase;letter-spacing:.03em;margin:6px 0 8px}
.calc-plot{height:240px;margin-top:8px;border-top:1px solid var(--line)}
.calc-plot canvas{width:100%;height:100%;display:block}
.calc-plot-err{font:500 11px var(--mono);color:#ff7a68;min-height:0}
.calc-add{display:flex;gap:6px;justify-content:center;padding:6px}
.view.narrow .calc-grid>.calc-res{flex-basis:140px;min-width:120px}

/* ==================== APERÇU MOBILE ==================== */
#view-mobile.on{display:flex}
.mob{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr);width:100%;min-width:0;min-height:0}
.mob-source{display:flex;align-items:center;gap:6px;margin-left:6px}
.mob-url{width:230px}
.mob-body{display:grid;grid-template-columns:230px minmax(0,1fr);min-height:0}
.mob-side{overflow:auto;border-right:1px solid var(--line);background:rgba(8,8,10,.55);padding:0 12px 14px}
.mob-side .lp-head{padding:12px 0 6px}
.mob-native{display:grid;gap:6px}
.mob-stage{position:relative;overflow:auto;min-width:0;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;background:radial-gradient(circle at 50% 30%,rgba(80,10,16,.22),transparent 60%),#070708}
.mob-row{display:flex;align-items:center;justify-content:center;gap:30px;width:100%;flex-wrap:nowrap}
.mob-device{display:flex;flex-direction:column;align-items:center;flex:none}
.mob-frame{position:relative;flex:none;transform-origin:top left;padding:14px;background:linear-gradient(145deg,#2a2a30,#0d0d10);box-shadow:0 0 0 1.5px #3a3a42,0 0 0 4px #121216,0 30px 80px rgba(0,0,0,.6),0 0 40px rgba(255,42,42,.12)}
.mob-frame.desktop{padding:14px 14px 22px;background:#151518}
.mob-screen{width:100%;height:100%;overflow:hidden;background:#fff}
.mob-iframe{border:0;display:block;background:#fff}
.mob-notch{position:absolute;left:50%;top:22px;width:90px;height:24px;margin-left:-45px;border-radius:14px;background:#000;z-index:2}
.mob-frame.android .mob-notch{width:14px;height:14px;margin-left:-7px;top:24px}
.mob-frame.land .mob-notch{display:none}
.mob-label{margin-top:8px;font:500 9.5px var(--mono);letter-spacing:.08em;color:var(--faint);transform-origin:top center}
.mob-frame.native{padding:12px;border-radius:34px;transform:none}
.mob-mirror{display:block;max-height:calc(100vh - 230px);max-width:min(60vw,520px);border-radius:24px;cursor:pointer;user-select:none;background:#000}
.mob-native-bar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:center;margin-top:12px}
.mob-mirror-status{font-size:12px;color:var(--faint);margin-right:6px}
.mob-empty{max-width:640px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px}
.mob-empty h2{margin:4px 0 0;font:700 30px var(--display);letter-spacing:.04em}
.mob-empty p{color:var(--dim);margin:0}
.mob-cmds{display:grid;gap:6px;width:100%;margin-top:8px}
.view.narrow .mob-body{grid-template-columns:minmax(0,1fr)}
.view.narrow .mob-side{display:none}
.view.narrow .mob-url{width:150px}
.mob-mirror{touch-action:none}
.mob-device{align-items:flex-start}.mob-label{align-self:stretch;text-align:center}

/* ---------- Projets d'ingénierie ---------- */
.modal.np-modal{width:min(760px,94vw);max-height:90vh;overflow:auto}
.np-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px;margin:4px 0 14px}
.np-card{display:grid;gap:5px;align-content:start;padding:12px;border-radius:12px;border:1px solid var(--line2);background:rgba(255,255,255,.025);color:var(--text);text-align:left;cursor:pointer;transition:border-color .2s,background .2s}
.np-card:hover{border-color:rgba(255,74,46,.45)}
.np-card.on{border-color:var(--red);background:rgba(255,42,42,.1);box-shadow:0 0 0 1px rgba(255,42,42,.35) inset}
.np-top{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.np-top b{font:700 15px var(--display);text-transform:uppercase;letter-spacing:.02em}
.np-top em{font:500 9px var(--mono);letter-spacing:.12em;color:var(--hot);font-style:normal;text-transform:uppercase;white-space:nowrap}
.np-card span{font-size:12px;color:var(--dim);line-height:1.4}
.np-label{display:block;font:500 9.5px var(--mono);letter-spacing:.16em;color:var(--dim)}
.tasks-view{display:grid;gap:12px;align-content:start}
.task-group{border:1px solid var(--line2);border-radius:12px;padding:6px;background:rgba(255,255,255,.02)}
.task-note{display:grid;grid-template-columns:1fr auto;gap:4px 10px;width:100%;padding:8px 10px;border:0;background:none;color:var(--text);text-align:left;cursor:pointer}
.task-note b{font:700 14px var(--display);text-transform:uppercase;letter-spacing:.03em}
.task-note em{font:500 11px var(--mono);color:var(--dim);font-style:normal}
.task-bar{grid-column:1/-1;height:3px;border-radius:2px;background:rgba(255,255,255,.08);overflow:hidden}
.task-bar i{display:block;height:100%;background:var(--red)}
.task-item{display:flex;gap:10px;align-items:flex-start;padding:7px 10px;border-radius:8px;cursor:pointer;font-size:13px}
.task-item:hover{background:rgba(255,255,255,.04)}
.task-item input{accent-color:var(--red);margin-top:2px}
.task-item.done span{color:var(--dim);text-decoration:line-through}

/* ---------- Connexion Sambac ---------- */
.gate{position:fixed;inset:0;z-index:10050;display:grid;place-items:center;padding:20px;background:radial-gradient(circle at 50% 40%,rgba(70,6,10,.96),#040404 72%);opacity:0;transition:opacity .4s}
.gate.in{opacity:1}
.gate-card{width:min(420px,94vw);padding:30px 30px 22px;border-radius:18px;border:1px solid var(--line2);background:radial-gradient(120% 70% at 100% 0%,rgba(255,42,42,.14),transparent 55%),rgba(10,10,12,.97);box-shadow:0 40px 120px rgba(0,0,0,.7);transform:translateY(12px);transition:transform .5s var(--ease)}
.gate.in .gate-card{transform:none}
.gate-brand{display:flex;gap:14px;align-items:center;margin-bottom:20px}
.gate-brand img{width:46px;height:46px;object-fit:contain;filter:drop-shadow(0 0 14px rgba(255,42,42,.5))}
.gate-brand strong{display:block;font:700 26px/1 var(--display);letter-spacing:.1em;color:#fff}
.gate-brand strong em{font-style:normal;color:var(--red)}
.gate-brand span{font:500 9.5px var(--mono);letter-spacing:.18em;color:var(--dim)}
.gate-form{display:grid;gap:10px}
.gate-form h1{margin:0;font:700 30px/1 var(--display);text-transform:uppercase;letter-spacing:.03em}
.gate-sub{margin:0 0 6px;color:var(--dim);font-size:13px}
.gate-row{display:flex;gap:8px;align-items:center}
.gate-row .field{flex:1}
.gate-row.pass{position:relative}
.gate-eye{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:0;background:none;color:var(--dim);padding:6px;cursor:pointer}
.gate-eye.on{color:var(--hot)}
.gate-submit{justify-content:center;padding:11px;font-size:13px}
.gate-msg{min-height:18px;font-size:12.5px}
.gate-msg.err{color:#ff8a7a}.gate-msg.ok{color:#9fdd9f}.gate-msg.warn{color:#ffcf8a}
.gate-links{display:flex;justify-content:space-between;gap:10px}
.gate-site{justify-self:start;font-size:12px}
.gate-server{margin-top:6px;font-size:12px;color:var(--dim)}
.gate-server summary{cursor:pointer;font:500 9.5px var(--mono);letter-spacing:.16em;text-transform:uppercase}
.gate-server .gate-row{margin-top:8px}
.gate-retry{justify-content:center}

/* ---------- Aperçu mobile dans l'éditeur ---------- */
.code-preview{width:560px;flex:none;display:flex;min-width:320px;min-height:0;border-left:1px solid rgba(255,74,46,.2);background:#070708}
.code-preview[hidden],.code-pv-handle[hidden]{display:none}
.code-preview .mob{flex:1}
.code-pv-handle{width:5px;flex:none;cursor:col-resize;background:linear-gradient(90deg,transparent 2px,rgba(255,74,46,.25) 2px,rgba(255,74,46,.25) 3px,transparent 3px)}
.code-pv-handle:hover{background:rgba(255,74,46,.35)}
.icon-btn.on{color:var(--hot)}
.mob-side-btn{display:none}
.mob.compact .mob-side-btn{display:inline-flex}
.mob.compact .lab-title{display:none}
.mob.compact .cad-bar{flex-wrap:wrap;row-gap:6px}
.mob.compact .mob-url{width:150px}
.mob.compact .mob-body{grid-template-columns:minmax(0,1fr)}
.mob.compact .mob-body{position:relative}
.mob.compact .mob-side{display:none;position:absolute;z-index:15;top:0;left:0;bottom:0;width:min(280px,90%);box-shadow:20px 0 50px rgba(0,0,0,.5);background:rgba(10,9,11,.98);animation:dockin .25s var(--ease)}
.mob.compact.side-open .mob-side{display:block}
.mob.compact .cad-bar{position:relative}
.mob.compact .mob-mirror{max-width:100%}
.modal.nf-modal{width:min(520px,94vw)}
.nf-modal .field{margin:4px 0 10px;width:100%}
.nf-modal select.field{appearance:auto}
.nf-note{font-size:12px;color:#ffcf8a;min-height:0}
.nf-files{font:500 11px var(--mono);color:var(--dim);margin:2px 0 10px;word-break:break-all}

/* ---------- Sambac partout (panneau d'assistant) ---------- */
.dock-fab{position:fixed;right:18px;bottom:38px;z-index:900;display:flex;align-items:center;gap:8px;padding:7px 14px 7px 8px;border-radius:999px;border:1px solid rgba(255,74,46,.45);background:rgba(14,8,9,.92);color:#fff;font:600 10px var(--mono);letter-spacing:.16em;cursor:pointer;box-shadow:0 10px 30px rgba(0,0,0,.5),0 0 20px rgba(255,42,42,.18);transition:transform .2s,box-shadow .2s}
.dock-fab:hover{transform:translateY(-2px);box-shadow:0 14px 34px rgba(0,0,0,.6),0 0 26px rgba(255,42,42,.35)}
.dock-fab img{width:22px;height:22px;object-fit:contain}

.dock{position:fixed;right:14px;top:50px;bottom:36px;z-index:950;width:min(440px,calc(100vw - 110px));display:flex;flex-direction:column;border-radius:16px;border:1px solid rgba(255,74,46,.35);background:radial-gradient(120% 50% at 100% 0%,rgba(255,42,42,.1),transparent 60%),rgba(9,8,10,.97);box-shadow:0 30px 90px rgba(0,0,0,.65);animation:dockin .3s var(--ease)}
.dock[hidden]{display:none}
@keyframes dockin{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:none}}
.dock-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 10px 8px 14px;border-bottom:1px solid var(--line)}
.dock-title{display:flex;align-items:center;gap:10px;min-width:0}
.dock-title b{font:700 16px var(--display);letter-spacing:.12em;color:#fff}
.dock-ctx{min-width:0;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:3px 9px;border-radius:999px;border:1px solid rgba(255,74,46,.5);background:rgba(255,42,42,.12);color:#ffd2c8;font:500 9.5px var(--mono);letter-spacing:.06em;cursor:pointer}
.dock-ctx.off{border-color:var(--line2);background:none;color:var(--faint)}
.dock-tools{display:flex;align-items:center;gap:2px;flex:none}
.toggle.mini{padding:3px 8px;font-size:9px}
.dock-ctx-preview{margin:0;max-height:180px;overflow:auto;padding:8px 14px;border-bottom:1px solid var(--line);font:10.5px/1.45 var(--mono);color:var(--dim);white-space:pre-wrap;background:rgba(0,0,0,.3)}
.dock-log{flex:1;overflow:auto;padding:14px}
.dock-empty{display:grid;gap:6px;padding:18px 6px;color:var(--dim);font-size:13px}
.dock-empty b{color:#fff;font:700 18px var(--display);text-transform:uppercase;letter-spacing:.04em}
.dock-msg{margin-bottom:14px}
.dock-msg.user .dock-body{white-space:pre-wrap;padding:9px 12px;border-radius:10px;border:1px solid var(--line);background:rgba(255,255,255,.04);font-size:13px}
.dock-msg.assistant .dock-body{padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);font-size:13px;overflow-x:auto}
.dock-msg.streaming .dock-body{border-color:rgba(255,74,46,.35)}
.dock-steps{display:grid;gap:4px;margin-bottom:6px}
.dock-steps:empty{display:none}
.dock-step{display:flex;gap:8px;align-items:center;padding:4px 8px;border-radius:7px;border:1px solid var(--line);font-size:11px}
.dock-step b{font:500 8.5px var(--mono);letter-spacing:.12em;color:var(--hot);flex:none}
.dock-step code{color:var(--dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dock-step.run{border-color:rgba(255,74,46,.4)}.dock-step.ok b::before{content:"✓ ";color:var(--sand)}.dock-step.ko b::before{content:"✕ "}
.approval.small{padding:8px 10px;font-size:12px}
.dock-sug{display:flex;flex-wrap:wrap;gap:6px;padding:0 12px 8px}
.dock-compose{display:flex;gap:8px;align-items:flex-end;padding:10px 12px 12px;border-top:1px solid var(--line)}
.dock-compose textarea{flex:1;resize:none;border:1px solid var(--line2);border-radius:10px;background:rgba(0,0,0,.35);color:var(--text);padding:9px 11px;font:13px/1.45 var(--type);outline:none;max-height:160px}
.dock-compose textarea:focus{border-color:rgba(255,74,46,.6)}
.lab-ask{border-color:rgba(255,74,46,.5)!important}

.tb-btn.dock-btn{-webkit-app-region:no-drag;color:#fff;border-color:rgba(255,74,46,.55);background:rgba(255,42,42,.12)}
.tb-btn.dock-btn img{object-fit:contain;filter:drop-shadow(0 0 6px rgba(255,42,42,.6))}
.tb-btn.dock-btn.on{background:rgba(255,42,42,.3)}
.np-sync{display:flex;gap:9px;align-items:flex-start;margin:4px 0 8px;font-size:12px;color:var(--dim);cursor:pointer}
.np-sync input{accent-color:var(--red);margin-top:2px}

/* ---------- Projets & tâches Sambac ---------- */
.pj-view{display:grid;grid-template-columns:290px minmax(0,1fr);width:100%;min-width:0;min-height:0}
.view.tight .pj-view{grid-template-columns:minmax(0,1fr)}
.view.tight .pj-side{display:none}
.pj-side{display:flex;flex-direction:column;gap:8px;overflow:auto;padding:0 12px 14px;border-right:1px solid var(--line);background:rgba(8,8,10,.55)}
.pj-card{display:grid;gap:4px;width:100%;padding:10px 12px;border-radius:12px;border:1px solid var(--line2);background:rgba(255,255,255,.025);color:var(--text);text-align:left;cursor:pointer;transition:border-color .2s,background .2s}
.pj-card:hover{border-color:rgba(255,74,46,.45)}
.pj-card.on{border-color:var(--red);background:rgba(255,42,42,.08)}
.pj-card-top{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.pj-card-top b{font:700 15px var(--display);text-transform:uppercase;letter-spacing:.03em}
.pj-card-top em{font:500 8.5px var(--mono);letter-spacing:.12em;color:var(--hot);font-style:normal}
.pj-card>span{font-size:12px;color:var(--dim);line-height:1.35}
.pj-card-foot{display:flex;gap:6px;flex-wrap:wrap}
.pj-st,.pj-folder,.pj-wait,.pj-tag,.pj-hi,.pj-when{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border-radius:999px;font:500 9px var(--mono);letter-spacing:.06em;font-style:normal;border:1px solid var(--line2);color:var(--dim)}
.pj-st.active{color:#9fdd9f;border-color:rgba(120,220,140,.35)}.pj-st.pause{color:#ffcf8a;border-color:rgba(255,200,120,.35)}.pj-st.done{color:var(--faint)}
.pj-wait{color:#ffcf8a;border-color:rgba(255,200,120,.35)}
.pj-hi{color:#fff;background:rgba(255,42,42,.25);border-color:rgba(255,74,46,.5)}
.pj-when.urgent{color:#ffb3a8;border-color:rgba(255,74,46,.5)}
.pj-side-actions{display:grid;gap:6px;margin-top:4px}
.pj-mini{margin-top:auto;padding-top:10px;font-size:12px;color:var(--dim)}
.pj-mini b{font:700 22px var(--display);color:#fff}
.pj-main{display:flex;flex-direction:column;min-width:0;min-height:0}
.pj-bar{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--line)}
.pj-tabs{display:flex;gap:4px;overflow-x:auto;min-width:0;flex:0 1 auto;scrollbar-width:none}.pj-tabs::-webkit-scrollbar{display:none}.pj-tab{flex:none}
.pj-tab{padding:6px 12px;border-radius:8px;border:1px solid transparent;background:none;color:var(--faint);font:500 9.5px var(--mono);letter-spacing:.14em;cursor:pointer}
.pj-tab:hover{color:var(--text)}
.pj-tab.on{color:#fff;border-color:rgba(255,74,46,.5);background:rgba(255,42,42,.12)}
.pj-sync{font:500 9px var(--mono);letter-spacing:.12em;color:#9fdd9f}
.pj-sync.off{color:#ffcf8a}
.pj-body{flex:1;overflow:auto;padding:18px 22px 40px}
.pj-hello h1{margin:2px 0 4px;font:700 34px/1 var(--display);text-transform:uppercase}
.pj-hello p{margin:0 0 16px;color:var(--dim)}
.pj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.pj-box{display:grid;gap:8px;align-content:start;padding:14px 16px;border-radius:14px;border:1px solid var(--line2);background:rgba(255,255,255,.02)}
.pj-box.big{border-color:rgba(255,74,46,.45);background:radial-gradient(120% 80% at 0% 0%,rgba(255,42,42,.12),transparent 60%),rgba(255,255,255,.02)}
.pj-box.wide{grid-column:1/-1}
.pj-box h2{margin:0;font:700 24px/1.1 var(--display);text-transform:uppercase}
.pj-box h3{margin:0;font:700 18px var(--display);text-transform:uppercase}
.pj-box p{margin:0;color:var(--dim);font-size:13px}
.kicker.sub{margin-top:6px}
.kicker.late{color:#ff8a7a}
.pj-next{font-size:13px;color:#ffd2c8}
.pj-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.pj-row.end{justify-content:flex-start;margin:6px 0 14px}
.pj-row .field{flex:1;min-width:160px}
.pj-ev{display:flex;gap:10px;align-items:center;font-size:13px}
.pj-ev b{min-width:52px;font:500 11px var(--mono);color:var(--hot)}
.pj-ev span{flex:1}
.pj-ev em{color:var(--faint);font-style:normal}
.pj-ev.local b::after{content:" •";color:#ffcf8a}
.pj-task{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-radius:10px;border:1px solid transparent}
.pj-task:hover{background:rgba(255,255,255,.03);border-color:var(--line)}
.pj-task.hi{border-left:2px solid var(--red)}
.pj-task input{accent-color:var(--red);margin-top:3px}
.pj-task-main{flex:1;min-width:0;display:grid;gap:3px}
.pj-task-main b{font-weight:500;font-size:13.5px}
.pj-task-main>span{font-size:12px;color:var(--dim)}
.pj-task.done b{color:var(--faint);text-decoration:line-through}
.pj-task-meta{display:flex;gap:5px;flex-wrap:wrap}
.pj-task-acts{display:flex;gap:2px;opacity:0;transition:opacity .2s}
.pj-task:hover .pj-task-acts{opacity:1}
.pj-task-acts .icon-btn{font:500 10px var(--mono);color:var(--dim)}
.icon-btn.del{opacity:.4}.icon-btn.del:hover{opacity:1;color:var(--hot)}
.pj-add{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:6px}
.pj-add .field:first-child{flex:1;min-width:200px}
.pj-date{width:140px}.pj-time{width:100px}
.pj-note-task{display:flex;justify-content:space-between;gap:10px;font-size:12.5px}
.pj-note-task em{color:var(--faint);font-style:normal;font-size:11px}
.pj-empty{display:grid;justify-items:center;gap:10px;padding:60px 20px;text-align:center;color:var(--dim)}
.pj-empty h2{margin:0;font:700 26px var(--display)}
.pj-project{display:grid;gap:8px;max-width:900px}
.pj-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.pj-name{flex:1;min-width:220px;font:700 24px var(--display)!important;text-transform:uppercase;letter-spacing:.02em}
.pj-path{display:block;padding:6px 10px;border-radius:8px;background:rgba(0,0,0,.35);font:12px var(--mono);color:var(--dim);word-break:break-all}
.pj-done summary{cursor:pointer;font-size:12px;color:var(--faint);margin-top:6px}
.pj-tasks{display:grid;gap:12px;max-width:980px}
.pj-sec{display:grid;gap:2px}
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.seg button{padding:5px 10px;border:0;background:none;color:var(--faint);font:500 9px var(--mono);letter-spacing:.12em;cursor:pointer}
.seg button.on{background:rgba(255,42,42,.18);color:#fff}
.pj-agenda{display:grid;gap:12px}
.pj-cal-title{font:700 18px var(--display);text-transform:uppercase;min-width:220px;text-align:center}
.pj-cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.pj-cal-head{font:500 9px var(--mono);letter-spacing:.14em;color:var(--faint);text-align:center}
.pj-cal-day{min-height:160px;padding:6px;border-radius:10px;border:1px solid var(--line);background:rgba(255,255,255,.02);display:flex;flex-direction:column;gap:3px;overflow:hidden}
.pj-cal.month .pj-cal-day{min-height:92px}
.pj-cal-day.today{border-color:var(--red);box-shadow:inset 0 0 0 1px rgba(255,42,42,.4)}
.pj-cal-day.muted{opacity:.4}
.pj-cal-num{font:600 12px var(--mono);color:var(--dim)}
.pj-cal-day.today .pj-cal-num{color:var(--hot)}
.pj-cal-item{font-size:11px;padding:2px 6px;border-radius:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pj-cal-item.ev{background:rgba(255,42,42,.18);color:#ffd2c8}
.pj-cal-item.task{background:rgba(255,255,255,.05);color:var(--dim)}
.pj-cal-item.task.hi{color:#fff}
.muted{color:var(--faint)}
.small{font-size:11.5px}
.mob.compact .mob-mirror{max-height:calc(100vh - 300px)}

/* ---------- Mises à jour ---------- */
.chip.upd-chip{cursor:pointer;-webkit-app-region:no-drag;color:#fff;border-color:rgba(120,220,140,.55);background:rgba(80,200,120,.14)}
.chip.upd-chip.ready{border-color:rgba(120,220,140,.9);background:rgba(80,200,120,.28);animation:pulse-chip 2s ease-in-out infinite}
.chip.upd-chip.err{border-color:rgba(255,74,46,.6);background:rgba(255,42,42,.15)}
.modal.upd-modal{width:min(560px,94vw)}
.upd-notes{max-height:260px;overflow:auto;margin:4px 0 12px;padding:10px 14px;border-radius:10px;border:1px solid var(--line2);background:rgba(255,255,255,.02);font-size:13px}
.upd-progress{display:grid;gap:6px;margin:6px 0 12px;font:500 11px var(--mono);color:var(--dim)}
.upd-bar{height:6px;border-radius:4px;background:rgba(255,255,255,.08);overflow:hidden}
.upd-bar i{display:block;height:100%;background:var(--grad);transition:width .3s}
.upd-ok{color:#9fdd9f!important}.upd-warn{color:#ffcf8a!important}.upd-err{color:#ff8a7a!important}
.upd-status{font-size:12px;color:var(--dim);margin-right:8px}
.upd-notes h1,.upd-notes h2,.upd-notes h3{font:700 15px var(--display);text-transform:uppercase;letter-spacing:.04em;margin:4px 0 6px}.upd-notes ul{margin:0;padding-left:18px}

/* ---------- Pièces jointes (images, PDF) ---------- */
.att-bar{display:flex;flex-wrap:wrap;gap:6px;padding:8px 12px 0}
.att-chip{display:inline-flex;align-items:center;gap:6px;max-width:240px;padding:3px 6px 3px 4px;border-radius:8px;border:1px solid var(--line2);background:rgba(255,255,255,.04);font-size:11.5px;color:var(--text)}
.att-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.att-chip img{width:22px;height:22px;object-fit:cover;border-radius:4px}
.att-chip button{border:0;background:none;color:var(--dim);cursor:pointer;font-size:14px;line-height:1}
.att-chip.loading{opacity:.6}.att-chip.err{border-color:rgba(255,74,46,.6);color:#ffb3a8}
.att-over{outline:2px dashed rgba(255,74,46,.7);outline-offset:-6px}
.msg-att{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.composer .att-bar{padding:6px 10px 0}

/* ---------- Bibliothèque technique ---------- */
.library-view{display:grid;gap:14px;align-content:start}
.lib-search{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.lib-search .field{flex:1;min-width:240px}
.lib-server{display:flex;gap:6px;align-items:center;font:500 11px var(--mono);color:var(--dim)}
.lib-results{display:grid;gap:10px}
.lib-intro p{color:var(--dim);margin:0 0 10px;line-height:1.55}
.lib-suggest{display:flex;gap:6px;flex-wrap:wrap}
.lib-suggest .chip{cursor:pointer}
.lib-hit,.lib-doc{border:1px solid var(--line);background:var(--panel);border-radius:var(--r);padding:12px 14px}
.lib-hit-head{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;margin-bottom:6px}
.lib-hit-head span{color:var(--dim);font-size:12px}
.lib-src{margin-left:auto;font:500 9px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);font-style:normal}
.lib-src.serveur{color:var(--sand)}.lib-src.import{color:var(--hot)}
.lib-hit-body{max-height:240px;overflow:auto;font-size:13px}
.lib-hit-actions{display:flex;gap:6px;margin-top:8px}
.lib-item{display:flex;align-items:center;gap:4px}.lib-item .link-item{flex:1;min-width:0}

/* ---------- Cahiers : solveurs et Python ---------- */
.calc-solve{padding:10px 12px;border-left:1px solid var(--line);min-width:0}
.solve-table{width:100%;border-collapse:collapse;font:12px/1.5 var(--mono)}
.solve-table td{padding:3px 6px;border-bottom:1px solid var(--line);vertical-align:top}
.solve-table td:first-child{color:var(--dim);width:46%}
.solve-table td:last-child{color:var(--text)}
.solve-check{margin-top:6px;font:11px var(--mono);color:var(--sand)}
.solve-plots{display:grid;gap:8px;padding:0 12px 12px}
.solve-drawing{width:100%;max-height:200px;background:rgba(255,255,255,.02);border:1px solid var(--line);border-radius:6px}
.solve-drawing.truss{max-height:320px}
.calc-plot.solve-plot{height:200px}
.py-run{margin-left:6px}
.py-out{padding:8px 12px 12px;display:grid;gap:8px}
.py-stdout,.py-stderr{margin:0;padding:8px 10px;border-radius:6px;background:rgba(0,0,0,.35);font:12px/1.5 var(--mono);white-space:pre-wrap;max-height:320px;overflow:auto}
.py-stderr{color:#ff8a7a;border:1px solid rgba(255,42,42,.3)}
.py-fig{max-width:100%;border-radius:6px;background:#fff}
.py-hint{font:11px var(--mono);color:var(--faint)}
.calc-grid>.calc-solve{flex:0 0 48%;align-self:stretch}

/* ---------- Circuit imprimé ---------- */
.modal.pcb-modal{width:min(1040px,94vw);max-height:92vh;overflow:auto}
.pcb-stats{display:flex;gap:18px;flex-wrap:wrap;margin:6px 0 10px}
.pcb-stats div{display:grid}.pcb-stats b{font:600 18px var(--display);color:var(--text)}.pcb-stats span{font:500 9px var(--mono);letter-spacing:.14em;color:var(--dim)}
.pcb-layers{display:flex;gap:14px;font:11px var(--mono);color:var(--dim);margin-bottom:8px}
.pcb-layer{display:flex;gap:6px;align-items:center}
.pcb-view{background:#050505;border:1px solid var(--line);border-radius:8px;padding:10px}
.pcb-view svg{width:100%;height:auto;display:block}
.pcb-warn{color:#ffd400;font-size:12px}

/* ---------- Machines ---------- */
.mc-view{display:grid;grid-template-columns:minmax(320px,1fr) minmax(380px,1.3fr);gap:16px;height:100%;overflow:auto;padding:18px}
.view.narrow .mc-view{grid-template-columns:1fr}
.mc-col{display:flex;flex-direction:column;gap:12px;min-width:0}
.mc-head{display:flex;align-items:flex-end;gap:8px}.mc-head h2{margin:2px 0 0;font:600 20px var(--display)}
.mc-printers{display:grid;gap:10px}
.mc-empty{border:1px dashed var(--line2);border-radius:var(--r);padding:18px;color:var(--dim);display:grid;gap:8px;justify-items:start}.mc-empty b{color:var(--text)}.mc-empty p{margin:0;line-height:1.55}
.mc-card{border:1px solid var(--line);background:var(--panel);border-radius:var(--r);padding:12px 14px;display:grid;gap:8px}
.mc-card-head{display:flex;align-items:center;gap:8px}.mc-card-head em{font:500 9px var(--mono);letter-spacing:.12em;color:var(--faint);font-style:normal;text-transform:uppercase}
.mc-dot{width:9px;height:9px;border-radius:50%;background:#555}
.mc-card.ready .mc-dot{background:#2ee86a}.mc-card.printing .mc-dot{background:#ff2a2a;box-shadow:0 0 10px #ff2a2a}.mc-card.paused .mc-dot{background:#ffd400}.mc-card.error .mc-dot{background:#ff2a2a}
.mc-status{display:flex;gap:8px;align-items:center;color:var(--dim);font-size:13px}.mc-status code{font-size:11px}
.mc-err{color:#ff8a7a;font-size:12px;margin:0}
.mc-progress{position:relative;height:22px;border-radius:6px;background:rgba(255,255,255,.05);overflow:hidden}
.mc-progress i{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,rgba(255,42,42,.5),rgba(255,138,92,.5))}
.mc-progress span{position:relative;font:11px/22px var(--mono);padding-left:8px}
.mc-temps{display:flex;gap:22px}.mc-temps div{display:grid}.mc-temps span{font:500 9px var(--mono);letter-spacing:.14em;color:var(--faint)}.mc-temps b{font:600 16px var(--display)}
.mc-actions{display:flex;gap:6px;flex-wrap:wrap}
.mc-modal{width:min(520px,92vw)}.mc-field{display:grid;gap:4px;margin-bottom:8px}.mc-field span{font:500 10px var(--mono);letter-spacing:.12em;color:var(--dim)}
.mc-msg{font-size:12px;color:var(--dim)}.mc-msg.ok{color:#2ee86a}.mc-msg.err{color:#ff8a7a}
.mc-pick{display:grid;gap:4px;max-height:50vh;overflow:auto;margin:8px 0}
.mc-instr{display:grid;gap:10px}
.mc-conn,.mc-meas{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.mc-conn .field.small,.mc-meas .field.small{width:auto;min-width:120px}
.mc-readout{display:flex;align-items:flex-end;gap:16px;border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;background:var(--panel)}
.mc-value{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.mc-value b{font:600 44px/1 var(--display);color:var(--text)}.mc-value>span{font:500 18px var(--mono);color:var(--sand)}
.mc-stats{flex-basis:100%;font:11px var(--mono);color:var(--dim)}
.mc-idn{margin-left:auto;font:11px var(--mono);color:var(--faint);text-align:right;max-width:46%}
.mc-chart{height:220px;border:1px solid var(--line);border-radius:var(--r);background:rgba(0,0,0,.25)}.mc-chart canvas{width:100%;height:100%;display:block}
.mc-console{display:grid;gap:6px}.mc-log{margin:0;height:140px;overflow:auto;padding:8px 10px;border-radius:6px;background:rgba(0,0,0,.35);font:11px/1.5 var(--mono);color:var(--dim)}

/* ---------- Routines ---------- */
.rt-view{display:grid;gap:12px;align-content:start}
.rt-head{display:flex;gap:16px;align-items:flex-start}.rt-head p{margin:4px 0 0;color:var(--dim);max-width:640px;line-height:1.5;font-size:13px}.rt-head .btn{margin-left:auto;flex:none}
.rt-list{display:grid;gap:8px}
.rt-card{display:flex;align-items:center;gap:12px;border:1px solid var(--line);background:var(--panel);border-radius:var(--r);padding:10px 12px}
.rt-card.on{border-color:rgba(255,74,46,.35)}
.rt-main{display:grid;gap:2px;flex:1;min-width:0}.rt-main span{color:var(--dim);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rt-main em{font:10px var(--mono);color:var(--faint);font-style:normal}
.rt-switch{position:relative;width:34px;height:18px;flex:none}.rt-switch input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer;z-index:1}
.rt-switch i{position:absolute;inset:0;border-radius:9px;background:rgba(255,255,255,.12);transition:.2s}.rt-switch i::after{content:'';position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#ddd;transition:.2s}
.rt-switch input:checked+i{background:var(--crimson,#c0141a)}.rt-switch input:checked+i::after{left:18px}
.rt-opt{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--dim);margin:4px 0}
.rt-history{display:grid;gap:6px}
.rt-hist{display:grid;grid-template-columns:auto auto 1fr;gap:10px;align-items:baseline;text-align:left;border:1px solid var(--line);border-radius:6px;padding:7px 10px;background:transparent;color:var(--text);cursor:pointer}
.rt-hist em{font:10px var(--mono);color:var(--faint);font-style:normal}.rt-hist span{color:var(--dim);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rt-hist.err b{color:#ff8a7a}
.rt-modal{width:min(560px,92vw)}.rt-out{max-height:60vh;overflow:auto}
.rt-when{display:flex;gap:14px}.rt-days{display:flex;gap:4px}
.rt-day{width:28px;height:28px;border-radius:6px;border:1px solid var(--line2);background:transparent;color:var(--dim);font:600 11px var(--mono);cursor:pointer}.rt-day.on{background:rgba(255,42,42,.18);border-color:var(--red,#ff2a2a);color:var(--text)}

/* ---------- Historique du projet ---------- */
.hs-view{display:grid;gap:12px;align-content:start}
.hs-grid{display:grid;grid-template-columns:minmax(240px,320px) 1fr;gap:14px;min-height:0}
.view.narrow .hs-grid{grid-template-columns:1fr}
.hs-timeline{display:grid;gap:2px;align-content:start;max-height:calc(100vh - 260px);overflow:auto;padding-left:6px;border-left:1px solid var(--line)}
.hs-day{font:500 10px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--sand);margin:10px 0 4px 10px}
.hs-snap{position:relative;display:flex;gap:10px;text-align:left;background:transparent;border:1px solid transparent;border-radius:6px;padding:7px 10px 7px 14px;color:var(--text);cursor:pointer}
.hs-snap:hover{background:rgba(255,255,255,.03)}.hs-snap.on{border-color:rgba(255,74,46,.45);background:rgba(255,42,42,.06)}
.hs-dot{position:absolute;left:-11px;top:13px;width:9px;height:9px;border-radius:50%;background:var(--red,#ff2a2a);box-shadow:0 0 0 3px var(--bg)}
.hs-snap.auto .hs-dot{background:#666}
.hs-snap b{display:block;font-size:13px}.hs-snap em{font:10px var(--mono);color:var(--faint);font-style:normal}
.hs-chg{display:flex;gap:6px;flex-wrap:wrap;font:10px var(--mono);margin-top:2px}.hs-chg .add{color:#2ee86a}.hs-chg .mod{color:#ffb35c}.hs-chg .del{color:#ff6a6a}.hs-files{color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}
.hs-detail{display:grid;gap:10px;align-content:start;min-width:0}
.hs-dhead{display:flex;align-items:center;gap:10px}.hs-dhead b{display:block}.hs-dhead em{font:11px var(--mono);color:var(--faint);font-style:normal}
.hs-summary{color:var(--dim);font-size:13px}
.hs-flist{display:grid;gap:2px;max-height:180px;overflow:auto}
.hs-file{display:flex;gap:10px;text-align:left;background:transparent;border:0;border-radius:4px;padding:4px 8px;color:var(--text);font:12px var(--mono);cursor:pointer}
.hs-file em{width:62px;font-style:normal;font-size:10px;letter-spacing:.06em}.hs-file.modified em{color:#ffb35c}.hs-file.added em{color:#2ee86a}.hs-file.removed em{color:#ff6a6a}
.hs-file.on,.hs-file:hover{background:rgba(255,255,255,.05)}
.hs-factions{display:flex;gap:8px;align-items:center}
.hs-code{border:1px solid var(--line);border-radius:6px;background:rgba(0,0,0,.35);font:12px/1.55 var(--mono);overflow:auto;max-height:calc(100vh - 420px)}
.hs-line{display:grid;grid-template-columns:38px 38px 1fr;white-space:pre}.hs-line em{color:var(--faint);font-style:normal;text-align:right;padding-right:8px;user-select:none}
.hs-line.add{background:rgba(46,232,106,.1)}.hs-line.add span{color:#9ff5bb}.hs-line.del{background:rgba(255,42,42,.12)}.hs-line.del span{color:#ffb0a8}
.hs-skip{color:var(--faint);padding:2px 10px;font-size:11px;background:rgba(255,255,255,.02)}

/* ---------- Équipes ---------- */
.tm-view{display:grid;gap:12px;align-content:start}
.tm-actions{display:flex;gap:6px;margin-left:auto;flex:none;flex-wrap:wrap}
.tm-tabs{display:flex;gap:4px;flex-wrap:wrap}.tm-tabs em{font-style:normal;color:var(--faint)}
.tm-grid{display:grid;grid-template-columns:minmax(280px,1fr) minmax(300px,1.2fr);gap:16px}
.view.narrow .tm-grid{grid-template-columns:1fr}
.tm-col{display:grid;gap:10px;align-content:start}
.tm-shares{display:grid;gap:6px}
.tm-share{display:flex;align-items:center;gap:10px;border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:9px 12px}.tm-share>div{flex:1;min-width:0;display:grid}.tm-share span{color:var(--dim);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tm-members{display:grid;gap:6px}
.tm-member{display:flex;align-items:center;gap:10px}.tm-member>div{flex:1;display:grid}.tm-member span{font:10px var(--mono);color:var(--faint);letter-spacing:.08em}
.tm-member i{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font:600 12px var(--display);font-style:normal;background:rgba(255,42,42,.18);color:var(--text)}
.tm-feed{display:grid;gap:6px;max-height:calc(100vh - 320px);overflow:auto}
.tm-msg{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:baseline;border-bottom:1px solid var(--line);padding:6px 2px;font-size:13px}
.tm-msg em{font:10px var(--mono);color:var(--faint);font-style:normal}.tm-msg.event span{color:var(--dim);font-style:italic}

/* ---------- Offre & crédits ---------- */
.bl-head{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:10px}
.bl-head>div{display:grid;gap:2px;border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:var(--panel)}
.bl-head span{font:500 9px var(--mono);letter-spacing:.14em;color:var(--faint)}.bl-head b{font:600 22px var(--display)}.bl-head em{font-size:12px;color:var(--dim);font-style:normal}
.bl-usage{display:grid;gap:2px;margin:6px 0 10px}.bl-usage div{display:grid;grid-template-columns:1fr auto auto;gap:12px;font-size:12px;padding:4px 0;border-bottom:1px solid var(--line)}.bl-usage em{color:var(--faint);font-style:normal;font-family:var(--mono)}
.bl-plans{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;margin-bottom:10px}
.bl-plan{display:grid;gap:4px;border:1px solid var(--line);border-radius:8px;padding:12px;justify-items:start}.bl-plan.on{border-color:rgba(255,74,46,.5);background:rgba(255,42,42,.06)}.bl-plan span{color:var(--text)}.bl-plan em{font-size:12px;color:var(--dim);font-style:normal}

/* ---------- Documents légaux ---------- */
.legal-overlay{z-index:10100}
.legal-modal{width:min(760px,94vw);max-height:92vh;display:flex;flex-direction:column;gap:10px}
.legal-intro{color:var(--dim);margin:0}
.legal-tabs{display:flex;gap:4px;flex-wrap:wrap}
.legal-body{flex:1;min-height:200px;max-height:52vh;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:6px 18px;background:rgba(0,0,0,.25);font-size:13px;line-height:1.6}
.legal-body table{border-collapse:collapse;font-size:12px}.legal-body td,.legal-body th{border:1px solid var(--line);padding:4px 6px;vertical-align:top}
.legal-check{display:flex;gap:10px;align-items:flex-start;font-size:13px;color:var(--text);cursor:pointer}.legal-check input{margin-top:3px}
.gate-actions{display:grid;gap:8px;margin-top:16px}
.mc-license{font:10px var(--mono);color:var(--faint);letter-spacing:.04em;margin:2px 0 0}
.solve-notice{margin-top:6px;font-size:11px;color:var(--faint);line-height:1.45}
.fb-modal{width:min(620px,94vw)}.fb-modal textarea{resize:vertical}
.fb-preview{max-height:220px;overflow:auto;font:10px/1.4 var(--mono);background:rgba(0,0,0,.35);padding:8px;border-radius:6px;white-space:pre-wrap}
.help-pop{position:fixed;z-index:10020;width:320px;display:grid;gap:2px;padding:8px;border-radius:12px;border:1px solid var(--line2);background:rgba(10,10,12,.98);box-shadow:0 20px 60px rgba(0,0,0,.6)}
.help-pop .lm-item span{color:var(--dim);font-size:12px}
.hw-modal{width:min(640px,94vw)}
.hw-level{display:grid;gap:2px;border:1px solid var(--line);border-radius:10px;padding:10px 14px;margin:6px 0 10px}.hw-level span{font:500 9px var(--mono);letter-spacing:.14em;color:var(--faint)}.hw-level b{font:600 20px var(--display)}.hw-level em{font-style:normal;color:var(--dim);font-size:12px}
.hw-level.complet{border-color:rgba(46,232,106,.4)}.hw-level.leger{border-color:rgba(255,212,0,.4)}.hw-level.serveur{border-color:rgba(255,106,106,.45)}
.hw-table{width:100%;border-collapse:collapse;font-size:12px}.hw-table th{font:500 9px var(--mono);letter-spacing:.12em;color:var(--faint);text-align:left;padding:4px}.hw-table td{padding:6px 4px;border-top:1px solid var(--line)}.hw-table td.ok{color:#7ff0a8}.hw-table td.ko{color:#ff8a7a}
.hw-warn{margin:8px 0;padding-left:18px;color:#ffd27a;font-size:12px;line-height:1.5}

/* ---------- Mode simple, guide ---------- */
.ui-simple .rail-btn[data-view=terminal],.ui-simple .rail-btn[data-view=models],.ui-simple [data-adv]{display:none!important}
.ob-profile{display:grid;grid-template-columns:auto 1fr 1fr;gap:8px;align-items:stretch;margin:10px 0}
.ob-profile>span{font:500 9px var(--mono);letter-spacing:.14em;color:var(--faint);align-self:center}
.ob-prof{display:grid;gap:2px;text-align:left;border:1px solid var(--line2);border-radius:10px;padding:9px 12px;background:transparent;color:var(--text);cursor:pointer}.ob-prof span{font-size:11px;color:var(--dim)}.ob-prof.on{border-color:var(--red,#ff2a2a);background:rgba(255,42,42,.1)}
.guide-card{position:fixed;right:18px;bottom:44px;z-index:9000;width:330px;max-height:70vh;overflow:auto;display:grid;gap:4px;padding:12px;border-radius:14px;border:1px solid var(--line2);background:rgba(10,10,12,.97);box-shadow:0 24px 70px rgba(0,0,0,.6)}
.gd-head{display:flex;align-items:center;gap:8px}.gd-head b{font:600 11px var(--mono);letter-spacing:.14em;color:var(--hot)}.gd-head em{font:11px var(--mono);color:var(--dim);font-style:normal}
.gd-bar{height:4px;border-radius:2px;background:rgba(255,255,255,.08);overflow:hidden;margin:4px 0}.gd-bar i{display:block;height:100%;background:linear-gradient(90deg,#c0141a,#ff8a5c)}
.gd-step{display:flex;gap:10px;text-align:left;background:transparent;border:1px solid transparent;border-radius:8px;padding:7px;color:var(--text);cursor:pointer}.gd-step:hover{background:rgba(255,255,255,.04)}
.gd-step b{display:block;font-size:13px}.gd-step span{font-size:11.5px;color:var(--dim);line-height:1.4}.gd-step.ok b{color:var(--dim);text-decoration:line-through}
.gd-n{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font:600 11px var(--mono);border:1px solid var(--line2)}.gd-step.ok .gd-n{background:rgba(46,232,106,.18);border-color:rgba(46,232,106,.5);color:#7ff0a8}
.gd-hide{justify-self:end;font-size:11px}
.guide-card.min{max-height:none;width:220px}.guide-card.min>:not(.gd-head):not(.gd-bar){display:none}

/* ---------- Contrôle gestuel (viseur holographique) ---------- */
.gx-btn.on{color:var(--hot);border-color:rgba(255,74,46,.7);box-shadow:0 0 14px rgba(255,42,42,.35),inset 0 0 8px rgba(255,42,42,.2)}
.gx-btn.on .ic{filter:drop-shadow(0 0 5px rgba(255,74,46,.9))}
.gx-btn.loading .ic{animation:gx-blink .8s infinite}
#gx{position:fixed;inset:0;pointer-events:none;z-index:9000}
.gx-reticle{position:fixed;left:0;top:0;width:80px;height:80px;transition:opacity .25s;will-change:transform;filter:drop-shadow(0 0 6px rgba(255,42,42,.85))}
.gx-reticle.off{opacity:0}
.gx-ret-svg{overflow:visible}
.gx-ret-svg circle,.gx-ret-svg line,.gx-ret-svg path{fill:none;stroke:var(--hot);stroke-width:1.6}
.gx-ring-out{stroke-dasharray:6 7;transform-origin:center;animation:gx-spin 6s linear infinite;opacity:.85}
.gx-ring-mid{stroke-width:1.2!important;opacity:.6;transition:r .15s var(--ease)}
.gx-core{fill:var(--red)!important;stroke:none!important}
.gx-tick{opacity:.9}
.gx-scroll{opacity:0;transition:opacity .2s}
.gx-reticle.m-pince .gx-ring-mid,.gx-reticle.m-saisie .gx-ring-mid{r:9;opacity:1;stroke-width:2.4!important}
.gx-reticle.m-pince .gx-ring-out{animation-duration:1.2s;stroke:#fff}
.gx-reticle.m-saisie .gx-ring-out{stroke-dasharray:2 4;animation-duration:2s}
.gx-reticle.m-saisie .gx-core{r:5}
.gx-reticle.m-defile .gx-scroll{opacity:1}
.gx-reticle.m-defile .gx-ring-out,.gx-reticle.m-zoom .gx-ring-out{animation-direction:reverse;animation-duration:1.5s}
.gx-reticle.m-zoom .gx-ring-mid{r:24}
.gx-lock{position:fixed;transition:left .12s var(--ease),top .12s var(--ease),width .12s var(--ease),height .12s var(--ease)}
.gx-lock i{position:absolute;width:10px;height:10px;border:2px solid var(--hot);filter:drop-shadow(0 0 4px var(--red))}
.gx-lock i:nth-child(1){left:0;top:0;border-right:0;border-bottom:0}.gx-lock i:nth-child(2){right:0;top:0;border-left:0;border-bottom:0}
.gx-lock i:nth-child(3){left:0;bottom:0;border-right:0;border-top:0}.gx-lock i:nth-child(4){right:0;bottom:0;border-left:0;border-top:0}
.gx-lock.pulse{animation:gx-lock .35s var(--ease)}
.gx-ripple{position:fixed;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 18px var(--red),inset 0 0 10px var(--hot);animation:gx-ripple .6s var(--ease) forwards}
.gx-ripple.right{border-color:var(--sand)}
.gx-panel{position:fixed;right:16px;bottom:16px;width:236px;padding:10px;border-radius:12px;background:rgba(10,10,12,.82);backdrop-filter:blur(10px);border:1px solid rgba(255,74,46,.35);pointer-events:auto;display:grid;gap:8px;box-shadow:0 10px 40px rgba(0,0,0,.5),0 0 24px rgba(255,42,42,.12)}
.gx-head{display:flex;align-items:center;gap:7px}.gx-head .kicker{flex:1}
.gx-dot{width:7px;height:7px;border-radius:50%;background:var(--red);box-shadow:0 0 8px var(--red);animation:ping 1.6s infinite}
.gx-fps{font:9px var(--mono);color:var(--faint)}
.gx-cam{position:relative;aspect-ratio:4/3;border-radius:8px;overflow:hidden;background:#000;border:1px solid var(--line2)}
.gx-cam video{position:absolute;width:1px;height:1px;opacity:0}
.gx-cam canvas{width:100%;height:100%;display:block}
.gx-scan{position:absolute;inset:0;background:linear-gradient(transparent 0,rgba(255,74,46,.18) 50%,transparent 52%) 0 0/100% 200%;animation:gx-scan 2.8s linear infinite;pointer-events:none;mix-blend-mode:screen}
.gx-panel.no-cam .gx-cam{aspect-ratio:4/2.2}
.gx-status{display:flex;align-items:baseline;gap:8px}
.gx-mode{font:600 13px/1 var(--display);letter-spacing:.14em;color:var(--hot);text-shadow:0 0 10px rgba(255,74,46,.6)}
.gx-pose{font:10px var(--mono);color:var(--faint)}
.gx-actions{display:flex;gap:5px}.gx-actions .btn{flex:1;justify-content:center;padding:4px 0;font-size:9px}
.gx-flash{position:fixed;left:50%;top:22%;transform:translate(-50%,0);z-index:9100;pointer-events:none;text-align:center;padding:14px 26px;border-radius:12px;background:rgba(10,10,12,.78);border:1px solid rgba(255,74,46,.5);box-shadow:0 0 40px rgba(255,42,42,.25);animation:gx-in .3s var(--ease)}
.gx-flash b{display:block;font:600 22px/1.1 var(--display);letter-spacing:.16em;color:var(--text);text-shadow:0 0 14px rgba(255,74,46,.8)}
.gx-flash span{font:10px var(--mono);letter-spacing:.14em;color:var(--hot)}
.gx-flash.out{opacity:0;transition:opacity .45s}
.gx-menu{position:fixed;inset:0;z-index:9050;background:radial-gradient(circle at center,rgba(0,0,0,.25),rgba(0,0,0,.6));animation:gx-fade .25s}
.gx-menu.out{opacity:0;transition:opacity .22s}
.gx-menu-ring{position:fixed;width:0;height:0}
.gx-menu-ring i{position:absolute;left:-130px;top:-130px;width:260px;height:260px;border-radius:50%;border:1px dashed rgba(255,74,46,.55);animation:gx-spin 14s linear infinite;box-shadow:0 0 40px rgba(255,42,42,.15) inset}
.gx-menu-ring i+i{left:-262px;top:-262px;width:524px;height:524px;border:1px solid rgba(255,74,46,.18);animation-direction:reverse;animation-duration:30s}
.gx-menu-ring b{position:absolute;transform:translate(-50%,-80%);font:600 18px var(--display);letter-spacing:.3em;color:var(--hot);text-shadow:0 0 16px var(--red)}
.gx-menu-ring span{position:absolute;transform:translate(-50%,60%);white-space:nowrap;font:9px var(--mono);letter-spacing:.14em;color:var(--faint)}
.gx-item{position:fixed;transform:translate(-50%,-50%) scale(.6);opacity:0;display:grid;justify-items:center;gap:5px;width:92px;padding:10px 4px;border-radius:12px;background:rgba(13,13,16,.88);border:1px solid rgba(255,74,46,.35);color:var(--text);font:500 8.5px var(--mono);letter-spacing:.1em;animation:gx-pop .35s var(--ease) forwards;transition:background .15s,box-shadow .15s,border-color .15s}
.gx-item .ic{color:var(--hot)}
.gx-item.hot,.gx-item:hover{background:rgba(255,42,42,.2);border-color:var(--hot);box-shadow:0 0 22px rgba(255,42,42,.5);transform:translate(-50%,-50%) scale(1.12)}
.gx-tuto{max-width:760px}
.gx-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0}
.gx-card{position:relative;display:grid;gap:4px;padding:12px;border-radius:10px;border:1px solid var(--line2);background:rgba(255,255,255,.025)}
.gx-card b{font:600 13px var(--display);letter-spacing:.12em;color:var(--hot)}
.gx-card span{font-size:12px;color:var(--dim)}
.gx-num{position:absolute;right:10px;top:9px;font:9px var(--mono)!important;color:var(--faint)!important}
@keyframes gx-spin{to{transform:rotate(360deg)}}
@keyframes gx-blink{50%{opacity:.3}}
@keyframes gx-ripple{to{transform:scale(4);opacity:0}}
@keyframes gx-lock{from{transform:scale(1.25);opacity:.2}to{transform:none;opacity:1}}
@keyframes gx-scan{to{background-position:0 -200%}}
@keyframes gx-in{from{opacity:0;transform:translate(-50%,10px) scale(.96)}}
@keyframes gx-fade{from{opacity:0}}
@keyframes gx-pop{to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
@media (prefers-reduced-motion:reduce){.gx-ring-out,.gx-scan,.gx-menu-ring i{animation:none}}
