#layout { display: flex; gap: 12px; align-items: flex-start; padding: 8px; box-sizing: border-box; }

#stagewrap { position: relative; flex: 1 1 auto; min-width: 0; }
#stagewrap canvas { width: 100%; height: auto; border: 1px solid #1c1c1c; }
/* Preview overlay sits on top of the WebGL stage; it is the drag surface. */
#preview { position: absolute; inset: 0; }

#editor {
  flex: 0 0 320px;
  max-height: 100vh;
  overflow-y: auto;
  background: #111;
  border: 1px solid #1c1c1c;
  border-radius: 6px;
  padding: 10px;
}

.fx-panel { display: flex; flex-direction: column; gap: 6px; }
.fx-title { font-size: 14px; font-weight: 600; color: #eee; }
.fx-section { margin-top: 10px; font-weight: 600; color: #9ad; border-bottom: 1px solid #222; padding-bottom: 2px; }

.fx-ok { color: #6c6; font-size: 11px; }
.fx-err { color: #f66; font-size: 11px; white-space: pre-wrap; }

.fx-card {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 4px 8px;
  background: #161616;
  border: 1px solid #242424;
  border-radius: 5px;
  padding: 8px;
}
.fx-pts { grid-column: 1 / -1; font-size: 11px; color: #888; margin-top: 4px; }

.fx-field { display: flex; flex-direction: column; gap: 2px; font-size: 11px; color: #aaa; }
.fx-field input, .fx-field select {
  background: #0d0d0d; color: #eee; border: 1px solid #2a2a2a;
  border-radius: 3px; padding: 3px 5px; font: 12px system-ui; width: 100%; box-sizing: border-box;
}

button {
  background: #1d1d1d; color: #ddd; border: 1px solid #333;
  border-radius: 4px; padding: 4px 8px; cursor: pointer; font: 12px system-ui;
}
button:hover { background: #262626; }
.fx-del { grid-column: 1 / -1; margin-top: 4px; color: #f88; border-color: #4a2222; }
.fx-add { align-self: flex-start; }
.fx-io { display: flex; gap: 6px; margin-top: 12px; }

/* --- Composition (canvas resolution) panel --- */
.cmp-panel { margin-bottom: 18px; }
.cmp-presets { display: flex; flex-wrap: wrap; gap: 4px; }
.cmp-preset { padding: 3px 8px; }
.cmp-grid { grid-template-columns: 1fr 1fr; margin-top: 4px; }
.cmp-readout {
  font-size: 11px; color: #cd9; font-variant-numeric: tabular-nums;
  margin: 2px 0; letter-spacing: .02em;
}
.cmp-apply { color: #9d9; border-color: #224a22; align-self: flex-start; }

/* --- Kagora import / assign-IP panel --- */
.imp-panel { margin-bottom: 18px; }
.imp-banner { white-space: pre-wrap; margin-top: 4px; }
.imp-autofill { display: flex; gap: 6px; margin: 4px 0; }
.imp-base {
  flex: 1 1 auto; background: #0d0d0d; color: #eee; border: 1px solid #2a2a2a;
  border-radius: 3px; padding: 3px 5px; font: 12px system-ui; box-sizing: border-box;
}
.imp-row { grid-template-columns: 2fr 1fr; }
.imp-apply { color: #9d9; border-color: #224a22; }
.imp-cancel { color: #f88; border-color: #4a2222; }

/* --- Layer-stack panel --- */
.ly-panel { margin-bottom: 18px; }
.ly-hint { font-size: 10px; color: #777; margin: -2px 0 4px; }
.ly-card { display: block; }
.ly-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.ly-name { font-weight: 600; color: #9ad; font-size: 12px; }
.ly-btns { display: flex; gap: 3px; }
.ly-btns button { padding: 1px 6px; line-height: 1.4; min-width: 22px; }
.ly-btns button:disabled { opacity: .35; cursor: default; }

.ly-param .ly-pkey { display: flex; justify-content: space-between; }
.ly-readout { color: #cd9; font-variant-numeric: tabular-nums; }
.ly-param input[type=range] { width: 100%; accent-color: #9ad; }

.ly-fx { border: 1px solid #242424; border-radius: 4px; padding: 6px; margin: 4px 0; background: #121212; }
.ly-fxhead { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; }
.ly-fxname { color: #cba; font-size: 11px; }
.ly-rmfx { color: #f88; border-color: #4a2222; }
.ly-addfx { margin-top: 4px; }
.ly-addfx select {
  background: #0d0d0d; color: #eee; border: 1px solid #2a2a2a;
  border-radius: 3px; padding: 3px 5px; font: 12px system-ui; width: 100%; box-sizing: border-box;
}

/* Layer name as an inline editable field in the header. */
.ly-nameedit {
  flex: 1 1 auto; min-width: 0; margin-right: 6px;
  background: #0d0d0d; color: #9ad; font-weight: 600; font-size: 12px;
  border: 1px solid transparent; border-radius: 3px; padding: 2px 5px;
  font-family: system-ui; box-sizing: border-box;
}
.ly-nameedit:hover { border-color: #2a2a2a; }
.ly-nameedit:focus { border-color: #9ad; outline: none; background: #111; }

/* FX section labels: clip FX vs layer FX colour-coded to read the param split. */
.ly-fxlabel { grid-column: 1 / -1; }
.ly-fxlabel-clip { color: #cb9; }
.ly-fxlabel-layer { color: #9bd; }
.ly-fx-clip { border-color: #3a3320; }
.ly-fx-layer { border-color: #20303a; }

/* --- Clip deck (Resolume-style) --- */
.clip-deck {
  grid-column: 1 / -1;
  display: flex; flex-wrap: wrap; gap: 6px; margin: 2px 0 6px;
}
.clip-cell {
  position: relative; flex: 0 0 auto; width: 96px;
  background: #141414; border: 1px solid #2a2a2a; border-radius: 5px;
  padding: 6px 6px 4px; cursor: pointer; user-select: none;
  transition: border-color .12s, box-shadow .12s, background .12s;
}
.clip-cell:hover { background: #1a1a1a; border-color: #3a3a3a; }
.clip-name { font-size: 11px; color: #ddd; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.clip-gen { font-size: 10px; color: #888; margin-top: 1px; }
.clip-active {
  border-color: #6ad; background: #15212a;
  box-shadow: 0 0 0 1px #6ad, 0 0 8px rgba(102,170,221,.4);
}
.clip-active .clip-name { color: #cfe7ff; }
.clip-badge {
  position: absolute; top: 4px; right: 6px; font-size: 9px; color: #6ad;
  text-shadow: 0 0 4px rgba(102,170,221,.8);
}
.clip-aff { display: flex; gap: 3px; margin-top: 5px; }
.clip-aff button { padding: 0 5px; line-height: 1.5; min-width: 20px; font-size: 10px; }
.clip-aff button:disabled { opacity: .35; cursor: default; }
.clip-add { display: flex; flex-direction: column; gap: 4px; cursor: default; border-style: dashed; }
.clip-add:hover { background: #141414; }
.clip-add select {
  background: #0d0d0d; color: #eee; border: 1px solid #2a2a2a;
  border-radius: 3px; padding: 2px 4px; font: 11px system-ui; width: 100%; box-sizing: border-box;
}

/* Active-clip editor: the panel below the deck that edits the lit clip. */
.clip-editor {
  grid-column: 1 / -1; display: grid; grid-template-columns: 1fr 1fr; gap: 4px 8px;
  border: 1px solid #2a2a2a; border-radius: 5px; padding: 8px;
  margin: 4px 0 2px; background: #101418;
}
.clip-editor-head {
  grid-column: 1 / -1; font-size: 11px; color: #6ad; font-weight: 600;
  margin-bottom: 2px;
}
