@layer modules{
  /* ── Bouton Live ── */
  .sh-acts{display:flex;align-items:center;gap:var(--sp-8);flex:none}
  .live-btn{position:relative}
  .live-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#ff4d4f;margin-right:var(--sp-6);vertical-align:middle;
    box-shadow:0 0 0 3px rgba(255,77,79,.25)}
  @media (prefers-reduced-motion:no-preference){ .live-dot{animation:livepulse 1.8s ease-in-out infinite} }
  @keyframes livepulse{0%,100%{opacity:1}50%{opacity:.4}}

  /* ── Espace Live (plein écran) - aligné sur le thème clair/sombre de l'app ── */
  #live{position:fixed!important;top:0!important;left:0!important;right:0!important;bottom:0!important;
    width:100vw!important;height:100vh!important;z-index:9999!important;
    max-width:none!important;max-height:none!important;margin:0!important;
    padding:0!important;border:none!important;box-sizing:border-box!important;
    background:transparent!important;overflow:hidden!important}
  #live::backdrop{background:var(--backdrop)}
  .live-card{position:relative;width:100%;height:100%;overflow:hidden;color:var(--txt);
    background:radial-gradient(125% 90% at 50% -8%, color-mix(in srgb,var(--accent) 11%,var(--bg)) 0%, var(--bg) 56%)}
  /* canvas plat infini (pan + zoom) - robuste, sans perspective 3D */
  .vp-scene{position:absolute;inset:0;overflow:hidden;touch-action:none;overscroll-behavior:none;cursor:grab}
  .vp-scene.panning{cursor:grabbing}
  .vp-world{position:absolute;top:0;left:0;width:0;height:0;z-index:3;transform-origin:0 0;will-change:transform}
  .vp-canvas{position:absolute;top:0;left:0}
  /* fond statique aligné au thème : dégradé doux + pointillé discret + vignette */
  .vp-sky{position:absolute;inset:-70px;z-index:0;pointer-events:none;will-change:transform;
    background:radial-gradient(120% 90% at 50% -6%, color-mix(in srgb,var(--accent) 13%,var(--bg)) 0%, var(--bg) 52%, var(--bg2) 100%)}
  .vp-dots{position:absolute;inset:-70px;z-index:1;pointer-events:none;opacity:.5;will-change:transform;
    background-image:radial-gradient(color-mix(in srgb,var(--txt) 14%,transparent) 1px,transparent 1.4px);background-size:26px 26px}
  .vp-vignette{position:absolute;inset:0;z-index:2;pointer-events:none;background:radial-gradient(125% 110% at 50% 42%,transparent 58%,color-mix(in srgb,var(--bg2) 66%,transparent) 100%)}
  .vp-grid{position:absolute;left:-12000px;top:-12000px;width:24000px;height:24000px;pointer-events:none;opacity:0;transition:opacity .15s;
    background-image:linear-gradient(color-mix(in srgb,var(--txt) 12%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--txt) 12%,transparent) 1px,transparent 1px);background-size:24px 24px}
  .vp-snapon .vp-grid{opacity:1}
  /* ── Barre de contrôle unifiée à deux niveaux (bas-centre) ── */
  .vp-bar{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);z-index:6;
    display:flex;flex-direction:column;align-items:stretch;overflow:hidden;max-width:calc(100vw - 32px);
    background:color-mix(in srgb,var(--card) 88%,transparent);backdrop-filter:blur(26px) saturate(1.4);-webkit-backdrop-filter:blur(26px) saturate(1.4);
    border:1px solid var(--line);border-radius:var(--radius-modal);box-shadow:var(--shadow)}
  .vp-bar-extra{display:flex;align-items:center;gap:var(--sp-6);justify-content:center;flex-wrap:nowrap;
    max-height:0;opacity:0;padding:0 var(--sp-14);overflow:hidden;border-bottom:1px solid transparent;
    transition:max-height .24s cubic-bezier(.4,0,.2,1),opacity .16s,padding .24s,border-color .24s}
  .vp-bar.expanded .vp-bar-extra{max-height:54px;opacity:1;padding:var(--sp-10) var(--sp-14);border-bottom-color:var(--line)}
  .vp-bar-main{display:flex;align-items:center;gap:var(--sp-4);justify-content:center;padding:var(--sp-6) var(--sp-8)}
  /* boutons minimalistes (ghost) ; seul Quitter est teinté */
  .vp-bar button{background:transparent;border:none;color:var(--txt);border-radius:var(--radius);cursor:pointer;font-size:var(--fs-md);font-weight:var(--fw-medium);line-height:var(--lh-flat);transition:0s}
  .vp-bar button svg.ic{transition:0s}
  .vp-bar button:not([data-ic]):not(.vp-mini){padding:var(--sp-8) var(--sp-12)}
  .vp-bar button:hover{background:color-mix(in srgb,var(--txt) 9%,transparent)}
  .vp-bar button[data-ic]{width:36px;height:36px;padding:0;display:grid;place-items:center}
  .vp-bar button[data-ic] svg.ic{width:18px;height:18px;color:var(--mut)}
  .vp-bar button[data-ic]:hover svg.ic{color:var(--txt)}
  .vp-bar button.vp-mini,.vp-bar button.vp-mini[data-ic]{width:28px;height:28px;padding:0;color:var(--mut);border-radius:var(--radius);display:grid;place-items:center;font-size:var(--fs-base)}
  .vp-bar button.vp-mini svg.ic{width:14px;height:14px;color:var(--mut)}
  .vp-bar button.vp-mini:hover,.vp-bar button.vp-mini:hover svg.ic{color:var(--txt)}
  .vp-bar #vp-snap.on{background:color-mix(in srgb,var(--accent) 16%,transparent)}
  .vp-bar #vp-snap.on svg.ic{color:var(--accent)}
  .vp-bar .vp-quit{color:var(--err);font-weight:var(--fw-strong)}
  .vp-bar .vp-quit:hover{background:color-mix(in srgb,var(--err) 13%,transparent)}
  .vp-sep{width:1px;height:20px;background:var(--line);flex:none;margin:0 var(--sp-2);opacity:.7}
  .vp-bar .live-dot{margin-left:var(--sp-2)}
  .vp-bar b{font-size:var(--fs-sm);font-weight:var(--fw-bold);letter-spacing:.02em;color:var(--txt)}
  .vp-proj{font-size:var(--fs-sm);color:var(--mut);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vp-bar select{background:color-mix(in srgb,var(--txt) 6%,transparent);border:1px solid var(--line);color:var(--txt);font-size:var(--fs-sm);padding:var(--sp-4) var(--sp-8);border-radius:var(--radius);max-width:150px;cursor:pointer}
  .vp-bar select option{color:var(--txt);background:var(--card)}
  .vp-bar input[type=range]{-webkit-appearance:none;appearance:none;width:118px;height:18px;background:transparent;cursor:pointer;vertical-align:middle}
  .vp-bar input[type=range]::-webkit-slider-runnable-track{height:5px;border-radius:var(--radius-pill);
    background:linear-gradient(var(--accent),var(--accent)) 0/var(--rg,50%) 100% no-repeat,var(--line2)}
  .vp-bar input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:13px;height:13px;margin-top:-4px;border-radius:50%;
    background:var(--on-solid);border:1px solid color-mix(in srgb,var(--accent) 55%,var(--line));box-shadow:var(--elev-1)}
  .vp-bar input[type=range]:active::-webkit-slider-thumb{background:var(--accent);border-color:var(--accent)}
  .vp-bar input[type=range]::-moz-range-track{height:5px;border-radius:var(--radius-pill);background:var(--line2)}
  .vp-bar input[type=range]::-moz-range-progress{height:5px;border-radius:var(--radius-pill);background:var(--accent)}
  .vp-bar input[type=range]::-moz-range-thumb{width:13px;height:13px;border:1px solid color-mix(in srgb,var(--accent) 55%,var(--line));border-radius:50%;background:var(--on-solid);box-shadow:var(--elev-1)}
  #vp-zoom-pct{font-size:var(--fs-sm);color:var(--mut);min-width:40px;text-align:center;font-variant-numeric:tabular-nums}
  .vp-zoom-lbl{cursor:pointer;border-radius:var(--radius-sm);padding:var(--sp-4) var(--sp-6);transition:background .12s,color .12s}
  .vp-zoom-lbl:hover{background:color-mix(in srgb,var(--txt) 9%,transparent);color:var(--txt)}
  /* ── Bouton « + Fenêtre » ── */
  .vp-add-btn{display:inline-flex!important;align-items:center;gap:var(--sp-4);padding:var(--sp-6) var(--sp-12)!important;font-size:var(--fs-sm)!important;font-weight:var(--fw-strong);width:auto!important;height:auto!important;
    border:1px solid color-mix(in srgb,var(--accent) 38%,var(--line))!important;border-radius:var(--radius);
    color:var(--txt)!important;background:color-mix(in srgb,var(--accent) 8%,transparent)!important}
  .vp-add-btn:hover{background:color-mix(in srgb,var(--accent) 18%,transparent)!important}
  .vp-add-btn svg.ic{width:14px;height:14px;color:var(--accent);flex:none}
  .vp-add-btn[aria-expanded="true"]{background:color-mix(in srgb,var(--accent) 16%,transparent)!important;border-color:var(--accent)!important}
  /* ── Picker de fenêtres (flotte au-dessus de la barre, positionné par JS) ── */
  .vp-add-menu{position:absolute;z-index:50;
    background:color-mix(in srgb,var(--card) 94%,transparent);backdrop-filter:blur(22px) saturate(1.4);-webkit-backdrop-filter:blur(22px) saturate(1.4);
    border:1px solid var(--line);border-radius:var(--radius-modal);box-shadow:var(--elev-2);
    padding:var(--sp-10);animation:vpModIn .14s ease;min-width:260px}
  .vp-add-hd{font-size:var(--fs-xs);font-weight:var(--fw-strong);letter-spacing:.04em;text-transform:uppercase;color:var(--mut);
    padding:var(--sp-2) var(--sp-6) var(--sp-8)}
  .vp-add-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2)}
  .vp-add-item{display:flex;flex-direction:column;align-items:center;gap:var(--sp-6);padding:var(--sp-10) var(--sp-6);
    border:0;border-radius:var(--radius);background:transparent;color:var(--txt);font:inherit;font-size:var(--fs-sm);
    cursor:pointer;text-align:center;transition:background .1s}
  .vp-add-item:hover{background:color-mix(in srgb,var(--accent) 13%,transparent)}
  .vp-add-item:hover svg.ic{color:var(--accent)}
  .vp-add-item svg.ic{width:20px;height:20px;color:var(--mut);transition:color .1s}
  .vp-add-item span{font-size:var(--fs-xs);color:var(--mut);line-height:var(--lh-tight)}
  .vp-exp svg.ic{transition:transform .22s}
  .vp-bar.expanded .vp-exp svg.ic{transform:rotate(180deg)}
  /* widget (panneau verre) - optimisé : contain + blur modéré, désactivé pendant la manipulation */
  .vp-w{position:absolute;top:0;left:0;display:flex;flex-direction:column;overflow:hidden;min-width:220px;min-height:150px;contain:layout paint;
    background:color-mix(in srgb,var(--card) 92%,transparent);backdrop-filter:blur(22px) saturate(1.5);-webkit-backdrop-filter:blur(22px) saturate(1.5);border:1px solid var(--line);
    border-radius:var(--radius-modal);box-shadow:var(--shadow);color:var(--txt);transition:none}
  .vp-w.moving{will-change:transform}
  /* pendant drag/pan : on coupe le flou (coûteux) → fluide */
  .vp-dragging .vp-w,.vp-scene.panning .vp-w{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--card)}
  /* guides d'alignement */
  .vp-guide{position:absolute;z-index:9;background:color-mix(in srgb,var(--accent) 80%,transparent);pointer-events:none}
  .vp-guide.v{width:1px;top:-12000px;bottom:-12000px} .vp-guide.h{height:1px;left:-12000px;right:-12000px}
  /* indicateurs d'espacement égal (distribution) - couleur distincte (rose) + embouts */
  .vp-guide.gap-h,.vp-guide.gap-v{background:none;--dist:#ff4d8d}
  .vp-guide.gap-h{height:0;border-top:1px solid var(--dist)}
  .vp-guide.gap-v{width:0;border-left:1px solid var(--dist)}
  .vp-guide.gap-h::before,.vp-guide.gap-h::after{content:"";position:absolute;top:-4px;width:1px;height:9px;background:var(--dist)}
  .vp-guide.gap-h::before{left:0}.vp-guide.gap-h::after{right:0}
  .vp-guide.gap-v::before,.vp-guide.gap-v::after{content:"";position:absolute;left:-4px;width:9px;height:1px;background:var(--dist)}
  .vp-guide.gap-v::before{top:0}.vp-guide.gap-v::after{bottom:0}
  .vp-w-head{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) var(--sp-10);cursor:grab;user-select:none;
    border-bottom:1px solid var(--line);touch-action:none}
  .vp-w-head:active{cursor:grabbing}
  .vp-w-ic svg.ic{width:14px;height:14px;color:var(--mut)}
  .vp-w-title{flex:1;font-size:var(--fs-sm);font-weight:var(--fw-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .vp-w-x{background:transparent;border:none;color:var(--mut);cursor:pointer;padding:var(--sp-2);border-radius:var(--radius-sm);display:grid;place-items:center}
  .vp-w-x:hover{background:color-mix(in srgb,var(--txt) 12%,transparent);color:var(--txt)} .vp-w-x svg.ic{width:14px;height:14px}
  .vp-w-body{flex:1;overflow:hidden;background:var(--bg2);position:relative;cursor:auto}
  .vp-w-body iframe{width:100%;height:100%;border:none;background:var(--paper);display:block}
  .vp-note{width:100%;height:100%;border:none;background:transparent;color:var(--txt);resize:none;padding:var(--sp-12);font:13px/1.5 inherit;outline:none}
  .vp-empty{height:100%;display:grid;place-items:center;text-align:center;color:var(--mut);font-size:var(--fs-md);line-height:1.7}
  .vp-empty span{font-size:var(--fs-xs);color:var(--mut2)}
  .vp-w-rsz{position:absolute;right:0;bottom:0;width:20px;height:20px;cursor:nwse-resize;touch-action:none;z-index:2;
    clip-path:polygon(100% 0,100% 100%,0 100%);
    background:repeating-linear-gradient(-45deg,var(--mut2) 0 1.5px,transparent 1.5px 4.5px);
    opacity:.4}
  .vp-w-rsz:hover{opacity:.75}
  .vp-w-depth{font-size:var(--fs-2xs);color:var(--mut2);font-variant-numeric:tabular-nums}
  .vp-dragging .vp-w-body{pointer-events:none}
  .vp-scene.panning .vp-w{pointer-events:none}   /* pendant un déplacement de vue, aucune fenêtre ne réagit (ni header, ni premier/arrière-plan) */
  /* terminal */
  .vp-term{display:flex;flex-direction:column;height:100%;font-family:var(--font-mono);font-size:var(--fs-sm)}
  .vp-term-out{flex:1;overflow:auto;padding:var(--sp-8) var(--sp-10);white-space:pre-wrap;word-break:break-word;line-height:var(--lh-normal)}
  .vp-term-out .c{color:var(--accent)} .vp-term-out .e{color:var(--err)} .vp-term-out .m{color:var(--mut2)}
  .vp-term-bar{display:flex;align-items:center;gap:var(--sp-6);padding:var(--sp-6) var(--sp-10);border-top:1px solid var(--line)}
  .vp-term-bar .p{color:var(--ok)} .vp-term-bar input{flex:1;background:transparent;border:none;color:var(--txt);font:inherit;outline:none}
  /* éditeur */
  .vp-ed{display:flex;flex-direction:column;height:100%}
  .vp-ed-bar{display:flex;gap:var(--sp-6);padding:var(--sp-6) var(--sp-8);border-bottom:1px solid var(--line)}
  .vp-ed-bar input{flex:1;background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--txt);padding:var(--sp-4) var(--sp-8);font:12px ui-monospace,Menlo,monospace;outline:none}
  .vp-ed-bar button{background:color-mix(in srgb,var(--txt) 9%,transparent);border:1px solid var(--line);color:var(--txt);border-radius:var(--radius-sm);padding:var(--sp-4) var(--sp-10);font-size:var(--fs-sm);cursor:pointer}
  .vp-ed-bar button:hover{background:color-mix(in srgb,var(--txt) 16%,transparent)}
  .vp-ed textarea{flex:1;background:transparent;border:none;color:var(--txt);font:12.5px/1.55 ui-monospace,Menlo,monospace;padding:var(--sp-10);resize:none;outline:none;white-space:pre;overflow:auto}
  /* kpi */
  .vp-kpi{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-8);padding:var(--sp-12);align-content:start;overflow:auto;height:100%}
  .vp-kpi .k{background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-10) var(--sp-12)}
  .vp-kpi .k.wide{grid-column:1/-1}
  .vp-kpi .n{font-size:var(--fs-lg);font-weight:var(--fw-bold);line-height:1.1}
  .vp-kpi .n.mono{font-family:var(--font-mono);font-size:var(--fs-md)}
  .vp-kpi .l{font-size:var(--fs-xs);color:var(--mut);margin-top:var(--sp-2)}
  .vp-kpi .ok{color:var(--ok)} .vp-kpi .warn{color:var(--warn)} .vp-kpi .err{color:var(--err)}
  /* historique */
  .vp-hist{height:100%;overflow:auto;font-size:var(--fs-sm)}
  .vp-hist .m{color:var(--mut)}
  .vp-hrow{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-6) var(--sp-10);border-bottom:1px solid var(--line2)}
  .vp-hst{font-size:var(--fs-2xs);font-weight:var(--fw-bold);padding:var(--sp-1) var(--sp-6);border-radius:var(--radius-sm)}
  .vp-hst.ok{color:var(--ok);border:1px solid color-mix(in srgb,var(--ok) 50%,transparent)} .vp-hst.err{color:var(--err);border:1px solid color-mix(in srgb,var(--err) 50%,transparent)}
  .vp-hact{flex:1;color:var(--txt)} .vp-hv{font-family:var(--font-mono);color:var(--mut)}
  .vp-ht{color:var(--mut2);font-variant-numeric:tabular-nums;white-space:nowrap}
  /* ── États de sélection ── */
  /* État 0 : aucune fenêtre sélectionnée → corps passif (pas de hover, pas de scroll) */
  .vp-w .vp-w-body{pointer-events:none}
  /* État 1 : sélection active → seule la fenêtre .sel retrouve ses interactions */
  .vp-scene.has-sel .vp-w.sel .vp-w-body{pointer-events:auto}
  /* Fenêtres non sélectionnées = retrait visuel doux */
  .vp-scene.has-sel .vp-w:not(.sel){opacity:.4;filter:saturate(.55);transition:opacity .2s,filter .2s}
  /* ── fenêtre sélectionnée (outline accent) ── */
  .vp-w.sel{outline:2px solid color-mix(in srgb,var(--accent) 70%,transparent);outline-offset:-1px}
  /* ── fenêtre verrouillée ── */
  .vp-w.locked .vp-w-rsz{display:none}
  .vp-w.locked .vp-w-head{cursor:default}
  .vp-w-lock{display:inline-flex;align-items:center}
  .vp-w-lock svg.ic{width:12px;height:12px;color:var(--mut2)}
  /* ── éditeur : pastille « non enregistré » ── */
  .vp-ed-dot{width:7px;height:7px;border-radius:50%;background:transparent;flex:none;align-self:center;transition:background .15s}
  .vp-ed-dot.on{background:var(--warn);box-shadow:0 0 0 3px color-mix(in srgb,var(--warn) 22%,transparent)}
  /* ── widget Logs (tail) ── */
  .vp-logs{display:flex;flex-direction:column;height:100%}
  .vp-logs-bar{display:flex;gap:var(--sp-6);padding:var(--sp-6) var(--sp-8);border-bottom:1px solid var(--line)}
  .vp-logs-bar input{flex:1;background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--txt);padding:var(--sp-4) var(--sp-8);font:12px ui-monospace,Menlo,monospace;outline:none}
  .vp-logs-bar button{background:color-mix(in srgb,var(--txt) 9%,transparent);border:1px solid var(--line);color:var(--txt);border-radius:var(--radius-sm);padding:var(--sp-4) var(--sp-10);font-size:var(--fs-sm);cursor:pointer;flex:none}
  .vp-logs-bar button:hover{background:color-mix(in srgb,var(--txt) 16%,transparent)}
  .vp-logs-bar button.on{background:color-mix(in srgb,var(--err) 16%,transparent);border-color:color-mix(in srgb,var(--err) 45%,var(--line));color:var(--err)}
  .vp-logs-out{flex:1;margin:0;overflow:auto;padding:var(--sp-8) var(--sp-10);font:11.5px/1.5 ui-monospace,Menlo,monospace;white-space:pre-wrap;word-break:break-word;color:var(--txt)}
  .vp-logs-out .m{color:var(--mut2)}
  /* ── widget Assistant IA ── */
  .vp-ai{display:flex;flex-direction:column;height:100%}
  .vp-ai-log{flex:1;overflow:auto;padding:var(--sp-10);display:flex;flex-direction:column;gap:var(--sp-8)}
  .vp-ai-empty{margin:auto;color:var(--mut);font-size:var(--fs-sm);text-align:center;padding:var(--sp-16);line-height:1.6}
  .vp-ai-b{max-width:88%;padding:var(--sp-8) var(--sp-10);border-radius:var(--radius);font-size:var(--fs-sm);line-height:var(--lh-normal);white-space:pre-wrap;word-break:break-word}
  .vp-ai-b.me{align-self:flex-end;background:var(--accent);color:var(--on-solid);border-bottom-right-radius:4px}
  .vp-ai-b.ai{align-self:flex-start;background:var(--bg2);border:1px solid var(--line);border-bottom-left-radius:4px}
  .vp-ai-b.sys{align-self:center;background:transparent;color:var(--mut);font-size:var(--fs-xs)}
  .vp-ai-bar{display:flex;align-items:flex-end;gap:var(--sp-6);padding:var(--sp-8) var(--sp-8);border-top:1px solid var(--line)}
  .vp-ai-bar textarea{flex:1;resize:none;max-height:96px;background:var(--bg2);border:1px solid var(--line);border-radius:var(--radius);color:var(--txt);padding:var(--sp-6) var(--sp-8);font:12.5px/1.4 inherit;outline:none}
  .vp-ai-bar button{flex:none;width:32px;height:32px;display:grid;place-items:center;background:var(--accent);border:none;border-radius:var(--radius);color:var(--on-solid);cursor:pointer}
  .vp-ai-bar button svg.ic{width:15px;height:15px}
  .vp-ai-bar button:hover{filter:brightness(1.06)}
  /* ── minimap améliorée (SensAI-inspired) ── */
  .vp-minimap{position:absolute;right:18px;top:18px;z-index:6;width:200px;height:136px;
    border-radius:var(--radius);cursor:pointer;overflow:hidden;
    background:color-mix(in srgb,var(--card) 88%,transparent);
    backdrop-filter:blur(22px) saturate(1.5);-webkit-backdrop-filter:blur(22px) saturate(1.5);
    border:1px solid var(--line);
    box-shadow:0 12px 40px rgba(0,0,0,.28),inset 0 0 0 1px rgba(255,255,255,.05);
    transition:box-shadow .2s}
  .vp-minimap:hover{box-shadow:0 16px 48px rgba(0,0,0,.38),inset 0 0 0 1px rgba(255,255,255,.09)}
  /* conteneur interne des thumbs + viewport */
  .mm-inner{position:absolute;inset:0}
  /* thumb par widget (couleur selon type via --mm-c) */
  .mm-w{position:absolute;overflow:hidden;
    background:color-mix(in srgb,var(--mm-c,var(--accent)) 20%,transparent);
    border:.75px solid color-mix(in srgb,var(--mm-c,var(--accent)) 55%,transparent);
    box-shadow:0 0 0 .5px rgba(0,0,0,.2);
    cursor:pointer;transition:background .1s,box-shadow .1s;
    display:flex;align-items:center;justify-content:center}
  .mm-w:hover{background:color-mix(in srgb,var(--mm-c,var(--accent)) 38%,transparent);
    border-color:var(--mm-c,var(--accent));
    box-shadow:0 0 0 1px var(--mm-c,var(--accent));z-index:4}
  .mm-w-dot{width:4px;height:4px;border-radius:50%;
    background:var(--mm-c,var(--accent));flex:none;opacity:.8;pointer-events:none}
  /* indicateur viewport (double border façon SensAI) */
  .mm-view{position:absolute;z-index:5;pointer-events:none;
    border:1px solid rgba(255,255,255,.55);
    background:rgba(255,255,255,.06);
    border-radius:var(--radius-sm);box-shadow:0 0 0 .75px rgba(0,0,0,.22)}
  .mm-view-inset{position:absolute;inset:1.5px;
    border:.75px solid rgba(255,255,255,.18);border-radius:var(--radius-sm);pointer-events:none}
  /* tooltip survol */
  .mm-tip{position:absolute;display:none;z-index:8;pointer-events:none;
    background:color-mix(in srgb,var(--card) 94%,transparent);
    color:var(--txt);border:1px solid var(--line);
    backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
    font-size:var(--fs-2xs);font-weight:var(--fw-medium);padding:var(--sp-2) var(--sp-8);
    border-radius:var(--radius-sm);white-space:nowrap;
    max-width:calc(100% - 8px);overflow:hidden;text-overflow:ellipsis;
    box-shadow:var(--elev-2)}
  /* grip de redimensionnement (bas-gauche : drag pour élargir/allonger) */
  .mm-grip{position:absolute;bottom:0;left:0;width:16px;height:16px;
    cursor:sw-resize;z-index:9;
    border-bottom:1.5px solid rgba(255,255,255,.4);
    border-left:1.5px solid rgba(255,255,255,.4);
    border-bottom-left-radius:14px;
    opacity:0;transition:opacity .15s}
  .vp-minimap:hover .mm-grip{opacity:.65}
  .mm-grip:hover{opacity:1!important}
  /* bouton toggle minimap actif */
  .vp-bar #vp-map.on{background:color-mix(in srgb,var(--accent) 16%,transparent)}
  .vp-bar #vp-map.on svg.ic{color:var(--accent)}

  /* ── Widget « module » : hôte d'un vrai module de l'app monté nativement ── */
  .vp-w-mod .vp-w-body{padding:0;background:var(--bg2)}
  .vp-mod-host{position:absolute;inset:0;overflow:auto;background:var(--bg2)}
  .vp-mod-host>.vp-empty{position:absolute;inset:0}

  /* ── Sélecteur de module (popover ancré dans la carte Live, au-dessus de la barre) ── */
  .vp-mod-menu{position:absolute;z-index:40;min-width:208px;max-height:60vh;overflow:auto;padding:var(--sp-6);
    background:color-mix(in srgb,var(--card) 94%,transparent);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
    border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--elev-2);
    animation:vpModIn .14s ease}
  @keyframes vpModIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
  .vp-mod-menu .vp-mm-h{padding:var(--sp-6) var(--sp-10) var(--sp-8);font-size:var(--fs-xs);font-weight:var(--fw-strong);letter-spacing:.03em;
    text-transform:uppercase;color:var(--txt2);opacity:.8}
  .vp-mod-menu button{display:flex;align-items:center;gap:var(--sp-10);width:100%;padding:var(--sp-8) var(--sp-10);
    border:0;border-radius:var(--radius);background:transparent;color:var(--txt);font:inherit;font-size:var(--fs-md);
    text-align:left;cursor:pointer}
  .vp-mod-menu button:hover{background:color-mix(in srgb,var(--accent) 14%,transparent)}
  .vp-mod-menu .vp-mm-ic{display:flex;width:18px;height:18px;flex:0 0 18px;color:var(--accent)}
  .vp-mod-menu .vp-mm-ic svg{width:18px;height:18px}
  .vp-mod-menu .vp-mm-empty{padding:var(--sp-10);color:var(--txt2);font-size:var(--fs-md)}

  /* ── Module « Studio » : fenêtre à onglets (surfaces du projet) ── */
  .lstudio{display:flex;flex-direction:column;width:100%;height:100%;background:var(--bg2)}
  .lstudio-head{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) var(--sp-12);border-bottom:1px solid var(--line);
    background:var(--card);flex:0 0 auto}
  .lstudio-name{font-weight:var(--fw-strong);font-size:var(--fs-md);color:var(--txt)}
  .lstudio-head .badge{font-size:var(--fs-2xs);padding:var(--sp-1) var(--sp-6);border-radius:var(--radius-modal);background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent)}
  .lstudio-ver{font-size:var(--fs-xs);color:var(--txt2);font-variant-numeric:tabular-nums}
  .lstudio-body{display:flex;flex:1;min-height:0}
  .lstudio-rail{flex:0 0 168px;overflow:auto;padding:var(--sp-8);border-right:1px solid var(--line);
    background:color-mix(in srgb,var(--card) 60%,transparent);display:flex;flex-direction:column;gap:var(--sp-2)}
  .lstudio-tab{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) var(--sp-10);border:0;border-radius:var(--radius);
    background:transparent;color:var(--txt);font:inherit;font-size:var(--fs-md);text-align:left;cursor:pointer;width:100%}
  .lstudio-tab:hover{background:color-mix(in srgb,var(--txt) 7%,transparent)}
  .lstudio-tab.on{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent);font-weight:var(--fw-strong)}
  .lstudio-ic{display:flex;width:17px;height:17px;flex:0 0 17px}
  .lstudio-ic svg{width:17px;height:17px}
  .lstudio-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .lstudio-pane{position:relative;flex:1;min-width:0;overflow:auto;background:var(--bg2)}


}
