/* EXEMPLE · présentation immersive uniquement. Le contenu du projet démo, les nodes et le moteur restent inchangés. */
body.demo-mode::before{
  content:"";position:fixed;inset:0;z-index:290;
  background:
    radial-gradient(circle at 50% 42%,color-mix(in srgb,var(--accent) 18%,transparent),transparent 46%),
    rgba(0,0,0,.82);
  backdrop-filter:blur(10px) saturate(.78);
}
body.demo-mode #previewPanel{
  position:fixed!important;left:50%!important;top:calc(50% + 18px)!important;
  width:min(94vw,1540px)!important;height:min(82vh,900px)!important;
  min-width:0!important;min-height:420px!important;max-width:none!important;max-height:none!important;
  transform:translate(-50%,-50%)!important;z-index:300!important;
  border:1px solid color-mix(in srgb,var(--accent) 72%,white 8%)!important;
  border-radius:20px!important;overflow:hidden!important;
  background:#080a0c!important;
  box-shadow:0 38px 120px #000,0 0 0 1px color-mix(in srgb,var(--accent) 22%,transparent),0 0 84px color-mix(in srgb,var(--accent) 18%,transparent)!important;
  animation:nvd-demo-wow-in .24s cubic-bezier(.2,.8,.2,1);
}
body.demo-mode #previewPanel>.panel-head{
  height:46px;background:linear-gradient(90deg,color-mix(in srgb,var(--panel) 94%,#000),color-mix(in srgb,var(--accent) 10%,var(--panel)));
  border-bottom-color:color-mix(in srgb,var(--accent) 32%,var(--line));
  padding:0 14px;font-size:12px;
}
body.demo-mode #previewPanel .preview-body{height:calc(100% - 46px)!important;background:#050607}
body.demo-mode #previewPanel .preview-body canvas{min-height:0!important;background:#050607;filter:saturate(1.14) contrast(1.06)}
body.demo-mode #previewPanel .preview-foot{height:40px;padding:0 12px;background:color-mix(in srgb,var(--panel) 92%,#000)}
body.demo-mode #previewPanel .float-resize,
body.demo-mode #previewPanel .float-dock,
body.demo-mode #previewPanel .collapse{display:none!important}
body.demo-mode .demo-mode-banner{
  top:18px;z-index:310;max-width:min(780px,calc(100vw - 28px));
  padding:11px 12px 11px 15px;border-radius:14px;
  box-shadow:0 18px 60px #000b,0 0 36px color-mix(in srgb,var(--accent) 12%,transparent)
}
body.demo-mode .demo-mode-banner b{font-size:11px}
body.demo-mode .demo-mode-banner span{font-size:11px}
@keyframes nvd-demo-wow-in{from{opacity:0;transform:translate(-50%,-47%) scale(.965)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
@media(max-width:760px){
 body.demo-mode #previewPanel{width:calc(100vw - 18px)!important;height:min(78vh,760px)!important;top:calc(50% + 24px)!important;border-radius:15px!important}
 body.demo-mode .demo-mode-banner{top:8px;width:calc(100vw - 18px)}
}
@media(prefers-reduced-motion:reduce){body.demo-mode #previewPanel{animation:none}}


.demo-mode-banner{position:fixed;left:50%;top:58px;transform:translateX(-50%);z-index:160;display:flex;align-items:center;gap:14px;max-width:min(680px,calc(100vw - 28px));padding:9px 10px 9px 13px;border:1px solid color-mix(in srgb,var(--accent) 70%,var(--line));border-radius:12px;background:color-mix(in srgb,var(--panel) 92%,#000);box-shadow:0 14px 44px #0009}.demo-mode-banner.hidden{display:none}.demo-mode-banner>div{display:grid;gap:2px}.demo-mode-banner b{font-size:10px;letter-spacing:.12em;color:var(--accent)}.demo-mode-banner span{font-size:10px;color:var(--muted)}.demo-mode-banner button{border:1px solid var(--accent);background:var(--accent);color:#121416;border-radius:8px;padding:8px 10px;font-weight:800;font-size:10px;cursor:pointer;white-space:nowrap}.demo-mode-banner button:hover{filter:brightness(1.08)}@media(max-width:700px){.demo-mode-banner{top:54px;width:calc(100vw - 16px);gap:8px}.demo-mode-banner span{display:none}.demo-mode-banner button{margin-left:auto}}


.pnp-wrap{position:relative}.pnp-chip{white-space:nowrap;border-color:color-mix(in srgb,var(--ok) 55%,var(--line))}.pnp-chip.live{color:var(--ok);border-color:var(--ok)}.pnp-chip.attention{color:var(--accent);border-color:var(--accent)}.pnp-menu{position:absolute;top:calc(100% + 8px);left:0;z-index:210;width:240px;padding:7px;display:grid;gap:5px;background:var(--panel);border:1px solid var(--line2);border-radius:10px;box-shadow:0 18px 48px #0009}.pnp-menu.hidden{display:none}.pnp-menu button{border:1px solid var(--line);background:var(--panel2);color:var(--text);border-radius:7px;padding:8px 9px;text-align:left;cursor:pointer}.pnp-menu button:hover{border-color:var(--accent)}.pnp-menu small{padding:4px 3px 2px;color:var(--muted);font-size:9px;line-height:1.35}

:root{
  --bg:#090b0d;--panel:#171a1e;--panel2:#1d2126;--line:#2d333b;--line2:#454d57;
  --text:#f1f3f5;--muted:#9ba4ae;--accent:#d7b86a;--accent2:#8fa79d;--ok:#7ca587;
  --shadow:0 8px 24px rgba(0,0,0,.28)
}
body[data-theme="office"]{
  --bg:#ece9e2;--panel:#f7f5f0;--panel2:#eeeae3;--line:#cbc5ba;--line2:#aea79c;
  --text:#24272a;--muted:#6f746f;--accent:#9a7b37;--accent2:#6f8a7f;--ok:#5e7e67;
  --shadow:0 6px 18px rgba(0,0,0,.12)
}
*{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden;background:var(--bg);color:var(--text);font:13px Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
button,input,textarea,select{font:inherit;color:inherit}.spacer{flex:1}
#app{height:100vh;display:grid;grid-template-rows:50px minmax(0,1fr) 118px}
.topbar{display:flex;align-items:center;gap:9px;padding:0 12px;background:var(--panel);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:8px;white-space:nowrap}.brandmark{width:40px;height:40px;border:1px solid var(--line2);border-radius:8px;display:grid;place-items:center;color:var(--accent)}.brandmark svg,.brandmark img{width:100%;height:100%;display:block;border-radius:7px}
.brand span{margin-left:8px;color:var(--muted);font-size:10px;letter-spacing:.16em}.brand .co{margin-left:0;color:inherit;font-size:.62em;letter-spacing:0;vertical-align:.2em}.badge{font-size:9px;border:1px solid var(--line);border-radius:99px;padding:3px 6px;color:var(--muted)}
.btn,.smallbtn,.iconbtn,.generate{background:var(--panel2);border:1px solid var(--line);border-radius:7px;cursor:pointer}.btn{padding:6px 9px;font-size:11px}.btn.primary{border-color:var(--accent)}
.themes{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.themes button,.themes a{border:0;background:transparent;padding:6px 8px;font-size:11px;color:var(--muted);text-decoration:none}.themes button.active,.themes a.active{background:var(--panel2);color:var(--text)}
.workspace{min-height:0;display:grid;grid-template-columns:220px minmax(0,1fr) 275px;gap:8px;padding:8px;overflow:hidden}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;min-width:0;min-height:0;overflow:hidden;box-shadow:var(--shadow)}
.panel-head{height:38px;display:flex;align-items:center;gap:8px;padding:0 10px;border-bottom:1px solid var(--line);font-weight:650;background:var(--panel)}
.panel-head .sub{font-size:10px;color:var(--muted);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tools{margin-left:auto}.iconbtn{width:25px;height:25px;color:var(--muted)}\n.patch .panel-head .tools{display:flex;align-items:center;gap:6px;margin-left:auto;flex:none}.patch .panel-head .tools .iconbtn{display:inline-flex;align-items:center;justify-content:center;width:28px;min-width:28px;height:26px;padding:0}.patch .panel-head .tools #wrapBtn{width:auto;min-width:56px;padding:0 9px;text-align:center;white-space:nowrap}.patch .panel-head .tools .collapse{margin-left:2px}
.panel.collapsed .panel-body{display:none}.panel.collapsed{height:38px!important;min-height:38px!important;resize:none!important}
.resizable-x{resize:horizontal;overflow:auto}.resizable-y{resize:vertical;overflow:hidden}.resizable-both{resize:both;overflow:hidden}
.library{display:flex;flex-direction:column;min-width:170px;max-width:390px}.search{padding:8px;border-bottom:1px solid var(--line)}.search input{width:100%;padding:8px;border:1px solid var(--line);border-radius:7px;background:var(--bg)}
.libscroll{padding:8px;overflow:auto}.lib-section{border-bottom:1px solid var(--line);padding-bottom:4px;margin-bottom:4px}.lib-title{width:100%;display:flex;align-items:center;gap:8px;font:inherit;font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);padding:8px 4px;border:0;background:transparent;cursor:pointer;text-align:left}.lib-title:hover,.lib-title:focus-visible{color:var(--text);outline:none}.lib-chevron{margin-left:auto;font-size:10px;transition:transform .14s ease;transform:rotate(-90deg)}.lib-section.expanded .lib-chevron{transform:rotate(0deg)}.lib-section.collapsed .lib-items{display:none}.lib-items{display:grid;gap:1px}.lib-item{display:flex;justify-content:space-between;padding:7px 8px;border:1px solid transparent;border-radius:7px;cursor:pointer;font-size:11px}.lib-item:hover{background:var(--panel2);border-color:var(--line)}
.center{min-width:0;min-height:0;display:grid;grid-template-rows:minmax(250px,1fr) 125px minmax(170px,220px);gap:8px;overflow:hidden}.upper{min-height:0;display:grid;grid-template-columns:minmax(320px,1.08fr) minmax(300px,.92fr);gap:8px;overflow:hidden}
.patch{position:relative;background:linear-gradient(color-mix(in srgb,var(--panel) 90%,transparent),color-mix(in srgb,var(--panel) 90%,transparent)),linear-gradient(90deg,transparent 23px,color-mix(in srgb,var(--line) 60%,transparent) 24px),linear-gradient(transparent 23px,color-mix(in srgb,var(--line) 60%,transparent) 24px);background-size:auto,24px 24px,24px 24px}
.patch-space{position:relative;min-width:760px;min-height:520px;overflow:auto}.node{position:absolute;width:160px;background:var(--panel2);border:1px solid var(--line2);border-radius:8px;box-shadow:var(--shadow);user-select:none}.node.sel{border-color:var(--accent)}
.nh{padding:7px 8px;border-bottom:1px solid var(--line);font-size:11px;font-weight:650;cursor:grab;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nb{padding:8px;font-size:10px;color:var(--muted);display:grid;gap:5px}.port{display:flex;gap:6px;align-items:center}.dot{width:7px;height:7px;border-radius:50%;background:var(--accent2)}
.preview{display:flex;flex-direction:column;min-width:280px;min-height:220px}.preview-body{height:calc(100% - 38px);position:relative;display:flex;flex-direction:column;min-height:0}.preview-body canvas{width:100%;height:100%;min-height:150px;background:#090b0d;object-fit:contain}.preview-overlay{position:absolute;inset:0 0 34px 0;cursor:crosshair}
.point{position:absolute;width:18px;height:18px;border:2px solid white;border-radius:50%;transform:translate(-50%,-50%);background:#111a;color:white;display:grid;place-items:center;font-size:9px}.preview-foot{height:34px;display:flex;align-items:center;gap:8px;padding:0 9px;border-top:1px solid var(--line);font-size:10px;color:var(--muted);flex:none}
.vibe{min-height:88px}.vibe-body{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;padding:8px;height:calc(100% - 38px)}.vibe-reference{grid-column:1/-1;display:flex;align-items:center;gap:7px;min-width:0}.vibe-image-pick{display:inline-flex;align-items:center;cursor:pointer}.vibe-reference select{height:28px;max-width:150px;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:0 7px;font-size:10px}.vibe-image-thumb{width:36px;height:28px;object-fit:cover;border:1px solid var(--line);border-radius:5px;background:#000}.vibe-reference .sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vibe textarea{resize:none;width:100%;min-height:58px;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:9px 10px}.generate{align-self:end;padding:6px 9px;background:transparent;color:var(--muted);font-size:10px}.vibe-preview{grid-column:1/-1}
.timeline{height:210px;min-height:140px;max-height:380px}.timeline-shell{height:calc(100% - 38px);display:flex;flex-direction:column;min-height:0;overflow:hidden}.timeline-toolbar{height:32px;display:flex;align-items:center;gap:7px;padding:0 8px;border-bottom:1px solid var(--line);flex:none;color:var(--muted);font-size:10px}
.smallbtn{padding:5px 7px;font-size:10px}.timeline-grid-head{display:grid;grid-template-columns:92px minmax(0,1fr) 112px;min-width:760px;height:30px;position:relative;z-index:3}.timeline-grid-head>div{height:30px;display:flex;align-items:center;padding:0 8px;border-bottom:1px solid var(--line);background:var(--panel);color:var(--muted);font-size:9px;letter-spacing:.12em;text-transform:uppercase}.timeline-grid-head .layers-head{border-right:1px solid var(--line)}.timeline-grid-head .route-head{border-left:1px solid var(--line);justify-content:center}.timeline-rows{min-width:760px;position:relative}.timeline-layer-row{display:grid;grid-template-columns:92px minmax(0,1fr) 112px;height:var(--layer-height,30px);min-height:24px;position:relative;isolation:isolate}.timeline-layer-row>div:not(.layer-row-resize){min-height:24px;border-bottom:1px solid var(--line)}.timeline-track-label{display:flex;align-items:center;gap:6px;padding:0 8px;font-size:10px;color:var(--muted);background:var(--panel);border-right:1px solid var(--line);cursor:pointer}.timeline-track{position:relative;background:transparent;overflow:hidden}.timeline-route{display:flex;align-items:center;border-left:1px solid var(--line);background:var(--panel2)}.timeline-route .route-btn{width:100%;height:100%;border:0;background:transparent}.timeline-layer-row:hover .timeline-track-label,.timeline-layer-row:hover .timeline-route{background:color-mix(in srgb,var(--panel2) 70%,var(--panel))}.timeline-layer-row.selected .timeline-track-label{color:var(--text);box-shadow:inset 2px 0 var(--accent)}.layer-type-dot{width:6px;height:6px;border-radius:50%;background:var(--accent2);flex:none}.layer-effect{background:var(--accent)}.layer-shader{background:#b6a4d8}.layer-shadow{background:#839e93}.layer-cue{background:#b29b63}.layer-bridge{background:#8b98a5}.layer-index{margin-left:auto;color:#59616a;font-size:8px}.layer-row-resize{position:absolute;left:0;right:0;bottom:-3px;height:7px;z-index:20;cursor:ns-resize}.timeline-body{position:relative;flex:1;min-height:0;overflow:auto;background:linear-gradient(90deg,transparent 49px,color-mix(in srgb,var(--line) 70%,transparent) 50px);background-size:50px 100%}.timeline-inner{position:relative;min-width:760px;min-height:210px}.playhead{position:absolute;top:30px;bottom:0;width:1px;background:var(--accent);left:92px;z-index:7}.timeline-track .clip{top:4px}.timeline-layer-row .resize{height:calc(100% - 8px)}
.layer-add-wrap{position:relative}.layer-add-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:120;display:grid;min-width:150px;padding:5px;background:var(--panel);border:1px solid var(--line2);border-radius:8px;box-shadow:0 16px 40px #000b}.layer-add-menu.hidden{display:none}.layer-add-menu button{border:0;background:transparent;color:var(--muted);padding:7px 9px;text-align:left;border-radius:5px;cursor:pointer;font-size:10px}.layer-add-menu button:hover{background:var(--panel2);color:var(--text)}
.layer-inspector{display:grid;gap:8px}.layer-inspector b{font-size:13px;color:var(--text)}.tracks{display:contents}.track{position:relative}.track-labels{display:contents}.track-label{display:none}.route-strip{display:contents}.route-title{display:none}.track-route-cell{display:contents}.track .clip{position:absolute;top:4px;height:22px}.clip{min-width:46px;border:1px solid #606973;background:var(--panel2);border-radius:6px;padding:4px 8px;font-size:9px;white-space:nowrap;overflow:hidden;cursor:grab}.clip.cue{border-color:#827653}.clip.shader{border-color:#766c87}.clip.shadow{border-color:#637b72}.clip.bridge{border-color:#6f7d89}.resize{position:absolute;right:0;top:0;width:8px;height:100%;cursor:ew-resize;background:#ffffff12}
.inspector{display:flex;flex-direction:column;min-width:220px;max-width:420px}.inspector-body{padding:10px;overflow:auto;font-size:11px}.field{margin-bottom:10px}.field label{display:block;color:var(--muted);margin-bottom:5px}.field input,.field select{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:7px}
.terminal{margin:0 8px 8px;background:var(--panel);border:1px solid var(--line);border-radius:10px;display:grid;grid-template-rows:30px 1fr 34px;overflow:hidden;resize:vertical;min-height:90px;align-self:stretch;position:relative;z-index:2}.term-tabs{min-width:0}.term-tabs{display:flex;align-items:center;gap:14px;padding:0 10px;border-bottom:1px solid var(--line);font-size:10px;color:var(--muted)}.term-log{padding:8px 10px;overflow:auto;font:10px ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}.term-input{display:flex;border-top:1px solid var(--line)}.term-input input{flex:1;background:var(--bg);border:0;padding:8px 10px;outline:none}.term-input button{width:46px;background:var(--panel2);border:0;border-left:1px solid var(--line)}.live{color:var(--ok)}
@media(max-width:1100px){.workspace{grid-template-columns:190px 1fr}.inspector{display:none}.upper{grid-template-columns:1fr 1fr}}

.timeline-routing-wrap{display:grid;grid-template-columns:minmax(0,1fr) 112px;min-height:0;flex:1;overflow:hidden}
.route-strip{border-left:1px solid var(--line);background:var(--panel);display:grid;grid-template-rows:30px repeat(6,30px);min-width:112px;overflow:hidden}
.route-title{display:grid;place-items:center;font-size:9px;color:var(--muted);border-bottom:1px solid var(--line);letter-spacing:.12em}
.route-btn{border:0;border-bottom:1px solid var(--line);background:var(--panel2);color:var(--muted);font-size:9px;text-align:left;padding:0 8px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.route-btn:hover{color:var(--text);background:color-mix(in srgb,var(--panel2) 80%,var(--accent))}
.route-sheet{position:fixed;right:18px;bottom:135px;width:360px;max-height:68vh;overflow:auto;background:var(--panel);border:1px solid var(--line2);border-radius:12px;box-shadow:0 20px 60px #0009;z-index:80}
.route-sheet.hidden{display:none}.route-sheet-head{height:42px;display:flex;align-items:center;padding:0 12px;border-bottom:1px solid var(--line)}
.route-sheet-head button{margin-left:auto;border:0;background:transparent;color:var(--muted);font-size:22px;cursor:pointer}
.route-section{padding:12px;border-bottom:1px solid var(--line)}.route-section>label{display:block;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;margin-bottom:8px}
.route-modes{display:grid;grid-template-columns:1fr;gap:6px}.route-modes button{border:1px solid var(--line);background:var(--panel2);border-radius:7px;padding:8px;text-align:left;cursor:pointer}
.route-modes button.active{border-color:var(--accent);color:var(--text)}.route-dests{display:grid;gap:5px}.route-dest{display:grid;grid-template-columns:20px 1fr auto;align-items:center;gap:7px;border:1px solid var(--line);border-radius:7px;padding:8px;background:var(--panel2)}
.route-dest small{color:var(--muted);font-size:9px}.route-dest .adapter{color:var(--accent)}
.route-hint{padding:10px 12px;color:var(--muted);font-size:9px;line-height:1.45}
@media(max-width:900px){.timeline-routing-wrap{grid-template-columns:minmax(0,1fr) 86px}.route-strip{min-width:86px}.route-btn{font-size:8px;padding:0 5px}}

body[data-workspace="plateau"] .library,
body[data-workspace="plateau"] .inspector,
body[data-workspace="plateau"] .vibe{display:none}
body[data-workspace="plateau"] .workspace{grid-template-columns:minmax(0,1fr)}
body[data-workspace="plateau"] .center{grid-template-rows:minmax(0,1fr) minmax(150px,230px)}
body[data-workspace="plateau"] .upper{grid-template-columns:minmax(0,1fr) minmax(360px,.8fr)}
.workspace-modes button.active{box-shadow:inset 0 0 0 1px var(--accent);color:var(--text)}
.preferences-modal{position:fixed;inset:0;background:#0009;display:grid;place-items:center;z-index:120}.preferences-modal.hidden{display:none}.preferences-card{width:min(520px,92vw);background:var(--panel);border:1px solid var(--line2);border-radius:14px;box-shadow:0 30px 80px #0009}.preferences-head{height:46px;display:flex;align-items:center;padding:0 14px;border-bottom:1px solid var(--line)}.preferences-head button{margin-left:auto;border:0;background:transparent;font-size:22px;color:var(--muted);cursor:pointer}.preferences-tabs{padding:10px 12px;border-bottom:1px solid var(--line)}.preferences-tabs button{border:1px solid var(--accent);background:var(--panel2);border-radius:7px;padding:7px 10px}.preferences-body{display:grid;gap:14px;padding:16px}.preferences-body label{display:grid;grid-template-columns:1fr auto;align-items:center;gap:12px;color:var(--muted)}.preferences-body input[type="color"]{width:56px;height:34px;border:1px solid var(--line);background:var(--panel2);border-radius:6px;padding:2px}.preferences-body select{background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:7px}.preferences-actions{padding-top:6px}
:root{--gradient-alpha:.35}
.topbar,.panel-head{background-image:linear-gradient(110deg,color-mix(in srgb,var(--accent) calc(var(--gradient-alpha) * 16%),transparent),transparent 35%,color-mix(in srgb,var(--accent2) calc(var(--gradient-alpha) * 10%),transparent))}
body.gradient-off .topbar,body.gradient-off .panel-head{background-image:none}
body.gradient-strong{--gradient-alpha:.78}

/* PATCH CABLES */
.patch-space{isolation:isolate}
.patch-wires{position:absolute;left:0;top:0;z-index:1;overflow:visible;pointer-events:none}
.patch-wires .wire{fill:none;stroke:color-mix(in srgb,var(--accent2) 72%,#d9e0e5);stroke-width:2.2;vector-effect:non-scaling-stroke;pointer-events:stroke;cursor:pointer;filter:drop-shadow(0 1px 1px #0008)}
.patch-wires .wire:hover{stroke:var(--accent);stroke-width:3.4}
.patch-wires .wire.draft{stroke:var(--accent);stroke-dasharray:5 5;opacity:0}.patch-wires .wire.draft.active{opacity:.9}
.node{z-index:2}.nb{gap:3px}.port{min-height:22px;position:relative;display:grid;grid-template-columns:15px minmax(0,1fr) 15px;align-items:center;gap:4px}.port-label{grid-column:2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.port-dot{width:11px;height:11px;border-radius:50%;border:2px solid var(--line2);background:var(--panel);cursor:crosshair;touch-action:none;transition:transform .12s ease,border-color .12s ease,background .12s ease,box-shadow .12s ease}.port-dot:hover{transform:scale(1.35);border-color:var(--accent);background:var(--accent)}.port-dot.input{grid-column:1}.port-dot.output{grid-column:3}.port-in .port-label{text-align:left}.port-out .port-label{text-align:right}
.port-dot.connected{background:#f59e0b!important;border-color:#fcd34d!important;box-shadow:0 0 7px rgba(245,158,11,.85);transform:scale(1.15)}
.port-dot.connected:hover{transform:scale(1.45);box-shadow:0 0 10px rgba(245,158,11,1)}

/* P00 — exécutable / indisponible */
.lib-item.unavailable{opacity:.55}
.lib-item.unavailable:hover{opacity:.8}
.node.unavailable{border-style:dashed;opacity:.85}
.node.unavailable .nh{color:var(--muted)}
.patch-wires .wire.invalid{stroke:#c45c5c;stroke-dasharray:4 3}
.smallbtn.danger{border-color:#a55;color:#e8b4b4}
.hint{font-size:11px;color:var(--muted);line-height:1.45;margin:0}
.pref-list{margin:0;padding-left:18px;font-size:12px;color:var(--muted);line-height:1.5}
.pref-list code{font-size:10px}
.preferences-card.wide{width:min(720px,94vw);max-height:86vh;display:grid;grid-template-rows:46px auto 1fr}
.preferences-tabs{display:flex;flex-wrap:wrap;gap:6px}
.preferences-tabs button.active{background:var(--accent);color:#111;border-color:var(--accent)}
.preferences-body{overflow:auto}
.preferences-body .hidden{display:none!important}
.preferences-body label.stack{grid-template-columns:1fr;gap:6px}
.preferences-body label.stack input{width:100%;padding:8px;border-radius:6px;border:1px solid var(--line);background:var(--panel2);color:var(--text)}
.manual-frame{width:100%;height:min(52vh,420px);border:1px solid var(--line);border-radius:8px;background:#0c0e10}
.inspector-body .hint{margin-top:8px}

.hint.bad{color:#e07a7a}
.patch-space{overflow:hidden;cursor:default}
.patch-world{position:absolute;left:0;top:0;width:2400px;height:1600px;transform-origin:0 0;will-change:transform}
.patch-world .node{position:absolute}
.panel-head .iconbtn{font-size:11px;min-width:28px}

.graph-path{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:4px 8px;border-bottom:1px solid var(--line);background:var(--panel2);font-size:11px}
.graph-path .crumb{border:0;background:transparent;color:var(--accent);cursor:pointer;padding:2px 4px}
.graph-path .crumb-sep{color:var(--muted)}
.vibe-preview{margin-top:8px;border:1px solid var(--line);border-radius:8px;padding:8px;background:var(--panel2)}
.vibe-preview.hidden{display:none}
.vibe-preview-ops{max-height:120px;overflow:auto;font:11px ui-monospace,Menlo,monospace;color:var(--muted);white-space:pre-wrap}
.vibe-preview-actions{display:flex;gap:8px;margin-top:8px}
.vibe-coverage{margin:8px 0;padding:8px 10px;border-radius:6px;border:1px solid var(--line);background:var(--bg);font-size:11px;line-height:1.4}
.vibe-coverage-ok{border-color:#10b981;background:rgba(16,185,129,0.08)}
.vibe-coverage-warn{border-color:#f59e0b;background:rgba(245,158,11,0.08)}
.vibe-coverage-info{border-color:var(--accent);background:rgba(59,130,246,0.08)}
.vibe-coverage-err{border-color:#ef4444;background:rgba(239,68,68,0.08)}
.vibe-coverage-badge{display:inline-block;padding:1px 6px;border-radius:4px;font-size:10px;text-transform:uppercase;letter-spacing:0.5px}
.vibe-coverage-ok .vibe-coverage-badge{background:#10b981;color:#fff}
.vibe-coverage-warn .vibe-coverage-badge{background:#f59e0b;color:#000}
.vibe-coverage-info .vibe-coverage-badge{background:var(--accent);color:#fff}
.vibe-coverage-err .vibe-coverage-badge{background:#ef4444;color:#fff}
.vibe-coverage-title{font-weight:600;margin-top:6px;margin-bottom:2px;font-size:10px;text-transform:uppercase;color:var(--muted)}
.vibe-coverage ul{margin:2px 0 4px 16px;padding:0}
.vibe-coverage li{margin-bottom:2px}
.elements-pane{display:grid;align-content:start;gap:8px;overflow:auto}.elements-actions{display:flex;align-items:center;justify-content:space-between;gap:8px}.elements-actions label{font-size:10px;color:var(--muted)}.element-card{display:grid;grid-template-columns:1fr auto;gap:4px;border:1px solid var(--line);border-radius:8px;padding:8px;background:var(--panel2);cursor:grab}.element-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.element-card span{font-size:10px;color:var(--muted)}.element-card>div{grid-column:1/-1;display:flex;gap:6px}.element-card button{font-size:10px}


/* macOS — laisser visibles les trois contrôles natifs dans la topbar intégrée */
html.electron-macos .topbar{padding-left:84px}



/* No[co]de Channels / Magic FX */
.magic-card{width:min(660px,92vw)}
.magic-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:16px}
.magic-grid button{min-height:88px;display:flex;flex-direction:column;justify-content:center;gap:5px;border:1px solid var(--line);border-radius:12px;background:var(--panel2);color:var(--text);cursor:pointer}
.magic-grid button:hover{border-color:var(--accent);transform:translateY(-1px)}
.magic-grid small{font-size:10px;color:var(--muted)}
.magic-hint{padding:0 16px 16px}
.controls-toolbar{padding:12px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px}
.controls-toolbar .hint{flex:1}
.control-surface{padding:14px 16px;display:grid;gap:10px;max-height:62vh;overflow:auto}
.control-channel{display:grid;grid-template-columns:minmax(140px,1fr) minmax(180px,2fr) 66px 30px;gap:10px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}
.control-channel label{font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.control-channel input[type="range"]{width:100%}
.control-channel output{font:10px ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--accent);text-align:right}
.control-channel button{border:1px solid var(--line);background:var(--panel);border-radius:7px;color:var(--muted);cursor:pointer;height:28px}
.channel-expose{display:grid;grid-template-columns:1fr auto;gap:6px;margin:10px 0}
.channel-expose select,.channel-expose input{background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:7px;color:var(--text)}
.camera-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:8px 0 12px}
.camera-actions button{padding:8px;border:1px solid var(--line);border-radius:8px;background:var(--panel2);cursor:pointer}
.camera-actions .stop{border-color:#7f4545}
@media(max-width:760px){.magic-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.control-channel{grid-template-columns:1fr}.control-channel output{text-align:left}}

/* Companion Studio detect banner */
.companion-detect{position:fixed;left:50%;top:14px;transform:translateX(-50%);z-index:200;min-width:min(640px,94vw);background:var(--panel);border:1px solid var(--accent);border-radius:12px;padding:10px 12px;box-shadow:var(--shadow)}
.companion-detect.hidden{display:none}
.companion-detect p{margin:0 0 8px;font-size:12px}
.companion-detect-actions{display:flex;flex-wrap:wrap;gap:6px}
.companion-detect-actions button{border:1px solid var(--line);background:var(--panel2);border-radius:8px;padding:7px 10px;font-size:11px;cursor:pointer}
.companion-detect-actions button.ghost{background:transparent;color:var(--muted)}


/* Library production mode */
.library-mode{display:flex;align-items:center;gap:7px;padding:6px 10px;color:var(--muted,#8b949e);font-size:11px;border-bottom:1px solid rgba(255,255,255,.06)}
.library-mode input{accent-color:var(--accent,#d7b86a)}
.lib-item.unavailable{opacity:.58}
.engine-offers{display:grid;gap:6px;padding:8px 10px;border-bottom:1px solid var(--line,#30363d)}.engine-offers[hidden]{display:none}.engine-offers p{margin:0;color:var(--muted,#8b949e);font-size:11px;line-height:1.35}

/* 1.4 · Companion Device Editor + Shader Lab, modales contextuelles uniquement */
.companion-editor-dialog,.shader-dialog{width:min(1180px,calc(100vw - 28px));height:min(86vh,860px);padding:0;border:1px solid var(--line,#30363d);border-radius:16px;background:#0c0f12;color:var(--text,#eef1f2);box-shadow:0 28px 100px #000b}
.companion-editor-dialog::backdrop,.shader-dialog::backdrop{background:#000b;backdrop-filter:blur(4px)}
.companion-editor-shell,.shader-shell{height:100%;display:grid;grid-template-rows:auto 1fr;min-height:0}
.companion-editor-shell>header,.shader-shell>header{display:flex;align-items:center;gap:12px;padding:10px 12px;border-bottom:1px solid var(--line,#30363d);background:#12171b}
.companion-editor-shell>header>div,.shader-shell>header>div{display:grid;gap:2px;flex:1}
.companion-editor-shell header span,.shader-shell header span{font-size:11px;color:var(--muted,#8f989f)}
#companionEditorFrame{width:100%;height:100%;border:0;background:#0b0d10}
.shader-dialog{width:min(980px,calc(100vw - 28px));height:min(78vh,760px)}
.shader-shell{grid-template-rows:auto 1fr auto}
.shader-shell textarea{margin:12px;resize:none;border:1px solid var(--line,#30363d);border-radius:12px;background:#07090b;color:#d9efe6;padding:12px;font:12px/1.45 ui-monospace,SFMono-Regular,Menlo,monospace;tab-size:2;outline:none}
.shader-shell textarea:focus{border-color:var(--accent,#d7b86a)}
.shader-actions{display:flex;align-items:center;gap:8px;padding:0 12px 12px}
.shader-actions #shaderStatus{margin-left:auto;font-size:11px;color:var(--muted,#8f989f)}

.copyright-link{color:inherit;text-decoration:none;display:inline-flex;align-items:center;min-height:22px}
.copyright-link .copyright-hover{display:none}
.copyright-link:hover .copyright-default,.copyright-link:focus-visible .copyright-default{display:none}
.copyright-link:hover .copyright-hover,.copyright-link:focus-visible .copyright-hover{display:inline}
.copyright-link:hover,.copyright-link:focus-visible{color:var(--accent);text-decoration:none;outline:none}

.local-agents{border:1px solid var(--line);background:var(--panel2);border-radius:10px;padding:10px;margin:10px 0}
.local-agents-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.local-agents-head>div{display:flex;align-items:baseline;gap:8px;min-width:0}
.local-agents-list{display:grid;gap:6px;max-height:260px;overflow:auto}
.local-agent-row{display:grid;grid-template-columns:auto minmax(0,1fr) 138px;align-items:center;gap:8px;border-top:1px solid var(--line);padding:7px 0}
.local-agent-row:first-child{border-top:0}
.local-agent-info{min-width:0;display:grid;gap:2px}
.local-agent-info b{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.local-agent-info small{font-size:9px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.local-agent-row select{height:28px;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:6px;font-size:10px;padding:0 5px}
.local-agent-row.unavailable{opacity:.58}
.ai-legacy{margin-top:9px;border:1px solid var(--line);border-radius:8px;padding:8px 10px}
.ai-legacy summary{cursor:pointer;color:var(--muted);font-size:11px}
@media(max-width:760px){.local-agent-row{grid-template-columns:auto minmax(0,1fr)}.local-agent-row select{grid-column:2}}

/* Panneaux déplaçables — Vibe, Timeline, Preview */
.center{grid-template-rows:minmax(220px,1fr) var(--vibe-row,minmax(150px,21vh)) var(--timeline-row,minmax(150px,24vh))}
.upper{grid-template-columns:minmax(220px,1.08fr) var(--preview-col,minmax(260px,.92fr))}
body[data-workspace="plateau"] .center{grid-template-rows:minmax(0,1fr) var(--timeline-row,minmax(150px,32vh))}
.panel{position:relative}
.floatable{min-width:0;min-height:0}
.floatable>.panel-head{cursor:grab;user-select:none;touch-action:none}
.floatable>.panel-head:active{cursor:grabbing}
.floatable>.panel-head .tools,.floatable>.panel-head button{cursor:pointer;touch-action:manipulation}
.iconbtn.canvas-zoom,.iconbtn.float-dock{width:auto;min-width:28px;padding:0 7px;font-size:10px}
.float-dock[hidden],.vibe-image-thumb:not(.is-ready){display:none!important}
.vibe-image-thumb.is-ready{display:block;width:36px;height:28px;object-fit:cover;border:1px solid var(--line);border-radius:5px;background:#000}
.float-slot{min-width:0;min-height:0;height:100%;overflow:hidden;pointer-events:none}
.float-resize{position:absolute;right:0;bottom:0;width:16px;height:16px;cursor:nwse-resize;z-index:4;touch-action:none}
.float-resize::after{content:"";position:absolute;right:3px;bottom:3px;width:7px;height:7px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);opacity:.75}
.panel.is-floating{position:fixed;z-index:40;display:flex;flex-direction:column;margin:0;max-width:calc(100vw - 16px);max-height:calc(100vh - 16px);box-shadow:0 22px 60px #000c}
.panel.is-floating>.panel-head{flex:none}
.panel.is-floating>.panel-body{flex:1;min-height:0;overflow:hidden}
.panel.vibe,.panel.timeline{height:100%;max-height:none;min-height:0;display:flex;flex-direction:column}
.panel.vibe>.panel-body,.panel.timeline>.panel-body{flex:1;min-height:0}
.vibe-body{display:flex;flex-direction:column;gap:8px;height:auto;min-height:0;overflow:hidden;padding:8px}
.vibe-scroll{min-height:0;overflow:auto;display:flex;flex-direction:column;gap:8px}
.vibe-actions{flex:none;display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--bg);border-top:1px solid var(--line);margin:0 -8px -8px;padding:7px 8px}
.vibe-result{display:flex;align-items:center;gap:7px;min-width:0;font-size:10px;color:var(--muted)}
.vibe-result span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vibe-result .smallbtn:first-of-type{background:var(--accent);border-color:var(--accent);color:#14160f;font-weight:700}
.vibe-result.hidden{display:none}
.vibe textarea{min-height:72px;flex:1}
.generate{align-self:auto;padding:7px 14px;background:var(--accent);color:#14160f;border-color:var(--accent);font-weight:700}
.timeline-shell{height:auto;flex:1;min-height:0}
.panel.preview.is-floating{min-height:180px}
.panel.preview.is-floating .preview-body{height:auto;flex:1}
@media(max-height:760px){
  .center{grid-template-rows:minmax(120px,1fr) var(--vibe-row,minmax(132px,24vh)) var(--timeline-row,minmax(128px,26vh))}
}

/* Le Designer reste utilisable dans une fenêtre étroite et sur téléphone :
   aucun panneau ne doit obliger l'utilisateur à faire défiler toute la page
   horizontalement pour atteindre Envoyer ou Appliquer. */
@media(max-width:760px){
  #app{grid-template-rows:50px minmax(0,1fr) 100px;min-width:0}
  .topbar{gap:6px;padding:0 8px;overflow-x:auto;scrollbar-width:none}
  .topbar::-webkit-scrollbar{display:none}
  .brand span:not(.co),.badge{display:none}
  .workspace{grid-template-columns:minmax(0,1fr);gap:6px;padding:6px;overflow:hidden}
  .library{display:none}
  .center{grid-template-rows:minmax(250px,1fr) minmax(168px,22vh) minmax(160px,25vh);gap:6px;min-width:0}
  .upper{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(118px,1fr) minmax(118px,1fr);gap:6px;overflow:hidden}
  .patch,.preview{min-width:0;min-height:0}
  .patch-space{min-width:0;min-height:0}
  .preview-body canvas{min-height:80px}
  .panel-head{padding:0 8px}
  .panel-head .sub{max-width:42vw}
  .vibe-actions{flex-wrap:wrap}
  .vibe-result{flex:1 1 100%}
  .vibe-result span{flex:1}
  .terminal{margin:0 6px 6px;min-height:78px;grid-template-rows:28px 1fr 30px}
  #nvd-release-notice{width:calc(100vw - 16px)!important;max-width:390px}
}

.show-lock-badge{display:inline-flex;align-items:center;font-size:10px;font-weight:750;letter-spacing:.04em;border:1px solid var(--accent);border-radius:99px;padding:3px 8px;color:#1a160c;background:var(--accent)}
.show-lock-badge[hidden]{display:none}
.show-lock-banner{display:flex;align-items:center;min-height:28px;padding:4px 10px;background:color-mix(in srgb,var(--accent) 24%,var(--panel));color:var(--text);border-bottom:1px solid var(--accent);font-size:11px;font-weight:700;letter-spacing:.04em}
.show-lock-banner[hidden]{display:none}
body.show-locked #patchPanel{box-shadow:inset 0 0 0 1px var(--accent),var(--shadow)}
body.show-locked .nh,body.show-locked .port-dot{cursor:not-allowed}

.about-credit{margin:2px 0 0;color:var(--text);font-size:12px;line-height:1.45;white-space:pre-line}
.credit-link{color:inherit;text-decoration:none;cursor:pointer}
.credit-link:hover,.credit-link:focus-visible{color:var(--accent);text-decoration:none;outline:none}

.pane-tabs{display:flex;gap:4px;min-width:0}
.pane-tab{border:1px solid var(--line);background:transparent;color:var(--muted);border-radius:6px;padding:3px 7px;font-size:10px;font-weight:700;cursor:pointer}
.pane-tab.active{background:var(--accent);color:#111;border-color:var(--accent)}
.pane-hidden{display:none !important}
.ai-chat{display:flex;flex-direction:column;gap:8px;min-height:0}
.ai-chat-log{flex:1;overflow:auto;display:flex;flex-direction:column;gap:8px;min-height:80px}
.ai-chat-msg{border:1px solid var(--line);border-radius:8px;padding:8px;white-space:pre-wrap;font-size:11px;line-height:1.4}
.ai-chat-msg.user{align-self:flex-end;max-width:96%;background:var(--panel2)}
.ai-chat-msg.assistant{align-self:flex-start;max-width:100%}
.ai-chat-msg.status{color:var(--muted)}
.ai-chat-form{display:grid;gap:6px}
.ai-chat-form textarea{min-height:68px;resize:vertical;background:var(--bg);color:inherit;border:1px solid var(--line);border-radius:8px;padding:8px;font:inherit}
.provider-routes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:8px 0}.provider-routes label,.provider-card label{display:grid;gap:5px;font-size:11px}.provider-routes select,.provider-card input,.provider-card select{min-width:0;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:6px}.provider-card{display:grid;gap:8px;margin:10px 0;padding:10px;border:1px solid var(--line);border-radius:8px;background:var(--panel2)}.provider-cloud-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}#aiCliList{display:grid;gap:6px}#aiCliList label{display:block}@media(max-width:760px){.provider-routes,.provider-cloud-grid{grid-template-columns:1fr}}
.electron-only{display:none!important}.electron-runtime .electron-only{display:grid!important}


/* Voice dictation · optional progressive enhancement for the Vibe prompt */
.vibe-input-wrap{position:relative;display:flex;flex:1;min-height:0}
.vibe-input-wrap textarea{flex:1;padding-right:44px}
.vibe-voice{position:absolute;right:8px;bottom:8px;width:30px;height:30px;display:grid;place-items:center;padding:0;border:1px solid var(--line);border-radius:999px;background:color-mix(in srgb,var(--panel) 88%,#000);color:var(--muted);cursor:pointer;z-index:2}
.vibe-voice:hover:not(:disabled){color:var(--text);border-color:var(--muted)}
.vibe-voice:disabled{opacity:.35;cursor:default}
.vibe-voice svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.vibe-voice.listening{color:var(--accent);border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}
.vibe-voice-status{min-height:12px;margin-top:-5px;padding:0 4px;color:var(--muted);font-size:9px;line-height:12px}

/* Audio / Broadcast · réglages opérateur */
.node-audio{border-color:color-mix(in srgb,#67a8c8 48%,var(--line2));}
.node-radio,.node-broadcast{border-color:color-mix(in srgb,#ff476f 55%,var(--line2));}
.node-radio .nh,.node-broadcast .nh{padding-right:62px;position:relative}
.node-on-air{position:absolute;right:6px;top:5px;padding:3px 6px;border:1px solid #51404a;border-radius:5px;background:#171116;color:#8e7d86;font:900 7px/1 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.08em}
.node-on-air.live{border-color:#ff4564;background:#b5102d;color:#fff;box-shadow:0 0 18px #ff244c55}
.inspector.node-settings-focus{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 72%,transparent),0 12px 38px #0007;transition:box-shadow .18s ease}
.audio-settings-card,.radio-live-card{margin:8px 0 12px;padding:9px;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--panel2) 86%,#000)}
.audio-settings-head,.radio-live-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:9px}
.audio-settings-head b,.radio-live-head b{font:900 10px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.08em}
.audio-settings-head span,.radio-live-head span{font-size:9px;color:var(--muted)}
.audio-toggle-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:8px 0}
.audio-toggle-grid label{display:grid;gap:4px;color:var(--muted);font-size:9px}
.audio-toggle-grid select{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:6px}
.radio-live-card{border-color:#57303e;background:linear-gradient(180deg,#191015,#0e0b0e)}
.radio-live-card.armed{border-color:#a93049;box-shadow:inset 0 0 24px #9f17301a}
.radio-live-head b{color:#ff6f8a}.radio-live-head span{max-width:55%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.radio-pair{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;margin:8px 0 10px}
.radio-pair input{min-width:0;background:#0a080b;border:1px solid #563847;border-radius:7px;padding:8px}
.radio-pair button,.radio-owner-ok button,.radio-public-actions button{border:1px solid #563847;border-radius:7px;background:#1b1117;color:#e7d8df;padding:7px 8px;cursor:pointer;font-size:9px}
.radio-owner-ok{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:8px 0 10px;padding:7px 8px;border:1px solid #345845;border-radius:7px;background:#0f1a14;color:#98d0ae;font-size:9px}
.radio-air-actions{display:grid;grid-template-columns:1.35fr .8fr;gap:7px;margin:11px 0 7px}
.radio-air-actions button{min-height:44px;border-radius:8px;font:950 11px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.1em;cursor:pointer}
.radio-on-air-btn{border:1px solid #ff4b66;background:#b40d2b;color:#fff;box-shadow:0 8px 26px #a6002444}
.radio-on-air-btn:hover{filter:brightness(1.1)}
.radio-standby-btn{border:1px solid #4a3b43;background:#171217;color:#b8aab1}
.radio-public-actions{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px}
@media(max-width:520px){.audio-toggle-grid,.radio-pair,.radio-air-actions,.radio-public-actions{grid-template-columns:1fr}}

/* Timeline Media & Drag Feedback */
.timeline-media-btn{cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center}
.timeline-layer-row.drag-over{background:color-mix(in srgb,var(--accent) 15%,var(--panel2)) !important;box-shadow:inset 0 0 0 1px var(--accent) !important}
.timeline-track.drag-over{background:color-mix(in srgb,var(--accent) 10%,transparent) !important}
.timeline-drop-hint{position:absolute;left:18px;top:50%;transform:translateY(-50%);font-size:9px;color:var(--muted);opacity:.45;pointer-events:none;white-space:nowrap}
.timeline-track:not(:empty) .timeline-drop-hint{display:none}

/* Éléments & Chutier dans le panneau droit */
.elements-pane{display:grid;align-content:start;gap:8px;overflow:auto}
.elements-actions{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-bottom:4px}
.elements-filter-row{margin-bottom:4px}
.elements-search-input{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:6px 8px;font-size:11px}
.elements-chips{display:flex;gap:4px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none;margin-bottom:4px}
.elements-chips::-webkit-scrollbar{display:none}
.elements-chips .chip{border:1px solid var(--line);background:var(--panel2);color:var(--muted);border-radius:99px;padding:2px 7px;font-size:9px;cursor:pointer;white-space:nowrap}
.elements-chips .chip:hover{color:var(--text);border-color:var(--line2)}
.elements-chips .chip.active{background:var(--accent);color:#111;border-color:var(--accent);font-weight:700}
.element-card{display:grid;gap:5px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--panel2);cursor:grab;transition:border-color .12s ease}
.element-card:hover{border-color:var(--line2);background:color-mix(in srgb,var(--panel2) 90%,#fff)}
.element-card.dragging{opacity:.4}
.element-head{display:flex;align-items:center;justify-content:space-between;gap:6px}
.element-head b{font-size:11px;font-weight:700;color:var(--text)}
.element-type-badge{font-size:9px;color:var(--accent);padding:1px 5px;background:color-mix(in srgb,var(--accent) 12%,transparent);border-radius:4px;white-space:nowrap}
.element-sub{margin:0;font-size:10px;color:var(--muted);line-height:1.35;max-height:2.7em;overflow:hidden;text-overflow:ellipsis}
.element-actions{display:flex;gap:5px;margin-top:2px}
.element-actions button{flex:1;text-align:center;padding:4px 6px;font-size:10px}

/* Fenêtre étroite / tablette : la Library (masquée par la grille ≤760px) reste accessible en tiroir. */
.library-toggle{display:none}
@media(max-width:760px){
  .library-toggle{display:inline-flex;align-items:center;white-space:nowrap}
  body.library-open .library{display:flex;flex-direction:column;position:fixed;top:50px;left:0;bottom:0;width:min(320px,86vw);z-index:140;box-shadow:12px 0 40px #000a;background:var(--panel)}
}

/* Remote Camera : QR lisible (fond blanc, taille fixe, jamais rogné) */
.rc-qr{display:inline-block;background:#fff;padding:6px;border-radius:8px;margin:6px 0;line-height:0}.rc-qr svg{width:180px;height:180px;max-width:100%}

/* 3.3.13 · Fenêtre étroite (≤760px) : l'en-tête passe sur plusieurs lignes au lieu de faire se chevaucher
   ses boutons (Bureau/Plateau étaient recouverts par « ＋ Objets »/Controls et ne recevaient plus les clics). */
@media(max-width:760px){
  #app{grid-template-rows:auto minmax(0,1fr) 100px}
  .topbar{flex-wrap:wrap;overflow:visible;row-gap:4px;padding:4px 8px;min-height:50px}
  .topbar>*{flex-shrink:0}
  .topbar>.spacer{display:none}
  .topbar .btn,.topbar .themes button,.topbar .themes a{min-height:36px}
  body.library-open .library{top:var(--nvd-topbar-h,50px);max-height:calc(100dvh - var(--nvd-topbar-h,50px))}
  /* Exemple : la Library ouverte (tiroir) passe au-dessus du voile et de la bannière d'Exemple au lieu d'être masquée. */
  body.demo-mode.library-open .library{z-index:320}
  body.demo-mode #previewPanel{max-height:calc(100dvh - 90px)!important}
}
/* 3.3.13 · Tablette (761–1180px) : même principe, l'en-tête passe à la ligne au lieu de pousser OUTPUT hors écran. */
@media(min-width:761px) and (max-width:1180px){
  #app{grid-template-rows:auto minmax(0,1fr) 118px}
  .topbar{flex-wrap:wrap;row-gap:4px;padding:4px 12px;min-height:50px}
  .topbar>*{flex-shrink:0}
}

/* Conduite · cartouches */
.conduite-dialog{width:min(1060px,calc(100vw - 28px));height:min(80vh,780px);padding:0;border:1px solid var(--line,#30363d);border-radius:16px;background:#0c0f12;color:var(--text,#eef1f2);box-shadow:0 28px 100px #000b}
.conduite-dialog::backdrop{background:#000b;backdrop-filter:blur(4px)}
.conduite-shell{display:grid;grid-template-rows:auto minmax(0,1fr);height:100%}
.conduite-shell>header{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line,#30363d)}
.conduite-shell>header span{display:block;color:var(--muted,#8b949e);font-size:11px;margin-top:2px}
.conduite-host{min-height:0;display:flex;flex-direction:column}
.cd-bar{display:flex;gap:8px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line,#30363d)}
.cd-bar button,.cd-bar select,.cd-file,.cd-edit button{background:var(--panel2,#161b22);color:inherit;border:1px solid var(--line,#30363d);border-radius:7px;padding:5px 9px;font-size:11px;cursor:pointer}
.cd-bar button:disabled{opacity:.4;cursor:default}.cd-sp{flex:1}
.cd-notice{margin:0;padding:8px 12px;background:#3a2a10;color:#f0c987;font-size:11px}
.cd-body{display:grid;grid-template-columns:minmax(0,1fr) 300px;min-height:0;flex:1}
.cd-list{list-style:none;margin:0;padding:6px;overflow:auto;min-height:0}
.cd-row{display:flex;align-items:center;gap:8px;padding:6px 8px;margin-bottom:4px;border:1px solid var(--line,#30363d);border-left:5px solid var(--cd,transparent);border-radius:8px;background:var(--panel,#11151a);font-size:12px;cursor:grab}
.cd-row.selected{outline:2px solid var(--accent,#7fd1c4);background:color-mix(in srgb,var(--panel2,#161b22) 80%,var(--accent,#7fd1c4))}
.cd-row:focus-visible{outline:2px solid #fff}
.cd-grip{color:var(--muted,#8b949e)}.cd-num{min-width:2.2em;color:var(--muted,#8b949e);font-variant-numeric:tabular-nums}
.cd-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cd-page,.cd-group{font-size:10px;padding:1px 6px;border-radius:99px;border:1px solid var(--line,#30363d);color:var(--muted,#8b949e)}
.cd-row button{background:transparent;color:inherit;border:1px solid var(--line,#30363d);border-radius:6px;padding:2px 7px;cursor:pointer}
.cd-fav.on{color:#f2c94c}.cd-go{background:var(--accent,#7fd1c4)!important;color:#06100e!important;font-weight:700}
.cd-edit{border-left:1px solid var(--line,#30363d);padding:12px;overflow:auto;display:flex;flex-direction:column;gap:8px;font-size:11px}
.cd-edit h4{margin:0 0 4px;font-size:13px}.cd-edit label{display:grid;gap:3px;color:var(--muted,#8b949e)}
.cd-edit input,.cd-edit textarea{background:var(--bg,#0b0e11);color:var(--text,#eef1f2);border:1px solid var(--line,#30363d);border-radius:6px;padding:5px 7px;font:inherit}
.cd-colors{display:flex;gap:6px;flex-wrap:wrap}.cd-sw{width:24px;height:24px;border-radius:50%;border:2px solid transparent!important;padding:0!important}.cd-sw.on{border-color:#fff!important}.cd-sw.none{background:transparent;color:var(--muted,#8b949e);border:1px dashed var(--line,#30363d)!important}
.cd-preview{border:1px solid var(--line,#30363d);border-radius:8px;padding:6px 8px}.cd-preview ul{margin:4px 0;padding-left:16px}.cd-dim{color:var(--muted,#8b949e)}
.cd-empty{padding:16px;color:var(--muted,#8b949e)}
@media(max-width:760px){.conduite-dialog{width:100vw;height:100vh;border-radius:0}.cd-body{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto}.cd-edit{border-left:0;border-top:1px solid var(--line,#30363d);max-height:45vh}}

.cue-standby{font-size:10px;color:var(--muted);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 4px}.cue-standby.end{color:#e0a458}.smallbtn.go{font-weight:700;color:var(--ok,#7fd1a0)}

/* 3.3.22 · outil tracé optionnel */
.preview-overlay.path-tool-off .point{display:none}
.preview-overlay.path-tool-off{cursor:default}
#pathToolBtn.active{background:#d7b86a;color:#111}
.term-tabs .io-state.live{color:#9be29b}
